dev-arm: Implement a SMMUv3 model
authorStanislaw Czerniawski <stacze01@arm.com>
Tue, 5 Mar 2019 10:27:56 +0000 (10:27 +0000)
committerGiacomo Travaglini <giacomo.travaglini@arm.com>
Thu, 6 Jun 2019 21:53:38 +0000 (21:53 +0000)
commit2574dc41a6b420f0101d0ecf2a3205091ef96940
treebea822f0b7c2794ae24e0328208de9cce5f27c37
parentf2be9f195c5aa226fa546e79c9acf95c8a800915
dev-arm: Implement a SMMUv3 model

This is an implementation of the SMMUv3 architecture.

What can it do?
- Single-stage and nested translation with 4k or 64k granule.  16k would
  be straightforward to add.
- Large pages are supported.
- Works with any gem5 device as long as it is issuing packets with a
  valid (Sub)StreamId

What it can't do?
- Fragment stage 1 page when the underlying stage 2 page is smaller.  S1
  page size > S2 page size is not supported
- Invalidations take zero time. This wouldn't be hard to fix.
- Checkpointing is not supported
- Stall/resume for faulting transactions is not supported

Additional contributors:
- Michiel W. van Tol <Michiel.VanTol@arm.com>
- Giacomo Travaglini <giacomo.travaglini@arm.com>

Change-Id: Ibc606fccd9199b2c1ba739c6335c846ffaa4d564
Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/19008
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
Tested-by: kokoro <noreply+kokoro@google.com>
22 files changed:
src/dev/arm/SConscript
src/dev/arm/SMMUv3.py [new file with mode: 0644]
src/dev/arm/amba.hh [new file with mode: 0644]
src/dev/arm/smmu_v3.cc [new file with mode: 0644]
src/dev/arm/smmu_v3.hh [new file with mode: 0644]
src/dev/arm/smmu_v3_caches.cc [new file with mode: 0644]
src/dev/arm/smmu_v3_caches.hh [new file with mode: 0644]
src/dev/arm/smmu_v3_cmdexec.cc [new file with mode: 0644]
src/dev/arm/smmu_v3_cmdexec.hh [new file with mode: 0644]
src/dev/arm/smmu_v3_defs.hh [new file with mode: 0644]
src/dev/arm/smmu_v3_events.cc [new file with mode: 0644]
src/dev/arm/smmu_v3_events.hh [new file with mode: 0644]
src/dev/arm/smmu_v3_ports.cc [new file with mode: 0644]
src/dev/arm/smmu_v3_ports.hh [new file with mode: 0644]
src/dev/arm/smmu_v3_proc.cc [new file with mode: 0644]
src/dev/arm/smmu_v3_proc.hh [new file with mode: 0644]
src/dev/arm/smmu_v3_ptops.cc [new file with mode: 0644]
src/dev/arm/smmu_v3_ptops.hh [new file with mode: 0644]
src/dev/arm/smmu_v3_slaveifc.cc [new file with mode: 0644]
src/dev/arm/smmu_v3_slaveifc.hh [new file with mode: 0644]
src/dev/arm/smmu_v3_transl.cc [new file with mode: 0644]
src/dev/arm/smmu_v3_transl.hh [new file with mode: 0644]