From 4ec3ccb4599d7dded9757701a82aea712b791cb0 Mon Sep 17 00:00:00 2001 From: Madhukar Pappireddy Date: Sun, 28 Feb 2021 14:01:34 -0600 Subject: [PATCH] Add documentation for SMMUv3 driver in Hafnium(SPM) Change-Id: I0b38c114fd2958d2b4040585611cafa132ccfd9c Signed-off-by: Madhukar Pappireddy --- docs/components/secure-partition-manager.rst | 112 +++++++++++++++++++ docs/resources/diagrams/MMU-600.png | Bin 0 -> 50836 bytes 2 files changed, 112 insertions(+) create mode 100644 docs/resources/diagrams/MMU-600.png diff --git a/docs/components/secure-partition-manager.rst b/docs/components/secure-partition-manager.rst index 9a65e6400..842345aa3 100644 --- a/docs/components/secure-partition-manager.rst +++ b/docs/components/secure-partition-manager.rst @@ -6,6 +6,8 @@ Secure Partition Manager Acronyms ======== ++--------+-----------------------------------+ +| DMA | Direct Memory Access | +--------+-----------------------------------+ | DTB | Device Tree Blob | +--------+-----------------------------------+ @@ -33,6 +35,8 @@ Acronyms +--------+-----------------------------------+ | PSA | Platform Security Architecture | +--------+-----------------------------------+ +| SMMU | System Memory Management Unit | ++--------+-----------------------------------+ | SP | Secure Partition | +--------+-----------------------------------+ | SPM | Secure Partition Manager | @@ -832,6 +836,114 @@ The register operation can either be an implementation-defined service call to the SPMC when the primary SP EC boots, or be supplied through the SP manifest. +Support for SMMUv3 in Hafnium +============================= + +An SMMU is analogous to an MMU in a CPU. It performs address translations for +Direct Memory Access (DMA) requests from system I/O devices. +The responsibilities of an SMMU include: + +- Translation: Incoming DMA requests are translated from bus address space to + system physical address space using translation tables compliant to + Armv8/Armv7 VMSA descriptor format. +- Protection: An I/O device can be prohibited from read, write access to a + memory region or allowed. +- Isolation: Traffic from each individial device can be independently managed. + The devices are differentiated from each other using unique translation + tables. + +The following diagram illustrates a typical SMMU IP integrated in a SoC with +several I/O devices along with Interconnect and Memory system. + +.. image:: ../resources/diagrams/MMU-600.png + +SMMU has several versions including SMMUv1, SMMUv2 and SMMUv3. Hafnium provides +support for SMMUv3 driver in both Normal and Secure World. A brief introduction +of SMMUv3 functionality and the corresponding software support in Hafnium is +provided here. + +SMMUv3 features +--------------- + +- SMMUv3 provides Stage1, Stage2 translation as well as nested (Stage1 + Stage2) + translation support. It can either bypass or abort incoming translations as + well. +- Traffic (memory transactions) from each upstream I/O peripheral device, + referred to as Stream, can be independently managed using a combination of + several memory based configuration structures. This allows the SMMUv3 to + support a large number of streams with each stream assigned to a unique + translation context. +- Support for Armv8.1 VMSA where the SMMU shares the translation tables with + a Processing Element. AArch32(LPAE) and AArch64 translation table format + are supported by SMMUv3. +- SMMUv3 offers non-secure stream support with secure stream support being + optional. Logically, SMMUv3 behaves as if there is an indepdendent SMMU + instance for secure and non-secure stream support. +- It also supports sub-streams to differentiate traffic from a virtualized + peripheral associated with a VM/SP. +- Additionally, SMMUv3.2 provides support for PEs implementing Armv8.4-A + extensions. Consequently, SPM depends on Secure EL2 support in SMMUv3.2 + for providing Secure Stage2 translation support to upstream peripheral + devices. + +SMMUv3 Programming Interfaces +----------------------------- + +SMMUv3 has three software interfaces that are used by the Hafnium driver to +configure the behaviour of SMMUv3 and manage the streams. + +- Memory based data strutures that provide unique translation context for + each stream. +- Memory based circular buffers for command queue and event queue. +- A large number of SMMU configuration registers that are memory mapped during + boot time by Hafnium driver. Except a few registers, all configuration + registers have independent secure and non-secure versions to configure the + behaviour of SMMUv3 for translation of secure and non-secure streams + respectively. + +Peripheral device manifest +-------------------------- + +Currently, SMMUv3 driver in Hafnium only supports dependent peripheral devices. +These devices are dependent on PE endpoint to initiate and receive memory +management transactions on their behalf. The acccess to the MMIO regions of +any such device is assigned to the endpoint during boot. Moreover, SMMUv3 driver +uses the same stage 2 translations for the device as those used by partition +manager on behalf of the PE endpoint. This ensures that the peripheral device +has the same visibility of the physical address space as the endpoint. The +device node of the corresponding partition manifest (refer to `[1]`_ section 3.2 +) must specify these additional properties for each peripheral device in the +system : + +- smmu-id: This field helps to identify the SMMU instance that this device is + upstream of. +- stream-ids: List of stream IDs assigned to this device. + +.. code:: shell + + smmuv3-testengine { + base-address = <0x00000000 0x2bfe0000>; + pages-count = <32>; + attributes = <0x3>; + smmu-id = <0>; + stream-ids = <0x0 0x1>; + interrupts = <0x2 0x3>, <0x4 0x5>; + exclusive-access; + }; + +SMMUv3 driver limitations +------------------------- + +The primary design goal for the Hafnium SMMU driver is to support secure +streams. + +- Currently, the driver only supports Stage2 translations. No support for + Stage1 or nested translations. +- Supports only AArch64 translation format. +- No support for features such as PCI Express (PASIDs, ATS, PRI), MSI, RAS, + Fault handling, Performance Monitor Extensions, Event Handling, MPAM. +- No support for independent peripheral devices. + References ========== diff --git a/docs/resources/diagrams/MMU-600.png b/docs/resources/diagrams/MMU-600.png new file mode 100644 index 0000000000000000000000000000000000000000..9cbc2437ee918cf48d3115aaf61a3408f9279d11 GIT binary patch literal 50836 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