• J
    iommu/arm-smmu-v3: Add support for Substream IDs · 87f42391
    Jean-Philippe Brucker 提交于
    At the moment, the SMMUv3 driver implements only one stage-1 or stage-2
    page directory per device. However SMMUv3 allows more than one address
    space for some devices, by providing multiple stage-1 page directories. In
    addition to the Stream ID (SID), that identifies a device, we can now have
    Substream IDs (SSID) identifying an address space. In PCIe, SID is called
    Requester ID (RID) and SSID is called Process Address-Space ID (PASID).
    A complete stage-1 walk goes through the context descriptor table:
    
          Stream tables       Ctx. Desc. tables       Page tables
            +--------+   ,------->+-------+   ,------->+-------+
            :        :   |        :       :   |        :       :
            +--------+   |        +-------+   |        +-------+
       SID->|  STE   |---'  SSID->|  CD   |---'  IOVA->|  PTE  |--> IPA
            +--------+            +-------+            +-------+
            :        :            :       :            :       :
            +--------+            +-------+            +-------+
    
    Rewrite arm_smmu_write_ctx_desc() to modify context descriptor table
    entries. To keep things simple we only implement one level of context
    descriptor tables here, but as with stream and page tables, an SSID can
    be split to index multiple levels of tables.
    Signed-off-by: NJean-Philippe Brucker <jean-philippe@linaro.org>
    Signed-off-by: NWill Deacon <will@kernel.org>
    87f42391
arm-smmu-v3.c 101.3 KB