// SPDX-License-Identifier: GPL-2.0-or-later /* * Derived from arch/powerpc/platforms/powernv/rng.c, which is: * Copyright 2013, Michael Ellerman, IBM Corporation. */ #define pr_fmt(fmt) "microwatt-rng: " fmt #include #include #include #include #include #define DARN_ERR 0xFFFFFFFFFFFFFFFFul static int microwatt_get_random_darn(unsigned long *v) { unsigned long val; /* Using DARN with L=1 - 64-bit conditioned random number */ asm volatile(PPC_DARN(%0, 1) : "=r"(val)); if (val == DARN_ERR) return 0; *v = val; return 1; } static __init int rng_init(void) { unsigned long val; int i; for (i = 0; i < 10; i++) { if (microwatt_get_random_darn(&val)) { ppc_md.get_random_seed = microwatt_get_random_darn; return 0; } } pr_warn("Unable to use DARN for get_random_seed()\n"); return -EIO; } machine_subsys_initcall(, rng_init);