ARM SMMU versions 1 and 2: Difference between revisions

[unchecked revision][unchecked revision]
Content deleted Content added
mNo edit summary
mNo edit summary
Line 5:
== Terminology: ==
* Just in general, the SMMU spec refers to DMA engines and MCUs on the chipset as being "upstream" from the SMMU and it refers to RAM as being "downstream" from the SMMU.
* The "Stream mapping table" is a term used to refer to the combined working of the SMMU_SMRn + SMMU_S2CRn registers. Do not confuse the SMMU_SMRn ("Stream **''match**''ing registers") with the umbrella term "Stream **''mapp**''ing registers".
* "Contexts" are synonymous with Intel's "domain" terminology used in the VT-d specification; they refer to a set of IO-page tables for translating IO-Addresses into output addresses on the bus/memory controller.
* Transactions: Any write to or read from the SMMU by any agent is an SMMU transaction.
Line 32:
* PASID translation is then chained into the standard translation flow to isolate the device's address accesses in the standard way that an IOMMU is normally used.
 
VT-d only supports PCI devices in its current form (at the time of writing) while SMMU supports multiple buses but leaves it up to the OEM implementation to determine how to map a bus technology's device IDs onto the identifier nomenclature ("StreamIDs") employed by the SMMU specification. For example, for the SMMU, an OEM is likely to map the 16-bit PCI Bus+Slot+Function onto the 15/16-bit StreamID space provided by the SMMU.
 
=== Secure/Non-secure mode split and SSD ===
Line 69:
Furthermore, if the OS intends to use Stream Indexing instead of Stream Matching, then the number of StreamIDs is further constrained by the number of SMMU_S2CRn registers available. The number of SMMU_S2CRn registers is directly determined by the number of SMMU_SMRn registers (Section 2.3.2, "Stream indexing": ''This means the maximum StreamID is determined by the number of implemented SMMU_S2CRns''). See [[#Stream Matching Registers]] for how to determine the number of SMMU_S2CRn registers by inferring it from the number of SMMU_SMRn regs.
 
The OS should determine the max number of StreamIDs based on the Stream Mapping technique it intends to use, and set up metadata accordingly.
 
=== Stream Matching Registers ===