On Thu, 21 Apr 2022 15:35:21 +0100 Diego Sueiro <diego.sueiro@xxxxxxx> wrote: Hi, > The virtio-rng is available from FVP_Base_RevC-2xAEMvA version 11.17, so add > the devicetree node to support it. The change looks good, although it probably deserves to mention the reason for keeping it "disabled" by default (older FVP versions not having the device, so they throw an SError on probe). But when testing it, I discovered that there is some problem with later kernels. It works fine up to v5.15, but breaks later on. I bisected it down to: ============= commit 9a4b612d675b03f7fc9fa1957ca399c8223f3954 Author: Laurent Vivier <lvivier@xxxxxxxxxx> Date: Thu Oct 28 12:11:11 2021 +0200 hwrng: virtio - always add a pending request If we ensure we have already some data available by enqueuing again the buffer once data are exhausted, we can return what we have without waiting for the device answer. ============= The effect is that any access to /dev/hwrng hangs, it looks like it's waiting for an interrupt to fire (core goes to WFI). The process reading the char dev can be Ctrl-C'ed, but there will be no output, and the interrupt counter in /proc/interrupts does not increase. It works fine with any kernel under QEMU, but definitely breaks the FVP usage (reverting that patch makes it work again on mainline). I didn't have a closer look yet (and have limited knowledge about the internals of virtio and virtio-rng in particular), but was wondering if someone could give a hint at what could be the issue or the direction to debug that? Cheers, Andre > Signed-off-by: Diego Sueiro <diego.sueiro@xxxxxxx> > --- > arch/arm64/boot/dts/arm/fvp-base-revc.dts | 3 ++- > arch/arm64/boot/dts/arm/rtsm_ve-motherboard-rs2.dtsi | 7 +++++++ > arch/arm64/boot/dts/arm/rtsm_ve-motherboard.dtsi | 2 +- > 3 files changed, 10 insertions(+), 2 deletions(-) > > diff --git a/arch/arm64/boot/dts/arm/fvp-base-revc.dts b/arch/arm64/boot/dts/arm/fvp-base-revc.dts > index 269b649934b5..a496e39e6204 100644 > --- a/arch/arm64/boot/dts/arm/fvp-base-revc.dts > +++ b/arch/arm64/boot/dts/arm/fvp-base-revc.dts > @@ -241,6 +241,7 @@ bus@8000000 { > <0 0 41 &gic 0 0 GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>, > <0 0 42 &gic 0 0 GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>, > <0 0 43 &gic 0 0 GIC_SPI 43 IRQ_TYPE_LEVEL_HIGH>, > - <0 0 44 &gic 0 0 GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>; > + <0 0 44 &gic 0 0 GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>, > + <0 0 46 &gic 0 0 GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>; > }; > }; > diff --git a/arch/arm64/boot/dts/arm/rtsm_ve-motherboard-rs2.dtsi b/arch/arm64/boot/dts/arm/rtsm_ve-motherboard-rs2.dtsi > index 33182d9e5826..1b6326514c97 100644 > --- a/arch/arm64/boot/dts/arm/rtsm_ve-motherboard-rs2.dtsi > +++ b/arch/arm64/boot/dts/arm/rtsm_ve-motherboard-rs2.dtsi > @@ -21,6 +21,13 @@ virtio-net@150000 { > reg = <0x150000 0x200>; > interrupts = <44>; > }; > + > + virtio-rng@200000 { > + compatible = "virtio,mmio"; > + reg = <0x200000 0x200>; > + interrupts = <46>; > + status = "disabled"; > + }; > }; > }; > }; > diff --git a/arch/arm64/boot/dts/arm/rtsm_ve-motherboard.dtsi b/arch/arm64/boot/dts/arm/rtsm_ve-motherboard.dtsi > index 5f6cab668aa0..a999e7f52d8b 100644 > --- a/arch/arm64/boot/dts/arm/rtsm_ve-motherboard.dtsi > +++ b/arch/arm64/boot/dts/arm/rtsm_ve-motherboard.dtsi > @@ -110,7 +110,7 @@ iofpga-bus@300000000 { > compatible = "simple-bus"; > #address-cells = <1>; > #size-cells = <1>; > - ranges = <0 3 0 0x200000>; > + ranges = <0 3 0 0x210000>; > > v2m_sysreg: sysreg@10000 { > compatible = "arm,vexpress-sysreg";