diff mbox series

hw/arm/smmuv3: Fix device reset

Message ID 20220202111602.627429-1-eric.auger@redhat.com (mailing list archive)
State New, archived
Headers show
Series hw/arm/smmuv3: Fix device reset | expand

Commit Message

Eric Auger Feb. 2, 2022, 11:16 a.m. UTC
We currently miss a bunch of register resets in the device reset
function. This sometimes prevents the guest from rebooting after
a system_reset (with virtio-blk-pci). For instance, we may get
the following errors:

invalid STE
smmuv3-iommu-memory-region-0-0 translation failed for iova=0x13a9d2000(SMMU_EVT_C_BAD_STE)
Invalid read at addr 0x13A9D2000, size 2, region '(null)', reason: rejected
invalid STE
smmuv3-iommu-memory-region-0-0 translation failed for iova=0x13a9d2000(SMMU_EVT_C_BAD_STE)
Invalid write at addr 0x13A9D2000, size 2, region '(null)', reason: rejected
invalid STE

Signed-off-by: Eric Auger <eric.auger@redhat.com>
Fixes: 10a83cb988 ("hw/arm/smmuv3: Skeleton")
---
 hw/arm/smmuv3.c | 6 ++++++
 1 file changed, 6 insertions(+)

Comments

Peter Maydell Feb. 7, 2022, 5:28 p.m. UTC | #1
On Wed, 2 Feb 2022 at 11:16, Eric Auger <eric.auger@redhat.com> wrote:
>
> We currently miss a bunch of register resets in the device reset
> function. This sometimes prevents the guest from rebooting after
> a system_reset (with virtio-blk-pci). For instance, we may get
> the following errors:
>
> invalid STE
> smmuv3-iommu-memory-region-0-0 translation failed for iova=0x13a9d2000(SMMU_EVT_C_BAD_STE)
> Invalid read at addr 0x13A9D2000, size 2, region '(null)', reason: rejected
> invalid STE
> smmuv3-iommu-memory-region-0-0 translation failed for iova=0x13a9d2000(SMMU_EVT_C_BAD_STE)
> Invalid write at addr 0x13A9D2000, size 2, region '(null)', reason: rejected
> invalid STE
>
> Signed-off-by: Eric Auger <eric.auger@redhat.com>
> Fixes: 10a83cb988 ("hw/arm/smmuv3: Skeleton")
> ---



Applied to target-arm.next, thanks.

-- PMM
diff mbox series

Patch

diff --git a/hw/arm/smmuv3.c b/hw/arm/smmuv3.c
index 3b43368be0f..674623aabea 100644
--- a/hw/arm/smmuv3.c
+++ b/hw/arm/smmuv3.c
@@ -278,6 +278,12 @@  static void smmuv3_init_regs(SMMUv3State *s)
     s->features = 0;
     s->sid_split = 0;
     s->aidr = 0x1;
+    s->cr[0] = 0;
+    s->cr0ack = 0;
+    s->irq_ctrl = 0;
+    s->gerror = 0;
+    s->gerrorn = 0;
+    s->statusr = 0;
 }
 
 static int smmu_get_ste(SMMUv3State *s, dma_addr_t addr, STE *buf,