hw/riscv: virt: pass random seed to fdt
If the FDT contains /chosen/rng-seed, then the Linux RNG will use it to initialize early. Set this using the usual guest random number generation function. This is confirmed to successfully initialize the RNG on Linux 5.19-rc2. Cc: Alistair Francis <alistair.francis@wdc.com> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com> Reviewed-by: Bin Meng <bmeng.cn@gmail.com> Message-Id: <20220613115810.178210-1-Jason@zx2c4.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
6d00ffad4e
commit
e4b4f0b71c
@ -21,6 +21,7 @@
|
|||||||
#include "qemu/osdep.h"
|
#include "qemu/osdep.h"
|
||||||
#include "qemu/units.h"
|
#include "qemu/units.h"
|
||||||
#include "qemu/error-report.h"
|
#include "qemu/error-report.h"
|
||||||
|
#include "qemu/guest-random.h"
|
||||||
#include "qapi/error.h"
|
#include "qapi/error.h"
|
||||||
#include "hw/boards.h"
|
#include "hw/boards.h"
|
||||||
#include "hw/loader.h"
|
#include "hw/loader.h"
|
||||||
@ -998,6 +999,7 @@ static void create_fdt(RISCVVirtState *s, const MemMapEntry *memmap,
|
|||||||
MachineState *mc = MACHINE(s);
|
MachineState *mc = MACHINE(s);
|
||||||
uint32_t phandle = 1, irq_mmio_phandle = 1, msi_pcie_phandle = 1;
|
uint32_t phandle = 1, irq_mmio_phandle = 1, msi_pcie_phandle = 1;
|
||||||
uint32_t irq_pcie_phandle = 1, irq_virtio_phandle = 1;
|
uint32_t irq_pcie_phandle = 1, irq_virtio_phandle = 1;
|
||||||
|
uint8_t rng_seed[32];
|
||||||
|
|
||||||
if (mc->dtb) {
|
if (mc->dtb) {
|
||||||
mc->fdt = load_device_tree(mc->dtb, &s->fdt_size);
|
mc->fdt = load_device_tree(mc->dtb, &s->fdt_size);
|
||||||
@ -1046,6 +1048,10 @@ update_bootargs:
|
|||||||
if (cmdline && *cmdline) {
|
if (cmdline && *cmdline) {
|
||||||
qemu_fdt_setprop_string(mc->fdt, "/chosen", "bootargs", cmdline);
|
qemu_fdt_setprop_string(mc->fdt, "/chosen", "bootargs", cmdline);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Pass seed to RNG */
|
||||||
|
qemu_guest_getrandom_nofail(rng_seed, sizeof(rng_seed));
|
||||||
|
qemu_fdt_setprop(mc->fdt, "/chosen", "rng-seed", rng_seed, sizeof(rng_seed));
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline DeviceState *gpex_pcie_init(MemoryRegion *sys_mem,
|
static inline DeviceState *gpex_pcie_init(MemoryRegion *sys_mem,
|
||||||
|
Loading…
Reference in New Issue
Block a user