18c2ecf20Sopenharmony_ci* QCOM IOMMU v1 Implementation
28c2ecf20Sopenharmony_ci
38c2ecf20Sopenharmony_ciQualcomm "B" family devices which are not compatible with arm-smmu have
48c2ecf20Sopenharmony_cia similar looking IOMMU but without access to the global register space,
58c2ecf20Sopenharmony_ciand optionally requiring additional configuration to route context irqs
68c2ecf20Sopenharmony_cito non-secure vs secure interrupt line.
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci** Required properties:
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_ci- compatible       : Should be one of:
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ci                        "qcom,msm8916-iommu"
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_ci                     Followed by "qcom,msm-iommu-v1".
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_ci- clock-names      : Should be a pair of "iface" (required for IOMMUs
178c2ecf20Sopenharmony_ci                     register group access) and "bus" (required for
188c2ecf20Sopenharmony_ci                     the IOMMUs underlying bus access).
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_ci- clocks           : Phandles for respective clocks described by
218c2ecf20Sopenharmony_ci                     clock-names.
228c2ecf20Sopenharmony_ci
238c2ecf20Sopenharmony_ci- #address-cells   : must be 1.
248c2ecf20Sopenharmony_ci
258c2ecf20Sopenharmony_ci- #size-cells      : must be 1.
268c2ecf20Sopenharmony_ci
278c2ecf20Sopenharmony_ci- #iommu-cells     : Must be 1.  Index identifies the context-bank #.
288c2ecf20Sopenharmony_ci
298c2ecf20Sopenharmony_ci- ranges           : Base address and size of the iommu context banks.
308c2ecf20Sopenharmony_ci
318c2ecf20Sopenharmony_ci- qcom,iommu-secure-id  : secure-id.
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_ci- List of sub-nodes, one per translation context bank.  Each sub-node
348c2ecf20Sopenharmony_ci  has the following required properties:
358c2ecf20Sopenharmony_ci
368c2ecf20Sopenharmony_ci  - compatible     : Should be one of:
378c2ecf20Sopenharmony_ci        - "qcom,msm-iommu-v1-ns"  : non-secure context bank
388c2ecf20Sopenharmony_ci        - "qcom,msm-iommu-v1-sec" : secure context bank
398c2ecf20Sopenharmony_ci  - reg            : Base address and size of context bank within the iommu
408c2ecf20Sopenharmony_ci  - interrupts     : The context fault irq.
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ci** Optional properties:
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_ci- reg              : Base address and size of the SMMU local base, should
458c2ecf20Sopenharmony_ci                     be only specified if the iommu requires configuration
468c2ecf20Sopenharmony_ci                     for routing of context bank irq's to secure vs non-
478c2ecf20Sopenharmony_ci                     secure lines.  (Ie. if the iommu contains secure
488c2ecf20Sopenharmony_ci                     context banks)
498c2ecf20Sopenharmony_ci
508c2ecf20Sopenharmony_ci
518c2ecf20Sopenharmony_ci** Examples:
528c2ecf20Sopenharmony_ci
538c2ecf20Sopenharmony_ci	apps_iommu: iommu@1e20000 {
548c2ecf20Sopenharmony_ci		#address-cells = <1>;
558c2ecf20Sopenharmony_ci		#size-cells = <1>;
568c2ecf20Sopenharmony_ci		#iommu-cells = <1>;
578c2ecf20Sopenharmony_ci		compatible = "qcom,msm8916-iommu", "qcom,msm-iommu-v1";
588c2ecf20Sopenharmony_ci		ranges = <0 0x1e20000 0x40000>;
598c2ecf20Sopenharmony_ci		reg = <0x1ef0000 0x3000>;
608c2ecf20Sopenharmony_ci		clocks = <&gcc GCC_SMMU_CFG_CLK>,
618c2ecf20Sopenharmony_ci			 <&gcc GCC_APSS_TCU_CLK>;
628c2ecf20Sopenharmony_ci		clock-names = "iface", "bus";
638c2ecf20Sopenharmony_ci		qcom,iommu-secure-id = <17>;
648c2ecf20Sopenharmony_ci
658c2ecf20Sopenharmony_ci		// mdp_0:
668c2ecf20Sopenharmony_ci		iommu-ctx@4000 {
678c2ecf20Sopenharmony_ci			compatible = "qcom,msm-iommu-v1-ns";
688c2ecf20Sopenharmony_ci			reg = <0x4000 0x1000>;
698c2ecf20Sopenharmony_ci			interrupts = <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>;
708c2ecf20Sopenharmony_ci		};
718c2ecf20Sopenharmony_ci
728c2ecf20Sopenharmony_ci		// venus_ns:
738c2ecf20Sopenharmony_ci		iommu-ctx@5000 {
748c2ecf20Sopenharmony_ci			compatible = "qcom,msm-iommu-v1-sec";
758c2ecf20Sopenharmony_ci			reg = <0x5000 0x1000>;
768c2ecf20Sopenharmony_ci			interrupts = <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>;
778c2ecf20Sopenharmony_ci		};
788c2ecf20Sopenharmony_ci	};
798c2ecf20Sopenharmony_ci
808c2ecf20Sopenharmony_ci	gpu_iommu: iommu@1f08000 {
818c2ecf20Sopenharmony_ci		#address-cells = <1>;
828c2ecf20Sopenharmony_ci		#size-cells = <1>;
838c2ecf20Sopenharmony_ci		#iommu-cells = <1>;
848c2ecf20Sopenharmony_ci		compatible = "qcom,msm8916-iommu", "qcom,msm-iommu-v1";
858c2ecf20Sopenharmony_ci		ranges = <0 0x1f08000 0x10000>;
868c2ecf20Sopenharmony_ci		clocks = <&gcc GCC_SMMU_CFG_CLK>,
878c2ecf20Sopenharmony_ci			 <&gcc GCC_GFX_TCU_CLK>;
888c2ecf20Sopenharmony_ci		clock-names = "iface", "bus";
898c2ecf20Sopenharmony_ci		qcom,iommu-secure-id = <18>;
908c2ecf20Sopenharmony_ci
918c2ecf20Sopenharmony_ci		// gfx3d_user:
928c2ecf20Sopenharmony_ci		iommu-ctx@1000 {
938c2ecf20Sopenharmony_ci			compatible = "qcom,msm-iommu-v1-ns";
948c2ecf20Sopenharmony_ci			reg = <0x1000 0x1000>;
958c2ecf20Sopenharmony_ci			interrupts = <GIC_SPI 241 IRQ_TYPE_LEVEL_HIGH>;
968c2ecf20Sopenharmony_ci		};
978c2ecf20Sopenharmony_ci
988c2ecf20Sopenharmony_ci		// gfx3d_priv:
998c2ecf20Sopenharmony_ci		iommu-ctx@2000 {
1008c2ecf20Sopenharmony_ci			compatible = "qcom,msm-iommu-v1-ns";
1018c2ecf20Sopenharmony_ci			reg = <0x2000 0x1000>;
1028c2ecf20Sopenharmony_ci			interrupts = <GIC_SPI 242 IRQ_TYPE_LEVEL_HIGH>;
1038c2ecf20Sopenharmony_ci		};
1048c2ecf20Sopenharmony_ci	};
1058c2ecf20Sopenharmony_ci
1068c2ecf20Sopenharmony_ci	...
1078c2ecf20Sopenharmony_ci
1088c2ecf20Sopenharmony_ci	venus: video-codec@1d00000 {
1098c2ecf20Sopenharmony_ci		...
1108c2ecf20Sopenharmony_ci		iommus = <&apps_iommu 5>;
1118c2ecf20Sopenharmony_ci	};
1128c2ecf20Sopenharmony_ci
1138c2ecf20Sopenharmony_ci	mdp: mdp@1a01000 {
1148c2ecf20Sopenharmony_ci		...
1158c2ecf20Sopenharmony_ci		iommus = <&apps_iommu 4>;
1168c2ecf20Sopenharmony_ci	};
1178c2ecf20Sopenharmony_ci
1188c2ecf20Sopenharmony_ci	gpu@1c00000 {
1198c2ecf20Sopenharmony_ci		...
1208c2ecf20Sopenharmony_ci		iommus = <&gpu_iommu 1>, <&gpu_iommu 2>;
1218c2ecf20Sopenharmony_ci	};
122