1*4882a593Smuzhiyun* QCOM IOMMU 2*4882a593Smuzhiyun 3*4882a593SmuzhiyunThe MSM IOMMU is an implementation compatible with the ARM VMSA short 4*4882a593Smuzhiyundescriptor page tables. It provides address translation for bus masters outside 5*4882a593Smuzhiyunof the CPU, each connected to the IOMMU through a port called micro-TLB. 6*4882a593Smuzhiyun 7*4882a593SmuzhiyunRequired Properties: 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun - compatible: Must contain "qcom,apq8064-iommu". 10*4882a593Smuzhiyun - reg: Base address and size of the IOMMU registers. 11*4882a593Smuzhiyun - interrupts: Specifiers for the MMU fault interrupts. For instances that 12*4882a593Smuzhiyun support secure mode two interrupts must be specified, for non-secure and 13*4882a593Smuzhiyun secure mode, in that order. For instances that don't support secure mode a 14*4882a593Smuzhiyun single interrupt must be specified. 15*4882a593Smuzhiyun - #iommu-cells: The number of cells needed to specify the stream id. This 16*4882a593Smuzhiyun is always 1. 17*4882a593Smuzhiyun - qcom,ncb: The total number of context banks in the IOMMU. 18*4882a593Smuzhiyun - clocks : List of clocks to be used during SMMU register access. See 19*4882a593Smuzhiyun Documentation/devicetree/bindings/clock/clock-bindings.txt 20*4882a593Smuzhiyun for information about the format. For each clock specified 21*4882a593Smuzhiyun here, there must be a corresponding entry in clock-names 22*4882a593Smuzhiyun (see below). 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun - clock-names : List of clock names corresponding to the clocks specified in 25*4882a593Smuzhiyun the "clocks" property (above). 26*4882a593Smuzhiyun Should be "smmu_pclk" for specifying the interface clock 27*4882a593Smuzhiyun required for iommu's register accesses. 28*4882a593Smuzhiyun Should be "smmu_clk" for specifying the functional clock 29*4882a593Smuzhiyun required by iommu for bus accesses. 30*4882a593Smuzhiyun 31*4882a593SmuzhiyunEach bus master connected to an IOMMU must reference the IOMMU in its device 32*4882a593Smuzhiyunnode with the following property: 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun - iommus: A reference to the IOMMU in multiple cells. The first cell is a 35*4882a593Smuzhiyun phandle to the IOMMU and the second cell is the stream id. 36*4882a593Smuzhiyun A single master device can be connected to more than one iommu 37*4882a593Smuzhiyun and multiple contexts in each of the iommu. So multiple entries 38*4882a593Smuzhiyun are required to list all the iommus and the stream ids that the 39*4882a593Smuzhiyun master is connected to. 40*4882a593Smuzhiyun 41*4882a593SmuzhiyunExample: mdp iommu and its bus master 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun mdp_port0: iommu@7500000 { 44*4882a593Smuzhiyun compatible = "qcom,apq8064-iommu"; 45*4882a593Smuzhiyun #iommu-cells = <1>; 46*4882a593Smuzhiyun clock-names = 47*4882a593Smuzhiyun "smmu_pclk", 48*4882a593Smuzhiyun "smmu_clk"; 49*4882a593Smuzhiyun clocks = 50*4882a593Smuzhiyun <&mmcc SMMU_AHB_CLK>, 51*4882a593Smuzhiyun <&mmcc MDP_AXI_CLK>; 52*4882a593Smuzhiyun reg = <0x07500000 0x100000>; 53*4882a593Smuzhiyun interrupts = 54*4882a593Smuzhiyun <GIC_SPI 63 0>, 55*4882a593Smuzhiyun <GIC_SPI 64 0>; 56*4882a593Smuzhiyun qcom,ncb = <2>; 57*4882a593Smuzhiyun }; 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun mdp: qcom,mdp@5100000 { 60*4882a593Smuzhiyun compatible = "qcom,mdp"; 61*4882a593Smuzhiyun ... 62*4882a593Smuzhiyun iommus = <&mdp_port0 0 63*4882a593Smuzhiyun &mdp_port0 2>; 64*4882a593Smuzhiyun }; 65