• J
    iommu/arm-smmu-v3: Add support for Substream IDs · e91647d1
    Jean-Philippe Brucker 提交于
    hulk inclusion
    category: feature
    bugzilla: 14369
    CVE: NA
    -------------------
    
    At the moment, the SMMUv3 driver offers only one stage-1 or stage-2
    address space to each device. SMMUv3 allows to associate multiple address
    spaces per device. In addition to the Stream ID (SID), that identifies a
    device, we can now have Substream IDs (SSID) identifying an address space.
    In PCIe lingo, SID is called Requester ID (RID) and SSID is called Process
    Address-Space ID (PASID).
    
    Prepare the driver for SSID support, by adding context descriptor tables
    in STEs (previously a single static context descriptor). A complete
    stage-1 walk is now performed like this by the SMMU:
    
          Stream tables          Ctx. tables          Page tables
            +--------+   ,------->+-------+   ,------->+-------+
            :        :   |        :       :   |        :       :
            +--------+   |        +-------+   |        +-------+
       SID->|  STE   |---'  SSID->|  CD   |---'  IOVA->|  PTE  |--> IPA
            +--------+            +-------+            +-------+
            :        :            :       :            :       :
            +--------+            +-------+            +-------+
    
    We only implement one level of context descriptor table for now, but as
    with stream and page tables, an SSID can be split to target multiple
    levels of tables.
    
    In all stream table entries, we set S1DSS=SSID0 mode, making translations
    without an ssid use context descriptor 0.
    Signed-off-by: NJean-Philippe Brucker <jean-philippe.brucker@arm.com>
    Signed-off-by: NFang Lijun <fanglijun3@huawei.com>
    Reviewed-by: NHanjun Guo <guohanjun@huawei.com>
    Reviewed-by: NZhen Lei <thunder.leizhen@huawei.com>
    Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
    e91647d1
arm-smmu-v3.c 80.7 KB