xref: /OK3568_Linux_fs/kernel/Documentation/devicetree/bindings/iommu/msm,iommu-v0.txt (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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