All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-07-26 11:28 ` Cho KyongHo
  0 siblings, 0 replies; 65+ messages in thread
From: Cho KyongHo @ 2013-07-26 11:28 UTC (permalink / raw)
  To: 'Linux ARM Kernel', 'Linux IOMMU',
	'Linux Kernel', 'Linux Samsung SOC'
  Cc: 'Hyunwoong Kim', 'Joerg Roedel',
	'Kukjin Kim', 'Prathyush', 'Rahul Sharma',
	'Subash Patel', 'Keyyoung Park',
	'Grant Grundler', 'Antonios Motakis',
	kvmarm, 'Sachin Kamat'

Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
---
 .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
 arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
 arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
 arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
 arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
 5 files changed, 617 insertions(+), 0 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt

diff --git a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
new file mode 100644
index 0000000..92f0a33
--- /dev/null
+++ b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
@@ -0,0 +1,103 @@
+Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management Unit)
+
+Samsung's Exynos architecture contains System MMU that enables scattered
+physical memory chunks visible as a contiguous region to DMA-capable peripheral
+devices like MFC, FIMC, FIMD, GScaler, FIMC-IS and so forth.
+
+System MMU is a sort of IOMMU and support identical translation table format to
+ARMv7 translation tables with minimum set of page properties including access
+permissions, shareability and security protection. In addition, System MMU has
+another capabilities like L2 TLB or block-fetch buffers to minimize translation
+latency.
+
+A System MMU is dedicated to a single master peripheral device.  Thus, it is
+important to specify the correct System MMU in the device node of its master
+device. Whereas a System MMU is dedicated to a master device, the master device
+may have more than one System MMU.
+
+Required properties:
+- compatible: Should be "samsung,exynos4210-sysmmu"
+- reg: A tuple of base address and size of System MMU registers.
+- interrupt-parent: The phandle of the interrupt controller of System MMU
+- interrupts: A tuple of numbers that indicates the interrupt source.
+- clock-names: Should be "sysmmu" if the System MMU is needed to gate its clock.
+               Please refer to the following documents:
+	       Documentation/devicetree/bindings/clock/clock-bindings.txt
+	       Documentation/devicetree/bindings/clock/exynos4-clock.txt
+	       Documentation/devicetree/bindings/clock/exynos5250-clock.txt
+	       Optional "master" if the clock to the System MMU is gated by
+	       another gate clock other than "sysmmu". The System MMU driver
+	       sets "master" the parent of "sysmmu".
+	       Exynos4 SoCs, there needs no "master" clocks.
+	       Exynos5 SoCs, some System MMUs must have "master" clocks.
+- clocks: Required if the System MMU is needed to gate its clock.
+	  Please refer to the documents listed above.
+- samsung,power-domain: Required if the System MMU is needed to gate its power.
+	  Please refer to the following document:
+	  Documentation/devicetree/bindings/arm/exynos/power_domain.txt
+
+Required properties for the master peripheral devices:
+- iommu: phandles to the System MMUs of the device
+
+Examples:
+A System MMU is dedicated to a single master device.
+	gsc_0:  gsc@0x13e00000 {
+		compatible = "samsung,exynos5-gsc";
+		reg = <0x13e00000 0x1000>;
+		interrupts = <0 85 0>;
+		samsung,power-domain = <&pd_gsc>;
+		clocks = <&clock 256>;
+		clock-names = "gscl";
+		iommu = <&sysmmu_gsc1>;
+	};
+
+	sysmmu_gsc0: sysmmu@13E80000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x13E80000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-gsc0";
+		interrupts = <2 0>;
+		clock-names = "sysmmu", "master";
+		clocks = <&clock 262>, <&clock 256>;
+		samsung,power-domain = <&pd_gsc>;
+		status = "ok";
+	};
+
+MFC has 2 System MMUs for each port that MFC is attached. Thus it seems natural
+to define 2 System MMUs for each port of the MFC:
+
+	mfc: codec@13400000 {
+		compatible = "samsung,mfc-v5";
+		reg = <0x13400000 0x10000>;
+		interrupts = <0 94 0>;
+		samsung,power-domain = <&pd_mfc>;
+		clocks = <&clock 170>, <&clock 273>;
+		clock-names = "sclk_mfc", "mfc";
+		status = "ok";
+		iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
+	};
+
+	sysmmu_mfc_l: sysmmu@13620000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x13620000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-mfc-l";
+		interrupts = <5 5>;
+		clock-names = "sysmmu";
+		clocks = <&clock 274>;
+		samsung,power-domain = <&pd_mfc>;
+		status = "ok";
+	};
+
+	sysmmu_mfc_r: sysmmu@13630000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x13630000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-mfc-r";
+		interrupts = <5 6>;
+		clock-names = "sysmmu";
+		clocks = <&clock 275>;
+		samsung,power-domain = <&pd_mfc>;
+		status = "ok";
+	};
+
diff --git a/arch/arm/boot/dts/exynos4.dtsi b/arch/arm/boot/dts/exynos4.dtsi
index 359694c..ba74ee8 100644
--- a/arch/arm/boot/dts/exynos4.dtsi
+++ b/arch/arm/boot/dts/exynos4.dtsi
@@ -161,6 +161,7 @@
 		interrupts = <0 94 0>;
 		samsung,power-domain = <&pd_mfc>;
 		status = "disabled";
+		iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
 	};
 
 	serial@13800000 {
@@ -395,5 +396,126 @@
 		clock-names = "sclk_fimd", "fimd";
 		samsung,power-domain = <&pd_lcd0>;
 		status = "disabled";
+		iommu = <&sysmmu_fimd0>;
+	};
+
+	sysmmu_mfc_l: sysmmu@13620000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x13620000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-mfc-l";
+		interrupts = <5 5>;
+		clock-names = "sysmmu";
+		clocks = <&clock 274>;
+		samsung,power-domain = <&pd_mfc>;
+		status = "ok";
+	};
+
+	sysmmu_mfc_r: sysmmu@13630000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x13630000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-mfc-r";
+		interrupts = <5 6>;
+		clock-names = "sysmmu";
+		clocks = <&clock 275>;
+		samsung,power-domain = <&pd_mfc>;
+		status = "ok";
+	};
+
+	sysmmu_tv: sysmmu@13E20000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x13E20000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-tv";
+		interrupts = <5 4>;
+		clock-names = "sysmmu";
+		clocks = <&clock 272>;
+		samsung,power-domain = <&pd_tv>;
+		status = "ok";
+	};
+
+	sysmmu_fimc0: sysmmu@11A20000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x11A20000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc0";
+		interrupts = <4 2>;
+		clock-names = "sysmmu";
+		clocks = <&clock 263>;
+		samsung,power-domain = <&pd_cam>;
+		status = "ok";
+	};
+
+	sysmmu_fimc1: sysmmu@11A30000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x11A30000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc1";
+		interrupts = <4 3>;
+		clock-names = "sysmmu";
+		clocks = <&clock 264>;
+		samsung,power-domain = <&pd_cam>;
+		status = "ok";
+	};
+
+	sysmmu_fimc2: sysmmu@11A40000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x11A40000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc2";
+		interrupts = <4 4>;
+		clock-names = "sysmmu";
+		clocks = <&clock 265>;
+		samsung,power-domain = <&pd_cam>;
+		status = "ok";
+	};
+
+	sysmmu_fimc3: sysmmu@11A50000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x11A50000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc3";
+		interrupts = <4 5>;
+		clock-names = "sysmmu";
+		clocks = <&clock 266>;
+		samsung,power-domain = <&pd_cam>;
+		status = "ok";
+	};
+
+	sysmmu_jpeg: sysmmu@11A60000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x11A60000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-jpeg";
+		interrupts = <4 6>;
+		clock-names = "sysmmu";
+		clocks = <&clock 267>;
+		samsung,power-domain = <&pd_cam>;
+		status = "ok";
+	};
+
+	sysmmu_rotator: sysmmu@12A30000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x12A30000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-rotator";
+		interrupts = <5 0>;
+		clock-names = "sysmmu";
+		clocks = <&clock 281>;
+		samsung,power-domain = <&pd_lcd0>;
+		status = "ok";
+	};
+
+	sysmmu_fimd0: sysmmu@11E20000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x11E20000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimd0";
+		interrupts = <5 2>;
+		clock-names = "sysmmu";
+		clocks = <&clock 287>;
+		samsung,power-domain = <&pd_lcd0>;
+		status = "ok";
 	};
 };
diff --git a/arch/arm/boot/dts/exynos4210.dtsi b/arch/arm/boot/dts/exynos4210.dtsi
index 54710de..09b13da 100644
--- a/arch/arm/boot/dts/exynos4210.dtsi
+++ b/arch/arm/boot/dts/exynos4210.dtsi
@@ -119,5 +119,30 @@
 		reg = <0x12800000 0x1000>;
 		interrupts = <0 89 0>;
 		status = "disabled";
+		iommu = <&sysmmu_g2d>;
+	};
+
+	sysmmu_g2d: sysmmu@12A20000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x12A20000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-g2d";
+		interrupts = <4 7>;
+		clock-names = "sysmmu";
+		clocks = <&clock 280>;
+		samsung,power-domain = <&pd_lcd0>;
+		status = "ok";
+	};
+
+	sysmmu_fimd1: sysmmu@12220000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimd1";
+		reg = <0x12220000 0x1000>;
+		interrupts = <5 3>;
+		clock-names = "sysmmu";
+		clocks = <&clock 291>;
+		samsung,power-domain = <&pd_lcd1>;
+		status = "ok";
 	};
 };
diff --git a/arch/arm/boot/dts/exynos4x12.dtsi b/arch/arm/boot/dts/exynos4x12.dtsi
index e3380a7..681db32 100644
--- a/arch/arm/boot/dts/exynos4x12.dtsi
+++ b/arch/arm/boot/dts/exynos4x12.dtsi
@@ -79,4 +79,80 @@
 		interrupts = <0 89 0>;
 		status = "disabled";
 	};
+
+	sysmmu_g2d: sysmmu@10A40000{
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x10A40000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-g2d";
+		interrupts = <4 7>;
+		clock-names = "sysmmu";
+		status = "ok";
+	};
+
+	sysmmu_fimc_isp: sysmmu@12260000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x12260000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_isp";
+		interrupts = <16 2>;
+		clock-names = "sysmmu";
+		clocks = <&clock 362>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_drc: sysmmu@12270000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x12270000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_drc";
+		interrupts = <16 3>;
+		clock-names = "sysmmu";
+		clocks = <&clock 363>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_fd: sysmmu@122A0000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x122A0000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_fd";
+		interrupts = <16 4>;
+		clock-names = "sysmmu";
+		clocks = <&clock 364>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_mcuctl: sysmmu@122B0000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x122B0000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_mcuctl";
+		interrupts = <16 5>;
+		clock-names = "sysmmu";
+		clocks = <&clock 376>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_lite0: sysmmu@123B0000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x123B0000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_lite0";
+		interrupts = <16 0>;
+		clock-names = "sysmmu";
+		clocks = <&clock 366>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_lite1: sysmmu@123C0000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x123C0000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_lite1";
+		interrupts = <16 1>;
+		clock-names = "sysmmu";
+		clocks = <&clock 365>;
+		status = "ok";
+	};
 };
diff --git a/arch/arm/boot/dts/exynos5250.dtsi b/arch/arm/boot/dts/exynos5250.dtsi
index fc9fb3d..130d23d 100644
--- a/arch/arm/boot/dts/exynos5250.dtsi
+++ b/arch/arm/boot/dts/exynos5250.dtsi
@@ -66,6 +66,16 @@
 		reg = <0x10044040 0x20>;
 	};
 
+	pd_isp: mfc-power-domain@0x10044020 {
+		compatible = "samsung,exynos4210-pd";
+		reg = <0x10044020 0x20>;
+	};
+
+	pd_disp1: mfc-power-domain@0x100440A0 {
+		compatible = "samsung,exynos4210-pd";
+		reg = <0x100440A0 0x20>;
+	};
+
 	clock: clock-controller@0x10010000 {
 		compatible = "samsung,exynos5250-clock";
 		reg = <0x10010000 0x30000>;
@@ -180,6 +190,7 @@
 		reg = <0x11000000 0x10000>;
 		interrupts = <0 96 0>;
 		samsung,power-domain = <&pd_mfc>;
+		iommu = <&sysmmu_mfc_l &sysmmu_mfc_l>;
 	};
 
 	rtc {
@@ -571,6 +582,7 @@
 		samsung,power-domain = <&pd_gsc>;
 		clocks = <&clock 256>;
 		clock-names = "gscl";
+		iommu = <&sysmmu_gsc1>;
 	};
 
 	gsc_1:  gsc@0x13e10000 {
@@ -580,6 +592,7 @@
 		samsung,power-domain = <&pd_gsc>;
 		clocks = <&clock 257>;
 		clock-names = "gscl";
+		iommu = <&sysmmu_gsc1>;
 	};
 
 	gsc_2:  gsc@0x13e20000 {
@@ -589,6 +602,7 @@
 		samsung,power-domain = <&pd_gsc>;
 		clocks = <&clock 258>;
 		clock-names = "gscl";
+		iommu = <&sysmmu_gsc2>;
 	};
 
 	gsc_3:  gsc@0x13e30000 {
@@ -598,6 +612,7 @@
 		samsung,power-domain = <&pd_gsc>;
 		clocks = <&clock 259>;
 		clock-names = "gscl";
+		iommu = <&sysmmu_gsc3>;
 	};
 
 	hdmi {
@@ -614,6 +629,7 @@
 		compatible = "samsung,exynos5-mixer";
 		reg = <0x14450000 0x10000>;
 		interrupts = <0 94 0>;
+		iommu = <&sysmmu_tv>;
 	};
 
 	dp-controller {
@@ -638,5 +654,280 @@
 		interrupts = <18 4>, <18 5>, <18 6>;
 		clocks = <&clock 133>, <&clock 339>;
 		clock-names = "sclk_fimd", "fimd";
+		iommu = <&sysmmu_fimd1>;
+	};
+
+	sysmmu_mfc_l: sysmmu@11210000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x11210000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-mfc_l";
+		interrupts = <8 5>;
+		clock-names = "sysmmu", "master";
+		clocks = <&clock 267>, <&clock 266>;
+		samsung,power-domain = <&pd_mfc>;
+		status = "ok";
+	};
+
+	sysmmu_mfc_r: sysmmu@11200000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x11200000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-mfc_r";
+		interrupts = <6 2>;
+		clock-names = "sysmmu", "master";
+		clocks = <&clock 268>, <&clock 266>;
+		samsung,power-domain = <&pd_mfc>;
+		status = "ok";
+	};
+
+	sysmmu_tv: sysmmu@14650000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x14650000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-tv";
+		interrupts = <7 4>;
+		clock-names = "sysmmu";
+		clocks = <&clock 349>;
+		samsung,power-domain = <&pd_disp1>;
+		status = "ok";
+	};
+
+	sysmmu_gsc0: sysmmu@13E80000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x13E80000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-gsc0";
+		interrupts = <2 0>;
+		clock-names = "sysmmu", "master";
+		clocks = <&clock 262>, <&clock 256>;
+		samsung,power-domain = <&pd_gsc>;
+		status = "ok";
+	};
+
+	sysmmu_gsc1: sysmmu@13E90000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x13E90000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-gsc1";
+		interrupts = <2 2>;
+		clock-names = "sysmmu", "master";
+		clocks = <&clock 263>, <&clock 257>;
+		samsung,power-domain = <&pd_gsc>;
+		status = "ok";
+	};
+
+	sysmmu_gsc2: sysmmu@13EA0000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x13EA0000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-gsc2";
+		interrupts = <2 4>;
+		clock-names = "sysmmu", "master";
+		clocks = <&clock 264>, <&clock 258>;
+		samsung,power-domain = <&pd_gsc>;
+		status = "ok";
+	};
+
+	sysmmu_gsc3: sysmmu@13EB0000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x13EB0000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-gsc3";
+		interrupts = <2 6>;
+		clock-names = "sysmmu", "master";
+		clocks = <&clock 265>, <&clock 259>;
+		samsung,power-domain = <&pd_gsc>;
+		status = "ok";
+	};
+
+	sysmmu_fimd1: sysmmu@14640000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x14640000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimd1";
+		interrupts = <3 2>;
+		clock-names = "sysmmu";
+		clocks = <&clock 350>;
+		samsung,power-domain = <&pd_disp1>;
+		status = "ok";
+	};
+
+	sysmmu_rotator: sysmmu@11D40000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x11D40000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-rotator";
+		interrupts = <4 0>;
+		clock-names = "sysmmu";
+		clocks = <&clock 272>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_isp: sysmmu@13260000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x13260000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_isp";
+		interrupts = <10 6>;
+		clock-names = "sysmmu";
+		clocks = <&clock 361>;
+		samsung,power-domain = <&pd_isp>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_drc: sysmmu@13270000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x13270000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_drc";
+		interrupts = <11 6>;
+		clock-names = "sysmmu";
+		clocks = <&clock 362>;
+		samsung,power-domain = <&pd_isp>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_fd: sysmmu@132A0000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x132A0000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_fd";
+		interrupts = <5 0>;
+		clock-names = "sysmmu";
+		clocks = <&clock 363>;
+		samsung,power-domain = <&pd_isp>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_scc: sysmmu@13280000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x13280000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_scalerc";
+		interrupts = <5 2>;
+		clock-names = "sysmmu";
+		clocks = <&clock 364>;
+		samsung,power-domain = <&pd_isp>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_scp: sysmmu@13290000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x13290000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_scalerp";
+		interrupts = <3 6>;
+		clock-names = "sysmmu";
+		clocks = <&clock 365>;
+		samsung,power-domain = <&pd_isp>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_mcuctl: sysmmu@132B0000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x132B0000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_mcuctl";
+		interrupts = <5 4>;
+		clock-names = "sysmmu";
+		clocks = <&clock 366>;
+		samsung,power-domain = <&pd_isp>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_odc: sysmmu@132C0000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x132C0000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_odc";
+		interrupts = <11 0>;
+		clock-names = "sysmmu";
+		clocks = <&clock 367>;
+		samsung,power-domain = <&pd_isp>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_dis0: sysmmu@132D0000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x132D0000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_dis0";
+		interrupts = <10 4>;
+		clock-names = "sysmmu";
+		clocks = <&clock 368>;
+		samsung,power-domain = <&pd_isp>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_dis1: sysmmu@132E0000{
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x132E0000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_dis1";
+		interrupts = <9 4>;
+		clock-names = "sysmmu";
+		clocks = <&clock 369>;
+		samsung,power-domain = <&pd_isp>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_3dnr: sysmmu@132F0000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x132F0000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_3dnr";
+		interrupts = <5 6>;
+		clock-names = "sysmmu";
+		clocks = <&clock 370>;
+		samsung,power-domain = <&pd_isp>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_lite0: sysmmu@13C40000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x13C40000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_lite0";
+		interrupts = <3 4>;
+		clock-names = "sysmmu", "master";
+		clocks = <&clock 346>, <&clock 345>;
+		samsung,power-domain = <&pd_gsc>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_lite1: sysmmu@13C50000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x13C50000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_lite1";
+		interrupts = <24 1>;
+		clock-names = "sysmmu", "master";
+		clocks = <&clock 347>, <&clock 345>;
+		samsung,power-domain = <&pd_gsc>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_jpeg: sysmmu@11F20000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x11F20000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-jpeg";
+		interrupts = <4 2>;
+		clock-names = "sysmmu", "master";
+		clocks = <&clock 273>, <&clock 270>;
+		samsung,power-domain = <&pd_gsc>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_2d: sysmmu@10A60000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x10A60000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-2d";
+		interrupts = <24 5>;
+		clock-names = "sysmmu";
+		clocks = <&clock 361>;
+		status = "ok";
 	};
 };
-- 
1.7.2.5



^ permalink raw reply related	[flat|nested] 65+ messages in thread

* [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-07-26 11:28 ` Cho KyongHo
  0 siblings, 0 replies; 65+ messages in thread
From: Cho KyongHo @ 2013-07-26 11:28 UTC (permalink / raw)
  To: linux-arm-kernel

Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
---
 .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
 arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
 arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
 arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
 arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
 5 files changed, 617 insertions(+), 0 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt

diff --git a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
new file mode 100644
index 0000000..92f0a33
--- /dev/null
+++ b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
@@ -0,0 +1,103 @@
+Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management Unit)
+
+Samsung's Exynos architecture contains System MMU that enables scattered
+physical memory chunks visible as a contiguous region to DMA-capable peripheral
+devices like MFC, FIMC, FIMD, GScaler, FIMC-IS and so forth.
+
+System MMU is a sort of IOMMU and support identical translation table format to
+ARMv7 translation tables with minimum set of page properties including access
+permissions, shareability and security protection. In addition, System MMU has
+another capabilities like L2 TLB or block-fetch buffers to minimize translation
+latency.
+
+A System MMU is dedicated to a single master peripheral device.  Thus, it is
+important to specify the correct System MMU in the device node of its master
+device. Whereas a System MMU is dedicated to a master device, the master device
+may have more than one System MMU.
+
+Required properties:
+- compatible: Should be "samsung,exynos4210-sysmmu"
+- reg: A tuple of base address and size of System MMU registers.
+- interrupt-parent: The phandle of the interrupt controller of System MMU
+- interrupts: A tuple of numbers that indicates the interrupt source.
+- clock-names: Should be "sysmmu" if the System MMU is needed to gate its clock.
+               Please refer to the following documents:
+	       Documentation/devicetree/bindings/clock/clock-bindings.txt
+	       Documentation/devicetree/bindings/clock/exynos4-clock.txt
+	       Documentation/devicetree/bindings/clock/exynos5250-clock.txt
+	       Optional "master" if the clock to the System MMU is gated by
+	       another gate clock other than "sysmmu". The System MMU driver
+	       sets "master" the parent of "sysmmu".
+	       Exynos4 SoCs, there needs no "master" clocks.
+	       Exynos5 SoCs, some System MMUs must have "master" clocks.
+- clocks: Required if the System MMU is needed to gate its clock.
+	  Please refer to the documents listed above.
+- samsung,power-domain: Required if the System MMU is needed to gate its power.
+	  Please refer to the following document:
+	  Documentation/devicetree/bindings/arm/exynos/power_domain.txt
+
+Required properties for the master peripheral devices:
+- iommu: phandles to the System MMUs of the device
+
+Examples:
+A System MMU is dedicated to a single master device.
+	gsc_0:  gsc at 0x13e00000 {
+		compatible = "samsung,exynos5-gsc";
+		reg = <0x13e00000 0x1000>;
+		interrupts = <0 85 0>;
+		samsung,power-domain = <&pd_gsc>;
+		clocks = <&clock 256>;
+		clock-names = "gscl";
+		iommu = <&sysmmu_gsc1>;
+	};
+
+	sysmmu_gsc0: sysmmu at 13E80000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x13E80000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-gsc0";
+		interrupts = <2 0>;
+		clock-names = "sysmmu", "master";
+		clocks = <&clock 262>, <&clock 256>;
+		samsung,power-domain = <&pd_gsc>;
+		status = "ok";
+	};
+
+MFC has 2 System MMUs for each port that MFC is attached. Thus it seems natural
+to define 2 System MMUs for each port of the MFC:
+
+	mfc: codec at 13400000 {
+		compatible = "samsung,mfc-v5";
+		reg = <0x13400000 0x10000>;
+		interrupts = <0 94 0>;
+		samsung,power-domain = <&pd_mfc>;
+		clocks = <&clock 170>, <&clock 273>;
+		clock-names = "sclk_mfc", "mfc";
+		status = "ok";
+		iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
+	};
+
+	sysmmu_mfc_l: sysmmu at 13620000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x13620000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-mfc-l";
+		interrupts = <5 5>;
+		clock-names = "sysmmu";
+		clocks = <&clock 274>;
+		samsung,power-domain = <&pd_mfc>;
+		status = "ok";
+	};
+
+	sysmmu_mfc_r: sysmmu at 13630000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x13630000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-mfc-r";
+		interrupts = <5 6>;
+		clock-names = "sysmmu";
+		clocks = <&clock 275>;
+		samsung,power-domain = <&pd_mfc>;
+		status = "ok";
+	};
+
diff --git a/arch/arm/boot/dts/exynos4.dtsi b/arch/arm/boot/dts/exynos4.dtsi
index 359694c..ba74ee8 100644
--- a/arch/arm/boot/dts/exynos4.dtsi
+++ b/arch/arm/boot/dts/exynos4.dtsi
@@ -161,6 +161,7 @@
 		interrupts = <0 94 0>;
 		samsung,power-domain = <&pd_mfc>;
 		status = "disabled";
+		iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
 	};
 
 	serial at 13800000 {
@@ -395,5 +396,126 @@
 		clock-names = "sclk_fimd", "fimd";
 		samsung,power-domain = <&pd_lcd0>;
 		status = "disabled";
+		iommu = <&sysmmu_fimd0>;
+	};
+
+	sysmmu_mfc_l: sysmmu at 13620000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x13620000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-mfc-l";
+		interrupts = <5 5>;
+		clock-names = "sysmmu";
+		clocks = <&clock 274>;
+		samsung,power-domain = <&pd_mfc>;
+		status = "ok";
+	};
+
+	sysmmu_mfc_r: sysmmu at 13630000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x13630000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-mfc-r";
+		interrupts = <5 6>;
+		clock-names = "sysmmu";
+		clocks = <&clock 275>;
+		samsung,power-domain = <&pd_mfc>;
+		status = "ok";
+	};
+
+	sysmmu_tv: sysmmu at 13E20000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x13E20000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-tv";
+		interrupts = <5 4>;
+		clock-names = "sysmmu";
+		clocks = <&clock 272>;
+		samsung,power-domain = <&pd_tv>;
+		status = "ok";
+	};
+
+	sysmmu_fimc0: sysmmu at 11A20000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x11A20000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc0";
+		interrupts = <4 2>;
+		clock-names = "sysmmu";
+		clocks = <&clock 263>;
+		samsung,power-domain = <&pd_cam>;
+		status = "ok";
+	};
+
+	sysmmu_fimc1: sysmmu at 11A30000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x11A30000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc1";
+		interrupts = <4 3>;
+		clock-names = "sysmmu";
+		clocks = <&clock 264>;
+		samsung,power-domain = <&pd_cam>;
+		status = "ok";
+	};
+
+	sysmmu_fimc2: sysmmu at 11A40000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x11A40000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc2";
+		interrupts = <4 4>;
+		clock-names = "sysmmu";
+		clocks = <&clock 265>;
+		samsung,power-domain = <&pd_cam>;
+		status = "ok";
+	};
+
+	sysmmu_fimc3: sysmmu at 11A50000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x11A50000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc3";
+		interrupts = <4 5>;
+		clock-names = "sysmmu";
+		clocks = <&clock 266>;
+		samsung,power-domain = <&pd_cam>;
+		status = "ok";
+	};
+
+	sysmmu_jpeg: sysmmu at 11A60000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x11A60000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-jpeg";
+		interrupts = <4 6>;
+		clock-names = "sysmmu";
+		clocks = <&clock 267>;
+		samsung,power-domain = <&pd_cam>;
+		status = "ok";
+	};
+
+	sysmmu_rotator: sysmmu at 12A30000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x12A30000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-rotator";
+		interrupts = <5 0>;
+		clock-names = "sysmmu";
+		clocks = <&clock 281>;
+		samsung,power-domain = <&pd_lcd0>;
+		status = "ok";
+	};
+
+	sysmmu_fimd0: sysmmu at 11E20000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x11E20000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimd0";
+		interrupts = <5 2>;
+		clock-names = "sysmmu";
+		clocks = <&clock 287>;
+		samsung,power-domain = <&pd_lcd0>;
+		status = "ok";
 	};
 };
diff --git a/arch/arm/boot/dts/exynos4210.dtsi b/arch/arm/boot/dts/exynos4210.dtsi
index 54710de..09b13da 100644
--- a/arch/arm/boot/dts/exynos4210.dtsi
+++ b/arch/arm/boot/dts/exynos4210.dtsi
@@ -119,5 +119,30 @@
 		reg = <0x12800000 0x1000>;
 		interrupts = <0 89 0>;
 		status = "disabled";
+		iommu = <&sysmmu_g2d>;
+	};
+
+	sysmmu_g2d: sysmmu at 12A20000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x12A20000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-g2d";
+		interrupts = <4 7>;
+		clock-names = "sysmmu";
+		clocks = <&clock 280>;
+		samsung,power-domain = <&pd_lcd0>;
+		status = "ok";
+	};
+
+	sysmmu_fimd1: sysmmu at 12220000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimd1";
+		reg = <0x12220000 0x1000>;
+		interrupts = <5 3>;
+		clock-names = "sysmmu";
+		clocks = <&clock 291>;
+		samsung,power-domain = <&pd_lcd1>;
+		status = "ok";
 	};
 };
diff --git a/arch/arm/boot/dts/exynos4x12.dtsi b/arch/arm/boot/dts/exynos4x12.dtsi
index e3380a7..681db32 100644
--- a/arch/arm/boot/dts/exynos4x12.dtsi
+++ b/arch/arm/boot/dts/exynos4x12.dtsi
@@ -79,4 +79,80 @@
 		interrupts = <0 89 0>;
 		status = "disabled";
 	};
+
+	sysmmu_g2d: sysmmu at 10A40000{
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x10A40000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-g2d";
+		interrupts = <4 7>;
+		clock-names = "sysmmu";
+		status = "ok";
+	};
+
+	sysmmu_fimc_isp: sysmmu at 12260000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x12260000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_isp";
+		interrupts = <16 2>;
+		clock-names = "sysmmu";
+		clocks = <&clock 362>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_drc: sysmmu at 12270000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x12270000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_drc";
+		interrupts = <16 3>;
+		clock-names = "sysmmu";
+		clocks = <&clock 363>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_fd: sysmmu at 122A0000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x122A0000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_fd";
+		interrupts = <16 4>;
+		clock-names = "sysmmu";
+		clocks = <&clock 364>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_mcuctl: sysmmu at 122B0000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x122B0000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_mcuctl";
+		interrupts = <16 5>;
+		clock-names = "sysmmu";
+		clocks = <&clock 376>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_lite0: sysmmu at 123B0000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x123B0000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_lite0";
+		interrupts = <16 0>;
+		clock-names = "sysmmu";
+		clocks = <&clock 366>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_lite1: sysmmu at 123C0000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x123C0000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_lite1";
+		interrupts = <16 1>;
+		clock-names = "sysmmu";
+		clocks = <&clock 365>;
+		status = "ok";
+	};
 };
diff --git a/arch/arm/boot/dts/exynos5250.dtsi b/arch/arm/boot/dts/exynos5250.dtsi
index fc9fb3d..130d23d 100644
--- a/arch/arm/boot/dts/exynos5250.dtsi
+++ b/arch/arm/boot/dts/exynos5250.dtsi
@@ -66,6 +66,16 @@
 		reg = <0x10044040 0x20>;
 	};
 
+	pd_isp: mfc-power-domain at 0x10044020 {
+		compatible = "samsung,exynos4210-pd";
+		reg = <0x10044020 0x20>;
+	};
+
+	pd_disp1: mfc-power-domain at 0x100440A0 {
+		compatible = "samsung,exynos4210-pd";
+		reg = <0x100440A0 0x20>;
+	};
+
 	clock: clock-controller at 0x10010000 {
 		compatible = "samsung,exynos5250-clock";
 		reg = <0x10010000 0x30000>;
@@ -180,6 +190,7 @@
 		reg = <0x11000000 0x10000>;
 		interrupts = <0 96 0>;
 		samsung,power-domain = <&pd_mfc>;
+		iommu = <&sysmmu_mfc_l &sysmmu_mfc_l>;
 	};
 
 	rtc {
@@ -571,6 +582,7 @@
 		samsung,power-domain = <&pd_gsc>;
 		clocks = <&clock 256>;
 		clock-names = "gscl";
+		iommu = <&sysmmu_gsc1>;
 	};
 
 	gsc_1:  gsc at 0x13e10000 {
@@ -580,6 +592,7 @@
 		samsung,power-domain = <&pd_gsc>;
 		clocks = <&clock 257>;
 		clock-names = "gscl";
+		iommu = <&sysmmu_gsc1>;
 	};
 
 	gsc_2:  gsc at 0x13e20000 {
@@ -589,6 +602,7 @@
 		samsung,power-domain = <&pd_gsc>;
 		clocks = <&clock 258>;
 		clock-names = "gscl";
+		iommu = <&sysmmu_gsc2>;
 	};
 
 	gsc_3:  gsc at 0x13e30000 {
@@ -598,6 +612,7 @@
 		samsung,power-domain = <&pd_gsc>;
 		clocks = <&clock 259>;
 		clock-names = "gscl";
+		iommu = <&sysmmu_gsc3>;
 	};
 
 	hdmi {
@@ -614,6 +629,7 @@
 		compatible = "samsung,exynos5-mixer";
 		reg = <0x14450000 0x10000>;
 		interrupts = <0 94 0>;
+		iommu = <&sysmmu_tv>;
 	};
 
 	dp-controller {
@@ -638,5 +654,280 @@
 		interrupts = <18 4>, <18 5>, <18 6>;
 		clocks = <&clock 133>, <&clock 339>;
 		clock-names = "sclk_fimd", "fimd";
+		iommu = <&sysmmu_fimd1>;
+	};
+
+	sysmmu_mfc_l: sysmmu at 11210000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x11210000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-mfc_l";
+		interrupts = <8 5>;
+		clock-names = "sysmmu", "master";
+		clocks = <&clock 267>, <&clock 266>;
+		samsung,power-domain = <&pd_mfc>;
+		status = "ok";
+	};
+
+	sysmmu_mfc_r: sysmmu at 11200000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x11200000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-mfc_r";
+		interrupts = <6 2>;
+		clock-names = "sysmmu", "master";
+		clocks = <&clock 268>, <&clock 266>;
+		samsung,power-domain = <&pd_mfc>;
+		status = "ok";
+	};
+
+	sysmmu_tv: sysmmu at 14650000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x14650000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-tv";
+		interrupts = <7 4>;
+		clock-names = "sysmmu";
+		clocks = <&clock 349>;
+		samsung,power-domain = <&pd_disp1>;
+		status = "ok";
+	};
+
+	sysmmu_gsc0: sysmmu at 13E80000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x13E80000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-gsc0";
+		interrupts = <2 0>;
+		clock-names = "sysmmu", "master";
+		clocks = <&clock 262>, <&clock 256>;
+		samsung,power-domain = <&pd_gsc>;
+		status = "ok";
+	};
+
+	sysmmu_gsc1: sysmmu at 13E90000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x13E90000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-gsc1";
+		interrupts = <2 2>;
+		clock-names = "sysmmu", "master";
+		clocks = <&clock 263>, <&clock 257>;
+		samsung,power-domain = <&pd_gsc>;
+		status = "ok";
+	};
+
+	sysmmu_gsc2: sysmmu at 13EA0000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x13EA0000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-gsc2";
+		interrupts = <2 4>;
+		clock-names = "sysmmu", "master";
+		clocks = <&clock 264>, <&clock 258>;
+		samsung,power-domain = <&pd_gsc>;
+		status = "ok";
+	};
+
+	sysmmu_gsc3: sysmmu at 13EB0000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x13EB0000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-gsc3";
+		interrupts = <2 6>;
+		clock-names = "sysmmu", "master";
+		clocks = <&clock 265>, <&clock 259>;
+		samsung,power-domain = <&pd_gsc>;
+		status = "ok";
+	};
+
+	sysmmu_fimd1: sysmmu at 14640000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x14640000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimd1";
+		interrupts = <3 2>;
+		clock-names = "sysmmu";
+		clocks = <&clock 350>;
+		samsung,power-domain = <&pd_disp1>;
+		status = "ok";
+	};
+
+	sysmmu_rotator: sysmmu at 11D40000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x11D40000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-rotator";
+		interrupts = <4 0>;
+		clock-names = "sysmmu";
+		clocks = <&clock 272>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_isp: sysmmu at 13260000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x13260000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_isp";
+		interrupts = <10 6>;
+		clock-names = "sysmmu";
+		clocks = <&clock 361>;
+		samsung,power-domain = <&pd_isp>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_drc: sysmmu at 13270000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x13270000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_drc";
+		interrupts = <11 6>;
+		clock-names = "sysmmu";
+		clocks = <&clock 362>;
+		samsung,power-domain = <&pd_isp>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_fd: sysmmu at 132A0000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x132A0000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_fd";
+		interrupts = <5 0>;
+		clock-names = "sysmmu";
+		clocks = <&clock 363>;
+		samsung,power-domain = <&pd_isp>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_scc: sysmmu at 13280000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x13280000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_scalerc";
+		interrupts = <5 2>;
+		clock-names = "sysmmu";
+		clocks = <&clock 364>;
+		samsung,power-domain = <&pd_isp>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_scp: sysmmu at 13290000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x13290000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_scalerp";
+		interrupts = <3 6>;
+		clock-names = "sysmmu";
+		clocks = <&clock 365>;
+		samsung,power-domain = <&pd_isp>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_mcuctl: sysmmu at 132B0000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x132B0000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_mcuctl";
+		interrupts = <5 4>;
+		clock-names = "sysmmu";
+		clocks = <&clock 366>;
+		samsung,power-domain = <&pd_isp>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_odc: sysmmu at 132C0000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x132C0000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_odc";
+		interrupts = <11 0>;
+		clock-names = "sysmmu";
+		clocks = <&clock 367>;
+		samsung,power-domain = <&pd_isp>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_dis0: sysmmu at 132D0000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x132D0000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_dis0";
+		interrupts = <10 4>;
+		clock-names = "sysmmu";
+		clocks = <&clock 368>;
+		samsung,power-domain = <&pd_isp>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_dis1: sysmmu at 132E0000{
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x132E0000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_dis1";
+		interrupts = <9 4>;
+		clock-names = "sysmmu";
+		clocks = <&clock 369>;
+		samsung,power-domain = <&pd_isp>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_3dnr: sysmmu at 132F0000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x132F0000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_3dnr";
+		interrupts = <5 6>;
+		clock-names = "sysmmu";
+		clocks = <&clock 370>;
+		samsung,power-domain = <&pd_isp>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_lite0: sysmmu at 13C40000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x13C40000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_lite0";
+		interrupts = <3 4>;
+		clock-names = "sysmmu", "master";
+		clocks = <&clock 346>, <&clock 345>;
+		samsung,power-domain = <&pd_gsc>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_lite1: sysmmu at 13C50000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x13C50000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-fimc_lite1";
+		interrupts = <24 1>;
+		clock-names = "sysmmu", "master";
+		clocks = <&clock 347>, <&clock 345>;
+		samsung,power-domain = <&pd_gsc>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_jpeg: sysmmu at 11F20000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x11F20000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-jpeg";
+		interrupts = <4 2>;
+		clock-names = "sysmmu", "master";
+		clocks = <&clock 273>, <&clock 270>;
+		samsung,power-domain = <&pd_gsc>;
+		status = "ok";
+	};
+
+	sysmmu_fimc_2d: sysmmu at 10A60000 {
+		compatible = "samsung,exynos4210-sysmmu";
+		reg = <0x10A60000 0x1000>;
+		interrupt-parent = <&combiner>;
+		interrupt-names = "sysmmu-2d";
+		interrupts = <24 5>;
+		clock-names = "sysmmu";
+		clocks = <&clock 361>;
+		status = "ok";
 	};
 };
-- 
1.7.2.5

^ permalink raw reply related	[flat|nested] 65+ messages in thread

* Re: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
  2013-07-26 11:28 ` Cho KyongHo
@ 2013-07-26 17:58   ` Grant Grundler
  -1 siblings, 0 replies; 65+ messages in thread
From: Grant Grundler @ 2013-07-26 17:58 UTC (permalink / raw)
  To: Cho KyongHo
  Cc: Linux ARM Kernel, Linux IOMMU, Linux Kernel, Linux Samsung SOC,
	Hyunwoong Kim, Joerg Roedel, Kukjin Kim, Prathyush, Rahul Sharma,
	Subash Patel, Keyyoung Park, Grant Grundler, Antonios Motakis,
	kvmarm, Sachin Kamat

On Fri, Jul 26, 2013 at 4:28 AM, Cho KyongHo <pullip.cho@samsung.com> wrote:
> Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
> ---
>  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
>  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
>  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
>  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
>  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
>  5 files changed, 617 insertions(+), 0 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
>
> diff --git a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> new file mode 100644
> index 0000000..92f0a33
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> @@ -0,0 +1,103 @@
> +Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management Unit)
> +
> +Samsung's Exynos architecture contains System MMU that enables scattered

Cho,
"MMU" should be plural? "MMUs"?

> +physical memory chunks visible as a contiguous region to DMA-capable peripheral
> +devices like MFC, FIMC, FIMD, GScaler, FIMC-IS and so forth.
> +
> +System MMU is a sort of IOMMU and support identical translation table format to

s/a sort of/an/ . Or perhaps "is also an". For the purposes of
documenting DMA support, we are talking about the IOMMU functionality
this device provides. It might be better to mention the functionality
the System MMU supports and refer to other subsystem documents (e,g,
clocking and power control) for details.

> +ARMv7 translation tables with minimum set of page properties including access
> +permissions, shareability and security protection. In addition, System MMU has
> +another capabilities like L2 TLB or block-fetch buffers to minimize translation
> +latency.
> +
> +A System MMU is dedicated to a single master peripheral device.  Thus, it is
> +important to specify the correct System MMU in the device node of its master
> +device.  Whereas a System MMU is dedicated to a master device, the master device
> +may have more than one System MMU.

Can I suggest rewriting the last two sentences to:
  The master device node must correctly specify at least one
SystemMMU. A master  device may have more than one System MMU.

BTW, is there a difference between "master device" and "master
peripheral device" that I'm not aware of?  Perhaps use just one of
those expressions in this document, not both if they are the same
thing (which is what I assumed).

cheers,
grant

> +
> +Required properties:
> +- compatible: Should be "samsung,exynos4210-sysmmu"
> +- reg: A tuple of base address and size of System MMU registers.
> +- interrupt-parent: The phandle of the interrupt controller of System MMU
> +- interrupts: A tuple of numbers that indicates the interrupt source.
> +- clock-names: Should be "sysmmu" if the System MMU is needed to gate its clock.
> +               Please refer to the following documents:
> +              Documentation/devicetree/bindings/clock/clock-bindings.txt
> +              Documentation/devicetree/bindings/clock/exynos4-clock.txt
> +              Documentation/devicetree/bindings/clock/exynos5250-clock.txt
> +              Optional "master" if the clock to the System MMU is gated by
> +              another gate clock other than "sysmmu". The System MMU driver
> +              sets "master" the parent of "sysmmu".
> +              Exynos4 SoCs, there needs no "master" clocks.
> +              Exynos5 SoCs, some System MMUs must have "master" clocks.
> +- clocks: Required if the System MMU is needed to gate its clock.
> +         Please refer to the documents listed above.
> +- samsung,power-domain: Required if the System MMU is needed to gate its power.
> +         Please refer to the following document:
> +         Documentation/devicetree/bindings/arm/exynos/power_domain.txt
> +
> +Required properties for the master peripheral devices:
> +- iommu: phandles to the System MMUs of the device
> +
> +Examples:
> +A System MMU is dedicated to a single master device.
> +       gsc_0:  gsc@0x13e00000 {
> +               compatible = "samsung,exynos5-gsc";
> +               reg = <0x13e00000 0x1000>;
> +               interrupts = <0 85 0>;
> +               samsung,power-domain = <&pd_gsc>;
> +               clocks = <&clock 256>;
> +               clock-names = "gscl";
> +               iommu = <&sysmmu_gsc1>;
> +       };
> +
> +       sysmmu_gsc0: sysmmu@13E80000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13E80000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-gsc0";
> +               interrupts = <2 0>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 262>, <&clock 256>;
> +               samsung,power-domain = <&pd_gsc>;
> +               status = "ok";
> +       };
> +
> +MFC has 2 System MMUs for each port that MFC is attached. Thus it seems natural
> +to define 2 System MMUs for each port of the MFC:
> +
> +       mfc: codec@13400000 {
> +               compatible = "samsung,mfc-v5";
> +               reg = <0x13400000 0x10000>;
> +               interrupts = <0 94 0>;
> +               samsung,power-domain = <&pd_mfc>;
> +               clocks = <&clock 170>, <&clock 273>;
> +               clock-names = "sclk_mfc", "mfc";
> +               status = "ok";
> +               iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
> +       };
> +
> +       sysmmu_mfc_l: sysmmu@13620000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13620000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-mfc-l";
> +               interrupts = <5 5>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 274>;
> +               samsung,power-domain = <&pd_mfc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_mfc_r: sysmmu@13630000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13630000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-mfc-r";
> +               interrupts = <5 6>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 275>;
> +               samsung,power-domain = <&pd_mfc>;
> +               status = "ok";
> +       };
> +
> diff --git a/arch/arm/boot/dts/exynos4.dtsi b/arch/arm/boot/dts/exynos4.dtsi
> index 359694c..ba74ee8 100644
> --- a/arch/arm/boot/dts/exynos4.dtsi
> +++ b/arch/arm/boot/dts/exynos4.dtsi
> @@ -161,6 +161,7 @@
>                 interrupts = <0 94 0>;
>                 samsung,power-domain = <&pd_mfc>;
>                 status = "disabled";
> +               iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
>         };
>
>         serial@13800000 {
> @@ -395,5 +396,126 @@
>                 clock-names = "sclk_fimd", "fimd";
>                 samsung,power-domain = <&pd_lcd0>;
>                 status = "disabled";
> +               iommu = <&sysmmu_fimd0>;
> +       };
> +
> +       sysmmu_mfc_l: sysmmu@13620000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13620000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-mfc-l";
> +               interrupts = <5 5>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 274>;
> +               samsung,power-domain = <&pd_mfc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_mfc_r: sysmmu@13630000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13630000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-mfc-r";
> +               interrupts = <5 6>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 275>;
> +               samsung,power-domain = <&pd_mfc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_tv: sysmmu@13E20000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13E20000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-tv";
> +               interrupts = <5 4>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 272>;
> +               samsung,power-domain = <&pd_tv>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc0: sysmmu@11A20000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11A20000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc0";
> +               interrupts = <4 2>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 263>;
> +               samsung,power-domain = <&pd_cam>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc1: sysmmu@11A30000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11A30000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc1";
> +               interrupts = <4 3>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 264>;
> +               samsung,power-domain = <&pd_cam>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc2: sysmmu@11A40000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11A40000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc2";
> +               interrupts = <4 4>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 265>;
> +               samsung,power-domain = <&pd_cam>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc3: sysmmu@11A50000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11A50000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc3";
> +               interrupts = <4 5>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 266>;
> +               samsung,power-domain = <&pd_cam>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_jpeg: sysmmu@11A60000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11A60000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-jpeg";
> +               interrupts = <4 6>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 267>;
> +               samsung,power-domain = <&pd_cam>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_rotator: sysmmu@12A30000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x12A30000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-rotator";
> +               interrupts = <5 0>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 281>;
> +               samsung,power-domain = <&pd_lcd0>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimd0: sysmmu@11E20000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11E20000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimd0";
> +               interrupts = <5 2>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 287>;
> +               samsung,power-domain = <&pd_lcd0>;
> +               status = "ok";
>         };
>  };
> diff --git a/arch/arm/boot/dts/exynos4210.dtsi b/arch/arm/boot/dts/exynos4210.dtsi
> index 54710de..09b13da 100644
> --- a/arch/arm/boot/dts/exynos4210.dtsi
> +++ b/arch/arm/boot/dts/exynos4210.dtsi
> @@ -119,5 +119,30 @@
>                 reg = <0x12800000 0x1000>;
>                 interrupts = <0 89 0>;
>                 status = "disabled";
> +               iommu = <&sysmmu_g2d>;
> +       };
> +
> +       sysmmu_g2d: sysmmu@12A20000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x12A20000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-g2d";
> +               interrupts = <4 7>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 280>;
> +               samsung,power-domain = <&pd_lcd0>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimd1: sysmmu@12220000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimd1";
> +               reg = <0x12220000 0x1000>;
> +               interrupts = <5 3>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 291>;
> +               samsung,power-domain = <&pd_lcd1>;
> +               status = "ok";
>         };
>  };
> diff --git a/arch/arm/boot/dts/exynos4x12.dtsi b/arch/arm/boot/dts/exynos4x12.dtsi
> index e3380a7..681db32 100644
> --- a/arch/arm/boot/dts/exynos4x12.dtsi
> +++ b/arch/arm/boot/dts/exynos4x12.dtsi
> @@ -79,4 +79,80 @@
>                 interrupts = <0 89 0>;
>                 status = "disabled";
>         };
> +
> +       sysmmu_g2d: sysmmu@10A40000{
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x10A40000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-g2d";
> +               interrupts = <4 7>;
> +               clock-names = "sysmmu";
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_isp: sysmmu@12260000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x12260000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_isp";
> +               interrupts = <16 2>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 362>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_drc: sysmmu@12270000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x12270000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_drc";
> +               interrupts = <16 3>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 363>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_fd: sysmmu@122A0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x122A0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_fd";
> +               interrupts = <16 4>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 364>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_mcuctl: sysmmu@122B0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x122B0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_mcuctl";
> +               interrupts = <16 5>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 376>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_lite0: sysmmu@123B0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x123B0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_lite0";
> +               interrupts = <16 0>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 366>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_lite1: sysmmu@123C0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x123C0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_lite1";
> +               interrupts = <16 1>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 365>;
> +               status = "ok";
> +       };
>  };
> diff --git a/arch/arm/boot/dts/exynos5250.dtsi b/arch/arm/boot/dts/exynos5250.dtsi
> index fc9fb3d..130d23d 100644
> --- a/arch/arm/boot/dts/exynos5250.dtsi
> +++ b/arch/arm/boot/dts/exynos5250.dtsi
> @@ -66,6 +66,16 @@
>                 reg = <0x10044040 0x20>;
>         };
>
> +       pd_isp: mfc-power-domain@0x10044020 {
> +               compatible = "samsung,exynos4210-pd";
> +               reg = <0x10044020 0x20>;
> +       };
> +
> +       pd_disp1: mfc-power-domain@0x100440A0 {
> +               compatible = "samsung,exynos4210-pd";
> +               reg = <0x100440A0 0x20>;
> +       };
> +
>         clock: clock-controller@0x10010000 {
>                 compatible = "samsung,exynos5250-clock";
>                 reg = <0x10010000 0x30000>;
> @@ -180,6 +190,7 @@
>                 reg = <0x11000000 0x10000>;
>                 interrupts = <0 96 0>;
>                 samsung,power-domain = <&pd_mfc>;
> +               iommu = <&sysmmu_mfc_l &sysmmu_mfc_l>;
>         };
>
>         rtc {
> @@ -571,6 +582,7 @@
>                 samsung,power-domain = <&pd_gsc>;
>                 clocks = <&clock 256>;
>                 clock-names = "gscl";
> +               iommu = <&sysmmu_gsc1>;
>         };
>
>         gsc_1:  gsc@0x13e10000 {
> @@ -580,6 +592,7 @@
>                 samsung,power-domain = <&pd_gsc>;
>                 clocks = <&clock 257>;
>                 clock-names = "gscl";
> +               iommu = <&sysmmu_gsc1>;
>         };
>
>         gsc_2:  gsc@0x13e20000 {
> @@ -589,6 +602,7 @@
>                 samsung,power-domain = <&pd_gsc>;
>                 clocks = <&clock 258>;
>                 clock-names = "gscl";
> +               iommu = <&sysmmu_gsc2>;
>         };
>
>         gsc_3:  gsc@0x13e30000 {
> @@ -598,6 +612,7 @@
>                 samsung,power-domain = <&pd_gsc>;
>                 clocks = <&clock 259>;
>                 clock-names = "gscl";
> +               iommu = <&sysmmu_gsc3>;
>         };
>
>         hdmi {
> @@ -614,6 +629,7 @@
>                 compatible = "samsung,exynos5-mixer";
>                 reg = <0x14450000 0x10000>;
>                 interrupts = <0 94 0>;
> +               iommu = <&sysmmu_tv>;
>         };
>
>         dp-controller {
> @@ -638,5 +654,280 @@
>                 interrupts = <18 4>, <18 5>, <18 6>;
>                 clocks = <&clock 133>, <&clock 339>;
>                 clock-names = "sclk_fimd", "fimd";
> +               iommu = <&sysmmu_fimd1>;
> +       };
> +
> +       sysmmu_mfc_l: sysmmu@11210000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11210000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-mfc_l";
> +               interrupts = <8 5>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 267>, <&clock 266>;
> +               samsung,power-domain = <&pd_mfc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_mfc_r: sysmmu@11200000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11200000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-mfc_r";
> +               interrupts = <6 2>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 268>, <&clock 266>;
> +               samsung,power-domain = <&pd_mfc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_tv: sysmmu@14650000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x14650000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-tv";
> +               interrupts = <7 4>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 349>;
> +               samsung,power-domain = <&pd_disp1>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_gsc0: sysmmu@13E80000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13E80000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-gsc0";
> +               interrupts = <2 0>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 262>, <&clock 256>;
> +               samsung,power-domain = <&pd_gsc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_gsc1: sysmmu@13E90000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13E90000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-gsc1";
> +               interrupts = <2 2>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 263>, <&clock 257>;
> +               samsung,power-domain = <&pd_gsc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_gsc2: sysmmu@13EA0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13EA0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-gsc2";
> +               interrupts = <2 4>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 264>, <&clock 258>;
> +               samsung,power-domain = <&pd_gsc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_gsc3: sysmmu@13EB0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13EB0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-gsc3";
> +               interrupts = <2 6>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 265>, <&clock 259>;
> +               samsung,power-domain = <&pd_gsc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimd1: sysmmu@14640000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x14640000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimd1";
> +               interrupts = <3 2>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 350>;
> +               samsung,power-domain = <&pd_disp1>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_rotator: sysmmu@11D40000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11D40000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-rotator";
> +               interrupts = <4 0>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 272>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_isp: sysmmu@13260000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13260000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_isp";
> +               interrupts = <10 6>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 361>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_drc: sysmmu@13270000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13270000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_drc";
> +               interrupts = <11 6>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 362>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_fd: sysmmu@132A0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x132A0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_fd";
> +               interrupts = <5 0>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 363>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_scc: sysmmu@13280000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13280000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_scalerc";
> +               interrupts = <5 2>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 364>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_scp: sysmmu@13290000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13290000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_scalerp";
> +               interrupts = <3 6>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 365>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_mcuctl: sysmmu@132B0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x132B0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_mcuctl";
> +               interrupts = <5 4>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 366>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_odc: sysmmu@132C0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x132C0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_odc";
> +               interrupts = <11 0>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 367>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_dis0: sysmmu@132D0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x132D0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_dis0";
> +               interrupts = <10 4>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 368>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_dis1: sysmmu@132E0000{
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x132E0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_dis1";
> +               interrupts = <9 4>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 369>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_3dnr: sysmmu@132F0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x132F0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_3dnr";
> +               interrupts = <5 6>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 370>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_lite0: sysmmu@13C40000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13C40000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_lite0";
> +               interrupts = <3 4>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 346>, <&clock 345>;
> +               samsung,power-domain = <&pd_gsc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_lite1: sysmmu@13C50000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13C50000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_lite1";
> +               interrupts = <24 1>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 347>, <&clock 345>;
> +               samsung,power-domain = <&pd_gsc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_jpeg: sysmmu@11F20000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11F20000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-jpeg";
> +               interrupts = <4 2>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 273>, <&clock 270>;
> +               samsung,power-domain = <&pd_gsc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_2d: sysmmu@10A60000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x10A60000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-2d";
> +               interrupts = <24 5>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 361>;
> +               status = "ok";
>         };
>  };
> --
> 1.7.2.5
>
>

^ permalink raw reply	[flat|nested] 65+ messages in thread

* [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-07-26 17:58   ` Grant Grundler
  0 siblings, 0 replies; 65+ messages in thread
From: Grant Grundler @ 2013-07-26 17:58 UTC (permalink / raw)
  To: linux-arm-kernel

On Fri, Jul 26, 2013 at 4:28 AM, Cho KyongHo <pullip.cho@samsung.com> wrote:
> Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
> ---
>  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
>  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
>  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
>  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
>  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
>  5 files changed, 617 insertions(+), 0 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
>
> diff --git a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> new file mode 100644
> index 0000000..92f0a33
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> @@ -0,0 +1,103 @@
> +Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management Unit)
> +
> +Samsung's Exynos architecture contains System MMU that enables scattered

Cho,
"MMU" should be plural? "MMUs"?

> +physical memory chunks visible as a contiguous region to DMA-capable peripheral
> +devices like MFC, FIMC, FIMD, GScaler, FIMC-IS and so forth.
> +
> +System MMU is a sort of IOMMU and support identical translation table format to

s/a sort of/an/ . Or perhaps "is also an". For the purposes of
documenting DMA support, we are talking about the IOMMU functionality
this device provides. It might be better to mention the functionality
the System MMU supports and refer to other subsystem documents (e,g,
clocking and power control) for details.

> +ARMv7 translation tables with minimum set of page properties including access
> +permissions, shareability and security protection. In addition, System MMU has
> +another capabilities like L2 TLB or block-fetch buffers to minimize translation
> +latency.
> +
> +A System MMU is dedicated to a single master peripheral device.  Thus, it is
> +important to specify the correct System MMU in the device node of its master
> +device.  Whereas a System MMU is dedicated to a master device, the master device
> +may have more than one System MMU.

Can I suggest rewriting the last two sentences to:
  The master device node must correctly specify at least one
SystemMMU. A master  device may have more than one System MMU.

BTW, is there a difference between "master device" and "master
peripheral device" that I'm not aware of?  Perhaps use just one of
those expressions in this document, not both if they are the same
thing (which is what I assumed).

cheers,
grant

> +
> +Required properties:
> +- compatible: Should be "samsung,exynos4210-sysmmu"
> +- reg: A tuple of base address and size of System MMU registers.
> +- interrupt-parent: The phandle of the interrupt controller of System MMU
> +- interrupts: A tuple of numbers that indicates the interrupt source.
> +- clock-names: Should be "sysmmu" if the System MMU is needed to gate its clock.
> +               Please refer to the following documents:
> +              Documentation/devicetree/bindings/clock/clock-bindings.txt
> +              Documentation/devicetree/bindings/clock/exynos4-clock.txt
> +              Documentation/devicetree/bindings/clock/exynos5250-clock.txt
> +              Optional "master" if the clock to the System MMU is gated by
> +              another gate clock other than "sysmmu". The System MMU driver
> +              sets "master" the parent of "sysmmu".
> +              Exynos4 SoCs, there needs no "master" clocks.
> +              Exynos5 SoCs, some System MMUs must have "master" clocks.
> +- clocks: Required if the System MMU is needed to gate its clock.
> +         Please refer to the documents listed above.
> +- samsung,power-domain: Required if the System MMU is needed to gate its power.
> +         Please refer to the following document:
> +         Documentation/devicetree/bindings/arm/exynos/power_domain.txt
> +
> +Required properties for the master peripheral devices:
> +- iommu: phandles to the System MMUs of the device
> +
> +Examples:
> +A System MMU is dedicated to a single master device.
> +       gsc_0:  gsc at 0x13e00000 {
> +               compatible = "samsung,exynos5-gsc";
> +               reg = <0x13e00000 0x1000>;
> +               interrupts = <0 85 0>;
> +               samsung,power-domain = <&pd_gsc>;
> +               clocks = <&clock 256>;
> +               clock-names = "gscl";
> +               iommu = <&sysmmu_gsc1>;
> +       };
> +
> +       sysmmu_gsc0: sysmmu at 13E80000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13E80000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-gsc0";
> +               interrupts = <2 0>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 262>, <&clock 256>;
> +               samsung,power-domain = <&pd_gsc>;
> +               status = "ok";
> +       };
> +
> +MFC has 2 System MMUs for each port that MFC is attached. Thus it seems natural
> +to define 2 System MMUs for each port of the MFC:
> +
> +       mfc: codec at 13400000 {
> +               compatible = "samsung,mfc-v5";
> +               reg = <0x13400000 0x10000>;
> +               interrupts = <0 94 0>;
> +               samsung,power-domain = <&pd_mfc>;
> +               clocks = <&clock 170>, <&clock 273>;
> +               clock-names = "sclk_mfc", "mfc";
> +               status = "ok";
> +               iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
> +       };
> +
> +       sysmmu_mfc_l: sysmmu at 13620000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13620000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-mfc-l";
> +               interrupts = <5 5>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 274>;
> +               samsung,power-domain = <&pd_mfc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_mfc_r: sysmmu at 13630000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13630000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-mfc-r";
> +               interrupts = <5 6>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 275>;
> +               samsung,power-domain = <&pd_mfc>;
> +               status = "ok";
> +       };
> +
> diff --git a/arch/arm/boot/dts/exynos4.dtsi b/arch/arm/boot/dts/exynos4.dtsi
> index 359694c..ba74ee8 100644
> --- a/arch/arm/boot/dts/exynos4.dtsi
> +++ b/arch/arm/boot/dts/exynos4.dtsi
> @@ -161,6 +161,7 @@
>                 interrupts = <0 94 0>;
>                 samsung,power-domain = <&pd_mfc>;
>                 status = "disabled";
> +               iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
>         };
>
>         serial at 13800000 {
> @@ -395,5 +396,126 @@
>                 clock-names = "sclk_fimd", "fimd";
>                 samsung,power-domain = <&pd_lcd0>;
>                 status = "disabled";
> +               iommu = <&sysmmu_fimd0>;
> +       };
> +
> +       sysmmu_mfc_l: sysmmu at 13620000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13620000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-mfc-l";
> +               interrupts = <5 5>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 274>;
> +               samsung,power-domain = <&pd_mfc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_mfc_r: sysmmu at 13630000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13630000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-mfc-r";
> +               interrupts = <5 6>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 275>;
> +               samsung,power-domain = <&pd_mfc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_tv: sysmmu at 13E20000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13E20000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-tv";
> +               interrupts = <5 4>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 272>;
> +               samsung,power-domain = <&pd_tv>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc0: sysmmu at 11A20000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11A20000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc0";
> +               interrupts = <4 2>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 263>;
> +               samsung,power-domain = <&pd_cam>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc1: sysmmu at 11A30000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11A30000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc1";
> +               interrupts = <4 3>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 264>;
> +               samsung,power-domain = <&pd_cam>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc2: sysmmu at 11A40000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11A40000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc2";
> +               interrupts = <4 4>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 265>;
> +               samsung,power-domain = <&pd_cam>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc3: sysmmu at 11A50000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11A50000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc3";
> +               interrupts = <4 5>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 266>;
> +               samsung,power-domain = <&pd_cam>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_jpeg: sysmmu at 11A60000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11A60000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-jpeg";
> +               interrupts = <4 6>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 267>;
> +               samsung,power-domain = <&pd_cam>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_rotator: sysmmu at 12A30000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x12A30000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-rotator";
> +               interrupts = <5 0>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 281>;
> +               samsung,power-domain = <&pd_lcd0>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimd0: sysmmu at 11E20000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11E20000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimd0";
> +               interrupts = <5 2>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 287>;
> +               samsung,power-domain = <&pd_lcd0>;
> +               status = "ok";
>         };
>  };
> diff --git a/arch/arm/boot/dts/exynos4210.dtsi b/arch/arm/boot/dts/exynos4210.dtsi
> index 54710de..09b13da 100644
> --- a/arch/arm/boot/dts/exynos4210.dtsi
> +++ b/arch/arm/boot/dts/exynos4210.dtsi
> @@ -119,5 +119,30 @@
>                 reg = <0x12800000 0x1000>;
>                 interrupts = <0 89 0>;
>                 status = "disabled";
> +               iommu = <&sysmmu_g2d>;
> +       };
> +
> +       sysmmu_g2d: sysmmu at 12A20000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x12A20000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-g2d";
> +               interrupts = <4 7>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 280>;
> +               samsung,power-domain = <&pd_lcd0>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimd1: sysmmu at 12220000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimd1";
> +               reg = <0x12220000 0x1000>;
> +               interrupts = <5 3>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 291>;
> +               samsung,power-domain = <&pd_lcd1>;
> +               status = "ok";
>         };
>  };
> diff --git a/arch/arm/boot/dts/exynos4x12.dtsi b/arch/arm/boot/dts/exynos4x12.dtsi
> index e3380a7..681db32 100644
> --- a/arch/arm/boot/dts/exynos4x12.dtsi
> +++ b/arch/arm/boot/dts/exynos4x12.dtsi
> @@ -79,4 +79,80 @@
>                 interrupts = <0 89 0>;
>                 status = "disabled";
>         };
> +
> +       sysmmu_g2d: sysmmu at 10A40000{
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x10A40000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-g2d";
> +               interrupts = <4 7>;
> +               clock-names = "sysmmu";
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_isp: sysmmu at 12260000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x12260000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_isp";
> +               interrupts = <16 2>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 362>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_drc: sysmmu at 12270000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x12270000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_drc";
> +               interrupts = <16 3>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 363>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_fd: sysmmu at 122A0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x122A0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_fd";
> +               interrupts = <16 4>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 364>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_mcuctl: sysmmu at 122B0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x122B0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_mcuctl";
> +               interrupts = <16 5>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 376>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_lite0: sysmmu at 123B0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x123B0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_lite0";
> +               interrupts = <16 0>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 366>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_lite1: sysmmu at 123C0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x123C0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_lite1";
> +               interrupts = <16 1>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 365>;
> +               status = "ok";
> +       };
>  };
> diff --git a/arch/arm/boot/dts/exynos5250.dtsi b/arch/arm/boot/dts/exynos5250.dtsi
> index fc9fb3d..130d23d 100644
> --- a/arch/arm/boot/dts/exynos5250.dtsi
> +++ b/arch/arm/boot/dts/exynos5250.dtsi
> @@ -66,6 +66,16 @@
>                 reg = <0x10044040 0x20>;
>         };
>
> +       pd_isp: mfc-power-domain at 0x10044020 {
> +               compatible = "samsung,exynos4210-pd";
> +               reg = <0x10044020 0x20>;
> +       };
> +
> +       pd_disp1: mfc-power-domain at 0x100440A0 {
> +               compatible = "samsung,exynos4210-pd";
> +               reg = <0x100440A0 0x20>;
> +       };
> +
>         clock: clock-controller at 0x10010000 {
>                 compatible = "samsung,exynos5250-clock";
>                 reg = <0x10010000 0x30000>;
> @@ -180,6 +190,7 @@
>                 reg = <0x11000000 0x10000>;
>                 interrupts = <0 96 0>;
>                 samsung,power-domain = <&pd_mfc>;
> +               iommu = <&sysmmu_mfc_l &sysmmu_mfc_l>;
>         };
>
>         rtc {
> @@ -571,6 +582,7 @@
>                 samsung,power-domain = <&pd_gsc>;
>                 clocks = <&clock 256>;
>                 clock-names = "gscl";
> +               iommu = <&sysmmu_gsc1>;
>         };
>
>         gsc_1:  gsc at 0x13e10000 {
> @@ -580,6 +592,7 @@
>                 samsung,power-domain = <&pd_gsc>;
>                 clocks = <&clock 257>;
>                 clock-names = "gscl";
> +               iommu = <&sysmmu_gsc1>;
>         };
>
>         gsc_2:  gsc at 0x13e20000 {
> @@ -589,6 +602,7 @@
>                 samsung,power-domain = <&pd_gsc>;
>                 clocks = <&clock 258>;
>                 clock-names = "gscl";
> +               iommu = <&sysmmu_gsc2>;
>         };
>
>         gsc_3:  gsc at 0x13e30000 {
> @@ -598,6 +612,7 @@
>                 samsung,power-domain = <&pd_gsc>;
>                 clocks = <&clock 259>;
>                 clock-names = "gscl";
> +               iommu = <&sysmmu_gsc3>;
>         };
>
>         hdmi {
> @@ -614,6 +629,7 @@
>                 compatible = "samsung,exynos5-mixer";
>                 reg = <0x14450000 0x10000>;
>                 interrupts = <0 94 0>;
> +               iommu = <&sysmmu_tv>;
>         };
>
>         dp-controller {
> @@ -638,5 +654,280 @@
>                 interrupts = <18 4>, <18 5>, <18 6>;
>                 clocks = <&clock 133>, <&clock 339>;
>                 clock-names = "sclk_fimd", "fimd";
> +               iommu = <&sysmmu_fimd1>;
> +       };
> +
> +       sysmmu_mfc_l: sysmmu at 11210000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11210000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-mfc_l";
> +               interrupts = <8 5>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 267>, <&clock 266>;
> +               samsung,power-domain = <&pd_mfc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_mfc_r: sysmmu at 11200000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11200000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-mfc_r";
> +               interrupts = <6 2>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 268>, <&clock 266>;
> +               samsung,power-domain = <&pd_mfc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_tv: sysmmu at 14650000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x14650000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-tv";
> +               interrupts = <7 4>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 349>;
> +               samsung,power-domain = <&pd_disp1>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_gsc0: sysmmu at 13E80000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13E80000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-gsc0";
> +               interrupts = <2 0>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 262>, <&clock 256>;
> +               samsung,power-domain = <&pd_gsc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_gsc1: sysmmu at 13E90000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13E90000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-gsc1";
> +               interrupts = <2 2>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 263>, <&clock 257>;
> +               samsung,power-domain = <&pd_gsc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_gsc2: sysmmu at 13EA0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13EA0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-gsc2";
> +               interrupts = <2 4>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 264>, <&clock 258>;
> +               samsung,power-domain = <&pd_gsc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_gsc3: sysmmu at 13EB0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13EB0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-gsc3";
> +               interrupts = <2 6>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 265>, <&clock 259>;
> +               samsung,power-domain = <&pd_gsc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimd1: sysmmu at 14640000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x14640000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimd1";
> +               interrupts = <3 2>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 350>;
> +               samsung,power-domain = <&pd_disp1>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_rotator: sysmmu at 11D40000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11D40000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-rotator";
> +               interrupts = <4 0>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 272>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_isp: sysmmu at 13260000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13260000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_isp";
> +               interrupts = <10 6>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 361>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_drc: sysmmu at 13270000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13270000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_drc";
> +               interrupts = <11 6>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 362>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_fd: sysmmu at 132A0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x132A0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_fd";
> +               interrupts = <5 0>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 363>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_scc: sysmmu at 13280000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13280000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_scalerc";
> +               interrupts = <5 2>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 364>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_scp: sysmmu at 13290000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13290000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_scalerp";
> +               interrupts = <3 6>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 365>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_mcuctl: sysmmu at 132B0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x132B0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_mcuctl";
> +               interrupts = <5 4>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 366>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_odc: sysmmu at 132C0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x132C0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_odc";
> +               interrupts = <11 0>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 367>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_dis0: sysmmu at 132D0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x132D0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_dis0";
> +               interrupts = <10 4>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 368>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_dis1: sysmmu at 132E0000{
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x132E0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_dis1";
> +               interrupts = <9 4>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 369>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_3dnr: sysmmu at 132F0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x132F0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_3dnr";
> +               interrupts = <5 6>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 370>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_lite0: sysmmu at 13C40000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13C40000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_lite0";
> +               interrupts = <3 4>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 346>, <&clock 345>;
> +               samsung,power-domain = <&pd_gsc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_lite1: sysmmu at 13C50000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13C50000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_lite1";
> +               interrupts = <24 1>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 347>, <&clock 345>;
> +               samsung,power-domain = <&pd_gsc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_jpeg: sysmmu at 11F20000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11F20000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-jpeg";
> +               interrupts = <4 2>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 273>, <&clock 270>;
> +               samsung,power-domain = <&pd_gsc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_2d: sysmmu at 10A60000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x10A60000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-2d";
> +               interrupts = <24 5>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 361>;
> +               status = "ok";
>         };
>  };
> --
> 1.7.2.5
>
>

^ permalink raw reply	[flat|nested] 65+ messages in thread

* RE: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-07-27  9:29     ` Cho KyongHo
  0 siblings, 0 replies; 65+ messages in thread
From: Cho KyongHo @ 2013-07-27  9:29 UTC (permalink / raw)
  To: 'Grant Grundler'
  Cc: 'Linux ARM Kernel', 'Linux IOMMU',
	'Linux Kernel', 'Linux Samsung SOC',
	'Hyunwoong Kim', 'Joerg Roedel',
	'Kukjin Kim', 'Prathyush', 'Rahul Sharma',
	'Subash Patel', 'Keyyoung Park',
	'Antonios Motakis', kvmarm, 'Sachin Kamat'

> -----Original Message-----
> From: grundler@google.com [mailto:grundler@google.com] On Behalf Of Grant Grundler
> Sent: Saturday, July 27, 2013 2:58 AM
> 
> On Fri, Jul 26, 2013 at 4:28 AM, Cho KyongHo <pullip.cho@samsung.com> wrote:
> > Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
> > ---
> >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
> >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
> >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
> >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
> >  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
> >  5 files changed, 617 insertions(+), 0 deletions(-)
> >  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> >
> > diff --git a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > new file mode 100644
> > index 0000000..92f0a33
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > @@ -0,0 +1,103 @@
> > +Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management Unit)
> > +
> > +Samsung's Exynos architecture contains System MMU that enables scattered
> 
> Cho,
> "MMU" should be plural? "MMUs"?
> 

An Exynos SoC has tens of System MMUs.
I agree with you.

Thanks.

> > +physical memory chunks visible as a contiguous region to DMA-capable peripheral
> > +devices like MFC, FIMC, FIMD, GScaler, FIMC-IS and so forth.
> > +
> > +System MMU is a sort of IOMMU and support identical translation table format to
> 
> s/a sort of/an/ . Or perhaps "is also an". For the purposes of
> documenting DMA support, we are talking about the IOMMU functionality
> this device provides. It might be better to mention the functionality
> the System MMU supports and refer to other subsystem documents (e,g,
> clocking and power control) for details.
> 

Thank you for the advice.
Let me check the details in another documents.

> > +ARMv7 translation tables with minimum set of page properties including access
> > +permissions, shareability and security protection. In addition, System MMU has
> > +another capabilities like L2 TLB or block-fetch buffers to minimize translation
> > +latency.
> > +
> > +A System MMU is dedicated to a single master peripheral device.  Thus, it is
> > +important to specify the correct System MMU in the device node of its master
> > +device.  Whereas a System MMU is dedicated to a master device, the master device
> > +may have more than one System MMU.
> 
> Can I suggest rewriting the last two sentences to:
>   The master device node must correctly specify at least one
> SystemMMU. A master  device may have more than one System MMU.
> 

Thanks. It looks much clearer than my expression.

> BTW, is there a difference between "master device" and "master
> peripheral device" that I'm not aware of?  Perhaps use just one of
> those expressions in this document, not both if they are the same
> thing (which is what I assumed).
> 

You assumed correctly.
I meant them the same thing.

Thank you for the detail and kind review.

> cheers,
> grant
> 
> > +
> > +Required properties:
> > +- compatible: Should be "samsung,exynos4210-sysmmu"
> > +- reg: A tuple of base address and size of System MMU registers.
> > +- interrupt-parent: The phandle of the interrupt controller of System MMU
> > +- interrupts: A tuple of numbers that indicates the interrupt source.
> > +- clock-names: Should be "sysmmu" if the System MMU is needed to gate its clock.
> > +               Please refer to the following documents:
> > +              Documentation/devicetree/bindings/clock/clock-bindings.txt
> > +              Documentation/devicetree/bindings/clock/exynos4-clock.txt
> > +              Documentation/devicetree/bindings/clock/exynos5250-clock.txt
> > +              Optional "master" if the clock to the System MMU is gated by
> > +              another gate clock other than "sysmmu". The System MMU driver
> > +              sets "master" the parent of "sysmmu".
> > +              Exynos4 SoCs, there needs no "master" clocks.
> > +              Exynos5 SoCs, some System MMUs must have "master" clocks.
> > +- clocks: Required if the System MMU is needed to gate its clock.
> > +         Please refer to the documents listed above.
> > +- samsung,power-domain: Required if the System MMU is needed to gate its power.
> > +         Please refer to the following document:
> > +         Documentation/devicetree/bindings/arm/exynos/power_domain.txt
> > +
> > +Required properties for the master peripheral devices:
> > +- iommu: phandles to the System MMUs of the device
> > +
> > +Examples:
> > +A System MMU is dedicated to a single master device.
> > +       gsc_0:  gsc@0x13e00000 {
> > +               compatible = "samsung,exynos5-gsc";
> > +               reg = <0x13e00000 0x1000>;
> > +               interrupts = <0 85 0>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               clocks = <&clock 256>;
> > +               clock-names = "gscl";
> > +               iommu = <&sysmmu_gsc1>;
> > +       };
> > +
> > +       sysmmu_gsc0: sysmmu@13E80000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13E80000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-gsc0";
> > +               interrupts = <2 0>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 262>, <&clock 256>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +MFC has 2 System MMUs for each port that MFC is attached. Thus it seems natural
> > +to define 2 System MMUs for each port of the MFC:
> > +
> > +       mfc: codec@13400000 {
> > +               compatible = "samsung,mfc-v5";
> > +               reg = <0x13400000 0x10000>;
> > +               interrupts = <0 94 0>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               clocks = <&clock 170>, <&clock 273>;
> > +               clock-names = "sclk_mfc", "mfc";
> > +               status = "ok";
> > +               iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
> > +       };
> > +
> > +       sysmmu_mfc_l: sysmmu@13620000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13620000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc-l";
> > +               interrupts = <5 5>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 274>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_mfc_r: sysmmu@13630000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13630000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc-r";
> > +               interrupts = <5 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 275>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > diff --git a/arch/arm/boot/dts/exynos4.dtsi b/arch/arm/boot/dts/exynos4.dtsi
> > index 359694c..ba74ee8 100644
> > --- a/arch/arm/boot/dts/exynos4.dtsi
> > +++ b/arch/arm/boot/dts/exynos4.dtsi
> > @@ -161,6 +161,7 @@
> >                 interrupts = <0 94 0>;
> >                 samsung,power-domain = <&pd_mfc>;
> >                 status = "disabled";
> > +               iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
> >         };
> >
> >         serial@13800000 {
> > @@ -395,5 +396,126 @@
> >                 clock-names = "sclk_fimd", "fimd";
> >                 samsung,power-domain = <&pd_lcd0>;
> >                 status = "disabled";
> > +               iommu = <&sysmmu_fimd0>;
> > +       };
> > +
> > +       sysmmu_mfc_l: sysmmu@13620000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13620000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc-l";
> > +               interrupts = <5 5>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 274>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_mfc_r: sysmmu@13630000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13630000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc-r";
> > +               interrupts = <5 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 275>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_tv: sysmmu@13E20000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13E20000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-tv";
> > +               interrupts = <5 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 272>;
> > +               samsung,power-domain = <&pd_tv>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc0: sysmmu@11A20000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11A20000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc0";
> > +               interrupts = <4 2>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 263>;
> > +               samsung,power-domain = <&pd_cam>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc1: sysmmu@11A30000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11A30000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc1";
> > +               interrupts = <4 3>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 264>;
> > +               samsung,power-domain = <&pd_cam>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc2: sysmmu@11A40000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11A40000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc2";
> > +               interrupts = <4 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 265>;
> > +               samsung,power-domain = <&pd_cam>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc3: sysmmu@11A50000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11A50000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc3";
> > +               interrupts = <4 5>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 266>;
> > +               samsung,power-domain = <&pd_cam>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_jpeg: sysmmu@11A60000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11A60000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-jpeg";
> > +               interrupts = <4 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 267>;
> > +               samsung,power-domain = <&pd_cam>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_rotator: sysmmu@12A30000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x12A30000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-rotator";
> > +               interrupts = <5 0>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 281>;
> > +               samsung,power-domain = <&pd_lcd0>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimd0: sysmmu@11E20000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11E20000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimd0";
> > +               interrupts = <5 2>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 287>;
> > +               samsung,power-domain = <&pd_lcd0>;
> > +               status = "ok";
> >         };
> >  };
> > diff --git a/arch/arm/boot/dts/exynos4210.dtsi b/arch/arm/boot/dts/exynos4210.dtsi
> > index 54710de..09b13da 100644
> > --- a/arch/arm/boot/dts/exynos4210.dtsi
> > +++ b/arch/arm/boot/dts/exynos4210.dtsi
> > @@ -119,5 +119,30 @@
> >                 reg = <0x12800000 0x1000>;
> >                 interrupts = <0 89 0>;
> >                 status = "disabled";
> > +               iommu = <&sysmmu_g2d>;
> > +       };
> > +
> > +       sysmmu_g2d: sysmmu@12A20000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x12A20000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-g2d";
> > +               interrupts = <4 7>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 280>;
> > +               samsung,power-domain = <&pd_lcd0>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimd1: sysmmu@12220000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimd1";
> > +               reg = <0x12220000 0x1000>;
> > +               interrupts = <5 3>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 291>;
> > +               samsung,power-domain = <&pd_lcd1>;
> > +               status = "ok";
> >         };
> >  };
> > diff --git a/arch/arm/boot/dts/exynos4x12.dtsi b/arch/arm/boot/dts/exynos4x12.dtsi
> > index e3380a7..681db32 100644
> > --- a/arch/arm/boot/dts/exynos4x12.dtsi
> > +++ b/arch/arm/boot/dts/exynos4x12.dtsi
> > @@ -79,4 +79,80 @@
> >                 interrupts = <0 89 0>;
> >                 status = "disabled";
> >         };
> > +
> > +       sysmmu_g2d: sysmmu@10A40000{
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x10A40000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-g2d";
> > +               interrupts = <4 7>;
> > +               clock-names = "sysmmu";
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_isp: sysmmu@12260000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x12260000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_isp";
> > +               interrupts = <16 2>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 362>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_drc: sysmmu@12270000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x12270000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_drc";
> > +               interrupts = <16 3>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 363>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_fd: sysmmu@122A0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x122A0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_fd";
> > +               interrupts = <16 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 364>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_mcuctl: sysmmu@122B0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x122B0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_mcuctl";
> > +               interrupts = <16 5>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 376>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_lite0: sysmmu@123B0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x123B0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_lite0";
> > +               interrupts = <16 0>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 366>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_lite1: sysmmu@123C0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x123C0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_lite1";
> > +               interrupts = <16 1>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 365>;
> > +               status = "ok";
> > +       };
> >  };
> > diff --git a/arch/arm/boot/dts/exynos5250.dtsi b/arch/arm/boot/dts/exynos5250.dtsi
> > index fc9fb3d..130d23d 100644
> > --- a/arch/arm/boot/dts/exynos5250.dtsi
> > +++ b/arch/arm/boot/dts/exynos5250.dtsi
> > @@ -66,6 +66,16 @@
> >                 reg = <0x10044040 0x20>;
> >         };
> >
> > +       pd_isp: mfc-power-domain@0x10044020 {
> > +               compatible = "samsung,exynos4210-pd";
> > +               reg = <0x10044020 0x20>;
> > +       };
> > +
> > +       pd_disp1: mfc-power-domain@0x100440A0 {
> > +               compatible = "samsung,exynos4210-pd";
> > +               reg = <0x100440A0 0x20>;
> > +       };
> > +
> >         clock: clock-controller@0x10010000 {
> >                 compatible = "samsung,exynos5250-clock";
> >                 reg = <0x10010000 0x30000>;
> > @@ -180,6 +190,7 @@
> >                 reg = <0x11000000 0x10000>;
> >                 interrupts = <0 96 0>;
> >                 samsung,power-domain = <&pd_mfc>;
> > +               iommu = <&sysmmu_mfc_l &sysmmu_mfc_l>;
> >         };
> >
> >         rtc {
> > @@ -571,6 +582,7 @@
> >                 samsung,power-domain = <&pd_gsc>;
> >                 clocks = <&clock 256>;
> >                 clock-names = "gscl";
> > +               iommu = <&sysmmu_gsc1>;
> >         };
> >
> >         gsc_1:  gsc@0x13e10000 {
> > @@ -580,6 +592,7 @@
> >                 samsung,power-domain = <&pd_gsc>;
> >                 clocks = <&clock 257>;
> >                 clock-names = "gscl";
> > +               iommu = <&sysmmu_gsc1>;
> >         };
> >
> >         gsc_2:  gsc@0x13e20000 {
> > @@ -589,6 +602,7 @@
> >                 samsung,power-domain = <&pd_gsc>;
> >                 clocks = <&clock 258>;
> >                 clock-names = "gscl";
> > +               iommu = <&sysmmu_gsc2>;
> >         };
> >
> >         gsc_3:  gsc@0x13e30000 {
> > @@ -598,6 +612,7 @@
> >                 samsung,power-domain = <&pd_gsc>;
> >                 clocks = <&clock 259>;
> >                 clock-names = "gscl";
> > +               iommu = <&sysmmu_gsc3>;
> >         };
> >
> >         hdmi {
> > @@ -614,6 +629,7 @@
> >                 compatible = "samsung,exynos5-mixer";
> >                 reg = <0x14450000 0x10000>;
> >                 interrupts = <0 94 0>;
> > +               iommu = <&sysmmu_tv>;
> >         };
> >
> >         dp-controller {
> > @@ -638,5 +654,280 @@
> >                 interrupts = <18 4>, <18 5>, <18 6>;
> >                 clocks = <&clock 133>, <&clock 339>;
> >                 clock-names = "sclk_fimd", "fimd";
> > +               iommu = <&sysmmu_fimd1>;
> > +       };
> > +
> > +       sysmmu_mfc_l: sysmmu@11210000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11210000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc_l";
> > +               interrupts = <8 5>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 267>, <&clock 266>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_mfc_r: sysmmu@11200000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11200000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc_r";
> > +               interrupts = <6 2>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 268>, <&clock 266>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_tv: sysmmu@14650000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x14650000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-tv";
> > +               interrupts = <7 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 349>;
> > +               samsung,power-domain = <&pd_disp1>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_gsc0: sysmmu@13E80000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13E80000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-gsc0";
> > +               interrupts = <2 0>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 262>, <&clock 256>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_gsc1: sysmmu@13E90000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13E90000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-gsc1";
> > +               interrupts = <2 2>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 263>, <&clock 257>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_gsc2: sysmmu@13EA0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13EA0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-gsc2";
> > +               interrupts = <2 4>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 264>, <&clock 258>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_gsc3: sysmmu@13EB0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13EB0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-gsc3";
> > +               interrupts = <2 6>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 265>, <&clock 259>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimd1: sysmmu@14640000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x14640000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimd1";
> > +               interrupts = <3 2>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 350>;
> > +               samsung,power-domain = <&pd_disp1>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_rotator: sysmmu@11D40000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11D40000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-rotator";
> > +               interrupts = <4 0>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 272>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_isp: sysmmu@13260000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13260000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_isp";
> > +               interrupts = <10 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 361>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_drc: sysmmu@13270000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13270000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_drc";
> > +               interrupts = <11 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 362>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_fd: sysmmu@132A0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132A0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_fd";
> > +               interrupts = <5 0>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 363>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_scc: sysmmu@13280000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13280000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_scalerc";
> > +               interrupts = <5 2>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 364>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_scp: sysmmu@13290000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13290000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_scalerp";
> > +               interrupts = <3 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 365>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_mcuctl: sysmmu@132B0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132B0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_mcuctl";
> > +               interrupts = <5 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 366>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_odc: sysmmu@132C0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132C0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_odc";
> > +               interrupts = <11 0>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 367>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_dis0: sysmmu@132D0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132D0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_dis0";
> > +               interrupts = <10 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 368>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_dis1: sysmmu@132E0000{
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132E0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_dis1";
> > +               interrupts = <9 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 369>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_3dnr: sysmmu@132F0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132F0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_3dnr";
> > +               interrupts = <5 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 370>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_lite0: sysmmu@13C40000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13C40000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_lite0";
> > +               interrupts = <3 4>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 346>, <&clock 345>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_lite1: sysmmu@13C50000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13C50000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_lite1";
> > +               interrupts = <24 1>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 347>, <&clock 345>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_jpeg: sysmmu@11F20000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11F20000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-jpeg";
> > +               interrupts = <4 2>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 273>, <&clock 270>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_2d: sysmmu@10A60000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x10A60000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-2d";
> > +               interrupts = <24 5>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 361>;
> > +               status = "ok";
> >         };
> >  };
> > --
> > 1.7.2.5
> >
> >


^ permalink raw reply	[flat|nested] 65+ messages in thread

* RE: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-07-27  9:29     ` Cho KyongHo
  0 siblings, 0 replies; 65+ messages in thread
From: Cho KyongHo @ 2013-07-27  9:29 UTC (permalink / raw)
  To: 'Grant Grundler'
  Cc: 'Linux Samsung SOC', 'Hyunwoong Kim',
	'Prathyush', 'Sachin Kamat',
	'Keyyoung Park', 'Subash Patel',
	'Linux Kernel', 'Linux IOMMU',
	'Kukjin Kim', 'Antonios Motakis',
	kvmarm-FPEHb7Xf0XXUo1n7N8X6UoWGPAHP3yOg,
	'Linux ARM Kernel', 'Rahul Sharma'

> -----Original Message-----
> From: grundler-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org [mailto:grundler-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org] On Behalf Of Grant Grundler
> Sent: Saturday, July 27, 2013 2:58 AM
> 
> On Fri, Jul 26, 2013 at 4:28 AM, Cho KyongHo <pullip.cho-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org> wrote:
> > Signed-off-by: Cho KyongHo <pullip.cho-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
> > ---
> >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
> >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
> >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
> >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
> >  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
> >  5 files changed, 617 insertions(+), 0 deletions(-)
> >  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> >
> > diff --git a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > new file mode 100644
> > index 0000000..92f0a33
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > @@ -0,0 +1,103 @@
> > +Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management Unit)
> > +
> > +Samsung's Exynos architecture contains System MMU that enables scattered
> 
> Cho,
> "MMU" should be plural? "MMUs"?
> 

An Exynos SoC has tens of System MMUs.
I agree with you.

Thanks.

> > +physical memory chunks visible as a contiguous region to DMA-capable peripheral
> > +devices like MFC, FIMC, FIMD, GScaler, FIMC-IS and so forth.
> > +
> > +System MMU is a sort of IOMMU and support identical translation table format to
> 
> s/a sort of/an/ . Or perhaps "is also an". For the purposes of
> documenting DMA support, we are talking about the IOMMU functionality
> this device provides. It might be better to mention the functionality
> the System MMU supports and refer to other subsystem documents (e,g,
> clocking and power control) for details.
> 

Thank you for the advice.
Let me check the details in another documents.

> > +ARMv7 translation tables with minimum set of page properties including access
> > +permissions, shareability and security protection. In addition, System MMU has
> > +another capabilities like L2 TLB or block-fetch buffers to minimize translation
> > +latency.
> > +
> > +A System MMU is dedicated to a single master peripheral device.  Thus, it is
> > +important to specify the correct System MMU in the device node of its master
> > +device.  Whereas a System MMU is dedicated to a master device, the master device
> > +may have more than one System MMU.
> 
> Can I suggest rewriting the last two sentences to:
>   The master device node must correctly specify at least one
> SystemMMU. A master  device may have more than one System MMU.
> 

Thanks. It looks much clearer than my expression.

> BTW, is there a difference between "master device" and "master
> peripheral device" that I'm not aware of?  Perhaps use just one of
> those expressions in this document, not both if they are the same
> thing (which is what I assumed).
> 

You assumed correctly.
I meant them the same thing.

Thank you for the detail and kind review.

> cheers,
> grant
> 
> > +
> > +Required properties:
> > +- compatible: Should be "samsung,exynos4210-sysmmu"
> > +- reg: A tuple of base address and size of System MMU registers.
> > +- interrupt-parent: The phandle of the interrupt controller of System MMU
> > +- interrupts: A tuple of numbers that indicates the interrupt source.
> > +- clock-names: Should be "sysmmu" if the System MMU is needed to gate its clock.
> > +               Please refer to the following documents:
> > +              Documentation/devicetree/bindings/clock/clock-bindings.txt
> > +              Documentation/devicetree/bindings/clock/exynos4-clock.txt
> > +              Documentation/devicetree/bindings/clock/exynos5250-clock.txt
> > +              Optional "master" if the clock to the System MMU is gated by
> > +              another gate clock other than "sysmmu". The System MMU driver
> > +              sets "master" the parent of "sysmmu".
> > +              Exynos4 SoCs, there needs no "master" clocks.
> > +              Exynos5 SoCs, some System MMUs must have "master" clocks.
> > +- clocks: Required if the System MMU is needed to gate its clock.
> > +         Please refer to the documents listed above.
> > +- samsung,power-domain: Required if the System MMU is needed to gate its power.
> > +         Please refer to the following document:
> > +         Documentation/devicetree/bindings/arm/exynos/power_domain.txt
> > +
> > +Required properties for the master peripheral devices:
> > +- iommu: phandles to the System MMUs of the device
> > +
> > +Examples:
> > +A System MMU is dedicated to a single master device.
> > +       gsc_0:  gsc@0x13e00000 {
> > +               compatible = "samsung,exynos5-gsc";
> > +               reg = <0x13e00000 0x1000>;
> > +               interrupts = <0 85 0>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               clocks = <&clock 256>;
> > +               clock-names = "gscl";
> > +               iommu = <&sysmmu_gsc1>;
> > +       };
> > +
> > +       sysmmu_gsc0: sysmmu@13E80000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13E80000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-gsc0";
> > +               interrupts = <2 0>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 262>, <&clock 256>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +MFC has 2 System MMUs for each port that MFC is attached. Thus it seems natural
> > +to define 2 System MMUs for each port of the MFC:
> > +
> > +       mfc: codec@13400000 {
> > +               compatible = "samsung,mfc-v5";
> > +               reg = <0x13400000 0x10000>;
> > +               interrupts = <0 94 0>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               clocks = <&clock 170>, <&clock 273>;
> > +               clock-names = "sclk_mfc", "mfc";
> > +               status = "ok";
> > +               iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
> > +       };
> > +
> > +       sysmmu_mfc_l: sysmmu@13620000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13620000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc-l";
> > +               interrupts = <5 5>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 274>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_mfc_r: sysmmu@13630000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13630000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc-r";
> > +               interrupts = <5 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 275>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > diff --git a/arch/arm/boot/dts/exynos4.dtsi b/arch/arm/boot/dts/exynos4.dtsi
> > index 359694c..ba74ee8 100644
> > --- a/arch/arm/boot/dts/exynos4.dtsi
> > +++ b/arch/arm/boot/dts/exynos4.dtsi
> > @@ -161,6 +161,7 @@
> >                 interrupts = <0 94 0>;
> >                 samsung,power-domain = <&pd_mfc>;
> >                 status = "disabled";
> > +               iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
> >         };
> >
> >         serial@13800000 {
> > @@ -395,5 +396,126 @@
> >                 clock-names = "sclk_fimd", "fimd";
> >                 samsung,power-domain = <&pd_lcd0>;
> >                 status = "disabled";
> > +               iommu = <&sysmmu_fimd0>;
> > +       };
> > +
> > +       sysmmu_mfc_l: sysmmu@13620000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13620000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc-l";
> > +               interrupts = <5 5>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 274>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_mfc_r: sysmmu@13630000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13630000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc-r";
> > +               interrupts = <5 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 275>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_tv: sysmmu@13E20000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13E20000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-tv";
> > +               interrupts = <5 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 272>;
> > +               samsung,power-domain = <&pd_tv>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc0: sysmmu@11A20000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11A20000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc0";
> > +               interrupts = <4 2>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 263>;
> > +               samsung,power-domain = <&pd_cam>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc1: sysmmu@11A30000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11A30000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc1";
> > +               interrupts = <4 3>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 264>;
> > +               samsung,power-domain = <&pd_cam>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc2: sysmmu@11A40000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11A40000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc2";
> > +               interrupts = <4 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 265>;
> > +               samsung,power-domain = <&pd_cam>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc3: sysmmu@11A50000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11A50000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc3";
> > +               interrupts = <4 5>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 266>;
> > +               samsung,power-domain = <&pd_cam>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_jpeg: sysmmu@11A60000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11A60000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-jpeg";
> > +               interrupts = <4 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 267>;
> > +               samsung,power-domain = <&pd_cam>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_rotator: sysmmu@12A30000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x12A30000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-rotator";
> > +               interrupts = <5 0>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 281>;
> > +               samsung,power-domain = <&pd_lcd0>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimd0: sysmmu@11E20000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11E20000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimd0";
> > +               interrupts = <5 2>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 287>;
> > +               samsung,power-domain = <&pd_lcd0>;
> > +               status = "ok";
> >         };
> >  };
> > diff --git a/arch/arm/boot/dts/exynos4210.dtsi b/arch/arm/boot/dts/exynos4210.dtsi
> > index 54710de..09b13da 100644
> > --- a/arch/arm/boot/dts/exynos4210.dtsi
> > +++ b/arch/arm/boot/dts/exynos4210.dtsi
> > @@ -119,5 +119,30 @@
> >                 reg = <0x12800000 0x1000>;
> >                 interrupts = <0 89 0>;
> >                 status = "disabled";
> > +               iommu = <&sysmmu_g2d>;
> > +       };
> > +
> > +       sysmmu_g2d: sysmmu@12A20000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x12A20000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-g2d";
> > +               interrupts = <4 7>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 280>;
> > +               samsung,power-domain = <&pd_lcd0>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimd1: sysmmu@12220000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimd1";
> > +               reg = <0x12220000 0x1000>;
> > +               interrupts = <5 3>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 291>;
> > +               samsung,power-domain = <&pd_lcd1>;
> > +               status = "ok";
> >         };
> >  };
> > diff --git a/arch/arm/boot/dts/exynos4x12.dtsi b/arch/arm/boot/dts/exynos4x12.dtsi
> > index e3380a7..681db32 100644
> > --- a/arch/arm/boot/dts/exynos4x12.dtsi
> > +++ b/arch/arm/boot/dts/exynos4x12.dtsi
> > @@ -79,4 +79,80 @@
> >                 interrupts = <0 89 0>;
> >                 status = "disabled";
> >         };
> > +
> > +       sysmmu_g2d: sysmmu@10A40000{
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x10A40000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-g2d";
> > +               interrupts = <4 7>;
> > +               clock-names = "sysmmu";
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_isp: sysmmu@12260000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x12260000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_isp";
> > +               interrupts = <16 2>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 362>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_drc: sysmmu@12270000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x12270000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_drc";
> > +               interrupts = <16 3>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 363>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_fd: sysmmu@122A0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x122A0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_fd";
> > +               interrupts = <16 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 364>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_mcuctl: sysmmu@122B0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x122B0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_mcuctl";
> > +               interrupts = <16 5>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 376>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_lite0: sysmmu@123B0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x123B0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_lite0";
> > +               interrupts = <16 0>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 366>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_lite1: sysmmu@123C0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x123C0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_lite1";
> > +               interrupts = <16 1>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 365>;
> > +               status = "ok";
> > +       };
> >  };
> > diff --git a/arch/arm/boot/dts/exynos5250.dtsi b/arch/arm/boot/dts/exynos5250.dtsi
> > index fc9fb3d..130d23d 100644
> > --- a/arch/arm/boot/dts/exynos5250.dtsi
> > +++ b/arch/arm/boot/dts/exynos5250.dtsi
> > @@ -66,6 +66,16 @@
> >                 reg = <0x10044040 0x20>;
> >         };
> >
> > +       pd_isp: mfc-power-domain@0x10044020 {
> > +               compatible = "samsung,exynos4210-pd";
> > +               reg = <0x10044020 0x20>;
> > +       };
> > +
> > +       pd_disp1: mfc-power-domain@0x100440A0 {
> > +               compatible = "samsung,exynos4210-pd";
> > +               reg = <0x100440A0 0x20>;
> > +       };
> > +
> >         clock: clock-controller@0x10010000 {
> >                 compatible = "samsung,exynos5250-clock";
> >                 reg = <0x10010000 0x30000>;
> > @@ -180,6 +190,7 @@
> >                 reg = <0x11000000 0x10000>;
> >                 interrupts = <0 96 0>;
> >                 samsung,power-domain = <&pd_mfc>;
> > +               iommu = <&sysmmu_mfc_l &sysmmu_mfc_l>;
> >         };
> >
> >         rtc {
> > @@ -571,6 +582,7 @@
> >                 samsung,power-domain = <&pd_gsc>;
> >                 clocks = <&clock 256>;
> >                 clock-names = "gscl";
> > +               iommu = <&sysmmu_gsc1>;
> >         };
> >
> >         gsc_1:  gsc@0x13e10000 {
> > @@ -580,6 +592,7 @@
> >                 samsung,power-domain = <&pd_gsc>;
> >                 clocks = <&clock 257>;
> >                 clock-names = "gscl";
> > +               iommu = <&sysmmu_gsc1>;
> >         };
> >
> >         gsc_2:  gsc@0x13e20000 {
> > @@ -589,6 +602,7 @@
> >                 samsung,power-domain = <&pd_gsc>;
> >                 clocks = <&clock 258>;
> >                 clock-names = "gscl";
> > +               iommu = <&sysmmu_gsc2>;
> >         };
> >
> >         gsc_3:  gsc@0x13e30000 {
> > @@ -598,6 +612,7 @@
> >                 samsung,power-domain = <&pd_gsc>;
> >                 clocks = <&clock 259>;
> >                 clock-names = "gscl";
> > +               iommu = <&sysmmu_gsc3>;
> >         };
> >
> >         hdmi {
> > @@ -614,6 +629,7 @@
> >                 compatible = "samsung,exynos5-mixer";
> >                 reg = <0x14450000 0x10000>;
> >                 interrupts = <0 94 0>;
> > +               iommu = <&sysmmu_tv>;
> >         };
> >
> >         dp-controller {
> > @@ -638,5 +654,280 @@
> >                 interrupts = <18 4>, <18 5>, <18 6>;
> >                 clocks = <&clock 133>, <&clock 339>;
> >                 clock-names = "sclk_fimd", "fimd";
> > +               iommu = <&sysmmu_fimd1>;
> > +       };
> > +
> > +       sysmmu_mfc_l: sysmmu@11210000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11210000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc_l";
> > +               interrupts = <8 5>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 267>, <&clock 266>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_mfc_r: sysmmu@11200000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11200000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc_r";
> > +               interrupts = <6 2>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 268>, <&clock 266>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_tv: sysmmu@14650000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x14650000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-tv";
> > +               interrupts = <7 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 349>;
> > +               samsung,power-domain = <&pd_disp1>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_gsc0: sysmmu@13E80000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13E80000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-gsc0";
> > +               interrupts = <2 0>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 262>, <&clock 256>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_gsc1: sysmmu@13E90000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13E90000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-gsc1";
> > +               interrupts = <2 2>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 263>, <&clock 257>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_gsc2: sysmmu@13EA0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13EA0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-gsc2";
> > +               interrupts = <2 4>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 264>, <&clock 258>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_gsc3: sysmmu@13EB0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13EB0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-gsc3";
> > +               interrupts = <2 6>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 265>, <&clock 259>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimd1: sysmmu@14640000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x14640000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimd1";
> > +               interrupts = <3 2>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 350>;
> > +               samsung,power-domain = <&pd_disp1>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_rotator: sysmmu@11D40000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11D40000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-rotator";
> > +               interrupts = <4 0>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 272>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_isp: sysmmu@13260000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13260000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_isp";
> > +               interrupts = <10 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 361>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_drc: sysmmu@13270000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13270000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_drc";
> > +               interrupts = <11 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 362>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_fd: sysmmu@132A0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132A0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_fd";
> > +               interrupts = <5 0>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 363>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_scc: sysmmu@13280000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13280000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_scalerc";
> > +               interrupts = <5 2>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 364>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_scp: sysmmu@13290000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13290000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_scalerp";
> > +               interrupts = <3 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 365>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_mcuctl: sysmmu@132B0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132B0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_mcuctl";
> > +               interrupts = <5 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 366>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_odc: sysmmu@132C0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132C0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_odc";
> > +               interrupts = <11 0>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 367>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_dis0: sysmmu@132D0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132D0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_dis0";
> > +               interrupts = <10 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 368>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_dis1: sysmmu@132E0000{
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132E0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_dis1";
> > +               interrupts = <9 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 369>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_3dnr: sysmmu@132F0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132F0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_3dnr";
> > +               interrupts = <5 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 370>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_lite0: sysmmu@13C40000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13C40000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_lite0";
> > +               interrupts = <3 4>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 346>, <&clock 345>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_lite1: sysmmu@13C50000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13C50000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_lite1";
> > +               interrupts = <24 1>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 347>, <&clock 345>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_jpeg: sysmmu@11F20000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11F20000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-jpeg";
> > +               interrupts = <4 2>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 273>, <&clock 270>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_2d: sysmmu@10A60000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x10A60000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-2d";
> > +               interrupts = <24 5>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 361>;
> > +               status = "ok";
> >         };
> >  };
> > --
> > 1.7.2.5
> >
> >

^ permalink raw reply	[flat|nested] 65+ messages in thread

* [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-07-27  9:29     ` Cho KyongHo
  0 siblings, 0 replies; 65+ messages in thread
From: Cho KyongHo @ 2013-07-27  9:29 UTC (permalink / raw)
  To: linux-arm-kernel

> -----Original Message-----
> From: grundler at google.com [mailto:grundler at google.com] On Behalf Of Grant Grundler
> Sent: Saturday, July 27, 2013 2:58 AM
> 
> On Fri, Jul 26, 2013 at 4:28 AM, Cho KyongHo <pullip.cho@samsung.com> wrote:
> > Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
> > ---
> >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
> >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
> >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
> >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
> >  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
> >  5 files changed, 617 insertions(+), 0 deletions(-)
> >  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> >
> > diff --git a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > new file mode 100644
> > index 0000000..92f0a33
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > @@ -0,0 +1,103 @@
> > +Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management Unit)
> > +
> > +Samsung's Exynos architecture contains System MMU that enables scattered
> 
> Cho,
> "MMU" should be plural? "MMUs"?
> 

An Exynos SoC has tens of System MMUs.
I agree with you.

Thanks.

> > +physical memory chunks visible as a contiguous region to DMA-capable peripheral
> > +devices like MFC, FIMC, FIMD, GScaler, FIMC-IS and so forth.
> > +
> > +System MMU is a sort of IOMMU and support identical translation table format to
> 
> s/a sort of/an/ . Or perhaps "is also an". For the purposes of
> documenting DMA support, we are talking about the IOMMU functionality
> this device provides. It might be better to mention the functionality
> the System MMU supports and refer to other subsystem documents (e,g,
> clocking and power control) for details.
> 

Thank you for the advice.
Let me check the details in another documents.

> > +ARMv7 translation tables with minimum set of page properties including access
> > +permissions, shareability and security protection. In addition, System MMU has
> > +another capabilities like L2 TLB or block-fetch buffers to minimize translation
> > +latency.
> > +
> > +A System MMU is dedicated to a single master peripheral device.  Thus, it is
> > +important to specify the correct System MMU in the device node of its master
> > +device.  Whereas a System MMU is dedicated to a master device, the master device
> > +may have more than one System MMU.
> 
> Can I suggest rewriting the last two sentences to:
>   The master device node must correctly specify at least one
> SystemMMU. A master  device may have more than one System MMU.
> 

Thanks. It looks much clearer than my expression.

> BTW, is there a difference between "master device" and "master
> peripheral device" that I'm not aware of?  Perhaps use just one of
> those expressions in this document, not both if they are the same
> thing (which is what I assumed).
> 

You assumed correctly.
I meant them the same thing.

Thank you for the detail and kind review.

> cheers,
> grant
> 
> > +
> > +Required properties:
> > +- compatible: Should be "samsung,exynos4210-sysmmu"
> > +- reg: A tuple of base address and size of System MMU registers.
> > +- interrupt-parent: The phandle of the interrupt controller of System MMU
> > +- interrupts: A tuple of numbers that indicates the interrupt source.
> > +- clock-names: Should be "sysmmu" if the System MMU is needed to gate its clock.
> > +               Please refer to the following documents:
> > +              Documentation/devicetree/bindings/clock/clock-bindings.txt
> > +              Documentation/devicetree/bindings/clock/exynos4-clock.txt
> > +              Documentation/devicetree/bindings/clock/exynos5250-clock.txt
> > +              Optional "master" if the clock to the System MMU is gated by
> > +              another gate clock other than "sysmmu". The System MMU driver
> > +              sets "master" the parent of "sysmmu".
> > +              Exynos4 SoCs, there needs no "master" clocks.
> > +              Exynos5 SoCs, some System MMUs must have "master" clocks.
> > +- clocks: Required if the System MMU is needed to gate its clock.
> > +         Please refer to the documents listed above.
> > +- samsung,power-domain: Required if the System MMU is needed to gate its power.
> > +         Please refer to the following document:
> > +         Documentation/devicetree/bindings/arm/exynos/power_domain.txt
> > +
> > +Required properties for the master peripheral devices:
> > +- iommu: phandles to the System MMUs of the device
> > +
> > +Examples:
> > +A System MMU is dedicated to a single master device.
> > +       gsc_0:  gsc at 0x13e00000 {
> > +               compatible = "samsung,exynos5-gsc";
> > +               reg = <0x13e00000 0x1000>;
> > +               interrupts = <0 85 0>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               clocks = <&clock 256>;
> > +               clock-names = "gscl";
> > +               iommu = <&sysmmu_gsc1>;
> > +       };
> > +
> > +       sysmmu_gsc0: sysmmu at 13E80000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13E80000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-gsc0";
> > +               interrupts = <2 0>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 262>, <&clock 256>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +MFC has 2 System MMUs for each port that MFC is attached. Thus it seems natural
> > +to define 2 System MMUs for each port of the MFC:
> > +
> > +       mfc: codec at 13400000 {
> > +               compatible = "samsung,mfc-v5";
> > +               reg = <0x13400000 0x10000>;
> > +               interrupts = <0 94 0>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               clocks = <&clock 170>, <&clock 273>;
> > +               clock-names = "sclk_mfc", "mfc";
> > +               status = "ok";
> > +               iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
> > +       };
> > +
> > +       sysmmu_mfc_l: sysmmu at 13620000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13620000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc-l";
> > +               interrupts = <5 5>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 274>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_mfc_r: sysmmu at 13630000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13630000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc-r";
> > +               interrupts = <5 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 275>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > diff --git a/arch/arm/boot/dts/exynos4.dtsi b/arch/arm/boot/dts/exynos4.dtsi
> > index 359694c..ba74ee8 100644
> > --- a/arch/arm/boot/dts/exynos4.dtsi
> > +++ b/arch/arm/boot/dts/exynos4.dtsi
> > @@ -161,6 +161,7 @@
> >                 interrupts = <0 94 0>;
> >                 samsung,power-domain = <&pd_mfc>;
> >                 status = "disabled";
> > +               iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
> >         };
> >
> >         serial at 13800000 {
> > @@ -395,5 +396,126 @@
> >                 clock-names = "sclk_fimd", "fimd";
> >                 samsung,power-domain = <&pd_lcd0>;
> >                 status = "disabled";
> > +               iommu = <&sysmmu_fimd0>;
> > +       };
> > +
> > +       sysmmu_mfc_l: sysmmu at 13620000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13620000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc-l";
> > +               interrupts = <5 5>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 274>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_mfc_r: sysmmu at 13630000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13630000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc-r";
> > +               interrupts = <5 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 275>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_tv: sysmmu at 13E20000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13E20000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-tv";
> > +               interrupts = <5 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 272>;
> > +               samsung,power-domain = <&pd_tv>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc0: sysmmu at 11A20000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11A20000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc0";
> > +               interrupts = <4 2>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 263>;
> > +               samsung,power-domain = <&pd_cam>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc1: sysmmu at 11A30000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11A30000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc1";
> > +               interrupts = <4 3>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 264>;
> > +               samsung,power-domain = <&pd_cam>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc2: sysmmu at 11A40000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11A40000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc2";
> > +               interrupts = <4 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 265>;
> > +               samsung,power-domain = <&pd_cam>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc3: sysmmu at 11A50000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11A50000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc3";
> > +               interrupts = <4 5>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 266>;
> > +               samsung,power-domain = <&pd_cam>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_jpeg: sysmmu at 11A60000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11A60000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-jpeg";
> > +               interrupts = <4 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 267>;
> > +               samsung,power-domain = <&pd_cam>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_rotator: sysmmu at 12A30000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x12A30000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-rotator";
> > +               interrupts = <5 0>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 281>;
> > +               samsung,power-domain = <&pd_lcd0>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimd0: sysmmu at 11E20000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11E20000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimd0";
> > +               interrupts = <5 2>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 287>;
> > +               samsung,power-domain = <&pd_lcd0>;
> > +               status = "ok";
> >         };
> >  };
> > diff --git a/arch/arm/boot/dts/exynos4210.dtsi b/arch/arm/boot/dts/exynos4210.dtsi
> > index 54710de..09b13da 100644
> > --- a/arch/arm/boot/dts/exynos4210.dtsi
> > +++ b/arch/arm/boot/dts/exynos4210.dtsi
> > @@ -119,5 +119,30 @@
> >                 reg = <0x12800000 0x1000>;
> >                 interrupts = <0 89 0>;
> >                 status = "disabled";
> > +               iommu = <&sysmmu_g2d>;
> > +       };
> > +
> > +       sysmmu_g2d: sysmmu at 12A20000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x12A20000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-g2d";
> > +               interrupts = <4 7>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 280>;
> > +               samsung,power-domain = <&pd_lcd0>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimd1: sysmmu at 12220000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimd1";
> > +               reg = <0x12220000 0x1000>;
> > +               interrupts = <5 3>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 291>;
> > +               samsung,power-domain = <&pd_lcd1>;
> > +               status = "ok";
> >         };
> >  };
> > diff --git a/arch/arm/boot/dts/exynos4x12.dtsi b/arch/arm/boot/dts/exynos4x12.dtsi
> > index e3380a7..681db32 100644
> > --- a/arch/arm/boot/dts/exynos4x12.dtsi
> > +++ b/arch/arm/boot/dts/exynos4x12.dtsi
> > @@ -79,4 +79,80 @@
> >                 interrupts = <0 89 0>;
> >                 status = "disabled";
> >         };
> > +
> > +       sysmmu_g2d: sysmmu at 10A40000{
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x10A40000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-g2d";
> > +               interrupts = <4 7>;
> > +               clock-names = "sysmmu";
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_isp: sysmmu at 12260000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x12260000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_isp";
> > +               interrupts = <16 2>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 362>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_drc: sysmmu at 12270000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x12270000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_drc";
> > +               interrupts = <16 3>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 363>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_fd: sysmmu at 122A0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x122A0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_fd";
> > +               interrupts = <16 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 364>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_mcuctl: sysmmu at 122B0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x122B0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_mcuctl";
> > +               interrupts = <16 5>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 376>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_lite0: sysmmu at 123B0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x123B0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_lite0";
> > +               interrupts = <16 0>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 366>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_lite1: sysmmu at 123C0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x123C0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_lite1";
> > +               interrupts = <16 1>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 365>;
> > +               status = "ok";
> > +       };
> >  };
> > diff --git a/arch/arm/boot/dts/exynos5250.dtsi b/arch/arm/boot/dts/exynos5250.dtsi
> > index fc9fb3d..130d23d 100644
> > --- a/arch/arm/boot/dts/exynos5250.dtsi
> > +++ b/arch/arm/boot/dts/exynos5250.dtsi
> > @@ -66,6 +66,16 @@
> >                 reg = <0x10044040 0x20>;
> >         };
> >
> > +       pd_isp: mfc-power-domain at 0x10044020 {
> > +               compatible = "samsung,exynos4210-pd";
> > +               reg = <0x10044020 0x20>;
> > +       };
> > +
> > +       pd_disp1: mfc-power-domain at 0x100440A0 {
> > +               compatible = "samsung,exynos4210-pd";
> > +               reg = <0x100440A0 0x20>;
> > +       };
> > +
> >         clock: clock-controller at 0x10010000 {
> >                 compatible = "samsung,exynos5250-clock";
> >                 reg = <0x10010000 0x30000>;
> > @@ -180,6 +190,7 @@
> >                 reg = <0x11000000 0x10000>;
> >                 interrupts = <0 96 0>;
> >                 samsung,power-domain = <&pd_mfc>;
> > +               iommu = <&sysmmu_mfc_l &sysmmu_mfc_l>;
> >         };
> >
> >         rtc {
> > @@ -571,6 +582,7 @@
> >                 samsung,power-domain = <&pd_gsc>;
> >                 clocks = <&clock 256>;
> >                 clock-names = "gscl";
> > +               iommu = <&sysmmu_gsc1>;
> >         };
> >
> >         gsc_1:  gsc at 0x13e10000 {
> > @@ -580,6 +592,7 @@
> >                 samsung,power-domain = <&pd_gsc>;
> >                 clocks = <&clock 257>;
> >                 clock-names = "gscl";
> > +               iommu = <&sysmmu_gsc1>;
> >         };
> >
> >         gsc_2:  gsc at 0x13e20000 {
> > @@ -589,6 +602,7 @@
> >                 samsung,power-domain = <&pd_gsc>;
> >                 clocks = <&clock 258>;
> >                 clock-names = "gscl";
> > +               iommu = <&sysmmu_gsc2>;
> >         };
> >
> >         gsc_3:  gsc at 0x13e30000 {
> > @@ -598,6 +612,7 @@
> >                 samsung,power-domain = <&pd_gsc>;
> >                 clocks = <&clock 259>;
> >                 clock-names = "gscl";
> > +               iommu = <&sysmmu_gsc3>;
> >         };
> >
> >         hdmi {
> > @@ -614,6 +629,7 @@
> >                 compatible = "samsung,exynos5-mixer";
> >                 reg = <0x14450000 0x10000>;
> >                 interrupts = <0 94 0>;
> > +               iommu = <&sysmmu_tv>;
> >         };
> >
> >         dp-controller {
> > @@ -638,5 +654,280 @@
> >                 interrupts = <18 4>, <18 5>, <18 6>;
> >                 clocks = <&clock 133>, <&clock 339>;
> >                 clock-names = "sclk_fimd", "fimd";
> > +               iommu = <&sysmmu_fimd1>;
> > +       };
> > +
> > +       sysmmu_mfc_l: sysmmu at 11210000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11210000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc_l";
> > +               interrupts = <8 5>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 267>, <&clock 266>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_mfc_r: sysmmu at 11200000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11200000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc_r";
> > +               interrupts = <6 2>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 268>, <&clock 266>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_tv: sysmmu at 14650000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x14650000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-tv";
> > +               interrupts = <7 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 349>;
> > +               samsung,power-domain = <&pd_disp1>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_gsc0: sysmmu at 13E80000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13E80000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-gsc0";
> > +               interrupts = <2 0>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 262>, <&clock 256>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_gsc1: sysmmu at 13E90000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13E90000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-gsc1";
> > +               interrupts = <2 2>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 263>, <&clock 257>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_gsc2: sysmmu at 13EA0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13EA0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-gsc2";
> > +               interrupts = <2 4>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 264>, <&clock 258>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_gsc3: sysmmu at 13EB0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13EB0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-gsc3";
> > +               interrupts = <2 6>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 265>, <&clock 259>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimd1: sysmmu at 14640000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x14640000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimd1";
> > +               interrupts = <3 2>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 350>;
> > +               samsung,power-domain = <&pd_disp1>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_rotator: sysmmu at 11D40000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11D40000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-rotator";
> > +               interrupts = <4 0>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 272>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_isp: sysmmu at 13260000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13260000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_isp";
> > +               interrupts = <10 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 361>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_drc: sysmmu at 13270000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13270000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_drc";
> > +               interrupts = <11 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 362>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_fd: sysmmu at 132A0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132A0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_fd";
> > +               interrupts = <5 0>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 363>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_scc: sysmmu at 13280000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13280000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_scalerc";
> > +               interrupts = <5 2>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 364>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_scp: sysmmu at 13290000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13290000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_scalerp";
> > +               interrupts = <3 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 365>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_mcuctl: sysmmu at 132B0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132B0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_mcuctl";
> > +               interrupts = <5 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 366>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_odc: sysmmu at 132C0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132C0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_odc";
> > +               interrupts = <11 0>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 367>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_dis0: sysmmu at 132D0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132D0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_dis0";
> > +               interrupts = <10 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 368>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_dis1: sysmmu at 132E0000{
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132E0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_dis1";
> > +               interrupts = <9 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 369>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_3dnr: sysmmu at 132F0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132F0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_3dnr";
> > +               interrupts = <5 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 370>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_lite0: sysmmu at 13C40000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13C40000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_lite0";
> > +               interrupts = <3 4>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 346>, <&clock 345>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_lite1: sysmmu at 13C50000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13C50000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_lite1";
> > +               interrupts = <24 1>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 347>, <&clock 345>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_jpeg: sysmmu at 11F20000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11F20000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-jpeg";
> > +               interrupts = <4 2>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 273>, <&clock 270>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_2d: sysmmu at 10A60000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x10A60000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-2d";
> > +               interrupts = <24 5>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 361>;
> > +               status = "ok";
> >         };
> >  };
> > --
> > 1.7.2.5
> >
> >

^ permalink raw reply	[flat|nested] 65+ messages in thread

* Re: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
  2013-07-26 11:28 ` Cho KyongHo
@ 2013-07-27 13:54   ` Rob Herring
  -1 siblings, 0 replies; 65+ messages in thread
From: Rob Herring @ 2013-07-27 13:54 UTC (permalink / raw)
  To: Cho KyongHo
  Cc: Linux ARM Kernel, Linux IOMMU, Linux Kernel, Linux Samsung SOC,
	Kukjin Kim, Hyunwoong Kim, Prathyush, Grant Grundler,
	Joerg Roedel, Keyyoung Park, Subash Patel, Sachin Kamat,
	Antonios Motakis, kvmarm, Rahul Sharma, Will Deacon

On Fri, Jul 26, 2013 at 6:28 AM, Cho KyongHo <pullip.cho@samsung.com> wrote:
> Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
> ---
>  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
>  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
>  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
>  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
>  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
>  5 files changed, 617 insertions(+), 0 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
>
> diff --git a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> new file mode 100644
> index 0000000..92f0a33
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> @@ -0,0 +1,103 @@
> +Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management Unit)
> +
> +Samsung's Exynos architecture contains System MMU that enables scattered
> +physical memory chunks visible as a contiguous region to DMA-capable peripheral
> +devices like MFC, FIMC, FIMD, GScaler, FIMC-IS and so forth.
> +
> +System MMU is a sort of IOMMU and support identical translation table format to
> +ARMv7 translation tables with minimum set of page properties including access
> +permissions, shareability and security protection. In addition, System MMU has
> +another capabilities like L2 TLB or block-fetch buffers to minimize translation
> +latency.
> +
> +A System MMU is dedicated to a single master peripheral device.  Thus, it is
> +important to specify the correct System MMU in the device node of its master
> +device. Whereas a System MMU is dedicated to a master device, the master device
> +may have more than one System MMU.

I don't follow the last sentence. Can you elaborate on the type of
connection you are talking about.

Also, please align with the ARM system MMU binding that Will Deacon
has submitted particularly in terms of how master connections are
described.

Rob

> +
> +Required properties:
> +- compatible: Should be "samsung,exynos4210-sysmmu"
> +- reg: A tuple of base address and size of System MMU registers.
> +- interrupt-parent: The phandle of the interrupt controller of System MMU
> +- interrupts: A tuple of numbers that indicates the interrupt source.
> +- clock-names: Should be "sysmmu" if the System MMU is needed to gate its clock.
> +               Please refer to the following documents:
> +              Documentation/devicetree/bindings/clock/clock-bindings.txt
> +              Documentation/devicetree/bindings/clock/exynos4-clock.txt
> +              Documentation/devicetree/bindings/clock/exynos5250-clock.txt
> +              Optional "master" if the clock to the System MMU is gated by
> +              another gate clock other than "sysmmu". The System MMU driver
> +              sets "master" the parent of "sysmmu".
> +              Exynos4 SoCs, there needs no "master" clocks.
> +              Exynos5 SoCs, some System MMUs must have "master" clocks.
> +- clocks: Required if the System MMU is needed to gate its clock.
> +         Please refer to the documents listed above.
> +- samsung,power-domain: Required if the System MMU is needed to gate its power.
> +         Please refer to the following document:
> +         Documentation/devicetree/bindings/arm/exynos/power_domain.txt
> +
> +Required properties for the master peripheral devices:
> +- iommu: phandles to the System MMUs of the device
> +
> +Examples:
> +A System MMU is dedicated to a single master device.
> +       gsc_0:  gsc@0x13e00000 {
> +               compatible = "samsung,exynos5-gsc";
> +               reg = <0x13e00000 0x1000>;
> +               interrupts = <0 85 0>;
> +               samsung,power-domain = <&pd_gsc>;
> +               clocks = <&clock 256>;
> +               clock-names = "gscl";
> +               iommu = <&sysmmu_gsc1>;
> +       };
> +
> +       sysmmu_gsc0: sysmmu@13E80000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13E80000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-gsc0";
> +               interrupts = <2 0>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 262>, <&clock 256>;
> +               samsung,power-domain = <&pd_gsc>;
> +               status = "ok";
> +       };
> +
> +MFC has 2 System MMUs for each port that MFC is attached. Thus it seems natural
> +to define 2 System MMUs for each port of the MFC:
> +
> +       mfc: codec@13400000 {
> +               compatible = "samsung,mfc-v5";
> +               reg = <0x13400000 0x10000>;
> +               interrupts = <0 94 0>;
> +               samsung,power-domain = <&pd_mfc>;
> +               clocks = <&clock 170>, <&clock 273>;
> +               clock-names = "sclk_mfc", "mfc";
> +               status = "ok";
> +               iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
> +       };
> +
> +       sysmmu_mfc_l: sysmmu@13620000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13620000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-mfc-l";
> +               interrupts = <5 5>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 274>;
> +               samsung,power-domain = <&pd_mfc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_mfc_r: sysmmu@13630000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13630000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-mfc-r";
> +               interrupts = <5 6>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 275>;
> +               samsung,power-domain = <&pd_mfc>;
> +               status = "ok";
> +       };
> +
> diff --git a/arch/arm/boot/dts/exynos4.dtsi b/arch/arm/boot/dts/exynos4.dtsi
> index 359694c..ba74ee8 100644
> --- a/arch/arm/boot/dts/exynos4.dtsi
> +++ b/arch/arm/boot/dts/exynos4.dtsi
> @@ -161,6 +161,7 @@
>                 interrupts = <0 94 0>;
>                 samsung,power-domain = <&pd_mfc>;
>                 status = "disabled";
> +               iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
>         };
>
>         serial@13800000 {
> @@ -395,5 +396,126 @@
>                 clock-names = "sclk_fimd", "fimd";
>                 samsung,power-domain = <&pd_lcd0>;
>                 status = "disabled";
> +               iommu = <&sysmmu_fimd0>;
> +       };
> +
> +       sysmmu_mfc_l: sysmmu@13620000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13620000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-mfc-l";
> +               interrupts = <5 5>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 274>;
> +               samsung,power-domain = <&pd_mfc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_mfc_r: sysmmu@13630000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13630000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-mfc-r";
> +               interrupts = <5 6>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 275>;
> +               samsung,power-domain = <&pd_mfc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_tv: sysmmu@13E20000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13E20000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-tv";
> +               interrupts = <5 4>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 272>;
> +               samsung,power-domain = <&pd_tv>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc0: sysmmu@11A20000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11A20000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc0";
> +               interrupts = <4 2>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 263>;
> +               samsung,power-domain = <&pd_cam>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc1: sysmmu@11A30000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11A30000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc1";
> +               interrupts = <4 3>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 264>;
> +               samsung,power-domain = <&pd_cam>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc2: sysmmu@11A40000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11A40000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc2";
> +               interrupts = <4 4>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 265>;
> +               samsung,power-domain = <&pd_cam>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc3: sysmmu@11A50000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11A50000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc3";
> +               interrupts = <4 5>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 266>;
> +               samsung,power-domain = <&pd_cam>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_jpeg: sysmmu@11A60000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11A60000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-jpeg";
> +               interrupts = <4 6>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 267>;
> +               samsung,power-domain = <&pd_cam>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_rotator: sysmmu@12A30000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x12A30000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-rotator";
> +               interrupts = <5 0>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 281>;
> +               samsung,power-domain = <&pd_lcd0>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimd0: sysmmu@11E20000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11E20000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimd0";
> +               interrupts = <5 2>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 287>;
> +               samsung,power-domain = <&pd_lcd0>;
> +               status = "ok";
>         };
>  };
> diff --git a/arch/arm/boot/dts/exynos4210.dtsi b/arch/arm/boot/dts/exynos4210.dtsi
> index 54710de..09b13da 100644
> --- a/arch/arm/boot/dts/exynos4210.dtsi
> +++ b/arch/arm/boot/dts/exynos4210.dtsi
> @@ -119,5 +119,30 @@
>                 reg = <0x12800000 0x1000>;
>                 interrupts = <0 89 0>;
>                 status = "disabled";
> +               iommu = <&sysmmu_g2d>;
> +       };
> +
> +       sysmmu_g2d: sysmmu@12A20000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x12A20000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-g2d";
> +               interrupts = <4 7>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 280>;
> +               samsung,power-domain = <&pd_lcd0>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimd1: sysmmu@12220000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimd1";
> +               reg = <0x12220000 0x1000>;
> +               interrupts = <5 3>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 291>;
> +               samsung,power-domain = <&pd_lcd1>;
> +               status = "ok";
>         };
>  };
> diff --git a/arch/arm/boot/dts/exynos4x12.dtsi b/arch/arm/boot/dts/exynos4x12.dtsi
> index e3380a7..681db32 100644
> --- a/arch/arm/boot/dts/exynos4x12.dtsi
> +++ b/arch/arm/boot/dts/exynos4x12.dtsi
> @@ -79,4 +79,80 @@
>                 interrupts = <0 89 0>;
>                 status = "disabled";
>         };
> +
> +       sysmmu_g2d: sysmmu@10A40000{
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x10A40000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-g2d";
> +               interrupts = <4 7>;
> +               clock-names = "sysmmu";
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_isp: sysmmu@12260000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x12260000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_isp";
> +               interrupts = <16 2>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 362>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_drc: sysmmu@12270000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x12270000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_drc";
> +               interrupts = <16 3>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 363>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_fd: sysmmu@122A0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x122A0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_fd";
> +               interrupts = <16 4>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 364>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_mcuctl: sysmmu@122B0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x122B0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_mcuctl";
> +               interrupts = <16 5>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 376>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_lite0: sysmmu@123B0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x123B0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_lite0";
> +               interrupts = <16 0>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 366>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_lite1: sysmmu@123C0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x123C0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_lite1";
> +               interrupts = <16 1>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 365>;
> +               status = "ok";
> +       };
>  };
> diff --git a/arch/arm/boot/dts/exynos5250.dtsi b/arch/arm/boot/dts/exynos5250.dtsi
> index fc9fb3d..130d23d 100644
> --- a/arch/arm/boot/dts/exynos5250.dtsi
> +++ b/arch/arm/boot/dts/exynos5250.dtsi
> @@ -66,6 +66,16 @@
>                 reg = <0x10044040 0x20>;
>         };
>
> +       pd_isp: mfc-power-domain@0x10044020 {
> +               compatible = "samsung,exynos4210-pd";
> +               reg = <0x10044020 0x20>;
> +       };
> +
> +       pd_disp1: mfc-power-domain@0x100440A0 {
> +               compatible = "samsung,exynos4210-pd";
> +               reg = <0x100440A0 0x20>;
> +       };
> +
>         clock: clock-controller@0x10010000 {
>                 compatible = "samsung,exynos5250-clock";
>                 reg = <0x10010000 0x30000>;
> @@ -180,6 +190,7 @@
>                 reg = <0x11000000 0x10000>;
>                 interrupts = <0 96 0>;
>                 samsung,power-domain = <&pd_mfc>;
> +               iommu = <&sysmmu_mfc_l &sysmmu_mfc_l>;
>         };
>
>         rtc {
> @@ -571,6 +582,7 @@
>                 samsung,power-domain = <&pd_gsc>;
>                 clocks = <&clock 256>;
>                 clock-names = "gscl";
> +               iommu = <&sysmmu_gsc1>;
>         };
>
>         gsc_1:  gsc@0x13e10000 {
> @@ -580,6 +592,7 @@
>                 samsung,power-domain = <&pd_gsc>;
>                 clocks = <&clock 257>;
>                 clock-names = "gscl";
> +               iommu = <&sysmmu_gsc1>;
>         };
>
>         gsc_2:  gsc@0x13e20000 {
> @@ -589,6 +602,7 @@
>                 samsung,power-domain = <&pd_gsc>;
>                 clocks = <&clock 258>;
>                 clock-names = "gscl";
> +               iommu = <&sysmmu_gsc2>;
>         };
>
>         gsc_3:  gsc@0x13e30000 {
> @@ -598,6 +612,7 @@
>                 samsung,power-domain = <&pd_gsc>;
>                 clocks = <&clock 259>;
>                 clock-names = "gscl";
> +               iommu = <&sysmmu_gsc3>;
>         };
>
>         hdmi {
> @@ -614,6 +629,7 @@
>                 compatible = "samsung,exynos5-mixer";
>                 reg = <0x14450000 0x10000>;
>                 interrupts = <0 94 0>;
> +               iommu = <&sysmmu_tv>;
>         };
>
>         dp-controller {
> @@ -638,5 +654,280 @@
>                 interrupts = <18 4>, <18 5>, <18 6>;
>                 clocks = <&clock 133>, <&clock 339>;
>                 clock-names = "sclk_fimd", "fimd";
> +               iommu = <&sysmmu_fimd1>;
> +       };
> +
> +       sysmmu_mfc_l: sysmmu@11210000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11210000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-mfc_l";
> +               interrupts = <8 5>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 267>, <&clock 266>;
> +               samsung,power-domain = <&pd_mfc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_mfc_r: sysmmu@11200000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11200000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-mfc_r";
> +               interrupts = <6 2>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 268>, <&clock 266>;
> +               samsung,power-domain = <&pd_mfc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_tv: sysmmu@14650000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x14650000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-tv";
> +               interrupts = <7 4>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 349>;
> +               samsung,power-domain = <&pd_disp1>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_gsc0: sysmmu@13E80000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13E80000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-gsc0";
> +               interrupts = <2 0>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 262>, <&clock 256>;
> +               samsung,power-domain = <&pd_gsc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_gsc1: sysmmu@13E90000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13E90000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-gsc1";
> +               interrupts = <2 2>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 263>, <&clock 257>;
> +               samsung,power-domain = <&pd_gsc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_gsc2: sysmmu@13EA0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13EA0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-gsc2";
> +               interrupts = <2 4>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 264>, <&clock 258>;
> +               samsung,power-domain = <&pd_gsc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_gsc3: sysmmu@13EB0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13EB0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-gsc3";
> +               interrupts = <2 6>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 265>, <&clock 259>;
> +               samsung,power-domain = <&pd_gsc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimd1: sysmmu@14640000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x14640000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimd1";
> +               interrupts = <3 2>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 350>;
> +               samsung,power-domain = <&pd_disp1>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_rotator: sysmmu@11D40000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11D40000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-rotator";
> +               interrupts = <4 0>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 272>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_isp: sysmmu@13260000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13260000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_isp";
> +               interrupts = <10 6>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 361>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_drc: sysmmu@13270000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13270000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_drc";
> +               interrupts = <11 6>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 362>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_fd: sysmmu@132A0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x132A0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_fd";
> +               interrupts = <5 0>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 363>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_scc: sysmmu@13280000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13280000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_scalerc";
> +               interrupts = <5 2>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 364>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_scp: sysmmu@13290000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13290000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_scalerp";
> +               interrupts = <3 6>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 365>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_mcuctl: sysmmu@132B0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x132B0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_mcuctl";
> +               interrupts = <5 4>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 366>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_odc: sysmmu@132C0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x132C0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_odc";
> +               interrupts = <11 0>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 367>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_dis0: sysmmu@132D0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x132D0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_dis0";
> +               interrupts = <10 4>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 368>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_dis1: sysmmu@132E0000{
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x132E0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_dis1";
> +               interrupts = <9 4>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 369>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_3dnr: sysmmu@132F0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x132F0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_3dnr";
> +               interrupts = <5 6>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 370>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_lite0: sysmmu@13C40000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13C40000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_lite0";
> +               interrupts = <3 4>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 346>, <&clock 345>;
> +               samsung,power-domain = <&pd_gsc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_lite1: sysmmu@13C50000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13C50000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_lite1";
> +               interrupts = <24 1>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 347>, <&clock 345>;
> +               samsung,power-domain = <&pd_gsc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_jpeg: sysmmu@11F20000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11F20000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-jpeg";
> +               interrupts = <4 2>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 273>, <&clock 270>;
> +               samsung,power-domain = <&pd_gsc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_2d: sysmmu@10A60000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x10A60000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-2d";
> +               interrupts = <24 5>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 361>;
> +               status = "ok";
>         };
>  };
> --
> 1.7.2.5
>
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 65+ messages in thread

* [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-07-27 13:54   ` Rob Herring
  0 siblings, 0 replies; 65+ messages in thread
From: Rob Herring @ 2013-07-27 13:54 UTC (permalink / raw)
  To: linux-arm-kernel

On Fri, Jul 26, 2013 at 6:28 AM, Cho KyongHo <pullip.cho@samsung.com> wrote:
> Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
> ---
>  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
>  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
>  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
>  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
>  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
>  5 files changed, 617 insertions(+), 0 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
>
> diff --git a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> new file mode 100644
> index 0000000..92f0a33
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> @@ -0,0 +1,103 @@
> +Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management Unit)
> +
> +Samsung's Exynos architecture contains System MMU that enables scattered
> +physical memory chunks visible as a contiguous region to DMA-capable peripheral
> +devices like MFC, FIMC, FIMD, GScaler, FIMC-IS and so forth.
> +
> +System MMU is a sort of IOMMU and support identical translation table format to
> +ARMv7 translation tables with minimum set of page properties including access
> +permissions, shareability and security protection. In addition, System MMU has
> +another capabilities like L2 TLB or block-fetch buffers to minimize translation
> +latency.
> +
> +A System MMU is dedicated to a single master peripheral device.  Thus, it is
> +important to specify the correct System MMU in the device node of its master
> +device. Whereas a System MMU is dedicated to a master device, the master device
> +may have more than one System MMU.

I don't follow the last sentence. Can you elaborate on the type of
connection you are talking about.

Also, please align with the ARM system MMU binding that Will Deacon
has submitted particularly in terms of how master connections are
described.

Rob

> +
> +Required properties:
> +- compatible: Should be "samsung,exynos4210-sysmmu"
> +- reg: A tuple of base address and size of System MMU registers.
> +- interrupt-parent: The phandle of the interrupt controller of System MMU
> +- interrupts: A tuple of numbers that indicates the interrupt source.
> +- clock-names: Should be "sysmmu" if the System MMU is needed to gate its clock.
> +               Please refer to the following documents:
> +              Documentation/devicetree/bindings/clock/clock-bindings.txt
> +              Documentation/devicetree/bindings/clock/exynos4-clock.txt
> +              Documentation/devicetree/bindings/clock/exynos5250-clock.txt
> +              Optional "master" if the clock to the System MMU is gated by
> +              another gate clock other than "sysmmu". The System MMU driver
> +              sets "master" the parent of "sysmmu".
> +              Exynos4 SoCs, there needs no "master" clocks.
> +              Exynos5 SoCs, some System MMUs must have "master" clocks.
> +- clocks: Required if the System MMU is needed to gate its clock.
> +         Please refer to the documents listed above.
> +- samsung,power-domain: Required if the System MMU is needed to gate its power.
> +         Please refer to the following document:
> +         Documentation/devicetree/bindings/arm/exynos/power_domain.txt
> +
> +Required properties for the master peripheral devices:
> +- iommu: phandles to the System MMUs of the device
> +
> +Examples:
> +A System MMU is dedicated to a single master device.
> +       gsc_0:  gsc at 0x13e00000 {
> +               compatible = "samsung,exynos5-gsc";
> +               reg = <0x13e00000 0x1000>;
> +               interrupts = <0 85 0>;
> +               samsung,power-domain = <&pd_gsc>;
> +               clocks = <&clock 256>;
> +               clock-names = "gscl";
> +               iommu = <&sysmmu_gsc1>;
> +       };
> +
> +       sysmmu_gsc0: sysmmu at 13E80000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13E80000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-gsc0";
> +               interrupts = <2 0>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 262>, <&clock 256>;
> +               samsung,power-domain = <&pd_gsc>;
> +               status = "ok";
> +       };
> +
> +MFC has 2 System MMUs for each port that MFC is attached. Thus it seems natural
> +to define 2 System MMUs for each port of the MFC:
> +
> +       mfc: codec at 13400000 {
> +               compatible = "samsung,mfc-v5";
> +               reg = <0x13400000 0x10000>;
> +               interrupts = <0 94 0>;
> +               samsung,power-domain = <&pd_mfc>;
> +               clocks = <&clock 170>, <&clock 273>;
> +               clock-names = "sclk_mfc", "mfc";
> +               status = "ok";
> +               iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
> +       };
> +
> +       sysmmu_mfc_l: sysmmu at 13620000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13620000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-mfc-l";
> +               interrupts = <5 5>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 274>;
> +               samsung,power-domain = <&pd_mfc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_mfc_r: sysmmu at 13630000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13630000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-mfc-r";
> +               interrupts = <5 6>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 275>;
> +               samsung,power-domain = <&pd_mfc>;
> +               status = "ok";
> +       };
> +
> diff --git a/arch/arm/boot/dts/exynos4.dtsi b/arch/arm/boot/dts/exynos4.dtsi
> index 359694c..ba74ee8 100644
> --- a/arch/arm/boot/dts/exynos4.dtsi
> +++ b/arch/arm/boot/dts/exynos4.dtsi
> @@ -161,6 +161,7 @@
>                 interrupts = <0 94 0>;
>                 samsung,power-domain = <&pd_mfc>;
>                 status = "disabled";
> +               iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
>         };
>
>         serial at 13800000 {
> @@ -395,5 +396,126 @@
>                 clock-names = "sclk_fimd", "fimd";
>                 samsung,power-domain = <&pd_lcd0>;
>                 status = "disabled";
> +               iommu = <&sysmmu_fimd0>;
> +       };
> +
> +       sysmmu_mfc_l: sysmmu at 13620000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13620000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-mfc-l";
> +               interrupts = <5 5>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 274>;
> +               samsung,power-domain = <&pd_mfc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_mfc_r: sysmmu at 13630000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13630000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-mfc-r";
> +               interrupts = <5 6>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 275>;
> +               samsung,power-domain = <&pd_mfc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_tv: sysmmu at 13E20000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13E20000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-tv";
> +               interrupts = <5 4>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 272>;
> +               samsung,power-domain = <&pd_tv>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc0: sysmmu at 11A20000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11A20000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc0";
> +               interrupts = <4 2>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 263>;
> +               samsung,power-domain = <&pd_cam>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc1: sysmmu at 11A30000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11A30000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc1";
> +               interrupts = <4 3>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 264>;
> +               samsung,power-domain = <&pd_cam>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc2: sysmmu at 11A40000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11A40000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc2";
> +               interrupts = <4 4>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 265>;
> +               samsung,power-domain = <&pd_cam>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc3: sysmmu at 11A50000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11A50000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc3";
> +               interrupts = <4 5>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 266>;
> +               samsung,power-domain = <&pd_cam>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_jpeg: sysmmu at 11A60000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11A60000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-jpeg";
> +               interrupts = <4 6>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 267>;
> +               samsung,power-domain = <&pd_cam>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_rotator: sysmmu at 12A30000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x12A30000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-rotator";
> +               interrupts = <5 0>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 281>;
> +               samsung,power-domain = <&pd_lcd0>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimd0: sysmmu at 11E20000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11E20000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimd0";
> +               interrupts = <5 2>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 287>;
> +               samsung,power-domain = <&pd_lcd0>;
> +               status = "ok";
>         };
>  };
> diff --git a/arch/arm/boot/dts/exynos4210.dtsi b/arch/arm/boot/dts/exynos4210.dtsi
> index 54710de..09b13da 100644
> --- a/arch/arm/boot/dts/exynos4210.dtsi
> +++ b/arch/arm/boot/dts/exynos4210.dtsi
> @@ -119,5 +119,30 @@
>                 reg = <0x12800000 0x1000>;
>                 interrupts = <0 89 0>;
>                 status = "disabled";
> +               iommu = <&sysmmu_g2d>;
> +       };
> +
> +       sysmmu_g2d: sysmmu at 12A20000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x12A20000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-g2d";
> +               interrupts = <4 7>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 280>;
> +               samsung,power-domain = <&pd_lcd0>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimd1: sysmmu at 12220000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimd1";
> +               reg = <0x12220000 0x1000>;
> +               interrupts = <5 3>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 291>;
> +               samsung,power-domain = <&pd_lcd1>;
> +               status = "ok";
>         };
>  };
> diff --git a/arch/arm/boot/dts/exynos4x12.dtsi b/arch/arm/boot/dts/exynos4x12.dtsi
> index e3380a7..681db32 100644
> --- a/arch/arm/boot/dts/exynos4x12.dtsi
> +++ b/arch/arm/boot/dts/exynos4x12.dtsi
> @@ -79,4 +79,80 @@
>                 interrupts = <0 89 0>;
>                 status = "disabled";
>         };
> +
> +       sysmmu_g2d: sysmmu at 10A40000{
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x10A40000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-g2d";
> +               interrupts = <4 7>;
> +               clock-names = "sysmmu";
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_isp: sysmmu at 12260000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x12260000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_isp";
> +               interrupts = <16 2>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 362>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_drc: sysmmu at 12270000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x12270000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_drc";
> +               interrupts = <16 3>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 363>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_fd: sysmmu at 122A0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x122A0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_fd";
> +               interrupts = <16 4>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 364>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_mcuctl: sysmmu at 122B0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x122B0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_mcuctl";
> +               interrupts = <16 5>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 376>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_lite0: sysmmu at 123B0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x123B0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_lite0";
> +               interrupts = <16 0>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 366>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_lite1: sysmmu at 123C0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x123C0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_lite1";
> +               interrupts = <16 1>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 365>;
> +               status = "ok";
> +       };
>  };
> diff --git a/arch/arm/boot/dts/exynos5250.dtsi b/arch/arm/boot/dts/exynos5250.dtsi
> index fc9fb3d..130d23d 100644
> --- a/arch/arm/boot/dts/exynos5250.dtsi
> +++ b/arch/arm/boot/dts/exynos5250.dtsi
> @@ -66,6 +66,16 @@
>                 reg = <0x10044040 0x20>;
>         };
>
> +       pd_isp: mfc-power-domain at 0x10044020 {
> +               compatible = "samsung,exynos4210-pd";
> +               reg = <0x10044020 0x20>;
> +       };
> +
> +       pd_disp1: mfc-power-domain at 0x100440A0 {
> +               compatible = "samsung,exynos4210-pd";
> +               reg = <0x100440A0 0x20>;
> +       };
> +
>         clock: clock-controller at 0x10010000 {
>                 compatible = "samsung,exynos5250-clock";
>                 reg = <0x10010000 0x30000>;
> @@ -180,6 +190,7 @@
>                 reg = <0x11000000 0x10000>;
>                 interrupts = <0 96 0>;
>                 samsung,power-domain = <&pd_mfc>;
> +               iommu = <&sysmmu_mfc_l &sysmmu_mfc_l>;
>         };
>
>         rtc {
> @@ -571,6 +582,7 @@
>                 samsung,power-domain = <&pd_gsc>;
>                 clocks = <&clock 256>;
>                 clock-names = "gscl";
> +               iommu = <&sysmmu_gsc1>;
>         };
>
>         gsc_1:  gsc at 0x13e10000 {
> @@ -580,6 +592,7 @@
>                 samsung,power-domain = <&pd_gsc>;
>                 clocks = <&clock 257>;
>                 clock-names = "gscl";
> +               iommu = <&sysmmu_gsc1>;
>         };
>
>         gsc_2:  gsc at 0x13e20000 {
> @@ -589,6 +602,7 @@
>                 samsung,power-domain = <&pd_gsc>;
>                 clocks = <&clock 258>;
>                 clock-names = "gscl";
> +               iommu = <&sysmmu_gsc2>;
>         };
>
>         gsc_3:  gsc at 0x13e30000 {
> @@ -598,6 +612,7 @@
>                 samsung,power-domain = <&pd_gsc>;
>                 clocks = <&clock 259>;
>                 clock-names = "gscl";
> +               iommu = <&sysmmu_gsc3>;
>         };
>
>         hdmi {
> @@ -614,6 +629,7 @@
>                 compatible = "samsung,exynos5-mixer";
>                 reg = <0x14450000 0x10000>;
>                 interrupts = <0 94 0>;
> +               iommu = <&sysmmu_tv>;
>         };
>
>         dp-controller {
> @@ -638,5 +654,280 @@
>                 interrupts = <18 4>, <18 5>, <18 6>;
>                 clocks = <&clock 133>, <&clock 339>;
>                 clock-names = "sclk_fimd", "fimd";
> +               iommu = <&sysmmu_fimd1>;
> +       };
> +
> +       sysmmu_mfc_l: sysmmu at 11210000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11210000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-mfc_l";
> +               interrupts = <8 5>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 267>, <&clock 266>;
> +               samsung,power-domain = <&pd_mfc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_mfc_r: sysmmu at 11200000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11200000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-mfc_r";
> +               interrupts = <6 2>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 268>, <&clock 266>;
> +               samsung,power-domain = <&pd_mfc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_tv: sysmmu at 14650000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x14650000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-tv";
> +               interrupts = <7 4>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 349>;
> +               samsung,power-domain = <&pd_disp1>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_gsc0: sysmmu at 13E80000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13E80000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-gsc0";
> +               interrupts = <2 0>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 262>, <&clock 256>;
> +               samsung,power-domain = <&pd_gsc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_gsc1: sysmmu at 13E90000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13E90000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-gsc1";
> +               interrupts = <2 2>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 263>, <&clock 257>;
> +               samsung,power-domain = <&pd_gsc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_gsc2: sysmmu at 13EA0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13EA0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-gsc2";
> +               interrupts = <2 4>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 264>, <&clock 258>;
> +               samsung,power-domain = <&pd_gsc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_gsc3: sysmmu at 13EB0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13EB0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-gsc3";
> +               interrupts = <2 6>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 265>, <&clock 259>;
> +               samsung,power-domain = <&pd_gsc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimd1: sysmmu at 14640000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x14640000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimd1";
> +               interrupts = <3 2>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 350>;
> +               samsung,power-domain = <&pd_disp1>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_rotator: sysmmu at 11D40000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11D40000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-rotator";
> +               interrupts = <4 0>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 272>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_isp: sysmmu at 13260000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13260000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_isp";
> +               interrupts = <10 6>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 361>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_drc: sysmmu at 13270000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13270000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_drc";
> +               interrupts = <11 6>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 362>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_fd: sysmmu at 132A0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x132A0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_fd";
> +               interrupts = <5 0>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 363>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_scc: sysmmu at 13280000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13280000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_scalerc";
> +               interrupts = <5 2>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 364>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_scp: sysmmu at 13290000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13290000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_scalerp";
> +               interrupts = <3 6>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 365>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_mcuctl: sysmmu at 132B0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x132B0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_mcuctl";
> +               interrupts = <5 4>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 366>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_odc: sysmmu at 132C0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x132C0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_odc";
> +               interrupts = <11 0>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 367>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_dis0: sysmmu at 132D0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x132D0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_dis0";
> +               interrupts = <10 4>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 368>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_dis1: sysmmu at 132E0000{
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x132E0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_dis1";
> +               interrupts = <9 4>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 369>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_3dnr: sysmmu at 132F0000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x132F0000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_3dnr";
> +               interrupts = <5 6>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 370>;
> +               samsung,power-domain = <&pd_isp>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_lite0: sysmmu at 13C40000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13C40000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_lite0";
> +               interrupts = <3 4>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 346>, <&clock 345>;
> +               samsung,power-domain = <&pd_gsc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_lite1: sysmmu at 13C50000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x13C50000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-fimc_lite1";
> +               interrupts = <24 1>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 347>, <&clock 345>;
> +               samsung,power-domain = <&pd_gsc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_jpeg: sysmmu at 11F20000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x11F20000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-jpeg";
> +               interrupts = <4 2>;
> +               clock-names = "sysmmu", "master";
> +               clocks = <&clock 273>, <&clock 270>;
> +               samsung,power-domain = <&pd_gsc>;
> +               status = "ok";
> +       };
> +
> +       sysmmu_fimc_2d: sysmmu at 10A60000 {
> +               compatible = "samsung,exynos4210-sysmmu";
> +               reg = <0x10A60000 0x1000>;
> +               interrupt-parent = <&combiner>;
> +               interrupt-names = "sysmmu-2d";
> +               interrupts = <24 5>;
> +               clock-names = "sysmmu";
> +               clocks = <&clock 361>;
> +               status = "ok";
>         };
>  };
> --
> 1.7.2.5
>
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 65+ messages in thread

* Re: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
  2013-07-26 11:28 ` Cho KyongHo
  (?)
@ 2013-07-29  6:37   ` Sachin Kamat
  -1 siblings, 0 replies; 65+ messages in thread
From: Sachin Kamat @ 2013-07-29  6:37 UTC (permalink / raw)
  To: Cho KyongHo
  Cc: Linux ARM Kernel, Linux IOMMU, Linux Kernel, Linux Samsung SOC,
	Hyunwoong Kim, Joerg Roedel, Kukjin Kim, Prathyush, Rahul Sharma,
	Subash Patel, Keyyoung Park, Grant Grundler, Antonios Motakis,
	kvmarm

Hi KyongHo,

On 26 July 2013 16:58, Cho KyongHo <pullip.cho@samsung.com> wrote:
> Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
> ---
>  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
>  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
>  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
>  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
>  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
>  5 files changed, 617 insertions(+), 0 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt

This patch does not apply on the mainline Linus' tree (3.11-rc2). Please rebase.

-- 
With warm regards,
Sachin

^ permalink raw reply	[flat|nested] 65+ messages in thread

* Re: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-07-29  6:37   ` Sachin Kamat
  0 siblings, 0 replies; 65+ messages in thread
From: Sachin Kamat @ 2013-07-29  6:37 UTC (permalink / raw)
  To: Cho KyongHo
  Cc: Linux Samsung SOC, Hyunwoong Kim, Prathyush, Grant Grundler,
	Keyyoung Park, Subash Patel, Linux Kernel, Linux IOMMU,
	Kukjin Kim, Antonios Motakis,
	kvmarm-FPEHb7Xf0XXUo1n7N8X6UoWGPAHP3yOg, Linux ARM Kernel,
	Rahul Sharma

Hi KyongHo,

On 26 July 2013 16:58, Cho KyongHo <pullip.cho-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org> wrote:
> Signed-off-by: Cho KyongHo <pullip.cho-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
> ---
>  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
>  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
>  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
>  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
>  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
>  5 files changed, 617 insertions(+), 0 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt

This patch does not apply on the mainline Linus' tree (3.11-rc2). Please rebase.

-- 
With warm regards,
Sachin

^ permalink raw reply	[flat|nested] 65+ messages in thread

* [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-07-29  6:37   ` Sachin Kamat
  0 siblings, 0 replies; 65+ messages in thread
From: Sachin Kamat @ 2013-07-29  6:37 UTC (permalink / raw)
  To: linux-arm-kernel

Hi KyongHo,

On 26 July 2013 16:58, Cho KyongHo <pullip.cho@samsung.com> wrote:
> Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
> ---
>  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
>  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
>  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
>  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
>  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
>  5 files changed, 617 insertions(+), 0 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt

This patch does not apply on the mainline Linus' tree (3.11-rc2). Please rebase.

-- 
With warm regards,
Sachin

^ permalink raw reply	[flat|nested] 65+ messages in thread

* RE: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
  2013-07-29  6:37   ` Sachin Kamat
@ 2013-07-29  7:20     ` Cho KyongHo
  -1 siblings, 0 replies; 65+ messages in thread
From: Cho KyongHo @ 2013-07-29  7:20 UTC (permalink / raw)
  To: 'Sachin Kamat'
  Cc: 'Linux ARM Kernel', 'Linux IOMMU',
	'Linux Kernel', 'Linux Samsung SOC',
	'Hyunwoong Kim', 'Joerg Roedel',
	'Kukjin Kim', 'Prathyush', 'Rahul Sharma',
	'Subash Patel', 'Keyyoung Park',
	'Grant Grundler', 'Antonios Motakis',
	kvmarm

> -----Original Message-----
> From: Sachin Kamat [mailto:sachin.kamat@linaro.org]
> Sent: Monday, July 29, 2013 3:38 PM
> 
> Hi KyongHo,
> 
> On 26 July 2013 16:58, Cho KyongHo <pullip.cho@samsung.com> wrote:
> > Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
> > ---
> >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
> >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
> >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
> >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
> >  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
> >  5 files changed, 617 insertions(+), 0 deletions(-)
> >  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> 
> This patch does not apply on the mainline Linus' tree (3.11-rc2). Please rebase.
> 

OK. I will rebase the next patches on that.

Thank you.

Cho KyongHo. 
> --
> With warm regards,
> Sachin


^ permalink raw reply	[flat|nested] 65+ messages in thread

* [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-07-29  7:20     ` Cho KyongHo
  0 siblings, 0 replies; 65+ messages in thread
From: Cho KyongHo @ 2013-07-29  7:20 UTC (permalink / raw)
  To: linux-arm-kernel

> -----Original Message-----
> From: Sachin Kamat [mailto:sachin.kamat at linaro.org]
> Sent: Monday, July 29, 2013 3:38 PM
> 
> Hi KyongHo,
> 
> On 26 July 2013 16:58, Cho KyongHo <pullip.cho@samsung.com> wrote:
> > Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
> > ---
> >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
> >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
> >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
> >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
> >  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
> >  5 files changed, 617 insertions(+), 0 deletions(-)
> >  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> 
> This patch does not apply on the mainline Linus' tree (3.11-rc2). Please rebase.
> 

OK. I will rebase the next patches on that.

Thank you.

Cho KyongHo. 
> --
> With warm regards,
> Sachin

^ permalink raw reply	[flat|nested] 65+ messages in thread

* RE: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
  2013-07-29  6:37   ` Sachin Kamat
  (?)
@ 2013-07-29  7:57     ` Cho KyongHo
  -1 siblings, 0 replies; 65+ messages in thread
From: Cho KyongHo @ 2013-07-29  7:57 UTC (permalink / raw)
  To: 'Sachin Kamat'
  Cc: 'Linux ARM Kernel', 'Linux IOMMU',
	'Linux Kernel', 'Linux Samsung SOC',
	'Hyunwoong Kim', 'Joerg Roedel',
	'Kukjin Kim', 'Prathyush', 'Rahul Sharma',
	'Subash Patel', 'Keyyoung Park',
	'Grant Grundler', 'Antonios Motakis',
	kvmarm

> -----Original Message-----
> From: Cho KyongHo [mailto:pullip.cho@samsung.com]
> Sent: Monday, July 29, 2013 4:20 PM
> 
> > -----Original Message-----
> > From: Sachin Kamat [mailto:sachin.kamat@linaro.org]
> > Sent: Monday, July 29, 2013 3:38 PM
> >
> > Hi KyongHo,
> >
> > On 26 July 2013 16:58, Cho KyongHo <pullip.cho@samsung.com> wrote:
> > > Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
> > > ---
> > >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
> > >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
> > >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
> > >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
> > >  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
> > >  5 files changed, 617 insertions(+), 0 deletions(-)
> > >  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> >
> > This patch does not apply on the mainline Linus' tree (3.11-rc2). Please rebase.
> >
> 
> OK. I will rebase the next patches on that.

I don't get any conflict both on the latest of Linus's tree (3.11-rc3)
and for-next branch  of Samsung git.
Can you show me the diff?

> 
> Thank you.
> 
> Cho KyongHo.
> > --
> > With warm regards,
> > Sachin


^ permalink raw reply	[flat|nested] 65+ messages in thread

* RE: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-07-29  7:57     ` Cho KyongHo
  0 siblings, 0 replies; 65+ messages in thread
From: Cho KyongHo @ 2013-07-29  7:57 UTC (permalink / raw)
  To: 'Sachin Kamat'
  Cc: 'Linux Samsung SOC', 'Hyunwoong Kim',
	'Prathyush', 'Grant Grundler',
	'Keyyoung Park', 'Subash Patel',
	'Linux Kernel', 'Linux IOMMU',
	'Kukjin Kim', 'Antonios Motakis',
	kvmarm-FPEHb7Xf0XXUo1n7N8X6UoWGPAHP3yOg,
	'Linux ARM Kernel', 'Rahul Sharma'

> -----Original Message-----
> From: Cho KyongHo [mailto:pullip.cho-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org]
> Sent: Monday, July 29, 2013 4:20 PM
> 
> > -----Original Message-----
> > From: Sachin Kamat [mailto:sachin.kamat-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org]
> > Sent: Monday, July 29, 2013 3:38 PM
> >
> > Hi KyongHo,
> >
> > On 26 July 2013 16:58, Cho KyongHo <pullip.cho-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org> wrote:
> > > Signed-off-by: Cho KyongHo <pullip.cho-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
> > > ---
> > >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
> > >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
> > >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
> > >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
> > >  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
> > >  5 files changed, 617 insertions(+), 0 deletions(-)
> > >  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> >
> > This patch does not apply on the mainline Linus' tree (3.11-rc2). Please rebase.
> >
> 
> OK. I will rebase the next patches on that.

I don't get any conflict both on the latest of Linus's tree (3.11-rc3)
and for-next branch  of Samsung git.
Can you show me the diff?

> 
> Thank you.
> 
> Cho KyongHo.
> > --
> > With warm regards,
> > Sachin

^ permalink raw reply	[flat|nested] 65+ messages in thread

* [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-07-29  7:57     ` Cho KyongHo
  0 siblings, 0 replies; 65+ messages in thread
From: Cho KyongHo @ 2013-07-29  7:57 UTC (permalink / raw)
  To: linux-arm-kernel

> -----Original Message-----
> From: Cho KyongHo [mailto:pullip.cho at samsung.com]
> Sent: Monday, July 29, 2013 4:20 PM
> 
> > -----Original Message-----
> > From: Sachin Kamat [mailto:sachin.kamat at linaro.org]
> > Sent: Monday, July 29, 2013 3:38 PM
> >
> > Hi KyongHo,
> >
> > On 26 July 2013 16:58, Cho KyongHo <pullip.cho@samsung.com> wrote:
> > > Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
> > > ---
> > >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
> > >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
> > >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
> > >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
> > >  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
> > >  5 files changed, 617 insertions(+), 0 deletions(-)
> > >  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> >
> > This patch does not apply on the mainline Linus' tree (3.11-rc2). Please rebase.
> >
> 
> OK. I will rebase the next patches on that.

I don't get any conflict both on the latest of Linus's tree (3.11-rc3)
and for-next branch  of Samsung git.
Can you show me the diff?

> 
> Thank you.
> 
> Cho KyongHo.
> > --
> > With warm regards,
> > Sachin

^ permalink raw reply	[flat|nested] 65+ messages in thread

* Re: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
  2013-07-29  7:57     ` Cho KyongHo
@ 2013-07-29  8:05       ` Sachin Kamat
  -1 siblings, 0 replies; 65+ messages in thread
From: Sachin Kamat @ 2013-07-29  8:05 UTC (permalink / raw)
  To: Cho KyongHo
  Cc: Linux ARM Kernel, Linux IOMMU, Linux Kernel, Linux Samsung SOC,
	Hyunwoong Kim, Joerg Roedel, Kukjin Kim, Prathyush, Rahul Sharma,
	Subash Patel, Keyyoung Park, Grant Grundler, Antonios Motakis,
	kvmarm

On 29 July 2013 13:27, Cho KyongHo <pullip.cho@samsung.com> wrote:
>> -----Original Message-----
>> From: Cho KyongHo [mailto:pullip.cho@samsung.com]
>> Sent: Monday, July 29, 2013 4:20 PM
>>
>> > -----Original Message-----
>> > From: Sachin Kamat [mailto:sachin.kamat@linaro.org]
>> > Sent: Monday, July 29, 2013 3:38 PM
>> >
>> > Hi KyongHo,
>> >
>> > On 26 July 2013 16:58, Cho KyongHo <pullip.cho@samsung.com> wrote:
>> > > Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
>> > > ---
>> > >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
>> > >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
>> > >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
>> > >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
>> > >  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
>> > >  5 files changed, 617 insertions(+), 0 deletions(-)
>> > >  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
>> >
>> > This patch does not apply on the mainline Linus' tree (3.11-rc2). Please rebase.
>> >
>>
>> OK. I will rebase the next patches on that.
>
> I don't get any conflict both on the latest of Linus's tree (3.11-rc3)
> and for-next branch  of Samsung git.
> Can you show me the diff?
>

I get the following error when I do git am on this patch (linus' tree
3.11-rc3). Other patches apply fine.

Applying: ARM: dts: Add description of System MMU of Exynos SoCs
<local_path>/linux/.git/rebase-apply/patch:120: new blank line at EOF.
+
error: patch failed: arch/arm/boot/dts/exynos4.dtsi:161
error: arch/arm/boot/dts/exynos4.dtsi: patch does not apply
error: patch failed: arch/arm/boot/dts/exynos4210.dtsi:119
error: arch/arm/boot/dts/exynos4210.dtsi: patch does not apply
error: patch failed: arch/arm/boot/dts/exynos4x12.dtsi:79
error: arch/arm/boot/dts/exynos4x12.dtsi: patch does not apply
error: patch failed: arch/arm/boot/dts/exynos5250.dtsi:614
error: arch/arm/boot/dts/exynos5250.dtsi: patch does not apply
Patch failed at 0001 ARM: dts: Add description of System MMU of Exynos SoCs
When you have resolved this problem run "git am --resolved".
If you would prefer to skip this patch, instead run "git am --skip".
To restore the original branch and stop patching run "git am --abort".


-- 
With warm regards,
Sachin

^ permalink raw reply	[flat|nested] 65+ messages in thread

* [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-07-29  8:05       ` Sachin Kamat
  0 siblings, 0 replies; 65+ messages in thread
From: Sachin Kamat @ 2013-07-29  8:05 UTC (permalink / raw)
  To: linux-arm-kernel

On 29 July 2013 13:27, Cho KyongHo <pullip.cho@samsung.com> wrote:
>> -----Original Message-----
>> From: Cho KyongHo [mailto:pullip.cho at samsung.com]
>> Sent: Monday, July 29, 2013 4:20 PM
>>
>> > -----Original Message-----
>> > From: Sachin Kamat [mailto:sachin.kamat at linaro.org]
>> > Sent: Monday, July 29, 2013 3:38 PM
>> >
>> > Hi KyongHo,
>> >
>> > On 26 July 2013 16:58, Cho KyongHo <pullip.cho@samsung.com> wrote:
>> > > Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
>> > > ---
>> > >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
>> > >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
>> > >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
>> > >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
>> > >  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
>> > >  5 files changed, 617 insertions(+), 0 deletions(-)
>> > >  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
>> >
>> > This patch does not apply on the mainline Linus' tree (3.11-rc2). Please rebase.
>> >
>>
>> OK. I will rebase the next patches on that.
>
> I don't get any conflict both on the latest of Linus's tree (3.11-rc3)
> and for-next branch  of Samsung git.
> Can you show me the diff?
>

I get the following error when I do git am on this patch (linus' tree
3.11-rc3). Other patches apply fine.

Applying: ARM: dts: Add description of System MMU of Exynos SoCs
<local_path>/linux/.git/rebase-apply/patch:120: new blank line at EOF.
+
error: patch failed: arch/arm/boot/dts/exynos4.dtsi:161
error: arch/arm/boot/dts/exynos4.dtsi: patch does not apply
error: patch failed: arch/arm/boot/dts/exynos4210.dtsi:119
error: arch/arm/boot/dts/exynos4210.dtsi: patch does not apply
error: patch failed: arch/arm/boot/dts/exynos4x12.dtsi:79
error: arch/arm/boot/dts/exynos4x12.dtsi: patch does not apply
error: patch failed: arch/arm/boot/dts/exynos5250.dtsi:614
error: arch/arm/boot/dts/exynos5250.dtsi: patch does not apply
Patch failed at 0001 ARM: dts: Add description of System MMU of Exynos SoCs
When you have resolved this problem run "git am --resolved".
If you would prefer to skip this patch, instead run "git am --skip".
To restore the original branch and stop patching run "git am --abort".


-- 
With warm regards,
Sachin

^ permalink raw reply	[flat|nested] 65+ messages in thread

* RE: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-08-01 13:05     ` Cho KyongHo
  0 siblings, 0 replies; 65+ messages in thread
From: Cho KyongHo @ 2013-08-01 13:05 UTC (permalink / raw)
  To: 'Rob Herring'
  Cc: 'Linux ARM Kernel', 'Linux IOMMU',
	'Linux Kernel', 'Linux Samsung SOC',
	'Kukjin Kim', 'Hyunwoong Kim',
	'Prathyush', 'Grant Grundler',
	'Joerg Roedel', 'Keyyoung Park',
	'Subash Patel', 'Sachin Kamat',
	'Antonios Motakis', kvmarm, 'Rahul Sharma',
	'Will Deacon'

> -----Original Message-----
> From: Rob Herring [mailto:robherring2@gmail.com]
> Sent: Saturday, July 27, 2013 10:55 PM
> On Fri, Jul 26, 2013 at 6:28 AM, Cho KyongHo <pullip.cho@samsung.com> wrote:
> > Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
> > ---
> >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
> >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
> >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
> >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
> >  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
> >  5 files changed, 617 insertions(+), 0 deletions(-)
> >  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> >
> > diff --git a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > new file mode 100644
> > index 0000000..92f0a33
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > @@ -0,0 +1,103 @@
> > +Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management Unit)
> > +
> > +Samsung's Exynos architecture contains System MMU that enables scattered
> > +physical memory chunks visible as a contiguous region to DMA-capable peripheral
> > +devices like MFC, FIMC, FIMD, GScaler, FIMC-IS and so forth.
> > +
> > +System MMU is a sort of IOMMU and support identical translation table format to
> > +ARMv7 translation tables with minimum set of page properties including access
> > +permissions, shareability and security protection. In addition, System MMU has
> > +another capabilities like L2 TLB or block-fetch buffers to minimize translation
> > +latency.
> > +
> > +A System MMU is dedicated to a single master peripheral device.  Thus, it is
> > +important to specify the correct System MMU in the device node of its master
> > +device. Whereas a System MMU is dedicated to a master device, the master device
> > +may have more than one System MMU.
> 
> I don't follow the last sentence. Can you elaborate on the type of
> connection you are talking about.
> 
Grant also addressed that.
He corrected the sentence like the following:

  " Can I suggest rewriting the last two sentences to:
     The master device node must correctly specify at least one
     SystemMMU. A master  device may have more than one System MMU. "

I will change the sentence

> Also, please align with the ARM system MMU binding that Will Deacon
> has submitted particularly in terms of how master connections are
> described.
> 
I didn't check it.

Should this align with ARM System MMU bindings?
System MMU in Exynos SoC is different from ARM System MMU.
It does not follows the specifications of ARM System MMU.

> Rob
> 
> > +
> > +Required properties:
> > +- compatible: Should be "samsung,exynos4210-sysmmu"
> > +- reg: A tuple of base address and size of System MMU registers.
> > +- interrupt-parent: The phandle of the interrupt controller of System MMU
> > +- interrupts: A tuple of numbers that indicates the interrupt source.
> > +- clock-names: Should be "sysmmu" if the System MMU is needed to gate its clock.
> > +               Please refer to the following documents:
> > +              Documentation/devicetree/bindings/clock/clock-bindings.txt
> > +              Documentation/devicetree/bindings/clock/exynos4-clock.txt
> > +              Documentation/devicetree/bindings/clock/exynos5250-clock.txt
> > +              Optional "master" if the clock to the System MMU is gated by
> > +              another gate clock other than "sysmmu". The System MMU driver
> > +              sets "master" the parent of "sysmmu".
> > +              Exynos4 SoCs, there needs no "master" clocks.
> > +              Exynos5 SoCs, some System MMUs must have "master" clocks.
> > +- clocks: Required if the System MMU is needed to gate its clock.
> > +         Please refer to the documents listed above.
> > +- samsung,power-domain: Required if the System MMU is needed to gate its power.
> > +         Please refer to the following document:
> > +         Documentation/devicetree/bindings/arm/exynos/power_domain.txt
> > +
> > +Required properties for the master peripheral devices:
> > +- iommu: phandles to the System MMUs of the device
> > +
> > +Examples:
> > +A System MMU is dedicated to a single master device.
> > +       gsc_0:  gsc@0x13e00000 {
> > +               compatible = "samsung,exynos5-gsc";
> > +               reg = <0x13e00000 0x1000>;
> > +               interrupts = <0 85 0>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               clocks = <&clock 256>;
> > +               clock-names = "gscl";
> > +               iommu = <&sysmmu_gsc1>;
> > +       };
> > +
> > +       sysmmu_gsc0: sysmmu@13E80000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13E80000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-gsc0";
> > +               interrupts = <2 0>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 262>, <&clock 256>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +MFC has 2 System MMUs for each port that MFC is attached. Thus it seems natural
> > +to define 2 System MMUs for each port of the MFC:
> > +
> > +       mfc: codec@13400000 {
> > +               compatible = "samsung,mfc-v5";
> > +               reg = <0x13400000 0x10000>;
> > +               interrupts = <0 94 0>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               clocks = <&clock 170>, <&clock 273>;
> > +               clock-names = "sclk_mfc", "mfc";
> > +               status = "ok";
> > +               iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
> > +       };
> > +
> > +       sysmmu_mfc_l: sysmmu@13620000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13620000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc-l";
> > +               interrupts = <5 5>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 274>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_mfc_r: sysmmu@13630000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13630000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc-r";
> > +               interrupts = <5 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 275>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > diff --git a/arch/arm/boot/dts/exynos4.dtsi b/arch/arm/boot/dts/exynos4.dtsi
> > index 359694c..ba74ee8 100644
> > --- a/arch/arm/boot/dts/exynos4.dtsi
> > +++ b/arch/arm/boot/dts/exynos4.dtsi
> > @@ -161,6 +161,7 @@
> >                 interrupts = <0 94 0>;
> >                 samsung,power-domain = <&pd_mfc>;
> >                 status = "disabled";
> > +               iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
> >         };
> >
> >         serial@13800000 {
> > @@ -395,5 +396,126 @@
> >                 clock-names = "sclk_fimd", "fimd";
> >                 samsung,power-domain = <&pd_lcd0>;
> >                 status = "disabled";
> > +               iommu = <&sysmmu_fimd0>;
> > +       };
> > +
> > +       sysmmu_mfc_l: sysmmu@13620000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13620000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc-l";
> > +               interrupts = <5 5>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 274>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_mfc_r: sysmmu@13630000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13630000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc-r";
> > +               interrupts = <5 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 275>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_tv: sysmmu@13E20000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13E20000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-tv";
> > +               interrupts = <5 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 272>;
> > +               samsung,power-domain = <&pd_tv>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc0: sysmmu@11A20000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11A20000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc0";
> > +               interrupts = <4 2>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 263>;
> > +               samsung,power-domain = <&pd_cam>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc1: sysmmu@11A30000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11A30000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc1";
> > +               interrupts = <4 3>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 264>;
> > +               samsung,power-domain = <&pd_cam>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc2: sysmmu@11A40000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11A40000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc2";
> > +               interrupts = <4 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 265>;
> > +               samsung,power-domain = <&pd_cam>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc3: sysmmu@11A50000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11A50000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc3";
> > +               interrupts = <4 5>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 266>;
> > +               samsung,power-domain = <&pd_cam>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_jpeg: sysmmu@11A60000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11A60000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-jpeg";
> > +               interrupts = <4 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 267>;
> > +               samsung,power-domain = <&pd_cam>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_rotator: sysmmu@12A30000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x12A30000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-rotator";
> > +               interrupts = <5 0>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 281>;
> > +               samsung,power-domain = <&pd_lcd0>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimd0: sysmmu@11E20000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11E20000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimd0";
> > +               interrupts = <5 2>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 287>;
> > +               samsung,power-domain = <&pd_lcd0>;
> > +               status = "ok";
> >         };
> >  };
> > diff --git a/arch/arm/boot/dts/exynos4210.dtsi b/arch/arm/boot/dts/exynos4210.dtsi
> > index 54710de..09b13da 100644
> > --- a/arch/arm/boot/dts/exynos4210.dtsi
> > +++ b/arch/arm/boot/dts/exynos4210.dtsi
> > @@ -119,5 +119,30 @@
> >                 reg = <0x12800000 0x1000>;
> >                 interrupts = <0 89 0>;
> >                 status = "disabled";
> > +               iommu = <&sysmmu_g2d>;
> > +       };
> > +
> > +       sysmmu_g2d: sysmmu@12A20000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x12A20000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-g2d";
> > +               interrupts = <4 7>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 280>;
> > +               samsung,power-domain = <&pd_lcd0>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimd1: sysmmu@12220000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimd1";
> > +               reg = <0x12220000 0x1000>;
> > +               interrupts = <5 3>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 291>;
> > +               samsung,power-domain = <&pd_lcd1>;
> > +               status = "ok";
> >         };
> >  };
> > diff --git a/arch/arm/boot/dts/exynos4x12.dtsi b/arch/arm/boot/dts/exynos4x12.dtsi
> > index e3380a7..681db32 100644
> > --- a/arch/arm/boot/dts/exynos4x12.dtsi
> > +++ b/arch/arm/boot/dts/exynos4x12.dtsi
> > @@ -79,4 +79,80 @@
> >                 interrupts = <0 89 0>;
> >                 status = "disabled";
> >         };
> > +
> > +       sysmmu_g2d: sysmmu@10A40000{
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x10A40000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-g2d";
> > +               interrupts = <4 7>;
> > +               clock-names = "sysmmu";
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_isp: sysmmu@12260000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x12260000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_isp";
> > +               interrupts = <16 2>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 362>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_drc: sysmmu@12270000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x12270000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_drc";
> > +               interrupts = <16 3>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 363>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_fd: sysmmu@122A0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x122A0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_fd";
> > +               interrupts = <16 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 364>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_mcuctl: sysmmu@122B0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x122B0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_mcuctl";
> > +               interrupts = <16 5>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 376>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_lite0: sysmmu@123B0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x123B0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_lite0";
> > +               interrupts = <16 0>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 366>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_lite1: sysmmu@123C0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x123C0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_lite1";
> > +               interrupts = <16 1>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 365>;
> > +               status = "ok";
> > +       };
> >  };
> > diff --git a/arch/arm/boot/dts/exynos5250.dtsi b/arch/arm/boot/dts/exynos5250.dtsi
> > index fc9fb3d..130d23d 100644
> > --- a/arch/arm/boot/dts/exynos5250.dtsi
> > +++ b/arch/arm/boot/dts/exynos5250.dtsi
> > @@ -66,6 +66,16 @@
> >                 reg = <0x10044040 0x20>;
> >         };
> >
> > +       pd_isp: mfc-power-domain@0x10044020 {
> > +               compatible = "samsung,exynos4210-pd";
> > +               reg = <0x10044020 0x20>;
> > +       };
> > +
> > +       pd_disp1: mfc-power-domain@0x100440A0 {
> > +               compatible = "samsung,exynos4210-pd";
> > +               reg = <0x100440A0 0x20>;
> > +       };
> > +
> >         clock: clock-controller@0x10010000 {
> >                 compatible = "samsung,exynos5250-clock";
> >                 reg = <0x10010000 0x30000>;
> > @@ -180,6 +190,7 @@
> >                 reg = <0x11000000 0x10000>;
> >                 interrupts = <0 96 0>;
> >                 samsung,power-domain = <&pd_mfc>;
> > +               iommu = <&sysmmu_mfc_l &sysmmu_mfc_l>;
> >         };
> >
> >         rtc {
> > @@ -571,6 +582,7 @@
> >                 samsung,power-domain = <&pd_gsc>;
> >                 clocks = <&clock 256>;
> >                 clock-names = "gscl";
> > +               iommu = <&sysmmu_gsc1>;
> >         };
> >
> >         gsc_1:  gsc@0x13e10000 {
> > @@ -580,6 +592,7 @@
> >                 samsung,power-domain = <&pd_gsc>;
> >                 clocks = <&clock 257>;
> >                 clock-names = "gscl";
> > +               iommu = <&sysmmu_gsc1>;
> >         };
> >
> >         gsc_2:  gsc@0x13e20000 {
> > @@ -589,6 +602,7 @@
> >                 samsung,power-domain = <&pd_gsc>;
> >                 clocks = <&clock 258>;
> >                 clock-names = "gscl";
> > +               iommu = <&sysmmu_gsc2>;
> >         };
> >
> >         gsc_3:  gsc@0x13e30000 {
> > @@ -598,6 +612,7 @@
> >                 samsung,power-domain = <&pd_gsc>;
> >                 clocks = <&clock 259>;
> >                 clock-names = "gscl";
> > +               iommu = <&sysmmu_gsc3>;
> >         };
> >
> >         hdmi {
> > @@ -614,6 +629,7 @@
> >                 compatible = "samsung,exynos5-mixer";
> >                 reg = <0x14450000 0x10000>;
> >                 interrupts = <0 94 0>;
> > +               iommu = <&sysmmu_tv>;
> >         };
> >
> >         dp-controller {
> > @@ -638,5 +654,280 @@
> >                 interrupts = <18 4>, <18 5>, <18 6>;
> >                 clocks = <&clock 133>, <&clock 339>;
> >                 clock-names = "sclk_fimd", "fimd";
> > +               iommu = <&sysmmu_fimd1>;
> > +       };
> > +
> > +       sysmmu_mfc_l: sysmmu@11210000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11210000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc_l";
> > +               interrupts = <8 5>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 267>, <&clock 266>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_mfc_r: sysmmu@11200000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11200000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc_r";
> > +               interrupts = <6 2>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 268>, <&clock 266>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_tv: sysmmu@14650000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x14650000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-tv";
> > +               interrupts = <7 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 349>;
> > +               samsung,power-domain = <&pd_disp1>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_gsc0: sysmmu@13E80000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13E80000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-gsc0";
> > +               interrupts = <2 0>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 262>, <&clock 256>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_gsc1: sysmmu@13E90000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13E90000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-gsc1";
> > +               interrupts = <2 2>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 263>, <&clock 257>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_gsc2: sysmmu@13EA0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13EA0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-gsc2";
> > +               interrupts = <2 4>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 264>, <&clock 258>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_gsc3: sysmmu@13EB0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13EB0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-gsc3";
> > +               interrupts = <2 6>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 265>, <&clock 259>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimd1: sysmmu@14640000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x14640000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimd1";
> > +               interrupts = <3 2>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 350>;
> > +               samsung,power-domain = <&pd_disp1>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_rotator: sysmmu@11D40000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11D40000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-rotator";
> > +               interrupts = <4 0>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 272>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_isp: sysmmu@13260000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13260000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_isp";
> > +               interrupts = <10 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 361>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_drc: sysmmu@13270000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13270000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_drc";
> > +               interrupts = <11 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 362>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_fd: sysmmu@132A0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132A0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_fd";
> > +               interrupts = <5 0>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 363>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_scc: sysmmu@13280000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13280000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_scalerc";
> > +               interrupts = <5 2>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 364>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_scp: sysmmu@13290000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13290000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_scalerp";
> > +               interrupts = <3 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 365>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_mcuctl: sysmmu@132B0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132B0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_mcuctl";
> > +               interrupts = <5 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 366>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_odc: sysmmu@132C0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132C0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_odc";
> > +               interrupts = <11 0>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 367>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_dis0: sysmmu@132D0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132D0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_dis0";
> > +               interrupts = <10 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 368>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_dis1: sysmmu@132E0000{
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132E0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_dis1";
> > +               interrupts = <9 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 369>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_3dnr: sysmmu@132F0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132F0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_3dnr";
> > +               interrupts = <5 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 370>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_lite0: sysmmu@13C40000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13C40000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_lite0";
> > +               interrupts = <3 4>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 346>, <&clock 345>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_lite1: sysmmu@13C50000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13C50000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_lite1";
> > +               interrupts = <24 1>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 347>, <&clock 345>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_jpeg: sysmmu@11F20000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11F20000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-jpeg";
> > +               interrupts = <4 2>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 273>, <&clock 270>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_2d: sysmmu@10A60000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x10A60000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-2d";
> > +               interrupts = <24 5>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 361>;
> > +               status = "ok";
> >         };
> >  };
> > --
> > 1.7.2.5
> >
> >
> >
> > _______________________________________________
> > linux-arm-kernel mailing list
> > linux-arm-kernel@lists.infradead.org
> > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel


^ permalink raw reply	[flat|nested] 65+ messages in thread

* RE: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-08-01 13:05     ` Cho KyongHo
  0 siblings, 0 replies; 65+ messages in thread
From: Cho KyongHo @ 2013-08-01 13:05 UTC (permalink / raw)
  To: 'Rob Herring'
  Cc: 'Kukjin Kim', 'Hyunwoong Kim',
	'Prathyush', 'Grant Grundler',
	'Will Deacon', 'Keyyoung Park',
	'Subash Patel', 'Linux Kernel',
	'Sachin Kamat', 'Linux IOMMU',
	'Linux Samsung SOC', 'Antonios Motakis',
	kvmarm-FPEHb7Xf0XXUo1n7N8X6UoWGPAHP3yOg,
	'Linux ARM Kernel', 'Rahul Sharma'

> -----Original Message-----
> From: Rob Herring [mailto:robherring2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org]
> Sent: Saturday, July 27, 2013 10:55 PM
> On Fri, Jul 26, 2013 at 6:28 AM, Cho KyongHo <pullip.cho-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org> wrote:
> > Signed-off-by: Cho KyongHo <pullip.cho-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
> > ---
> >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
> >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
> >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
> >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
> >  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
> >  5 files changed, 617 insertions(+), 0 deletions(-)
> >  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> >
> > diff --git a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > new file mode 100644
> > index 0000000..92f0a33
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > @@ -0,0 +1,103 @@
> > +Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management Unit)
> > +
> > +Samsung's Exynos architecture contains System MMU that enables scattered
> > +physical memory chunks visible as a contiguous region to DMA-capable peripheral
> > +devices like MFC, FIMC, FIMD, GScaler, FIMC-IS and so forth.
> > +
> > +System MMU is a sort of IOMMU and support identical translation table format to
> > +ARMv7 translation tables with minimum set of page properties including access
> > +permissions, shareability and security protection. In addition, System MMU has
> > +another capabilities like L2 TLB or block-fetch buffers to minimize translation
> > +latency.
> > +
> > +A System MMU is dedicated to a single master peripheral device.  Thus, it is
> > +important to specify the correct System MMU in the device node of its master
> > +device. Whereas a System MMU is dedicated to a master device, the master device
> > +may have more than one System MMU.
> 
> I don't follow the last sentence. Can you elaborate on the type of
> connection you are talking about.
> 
Grant also addressed that.
He corrected the sentence like the following:

  " Can I suggest rewriting the last two sentences to:
     The master device node must correctly specify at least one
     SystemMMU. A master  device may have more than one System MMU. "

I will change the sentence

> Also, please align with the ARM system MMU binding that Will Deacon
> has submitted particularly in terms of how master connections are
> described.
> 
I didn't check it.

Should this align with ARM System MMU bindings?
System MMU in Exynos SoC is different from ARM System MMU.
It does not follows the specifications of ARM System MMU.

> Rob
> 
> > +
> > +Required properties:
> > +- compatible: Should be "samsung,exynos4210-sysmmu"
> > +- reg: A tuple of base address and size of System MMU registers.
> > +- interrupt-parent: The phandle of the interrupt controller of System MMU
> > +- interrupts: A tuple of numbers that indicates the interrupt source.
> > +- clock-names: Should be "sysmmu" if the System MMU is needed to gate its clock.
> > +               Please refer to the following documents:
> > +              Documentation/devicetree/bindings/clock/clock-bindings.txt
> > +              Documentation/devicetree/bindings/clock/exynos4-clock.txt
> > +              Documentation/devicetree/bindings/clock/exynos5250-clock.txt
> > +              Optional "master" if the clock to the System MMU is gated by
> > +              another gate clock other than "sysmmu". The System MMU driver
> > +              sets "master" the parent of "sysmmu".
> > +              Exynos4 SoCs, there needs no "master" clocks.
> > +              Exynos5 SoCs, some System MMUs must have "master" clocks.
> > +- clocks: Required if the System MMU is needed to gate its clock.
> > +         Please refer to the documents listed above.
> > +- samsung,power-domain: Required if the System MMU is needed to gate its power.
> > +         Please refer to the following document:
> > +         Documentation/devicetree/bindings/arm/exynos/power_domain.txt
> > +
> > +Required properties for the master peripheral devices:
> > +- iommu: phandles to the System MMUs of the device
> > +
> > +Examples:
> > +A System MMU is dedicated to a single master device.
> > +       gsc_0:  gsc@0x13e00000 {
> > +               compatible = "samsung,exynos5-gsc";
> > +               reg = <0x13e00000 0x1000>;
> > +               interrupts = <0 85 0>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               clocks = <&clock 256>;
> > +               clock-names = "gscl";
> > +               iommu = <&sysmmu_gsc1>;
> > +       };
> > +
> > +       sysmmu_gsc0: sysmmu@13E80000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13E80000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-gsc0";
> > +               interrupts = <2 0>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 262>, <&clock 256>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +MFC has 2 System MMUs for each port that MFC is attached. Thus it seems natural
> > +to define 2 System MMUs for each port of the MFC:
> > +
> > +       mfc: codec@13400000 {
> > +               compatible = "samsung,mfc-v5";
> > +               reg = <0x13400000 0x10000>;
> > +               interrupts = <0 94 0>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               clocks = <&clock 170>, <&clock 273>;
> > +               clock-names = "sclk_mfc", "mfc";
> > +               status = "ok";
> > +               iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
> > +       };
> > +
> > +       sysmmu_mfc_l: sysmmu@13620000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13620000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc-l";
> > +               interrupts = <5 5>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 274>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_mfc_r: sysmmu@13630000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13630000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc-r";
> > +               interrupts = <5 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 275>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > diff --git a/arch/arm/boot/dts/exynos4.dtsi b/arch/arm/boot/dts/exynos4.dtsi
> > index 359694c..ba74ee8 100644
> > --- a/arch/arm/boot/dts/exynos4.dtsi
> > +++ b/arch/arm/boot/dts/exynos4.dtsi
> > @@ -161,6 +161,7 @@
> >                 interrupts = <0 94 0>;
> >                 samsung,power-domain = <&pd_mfc>;
> >                 status = "disabled";
> > +               iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
> >         };
> >
> >         serial@13800000 {
> > @@ -395,5 +396,126 @@
> >                 clock-names = "sclk_fimd", "fimd";
> >                 samsung,power-domain = <&pd_lcd0>;
> >                 status = "disabled";
> > +               iommu = <&sysmmu_fimd0>;
> > +       };
> > +
> > +       sysmmu_mfc_l: sysmmu@13620000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13620000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc-l";
> > +               interrupts = <5 5>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 274>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_mfc_r: sysmmu@13630000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13630000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc-r";
> > +               interrupts = <5 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 275>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_tv: sysmmu@13E20000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13E20000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-tv";
> > +               interrupts = <5 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 272>;
> > +               samsung,power-domain = <&pd_tv>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc0: sysmmu@11A20000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11A20000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc0";
> > +               interrupts = <4 2>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 263>;
> > +               samsung,power-domain = <&pd_cam>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc1: sysmmu@11A30000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11A30000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc1";
> > +               interrupts = <4 3>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 264>;
> > +               samsung,power-domain = <&pd_cam>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc2: sysmmu@11A40000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11A40000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc2";
> > +               interrupts = <4 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 265>;
> > +               samsung,power-domain = <&pd_cam>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc3: sysmmu@11A50000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11A50000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc3";
> > +               interrupts = <4 5>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 266>;
> > +               samsung,power-domain = <&pd_cam>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_jpeg: sysmmu@11A60000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11A60000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-jpeg";
> > +               interrupts = <4 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 267>;
> > +               samsung,power-domain = <&pd_cam>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_rotator: sysmmu@12A30000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x12A30000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-rotator";
> > +               interrupts = <5 0>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 281>;
> > +               samsung,power-domain = <&pd_lcd0>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimd0: sysmmu@11E20000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11E20000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimd0";
> > +               interrupts = <5 2>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 287>;
> > +               samsung,power-domain = <&pd_lcd0>;
> > +               status = "ok";
> >         };
> >  };
> > diff --git a/arch/arm/boot/dts/exynos4210.dtsi b/arch/arm/boot/dts/exynos4210.dtsi
> > index 54710de..09b13da 100644
> > --- a/arch/arm/boot/dts/exynos4210.dtsi
> > +++ b/arch/arm/boot/dts/exynos4210.dtsi
> > @@ -119,5 +119,30 @@
> >                 reg = <0x12800000 0x1000>;
> >                 interrupts = <0 89 0>;
> >                 status = "disabled";
> > +               iommu = <&sysmmu_g2d>;
> > +       };
> > +
> > +       sysmmu_g2d: sysmmu@12A20000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x12A20000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-g2d";
> > +               interrupts = <4 7>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 280>;
> > +               samsung,power-domain = <&pd_lcd0>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimd1: sysmmu@12220000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimd1";
> > +               reg = <0x12220000 0x1000>;
> > +               interrupts = <5 3>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 291>;
> > +               samsung,power-domain = <&pd_lcd1>;
> > +               status = "ok";
> >         };
> >  };
> > diff --git a/arch/arm/boot/dts/exynos4x12.dtsi b/arch/arm/boot/dts/exynos4x12.dtsi
> > index e3380a7..681db32 100644
> > --- a/arch/arm/boot/dts/exynos4x12.dtsi
> > +++ b/arch/arm/boot/dts/exynos4x12.dtsi
> > @@ -79,4 +79,80 @@
> >                 interrupts = <0 89 0>;
> >                 status = "disabled";
> >         };
> > +
> > +       sysmmu_g2d: sysmmu@10A40000{
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x10A40000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-g2d";
> > +               interrupts = <4 7>;
> > +               clock-names = "sysmmu";
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_isp: sysmmu@12260000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x12260000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_isp";
> > +               interrupts = <16 2>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 362>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_drc: sysmmu@12270000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x12270000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_drc";
> > +               interrupts = <16 3>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 363>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_fd: sysmmu@122A0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x122A0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_fd";
> > +               interrupts = <16 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 364>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_mcuctl: sysmmu@122B0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x122B0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_mcuctl";
> > +               interrupts = <16 5>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 376>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_lite0: sysmmu@123B0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x123B0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_lite0";
> > +               interrupts = <16 0>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 366>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_lite1: sysmmu@123C0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x123C0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_lite1";
> > +               interrupts = <16 1>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 365>;
> > +               status = "ok";
> > +       };
> >  };
> > diff --git a/arch/arm/boot/dts/exynos5250.dtsi b/arch/arm/boot/dts/exynos5250.dtsi
> > index fc9fb3d..130d23d 100644
> > --- a/arch/arm/boot/dts/exynos5250.dtsi
> > +++ b/arch/arm/boot/dts/exynos5250.dtsi
> > @@ -66,6 +66,16 @@
> >                 reg = <0x10044040 0x20>;
> >         };
> >
> > +       pd_isp: mfc-power-domain@0x10044020 {
> > +               compatible = "samsung,exynos4210-pd";
> > +               reg = <0x10044020 0x20>;
> > +       };
> > +
> > +       pd_disp1: mfc-power-domain@0x100440A0 {
> > +               compatible = "samsung,exynos4210-pd";
> > +               reg = <0x100440A0 0x20>;
> > +       };
> > +
> >         clock: clock-controller@0x10010000 {
> >                 compatible = "samsung,exynos5250-clock";
> >                 reg = <0x10010000 0x30000>;
> > @@ -180,6 +190,7 @@
> >                 reg = <0x11000000 0x10000>;
> >                 interrupts = <0 96 0>;
> >                 samsung,power-domain = <&pd_mfc>;
> > +               iommu = <&sysmmu_mfc_l &sysmmu_mfc_l>;
> >         };
> >
> >         rtc {
> > @@ -571,6 +582,7 @@
> >                 samsung,power-domain = <&pd_gsc>;
> >                 clocks = <&clock 256>;
> >                 clock-names = "gscl";
> > +               iommu = <&sysmmu_gsc1>;
> >         };
> >
> >         gsc_1:  gsc@0x13e10000 {
> > @@ -580,6 +592,7 @@
> >                 samsung,power-domain = <&pd_gsc>;
> >                 clocks = <&clock 257>;
> >                 clock-names = "gscl";
> > +               iommu = <&sysmmu_gsc1>;
> >         };
> >
> >         gsc_2:  gsc@0x13e20000 {
> > @@ -589,6 +602,7 @@
> >                 samsung,power-domain = <&pd_gsc>;
> >                 clocks = <&clock 258>;
> >                 clock-names = "gscl";
> > +               iommu = <&sysmmu_gsc2>;
> >         };
> >
> >         gsc_3:  gsc@0x13e30000 {
> > @@ -598,6 +612,7 @@
> >                 samsung,power-domain = <&pd_gsc>;
> >                 clocks = <&clock 259>;
> >                 clock-names = "gscl";
> > +               iommu = <&sysmmu_gsc3>;
> >         };
> >
> >         hdmi {
> > @@ -614,6 +629,7 @@
> >                 compatible = "samsung,exynos5-mixer";
> >                 reg = <0x14450000 0x10000>;
> >                 interrupts = <0 94 0>;
> > +               iommu = <&sysmmu_tv>;
> >         };
> >
> >         dp-controller {
> > @@ -638,5 +654,280 @@
> >                 interrupts = <18 4>, <18 5>, <18 6>;
> >                 clocks = <&clock 133>, <&clock 339>;
> >                 clock-names = "sclk_fimd", "fimd";
> > +               iommu = <&sysmmu_fimd1>;
> > +       };
> > +
> > +       sysmmu_mfc_l: sysmmu@11210000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11210000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc_l";
> > +               interrupts = <8 5>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 267>, <&clock 266>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_mfc_r: sysmmu@11200000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11200000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc_r";
> > +               interrupts = <6 2>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 268>, <&clock 266>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_tv: sysmmu@14650000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x14650000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-tv";
> > +               interrupts = <7 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 349>;
> > +               samsung,power-domain = <&pd_disp1>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_gsc0: sysmmu@13E80000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13E80000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-gsc0";
> > +               interrupts = <2 0>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 262>, <&clock 256>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_gsc1: sysmmu@13E90000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13E90000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-gsc1";
> > +               interrupts = <2 2>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 263>, <&clock 257>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_gsc2: sysmmu@13EA0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13EA0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-gsc2";
> > +               interrupts = <2 4>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 264>, <&clock 258>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_gsc3: sysmmu@13EB0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13EB0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-gsc3";
> > +               interrupts = <2 6>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 265>, <&clock 259>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimd1: sysmmu@14640000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x14640000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimd1";
> > +               interrupts = <3 2>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 350>;
> > +               samsung,power-domain = <&pd_disp1>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_rotator: sysmmu@11D40000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11D40000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-rotator";
> > +               interrupts = <4 0>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 272>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_isp: sysmmu@13260000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13260000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_isp";
> > +               interrupts = <10 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 361>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_drc: sysmmu@13270000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13270000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_drc";
> > +               interrupts = <11 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 362>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_fd: sysmmu@132A0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132A0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_fd";
> > +               interrupts = <5 0>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 363>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_scc: sysmmu@13280000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13280000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_scalerc";
> > +               interrupts = <5 2>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 364>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_scp: sysmmu@13290000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13290000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_scalerp";
> > +               interrupts = <3 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 365>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_mcuctl: sysmmu@132B0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132B0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_mcuctl";
> > +               interrupts = <5 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 366>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_odc: sysmmu@132C0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132C0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_odc";
> > +               interrupts = <11 0>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 367>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_dis0: sysmmu@132D0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132D0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_dis0";
> > +               interrupts = <10 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 368>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_dis1: sysmmu@132E0000{
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132E0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_dis1";
> > +               interrupts = <9 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 369>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_3dnr: sysmmu@132F0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132F0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_3dnr";
> > +               interrupts = <5 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 370>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_lite0: sysmmu@13C40000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13C40000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_lite0";
> > +               interrupts = <3 4>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 346>, <&clock 345>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_lite1: sysmmu@13C50000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13C50000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_lite1";
> > +               interrupts = <24 1>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 347>, <&clock 345>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_jpeg: sysmmu@11F20000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11F20000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-jpeg";
> > +               interrupts = <4 2>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 273>, <&clock 270>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_2d: sysmmu@10A60000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x10A60000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-2d";
> > +               interrupts = <24 5>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 361>;
> > +               status = "ok";
> >         };
> >  };
> > --
> > 1.7.2.5
> >
> >
> >
> > _______________________________________________
> > linux-arm-kernel mailing list
> > linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org
> > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 65+ messages in thread

* [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-08-01 13:05     ` Cho KyongHo
  0 siblings, 0 replies; 65+ messages in thread
From: Cho KyongHo @ 2013-08-01 13:05 UTC (permalink / raw)
  To: linux-arm-kernel

> -----Original Message-----
> From: Rob Herring [mailto:robherring2 at gmail.com]
> Sent: Saturday, July 27, 2013 10:55 PM
> On Fri, Jul 26, 2013 at 6:28 AM, Cho KyongHo <pullip.cho@samsung.com> wrote:
> > Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
> > ---
> >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
> >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
> >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
> >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
> >  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
> >  5 files changed, 617 insertions(+), 0 deletions(-)
> >  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> >
> > diff --git a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > new file mode 100644
> > index 0000000..92f0a33
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > @@ -0,0 +1,103 @@
> > +Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management Unit)
> > +
> > +Samsung's Exynos architecture contains System MMU that enables scattered
> > +physical memory chunks visible as a contiguous region to DMA-capable peripheral
> > +devices like MFC, FIMC, FIMD, GScaler, FIMC-IS and so forth.
> > +
> > +System MMU is a sort of IOMMU and support identical translation table format to
> > +ARMv7 translation tables with minimum set of page properties including access
> > +permissions, shareability and security protection. In addition, System MMU has
> > +another capabilities like L2 TLB or block-fetch buffers to minimize translation
> > +latency.
> > +
> > +A System MMU is dedicated to a single master peripheral device.  Thus, it is
> > +important to specify the correct System MMU in the device node of its master
> > +device. Whereas a System MMU is dedicated to a master device, the master device
> > +may have more than one System MMU.
> 
> I don't follow the last sentence. Can you elaborate on the type of
> connection you are talking about.
> 
Grant also addressed that.
He corrected the sentence like the following:

  " Can I suggest rewriting the last two sentences to:
     The master device node must correctly specify at least one
     SystemMMU. A master  device may have more than one System MMU. "

I will change the sentence

> Also, please align with the ARM system MMU binding that Will Deacon
> has submitted particularly in terms of how master connections are
> described.
> 
I didn't check it.

Should this align with ARM System MMU bindings?
System MMU in Exynos SoC is different from ARM System MMU.
It does not follows the specifications of ARM System MMU.

> Rob
> 
> > +
> > +Required properties:
> > +- compatible: Should be "samsung,exynos4210-sysmmu"
> > +- reg: A tuple of base address and size of System MMU registers.
> > +- interrupt-parent: The phandle of the interrupt controller of System MMU
> > +- interrupts: A tuple of numbers that indicates the interrupt source.
> > +- clock-names: Should be "sysmmu" if the System MMU is needed to gate its clock.
> > +               Please refer to the following documents:
> > +              Documentation/devicetree/bindings/clock/clock-bindings.txt
> > +              Documentation/devicetree/bindings/clock/exynos4-clock.txt
> > +              Documentation/devicetree/bindings/clock/exynos5250-clock.txt
> > +              Optional "master" if the clock to the System MMU is gated by
> > +              another gate clock other than "sysmmu". The System MMU driver
> > +              sets "master" the parent of "sysmmu".
> > +              Exynos4 SoCs, there needs no "master" clocks.
> > +              Exynos5 SoCs, some System MMUs must have "master" clocks.
> > +- clocks: Required if the System MMU is needed to gate its clock.
> > +         Please refer to the documents listed above.
> > +- samsung,power-domain: Required if the System MMU is needed to gate its power.
> > +         Please refer to the following document:
> > +         Documentation/devicetree/bindings/arm/exynos/power_domain.txt
> > +
> > +Required properties for the master peripheral devices:
> > +- iommu: phandles to the System MMUs of the device
> > +
> > +Examples:
> > +A System MMU is dedicated to a single master device.
> > +       gsc_0:  gsc at 0x13e00000 {
> > +               compatible = "samsung,exynos5-gsc";
> > +               reg = <0x13e00000 0x1000>;
> > +               interrupts = <0 85 0>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               clocks = <&clock 256>;
> > +               clock-names = "gscl";
> > +               iommu = <&sysmmu_gsc1>;
> > +       };
> > +
> > +       sysmmu_gsc0: sysmmu at 13E80000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13E80000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-gsc0";
> > +               interrupts = <2 0>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 262>, <&clock 256>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +MFC has 2 System MMUs for each port that MFC is attached. Thus it seems natural
> > +to define 2 System MMUs for each port of the MFC:
> > +
> > +       mfc: codec at 13400000 {
> > +               compatible = "samsung,mfc-v5";
> > +               reg = <0x13400000 0x10000>;
> > +               interrupts = <0 94 0>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               clocks = <&clock 170>, <&clock 273>;
> > +               clock-names = "sclk_mfc", "mfc";
> > +               status = "ok";
> > +               iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
> > +       };
> > +
> > +       sysmmu_mfc_l: sysmmu at 13620000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13620000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc-l";
> > +               interrupts = <5 5>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 274>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_mfc_r: sysmmu at 13630000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13630000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc-r";
> > +               interrupts = <5 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 275>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > diff --git a/arch/arm/boot/dts/exynos4.dtsi b/arch/arm/boot/dts/exynos4.dtsi
> > index 359694c..ba74ee8 100644
> > --- a/arch/arm/boot/dts/exynos4.dtsi
> > +++ b/arch/arm/boot/dts/exynos4.dtsi
> > @@ -161,6 +161,7 @@
> >                 interrupts = <0 94 0>;
> >                 samsung,power-domain = <&pd_mfc>;
> >                 status = "disabled";
> > +               iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
> >         };
> >
> >         serial at 13800000 {
> > @@ -395,5 +396,126 @@
> >                 clock-names = "sclk_fimd", "fimd";
> >                 samsung,power-domain = <&pd_lcd0>;
> >                 status = "disabled";
> > +               iommu = <&sysmmu_fimd0>;
> > +       };
> > +
> > +       sysmmu_mfc_l: sysmmu at 13620000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13620000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc-l";
> > +               interrupts = <5 5>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 274>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_mfc_r: sysmmu at 13630000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13630000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc-r";
> > +               interrupts = <5 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 275>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_tv: sysmmu at 13E20000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13E20000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-tv";
> > +               interrupts = <5 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 272>;
> > +               samsung,power-domain = <&pd_tv>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc0: sysmmu at 11A20000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11A20000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc0";
> > +               interrupts = <4 2>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 263>;
> > +               samsung,power-domain = <&pd_cam>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc1: sysmmu at 11A30000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11A30000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc1";
> > +               interrupts = <4 3>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 264>;
> > +               samsung,power-domain = <&pd_cam>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc2: sysmmu at 11A40000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11A40000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc2";
> > +               interrupts = <4 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 265>;
> > +               samsung,power-domain = <&pd_cam>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc3: sysmmu at 11A50000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11A50000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc3";
> > +               interrupts = <4 5>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 266>;
> > +               samsung,power-domain = <&pd_cam>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_jpeg: sysmmu at 11A60000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11A60000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-jpeg";
> > +               interrupts = <4 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 267>;
> > +               samsung,power-domain = <&pd_cam>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_rotator: sysmmu at 12A30000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x12A30000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-rotator";
> > +               interrupts = <5 0>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 281>;
> > +               samsung,power-domain = <&pd_lcd0>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimd0: sysmmu at 11E20000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11E20000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimd0";
> > +               interrupts = <5 2>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 287>;
> > +               samsung,power-domain = <&pd_lcd0>;
> > +               status = "ok";
> >         };
> >  };
> > diff --git a/arch/arm/boot/dts/exynos4210.dtsi b/arch/arm/boot/dts/exynos4210.dtsi
> > index 54710de..09b13da 100644
> > --- a/arch/arm/boot/dts/exynos4210.dtsi
> > +++ b/arch/arm/boot/dts/exynos4210.dtsi
> > @@ -119,5 +119,30 @@
> >                 reg = <0x12800000 0x1000>;
> >                 interrupts = <0 89 0>;
> >                 status = "disabled";
> > +               iommu = <&sysmmu_g2d>;
> > +       };
> > +
> > +       sysmmu_g2d: sysmmu at 12A20000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x12A20000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-g2d";
> > +               interrupts = <4 7>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 280>;
> > +               samsung,power-domain = <&pd_lcd0>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimd1: sysmmu at 12220000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimd1";
> > +               reg = <0x12220000 0x1000>;
> > +               interrupts = <5 3>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 291>;
> > +               samsung,power-domain = <&pd_lcd1>;
> > +               status = "ok";
> >         };
> >  };
> > diff --git a/arch/arm/boot/dts/exynos4x12.dtsi b/arch/arm/boot/dts/exynos4x12.dtsi
> > index e3380a7..681db32 100644
> > --- a/arch/arm/boot/dts/exynos4x12.dtsi
> > +++ b/arch/arm/boot/dts/exynos4x12.dtsi
> > @@ -79,4 +79,80 @@
> >                 interrupts = <0 89 0>;
> >                 status = "disabled";
> >         };
> > +
> > +       sysmmu_g2d: sysmmu at 10A40000{
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x10A40000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-g2d";
> > +               interrupts = <4 7>;
> > +               clock-names = "sysmmu";
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_isp: sysmmu at 12260000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x12260000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_isp";
> > +               interrupts = <16 2>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 362>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_drc: sysmmu at 12270000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x12270000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_drc";
> > +               interrupts = <16 3>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 363>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_fd: sysmmu at 122A0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x122A0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_fd";
> > +               interrupts = <16 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 364>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_mcuctl: sysmmu at 122B0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x122B0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_mcuctl";
> > +               interrupts = <16 5>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 376>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_lite0: sysmmu at 123B0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x123B0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_lite0";
> > +               interrupts = <16 0>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 366>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_lite1: sysmmu at 123C0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x123C0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_lite1";
> > +               interrupts = <16 1>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 365>;
> > +               status = "ok";
> > +       };
> >  };
> > diff --git a/arch/arm/boot/dts/exynos5250.dtsi b/arch/arm/boot/dts/exynos5250.dtsi
> > index fc9fb3d..130d23d 100644
> > --- a/arch/arm/boot/dts/exynos5250.dtsi
> > +++ b/arch/arm/boot/dts/exynos5250.dtsi
> > @@ -66,6 +66,16 @@
> >                 reg = <0x10044040 0x20>;
> >         };
> >
> > +       pd_isp: mfc-power-domain at 0x10044020 {
> > +               compatible = "samsung,exynos4210-pd";
> > +               reg = <0x10044020 0x20>;
> > +       };
> > +
> > +       pd_disp1: mfc-power-domain at 0x100440A0 {
> > +               compatible = "samsung,exynos4210-pd";
> > +               reg = <0x100440A0 0x20>;
> > +       };
> > +
> >         clock: clock-controller at 0x10010000 {
> >                 compatible = "samsung,exynos5250-clock";
> >                 reg = <0x10010000 0x30000>;
> > @@ -180,6 +190,7 @@
> >                 reg = <0x11000000 0x10000>;
> >                 interrupts = <0 96 0>;
> >                 samsung,power-domain = <&pd_mfc>;
> > +               iommu = <&sysmmu_mfc_l &sysmmu_mfc_l>;
> >         };
> >
> >         rtc {
> > @@ -571,6 +582,7 @@
> >                 samsung,power-domain = <&pd_gsc>;
> >                 clocks = <&clock 256>;
> >                 clock-names = "gscl";
> > +               iommu = <&sysmmu_gsc1>;
> >         };
> >
> >         gsc_1:  gsc at 0x13e10000 {
> > @@ -580,6 +592,7 @@
> >                 samsung,power-domain = <&pd_gsc>;
> >                 clocks = <&clock 257>;
> >                 clock-names = "gscl";
> > +               iommu = <&sysmmu_gsc1>;
> >         };
> >
> >         gsc_2:  gsc at 0x13e20000 {
> > @@ -589,6 +602,7 @@
> >                 samsung,power-domain = <&pd_gsc>;
> >                 clocks = <&clock 258>;
> >                 clock-names = "gscl";
> > +               iommu = <&sysmmu_gsc2>;
> >         };
> >
> >         gsc_3:  gsc at 0x13e30000 {
> > @@ -598,6 +612,7 @@
> >                 samsung,power-domain = <&pd_gsc>;
> >                 clocks = <&clock 259>;
> >                 clock-names = "gscl";
> > +               iommu = <&sysmmu_gsc3>;
> >         };
> >
> >         hdmi {
> > @@ -614,6 +629,7 @@
> >                 compatible = "samsung,exynos5-mixer";
> >                 reg = <0x14450000 0x10000>;
> >                 interrupts = <0 94 0>;
> > +               iommu = <&sysmmu_tv>;
> >         };
> >
> >         dp-controller {
> > @@ -638,5 +654,280 @@
> >                 interrupts = <18 4>, <18 5>, <18 6>;
> >                 clocks = <&clock 133>, <&clock 339>;
> >                 clock-names = "sclk_fimd", "fimd";
> > +               iommu = <&sysmmu_fimd1>;
> > +       };
> > +
> > +       sysmmu_mfc_l: sysmmu at 11210000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11210000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc_l";
> > +               interrupts = <8 5>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 267>, <&clock 266>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_mfc_r: sysmmu at 11200000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11200000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-mfc_r";
> > +               interrupts = <6 2>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 268>, <&clock 266>;
> > +               samsung,power-domain = <&pd_mfc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_tv: sysmmu at 14650000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x14650000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-tv";
> > +               interrupts = <7 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 349>;
> > +               samsung,power-domain = <&pd_disp1>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_gsc0: sysmmu at 13E80000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13E80000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-gsc0";
> > +               interrupts = <2 0>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 262>, <&clock 256>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_gsc1: sysmmu at 13E90000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13E90000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-gsc1";
> > +               interrupts = <2 2>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 263>, <&clock 257>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_gsc2: sysmmu at 13EA0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13EA0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-gsc2";
> > +               interrupts = <2 4>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 264>, <&clock 258>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_gsc3: sysmmu at 13EB0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13EB0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-gsc3";
> > +               interrupts = <2 6>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 265>, <&clock 259>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimd1: sysmmu at 14640000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x14640000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimd1";
> > +               interrupts = <3 2>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 350>;
> > +               samsung,power-domain = <&pd_disp1>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_rotator: sysmmu at 11D40000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11D40000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-rotator";
> > +               interrupts = <4 0>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 272>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_isp: sysmmu at 13260000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13260000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_isp";
> > +               interrupts = <10 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 361>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_drc: sysmmu at 13270000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13270000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_drc";
> > +               interrupts = <11 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 362>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_fd: sysmmu at 132A0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132A0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_fd";
> > +               interrupts = <5 0>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 363>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_scc: sysmmu at 13280000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13280000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_scalerc";
> > +               interrupts = <5 2>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 364>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_scp: sysmmu at 13290000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13290000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_scalerp";
> > +               interrupts = <3 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 365>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_mcuctl: sysmmu at 132B0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132B0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_mcuctl";
> > +               interrupts = <5 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 366>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_odc: sysmmu at 132C0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132C0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_odc";
> > +               interrupts = <11 0>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 367>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_dis0: sysmmu at 132D0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132D0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_dis0";
> > +               interrupts = <10 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 368>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_dis1: sysmmu at 132E0000{
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132E0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_dis1";
> > +               interrupts = <9 4>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 369>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_3dnr: sysmmu at 132F0000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x132F0000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_3dnr";
> > +               interrupts = <5 6>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 370>;
> > +               samsung,power-domain = <&pd_isp>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_lite0: sysmmu at 13C40000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13C40000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_lite0";
> > +               interrupts = <3 4>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 346>, <&clock 345>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_lite1: sysmmu at 13C50000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x13C50000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-fimc_lite1";
> > +               interrupts = <24 1>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 347>, <&clock 345>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_jpeg: sysmmu at 11F20000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x11F20000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-jpeg";
> > +               interrupts = <4 2>;
> > +               clock-names = "sysmmu", "master";
> > +               clocks = <&clock 273>, <&clock 270>;
> > +               samsung,power-domain = <&pd_gsc>;
> > +               status = "ok";
> > +       };
> > +
> > +       sysmmu_fimc_2d: sysmmu at 10A60000 {
> > +               compatible = "samsung,exynos4210-sysmmu";
> > +               reg = <0x10A60000 0x1000>;
> > +               interrupt-parent = <&combiner>;
> > +               interrupt-names = "sysmmu-2d";
> > +               interrupts = <24 5>;
> > +               clock-names = "sysmmu";
> > +               clocks = <&clock 361>;
> > +               status = "ok";
> >         };
> >  };
> > --
> > 1.7.2.5
> >
> >
> >
> > _______________________________________________
> > linux-arm-kernel mailing list
> > linux-arm-kernel at lists.infradead.org
> > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 65+ messages in thread

* RE: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-08-01 13:12         ` Cho KyongHo
  0 siblings, 0 replies; 65+ messages in thread
From: Cho KyongHo @ 2013-08-01 13:12 UTC (permalink / raw)
  To: 'Sachin Kamat'
  Cc: 'Linux ARM Kernel', 'Linux IOMMU',
	'Linux Kernel', 'Linux Samsung SOC',
	'Hyunwoong Kim', 'Joerg Roedel',
	'Kukjin Kim', 'Prathyush', 'Rahul Sharma',
	'Subash Patel', 'Keyyoung Park',
	'Grant Grundler', 'Antonios Motakis',
	kvmarm

> -----Original Message-----
> From: Sachin Kamat [mailto:sachin.kamat@linaro.org]
> Sent: Monday, July 29, 2013 5:05 PM
> 
> On 29 July 2013 13:27, Cho KyongHo <pullip.cho@samsung.com> wrote:
> >> -----Original Message-----
> >> From: Cho KyongHo [mailto:pullip.cho@samsung.com]
> >> Sent: Monday, July 29, 2013 4:20 PM
> >>
> >> > -----Original Message-----
> >> > From: Sachin Kamat [mailto:sachin.kamat@linaro.org]
> >> > Sent: Monday, July 29, 2013 3:38 PM
> >> >
> >> > Hi KyongHo,
> >> >
> >> > On 26 July 2013 16:58, Cho KyongHo <pullip.cho@samsung.com> wrote:
> >> > > Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
> >> > > ---
> >> > >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
> >> > >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
> >> > >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
> >> > >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
> >> > >  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
> >> > >  5 files changed, 617 insertions(+), 0 deletions(-)
> >> > >  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> >> >
> >> > This patch does not apply on the mainline Linus' tree (3.11-rc2). Please rebase.
> >> >
> >>
> >> OK. I will rebase the next patches on that.
> >
> > I don't get any conflict both on the latest of Linus's tree (3.11-rc3)
> > and for-next branch  of Samsung git.
> > Can you show me the diff?
> >
> 
> I get the following error when I do git am on this patch (linus' tree
> 3.11-rc3). Other patches apply fine.
> 
> Applying: ARM: dts: Add description of System MMU of Exynos SoCs
> <local_path>/linux/.git/rebase-apply/patch:120: new blank line at EOF.
> +
> error: patch failed: arch/arm/boot/dts/exynos4.dtsi:161
> error: arch/arm/boot/dts/exynos4.dtsi: patch does not apply
> error: patch failed: arch/arm/boot/dts/exynos4210.dtsi:119
> error: arch/arm/boot/dts/exynos4210.dtsi: patch does not apply
> error: patch failed: arch/arm/boot/dts/exynos4x12.dtsi:79
> error: arch/arm/boot/dts/exynos4x12.dtsi: patch does not apply
> error: patch failed: arch/arm/boot/dts/exynos5250.dtsi:614
> error: arch/arm/boot/dts/exynos5250.dtsi: patch does not apply
> Patch failed at 0001 ARM: dts: Add description of System MMU of Exynos SoCs
> When you have resolved this problem run "git am --resolved".
> If you would prefer to skip this patch, instead run "git am --skip".
> To restore the original branch and stop patching run "git am --abort".
> 

I wonder why you get the errors.
The error message shows the patch has extra blank line after the mark of EOF.
Or, maybe the patch I posted omitted some format information...

> --
> With warm regards,
> Sachin


^ permalink raw reply	[flat|nested] 65+ messages in thread

* RE: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-08-01 13:12         ` Cho KyongHo
  0 siblings, 0 replies; 65+ messages in thread
From: Cho KyongHo @ 2013-08-01 13:12 UTC (permalink / raw)
  To: 'Sachin Kamat'
  Cc: 'Linux Samsung SOC', 'Hyunwoong Kim',
	'Prathyush', 'Grant Grundler',
	'Keyyoung Park', 'Subash Patel',
	'Linux Kernel', 'Linux IOMMU',
	'Kukjin Kim', 'Antonios Motakis',
	kvmarm-FPEHb7Xf0XXUo1n7N8X6UoWGPAHP3yOg,
	'Linux ARM Kernel', 'Rahul Sharma'

> -----Original Message-----
> From: Sachin Kamat [mailto:sachin.kamat-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org]
> Sent: Monday, July 29, 2013 5:05 PM
> 
> On 29 July 2013 13:27, Cho KyongHo <pullip.cho-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org> wrote:
> >> -----Original Message-----
> >> From: Cho KyongHo [mailto:pullip.cho-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org]
> >> Sent: Monday, July 29, 2013 4:20 PM
> >>
> >> > -----Original Message-----
> >> > From: Sachin Kamat [mailto:sachin.kamat-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org]
> >> > Sent: Monday, July 29, 2013 3:38 PM
> >> >
> >> > Hi KyongHo,
> >> >
> >> > On 26 July 2013 16:58, Cho KyongHo <pullip.cho-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org> wrote:
> >> > > Signed-off-by: Cho KyongHo <pullip.cho-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
> >> > > ---
> >> > >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
> >> > >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
> >> > >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
> >> > >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
> >> > >  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
> >> > >  5 files changed, 617 insertions(+), 0 deletions(-)
> >> > >  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> >> >
> >> > This patch does not apply on the mainline Linus' tree (3.11-rc2). Please rebase.
> >> >
> >>
> >> OK. I will rebase the next patches on that.
> >
> > I don't get any conflict both on the latest of Linus's tree (3.11-rc3)
> > and for-next branch  of Samsung git.
> > Can you show me the diff?
> >
> 
> I get the following error when I do git am on this patch (linus' tree
> 3.11-rc3). Other patches apply fine.
> 
> Applying: ARM: dts: Add description of System MMU of Exynos SoCs
> <local_path>/linux/.git/rebase-apply/patch:120: new blank line at EOF.
> +
> error: patch failed: arch/arm/boot/dts/exynos4.dtsi:161
> error: arch/arm/boot/dts/exynos4.dtsi: patch does not apply
> error: patch failed: arch/arm/boot/dts/exynos4210.dtsi:119
> error: arch/arm/boot/dts/exynos4210.dtsi: patch does not apply
> error: patch failed: arch/arm/boot/dts/exynos4x12.dtsi:79
> error: arch/arm/boot/dts/exynos4x12.dtsi: patch does not apply
> error: patch failed: arch/arm/boot/dts/exynos5250.dtsi:614
> error: arch/arm/boot/dts/exynos5250.dtsi: patch does not apply
> Patch failed at 0001 ARM: dts: Add description of System MMU of Exynos SoCs
> When you have resolved this problem run "git am --resolved".
> If you would prefer to skip this patch, instead run "git am --skip".
> To restore the original branch and stop patching run "git am --abort".
> 

I wonder why you get the errors.
The error message shows the patch has extra blank line after the mark of EOF.
Or, maybe the patch I posted omitted some format information...

> --
> With warm regards,
> Sachin

^ permalink raw reply	[flat|nested] 65+ messages in thread

* [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-08-01 13:12         ` Cho KyongHo
  0 siblings, 0 replies; 65+ messages in thread
From: Cho KyongHo @ 2013-08-01 13:12 UTC (permalink / raw)
  To: linux-arm-kernel

> -----Original Message-----
> From: Sachin Kamat [mailto:sachin.kamat at linaro.org]
> Sent: Monday, July 29, 2013 5:05 PM
> 
> On 29 July 2013 13:27, Cho KyongHo <pullip.cho@samsung.com> wrote:
> >> -----Original Message-----
> >> From: Cho KyongHo [mailto:pullip.cho at samsung.com]
> >> Sent: Monday, July 29, 2013 4:20 PM
> >>
> >> > -----Original Message-----
> >> > From: Sachin Kamat [mailto:sachin.kamat at linaro.org]
> >> > Sent: Monday, July 29, 2013 3:38 PM
> >> >
> >> > Hi KyongHo,
> >> >
> >> > On 26 July 2013 16:58, Cho KyongHo <pullip.cho@samsung.com> wrote:
> >> > > Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
> >> > > ---
> >> > >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
> >> > >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
> >> > >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
> >> > >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
> >> > >  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
> >> > >  5 files changed, 617 insertions(+), 0 deletions(-)
> >> > >  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> >> >
> >> > This patch does not apply on the mainline Linus' tree (3.11-rc2). Please rebase.
> >> >
> >>
> >> OK. I will rebase the next patches on that.
> >
> > I don't get any conflict both on the latest of Linus's tree (3.11-rc3)
> > and for-next branch  of Samsung git.
> > Can you show me the diff?
> >
> 
> I get the following error when I do git am on this patch (linus' tree
> 3.11-rc3). Other patches apply fine.
> 
> Applying: ARM: dts: Add description of System MMU of Exynos SoCs
> <local_path>/linux/.git/rebase-apply/patch:120: new blank line at EOF.
> +
> error: patch failed: arch/arm/boot/dts/exynos4.dtsi:161
> error: arch/arm/boot/dts/exynos4.dtsi: patch does not apply
> error: patch failed: arch/arm/boot/dts/exynos4210.dtsi:119
> error: arch/arm/boot/dts/exynos4210.dtsi: patch does not apply
> error: patch failed: arch/arm/boot/dts/exynos4x12.dtsi:79
> error: arch/arm/boot/dts/exynos4x12.dtsi: patch does not apply
> error: patch failed: arch/arm/boot/dts/exynos5250.dtsi:614
> error: arch/arm/boot/dts/exynos5250.dtsi: patch does not apply
> Patch failed at 0001 ARM: dts: Add description of System MMU of Exynos SoCs
> When you have resolved this problem run "git am --resolved".
> If you would prefer to skip this patch, instead run "git am --skip".
> To restore the original branch and stop patching run "git am --abort".
> 

I wonder why you get the errors.
The error message shows the patch has extra blank line after the mark of EOF.
Or, maybe the patch I posted omitted some format information...

> --
> With warm regards,
> Sachin

^ permalink raw reply	[flat|nested] 65+ messages in thread

* Re: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
  2013-07-26 11:28 ` Cho KyongHo
  (?)
@ 2013-08-02 17:14   ` Bartlomiej Zolnierkiewicz
  -1 siblings, 0 replies; 65+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2013-08-02 17:14 UTC (permalink / raw)
  To: Cho KyongHo
  Cc: 'Linux ARM Kernel', 'Linux IOMMU',
	'Linux Kernel', 'Linux Samsung SOC',
	'Hyunwoong Kim', 'Joerg Roedel',
	'Kukjin Kim', 'Prathyush', 'Rahul Sharma',
	'Subash Patel', 'Keyyoung Park',
	'Grant Grundler', 'Antonios Motakis',
	kvmarm, 'Sachin Kamat',
	m.szyprowski


Hi,

On Friday, July 26, 2013 08:28:19 PM Cho KyongHo wrote:
> Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
> ---
>  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
>  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
>  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
>  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
>  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
>  5 files changed, 617 insertions(+), 0 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> 
> diff --git a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> new file mode 100644
> index 0000000..92f0a33
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> @@ -0,0 +1,103 @@
> +Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management Unit)
> +
> +Samsung's Exynos architecture contains System MMU that enables scattered
> +physical memory chunks visible as a contiguous region to DMA-capable peripheral
> +devices like MFC, FIMC, FIMD, GScaler, FIMC-IS and so forth.
> +
> +System MMU is a sort of IOMMU and support identical translation table format to
> +ARMv7 translation tables with minimum set of page properties including access
> +permissions, shareability and security protection. In addition, System MMU has
> +another capabilities like L2 TLB or block-fetch buffers to minimize translation
> +latency.
> +
> +A System MMU is dedicated to a single master peripheral device.  Thus, it is
> +important to specify the correct System MMU in the device node of its master
> +device. Whereas a System MMU is dedicated to a master device, the master device
> +may have more than one System MMU.
> +
> +Required properties:
> +- compatible: Should be "samsung,exynos4210-sysmmu"
> +- reg: A tuple of base address and size of System MMU registers.
> +- interrupt-parent: The phandle of the interrupt controller of System MMU
> +- interrupts: A tuple of numbers that indicates the interrupt source.
> +- clock-names: Should be "sysmmu" if the System MMU is needed to gate its clock.
> +               Please refer to the following documents:
> +	       Documentation/devicetree/bindings/clock/clock-bindings.txt
> +	       Documentation/devicetree/bindings/clock/exynos4-clock.txt
> +	       Documentation/devicetree/bindings/clock/exynos5250-clock.txt
> +	       Optional "master" if the clock to the System MMU is gated by
> +	       another gate clock other than "sysmmu". The System MMU driver
> +	       sets "master" the parent of "sysmmu".
> +	       Exynos4 SoCs, there needs no "master" clocks.
> +	       Exynos5 SoCs, some System MMUs must have "master" clocks.
> +- clocks: Required if the System MMU is needed to gate its clock.
> +	  Please refer to the documents listed above.
> +- samsung,power-domain: Required if the System MMU is needed to gate its power.
> +	  Please refer to the following document:
> +	  Documentation/devicetree/bindings/arm/exynos/power_domain.txt
> +
> +Required properties for the master peripheral devices:
> +- iommu: phandles to the System MMUs of the device
> +
> +Examples:
> +A System MMU is dedicated to a single master device.
> +	gsc_0:  gsc@0x13e00000 {
> +		compatible = "samsung,exynos5-gsc";
> +		reg = <0x13e00000 0x1000>;
> +		interrupts = <0 85 0>;
> +		samsung,power-domain = <&pd_gsc>;
> +		clocks = <&clock 256>;
> +		clock-names = "gscl";
> +		iommu = <&sysmmu_gsc1>;
> +	};
> +
> +	sysmmu_gsc0: sysmmu@13E80000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13E80000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-gsc0";
> +		interrupts = <2 0>;
> +		clock-names = "sysmmu", "master";
> +		clocks = <&clock 262>, <&clock 256>;
> +		samsung,power-domain = <&pd_gsc>;
> +		status = "ok";
> +	};
> +
> +MFC has 2 System MMUs for each port that MFC is attached. Thus it seems natural
> +to define 2 System MMUs for each port of the MFC:

Marek Szyprowski (added to cc:) has a patch fixing MFC to create separate
mfc_l and mfc_r devices (like it was in the past). Using this patch it
would be possible to bind sysmmu_mfc_l to mfc_l device and sysmmu_mfc_r to
mfc_r device. This probably also requires adding some MFC specific handling
in a device tree node and to the new master's device PM ops (in patch #10)
as previously (in our trees) sysmmu_mfc r device was set as parent of
sysmmu_mfc_l device which in turn was a parent for main MFC device (to make
runtime Power Management work). However because MFC is the only device
requiring use of multiple System MMUs above changes would allow us (unless
I'm missing something?) to use just one System MMU device per struct
exynos_iommu_client instance (making driver a lot simpler).

> +	mfc: codec@13400000 {
> +		compatible = "samsung,mfc-v5";
> +		reg = <0x13400000 0x10000>;
> +		interrupts = <0 94 0>;
> +		samsung,power-domain = <&pd_mfc>;
> +		clocks = <&clock 170>, <&clock 273>;
> +		clock-names = "sclk_mfc", "mfc";
> +		status = "ok";
> +		iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
> +	};
> +
> +	sysmmu_mfc_l: sysmmu@13620000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13620000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-mfc-l";
> +		interrupts = <5 5>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 274>;
> +		samsung,power-domain = <&pd_mfc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_mfc_r: sysmmu@13630000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13630000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-mfc-r";
> +		interrupts = <5 6>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 275>;
> +		samsung,power-domain = <&pd_mfc>;
> +		status = "ok";
> +	};
> +
> diff --git a/arch/arm/boot/dts/exynos4.dtsi b/arch/arm/boot/dts/exynos4.dtsi
> index 359694c..ba74ee8 100644
> --- a/arch/arm/boot/dts/exynos4.dtsi
> +++ b/arch/arm/boot/dts/exynos4.dtsi
> @@ -161,6 +161,7 @@
>  		interrupts = <0 94 0>;
>  		samsung,power-domain = <&pd_mfc>;
>  		status = "disabled";
> +		iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
>  	};
>  
>  	serial@13800000 {
> @@ -395,5 +396,126 @@
>  		clock-names = "sclk_fimd", "fimd";
>  		samsung,power-domain = <&pd_lcd0>;
>  		status = "disabled";
> +		iommu = <&sysmmu_fimd0>;
> +	};
> +
> +	sysmmu_mfc_l: sysmmu@13620000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13620000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-mfc-l";
> +		interrupts = <5 5>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 274>;
> +		samsung,power-domain = <&pd_mfc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_mfc_r: sysmmu@13630000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13630000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-mfc-r";
> +		interrupts = <5 6>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 275>;
> +		samsung,power-domain = <&pd_mfc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_tv: sysmmu@13E20000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13E20000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-tv";
> +		interrupts = <5 4>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 272>;
> +		samsung,power-domain = <&pd_tv>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc0: sysmmu@11A20000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x11A20000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc0";
> +		interrupts = <4 2>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 263>;
> +		samsung,power-domain = <&pd_cam>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc1: sysmmu@11A30000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x11A30000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc1";
> +		interrupts = <4 3>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 264>;
> +		samsung,power-domain = <&pd_cam>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc2: sysmmu@11A40000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x11A40000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc2";
> +		interrupts = <4 4>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 265>;
> +		samsung,power-domain = <&pd_cam>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc3: sysmmu@11A50000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x11A50000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc3";
> +		interrupts = <4 5>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 266>;
> +		samsung,power-domain = <&pd_cam>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_jpeg: sysmmu@11A60000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x11A60000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-jpeg";
> +		interrupts = <4 6>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 267>;
> +		samsung,power-domain = <&pd_cam>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_rotator: sysmmu@12A30000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x12A30000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-rotator";
> +		interrupts = <5 0>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 281>;
> +		samsung,power-domain = <&pd_lcd0>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimd0: sysmmu@11E20000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x11E20000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimd0";
> +		interrupts = <5 2>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 287>;
> +		samsung,power-domain = <&pd_lcd0>;
> +		status = "ok";
>  	};
>  };
> diff --git a/arch/arm/boot/dts/exynos4210.dtsi b/arch/arm/boot/dts/exynos4210.dtsi
> index 54710de..09b13da 100644
> --- a/arch/arm/boot/dts/exynos4210.dtsi
> +++ b/arch/arm/boot/dts/exynos4210.dtsi
> @@ -119,5 +119,30 @@
>  		reg = <0x12800000 0x1000>;
>  		interrupts = <0 89 0>;
>  		status = "disabled";
> +		iommu = <&sysmmu_g2d>;
> +	};
> +
> +	sysmmu_g2d: sysmmu@12A20000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x12A20000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-g2d";
> +		interrupts = <4 7>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 280>;
> +		samsung,power-domain = <&pd_lcd0>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimd1: sysmmu@12220000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimd1";
> +		reg = <0x12220000 0x1000>;
> +		interrupts = <5 3>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 291>;
> +		samsung,power-domain = <&pd_lcd1>;
> +		status = "ok";
>  	};
>  };
> diff --git a/arch/arm/boot/dts/exynos4x12.dtsi b/arch/arm/boot/dts/exynos4x12.dtsi
> index e3380a7..681db32 100644
> --- a/arch/arm/boot/dts/exynos4x12.dtsi
> +++ b/arch/arm/boot/dts/exynos4x12.dtsi
> @@ -79,4 +79,80 @@
>  		interrupts = <0 89 0>;
>  		status = "disabled";
>  	};
> +
> +	sysmmu_g2d: sysmmu@10A40000{
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x10A40000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-g2d";
> +		interrupts = <4 7>;
> +		clock-names = "sysmmu";
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_isp: sysmmu@12260000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x12260000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_isp";
> +		interrupts = <16 2>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 362>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_drc: sysmmu@12270000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x12270000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_drc";
> +		interrupts = <16 3>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 363>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_fd: sysmmu@122A0000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x122A0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_fd";
> +		interrupts = <16 4>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 364>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_mcuctl: sysmmu@122B0000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x122B0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_mcuctl";
> +		interrupts = <16 5>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 376>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_lite0: sysmmu@123B0000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x123B0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_lite0";
> +		interrupts = <16 0>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 366>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_lite1: sysmmu@123C0000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x123C0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_lite1";
> +		interrupts = <16 1>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 365>;
> +		status = "ok";
> +	};
>  };
> diff --git a/arch/arm/boot/dts/exynos5250.dtsi b/arch/arm/boot/dts/exynos5250.dtsi
> index fc9fb3d..130d23d 100644
> --- a/arch/arm/boot/dts/exynos5250.dtsi
> +++ b/arch/arm/boot/dts/exynos5250.dtsi
> @@ -66,6 +66,16 @@
>  		reg = <0x10044040 0x20>;
>  	};
>  
> +	pd_isp: mfc-power-domain@0x10044020 {
> +		compatible = "samsung,exynos4210-pd";
> +		reg = <0x10044020 0x20>;
> +	};
> +
> +	pd_disp1: mfc-power-domain@0x100440A0 {
> +		compatible = "samsung,exynos4210-pd";
> +		reg = <0x100440A0 0x20>;
> +	};
> +
>  	clock: clock-controller@0x10010000 {
>  		compatible = "samsung,exynos5250-clock";
>  		reg = <0x10010000 0x30000>;
> @@ -180,6 +190,7 @@
>  		reg = <0x11000000 0x10000>;
>  		interrupts = <0 96 0>;
>  		samsung,power-domain = <&pd_mfc>;
> +		iommu = <&sysmmu_mfc_l &sysmmu_mfc_l>;

Shouldn't it be:

	iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;

?

Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics

>  	};
>  
>  	rtc {
> @@ -571,6 +582,7 @@
>  		samsung,power-domain = <&pd_gsc>;
>  		clocks = <&clock 256>;
>  		clock-names = "gscl";
> +		iommu = <&sysmmu_gsc1>;
>  	};
>  
>  	gsc_1:  gsc@0x13e10000 {
> @@ -580,6 +592,7 @@
>  		samsung,power-domain = <&pd_gsc>;
>  		clocks = <&clock 257>;
>  		clock-names = "gscl";
> +		iommu = <&sysmmu_gsc1>;
>  	};
>  
>  	gsc_2:  gsc@0x13e20000 {
> @@ -589,6 +602,7 @@
>  		samsung,power-domain = <&pd_gsc>;
>  		clocks = <&clock 258>;
>  		clock-names = "gscl";
> +		iommu = <&sysmmu_gsc2>;
>  	};
>  
>  	gsc_3:  gsc@0x13e30000 {
> @@ -598,6 +612,7 @@
>  		samsung,power-domain = <&pd_gsc>;
>  		clocks = <&clock 259>;
>  		clock-names = "gscl";
> +		iommu = <&sysmmu_gsc3>;
>  	};
>  
>  	hdmi {
> @@ -614,6 +629,7 @@
>  		compatible = "samsung,exynos5-mixer";
>  		reg = <0x14450000 0x10000>;
>  		interrupts = <0 94 0>;
> +		iommu = <&sysmmu_tv>;
>  	};
>  
>  	dp-controller {
> @@ -638,5 +654,280 @@
>  		interrupts = <18 4>, <18 5>, <18 6>;
>  		clocks = <&clock 133>, <&clock 339>;
>  		clock-names = "sclk_fimd", "fimd";
> +		iommu = <&sysmmu_fimd1>;
> +	};
> +
> +	sysmmu_mfc_l: sysmmu@11210000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x11210000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-mfc_l";
> +		interrupts = <8 5>;
> +		clock-names = "sysmmu", "master";
> +		clocks = <&clock 267>, <&clock 266>;
> +		samsung,power-domain = <&pd_mfc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_mfc_r: sysmmu@11200000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x11200000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-mfc_r";
> +		interrupts = <6 2>;
> +		clock-names = "sysmmu", "master";
> +		clocks = <&clock 268>, <&clock 266>;
> +		samsung,power-domain = <&pd_mfc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_tv: sysmmu@14650000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x14650000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-tv";
> +		interrupts = <7 4>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 349>;
> +		samsung,power-domain = <&pd_disp1>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_gsc0: sysmmu@13E80000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13E80000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-gsc0";
> +		interrupts = <2 0>;
> +		clock-names = "sysmmu", "master";
> +		clocks = <&clock 262>, <&clock 256>;
> +		samsung,power-domain = <&pd_gsc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_gsc1: sysmmu@13E90000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13E90000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-gsc1";
> +		interrupts = <2 2>;
> +		clock-names = "sysmmu", "master";
> +		clocks = <&clock 263>, <&clock 257>;
> +		samsung,power-domain = <&pd_gsc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_gsc2: sysmmu@13EA0000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13EA0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-gsc2";
> +		interrupts = <2 4>;
> +		clock-names = "sysmmu", "master";
> +		clocks = <&clock 264>, <&clock 258>;
> +		samsung,power-domain = <&pd_gsc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_gsc3: sysmmu@13EB0000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13EB0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-gsc3";
> +		interrupts = <2 6>;
> +		clock-names = "sysmmu", "master";
> +		clocks = <&clock 265>, <&clock 259>;
> +		samsung,power-domain = <&pd_gsc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimd1: sysmmu@14640000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x14640000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimd1";
> +		interrupts = <3 2>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 350>;
> +		samsung,power-domain = <&pd_disp1>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_rotator: sysmmu@11D40000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x11D40000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-rotator";
> +		interrupts = <4 0>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 272>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_isp: sysmmu@13260000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13260000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_isp";
> +		interrupts = <10 6>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 361>;
> +		samsung,power-domain = <&pd_isp>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_drc: sysmmu@13270000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13270000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_drc";
> +		interrupts = <11 6>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 362>;
> +		samsung,power-domain = <&pd_isp>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_fd: sysmmu@132A0000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x132A0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_fd";
> +		interrupts = <5 0>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 363>;
> +		samsung,power-domain = <&pd_isp>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_scc: sysmmu@13280000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13280000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_scalerc";
> +		interrupts = <5 2>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 364>;
> +		samsung,power-domain = <&pd_isp>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_scp: sysmmu@13290000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13290000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_scalerp";
> +		interrupts = <3 6>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 365>;
> +		samsung,power-domain = <&pd_isp>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_mcuctl: sysmmu@132B0000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x132B0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_mcuctl";
> +		interrupts = <5 4>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 366>;
> +		samsung,power-domain = <&pd_isp>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_odc: sysmmu@132C0000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x132C0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_odc";
> +		interrupts = <11 0>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 367>;
> +		samsung,power-domain = <&pd_isp>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_dis0: sysmmu@132D0000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x132D0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_dis0";
> +		interrupts = <10 4>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 368>;
> +		samsung,power-domain = <&pd_isp>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_dis1: sysmmu@132E0000{
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x132E0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_dis1";
> +		interrupts = <9 4>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 369>;
> +		samsung,power-domain = <&pd_isp>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_3dnr: sysmmu@132F0000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x132F0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_3dnr";
> +		interrupts = <5 6>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 370>;
> +		samsung,power-domain = <&pd_isp>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_lite0: sysmmu@13C40000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13C40000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_lite0";
> +		interrupts = <3 4>;
> +		clock-names = "sysmmu", "master";
> +		clocks = <&clock 346>, <&clock 345>;
> +		samsung,power-domain = <&pd_gsc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_lite1: sysmmu@13C50000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13C50000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_lite1";
> +		interrupts = <24 1>;
> +		clock-names = "sysmmu", "master";
> +		clocks = <&clock 347>, <&clock 345>;
> +		samsung,power-domain = <&pd_gsc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_jpeg: sysmmu@11F20000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x11F20000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-jpeg";
> +		interrupts = <4 2>;
> +		clock-names = "sysmmu", "master";
> +		clocks = <&clock 273>, <&clock 270>;
> +		samsung,power-domain = <&pd_gsc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_2d: sysmmu@10A60000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x10A60000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-2d";
> +		interrupts = <24 5>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 361>;
> +		status = "ok";
>  	};
>  };


^ permalink raw reply	[flat|nested] 65+ messages in thread

* Re: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-08-02 17:14   ` Bartlomiej Zolnierkiewicz
  0 siblings, 0 replies; 65+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2013-08-02 17:14 UTC (permalink / raw)
  To: Cho KyongHo
  Cc: 'Linux Samsung SOC', 'Hyunwoong Kim',
	'Prathyush', 'Grant Grundler',
	'Keyyoung Park', 'Subash Patel',
	'Linux Kernel', 'Sachin Kamat',
	'Linux IOMMU', 'Kukjin Kim',
	'Antonios Motakis',
	kvmarm-FPEHb7Xf0XXUo1n7N8X6UoWGPAHP3yOg,
	'Linux ARM Kernel', 'Rahul Sharma'


Hi,

On Friday, July 26, 2013 08:28:19 PM Cho KyongHo wrote:
> Signed-off-by: Cho KyongHo <pullip.cho-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
> ---
>  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
>  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
>  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
>  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
>  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
>  5 files changed, 617 insertions(+), 0 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> 
> diff --git a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> new file mode 100644
> index 0000000..92f0a33
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> @@ -0,0 +1,103 @@
> +Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management Unit)
> +
> +Samsung's Exynos architecture contains System MMU that enables scattered
> +physical memory chunks visible as a contiguous region to DMA-capable peripheral
> +devices like MFC, FIMC, FIMD, GScaler, FIMC-IS and so forth.
> +
> +System MMU is a sort of IOMMU and support identical translation table format to
> +ARMv7 translation tables with minimum set of page properties including access
> +permissions, shareability and security protection. In addition, System MMU has
> +another capabilities like L2 TLB or block-fetch buffers to minimize translation
> +latency.
> +
> +A System MMU is dedicated to a single master peripheral device.  Thus, it is
> +important to specify the correct System MMU in the device node of its master
> +device. Whereas a System MMU is dedicated to a master device, the master device
> +may have more than one System MMU.
> +
> +Required properties:
> +- compatible: Should be "samsung,exynos4210-sysmmu"
> +- reg: A tuple of base address and size of System MMU registers.
> +- interrupt-parent: The phandle of the interrupt controller of System MMU
> +- interrupts: A tuple of numbers that indicates the interrupt source.
> +- clock-names: Should be "sysmmu" if the System MMU is needed to gate its clock.
> +               Please refer to the following documents:
> +	       Documentation/devicetree/bindings/clock/clock-bindings.txt
> +	       Documentation/devicetree/bindings/clock/exynos4-clock.txt
> +	       Documentation/devicetree/bindings/clock/exynos5250-clock.txt
> +	       Optional "master" if the clock to the System MMU is gated by
> +	       another gate clock other than "sysmmu". The System MMU driver
> +	       sets "master" the parent of "sysmmu".
> +	       Exynos4 SoCs, there needs no "master" clocks.
> +	       Exynos5 SoCs, some System MMUs must have "master" clocks.
> +- clocks: Required if the System MMU is needed to gate its clock.
> +	  Please refer to the documents listed above.
> +- samsung,power-domain: Required if the System MMU is needed to gate its power.
> +	  Please refer to the following document:
> +	  Documentation/devicetree/bindings/arm/exynos/power_domain.txt
> +
> +Required properties for the master peripheral devices:
> +- iommu: phandles to the System MMUs of the device
> +
> +Examples:
> +A System MMU is dedicated to a single master device.
> +	gsc_0:  gsc@0x13e00000 {
> +		compatible = "samsung,exynos5-gsc";
> +		reg = <0x13e00000 0x1000>;
> +		interrupts = <0 85 0>;
> +		samsung,power-domain = <&pd_gsc>;
> +		clocks = <&clock 256>;
> +		clock-names = "gscl";
> +		iommu = <&sysmmu_gsc1>;
> +	};
> +
> +	sysmmu_gsc0: sysmmu@13E80000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13E80000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-gsc0";
> +		interrupts = <2 0>;
> +		clock-names = "sysmmu", "master";
> +		clocks = <&clock 262>, <&clock 256>;
> +		samsung,power-domain = <&pd_gsc>;
> +		status = "ok";
> +	};
> +
> +MFC has 2 System MMUs for each port that MFC is attached. Thus it seems natural
> +to define 2 System MMUs for each port of the MFC:

Marek Szyprowski (added to cc:) has a patch fixing MFC to create separate
mfc_l and mfc_r devices (like it was in the past). Using this patch it
would be possible to bind sysmmu_mfc_l to mfc_l device and sysmmu_mfc_r to
mfc_r device. This probably also requires adding some MFC specific handling
in a device tree node and to the new master's device PM ops (in patch #10)
as previously (in our trees) sysmmu_mfc r device was set as parent of
sysmmu_mfc_l device which in turn was a parent for main MFC device (to make
runtime Power Management work). However because MFC is the only device
requiring use of multiple System MMUs above changes would allow us (unless
I'm missing something?) to use just one System MMU device per struct
exynos_iommu_client instance (making driver a lot simpler).

> +	mfc: codec@13400000 {
> +		compatible = "samsung,mfc-v5";
> +		reg = <0x13400000 0x10000>;
> +		interrupts = <0 94 0>;
> +		samsung,power-domain = <&pd_mfc>;
> +		clocks = <&clock 170>, <&clock 273>;
> +		clock-names = "sclk_mfc", "mfc";
> +		status = "ok";
> +		iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
> +	};
> +
> +	sysmmu_mfc_l: sysmmu@13620000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13620000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-mfc-l";
> +		interrupts = <5 5>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 274>;
> +		samsung,power-domain = <&pd_mfc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_mfc_r: sysmmu@13630000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13630000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-mfc-r";
> +		interrupts = <5 6>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 275>;
> +		samsung,power-domain = <&pd_mfc>;
> +		status = "ok";
> +	};
> +
> diff --git a/arch/arm/boot/dts/exynos4.dtsi b/arch/arm/boot/dts/exynos4.dtsi
> index 359694c..ba74ee8 100644
> --- a/arch/arm/boot/dts/exynos4.dtsi
> +++ b/arch/arm/boot/dts/exynos4.dtsi
> @@ -161,6 +161,7 @@
>  		interrupts = <0 94 0>;
>  		samsung,power-domain = <&pd_mfc>;
>  		status = "disabled";
> +		iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
>  	};
>  
>  	serial@13800000 {
> @@ -395,5 +396,126 @@
>  		clock-names = "sclk_fimd", "fimd";
>  		samsung,power-domain = <&pd_lcd0>;
>  		status = "disabled";
> +		iommu = <&sysmmu_fimd0>;
> +	};
> +
> +	sysmmu_mfc_l: sysmmu@13620000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13620000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-mfc-l";
> +		interrupts = <5 5>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 274>;
> +		samsung,power-domain = <&pd_mfc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_mfc_r: sysmmu@13630000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13630000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-mfc-r";
> +		interrupts = <5 6>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 275>;
> +		samsung,power-domain = <&pd_mfc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_tv: sysmmu@13E20000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13E20000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-tv";
> +		interrupts = <5 4>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 272>;
> +		samsung,power-domain = <&pd_tv>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc0: sysmmu@11A20000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x11A20000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc0";
> +		interrupts = <4 2>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 263>;
> +		samsung,power-domain = <&pd_cam>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc1: sysmmu@11A30000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x11A30000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc1";
> +		interrupts = <4 3>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 264>;
> +		samsung,power-domain = <&pd_cam>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc2: sysmmu@11A40000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x11A40000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc2";
> +		interrupts = <4 4>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 265>;
> +		samsung,power-domain = <&pd_cam>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc3: sysmmu@11A50000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x11A50000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc3";
> +		interrupts = <4 5>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 266>;
> +		samsung,power-domain = <&pd_cam>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_jpeg: sysmmu@11A60000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x11A60000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-jpeg";
> +		interrupts = <4 6>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 267>;
> +		samsung,power-domain = <&pd_cam>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_rotator: sysmmu@12A30000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x12A30000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-rotator";
> +		interrupts = <5 0>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 281>;
> +		samsung,power-domain = <&pd_lcd0>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimd0: sysmmu@11E20000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x11E20000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimd0";
> +		interrupts = <5 2>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 287>;
> +		samsung,power-domain = <&pd_lcd0>;
> +		status = "ok";
>  	};
>  };
> diff --git a/arch/arm/boot/dts/exynos4210.dtsi b/arch/arm/boot/dts/exynos4210.dtsi
> index 54710de..09b13da 100644
> --- a/arch/arm/boot/dts/exynos4210.dtsi
> +++ b/arch/arm/boot/dts/exynos4210.dtsi
> @@ -119,5 +119,30 @@
>  		reg = <0x12800000 0x1000>;
>  		interrupts = <0 89 0>;
>  		status = "disabled";
> +		iommu = <&sysmmu_g2d>;
> +	};
> +
> +	sysmmu_g2d: sysmmu@12A20000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x12A20000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-g2d";
> +		interrupts = <4 7>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 280>;
> +		samsung,power-domain = <&pd_lcd0>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimd1: sysmmu@12220000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimd1";
> +		reg = <0x12220000 0x1000>;
> +		interrupts = <5 3>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 291>;
> +		samsung,power-domain = <&pd_lcd1>;
> +		status = "ok";
>  	};
>  };
> diff --git a/arch/arm/boot/dts/exynos4x12.dtsi b/arch/arm/boot/dts/exynos4x12.dtsi
> index e3380a7..681db32 100644
> --- a/arch/arm/boot/dts/exynos4x12.dtsi
> +++ b/arch/arm/boot/dts/exynos4x12.dtsi
> @@ -79,4 +79,80 @@
>  		interrupts = <0 89 0>;
>  		status = "disabled";
>  	};
> +
> +	sysmmu_g2d: sysmmu@10A40000{
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x10A40000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-g2d";
> +		interrupts = <4 7>;
> +		clock-names = "sysmmu";
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_isp: sysmmu@12260000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x12260000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_isp";
> +		interrupts = <16 2>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 362>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_drc: sysmmu@12270000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x12270000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_drc";
> +		interrupts = <16 3>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 363>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_fd: sysmmu@122A0000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x122A0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_fd";
> +		interrupts = <16 4>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 364>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_mcuctl: sysmmu@122B0000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x122B0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_mcuctl";
> +		interrupts = <16 5>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 376>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_lite0: sysmmu@123B0000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x123B0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_lite0";
> +		interrupts = <16 0>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 366>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_lite1: sysmmu@123C0000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x123C0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_lite1";
> +		interrupts = <16 1>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 365>;
> +		status = "ok";
> +	};
>  };
> diff --git a/arch/arm/boot/dts/exynos5250.dtsi b/arch/arm/boot/dts/exynos5250.dtsi
> index fc9fb3d..130d23d 100644
> --- a/arch/arm/boot/dts/exynos5250.dtsi
> +++ b/arch/arm/boot/dts/exynos5250.dtsi
> @@ -66,6 +66,16 @@
>  		reg = <0x10044040 0x20>;
>  	};
>  
> +	pd_isp: mfc-power-domain@0x10044020 {
> +		compatible = "samsung,exynos4210-pd";
> +		reg = <0x10044020 0x20>;
> +	};
> +
> +	pd_disp1: mfc-power-domain@0x100440A0 {
> +		compatible = "samsung,exynos4210-pd";
> +		reg = <0x100440A0 0x20>;
> +	};
> +
>  	clock: clock-controller@0x10010000 {
>  		compatible = "samsung,exynos5250-clock";
>  		reg = <0x10010000 0x30000>;
> @@ -180,6 +190,7 @@
>  		reg = <0x11000000 0x10000>;
>  		interrupts = <0 96 0>;
>  		samsung,power-domain = <&pd_mfc>;
> +		iommu = <&sysmmu_mfc_l &sysmmu_mfc_l>;

Shouldn't it be:

	iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;

?

Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics

>  	};
>  
>  	rtc {
> @@ -571,6 +582,7 @@
>  		samsung,power-domain = <&pd_gsc>;
>  		clocks = <&clock 256>;
>  		clock-names = "gscl";
> +		iommu = <&sysmmu_gsc1>;
>  	};
>  
>  	gsc_1:  gsc@0x13e10000 {
> @@ -580,6 +592,7 @@
>  		samsung,power-domain = <&pd_gsc>;
>  		clocks = <&clock 257>;
>  		clock-names = "gscl";
> +		iommu = <&sysmmu_gsc1>;
>  	};
>  
>  	gsc_2:  gsc@0x13e20000 {
> @@ -589,6 +602,7 @@
>  		samsung,power-domain = <&pd_gsc>;
>  		clocks = <&clock 258>;
>  		clock-names = "gscl";
> +		iommu = <&sysmmu_gsc2>;
>  	};
>  
>  	gsc_3:  gsc@0x13e30000 {
> @@ -598,6 +612,7 @@
>  		samsung,power-domain = <&pd_gsc>;
>  		clocks = <&clock 259>;
>  		clock-names = "gscl";
> +		iommu = <&sysmmu_gsc3>;
>  	};
>  
>  	hdmi {
> @@ -614,6 +629,7 @@
>  		compatible = "samsung,exynos5-mixer";
>  		reg = <0x14450000 0x10000>;
>  		interrupts = <0 94 0>;
> +		iommu = <&sysmmu_tv>;
>  	};
>  
>  	dp-controller {
> @@ -638,5 +654,280 @@
>  		interrupts = <18 4>, <18 5>, <18 6>;
>  		clocks = <&clock 133>, <&clock 339>;
>  		clock-names = "sclk_fimd", "fimd";
> +		iommu = <&sysmmu_fimd1>;
> +	};
> +
> +	sysmmu_mfc_l: sysmmu@11210000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x11210000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-mfc_l";
> +		interrupts = <8 5>;
> +		clock-names = "sysmmu", "master";
> +		clocks = <&clock 267>, <&clock 266>;
> +		samsung,power-domain = <&pd_mfc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_mfc_r: sysmmu@11200000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x11200000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-mfc_r";
> +		interrupts = <6 2>;
> +		clock-names = "sysmmu", "master";
> +		clocks = <&clock 268>, <&clock 266>;
> +		samsung,power-domain = <&pd_mfc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_tv: sysmmu@14650000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x14650000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-tv";
> +		interrupts = <7 4>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 349>;
> +		samsung,power-domain = <&pd_disp1>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_gsc0: sysmmu@13E80000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13E80000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-gsc0";
> +		interrupts = <2 0>;
> +		clock-names = "sysmmu", "master";
> +		clocks = <&clock 262>, <&clock 256>;
> +		samsung,power-domain = <&pd_gsc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_gsc1: sysmmu@13E90000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13E90000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-gsc1";
> +		interrupts = <2 2>;
> +		clock-names = "sysmmu", "master";
> +		clocks = <&clock 263>, <&clock 257>;
> +		samsung,power-domain = <&pd_gsc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_gsc2: sysmmu@13EA0000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13EA0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-gsc2";
> +		interrupts = <2 4>;
> +		clock-names = "sysmmu", "master";
> +		clocks = <&clock 264>, <&clock 258>;
> +		samsung,power-domain = <&pd_gsc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_gsc3: sysmmu@13EB0000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13EB0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-gsc3";
> +		interrupts = <2 6>;
> +		clock-names = "sysmmu", "master";
> +		clocks = <&clock 265>, <&clock 259>;
> +		samsung,power-domain = <&pd_gsc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimd1: sysmmu@14640000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x14640000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimd1";
> +		interrupts = <3 2>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 350>;
> +		samsung,power-domain = <&pd_disp1>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_rotator: sysmmu@11D40000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x11D40000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-rotator";
> +		interrupts = <4 0>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 272>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_isp: sysmmu@13260000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13260000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_isp";
> +		interrupts = <10 6>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 361>;
> +		samsung,power-domain = <&pd_isp>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_drc: sysmmu@13270000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13270000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_drc";
> +		interrupts = <11 6>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 362>;
> +		samsung,power-domain = <&pd_isp>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_fd: sysmmu@132A0000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x132A0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_fd";
> +		interrupts = <5 0>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 363>;
> +		samsung,power-domain = <&pd_isp>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_scc: sysmmu@13280000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13280000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_scalerc";
> +		interrupts = <5 2>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 364>;
> +		samsung,power-domain = <&pd_isp>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_scp: sysmmu@13290000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13290000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_scalerp";
> +		interrupts = <3 6>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 365>;
> +		samsung,power-domain = <&pd_isp>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_mcuctl: sysmmu@132B0000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x132B0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_mcuctl";
> +		interrupts = <5 4>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 366>;
> +		samsung,power-domain = <&pd_isp>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_odc: sysmmu@132C0000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x132C0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_odc";
> +		interrupts = <11 0>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 367>;
> +		samsung,power-domain = <&pd_isp>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_dis0: sysmmu@132D0000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x132D0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_dis0";
> +		interrupts = <10 4>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 368>;
> +		samsung,power-domain = <&pd_isp>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_dis1: sysmmu@132E0000{
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x132E0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_dis1";
> +		interrupts = <9 4>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 369>;
> +		samsung,power-domain = <&pd_isp>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_3dnr: sysmmu@132F0000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x132F0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_3dnr";
> +		interrupts = <5 6>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 370>;
> +		samsung,power-domain = <&pd_isp>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_lite0: sysmmu@13C40000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13C40000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_lite0";
> +		interrupts = <3 4>;
> +		clock-names = "sysmmu", "master";
> +		clocks = <&clock 346>, <&clock 345>;
> +		samsung,power-domain = <&pd_gsc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_lite1: sysmmu@13C50000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13C50000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_lite1";
> +		interrupts = <24 1>;
> +		clock-names = "sysmmu", "master";
> +		clocks = <&clock 347>, <&clock 345>;
> +		samsung,power-domain = <&pd_gsc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_jpeg: sysmmu@11F20000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x11F20000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-jpeg";
> +		interrupts = <4 2>;
> +		clock-names = "sysmmu", "master";
> +		clocks = <&clock 273>, <&clock 270>;
> +		samsung,power-domain = <&pd_gsc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_2d: sysmmu@10A60000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x10A60000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-2d";
> +		interrupts = <24 5>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 361>;
> +		status = "ok";
>  	};
>  };

^ permalink raw reply	[flat|nested] 65+ messages in thread

* [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-08-02 17:14   ` Bartlomiej Zolnierkiewicz
  0 siblings, 0 replies; 65+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2013-08-02 17:14 UTC (permalink / raw)
  To: linux-arm-kernel


Hi,

On Friday, July 26, 2013 08:28:19 PM Cho KyongHo wrote:
> Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
> ---
>  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
>  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
>  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
>  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
>  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
>  5 files changed, 617 insertions(+), 0 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> 
> diff --git a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> new file mode 100644
> index 0000000..92f0a33
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> @@ -0,0 +1,103 @@
> +Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management Unit)
> +
> +Samsung's Exynos architecture contains System MMU that enables scattered
> +physical memory chunks visible as a contiguous region to DMA-capable peripheral
> +devices like MFC, FIMC, FIMD, GScaler, FIMC-IS and so forth.
> +
> +System MMU is a sort of IOMMU and support identical translation table format to
> +ARMv7 translation tables with minimum set of page properties including access
> +permissions, shareability and security protection. In addition, System MMU has
> +another capabilities like L2 TLB or block-fetch buffers to minimize translation
> +latency.
> +
> +A System MMU is dedicated to a single master peripheral device.  Thus, it is
> +important to specify the correct System MMU in the device node of its master
> +device. Whereas a System MMU is dedicated to a master device, the master device
> +may have more than one System MMU.
> +
> +Required properties:
> +- compatible: Should be "samsung,exynos4210-sysmmu"
> +- reg: A tuple of base address and size of System MMU registers.
> +- interrupt-parent: The phandle of the interrupt controller of System MMU
> +- interrupts: A tuple of numbers that indicates the interrupt source.
> +- clock-names: Should be "sysmmu" if the System MMU is needed to gate its clock.
> +               Please refer to the following documents:
> +	       Documentation/devicetree/bindings/clock/clock-bindings.txt
> +	       Documentation/devicetree/bindings/clock/exynos4-clock.txt
> +	       Documentation/devicetree/bindings/clock/exynos5250-clock.txt
> +	       Optional "master" if the clock to the System MMU is gated by
> +	       another gate clock other than "sysmmu". The System MMU driver
> +	       sets "master" the parent of "sysmmu".
> +	       Exynos4 SoCs, there needs no "master" clocks.
> +	       Exynos5 SoCs, some System MMUs must have "master" clocks.
> +- clocks: Required if the System MMU is needed to gate its clock.
> +	  Please refer to the documents listed above.
> +- samsung,power-domain: Required if the System MMU is needed to gate its power.
> +	  Please refer to the following document:
> +	  Documentation/devicetree/bindings/arm/exynos/power_domain.txt
> +
> +Required properties for the master peripheral devices:
> +- iommu: phandles to the System MMUs of the device
> +
> +Examples:
> +A System MMU is dedicated to a single master device.
> +	gsc_0:  gsc at 0x13e00000 {
> +		compatible = "samsung,exynos5-gsc";
> +		reg = <0x13e00000 0x1000>;
> +		interrupts = <0 85 0>;
> +		samsung,power-domain = <&pd_gsc>;
> +		clocks = <&clock 256>;
> +		clock-names = "gscl";
> +		iommu = <&sysmmu_gsc1>;
> +	};
> +
> +	sysmmu_gsc0: sysmmu at 13E80000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13E80000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-gsc0";
> +		interrupts = <2 0>;
> +		clock-names = "sysmmu", "master";
> +		clocks = <&clock 262>, <&clock 256>;
> +		samsung,power-domain = <&pd_gsc>;
> +		status = "ok";
> +	};
> +
> +MFC has 2 System MMUs for each port that MFC is attached. Thus it seems natural
> +to define 2 System MMUs for each port of the MFC:

Marek Szyprowski (added to cc:) has a patch fixing MFC to create separate
mfc_l and mfc_r devices (like it was in the past). Using this patch it
would be possible to bind sysmmu_mfc_l to mfc_l device and sysmmu_mfc_r to
mfc_r device. This probably also requires adding some MFC specific handling
in a device tree node and to the new master's device PM ops (in patch #10)
as previously (in our trees) sysmmu_mfc r device was set as parent of
sysmmu_mfc_l device which in turn was a parent for main MFC device (to make
runtime Power Management work). However because MFC is the only device
requiring use of multiple System MMUs above changes would allow us (unless
I'm missing something?) to use just one System MMU device per struct
exynos_iommu_client instance (making driver a lot simpler).

> +	mfc: codec at 13400000 {
> +		compatible = "samsung,mfc-v5";
> +		reg = <0x13400000 0x10000>;
> +		interrupts = <0 94 0>;
> +		samsung,power-domain = <&pd_mfc>;
> +		clocks = <&clock 170>, <&clock 273>;
> +		clock-names = "sclk_mfc", "mfc";
> +		status = "ok";
> +		iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
> +	};
> +
> +	sysmmu_mfc_l: sysmmu at 13620000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13620000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-mfc-l";
> +		interrupts = <5 5>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 274>;
> +		samsung,power-domain = <&pd_mfc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_mfc_r: sysmmu at 13630000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13630000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-mfc-r";
> +		interrupts = <5 6>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 275>;
> +		samsung,power-domain = <&pd_mfc>;
> +		status = "ok";
> +	};
> +
> diff --git a/arch/arm/boot/dts/exynos4.dtsi b/arch/arm/boot/dts/exynos4.dtsi
> index 359694c..ba74ee8 100644
> --- a/arch/arm/boot/dts/exynos4.dtsi
> +++ b/arch/arm/boot/dts/exynos4.dtsi
> @@ -161,6 +161,7 @@
>  		interrupts = <0 94 0>;
>  		samsung,power-domain = <&pd_mfc>;
>  		status = "disabled";
> +		iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
>  	};
>  
>  	serial at 13800000 {
> @@ -395,5 +396,126 @@
>  		clock-names = "sclk_fimd", "fimd";
>  		samsung,power-domain = <&pd_lcd0>;
>  		status = "disabled";
> +		iommu = <&sysmmu_fimd0>;
> +	};
> +
> +	sysmmu_mfc_l: sysmmu at 13620000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13620000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-mfc-l";
> +		interrupts = <5 5>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 274>;
> +		samsung,power-domain = <&pd_mfc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_mfc_r: sysmmu at 13630000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13630000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-mfc-r";
> +		interrupts = <5 6>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 275>;
> +		samsung,power-domain = <&pd_mfc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_tv: sysmmu at 13E20000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13E20000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-tv";
> +		interrupts = <5 4>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 272>;
> +		samsung,power-domain = <&pd_tv>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc0: sysmmu at 11A20000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x11A20000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc0";
> +		interrupts = <4 2>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 263>;
> +		samsung,power-domain = <&pd_cam>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc1: sysmmu at 11A30000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x11A30000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc1";
> +		interrupts = <4 3>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 264>;
> +		samsung,power-domain = <&pd_cam>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc2: sysmmu at 11A40000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x11A40000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc2";
> +		interrupts = <4 4>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 265>;
> +		samsung,power-domain = <&pd_cam>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc3: sysmmu at 11A50000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x11A50000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc3";
> +		interrupts = <4 5>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 266>;
> +		samsung,power-domain = <&pd_cam>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_jpeg: sysmmu at 11A60000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x11A60000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-jpeg";
> +		interrupts = <4 6>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 267>;
> +		samsung,power-domain = <&pd_cam>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_rotator: sysmmu at 12A30000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x12A30000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-rotator";
> +		interrupts = <5 0>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 281>;
> +		samsung,power-domain = <&pd_lcd0>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimd0: sysmmu at 11E20000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x11E20000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimd0";
> +		interrupts = <5 2>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 287>;
> +		samsung,power-domain = <&pd_lcd0>;
> +		status = "ok";
>  	};
>  };
> diff --git a/arch/arm/boot/dts/exynos4210.dtsi b/arch/arm/boot/dts/exynos4210.dtsi
> index 54710de..09b13da 100644
> --- a/arch/arm/boot/dts/exynos4210.dtsi
> +++ b/arch/arm/boot/dts/exynos4210.dtsi
> @@ -119,5 +119,30 @@
>  		reg = <0x12800000 0x1000>;
>  		interrupts = <0 89 0>;
>  		status = "disabled";
> +		iommu = <&sysmmu_g2d>;
> +	};
> +
> +	sysmmu_g2d: sysmmu at 12A20000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x12A20000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-g2d";
> +		interrupts = <4 7>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 280>;
> +		samsung,power-domain = <&pd_lcd0>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimd1: sysmmu at 12220000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimd1";
> +		reg = <0x12220000 0x1000>;
> +		interrupts = <5 3>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 291>;
> +		samsung,power-domain = <&pd_lcd1>;
> +		status = "ok";
>  	};
>  };
> diff --git a/arch/arm/boot/dts/exynos4x12.dtsi b/arch/arm/boot/dts/exynos4x12.dtsi
> index e3380a7..681db32 100644
> --- a/arch/arm/boot/dts/exynos4x12.dtsi
> +++ b/arch/arm/boot/dts/exynos4x12.dtsi
> @@ -79,4 +79,80 @@
>  		interrupts = <0 89 0>;
>  		status = "disabled";
>  	};
> +
> +	sysmmu_g2d: sysmmu at 10A40000{
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x10A40000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-g2d";
> +		interrupts = <4 7>;
> +		clock-names = "sysmmu";
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_isp: sysmmu at 12260000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x12260000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_isp";
> +		interrupts = <16 2>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 362>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_drc: sysmmu at 12270000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x12270000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_drc";
> +		interrupts = <16 3>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 363>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_fd: sysmmu at 122A0000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x122A0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_fd";
> +		interrupts = <16 4>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 364>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_mcuctl: sysmmu at 122B0000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x122B0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_mcuctl";
> +		interrupts = <16 5>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 376>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_lite0: sysmmu at 123B0000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x123B0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_lite0";
> +		interrupts = <16 0>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 366>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_lite1: sysmmu at 123C0000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x123C0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_lite1";
> +		interrupts = <16 1>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 365>;
> +		status = "ok";
> +	};
>  };
> diff --git a/arch/arm/boot/dts/exynos5250.dtsi b/arch/arm/boot/dts/exynos5250.dtsi
> index fc9fb3d..130d23d 100644
> --- a/arch/arm/boot/dts/exynos5250.dtsi
> +++ b/arch/arm/boot/dts/exynos5250.dtsi
> @@ -66,6 +66,16 @@
>  		reg = <0x10044040 0x20>;
>  	};
>  
> +	pd_isp: mfc-power-domain at 0x10044020 {
> +		compatible = "samsung,exynos4210-pd";
> +		reg = <0x10044020 0x20>;
> +	};
> +
> +	pd_disp1: mfc-power-domain at 0x100440A0 {
> +		compatible = "samsung,exynos4210-pd";
> +		reg = <0x100440A0 0x20>;
> +	};
> +
>  	clock: clock-controller at 0x10010000 {
>  		compatible = "samsung,exynos5250-clock";
>  		reg = <0x10010000 0x30000>;
> @@ -180,6 +190,7 @@
>  		reg = <0x11000000 0x10000>;
>  		interrupts = <0 96 0>;
>  		samsung,power-domain = <&pd_mfc>;
> +		iommu = <&sysmmu_mfc_l &sysmmu_mfc_l>;

Shouldn't it be:

	iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;

?

Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics

>  	};
>  
>  	rtc {
> @@ -571,6 +582,7 @@
>  		samsung,power-domain = <&pd_gsc>;
>  		clocks = <&clock 256>;
>  		clock-names = "gscl";
> +		iommu = <&sysmmu_gsc1>;
>  	};
>  
>  	gsc_1:  gsc at 0x13e10000 {
> @@ -580,6 +592,7 @@
>  		samsung,power-domain = <&pd_gsc>;
>  		clocks = <&clock 257>;
>  		clock-names = "gscl";
> +		iommu = <&sysmmu_gsc1>;
>  	};
>  
>  	gsc_2:  gsc at 0x13e20000 {
> @@ -589,6 +602,7 @@
>  		samsung,power-domain = <&pd_gsc>;
>  		clocks = <&clock 258>;
>  		clock-names = "gscl";
> +		iommu = <&sysmmu_gsc2>;
>  	};
>  
>  	gsc_3:  gsc at 0x13e30000 {
> @@ -598,6 +612,7 @@
>  		samsung,power-domain = <&pd_gsc>;
>  		clocks = <&clock 259>;
>  		clock-names = "gscl";
> +		iommu = <&sysmmu_gsc3>;
>  	};
>  
>  	hdmi {
> @@ -614,6 +629,7 @@
>  		compatible = "samsung,exynos5-mixer";
>  		reg = <0x14450000 0x10000>;
>  		interrupts = <0 94 0>;
> +		iommu = <&sysmmu_tv>;
>  	};
>  
>  	dp-controller {
> @@ -638,5 +654,280 @@
>  		interrupts = <18 4>, <18 5>, <18 6>;
>  		clocks = <&clock 133>, <&clock 339>;
>  		clock-names = "sclk_fimd", "fimd";
> +		iommu = <&sysmmu_fimd1>;
> +	};
> +
> +	sysmmu_mfc_l: sysmmu at 11210000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x11210000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-mfc_l";
> +		interrupts = <8 5>;
> +		clock-names = "sysmmu", "master";
> +		clocks = <&clock 267>, <&clock 266>;
> +		samsung,power-domain = <&pd_mfc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_mfc_r: sysmmu at 11200000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x11200000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-mfc_r";
> +		interrupts = <6 2>;
> +		clock-names = "sysmmu", "master";
> +		clocks = <&clock 268>, <&clock 266>;
> +		samsung,power-domain = <&pd_mfc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_tv: sysmmu at 14650000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x14650000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-tv";
> +		interrupts = <7 4>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 349>;
> +		samsung,power-domain = <&pd_disp1>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_gsc0: sysmmu at 13E80000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13E80000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-gsc0";
> +		interrupts = <2 0>;
> +		clock-names = "sysmmu", "master";
> +		clocks = <&clock 262>, <&clock 256>;
> +		samsung,power-domain = <&pd_gsc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_gsc1: sysmmu at 13E90000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13E90000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-gsc1";
> +		interrupts = <2 2>;
> +		clock-names = "sysmmu", "master";
> +		clocks = <&clock 263>, <&clock 257>;
> +		samsung,power-domain = <&pd_gsc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_gsc2: sysmmu at 13EA0000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13EA0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-gsc2";
> +		interrupts = <2 4>;
> +		clock-names = "sysmmu", "master";
> +		clocks = <&clock 264>, <&clock 258>;
> +		samsung,power-domain = <&pd_gsc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_gsc3: sysmmu at 13EB0000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13EB0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-gsc3";
> +		interrupts = <2 6>;
> +		clock-names = "sysmmu", "master";
> +		clocks = <&clock 265>, <&clock 259>;
> +		samsung,power-domain = <&pd_gsc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimd1: sysmmu at 14640000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x14640000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimd1";
> +		interrupts = <3 2>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 350>;
> +		samsung,power-domain = <&pd_disp1>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_rotator: sysmmu at 11D40000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x11D40000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-rotator";
> +		interrupts = <4 0>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 272>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_isp: sysmmu at 13260000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13260000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_isp";
> +		interrupts = <10 6>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 361>;
> +		samsung,power-domain = <&pd_isp>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_drc: sysmmu at 13270000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13270000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_drc";
> +		interrupts = <11 6>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 362>;
> +		samsung,power-domain = <&pd_isp>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_fd: sysmmu at 132A0000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x132A0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_fd";
> +		interrupts = <5 0>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 363>;
> +		samsung,power-domain = <&pd_isp>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_scc: sysmmu at 13280000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13280000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_scalerc";
> +		interrupts = <5 2>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 364>;
> +		samsung,power-domain = <&pd_isp>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_scp: sysmmu at 13290000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13290000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_scalerp";
> +		interrupts = <3 6>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 365>;
> +		samsung,power-domain = <&pd_isp>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_mcuctl: sysmmu at 132B0000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x132B0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_mcuctl";
> +		interrupts = <5 4>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 366>;
> +		samsung,power-domain = <&pd_isp>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_odc: sysmmu at 132C0000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x132C0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_odc";
> +		interrupts = <11 0>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 367>;
> +		samsung,power-domain = <&pd_isp>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_dis0: sysmmu at 132D0000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x132D0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_dis0";
> +		interrupts = <10 4>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 368>;
> +		samsung,power-domain = <&pd_isp>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_dis1: sysmmu at 132E0000{
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x132E0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_dis1";
> +		interrupts = <9 4>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 369>;
> +		samsung,power-domain = <&pd_isp>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_3dnr: sysmmu at 132F0000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x132F0000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_3dnr";
> +		interrupts = <5 6>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 370>;
> +		samsung,power-domain = <&pd_isp>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_lite0: sysmmu at 13C40000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13C40000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_lite0";
> +		interrupts = <3 4>;
> +		clock-names = "sysmmu", "master";
> +		clocks = <&clock 346>, <&clock 345>;
> +		samsung,power-domain = <&pd_gsc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_lite1: sysmmu at 13C50000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x13C50000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-fimc_lite1";
> +		interrupts = <24 1>;
> +		clock-names = "sysmmu", "master";
> +		clocks = <&clock 347>, <&clock 345>;
> +		samsung,power-domain = <&pd_gsc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_jpeg: sysmmu at 11F20000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x11F20000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-jpeg";
> +		interrupts = <4 2>;
> +		clock-names = "sysmmu", "master";
> +		clocks = <&clock 273>, <&clock 270>;
> +		samsung,power-domain = <&pd_gsc>;
> +		status = "ok";
> +	};
> +
> +	sysmmu_fimc_2d: sysmmu at 10A60000 {
> +		compatible = "samsung,exynos4210-sysmmu";
> +		reg = <0x10A60000 0x1000>;
> +		interrupt-parent = <&combiner>;
> +		interrupt-names = "sysmmu-2d";
> +		interrupts = <24 5>;
> +		clock-names = "sysmmu";
> +		clocks = <&clock 361>;
> +		status = "ok";
>  	};
>  };

^ permalink raw reply	[flat|nested] 65+ messages in thread

* RE: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
  2013-08-02 17:14   ` Bartlomiej Zolnierkiewicz
@ 2013-08-05 11:16     ` Cho KyongHo
  -1 siblings, 0 replies; 65+ messages in thread
From: Cho KyongHo @ 2013-08-05 11:16 UTC (permalink / raw)
  To: 'Bartlomiej Zolnierkiewicz'
  Cc: 'Linux ARM Kernel', 'Linux IOMMU',
	'Linux Kernel', 'Linux Samsung SOC',
	'Hyunwoong Kim', 'Joerg Roedel',
	'Kukjin Kim', 'Prathyush', 'Rahul Sharma',
	'Subash Patel', 'Keyyoung Park',
	'Grant Grundler', 'Antonios Motakis',
	kvmarm, 'Sachin Kamat',
	m.szyprowski

> -----Original Message-----
> From: Bartlomiej Zolnierkiewicz [mailto:b.zolnierkie@samsung.com]
> Sent: Saturday, August 03, 2013 2:14 AM
> 
> Hi,
> 
> On Friday, July 26, 2013 08:28:19 PM Cho KyongHo wrote:
> > Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
> > ---
> >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
> >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
> >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
> >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
> >  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
> >  5 files changed, 617 insertions(+), 0 deletions(-)
> >  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> >
> > diff --git a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > new file mode 100644
> > index 0000000..92f0a33
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > @@ -0,0 +1,103 @@
> > +Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management Unit)
> > +
> > +Samsung's Exynos architecture contains System MMU that enables scattered
> > +physical memory chunks visible as a contiguous region to DMA-capable peripheral
> > +devices like MFC, FIMC, FIMD, GScaler, FIMC-IS and so forth.
> > +
> > +System MMU is a sort of IOMMU and support identical translation table format to
> > +ARMv7 translation tables with minimum set of page properties including access
> > +permissions, shareability and security protection. In addition, System MMU has
> > +another capabilities like L2 TLB or block-fetch buffers to minimize translation
> > +latency.
> > +
> > +A System MMU is dedicated to a single master peripheral device.  Thus, it is
> > +important to specify the correct System MMU in the device node of its master
> > +device. Whereas a System MMU is dedicated to a master device, the master device
> > +may have more than one System MMU.
> > +
> > +Required properties:
> > +- compatible: Should be "samsung,exynos4210-sysmmu"
> > +- reg: A tuple of base address and size of System MMU registers.
> > +- interrupt-parent: The phandle of the interrupt controller of System MMU
> > +- interrupts: A tuple of numbers that indicates the interrupt source.
> > +- clock-names: Should be "sysmmu" if the System MMU is needed to gate its clock.
> > +               Please refer to the following documents:
> > +	       Documentation/devicetree/bindings/clock/clock-bindings.txt
> > +	       Documentation/devicetree/bindings/clock/exynos4-clock.txt
> > +	       Documentation/devicetree/bindings/clock/exynos5250-clock.txt
> > +	       Optional "master" if the clock to the System MMU is gated by
> > +	       another gate clock other than "sysmmu". The System MMU driver
> > +	       sets "master" the parent of "sysmmu".
> > +	       Exynos4 SoCs, there needs no "master" clocks.
> > +	       Exynos5 SoCs, some System MMUs must have "master" clocks.
> > +- clocks: Required if the System MMU is needed to gate its clock.
> > +	  Please refer to the documents listed above.
> > +- samsung,power-domain: Required if the System MMU is needed to gate its power.
> > +	  Please refer to the following document:
> > +	  Documentation/devicetree/bindings/arm/exynos/power_domain.txt
> > +
> > +Required properties for the master peripheral devices:
> > +- iommu: phandles to the System MMUs of the device
> > +
> > +Examples:
> > +A System MMU is dedicated to a single master device.
> > +	gsc_0:  gsc@0x13e00000 {
> > +		compatible = "samsung,exynos5-gsc";
> > +		reg = <0x13e00000 0x1000>;
> > +		interrupts = <0 85 0>;
> > +		samsung,power-domain = <&pd_gsc>;
> > +		clocks = <&clock 256>;
> > +		clock-names = "gscl";
> > +		iommu = <&sysmmu_gsc1>;
> > +	};
> > +
> > +	sysmmu_gsc0: sysmmu@13E80000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x13E80000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-gsc0";
> > +		interrupts = <2 0>;
> > +		clock-names = "sysmmu", "master";
> > +		clocks = <&clock 262>, <&clock 256>;
> > +		samsung,power-domain = <&pd_gsc>;
> > +		status = "ok";
> > +	};
> > +
> > +MFC has 2 System MMUs for each port that MFC is attached. Thus it seems natural
> > +to define 2 System MMUs for each port of the MFC:
> 
> Marek Szyprowski (added to cc:) has a patch fixing MFC to create separate
> mfc_l and mfc_r devices (like it was in the past). Using this patch it
> would be possible to bind sysmmu_mfc_l to mfc_l device and sysmmu_mfc_r to
> mfc_r device. This probably also requires adding some MFC specific handling
> in a device tree node and to the new master's device PM ops (in patch #10)
> as previously (in our trees) sysmmu_mfc r device was set as parent of
> sysmmu_mfc_l device which in turn was a parent for main MFC device (to make
> runtime Power Management work). However because MFC is the only device
> requiring use of multiple System MMUs above changes would allow us (unless
> I'm missing something?) to use just one System MMU device per struct
> exynos_iommu_client instance (making driver a lot simpler).
> 

Does it mean that we can make the exynos-iommu driver simpler
with Marek Szyprowski's patch?
It is welcome but I don't think it covers all topologies of System MMU and
master H/W. Those are getting more complex.

> > +	mfc: codec@13400000 {
> > +		compatible = "samsung,mfc-v5";
> > +		reg = <0x13400000 0x10000>;
> > +		interrupts = <0 94 0>;
> > +		samsung,power-domain = <&pd_mfc>;
> > +		clocks = <&clock 170>, <&clock 273>;
> > +		clock-names = "sclk_mfc", "mfc";
> > +		status = "ok";
> > +		iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
> > +	};
> > +
> > +	sysmmu_mfc_l: sysmmu@13620000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x13620000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-mfc-l";
> > +		interrupts = <5 5>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 274>;
> > +		samsung,power-domain = <&pd_mfc>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_mfc_r: sysmmu@13630000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x13630000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-mfc-r";
> > +		interrupts = <5 6>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 275>;
> > +		samsung,power-domain = <&pd_mfc>;
> > +		status = "ok";
> > +	};
> > +
> > diff --git a/arch/arm/boot/dts/exynos4.dtsi b/arch/arm/boot/dts/exynos4.dtsi
> > index 359694c..ba74ee8 100644
> > --- a/arch/arm/boot/dts/exynos4.dtsi
> > +++ b/arch/arm/boot/dts/exynos4.dtsi
> > @@ -161,6 +161,7 @@
> >  		interrupts = <0 94 0>;
> >  		samsung,power-domain = <&pd_mfc>;
> >  		status = "disabled";
> > +		iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
> >  	};
> >
> >  	serial@13800000 {
> > @@ -395,5 +396,126 @@
> >  		clock-names = "sclk_fimd", "fimd";
> >  		samsung,power-domain = <&pd_lcd0>;
> >  		status = "disabled";
> > +		iommu = <&sysmmu_fimd0>;
> > +	};
> > +
> > +	sysmmu_mfc_l: sysmmu@13620000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x13620000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-mfc-l";
> > +		interrupts = <5 5>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 274>;
> > +		samsung,power-domain = <&pd_mfc>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_mfc_r: sysmmu@13630000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x13630000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-mfc-r";
> > +		interrupts = <5 6>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 275>;
> > +		samsung,power-domain = <&pd_mfc>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_tv: sysmmu@13E20000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x13E20000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-tv";
> > +		interrupts = <5 4>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 272>;
> > +		samsung,power-domain = <&pd_tv>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc0: sysmmu@11A20000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x11A20000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc0";
> > +		interrupts = <4 2>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 263>;
> > +		samsung,power-domain = <&pd_cam>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc1: sysmmu@11A30000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x11A30000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc1";
> > +		interrupts = <4 3>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 264>;
> > +		samsung,power-domain = <&pd_cam>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc2: sysmmu@11A40000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x11A40000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc2";
> > +		interrupts = <4 4>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 265>;
> > +		samsung,power-domain = <&pd_cam>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc3: sysmmu@11A50000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x11A50000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc3";
> > +		interrupts = <4 5>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 266>;
> > +		samsung,power-domain = <&pd_cam>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_jpeg: sysmmu@11A60000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x11A60000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-jpeg";
> > +		interrupts = <4 6>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 267>;
> > +		samsung,power-domain = <&pd_cam>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_rotator: sysmmu@12A30000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x12A30000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-rotator";
> > +		interrupts = <5 0>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 281>;
> > +		samsung,power-domain = <&pd_lcd0>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimd0: sysmmu@11E20000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x11E20000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimd0";
> > +		interrupts = <5 2>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 287>;
> > +		samsung,power-domain = <&pd_lcd0>;
> > +		status = "ok";
> >  	};
> >  };
> > diff --git a/arch/arm/boot/dts/exynos4210.dtsi b/arch/arm/boot/dts/exynos4210.dtsi
> > index 54710de..09b13da 100644
> > --- a/arch/arm/boot/dts/exynos4210.dtsi
> > +++ b/arch/arm/boot/dts/exynos4210.dtsi
> > @@ -119,5 +119,30 @@
> >  		reg = <0x12800000 0x1000>;
> >  		interrupts = <0 89 0>;
> >  		status = "disabled";
> > +		iommu = <&sysmmu_g2d>;
> > +	};
> > +
> > +	sysmmu_g2d: sysmmu@12A20000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x12A20000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-g2d";
> > +		interrupts = <4 7>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 280>;
> > +		samsung,power-domain = <&pd_lcd0>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimd1: sysmmu@12220000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimd1";
> > +		reg = <0x12220000 0x1000>;
> > +		interrupts = <5 3>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 291>;
> > +		samsung,power-domain = <&pd_lcd1>;
> > +		status = "ok";
> >  	};
> >  };
> > diff --git a/arch/arm/boot/dts/exynos4x12.dtsi b/arch/arm/boot/dts/exynos4x12.dtsi
> > index e3380a7..681db32 100644
> > --- a/arch/arm/boot/dts/exynos4x12.dtsi
> > +++ b/arch/arm/boot/dts/exynos4x12.dtsi
> > @@ -79,4 +79,80 @@
> >  		interrupts = <0 89 0>;
> >  		status = "disabled";
> >  	};
> > +
> > +	sysmmu_g2d: sysmmu@10A40000{
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x10A40000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-g2d";
> > +		interrupts = <4 7>;
> > +		clock-names = "sysmmu";
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_isp: sysmmu@12260000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x12260000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_isp";
> > +		interrupts = <16 2>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 362>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_drc: sysmmu@12270000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x12270000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_drc";
> > +		interrupts = <16 3>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 363>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_fd: sysmmu@122A0000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x122A0000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_fd";
> > +		interrupts = <16 4>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 364>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_mcuctl: sysmmu@122B0000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x122B0000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_mcuctl";
> > +		interrupts = <16 5>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 376>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_lite0: sysmmu@123B0000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x123B0000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_lite0";
> > +		interrupts = <16 0>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 366>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_lite1: sysmmu@123C0000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x123C0000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_lite1";
> > +		interrupts = <16 1>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 365>;
> > +		status = "ok";
> > +	};
> >  };
> > diff --git a/arch/arm/boot/dts/exynos5250.dtsi b/arch/arm/boot/dts/exynos5250.dtsi
> > index fc9fb3d..130d23d 100644
> > --- a/arch/arm/boot/dts/exynos5250.dtsi
> > +++ b/arch/arm/boot/dts/exynos5250.dtsi
> > @@ -66,6 +66,16 @@
> >  		reg = <0x10044040 0x20>;
> >  	};
> >
> > +	pd_isp: mfc-power-domain@0x10044020 {
> > +		compatible = "samsung,exynos4210-pd";
> > +		reg = <0x10044020 0x20>;
> > +	};
> > +
> > +	pd_disp1: mfc-power-domain@0x100440A0 {
> > +		compatible = "samsung,exynos4210-pd";
> > +		reg = <0x100440A0 0x20>;
> > +	};
> > +
> >  	clock: clock-controller@0x10010000 {
> >  		compatible = "samsung,exynos5250-clock";
> >  		reg = <0x10010000 0x30000>;
> > @@ -180,6 +190,7 @@
> >  		reg = <0x11000000 0x10000>;
> >  		interrupts = <0 96 0>;
> >  		samsung,power-domain = <&pd_mfc>;
> > +		iommu = <&sysmmu_mfc_l &sysmmu_mfc_l>;
> 
> Shouldn't it be:
> 
> 	iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
> 
> ?

Oh. yes you are right.
Thanks.

> 
> Best regards,
> --
> Bartlomiej Zolnierkiewicz
> Samsung R&D Institute Poland
> Samsung Electronics
> 
> >  	};
> >
> >  	rtc {
> > @@ -571,6 +582,7 @@
> >  		samsung,power-domain = <&pd_gsc>;
> >  		clocks = <&clock 256>;
> >  		clock-names = "gscl";
> > +		iommu = <&sysmmu_gsc1>;
> >  	};
> >
> >  	gsc_1:  gsc@0x13e10000 {
> > @@ -580,6 +592,7 @@
> >  		samsung,power-domain = <&pd_gsc>;
> >  		clocks = <&clock 257>;
> >  		clock-names = "gscl";
> > +		iommu = <&sysmmu_gsc1>;
> >  	};
> >
> >  	gsc_2:  gsc@0x13e20000 {
> > @@ -589,6 +602,7 @@
> >  		samsung,power-domain = <&pd_gsc>;
> >  		clocks = <&clock 258>;
> >  		clock-names = "gscl";
> > +		iommu = <&sysmmu_gsc2>;
> >  	};
> >
> >  	gsc_3:  gsc@0x13e30000 {
> > @@ -598,6 +612,7 @@
> >  		samsung,power-domain = <&pd_gsc>;
> >  		clocks = <&clock 259>;
> >  		clock-names = "gscl";
> > +		iommu = <&sysmmu_gsc3>;
> >  	};
> >
> >  	hdmi {
> > @@ -614,6 +629,7 @@
> >  		compatible = "samsung,exynos5-mixer";
> >  		reg = <0x14450000 0x10000>;
> >  		interrupts = <0 94 0>;
> > +		iommu = <&sysmmu_tv>;
> >  	};
> >
> >  	dp-controller {
> > @@ -638,5 +654,280 @@
> >  		interrupts = <18 4>, <18 5>, <18 6>;
> >  		clocks = <&clock 133>, <&clock 339>;
> >  		clock-names = "sclk_fimd", "fimd";
> > +		iommu = <&sysmmu_fimd1>;
> > +	};
> > +
> > +	sysmmu_mfc_l: sysmmu@11210000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x11210000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-mfc_l";
> > +		interrupts = <8 5>;
> > +		clock-names = "sysmmu", "master";
> > +		clocks = <&clock 267>, <&clock 266>;
> > +		samsung,power-domain = <&pd_mfc>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_mfc_r: sysmmu@11200000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x11200000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-mfc_r";
> > +		interrupts = <6 2>;
> > +		clock-names = "sysmmu", "master";
> > +		clocks = <&clock 268>, <&clock 266>;
> > +		samsung,power-domain = <&pd_mfc>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_tv: sysmmu@14650000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x14650000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-tv";
> > +		interrupts = <7 4>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 349>;
> > +		samsung,power-domain = <&pd_disp1>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_gsc0: sysmmu@13E80000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x13E80000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-gsc0";
> > +		interrupts = <2 0>;
> > +		clock-names = "sysmmu", "master";
> > +		clocks = <&clock 262>, <&clock 256>;
> > +		samsung,power-domain = <&pd_gsc>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_gsc1: sysmmu@13E90000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x13E90000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-gsc1";
> > +		interrupts = <2 2>;
> > +		clock-names = "sysmmu", "master";
> > +		clocks = <&clock 263>, <&clock 257>;
> > +		samsung,power-domain = <&pd_gsc>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_gsc2: sysmmu@13EA0000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x13EA0000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-gsc2";
> > +		interrupts = <2 4>;
> > +		clock-names = "sysmmu", "master";
> > +		clocks = <&clock 264>, <&clock 258>;
> > +		samsung,power-domain = <&pd_gsc>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_gsc3: sysmmu@13EB0000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x13EB0000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-gsc3";
> > +		interrupts = <2 6>;
> > +		clock-names = "sysmmu", "master";
> > +		clocks = <&clock 265>, <&clock 259>;
> > +		samsung,power-domain = <&pd_gsc>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimd1: sysmmu@14640000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x14640000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimd1";
> > +		interrupts = <3 2>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 350>;
> > +		samsung,power-domain = <&pd_disp1>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_rotator: sysmmu@11D40000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x11D40000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-rotator";
> > +		interrupts = <4 0>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 272>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_isp: sysmmu@13260000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x13260000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_isp";
> > +		interrupts = <10 6>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 361>;
> > +		samsung,power-domain = <&pd_isp>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_drc: sysmmu@13270000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x13270000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_drc";
> > +		interrupts = <11 6>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 362>;
> > +		samsung,power-domain = <&pd_isp>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_fd: sysmmu@132A0000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x132A0000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_fd";
> > +		interrupts = <5 0>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 363>;
> > +		samsung,power-domain = <&pd_isp>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_scc: sysmmu@13280000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x13280000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_scalerc";
> > +		interrupts = <5 2>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 364>;
> > +		samsung,power-domain = <&pd_isp>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_scp: sysmmu@13290000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x13290000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_scalerp";
> > +		interrupts = <3 6>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 365>;
> > +		samsung,power-domain = <&pd_isp>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_mcuctl: sysmmu@132B0000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x132B0000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_mcuctl";
> > +		interrupts = <5 4>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 366>;
> > +		samsung,power-domain = <&pd_isp>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_odc: sysmmu@132C0000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x132C0000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_odc";
> > +		interrupts = <11 0>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 367>;
> > +		samsung,power-domain = <&pd_isp>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_dis0: sysmmu@132D0000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x132D0000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_dis0";
> > +		interrupts = <10 4>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 368>;
> > +		samsung,power-domain = <&pd_isp>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_dis1: sysmmu@132E0000{
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x132E0000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_dis1";
> > +		interrupts = <9 4>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 369>;
> > +		samsung,power-domain = <&pd_isp>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_3dnr: sysmmu@132F0000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x132F0000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_3dnr";
> > +		interrupts = <5 6>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 370>;
> > +		samsung,power-domain = <&pd_isp>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_lite0: sysmmu@13C40000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x13C40000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_lite0";
> > +		interrupts = <3 4>;
> > +		clock-names = "sysmmu", "master";
> > +		clocks = <&clock 346>, <&clock 345>;
> > +		samsung,power-domain = <&pd_gsc>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_lite1: sysmmu@13C50000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x13C50000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_lite1";
> > +		interrupts = <24 1>;
> > +		clock-names = "sysmmu", "master";
> > +		clocks = <&clock 347>, <&clock 345>;
> > +		samsung,power-domain = <&pd_gsc>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_jpeg: sysmmu@11F20000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x11F20000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-jpeg";
> > +		interrupts = <4 2>;
> > +		clock-names = "sysmmu", "master";
> > +		clocks = <&clock 273>, <&clock 270>;
> > +		samsung,power-domain = <&pd_gsc>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_2d: sysmmu@10A60000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x10A60000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-2d";
> > +		interrupts = <24 5>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 361>;
> > +		status = "ok";
> >  	};
> >  };


^ permalink raw reply	[flat|nested] 65+ messages in thread

* [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-08-05 11:16     ` Cho KyongHo
  0 siblings, 0 replies; 65+ messages in thread
From: Cho KyongHo @ 2013-08-05 11:16 UTC (permalink / raw)
  To: linux-arm-kernel

> -----Original Message-----
> From: Bartlomiej Zolnierkiewicz [mailto:b.zolnierkie at samsung.com]
> Sent: Saturday, August 03, 2013 2:14 AM
> 
> Hi,
> 
> On Friday, July 26, 2013 08:28:19 PM Cho KyongHo wrote:
> > Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
> > ---
> >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
> >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
> >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
> >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
> >  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
> >  5 files changed, 617 insertions(+), 0 deletions(-)
> >  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> >
> > diff --git a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > new file mode 100644
> > index 0000000..92f0a33
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > @@ -0,0 +1,103 @@
> > +Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management Unit)
> > +
> > +Samsung's Exynos architecture contains System MMU that enables scattered
> > +physical memory chunks visible as a contiguous region to DMA-capable peripheral
> > +devices like MFC, FIMC, FIMD, GScaler, FIMC-IS and so forth.
> > +
> > +System MMU is a sort of IOMMU and support identical translation table format to
> > +ARMv7 translation tables with minimum set of page properties including access
> > +permissions, shareability and security protection. In addition, System MMU has
> > +another capabilities like L2 TLB or block-fetch buffers to minimize translation
> > +latency.
> > +
> > +A System MMU is dedicated to a single master peripheral device.  Thus, it is
> > +important to specify the correct System MMU in the device node of its master
> > +device. Whereas a System MMU is dedicated to a master device, the master device
> > +may have more than one System MMU.
> > +
> > +Required properties:
> > +- compatible: Should be "samsung,exynos4210-sysmmu"
> > +- reg: A tuple of base address and size of System MMU registers.
> > +- interrupt-parent: The phandle of the interrupt controller of System MMU
> > +- interrupts: A tuple of numbers that indicates the interrupt source.
> > +- clock-names: Should be "sysmmu" if the System MMU is needed to gate its clock.
> > +               Please refer to the following documents:
> > +	       Documentation/devicetree/bindings/clock/clock-bindings.txt
> > +	       Documentation/devicetree/bindings/clock/exynos4-clock.txt
> > +	       Documentation/devicetree/bindings/clock/exynos5250-clock.txt
> > +	       Optional "master" if the clock to the System MMU is gated by
> > +	       another gate clock other than "sysmmu". The System MMU driver
> > +	       sets "master" the parent of "sysmmu".
> > +	       Exynos4 SoCs, there needs no "master" clocks.
> > +	       Exynos5 SoCs, some System MMUs must have "master" clocks.
> > +- clocks: Required if the System MMU is needed to gate its clock.
> > +	  Please refer to the documents listed above.
> > +- samsung,power-domain: Required if the System MMU is needed to gate its power.
> > +	  Please refer to the following document:
> > +	  Documentation/devicetree/bindings/arm/exynos/power_domain.txt
> > +
> > +Required properties for the master peripheral devices:
> > +- iommu: phandles to the System MMUs of the device
> > +
> > +Examples:
> > +A System MMU is dedicated to a single master device.
> > +	gsc_0:  gsc at 0x13e00000 {
> > +		compatible = "samsung,exynos5-gsc";
> > +		reg = <0x13e00000 0x1000>;
> > +		interrupts = <0 85 0>;
> > +		samsung,power-domain = <&pd_gsc>;
> > +		clocks = <&clock 256>;
> > +		clock-names = "gscl";
> > +		iommu = <&sysmmu_gsc1>;
> > +	};
> > +
> > +	sysmmu_gsc0: sysmmu at 13E80000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x13E80000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-gsc0";
> > +		interrupts = <2 0>;
> > +		clock-names = "sysmmu", "master";
> > +		clocks = <&clock 262>, <&clock 256>;
> > +		samsung,power-domain = <&pd_gsc>;
> > +		status = "ok";
> > +	};
> > +
> > +MFC has 2 System MMUs for each port that MFC is attached. Thus it seems natural
> > +to define 2 System MMUs for each port of the MFC:
> 
> Marek Szyprowski (added to cc:) has a patch fixing MFC to create separate
> mfc_l and mfc_r devices (like it was in the past). Using this patch it
> would be possible to bind sysmmu_mfc_l to mfc_l device and sysmmu_mfc_r to
> mfc_r device. This probably also requires adding some MFC specific handling
> in a device tree node and to the new master's device PM ops (in patch #10)
> as previously (in our trees) sysmmu_mfc r device was set as parent of
> sysmmu_mfc_l device which in turn was a parent for main MFC device (to make
> runtime Power Management work). However because MFC is the only device
> requiring use of multiple System MMUs above changes would allow us (unless
> I'm missing something?) to use just one System MMU device per struct
> exynos_iommu_client instance (making driver a lot simpler).
> 

Does it mean that we can make the exynos-iommu driver simpler
with Marek Szyprowski's patch?
It is welcome but I don't think it covers all topologies of System MMU and
master H/W. Those are getting more complex.

> > +	mfc: codec at 13400000 {
> > +		compatible = "samsung,mfc-v5";
> > +		reg = <0x13400000 0x10000>;
> > +		interrupts = <0 94 0>;
> > +		samsung,power-domain = <&pd_mfc>;
> > +		clocks = <&clock 170>, <&clock 273>;
> > +		clock-names = "sclk_mfc", "mfc";
> > +		status = "ok";
> > +		iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
> > +	};
> > +
> > +	sysmmu_mfc_l: sysmmu at 13620000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x13620000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-mfc-l";
> > +		interrupts = <5 5>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 274>;
> > +		samsung,power-domain = <&pd_mfc>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_mfc_r: sysmmu at 13630000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x13630000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-mfc-r";
> > +		interrupts = <5 6>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 275>;
> > +		samsung,power-domain = <&pd_mfc>;
> > +		status = "ok";
> > +	};
> > +
> > diff --git a/arch/arm/boot/dts/exynos4.dtsi b/arch/arm/boot/dts/exynos4.dtsi
> > index 359694c..ba74ee8 100644
> > --- a/arch/arm/boot/dts/exynos4.dtsi
> > +++ b/arch/arm/boot/dts/exynos4.dtsi
> > @@ -161,6 +161,7 @@
> >  		interrupts = <0 94 0>;
> >  		samsung,power-domain = <&pd_mfc>;
> >  		status = "disabled";
> > +		iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
> >  	};
> >
> >  	serial at 13800000 {
> > @@ -395,5 +396,126 @@
> >  		clock-names = "sclk_fimd", "fimd";
> >  		samsung,power-domain = <&pd_lcd0>;
> >  		status = "disabled";
> > +		iommu = <&sysmmu_fimd0>;
> > +	};
> > +
> > +	sysmmu_mfc_l: sysmmu at 13620000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x13620000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-mfc-l";
> > +		interrupts = <5 5>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 274>;
> > +		samsung,power-domain = <&pd_mfc>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_mfc_r: sysmmu at 13630000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x13630000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-mfc-r";
> > +		interrupts = <5 6>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 275>;
> > +		samsung,power-domain = <&pd_mfc>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_tv: sysmmu at 13E20000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x13E20000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-tv";
> > +		interrupts = <5 4>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 272>;
> > +		samsung,power-domain = <&pd_tv>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc0: sysmmu at 11A20000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x11A20000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc0";
> > +		interrupts = <4 2>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 263>;
> > +		samsung,power-domain = <&pd_cam>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc1: sysmmu at 11A30000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x11A30000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc1";
> > +		interrupts = <4 3>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 264>;
> > +		samsung,power-domain = <&pd_cam>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc2: sysmmu at 11A40000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x11A40000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc2";
> > +		interrupts = <4 4>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 265>;
> > +		samsung,power-domain = <&pd_cam>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc3: sysmmu at 11A50000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x11A50000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc3";
> > +		interrupts = <4 5>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 266>;
> > +		samsung,power-domain = <&pd_cam>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_jpeg: sysmmu at 11A60000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x11A60000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-jpeg";
> > +		interrupts = <4 6>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 267>;
> > +		samsung,power-domain = <&pd_cam>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_rotator: sysmmu at 12A30000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x12A30000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-rotator";
> > +		interrupts = <5 0>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 281>;
> > +		samsung,power-domain = <&pd_lcd0>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimd0: sysmmu at 11E20000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x11E20000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimd0";
> > +		interrupts = <5 2>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 287>;
> > +		samsung,power-domain = <&pd_lcd0>;
> > +		status = "ok";
> >  	};
> >  };
> > diff --git a/arch/arm/boot/dts/exynos4210.dtsi b/arch/arm/boot/dts/exynos4210.dtsi
> > index 54710de..09b13da 100644
> > --- a/arch/arm/boot/dts/exynos4210.dtsi
> > +++ b/arch/arm/boot/dts/exynos4210.dtsi
> > @@ -119,5 +119,30 @@
> >  		reg = <0x12800000 0x1000>;
> >  		interrupts = <0 89 0>;
> >  		status = "disabled";
> > +		iommu = <&sysmmu_g2d>;
> > +	};
> > +
> > +	sysmmu_g2d: sysmmu at 12A20000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x12A20000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-g2d";
> > +		interrupts = <4 7>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 280>;
> > +		samsung,power-domain = <&pd_lcd0>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimd1: sysmmu at 12220000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimd1";
> > +		reg = <0x12220000 0x1000>;
> > +		interrupts = <5 3>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 291>;
> > +		samsung,power-domain = <&pd_lcd1>;
> > +		status = "ok";
> >  	};
> >  };
> > diff --git a/arch/arm/boot/dts/exynos4x12.dtsi b/arch/arm/boot/dts/exynos4x12.dtsi
> > index e3380a7..681db32 100644
> > --- a/arch/arm/boot/dts/exynos4x12.dtsi
> > +++ b/arch/arm/boot/dts/exynos4x12.dtsi
> > @@ -79,4 +79,80 @@
> >  		interrupts = <0 89 0>;
> >  		status = "disabled";
> >  	};
> > +
> > +	sysmmu_g2d: sysmmu at 10A40000{
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x10A40000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-g2d";
> > +		interrupts = <4 7>;
> > +		clock-names = "sysmmu";
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_isp: sysmmu at 12260000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x12260000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_isp";
> > +		interrupts = <16 2>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 362>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_drc: sysmmu at 12270000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x12270000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_drc";
> > +		interrupts = <16 3>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 363>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_fd: sysmmu at 122A0000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x122A0000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_fd";
> > +		interrupts = <16 4>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 364>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_mcuctl: sysmmu at 122B0000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x122B0000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_mcuctl";
> > +		interrupts = <16 5>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 376>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_lite0: sysmmu at 123B0000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x123B0000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_lite0";
> > +		interrupts = <16 0>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 366>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_lite1: sysmmu at 123C0000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x123C0000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_lite1";
> > +		interrupts = <16 1>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 365>;
> > +		status = "ok";
> > +	};
> >  };
> > diff --git a/arch/arm/boot/dts/exynos5250.dtsi b/arch/arm/boot/dts/exynos5250.dtsi
> > index fc9fb3d..130d23d 100644
> > --- a/arch/arm/boot/dts/exynos5250.dtsi
> > +++ b/arch/arm/boot/dts/exynos5250.dtsi
> > @@ -66,6 +66,16 @@
> >  		reg = <0x10044040 0x20>;
> >  	};
> >
> > +	pd_isp: mfc-power-domain at 0x10044020 {
> > +		compatible = "samsung,exynos4210-pd";
> > +		reg = <0x10044020 0x20>;
> > +	};
> > +
> > +	pd_disp1: mfc-power-domain at 0x100440A0 {
> > +		compatible = "samsung,exynos4210-pd";
> > +		reg = <0x100440A0 0x20>;
> > +	};
> > +
> >  	clock: clock-controller at 0x10010000 {
> >  		compatible = "samsung,exynos5250-clock";
> >  		reg = <0x10010000 0x30000>;
> > @@ -180,6 +190,7 @@
> >  		reg = <0x11000000 0x10000>;
> >  		interrupts = <0 96 0>;
> >  		samsung,power-domain = <&pd_mfc>;
> > +		iommu = <&sysmmu_mfc_l &sysmmu_mfc_l>;
> 
> Shouldn't it be:
> 
> 	iommu = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
> 
> ?

Oh. yes you are right.
Thanks.

> 
> Best regards,
> --
> Bartlomiej Zolnierkiewicz
> Samsung R&D Institute Poland
> Samsung Electronics
> 
> >  	};
> >
> >  	rtc {
> > @@ -571,6 +582,7 @@
> >  		samsung,power-domain = <&pd_gsc>;
> >  		clocks = <&clock 256>;
> >  		clock-names = "gscl";
> > +		iommu = <&sysmmu_gsc1>;
> >  	};
> >
> >  	gsc_1:  gsc at 0x13e10000 {
> > @@ -580,6 +592,7 @@
> >  		samsung,power-domain = <&pd_gsc>;
> >  		clocks = <&clock 257>;
> >  		clock-names = "gscl";
> > +		iommu = <&sysmmu_gsc1>;
> >  	};
> >
> >  	gsc_2:  gsc at 0x13e20000 {
> > @@ -589,6 +602,7 @@
> >  		samsung,power-domain = <&pd_gsc>;
> >  		clocks = <&clock 258>;
> >  		clock-names = "gscl";
> > +		iommu = <&sysmmu_gsc2>;
> >  	};
> >
> >  	gsc_3:  gsc at 0x13e30000 {
> > @@ -598,6 +612,7 @@
> >  		samsung,power-domain = <&pd_gsc>;
> >  		clocks = <&clock 259>;
> >  		clock-names = "gscl";
> > +		iommu = <&sysmmu_gsc3>;
> >  	};
> >
> >  	hdmi {
> > @@ -614,6 +629,7 @@
> >  		compatible = "samsung,exynos5-mixer";
> >  		reg = <0x14450000 0x10000>;
> >  		interrupts = <0 94 0>;
> > +		iommu = <&sysmmu_tv>;
> >  	};
> >
> >  	dp-controller {
> > @@ -638,5 +654,280 @@
> >  		interrupts = <18 4>, <18 5>, <18 6>;
> >  		clocks = <&clock 133>, <&clock 339>;
> >  		clock-names = "sclk_fimd", "fimd";
> > +		iommu = <&sysmmu_fimd1>;
> > +	};
> > +
> > +	sysmmu_mfc_l: sysmmu at 11210000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x11210000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-mfc_l";
> > +		interrupts = <8 5>;
> > +		clock-names = "sysmmu", "master";
> > +		clocks = <&clock 267>, <&clock 266>;
> > +		samsung,power-domain = <&pd_mfc>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_mfc_r: sysmmu at 11200000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x11200000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-mfc_r";
> > +		interrupts = <6 2>;
> > +		clock-names = "sysmmu", "master";
> > +		clocks = <&clock 268>, <&clock 266>;
> > +		samsung,power-domain = <&pd_mfc>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_tv: sysmmu at 14650000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x14650000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-tv";
> > +		interrupts = <7 4>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 349>;
> > +		samsung,power-domain = <&pd_disp1>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_gsc0: sysmmu at 13E80000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x13E80000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-gsc0";
> > +		interrupts = <2 0>;
> > +		clock-names = "sysmmu", "master";
> > +		clocks = <&clock 262>, <&clock 256>;
> > +		samsung,power-domain = <&pd_gsc>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_gsc1: sysmmu at 13E90000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x13E90000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-gsc1";
> > +		interrupts = <2 2>;
> > +		clock-names = "sysmmu", "master";
> > +		clocks = <&clock 263>, <&clock 257>;
> > +		samsung,power-domain = <&pd_gsc>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_gsc2: sysmmu at 13EA0000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x13EA0000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-gsc2";
> > +		interrupts = <2 4>;
> > +		clock-names = "sysmmu", "master";
> > +		clocks = <&clock 264>, <&clock 258>;
> > +		samsung,power-domain = <&pd_gsc>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_gsc3: sysmmu at 13EB0000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x13EB0000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-gsc3";
> > +		interrupts = <2 6>;
> > +		clock-names = "sysmmu", "master";
> > +		clocks = <&clock 265>, <&clock 259>;
> > +		samsung,power-domain = <&pd_gsc>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimd1: sysmmu at 14640000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x14640000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimd1";
> > +		interrupts = <3 2>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 350>;
> > +		samsung,power-domain = <&pd_disp1>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_rotator: sysmmu at 11D40000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x11D40000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-rotator";
> > +		interrupts = <4 0>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 272>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_isp: sysmmu at 13260000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x13260000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_isp";
> > +		interrupts = <10 6>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 361>;
> > +		samsung,power-domain = <&pd_isp>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_drc: sysmmu at 13270000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x13270000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_drc";
> > +		interrupts = <11 6>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 362>;
> > +		samsung,power-domain = <&pd_isp>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_fd: sysmmu at 132A0000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x132A0000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_fd";
> > +		interrupts = <5 0>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 363>;
> > +		samsung,power-domain = <&pd_isp>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_scc: sysmmu at 13280000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x13280000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_scalerc";
> > +		interrupts = <5 2>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 364>;
> > +		samsung,power-domain = <&pd_isp>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_scp: sysmmu at 13290000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x13290000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_scalerp";
> > +		interrupts = <3 6>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 365>;
> > +		samsung,power-domain = <&pd_isp>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_mcuctl: sysmmu at 132B0000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x132B0000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_mcuctl";
> > +		interrupts = <5 4>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 366>;
> > +		samsung,power-domain = <&pd_isp>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_odc: sysmmu at 132C0000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x132C0000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_odc";
> > +		interrupts = <11 0>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 367>;
> > +		samsung,power-domain = <&pd_isp>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_dis0: sysmmu at 132D0000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x132D0000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_dis0";
> > +		interrupts = <10 4>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 368>;
> > +		samsung,power-domain = <&pd_isp>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_dis1: sysmmu at 132E0000{
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x132E0000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_dis1";
> > +		interrupts = <9 4>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 369>;
> > +		samsung,power-domain = <&pd_isp>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_3dnr: sysmmu at 132F0000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x132F0000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_3dnr";
> > +		interrupts = <5 6>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 370>;
> > +		samsung,power-domain = <&pd_isp>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_lite0: sysmmu at 13C40000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x13C40000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_lite0";
> > +		interrupts = <3 4>;
> > +		clock-names = "sysmmu", "master";
> > +		clocks = <&clock 346>, <&clock 345>;
> > +		samsung,power-domain = <&pd_gsc>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_lite1: sysmmu at 13C50000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x13C50000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-fimc_lite1";
> > +		interrupts = <24 1>;
> > +		clock-names = "sysmmu", "master";
> > +		clocks = <&clock 347>, <&clock 345>;
> > +		samsung,power-domain = <&pd_gsc>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_jpeg: sysmmu at 11F20000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x11F20000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-jpeg";
> > +		interrupts = <4 2>;
> > +		clock-names = "sysmmu", "master";
> > +		clocks = <&clock 273>, <&clock 270>;
> > +		samsung,power-domain = <&pd_gsc>;
> > +		status = "ok";
> > +	};
> > +
> > +	sysmmu_fimc_2d: sysmmu at 10A60000 {
> > +		compatible = "samsung,exynos4210-sysmmu";
> > +		reg = <0x10A60000 0x1000>;
> > +		interrupt-parent = <&combiner>;
> > +		interrupt-names = "sysmmu-2d";
> > +		interrupts = <24 5>;
> > +		clock-names = "sysmmu";
> > +		clocks = <&clock 361>;
> > +		status = "ok";
> >  	};
> >  };

^ permalink raw reply	[flat|nested] 65+ messages in thread

* Re: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
  2013-08-05 11:16     ` Cho KyongHo
  (?)
@ 2013-08-05 13:09       ` Bartlomiej Zolnierkiewicz
  -1 siblings, 0 replies; 65+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2013-08-05 13:09 UTC (permalink / raw)
  To: Cho KyongHo
  Cc: 'Linux ARM Kernel', 'Linux IOMMU',
	'Linux Kernel', 'Linux Samsung SOC',
	'Hyunwoong Kim', 'Joerg Roedel',
	'Kukjin Kim', 'Prathyush', 'Rahul Sharma',
	'Subash Patel', 'Keyyoung Park',
	'Grant Grundler', 'Antonios Motakis',
	kvmarm, 'Sachin Kamat',
	m.szyprowski

On Monday, August 05, 2013 08:16:40 PM Cho KyongHo wrote:
> > -----Original Message-----
> > From: Bartlomiej Zolnierkiewicz [mailto:b.zolnierkie@samsung.com]
> > Sent: Saturday, August 03, 2013 2:14 AM
> > 
> > Hi,
> > 
> > On Friday, July 26, 2013 08:28:19 PM Cho KyongHo wrote:
> > > Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
> > > ---
> > >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
> > >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
> > >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
> > >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
> > >  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
> > >  5 files changed, 617 insertions(+), 0 deletions(-)
> > >  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > >
> > > diff --git a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > new file mode 100644
> > > index 0000000..92f0a33
> > > --- /dev/null
> > > +++ b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > @@ -0,0 +1,103 @@
> > > +Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management Unit)
> > > +
> > > +Samsung's Exynos architecture contains System MMU that enables scattered
> > > +physical memory chunks visible as a contiguous region to DMA-capable peripheral
> > > +devices like MFC, FIMC, FIMD, GScaler, FIMC-IS and so forth.
> > > +
> > > +System MMU is a sort of IOMMU and support identical translation table format to
> > > +ARMv7 translation tables with minimum set of page properties including access
> > > +permissions, shareability and security protection. In addition, System MMU has
> > > +another capabilities like L2 TLB or block-fetch buffers to minimize translation
> > > +latency.
> > > +
> > > +A System MMU is dedicated to a single master peripheral device.  Thus, it is
> > > +important to specify the correct System MMU in the device node of its master
> > > +device. Whereas a System MMU is dedicated to a master device, the master device
> > > +may have more than one System MMU.
> > > +
> > > +Required properties:
> > > +- compatible: Should be "samsung,exynos4210-sysmmu"
> > > +- reg: A tuple of base address and size of System MMU registers.
> > > +- interrupt-parent: The phandle of the interrupt controller of System MMU
> > > +- interrupts: A tuple of numbers that indicates the interrupt source.
> > > +- clock-names: Should be "sysmmu" if the System MMU is needed to gate its clock.
> > > +               Please refer to the following documents:
> > > +	       Documentation/devicetree/bindings/clock/clock-bindings.txt
> > > +	       Documentation/devicetree/bindings/clock/exynos4-clock.txt
> > > +	       Documentation/devicetree/bindings/clock/exynos5250-clock.txt
> > > +	       Optional "master" if the clock to the System MMU is gated by
> > > +	       another gate clock other than "sysmmu". The System MMU driver
> > > +	       sets "master" the parent of "sysmmu".
> > > +	       Exynos4 SoCs, there needs no "master" clocks.
> > > +	       Exynos5 SoCs, some System MMUs must have "master" clocks.
> > > +- clocks: Required if the System MMU is needed to gate its clock.
> > > +	  Please refer to the documents listed above.
> > > +- samsung,power-domain: Required if the System MMU is needed to gate its power.
> > > +	  Please refer to the following document:
> > > +	  Documentation/devicetree/bindings/arm/exynos/power_domain.txt
> > > +
> > > +Required properties for the master peripheral devices:
> > > +- iommu: phandles to the System MMUs of the device
> > > +
> > > +Examples:
> > > +A System MMU is dedicated to a single master device.
> > > +	gsc_0:  gsc@0x13e00000 {
> > > +		compatible = "samsung,exynos5-gsc";
> > > +		reg = <0x13e00000 0x1000>;
> > > +		interrupts = <0 85 0>;
> > > +		samsung,power-domain = <&pd_gsc>;
> > > +		clocks = <&clock 256>;
> > > +		clock-names = "gscl";
> > > +		iommu = <&sysmmu_gsc1>;
> > > +	};
> > > +
> > > +	sysmmu_gsc0: sysmmu@13E80000 {
> > > +		compatible = "samsung,exynos4210-sysmmu";
> > > +		reg = <0x13E80000 0x1000>;
> > > +		interrupt-parent = <&combiner>;
> > > +		interrupt-names = "sysmmu-gsc0";
> > > +		interrupts = <2 0>;
> > > +		clock-names = "sysmmu", "master";
> > > +		clocks = <&clock 262>, <&clock 256>;
> > > +		samsung,power-domain = <&pd_gsc>;
> > > +		status = "ok";
> > > +	};
> > > +
> > > +MFC has 2 System MMUs for each port that MFC is attached. Thus it seems natural
> > > +to define 2 System MMUs for each port of the MFC:
> > 
> > Marek Szyprowski (added to cc:) has a patch fixing MFC to create separate
> > mfc_l and mfc_r devices (like it was in the past). Using this patch it
> > would be possible to bind sysmmu_mfc_l to mfc_l device and sysmmu_mfc_r to
> > mfc_r device. This probably also requires adding some MFC specific handling
> > in a device tree node and to the new master's device PM ops (in patch #10)
> > as previously (in our trees) sysmmu_mfc r device was set as parent of
> > sysmmu_mfc_l device which in turn was a parent for main MFC device (to make
> > runtime Power Management work). However because MFC is the only device
> > requiring use of multiple System MMUs above changes would allow us (unless
> > I'm missing something?) to use just one System MMU device per struct
> > exynos_iommu_client instance (making driver a lot simpler).
> > 
> 
> Does it mean that we can make the exynos-iommu driver simpler
> with Marek Szyprowski's patch?

I think so and you probably need to change MFC handling anyway because
MFC driver does DMA allocations per mfc_l/mfc_r devices and not per main
device (at least in the upstream kernels).

[ Marek, could you please resfresh and post your patch on the list? ]

BTW There is an additional problem with combining System MMU devices per
one main device - it limits available address space (which in case of MFC
is very limited by hardware design).

> It is welcome but I don't think it covers all topologies of System MMU and
> master H/W. Those are getting more complex.

Could you please be more specific? I know about FIMC ISP subsystem but
it doesn't require combining System MMUs. Are there any other examples of
complex System MMU + master H/W topologies?

Anyway I think that System MMUs should not be combined (as it is done in
patch #10) and should be binded per "memport" devices and not per main
device (as done in this patch).

Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics


^ permalink raw reply	[flat|nested] 65+ messages in thread

* Re: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-08-05 13:09       ` Bartlomiej Zolnierkiewicz
  0 siblings, 0 replies; 65+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2013-08-05 13:09 UTC (permalink / raw)
  To: Cho KyongHo
  Cc: 'Linux Samsung SOC', 'Hyunwoong Kim',
	'Prathyush', 'Grant Grundler',
	'Keyyoung Park', 'Subash Patel',
	'Linux Kernel', 'Sachin Kamat',
	'Linux IOMMU', 'Kukjin Kim',
	'Antonios Motakis',
	kvmarm-FPEHb7Xf0XXUo1n7N8X6UoWGPAHP3yOg,
	'Linux ARM Kernel', 'Rahul Sharma'

On Monday, August 05, 2013 08:16:40 PM Cho KyongHo wrote:
> > -----Original Message-----
> > From: Bartlomiej Zolnierkiewicz [mailto:b.zolnierkie-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org]
> > Sent: Saturday, August 03, 2013 2:14 AM
> > 
> > Hi,
> > 
> > On Friday, July 26, 2013 08:28:19 PM Cho KyongHo wrote:
> > > Signed-off-by: Cho KyongHo <pullip.cho-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
> > > ---
> > >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
> > >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
> > >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
> > >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
> > >  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
> > >  5 files changed, 617 insertions(+), 0 deletions(-)
> > >  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > >
> > > diff --git a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > new file mode 100644
> > > index 0000000..92f0a33
> > > --- /dev/null
> > > +++ b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > @@ -0,0 +1,103 @@
> > > +Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management Unit)
> > > +
> > > +Samsung's Exynos architecture contains System MMU that enables scattered
> > > +physical memory chunks visible as a contiguous region to DMA-capable peripheral
> > > +devices like MFC, FIMC, FIMD, GScaler, FIMC-IS and so forth.
> > > +
> > > +System MMU is a sort of IOMMU and support identical translation table format to
> > > +ARMv7 translation tables with minimum set of page properties including access
> > > +permissions, shareability and security protection. In addition, System MMU has
> > > +another capabilities like L2 TLB or block-fetch buffers to minimize translation
> > > +latency.
> > > +
> > > +A System MMU is dedicated to a single master peripheral device.  Thus, it is
> > > +important to specify the correct System MMU in the device node of its master
> > > +device. Whereas a System MMU is dedicated to a master device, the master device
> > > +may have more than one System MMU.
> > > +
> > > +Required properties:
> > > +- compatible: Should be "samsung,exynos4210-sysmmu"
> > > +- reg: A tuple of base address and size of System MMU registers.
> > > +- interrupt-parent: The phandle of the interrupt controller of System MMU
> > > +- interrupts: A tuple of numbers that indicates the interrupt source.
> > > +- clock-names: Should be "sysmmu" if the System MMU is needed to gate its clock.
> > > +               Please refer to the following documents:
> > > +	       Documentation/devicetree/bindings/clock/clock-bindings.txt
> > > +	       Documentation/devicetree/bindings/clock/exynos4-clock.txt
> > > +	       Documentation/devicetree/bindings/clock/exynos5250-clock.txt
> > > +	       Optional "master" if the clock to the System MMU is gated by
> > > +	       another gate clock other than "sysmmu". The System MMU driver
> > > +	       sets "master" the parent of "sysmmu".
> > > +	       Exynos4 SoCs, there needs no "master" clocks.
> > > +	       Exynos5 SoCs, some System MMUs must have "master" clocks.
> > > +- clocks: Required if the System MMU is needed to gate its clock.
> > > +	  Please refer to the documents listed above.
> > > +- samsung,power-domain: Required if the System MMU is needed to gate its power.
> > > +	  Please refer to the following document:
> > > +	  Documentation/devicetree/bindings/arm/exynos/power_domain.txt
> > > +
> > > +Required properties for the master peripheral devices:
> > > +- iommu: phandles to the System MMUs of the device
> > > +
> > > +Examples:
> > > +A System MMU is dedicated to a single master device.
> > > +	gsc_0:  gsc@0x13e00000 {
> > > +		compatible = "samsung,exynos5-gsc";
> > > +		reg = <0x13e00000 0x1000>;
> > > +		interrupts = <0 85 0>;
> > > +		samsung,power-domain = <&pd_gsc>;
> > > +		clocks = <&clock 256>;
> > > +		clock-names = "gscl";
> > > +		iommu = <&sysmmu_gsc1>;
> > > +	};
> > > +
> > > +	sysmmu_gsc0: sysmmu@13E80000 {
> > > +		compatible = "samsung,exynos4210-sysmmu";
> > > +		reg = <0x13E80000 0x1000>;
> > > +		interrupt-parent = <&combiner>;
> > > +		interrupt-names = "sysmmu-gsc0";
> > > +		interrupts = <2 0>;
> > > +		clock-names = "sysmmu", "master";
> > > +		clocks = <&clock 262>, <&clock 256>;
> > > +		samsung,power-domain = <&pd_gsc>;
> > > +		status = "ok";
> > > +	};
> > > +
> > > +MFC has 2 System MMUs for each port that MFC is attached. Thus it seems natural
> > > +to define 2 System MMUs for each port of the MFC:
> > 
> > Marek Szyprowski (added to cc:) has a patch fixing MFC to create separate
> > mfc_l and mfc_r devices (like it was in the past). Using this patch it
> > would be possible to bind sysmmu_mfc_l to mfc_l device and sysmmu_mfc_r to
> > mfc_r device. This probably also requires adding some MFC specific handling
> > in a device tree node and to the new master's device PM ops (in patch #10)
> > as previously (in our trees) sysmmu_mfc r device was set as parent of
> > sysmmu_mfc_l device which in turn was a parent for main MFC device (to make
> > runtime Power Management work). However because MFC is the only device
> > requiring use of multiple System MMUs above changes would allow us (unless
> > I'm missing something?) to use just one System MMU device per struct
> > exynos_iommu_client instance (making driver a lot simpler).
> > 
> 
> Does it mean that we can make the exynos-iommu driver simpler
> with Marek Szyprowski's patch?

I think so and you probably need to change MFC handling anyway because
MFC driver does DMA allocations per mfc_l/mfc_r devices and not per main
device (at least in the upstream kernels).

[ Marek, could you please resfresh and post your patch on the list? ]

BTW There is an additional problem with combining System MMU devices per
one main device - it limits available address space (which in case of MFC
is very limited by hardware design).

> It is welcome but I don't think it covers all topologies of System MMU and
> master H/W. Those are getting more complex.

Could you please be more specific? I know about FIMC ISP subsystem but
it doesn't require combining System MMUs. Are there any other examples of
complex System MMU + master H/W topologies?

Anyway I think that System MMUs should not be combined (as it is done in
patch #10) and should be binded per "memport" devices and not per main
device (as done in this patch).

Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics

^ permalink raw reply	[flat|nested] 65+ messages in thread

* [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-08-05 13:09       ` Bartlomiej Zolnierkiewicz
  0 siblings, 0 replies; 65+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2013-08-05 13:09 UTC (permalink / raw)
  To: linux-arm-kernel

On Monday, August 05, 2013 08:16:40 PM Cho KyongHo wrote:
> > -----Original Message-----
> > From: Bartlomiej Zolnierkiewicz [mailto:b.zolnierkie at samsung.com]
> > Sent: Saturday, August 03, 2013 2:14 AM
> > 
> > Hi,
> > 
> > On Friday, July 26, 2013 08:28:19 PM Cho KyongHo wrote:
> > > Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
> > > ---
> > >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
> > >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
> > >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
> > >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
> > >  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
> > >  5 files changed, 617 insertions(+), 0 deletions(-)
> > >  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > >
> > > diff --git a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > new file mode 100644
> > > index 0000000..92f0a33
> > > --- /dev/null
> > > +++ b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > @@ -0,0 +1,103 @@
> > > +Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management Unit)
> > > +
> > > +Samsung's Exynos architecture contains System MMU that enables scattered
> > > +physical memory chunks visible as a contiguous region to DMA-capable peripheral
> > > +devices like MFC, FIMC, FIMD, GScaler, FIMC-IS and so forth.
> > > +
> > > +System MMU is a sort of IOMMU and support identical translation table format to
> > > +ARMv7 translation tables with minimum set of page properties including access
> > > +permissions, shareability and security protection. In addition, System MMU has
> > > +another capabilities like L2 TLB or block-fetch buffers to minimize translation
> > > +latency.
> > > +
> > > +A System MMU is dedicated to a single master peripheral device.  Thus, it is
> > > +important to specify the correct System MMU in the device node of its master
> > > +device. Whereas a System MMU is dedicated to a master device, the master device
> > > +may have more than one System MMU.
> > > +
> > > +Required properties:
> > > +- compatible: Should be "samsung,exynos4210-sysmmu"
> > > +- reg: A tuple of base address and size of System MMU registers.
> > > +- interrupt-parent: The phandle of the interrupt controller of System MMU
> > > +- interrupts: A tuple of numbers that indicates the interrupt source.
> > > +- clock-names: Should be "sysmmu" if the System MMU is needed to gate its clock.
> > > +               Please refer to the following documents:
> > > +	       Documentation/devicetree/bindings/clock/clock-bindings.txt
> > > +	       Documentation/devicetree/bindings/clock/exynos4-clock.txt
> > > +	       Documentation/devicetree/bindings/clock/exynos5250-clock.txt
> > > +	       Optional "master" if the clock to the System MMU is gated by
> > > +	       another gate clock other than "sysmmu". The System MMU driver
> > > +	       sets "master" the parent of "sysmmu".
> > > +	       Exynos4 SoCs, there needs no "master" clocks.
> > > +	       Exynos5 SoCs, some System MMUs must have "master" clocks.
> > > +- clocks: Required if the System MMU is needed to gate its clock.
> > > +	  Please refer to the documents listed above.
> > > +- samsung,power-domain: Required if the System MMU is needed to gate its power.
> > > +	  Please refer to the following document:
> > > +	  Documentation/devicetree/bindings/arm/exynos/power_domain.txt
> > > +
> > > +Required properties for the master peripheral devices:
> > > +- iommu: phandles to the System MMUs of the device
> > > +
> > > +Examples:
> > > +A System MMU is dedicated to a single master device.
> > > +	gsc_0:  gsc at 0x13e00000 {
> > > +		compatible = "samsung,exynos5-gsc";
> > > +		reg = <0x13e00000 0x1000>;
> > > +		interrupts = <0 85 0>;
> > > +		samsung,power-domain = <&pd_gsc>;
> > > +		clocks = <&clock 256>;
> > > +		clock-names = "gscl";
> > > +		iommu = <&sysmmu_gsc1>;
> > > +	};
> > > +
> > > +	sysmmu_gsc0: sysmmu at 13E80000 {
> > > +		compatible = "samsung,exynos4210-sysmmu";
> > > +		reg = <0x13E80000 0x1000>;
> > > +		interrupt-parent = <&combiner>;
> > > +		interrupt-names = "sysmmu-gsc0";
> > > +		interrupts = <2 0>;
> > > +		clock-names = "sysmmu", "master";
> > > +		clocks = <&clock 262>, <&clock 256>;
> > > +		samsung,power-domain = <&pd_gsc>;
> > > +		status = "ok";
> > > +	};
> > > +
> > > +MFC has 2 System MMUs for each port that MFC is attached. Thus it seems natural
> > > +to define 2 System MMUs for each port of the MFC:
> > 
> > Marek Szyprowski (added to cc:) has a patch fixing MFC to create separate
> > mfc_l and mfc_r devices (like it was in the past). Using this patch it
> > would be possible to bind sysmmu_mfc_l to mfc_l device and sysmmu_mfc_r to
> > mfc_r device. This probably also requires adding some MFC specific handling
> > in a device tree node and to the new master's device PM ops (in patch #10)
> > as previously (in our trees) sysmmu_mfc r device was set as parent of
> > sysmmu_mfc_l device which in turn was a parent for main MFC device (to make
> > runtime Power Management work). However because MFC is the only device
> > requiring use of multiple System MMUs above changes would allow us (unless
> > I'm missing something?) to use just one System MMU device per struct
> > exynos_iommu_client instance (making driver a lot simpler).
> > 
> 
> Does it mean that we can make the exynos-iommu driver simpler
> with Marek Szyprowski's patch?

I think so and you probably need to change MFC handling anyway because
MFC driver does DMA allocations per mfc_l/mfc_r devices and not per main
device (at least in the upstream kernels).

[ Marek, could you please resfresh and post your patch on the list? ]

BTW There is an additional problem with combining System MMU devices per
one main device - it limits available address space (which in case of MFC
is very limited by hardware design).

> It is welcome but I don't think it covers all topologies of System MMU and
> master H/W. Those are getting more complex.

Could you please be more specific? I know about FIMC ISP subsystem but
it doesn't require combining System MMUs. Are there any other examples of
complex System MMU + master H/W topologies?

Anyway I think that System MMUs should not be combined (as it is done in
patch #10) and should be binded per "memport" devices and not per main
device (as done in this patch).

Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics

^ permalink raw reply	[flat|nested] 65+ messages in thread

* Re: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
  2013-08-05 13:09       ` Bartlomiej Zolnierkiewicz
@ 2013-08-05 13:34         ` Marek Szyprowski
  -1 siblings, 0 replies; 65+ messages in thread
From: Marek Szyprowski @ 2013-08-05 13:34 UTC (permalink / raw)
  To: Bartlomiej Zolnierkiewicz
  Cc: Cho KyongHo, 'Linux ARM Kernel', 'Linux IOMMU',
	'Linux Kernel', 'Linux Samsung SOC',
	'Hyunwoong Kim', 'Joerg Roedel',
	'Kukjin Kim', 'Prathyush', 'Rahul Sharma',
	'Subash Patel', 'Keyyoung Park',
	'Grant Grundler', 'Antonios Motakis',
	kvmarm, 'Sachin Kamat'

Hello,

On 8/5/2013 3:09 PM, Bartlomiej Zolnierkiewicz wrote:
> On Monday, August 05, 2013 08:16:40 PM Cho KyongHo wrote:
> > > -----Original Message-----
> > > From: Bartlomiej Zolnierkiewicz [mailto:b.zolnierkie@samsung.com]
> > > Sent: Saturday, August 03, 2013 2:14 AM
> > >
> > > Hi,
> > >
> > > On Friday, July 26, 2013 08:28:19 PM Cho KyongHo wrote:
> > > > Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
> > > > ---
> > > >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
> > > >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
> > > >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
> > > >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
> > > >  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
> > > >  5 files changed, 617 insertions(+), 0 deletions(-)
> > > >  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > >
> > > > diff --git a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > > b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > > new file mode 100644
> > > > index 0000000..92f0a33
> > > > --- /dev/null
> > > > +++ b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > > @@ -0,0 +1,103 @@
> > > > +Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management Unit)
> > > > +
> > > > +Samsung's Exynos architecture contains System MMU that enables scattered
> > > > +physical memory chunks visible as a contiguous region to DMA-capable peripheral
> > > > +devices like MFC, FIMC, FIMD, GScaler, FIMC-IS and so forth.
> > > > +
> > > > +System MMU is a sort of IOMMU and support identical translation table format to
> > > > +ARMv7 translation tables with minimum set of page properties including access
> > > > +permissions, shareability and security protection. In addition, System MMU has
> > > > +another capabilities like L2 TLB or block-fetch buffers to minimize translation
> > > > +latency.
> > > > +
> > > > +A System MMU is dedicated to a single master peripheral device.  Thus, it is
> > > > +important to specify the correct System MMU in the device node of its master
> > > > +device. Whereas a System MMU is dedicated to a master device, the master device
> > > > +may have more than one System MMU.
> > > > +
> > > > +Required properties:
> > > > +- compatible: Should be "samsung,exynos4210-sysmmu"
> > > > +- reg: A tuple of base address and size of System MMU registers.
> > > > +- interrupt-parent: The phandle of the interrupt controller of System MMU
> > > > +- interrupts: A tuple of numbers that indicates the interrupt source.
> > > > +- clock-names: Should be "sysmmu" if the System MMU is needed to gate its clock.
> > > > +               Please refer to the following documents:
> > > > +	       Documentation/devicetree/bindings/clock/clock-bindings.txt
> > > > +	       Documentation/devicetree/bindings/clock/exynos4-clock.txt
> > > > +	       Documentation/devicetree/bindings/clock/exynos5250-clock.txt
> > > > +	       Optional "master" if the clock to the System MMU is gated by
> > > > +	       another gate clock other than "sysmmu". The System MMU driver
> > > > +	       sets "master" the parent of "sysmmu".
> > > > +	       Exynos4 SoCs, there needs no "master" clocks.
> > > > +	       Exynos5 SoCs, some System MMUs must have "master" clocks.
> > > > +- clocks: Required if the System MMU is needed to gate its clock.
> > > > +	  Please refer to the documents listed above.
> > > > +- samsung,power-domain: Required if the System MMU is needed to gate its power.
> > > > +	  Please refer to the following document:
> > > > +	  Documentation/devicetree/bindings/arm/exynos/power_domain.txt
> > > > +
> > > > +Required properties for the master peripheral devices:
> > > > +- iommu: phandles to the System MMUs of the device
> > > > +
> > > > +Examples:
> > > > +A System MMU is dedicated to a single master device.
> > > > +	gsc_0:  gsc@0x13e00000 {
> > > > +		compatible = "samsung,exynos5-gsc";
> > > > +		reg = <0x13e00000 0x1000>;
> > > > +		interrupts = <0 85 0>;
> > > > +		samsung,power-domain = <&pd_gsc>;
> > > > +		clocks = <&clock 256>;
> > > > +		clock-names = "gscl";
> > > > +		iommu = <&sysmmu_gsc1>;
> > > > +	};
> > > > +
> > > > +	sysmmu_gsc0: sysmmu@13E80000 {
> > > > +		compatible = "samsung,exynos4210-sysmmu";
> > > > +		reg = <0x13E80000 0x1000>;
> > > > +		interrupt-parent = <&combiner>;
> > > > +		interrupt-names = "sysmmu-gsc0";
> > > > +		interrupts = <2 0>;
> > > > +		clock-names = "sysmmu", "master";
> > > > +		clocks = <&clock 262>, <&clock 256>;
> > > > +		samsung,power-domain = <&pd_gsc>;
> > > > +		status = "ok";
> > > > +	};
> > > > +
> > > > +MFC has 2 System MMUs for each port that MFC is attached. Thus it seems natural
> > > > +to define 2 System MMUs for each port of the MFC:
> > >
> > > Marek Szyprowski (added to cc:) has a patch fixing MFC to create separate
> > > mfc_l and mfc_r devices (like it was in the past). Using this patch it
> > > would be possible to bind sysmmu_mfc_l to mfc_l device and sysmmu_mfc_r to
> > > mfc_r device. This probably also requires adding some MFC specific handling
> > > in a device tree node and to the new master's device PM ops (in patch #10)
> > > as previously (in our trees) sysmmu_mfc r device was set as parent of
> > > sysmmu_mfc_l device which in turn was a parent for main MFC device (to make
> > > runtime Power Management work). However because MFC is the only device
> > > requiring use of multiple System MMUs above changes would allow us (unless
> > > I'm missing something?) to use just one System MMU device per struct
> > > exynos_iommu_client instance (making driver a lot simpler).
> > >
> >
> > Does it mean that we can make the exynos-iommu driver simpler
> > with Marek Szyprowski's patch?
>
> I think so and you probably need to change MFC handling anyway because
> MFC driver does DMA allocations per mfc_l/mfc_r devices and not per main
> device (at least in the upstream kernels).
>
> [ Marek, could you please resfresh and post your patch on the list? ]

My proposal for cleaning up MFC's bindings is available here:

http://thread.gmane.org/gmane.linux.kernel.samsung-soc/21536/

> BTW There is an additional problem with combining System MMU devices per
> one main device - it limits available address space (which in case of MFC
> is very limited by hardware design).
>
> > It is welcome but I don't think it covers all topologies of System MMU and
> > master H/W. Those are getting more complex.
>
> Could you please be more specific? I know about FIMC ISP subsystem but
> it doesn't require combining System MMUs. Are there any other examples of
> complex System MMU + master H/W topologies?
>
> Anyway I think that System MMUs should not be combined (as it is done in
> patch #10) and should be binded per "memport" devices and not per main
> device (as done in this patch).

Best regards
-- 
Marek Szyprowski
Samsung R&D Institute Poland



^ permalink raw reply	[flat|nested] 65+ messages in thread

* [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-08-05 13:34         ` Marek Szyprowski
  0 siblings, 0 replies; 65+ messages in thread
From: Marek Szyprowski @ 2013-08-05 13:34 UTC (permalink / raw)
  To: linux-arm-kernel

Hello,

On 8/5/2013 3:09 PM, Bartlomiej Zolnierkiewicz wrote:
> On Monday, August 05, 2013 08:16:40 PM Cho KyongHo wrote:
> > > -----Original Message-----
> > > From: Bartlomiej Zolnierkiewicz [mailto:b.zolnierkie at samsung.com]
> > > Sent: Saturday, August 03, 2013 2:14 AM
> > >
> > > Hi,
> > >
> > > On Friday, July 26, 2013 08:28:19 PM Cho KyongHo wrote:
> > > > Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
> > > > ---
> > > >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
> > > >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
> > > >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
> > > >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
> > > >  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
> > > >  5 files changed, 617 insertions(+), 0 deletions(-)
> > > >  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > >
> > > > diff --git a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > > b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > > new file mode 100644
> > > > index 0000000..92f0a33
> > > > --- /dev/null
> > > > +++ b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > > @@ -0,0 +1,103 @@
> > > > +Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management Unit)
> > > > +
> > > > +Samsung's Exynos architecture contains System MMU that enables scattered
> > > > +physical memory chunks visible as a contiguous region to DMA-capable peripheral
> > > > +devices like MFC, FIMC, FIMD, GScaler, FIMC-IS and so forth.
> > > > +
> > > > +System MMU is a sort of IOMMU and support identical translation table format to
> > > > +ARMv7 translation tables with minimum set of page properties including access
> > > > +permissions, shareability and security protection. In addition, System MMU has
> > > > +another capabilities like L2 TLB or block-fetch buffers to minimize translation
> > > > +latency.
> > > > +
> > > > +A System MMU is dedicated to a single master peripheral device.  Thus, it is
> > > > +important to specify the correct System MMU in the device node of its master
> > > > +device. Whereas a System MMU is dedicated to a master device, the master device
> > > > +may have more than one System MMU.
> > > > +
> > > > +Required properties:
> > > > +- compatible: Should be "samsung,exynos4210-sysmmu"
> > > > +- reg: A tuple of base address and size of System MMU registers.
> > > > +- interrupt-parent: The phandle of the interrupt controller of System MMU
> > > > +- interrupts: A tuple of numbers that indicates the interrupt source.
> > > > +- clock-names: Should be "sysmmu" if the System MMU is needed to gate its clock.
> > > > +               Please refer to the following documents:
> > > > +	       Documentation/devicetree/bindings/clock/clock-bindings.txt
> > > > +	       Documentation/devicetree/bindings/clock/exynos4-clock.txt
> > > > +	       Documentation/devicetree/bindings/clock/exynos5250-clock.txt
> > > > +	       Optional "master" if the clock to the System MMU is gated by
> > > > +	       another gate clock other than "sysmmu". The System MMU driver
> > > > +	       sets "master" the parent of "sysmmu".
> > > > +	       Exynos4 SoCs, there needs no "master" clocks.
> > > > +	       Exynos5 SoCs, some System MMUs must have "master" clocks.
> > > > +- clocks: Required if the System MMU is needed to gate its clock.
> > > > +	  Please refer to the documents listed above.
> > > > +- samsung,power-domain: Required if the System MMU is needed to gate its power.
> > > > +	  Please refer to the following document:
> > > > +	  Documentation/devicetree/bindings/arm/exynos/power_domain.txt
> > > > +
> > > > +Required properties for the master peripheral devices:
> > > > +- iommu: phandles to the System MMUs of the device
> > > > +
> > > > +Examples:
> > > > +A System MMU is dedicated to a single master device.
> > > > +	gsc_0:  gsc at 0x13e00000 {
> > > > +		compatible = "samsung,exynos5-gsc";
> > > > +		reg = <0x13e00000 0x1000>;
> > > > +		interrupts = <0 85 0>;
> > > > +		samsung,power-domain = <&pd_gsc>;
> > > > +		clocks = <&clock 256>;
> > > > +		clock-names = "gscl";
> > > > +		iommu = <&sysmmu_gsc1>;
> > > > +	};
> > > > +
> > > > +	sysmmu_gsc0: sysmmu at 13E80000 {
> > > > +		compatible = "samsung,exynos4210-sysmmu";
> > > > +		reg = <0x13E80000 0x1000>;
> > > > +		interrupt-parent = <&combiner>;
> > > > +		interrupt-names = "sysmmu-gsc0";
> > > > +		interrupts = <2 0>;
> > > > +		clock-names = "sysmmu", "master";
> > > > +		clocks = <&clock 262>, <&clock 256>;
> > > > +		samsung,power-domain = <&pd_gsc>;
> > > > +		status = "ok";
> > > > +	};
> > > > +
> > > > +MFC has 2 System MMUs for each port that MFC is attached. Thus it seems natural
> > > > +to define 2 System MMUs for each port of the MFC:
> > >
> > > Marek Szyprowski (added to cc:) has a patch fixing MFC to create separate
> > > mfc_l and mfc_r devices (like it was in the past). Using this patch it
> > > would be possible to bind sysmmu_mfc_l to mfc_l device and sysmmu_mfc_r to
> > > mfc_r device. This probably also requires adding some MFC specific handling
> > > in a device tree node and to the new master's device PM ops (in patch #10)
> > > as previously (in our trees) sysmmu_mfc r device was set as parent of
> > > sysmmu_mfc_l device which in turn was a parent for main MFC device (to make
> > > runtime Power Management work). However because MFC is the only device
> > > requiring use of multiple System MMUs above changes would allow us (unless
> > > I'm missing something?) to use just one System MMU device per struct
> > > exynos_iommu_client instance (making driver a lot simpler).
> > >
> >
> > Does it mean that we can make the exynos-iommu driver simpler
> > with Marek Szyprowski's patch?
>
> I think so and you probably need to change MFC handling anyway because
> MFC driver does DMA allocations per mfc_l/mfc_r devices and not per main
> device (at least in the upstream kernels).
>
> [ Marek, could you please resfresh and post your patch on the list? ]

My proposal for cleaning up MFC's bindings is available here:

http://thread.gmane.org/gmane.linux.kernel.samsung-soc/21536/

> BTW There is an additional problem with combining System MMU devices per
> one main device - it limits available address space (which in case of MFC
> is very limited by hardware design).
>
> > It is welcome but I don't think it covers all topologies of System MMU and
> > master H/W. Those are getting more complex.
>
> Could you please be more specific? I know about FIMC ISP subsystem but
> it doesn't require combining System MMUs. Are there any other examples of
> complex System MMU + master H/W topologies?
>
> Anyway I think that System MMUs should not be combined (as it is done in
> patch #10) and should be binded per "memport" devices and not per main
> device (as done in this patch).

Best regards
-- 
Marek Szyprowski
Samsung R&D Institute Poland

^ permalink raw reply	[flat|nested] 65+ messages in thread

* RE: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
  2013-08-05 13:09       ` Bartlomiej Zolnierkiewicz
  (?)
@ 2013-08-06  9:54         ` Cho KyongHo
  -1 siblings, 0 replies; 65+ messages in thread
From: Cho KyongHo @ 2013-08-06  9:54 UTC (permalink / raw)
  To: 'Bartlomiej Zolnierkiewicz'
  Cc: 'Linux ARM Kernel', 'Linux IOMMU',
	'Linux Kernel', 'Linux Samsung SOC',
	'Hyunwoong Kim', 'Joerg Roedel',
	'Kukjin Kim', 'Prathyush', 'Rahul Sharma',
	'Subash Patel', 'Keyyoung Park',
	'Grant Grundler', 'Antonios Motakis',
	kvmarm, 'Sachin Kamat',
	m.szyprowski

> -----Original Message-----
> From: Bartlomiej Zolnierkiewicz [mailto:b.zolnierkie@samsung.com]
> Sent: Monday, August 05, 2013 10:10 PM
> 
> On Monday, August 05, 2013 08:16:40 PM Cho KyongHo wrote:
> > > -----Original Message-----
> > > From: Bartlomiej Zolnierkiewicz [mailto:b.zolnierkie@samsung.com]
> > > Sent: Saturday, August 03, 2013 2:14 AM
> > >
> > > Hi,
> > >
> > > On Friday, July 26, 2013 08:28:19 PM Cho KyongHo wrote:
> > > > Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
> > > > ---
> > > >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
> > > >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
> > > >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
> > > >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
> > > >  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
> > > >  5 files changed, 617 insertions(+), 0 deletions(-)
> > > >  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > >
> > > > diff --git a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > > b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > > new file mode 100644
> > > > index 0000000..92f0a33
> > > > --- /dev/null
> > > > +++ b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > > @@ -0,0 +1,103 @@
> > > > +Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management Unit)
> > > > +
> > > > +Samsung's Exynos architecture contains System MMU that enables scattered
> > > > +physical memory chunks visible as a contiguous region to DMA-capable peripheral
> > > > +devices like MFC, FIMC, FIMD, GScaler, FIMC-IS and so forth.
> > > > +
> > > > +System MMU is a sort of IOMMU and support identical translation table format to
> > > > +ARMv7 translation tables with minimum set of page properties including access
> > > > +permissions, shareability and security protection. In addition, System MMU has
> > > > +another capabilities like L2 TLB or block-fetch buffers to minimize translation
> > > > +latency.
> > > > +
> > > > +A System MMU is dedicated to a single master peripheral device.  Thus, it is
> > > > +important to specify the correct System MMU in the device node of its master
> > > > +device. Whereas a System MMU is dedicated to a master device, the master device
> > > > +may have more than one System MMU.
> > > > +
> > > > +Required properties:
> > > > +- compatible: Should be "samsung,exynos4210-sysmmu"
> > > > +- reg: A tuple of base address and size of System MMU registers.
> > > > +- interrupt-parent: The phandle of the interrupt controller of System MMU
> > > > +- interrupts: A tuple of numbers that indicates the interrupt source.
> > > > +- clock-names: Should be "sysmmu" if the System MMU is needed to gate its clock.
> > > > +               Please refer to the following documents:
> > > > +	       Documentation/devicetree/bindings/clock/clock-bindings.txt
> > > > +	       Documentation/devicetree/bindings/clock/exynos4-clock.txt
> > > > +	       Documentation/devicetree/bindings/clock/exynos5250-clock.txt
> > > > +	       Optional "master" if the clock to the System MMU is gated by
> > > > +	       another gate clock other than "sysmmu". The System MMU driver
> > > > +	       sets "master" the parent of "sysmmu".
> > > > +	       Exynos4 SoCs, there needs no "master" clocks.
> > > > +	       Exynos5 SoCs, some System MMUs must have "master" clocks.
> > > > +- clocks: Required if the System MMU is needed to gate its clock.
> > > > +	  Please refer to the documents listed above.
> > > > +- samsung,power-domain: Required if the System MMU is needed to gate its power.
> > > > +	  Please refer to the following document:
> > > > +	  Documentation/devicetree/bindings/arm/exynos/power_domain.txt
> > > > +
> > > > +Required properties for the master peripheral devices:
> > > > +- iommu: phandles to the System MMUs of the device
> > > > +
> > > > +Examples:
> > > > +A System MMU is dedicated to a single master device.
> > > > +	gsc_0:  gsc@0x13e00000 {
> > > > +		compatible = "samsung,exynos5-gsc";
> > > > +		reg = <0x13e00000 0x1000>;
> > > > +		interrupts = <0 85 0>;
> > > > +		samsung,power-domain = <&pd_gsc>;
> > > > +		clocks = <&clock 256>;
> > > > +		clock-names = "gscl";
> > > > +		iommu = <&sysmmu_gsc1>;
> > > > +	};
> > > > +
> > > > +	sysmmu_gsc0: sysmmu@13E80000 {
> > > > +		compatible = "samsung,exynos4210-sysmmu";
> > > > +		reg = <0x13E80000 0x1000>;
> > > > +		interrupt-parent = <&combiner>;
> > > > +		interrupt-names = "sysmmu-gsc0";
> > > > +		interrupts = <2 0>;
> > > > +		clock-names = "sysmmu", "master";
> > > > +		clocks = <&clock 262>, <&clock 256>;
> > > > +		samsung,power-domain = <&pd_gsc>;
> > > > +		status = "ok";
> > > > +	};
> > > > +
> > > > +MFC has 2 System MMUs for each port that MFC is attached. Thus it seems natural
> > > > +to define 2 System MMUs for each port of the MFC:
> > >
> > > Marek Szyprowski (added to cc:) has a patch fixing MFC to create separate
> > > mfc_l and mfc_r devices (like it was in the past). Using this patch it
> > > would be possible to bind sysmmu_mfc_l to mfc_l device and sysmmu_mfc_r to
> > > mfc_r device. This probably also requires adding some MFC specific handling
> > > in a device tree node and to the new master's device PM ops (in patch #10)
> > > as previously (in our trees) sysmmu_mfc r device was set as parent of
> > > sysmmu_mfc_l device which in turn was a parent for main MFC device (to make
> > > runtime Power Management work). However because MFC is the only device
> > > requiring use of multiple System MMUs above changes would allow us (unless
> > > I'm missing something?) to use just one System MMU device per struct
> > > exynos_iommu_client instance (making driver a lot simpler).
> > >
> >
> > Does it mean that we can make the exynos-iommu driver simpler
> > with Marek Szyprowski's patch?
> 
> I think so and you probably need to change MFC handling anyway because
> MFC driver does DMA allocations per mfc_l/mfc_r devices and not per main
> device (at least in the upstream kernels).
> 
> [ Marek, could you please resfresh and post your patch on the list? ]
> 
> BTW There is an additional problem with combining System MMU devices per
> one main device - it limits available address space (which in case of MFC
> is very limited by hardware design).
> 
> > It is welcome but I don't think it covers all topologies of System MMU and
> > master H/W. Those are getting more complex.
> 
> Could you please be more specific? I know about FIMC ISP subsystem but
> it doesn't require combining System MMUs. Are there any other examples of
> complex System MMU + master H/W topologies?

I meant a lot of System MMUs in FIMC-IS subsystem.
A big challenge to System MMU configuration is FIMC-IS as you mentioned.
Since I don't know how the driver of FIMC-IS controls its H/W,
I made the System MMU driver to configure System MMUs flexibly.

> 
> Anyway I think that System MMUs should not be combined (as it is done in
> patch #10) and should be binded per "memport" devices and not per main
> device (as done in this patch).
> 

Ok.
I will make it them as you advised.
And we can make the driver better gradually.

Thank you.

KyongHo.
> Best regards,
> --
> Bartlomiej Zolnierkiewicz
> Samsung R&D Institute Poland
> Samsung Electronics


^ permalink raw reply	[flat|nested] 65+ messages in thread

* RE: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-08-06  9:54         ` Cho KyongHo
  0 siblings, 0 replies; 65+ messages in thread
From: Cho KyongHo @ 2013-08-06  9:54 UTC (permalink / raw)
  To: 'Bartlomiej Zolnierkiewicz'
  Cc: 'Linux Samsung SOC', 'Hyunwoong Kim',
	'Prathyush', 'Grant Grundler',
	'Keyyoung Park', 'Subash Patel',
	'Linux Kernel', 'Sachin Kamat',
	'Linux IOMMU', 'Kukjin Kim',
	'Antonios Motakis',
	kvmarm-FPEHb7Xf0XXUo1n7N8X6UoWGPAHP3yOg,
	'Linux ARM Kernel', 'Rahul Sharma'

> -----Original Message-----
> From: Bartlomiej Zolnierkiewicz [mailto:b.zolnierkie-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org]
> Sent: Monday, August 05, 2013 10:10 PM
> 
> On Monday, August 05, 2013 08:16:40 PM Cho KyongHo wrote:
> > > -----Original Message-----
> > > From: Bartlomiej Zolnierkiewicz [mailto:b.zolnierkie-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org]
> > > Sent: Saturday, August 03, 2013 2:14 AM
> > >
> > > Hi,
> > >
> > > On Friday, July 26, 2013 08:28:19 PM Cho KyongHo wrote:
> > > > Signed-off-by: Cho KyongHo <pullip.cho-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
> > > > ---
> > > >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
> > > >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
> > > >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
> > > >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
> > > >  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
> > > >  5 files changed, 617 insertions(+), 0 deletions(-)
> > > >  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > >
> > > > diff --git a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > > b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > > new file mode 100644
> > > > index 0000000..92f0a33
> > > > --- /dev/null
> > > > +++ b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > > @@ -0,0 +1,103 @@
> > > > +Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management Unit)
> > > > +
> > > > +Samsung's Exynos architecture contains System MMU that enables scattered
> > > > +physical memory chunks visible as a contiguous region to DMA-capable peripheral
> > > > +devices like MFC, FIMC, FIMD, GScaler, FIMC-IS and so forth.
> > > > +
> > > > +System MMU is a sort of IOMMU and support identical translation table format to
> > > > +ARMv7 translation tables with minimum set of page properties including access
> > > > +permissions, shareability and security protection. In addition, System MMU has
> > > > +another capabilities like L2 TLB or block-fetch buffers to minimize translation
> > > > +latency.
> > > > +
> > > > +A System MMU is dedicated to a single master peripheral device.  Thus, it is
> > > > +important to specify the correct System MMU in the device node of its master
> > > > +device. Whereas a System MMU is dedicated to a master device, the master device
> > > > +may have more than one System MMU.
> > > > +
> > > > +Required properties:
> > > > +- compatible: Should be "samsung,exynos4210-sysmmu"
> > > > +- reg: A tuple of base address and size of System MMU registers.
> > > > +- interrupt-parent: The phandle of the interrupt controller of System MMU
> > > > +- interrupts: A tuple of numbers that indicates the interrupt source.
> > > > +- clock-names: Should be "sysmmu" if the System MMU is needed to gate its clock.
> > > > +               Please refer to the following documents:
> > > > +	       Documentation/devicetree/bindings/clock/clock-bindings.txt
> > > > +	       Documentation/devicetree/bindings/clock/exynos4-clock.txt
> > > > +	       Documentation/devicetree/bindings/clock/exynos5250-clock.txt
> > > > +	       Optional "master" if the clock to the System MMU is gated by
> > > > +	       another gate clock other than "sysmmu". The System MMU driver
> > > > +	       sets "master" the parent of "sysmmu".
> > > > +	       Exynos4 SoCs, there needs no "master" clocks.
> > > > +	       Exynos5 SoCs, some System MMUs must have "master" clocks.
> > > > +- clocks: Required if the System MMU is needed to gate its clock.
> > > > +	  Please refer to the documents listed above.
> > > > +- samsung,power-domain: Required if the System MMU is needed to gate its power.
> > > > +	  Please refer to the following document:
> > > > +	  Documentation/devicetree/bindings/arm/exynos/power_domain.txt
> > > > +
> > > > +Required properties for the master peripheral devices:
> > > > +- iommu: phandles to the System MMUs of the device
> > > > +
> > > > +Examples:
> > > > +A System MMU is dedicated to a single master device.
> > > > +	gsc_0:  gsc@0x13e00000 {
> > > > +		compatible = "samsung,exynos5-gsc";
> > > > +		reg = <0x13e00000 0x1000>;
> > > > +		interrupts = <0 85 0>;
> > > > +		samsung,power-domain = <&pd_gsc>;
> > > > +		clocks = <&clock 256>;
> > > > +		clock-names = "gscl";
> > > > +		iommu = <&sysmmu_gsc1>;
> > > > +	};
> > > > +
> > > > +	sysmmu_gsc0: sysmmu@13E80000 {
> > > > +		compatible = "samsung,exynos4210-sysmmu";
> > > > +		reg = <0x13E80000 0x1000>;
> > > > +		interrupt-parent = <&combiner>;
> > > > +		interrupt-names = "sysmmu-gsc0";
> > > > +		interrupts = <2 0>;
> > > > +		clock-names = "sysmmu", "master";
> > > > +		clocks = <&clock 262>, <&clock 256>;
> > > > +		samsung,power-domain = <&pd_gsc>;
> > > > +		status = "ok";
> > > > +	};
> > > > +
> > > > +MFC has 2 System MMUs for each port that MFC is attached. Thus it seems natural
> > > > +to define 2 System MMUs for each port of the MFC:
> > >
> > > Marek Szyprowski (added to cc:) has a patch fixing MFC to create separate
> > > mfc_l and mfc_r devices (like it was in the past). Using this patch it
> > > would be possible to bind sysmmu_mfc_l to mfc_l device and sysmmu_mfc_r to
> > > mfc_r device. This probably also requires adding some MFC specific handling
> > > in a device tree node and to the new master's device PM ops (in patch #10)
> > > as previously (in our trees) sysmmu_mfc r device was set as parent of
> > > sysmmu_mfc_l device which in turn was a parent for main MFC device (to make
> > > runtime Power Management work). However because MFC is the only device
> > > requiring use of multiple System MMUs above changes would allow us (unless
> > > I'm missing something?) to use just one System MMU device per struct
> > > exynos_iommu_client instance (making driver a lot simpler).
> > >
> >
> > Does it mean that we can make the exynos-iommu driver simpler
> > with Marek Szyprowski's patch?
> 
> I think so and you probably need to change MFC handling anyway because
> MFC driver does DMA allocations per mfc_l/mfc_r devices and not per main
> device (at least in the upstream kernels).
> 
> [ Marek, could you please resfresh and post your patch on the list? ]
> 
> BTW There is an additional problem with combining System MMU devices per
> one main device - it limits available address space (which in case of MFC
> is very limited by hardware design).
> 
> > It is welcome but I don't think it covers all topologies of System MMU and
> > master H/W. Those are getting more complex.
> 
> Could you please be more specific? I know about FIMC ISP subsystem but
> it doesn't require combining System MMUs. Are there any other examples of
> complex System MMU + master H/W topologies?

I meant a lot of System MMUs in FIMC-IS subsystem.
A big challenge to System MMU configuration is FIMC-IS as you mentioned.
Since I don't know how the driver of FIMC-IS controls its H/W,
I made the System MMU driver to configure System MMUs flexibly.

> 
> Anyway I think that System MMUs should not be combined (as it is done in
> patch #10) and should be binded per "memport" devices and not per main
> device (as done in this patch).
> 

Ok.
I will make it them as you advised.
And we can make the driver better gradually.

Thank you.

KyongHo.
> Best regards,
> --
> Bartlomiej Zolnierkiewicz
> Samsung R&D Institute Poland
> Samsung Electronics

^ permalink raw reply	[flat|nested] 65+ messages in thread

* [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-08-06  9:54         ` Cho KyongHo
  0 siblings, 0 replies; 65+ messages in thread
From: Cho KyongHo @ 2013-08-06  9:54 UTC (permalink / raw)
  To: linux-arm-kernel

> -----Original Message-----
> From: Bartlomiej Zolnierkiewicz [mailto:b.zolnierkie at samsung.com]
> Sent: Monday, August 05, 2013 10:10 PM
> 
> On Monday, August 05, 2013 08:16:40 PM Cho KyongHo wrote:
> > > -----Original Message-----
> > > From: Bartlomiej Zolnierkiewicz [mailto:b.zolnierkie at samsung.com]
> > > Sent: Saturday, August 03, 2013 2:14 AM
> > >
> > > Hi,
> > >
> > > On Friday, July 26, 2013 08:28:19 PM Cho KyongHo wrote:
> > > > Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
> > > > ---
> > > >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
> > > >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
> > > >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
> > > >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
> > > >  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
> > > >  5 files changed, 617 insertions(+), 0 deletions(-)
> > > >  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > >
> > > > diff --git a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > > b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > > new file mode 100644
> > > > index 0000000..92f0a33
> > > > --- /dev/null
> > > > +++ b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > > @@ -0,0 +1,103 @@
> > > > +Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management Unit)
> > > > +
> > > > +Samsung's Exynos architecture contains System MMU that enables scattered
> > > > +physical memory chunks visible as a contiguous region to DMA-capable peripheral
> > > > +devices like MFC, FIMC, FIMD, GScaler, FIMC-IS and so forth.
> > > > +
> > > > +System MMU is a sort of IOMMU and support identical translation table format to
> > > > +ARMv7 translation tables with minimum set of page properties including access
> > > > +permissions, shareability and security protection. In addition, System MMU has
> > > > +another capabilities like L2 TLB or block-fetch buffers to minimize translation
> > > > +latency.
> > > > +
> > > > +A System MMU is dedicated to a single master peripheral device.  Thus, it is
> > > > +important to specify the correct System MMU in the device node of its master
> > > > +device. Whereas a System MMU is dedicated to a master device, the master device
> > > > +may have more than one System MMU.
> > > > +
> > > > +Required properties:
> > > > +- compatible: Should be "samsung,exynos4210-sysmmu"
> > > > +- reg: A tuple of base address and size of System MMU registers.
> > > > +- interrupt-parent: The phandle of the interrupt controller of System MMU
> > > > +- interrupts: A tuple of numbers that indicates the interrupt source.
> > > > +- clock-names: Should be "sysmmu" if the System MMU is needed to gate its clock.
> > > > +               Please refer to the following documents:
> > > > +	       Documentation/devicetree/bindings/clock/clock-bindings.txt
> > > > +	       Documentation/devicetree/bindings/clock/exynos4-clock.txt
> > > > +	       Documentation/devicetree/bindings/clock/exynos5250-clock.txt
> > > > +	       Optional "master" if the clock to the System MMU is gated by
> > > > +	       another gate clock other than "sysmmu". The System MMU driver
> > > > +	       sets "master" the parent of "sysmmu".
> > > > +	       Exynos4 SoCs, there needs no "master" clocks.
> > > > +	       Exynos5 SoCs, some System MMUs must have "master" clocks.
> > > > +- clocks: Required if the System MMU is needed to gate its clock.
> > > > +	  Please refer to the documents listed above.
> > > > +- samsung,power-domain: Required if the System MMU is needed to gate its power.
> > > > +	  Please refer to the following document:
> > > > +	  Documentation/devicetree/bindings/arm/exynos/power_domain.txt
> > > > +
> > > > +Required properties for the master peripheral devices:
> > > > +- iommu: phandles to the System MMUs of the device
> > > > +
> > > > +Examples:
> > > > +A System MMU is dedicated to a single master device.
> > > > +	gsc_0:  gsc at 0x13e00000 {
> > > > +		compatible = "samsung,exynos5-gsc";
> > > > +		reg = <0x13e00000 0x1000>;
> > > > +		interrupts = <0 85 0>;
> > > > +		samsung,power-domain = <&pd_gsc>;
> > > > +		clocks = <&clock 256>;
> > > > +		clock-names = "gscl";
> > > > +		iommu = <&sysmmu_gsc1>;
> > > > +	};
> > > > +
> > > > +	sysmmu_gsc0: sysmmu at 13E80000 {
> > > > +		compatible = "samsung,exynos4210-sysmmu";
> > > > +		reg = <0x13E80000 0x1000>;
> > > > +		interrupt-parent = <&combiner>;
> > > > +		interrupt-names = "sysmmu-gsc0";
> > > > +		interrupts = <2 0>;
> > > > +		clock-names = "sysmmu", "master";
> > > > +		clocks = <&clock 262>, <&clock 256>;
> > > > +		samsung,power-domain = <&pd_gsc>;
> > > > +		status = "ok";
> > > > +	};
> > > > +
> > > > +MFC has 2 System MMUs for each port that MFC is attached. Thus it seems natural
> > > > +to define 2 System MMUs for each port of the MFC:
> > >
> > > Marek Szyprowski (added to cc:) has a patch fixing MFC to create separate
> > > mfc_l and mfc_r devices (like it was in the past). Using this patch it
> > > would be possible to bind sysmmu_mfc_l to mfc_l device and sysmmu_mfc_r to
> > > mfc_r device. This probably also requires adding some MFC specific handling
> > > in a device tree node and to the new master's device PM ops (in patch #10)
> > > as previously (in our trees) sysmmu_mfc r device was set as parent of
> > > sysmmu_mfc_l device which in turn was a parent for main MFC device (to make
> > > runtime Power Management work). However because MFC is the only device
> > > requiring use of multiple System MMUs above changes would allow us (unless
> > > I'm missing something?) to use just one System MMU device per struct
> > > exynos_iommu_client instance (making driver a lot simpler).
> > >
> >
> > Does it mean that we can make the exynos-iommu driver simpler
> > with Marek Szyprowski's patch?
> 
> I think so and you probably need to change MFC handling anyway because
> MFC driver does DMA allocations per mfc_l/mfc_r devices and not per main
> device (at least in the upstream kernels).
> 
> [ Marek, could you please resfresh and post your patch on the list? ]
> 
> BTW There is an additional problem with combining System MMU devices per
> one main device - it limits available address space (which in case of MFC
> is very limited by hardware design).
> 
> > It is welcome but I don't think it covers all topologies of System MMU and
> > master H/W. Those are getting more complex.
> 
> Could you please be more specific? I know about FIMC ISP subsystem but
> it doesn't require combining System MMUs. Are there any other examples of
> complex System MMU + master H/W topologies?

I meant a lot of System MMUs in FIMC-IS subsystem.
A big challenge to System MMU configuration is FIMC-IS as you mentioned.
Since I don't know how the driver of FIMC-IS controls its H/W,
I made the System MMU driver to configure System MMUs flexibly.

> 
> Anyway I think that System MMUs should not be combined (as it is done in
> patch #10) and should be binded per "memport" devices and not per main
> device (as done in this patch).
> 

Ok.
I will make it them as you advised.
And we can make the driver better gradually.

Thank you.

KyongHo.
> Best regards,
> --
> Bartlomiej Zolnierkiewicz
> Samsung R&D Institute Poland
> Samsung Electronics

^ permalink raw reply	[flat|nested] 65+ messages in thread

* Re: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
  2013-08-06  9:54         ` Cho KyongHo
@ 2013-08-06 13:17           ` Marek Szyprowski
  -1 siblings, 0 replies; 65+ messages in thread
From: Marek Szyprowski @ 2013-08-06 13:17 UTC (permalink / raw)
  To: Cho KyongHo
  Cc: 'Bartlomiej Zolnierkiewicz', 'Linux ARM Kernel',
	'Linux IOMMU', 'Linux Kernel',
	'Linux Samsung SOC', 'Hyunwoong Kim',
	'Joerg Roedel', 'Kukjin Kim', 'Prathyush',
	'Rahul Sharma', 'Subash Patel',
	'Keyyoung Park', 'Grant Grundler',
	'Antonios Motakis', kvmarm, 'Sachin Kamat'

Hello,

On 8/6/2013 11:54 AM, Cho KyongHo wrote:
> > -----Original Message-----
> > From: Bartlomiej Zolnierkiewicz [mailto:b.zolnierkie@samsung.com]
> > Sent: Monday, August 05, 2013 10:10 PM
> >
> > On Monday, August 05, 2013 08:16:40 PM Cho KyongHo wrote:
> > > > -----Original Message-----
> > > > From: Bartlomiej Zolnierkiewicz [mailto:b.zolnierkie@samsung.com]
> > > > Sent: Saturday, August 03, 2013 2:14 AM
> > > >
> > > > Hi,
> > > >
> > > > On Friday, July 26, 2013 08:28:19 PM Cho KyongHo wrote:
> > > > > Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
> > > > > ---
> > > > >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
> > > > >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
> > > > >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
> > > > >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
> > > > >  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
> > > > >  5 files changed, 617 insertions(+), 0 deletions(-)
> > > > >  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > > >
> > > > > diff --git a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > > > b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > > > new file mode 100644
> > > > > index 0000000..92f0a33
> > > > > --- /dev/null
> > > > > +++ b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > > > @@ -0,0 +1,103 @@
> > > > > +Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management Unit)
> > > > > +
> > > > > +Samsung's Exynos architecture contains System MMU that enables scattered
> > > > > +physical memory chunks visible as a contiguous region to DMA-capable peripheral
> > > > > +devices like MFC, FIMC, FIMD, GScaler, FIMC-IS and so forth.
> > > > > +
> > > > > +System MMU is a sort of IOMMU and support identical translation table format to
> > > > > +ARMv7 translation tables with minimum set of page properties including access
> > > > > +permissions, shareability and security protection. In addition, System MMU has
> > > > > +another capabilities like L2 TLB or block-fetch buffers to minimize translation
> > > > > +latency.
> > > > > +
> > > > > +A System MMU is dedicated to a single master peripheral device.  Thus, it is
> > > > > +important to specify the correct System MMU in the device node of its master
> > > > > +device. Whereas a System MMU is dedicated to a master device, the master device
> > > > > +may have more than one System MMU.
> > > > > +
> > > > > +Required properties:
> > > > > +- compatible: Should be "samsung,exynos4210-sysmmu"
> > > > > +- reg: A tuple of base address and size of System MMU registers.
> > > > > +- interrupt-parent: The phandle of the interrupt controller of System MMU
> > > > > +- interrupts: A tuple of numbers that indicates the interrupt source.
> > > > > +- clock-names: Should be "sysmmu" if the System MMU is needed to gate its clock.
> > > > > +               Please refer to the following documents:
> > > > > +	       Documentation/devicetree/bindings/clock/clock-bindings.txt
> > > > > +	       Documentation/devicetree/bindings/clock/exynos4-clock.txt
> > > > > +	       Documentation/devicetree/bindings/clock/exynos5250-clock.txt
> > > > > +	       Optional "master" if the clock to the System MMU is gated by
> > > > > +	       another gate clock other than "sysmmu". The System MMU driver
> > > > > +	       sets "master" the parent of "sysmmu".
> > > > > +	       Exynos4 SoCs, there needs no "master" clocks.
> > > > > +	       Exynos5 SoCs, some System MMUs must have "master" clocks.
> > > > > +- clocks: Required if the System MMU is needed to gate its clock.
> > > > > +	  Please refer to the documents listed above.
> > > > > +- samsung,power-domain: Required if the System MMU is needed to gate its power.
> > > > > +	  Please refer to the following document:
> > > > > +	  Documentation/devicetree/bindings/arm/exynos/power_domain.txt
> > > > > +
> > > > > +Required properties for the master peripheral devices:
> > > > > +- iommu: phandles to the System MMUs of the device
> > > > > +
> > > > > +Examples:
> > > > > +A System MMU is dedicated to a single master device.
> > > > > +	gsc_0:  gsc@0x13e00000 {
> > > > > +		compatible = "samsung,exynos5-gsc";
> > > > > +		reg = <0x13e00000 0x1000>;
> > > > > +		interrupts = <0 85 0>;
> > > > > +		samsung,power-domain = <&pd_gsc>;
> > > > > +		clocks = <&clock 256>;
> > > > > +		clock-names = "gscl";
> > > > > +		iommu = <&sysmmu_gsc1>;
> > > > > +	};
> > > > > +
> > > > > +	sysmmu_gsc0: sysmmu@13E80000 {
> > > > > +		compatible = "samsung,exynos4210-sysmmu";
> > > > > +		reg = <0x13E80000 0x1000>;
> > > > > +		interrupt-parent = <&combiner>;
> > > > > +		interrupt-names = "sysmmu-gsc0";
> > > > > +		interrupts = <2 0>;
> > > > > +		clock-names = "sysmmu", "master";
> > > > > +		clocks = <&clock 262>, <&clock 256>;
> > > > > +		samsung,power-domain = <&pd_gsc>;
> > > > > +		status = "ok";
> > > > > +	};
> > > > > +
> > > > > +MFC has 2 System MMUs for each port that MFC is attached. Thus it seems natural
> > > > > +to define 2 System MMUs for each port of the MFC:
> > > >
> > > > Marek Szyprowski (added to cc:) has a patch fixing MFC to create separate
> > > > mfc_l and mfc_r devices (like it was in the past). Using this patch it
> > > > would be possible to bind sysmmu_mfc_l to mfc_l device and sysmmu_mfc_r to
> > > > mfc_r device. This probably also requires adding some MFC specific handling
> > > > in a device tree node and to the new master's device PM ops (in patch #10)
> > > > as previously (in our trees) sysmmu_mfc r device was set as parent of
> > > > sysmmu_mfc_l device which in turn was a parent for main MFC device (to make
> > > > runtime Power Management work). However because MFC is the only device
> > > > requiring use of multiple System MMUs above changes would allow us (unless
> > > > I'm missing something?) to use just one System MMU device per struct
> > > > exynos_iommu_client instance (making driver a lot simpler).
> > > >
> > >
> > > Does it mean that we can make the exynos-iommu driver simpler
> > > with Marek Szyprowski's patch?
> >
> > I think so and you probably need to change MFC handling anyway because
> > MFC driver does DMA allocations per mfc_l/mfc_r devices and not per main
> > device (at least in the upstream kernels).
> >
> > [ Marek, could you please resfresh and post your patch on the list? ]
> >
> > BTW There is an additional problem with combining System MMU devices per
> > one main device - it limits available address space (which in case of MFC
> > is very limited by hardware design).
> >
> > > It is welcome but I don't think it covers all topologies of System MMU and
> > > master H/W. Those are getting more complex.
> >
> > Could you please be more specific? I know about FIMC ISP subsystem but
> > it doesn't require combining System MMUs. Are there any other examples of
> > complex System MMU + master H/W topologies?
>
> I meant a lot of System MMUs in FIMC-IS subsystem.
> A big challenge to System MMU configuration is FIMC-IS as you mentioned.
> Since I don't know how the driver of FIMC-IS controls its H/W,
> I made the System MMU driver to configure System MMUs flexibly.

Don't think that combining the IOMMU controllers together made them 
flexible.
I only see it as overengineering of the complex FIMC-IS and MFC devices 
topology.

IMHO it is much better to have a simple driver, which binds to a single 
IOMMU
controller and leave it to the driver whether to have a same virtual address
space for all parts of FIMC-IS or MFC submodules/memory ports or not. 
Just make
sure that it will be possible to attach more than one sysmmu controller 
to one
iommu domain.

With some fixes and additional initialization code I have finally 
managed to
get Your driver working with FIMC & memport-based MFC together with 
iommu based
dma-mapping on Exynos4210. I will post my patches after you post Your 
updated
version.

> > Anyway I think that System MMUs should not be combined (as it is done in
> > patch #10) and should be binded per "memport" devices and not per main
> > device (as done in this patch).
> >
>
> Ok.
> I will make it them as you advised.
> And we can make the driver better gradually.

Best regards
-- 
Marek Szyprowski
Samsung R&D Institute Poland



^ permalink raw reply	[flat|nested] 65+ messages in thread

* [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-08-06 13:17           ` Marek Szyprowski
  0 siblings, 0 replies; 65+ messages in thread
From: Marek Szyprowski @ 2013-08-06 13:17 UTC (permalink / raw)
  To: linux-arm-kernel

Hello,

On 8/6/2013 11:54 AM, Cho KyongHo wrote:
> > -----Original Message-----
> > From: Bartlomiej Zolnierkiewicz [mailto:b.zolnierkie at samsung.com]
> > Sent: Monday, August 05, 2013 10:10 PM
> >
> > On Monday, August 05, 2013 08:16:40 PM Cho KyongHo wrote:
> > > > -----Original Message-----
> > > > From: Bartlomiej Zolnierkiewicz [mailto:b.zolnierkie at samsung.com]
> > > > Sent: Saturday, August 03, 2013 2:14 AM
> > > >
> > > > Hi,
> > > >
> > > > On Friday, July 26, 2013 08:28:19 PM Cho KyongHo wrote:
> > > > > Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
> > > > > ---
> > > > >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
> > > > >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
> > > > >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
> > > > >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
> > > > >  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
> > > > >  5 files changed, 617 insertions(+), 0 deletions(-)
> > > > >  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > > >
> > > > > diff --git a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > > > b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > > > new file mode 100644
> > > > > index 0000000..92f0a33
> > > > > --- /dev/null
> > > > > +++ b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > > > > @@ -0,0 +1,103 @@
> > > > > +Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management Unit)
> > > > > +
> > > > > +Samsung's Exynos architecture contains System MMU that enables scattered
> > > > > +physical memory chunks visible as a contiguous region to DMA-capable peripheral
> > > > > +devices like MFC, FIMC, FIMD, GScaler, FIMC-IS and so forth.
> > > > > +
> > > > > +System MMU is a sort of IOMMU and support identical translation table format to
> > > > > +ARMv7 translation tables with minimum set of page properties including access
> > > > > +permissions, shareability and security protection. In addition, System MMU has
> > > > > +another capabilities like L2 TLB or block-fetch buffers to minimize translation
> > > > > +latency.
> > > > > +
> > > > > +A System MMU is dedicated to a single master peripheral device.  Thus, it is
> > > > > +important to specify the correct System MMU in the device node of its master
> > > > > +device. Whereas a System MMU is dedicated to a master device, the master device
> > > > > +may have more than one System MMU.
> > > > > +
> > > > > +Required properties:
> > > > > +- compatible: Should be "samsung,exynos4210-sysmmu"
> > > > > +- reg: A tuple of base address and size of System MMU registers.
> > > > > +- interrupt-parent: The phandle of the interrupt controller of System MMU
> > > > > +- interrupts: A tuple of numbers that indicates the interrupt source.
> > > > > +- clock-names: Should be "sysmmu" if the System MMU is needed to gate its clock.
> > > > > +               Please refer to the following documents:
> > > > > +	       Documentation/devicetree/bindings/clock/clock-bindings.txt
> > > > > +	       Documentation/devicetree/bindings/clock/exynos4-clock.txt
> > > > > +	       Documentation/devicetree/bindings/clock/exynos5250-clock.txt
> > > > > +	       Optional "master" if the clock to the System MMU is gated by
> > > > > +	       another gate clock other than "sysmmu". The System MMU driver
> > > > > +	       sets "master" the parent of "sysmmu".
> > > > > +	       Exynos4 SoCs, there needs no "master" clocks.
> > > > > +	       Exynos5 SoCs, some System MMUs must have "master" clocks.
> > > > > +- clocks: Required if the System MMU is needed to gate its clock.
> > > > > +	  Please refer to the documents listed above.
> > > > > +- samsung,power-domain: Required if the System MMU is needed to gate its power.
> > > > > +	  Please refer to the following document:
> > > > > +	  Documentation/devicetree/bindings/arm/exynos/power_domain.txt
> > > > > +
> > > > > +Required properties for the master peripheral devices:
> > > > > +- iommu: phandles to the System MMUs of the device
> > > > > +
> > > > > +Examples:
> > > > > +A System MMU is dedicated to a single master device.
> > > > > +	gsc_0:  gsc at 0x13e00000 {
> > > > > +		compatible = "samsung,exynos5-gsc";
> > > > > +		reg = <0x13e00000 0x1000>;
> > > > > +		interrupts = <0 85 0>;
> > > > > +		samsung,power-domain = <&pd_gsc>;
> > > > > +		clocks = <&clock 256>;
> > > > > +		clock-names = "gscl";
> > > > > +		iommu = <&sysmmu_gsc1>;
> > > > > +	};
> > > > > +
> > > > > +	sysmmu_gsc0: sysmmu at 13E80000 {
> > > > > +		compatible = "samsung,exynos4210-sysmmu";
> > > > > +		reg = <0x13E80000 0x1000>;
> > > > > +		interrupt-parent = <&combiner>;
> > > > > +		interrupt-names = "sysmmu-gsc0";
> > > > > +		interrupts = <2 0>;
> > > > > +		clock-names = "sysmmu", "master";
> > > > > +		clocks = <&clock 262>, <&clock 256>;
> > > > > +		samsung,power-domain = <&pd_gsc>;
> > > > > +		status = "ok";
> > > > > +	};
> > > > > +
> > > > > +MFC has 2 System MMUs for each port that MFC is attached. Thus it seems natural
> > > > > +to define 2 System MMUs for each port of the MFC:
> > > >
> > > > Marek Szyprowski (added to cc:) has a patch fixing MFC to create separate
> > > > mfc_l and mfc_r devices (like it was in the past). Using this patch it
> > > > would be possible to bind sysmmu_mfc_l to mfc_l device and sysmmu_mfc_r to
> > > > mfc_r device. This probably also requires adding some MFC specific handling
> > > > in a device tree node and to the new master's device PM ops (in patch #10)
> > > > as previously (in our trees) sysmmu_mfc r device was set as parent of
> > > > sysmmu_mfc_l device which in turn was a parent for main MFC device (to make
> > > > runtime Power Management work). However because MFC is the only device
> > > > requiring use of multiple System MMUs above changes would allow us (unless
> > > > I'm missing something?) to use just one System MMU device per struct
> > > > exynos_iommu_client instance (making driver a lot simpler).
> > > >
> > >
> > > Does it mean that we can make the exynos-iommu driver simpler
> > > with Marek Szyprowski's patch?
> >
> > I think so and you probably need to change MFC handling anyway because
> > MFC driver does DMA allocations per mfc_l/mfc_r devices and not per main
> > device (at least in the upstream kernels).
> >
> > [ Marek, could you please resfresh and post your patch on the list? ]
> >
> > BTW There is an additional problem with combining System MMU devices per
> > one main device - it limits available address space (which in case of MFC
> > is very limited by hardware design).
> >
> > > It is welcome but I don't think it covers all topologies of System MMU and
> > > master H/W. Those are getting more complex.
> >
> > Could you please be more specific? I know about FIMC ISP subsystem but
> > it doesn't require combining System MMUs. Are there any other examples of
> > complex System MMU + master H/W topologies?
>
> I meant a lot of System MMUs in FIMC-IS subsystem.
> A big challenge to System MMU configuration is FIMC-IS as you mentioned.
> Since I don't know how the driver of FIMC-IS controls its H/W,
> I made the System MMU driver to configure System MMUs flexibly.

Don't think that combining the IOMMU controllers together made them 
flexible.
I only see it as overengineering of the complex FIMC-IS and MFC devices 
topology.

IMHO it is much better to have a simple driver, which binds to a single 
IOMMU
controller and leave it to the driver whether to have a same virtual address
space for all parts of FIMC-IS or MFC submodules/memory ports or not. 
Just make
sure that it will be possible to attach more than one sysmmu controller 
to one
iommu domain.

With some fixes and additional initialization code I have finally 
managed to
get Your driver working with FIMC & memport-based MFC together with 
iommu based
dma-mapping on Exynos4210. I will post my patches after you post Your 
updated
version.

> > Anyway I think that System MMUs should not be combined (as it is done in
> > patch #10) and should be binded per "memport" devices and not per main
> > device (as done in this patch).
> >
>
> Ok.
> I will make it them as you advised.
> And we can make the driver better gradually.

Best regards
-- 
Marek Szyprowski
Samsung R&D Institute Poland

^ permalink raw reply	[flat|nested] 65+ messages in thread

* Re: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
  2013-08-06 13:17           ` Marek Szyprowski
@ 2013-08-06 16:07             ` Grant Grundler
  -1 siblings, 0 replies; 65+ messages in thread
From: Grant Grundler @ 2013-08-06 16:07 UTC (permalink / raw)
  To: Marek Szyprowski
  Cc: Cho KyongHo, Bartlomiej Zolnierkiewicz, Linux ARM Kernel,
	Linux IOMMU, Linux Kernel, Linux Samsung SOC, Hyunwoong Kim,
	Joerg Roedel, Kukjin Kim, Prathyush, Rahul Sharma, Subash Patel,
	Keyyoung Park, Grant Grundler, Antonios Motakis, kvmarm,
	Sachin Kamat

Hi Marek,

On Tue, Aug 6, 2013 at 6:17 AM, Marek Szyprowski
<m.szyprowski@samsung.com> wrote:
...
> IMHO it is much better to have a simple driver, which binds to a single
> IOMMU controller and leave it to the driver whether to have a same virtual address
> space for all parts of FIMC-IS or MFC submodules/memory ports or not.

I understand this part. I having written the IOMMU support for 4
different IOMMUs, all of which had exactly one IO Page Table and one
IOMMU shared by many devices.

> Just make sure that it will be possible to attach more than one sysmmu
> controller to one iommu domain.

I don't understand how this is possible. Can someone explain this
better in the IOMMU documentation please?

"iommu domain" to me means one virtual IO address space for attached
devices that can master DMA transactions. The IOMMU then uses it's IO
Page Table to translate the DMA address to the system physical address
space and forwards the transaction.

What is the role of the sysmmu in all of this?
Is the sysmmu just the MMU (or collection of MMU) for host DRAM?
Or is sysmmu responsible for "other stuff"? (clocks, power domains, MMU, etc)

I can understand we might have multiple MMUs in a system...e.g. every
range of memory might have it's own MMU. But they share the same
physical address space and generally live under one page table.
Because of "one page table" I would consider them one entity from the
the IOMMUs perspective.

thanks,
grant

^ permalink raw reply	[flat|nested] 65+ messages in thread

* [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-08-06 16:07             ` Grant Grundler
  0 siblings, 0 replies; 65+ messages in thread
From: Grant Grundler @ 2013-08-06 16:07 UTC (permalink / raw)
  To: linux-arm-kernel

Hi Marek,

On Tue, Aug 6, 2013 at 6:17 AM, Marek Szyprowski
<m.szyprowski@samsung.com> wrote:
...
> IMHO it is much better to have a simple driver, which binds to a single
> IOMMU controller and leave it to the driver whether to have a same virtual address
> space for all parts of FIMC-IS or MFC submodules/memory ports or not.

I understand this part. I having written the IOMMU support for 4
different IOMMUs, all of which had exactly one IO Page Table and one
IOMMU shared by many devices.

> Just make sure that it will be possible to attach more than one sysmmu
> controller to one iommu domain.

I don't understand how this is possible. Can someone explain this
better in the IOMMU documentation please?

"iommu domain" to me means one virtual IO address space for attached
devices that can master DMA transactions. The IOMMU then uses it's IO
Page Table to translate the DMA address to the system physical address
space and forwards the transaction.

What is the role of the sysmmu in all of this?
Is the sysmmu just the MMU (or collection of MMU) for host DRAM?
Or is sysmmu responsible for "other stuff"? (clocks, power domains, MMU, etc)

I can understand we might have multiple MMUs in a system...e.g. every
range of memory might have it's own MMU. But they share the same
physical address space and generally live under one page table.
Because of "one page table" I would consider them one entity from the
the IOMMUs perspective.

thanks,
grant

^ permalink raw reply	[flat|nested] 65+ messages in thread

* Re: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
       [not found]             ` <CANEJEGtQuKG5err-R7SxD6m+aJWVmn47X9NJLx7UzaRkKhUMoQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
@ 2013-08-06 16:21               ` Eric Boxer
  0 siblings, 0 replies; 65+ messages in thread
From: Eric Boxer @ 2013-08-06 16:21 UTC (permalink / raw)
  Cc: Linux Samsung SOC, Hyunwoong Kim, Bartlomiej Zolnierkiewicz,
	Sachin Kamat, Prathyush, Subash Patel, Linux Kernel,
	Keyyoung Park, Rahul Sharma, Grant Grundler, Linux IOMMU,
	Kukjin Kim, Antonios Motakis, Cho KyongHo, kvmarm,
	Linux ARM Kernel


[-- Attachment #1.1: Type: text/plain, Size: 1878 bytes --]

Ok  

---Sent from Boxer | http://getboxer.com

Hi Marek,



On Tue, Aug 6, 2013 at 6:17 AM, Marek Szyprowski

<m.szyprowski@samsung.com> wrote:

...

> IMHO it is much better to have a simple driver, which binds to a single

> IOMMU controller and leave it to the driver whether to have a same virtual address

> space for all parts of FIMC-IS or MFC submodules/memory ports or not.



I understand this part. I having written the IOMMU support for 4

different IOMMUs, all of which had exactly one IO Page Table and one

IOMMU shared by many devices.



> Just make sure that it will be possible to attach more than one sysmmu

> controller to one iommu domain.



I don't understand how this is possible. Can someone explain this

better in the IOMMU documentation please?



"iommu domain" to me means one virtual IO address space for attached

devices that can master DMA transactions. The IOMMU then uses it's IO

Page Table to translate the DMA address to the system physical address

space and forwards the transaction.



What is the role of the sysmmu in all of this?

Is the sysmmu just the MMU (or collection of MMU) for host DRAM?

Or is sysmmu responsible for "other stuff"? (clocks, power domains, MMU, etc)



I can understand we might have multiple MMUs in a system...e.g. every

range of memory might have it's own MMU. But they share the same

physical address space and generally live under one page table.

Because of "one page table" I would consider them one entity from the

the IOMMUs perspective.



thanks,

grant

--

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in

the body of a message to majordomo@vger.kernel.org

More majordomo info at  http://vger.kernel.org/majordomo-info.html

Please read the FAQ at  http://www.tux.org/lkml/


[-- Attachment #1.2: Type: text/html, Size: 2479 bytes --]

[-- Attachment #2: Type: text/plain, Size: 0 bytes --]



^ permalink raw reply	[flat|nested] 65+ messages in thread

* RE: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
  2013-08-06 16:07             ` Grant Grundler
@ 2013-08-07 12:07               ` Cho KyongHo
  -1 siblings, 0 replies; 65+ messages in thread
From: Cho KyongHo @ 2013-08-07 12:07 UTC (permalink / raw)
  To: 'Grant Grundler', 'Marek Szyprowski'
  Cc: 'Bartlomiej Zolnierkiewicz', 'Linux ARM Kernel',
	'Linux IOMMU', 'Linux Kernel',
	'Linux Samsung SOC', 'Hyunwoong Kim',
	'Joerg Roedel', 'Kukjin Kim', 'Prathyush',
	'Rahul Sharma', 'Subash Patel',
	'Keyyoung Park', 'Antonios Motakis',
	kvmarm, 'Sachin Kamat'

> -----Original Message-----
> From: grundler@google.com [mailto:grundler@google.com] On Behalf Of Grant Grundler
> Sent: Wednesday, August 07, 2013 1:07 AM
> To: Marek Szyprowski
> 
> Hi Marek,
> 
> On Tue, Aug 6, 2013 at 6:17 AM, Marek Szyprowski
> <m.szyprowski@samsung.com> wrote:
> ...
> > IMHO it is much better to have a simple driver, which binds to a single
> > IOMMU controller and leave it to the driver whether to have a same virtual address
> > space for all parts of FIMC-IS or MFC submodules/memory ports or not.
> 
> I understand this part. I having written the IOMMU support for 4
> different IOMMUs, all of which had exactly one IO Page Table and one
> IOMMU shared by many devices.
> 
> > Just make sure that it will be possible to attach more than one sysmmu
> > controller to one iommu domain.
> 
> I don't understand how this is possible. Can someone explain this
> better in the IOMMU documentation please?

System MMU is dedicated to a master H/W such as FIMD and FIMC.
Thus, attaching a master H/W to an iommu domain can be thought as
attaching a System MMU to an iommu domain even though such thinking
is not correct view of the relationship between iommu domain and
System MMU.

> 
> "iommu domain" to me means one virtual IO address space for attached
> devices that can master DMA transactions. The IOMMU then uses it's IO
> Page Table to translate the DMA address to the system physical address
> space and forwards the transaction.
> 
> What is the role of the sysmmu in all of this?
> Is the sysmmu just the MMU (or collection of MMU) for host DRAM?
> Or is sysmmu responsible for "other stuff"? (clocks, power domains, MMU, etc)
> 
System MMU is responsible for address translation of traffic from a
master H/W which the System MMU is dedicated to.

> I can understand we might have multiple MMUs in a system...e.g. every
> range of memory might have it's own MMU. But they share the same
> physical address space and generally live under one page table.
> Because of "one page table" I would consider them one entity from the
> the IOMMUs perspective.

Sorry, I don't understand.
Do you mean you are thinking that it is better to share one page table
by all IOMMUs in a system?

Thank you,
KyongHo
> 
> thanks,
> grant


^ permalink raw reply	[flat|nested] 65+ messages in thread

* [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-08-07 12:07               ` Cho KyongHo
  0 siblings, 0 replies; 65+ messages in thread
From: Cho KyongHo @ 2013-08-07 12:07 UTC (permalink / raw)
  To: linux-arm-kernel

> -----Original Message-----
> From: grundler at google.com [mailto:grundler at google.com] On Behalf Of Grant Grundler
> Sent: Wednesday, August 07, 2013 1:07 AM
> To: Marek Szyprowski
> 
> Hi Marek,
> 
> On Tue, Aug 6, 2013 at 6:17 AM, Marek Szyprowski
> <m.szyprowski@samsung.com> wrote:
> ...
> > IMHO it is much better to have a simple driver, which binds to a single
> > IOMMU controller and leave it to the driver whether to have a same virtual address
> > space for all parts of FIMC-IS or MFC submodules/memory ports or not.
> 
> I understand this part. I having written the IOMMU support for 4
> different IOMMUs, all of which had exactly one IO Page Table and one
> IOMMU shared by many devices.
> 
> > Just make sure that it will be possible to attach more than one sysmmu
> > controller to one iommu domain.
> 
> I don't understand how this is possible. Can someone explain this
> better in the IOMMU documentation please?

System MMU is dedicated to a master H/W such as FIMD and FIMC.
Thus, attaching a master H/W to an iommu domain can be thought as
attaching a System MMU to an iommu domain even though such thinking
is not correct view of the relationship between iommu domain and
System MMU.

> 
> "iommu domain" to me means one virtual IO address space for attached
> devices that can master DMA transactions. The IOMMU then uses it's IO
> Page Table to translate the DMA address to the system physical address
> space and forwards the transaction.
> 
> What is the role of the sysmmu in all of this?
> Is the sysmmu just the MMU (or collection of MMU) for host DRAM?
> Or is sysmmu responsible for "other stuff"? (clocks, power domains, MMU, etc)
> 
System MMU is responsible for address translation of traffic from a
master H/W which the System MMU is dedicated to.

> I can understand we might have multiple MMUs in a system...e.g. every
> range of memory might have it's own MMU. But they share the same
> physical address space and generally live under one page table.
> Because of "one page table" I would consider them one entity from the
> the IOMMUs perspective.

Sorry, I don't understand.
Do you mean you are thinking that it is better to share one page table
by all IOMMUs in a system?

Thank you,
KyongHo
> 
> thanks,
> grant

^ permalink raw reply	[flat|nested] 65+ messages in thread

* Re: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
  2013-08-07 12:07               ` Cho KyongHo
  (?)
@ 2013-08-07 16:21                 ` Grant Grundler
  -1 siblings, 0 replies; 65+ messages in thread
From: Grant Grundler @ 2013-08-07 16:21 UTC (permalink / raw)
  To: Cho KyongHo
  Cc: Grant Grundler, Marek Szyprowski, Bartlomiej Zolnierkiewicz,
	Linux ARM Kernel, Linux IOMMU, Linux Kernel, Linux Samsung SOC,
	Hyunwoong Kim, Joerg Roedel, Kukjin Kim, Prathyush, Rahul Sharma,
	Subash Patel, Keyyoung Park, Antonios Motakis, kvmarm,
	Sachin Kamat

On Wed, Aug 7, 2013 at 5:07 AM, Cho KyongHo <pullip.cho@samsung.com> wrote:
...
>> I don't understand how this is possible. Can someone explain this
>> better in the IOMMU documentation please?
>
> System MMU is dedicated to a master H/W such as FIMD and FIMC.

Sory - Exynos 5250 documentation I have (confidential version) uses
FIMD and FIMC but never explains what they are nor identifies them in
a diagram. Based on the references, they are related to the video
mixer but I don't know exactly what function FIMD/FIMC serve.


> Thus, attaching a master H/W to an iommu domain can be thought as
> attaching a System MMU to an iommu domain even though such thinking
> is not correct view of the relationship between iommu domain and
> System MMU.

This almost makes sense. I understand the above to mean the System MMU
is a proxy for the FIMD and FIMC.

>> I can understand we might have multiple MMUs in a system...e.g. every
>> range of memory might have it's own MMU. But they share the same
>> physical address space and generally live under one page table.
>> Because of "one page table" I would consider them one entity from the
>> the IOMMUs perspective.
>
> Sorry, I don't understand.
> Do you mean you are thinking that it is better to share one page table
> by all IOMMUs in a system?

No. This is how the previous IOMMUs I worked on functioned. It doesn't
mean this is how current ones should.

My example above was referring to CPU MMUs in the case of NUMA
architectures. Each NUMA CPU socket can have it's own MMU (and TLB)
and corresponding memory controller. All CPUs in an SMP system map
process and kernel virtual addresses to one common "physical" address
space. This means allocation and use of "physical address space" has
to be managed as one entity (even if several page tables exist in the
implementation - e.g. NUMA).


Back to the original comment that started my question (pulled out of
context now...sorry):
   "Just make sure that it will be possible to attach more than one
sysmmu controller to one iommu domain."

Does that mean the IOMMU now has to map to multiple "physical address
spaces" or am I completely missing what a SysMMU does?

The "SysMMU" is the System Memory Management Unit, right?

I still thinking one IOMMU domain maps one (IO) virtual address space
to one (common with CPU and other IOMMU) physical address space.

cheers,
grant

>
> Thank you,
> KyongHo
>>
>> thanks,
>> grant
>

^ permalink raw reply	[flat|nested] 65+ messages in thread

* Re: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-08-07 16:21                 ` Grant Grundler
  0 siblings, 0 replies; 65+ messages in thread
From: Grant Grundler @ 2013-08-07 16:21 UTC (permalink / raw)
  To: Cho KyongHo
  Cc: Linux Samsung SOC, Hyunwoong Kim, Bartlomiej Zolnierkiewicz,
	Grant Grundler, Prathyush, Subash Patel, Linux Kernel,
	Sachin Kamat, Linux IOMMU, Kukjin Kim, Antonios Motakis,
	Keyyoung Park, Rahul Sharma,
	kvmarm-FPEHb7Xf0XXUo1n7N8X6UoWGPAHP3yOg, Linux ARM Kernel

On Wed, Aug 7, 2013 at 5:07 AM, Cho KyongHo <pullip.cho-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org> wrote:
...
>> I don't understand how this is possible. Can someone explain this
>> better in the IOMMU documentation please?
>
> System MMU is dedicated to a master H/W such as FIMD and FIMC.

Sory - Exynos 5250 documentation I have (confidential version) uses
FIMD and FIMC but never explains what they are nor identifies them in
a diagram. Based on the references, they are related to the video
mixer but I don't know exactly what function FIMD/FIMC serve.


> Thus, attaching a master H/W to an iommu domain can be thought as
> attaching a System MMU to an iommu domain even though such thinking
> is not correct view of the relationship between iommu domain and
> System MMU.

This almost makes sense. I understand the above to mean the System MMU
is a proxy for the FIMD and FIMC.

>> I can understand we might have multiple MMUs in a system...e.g. every
>> range of memory might have it's own MMU. But they share the same
>> physical address space and generally live under one page table.
>> Because of "one page table" I would consider them one entity from the
>> the IOMMUs perspective.
>
> Sorry, I don't understand.
> Do you mean you are thinking that it is better to share one page table
> by all IOMMUs in a system?

No. This is how the previous IOMMUs I worked on functioned. It doesn't
mean this is how current ones should.

My example above was referring to CPU MMUs in the case of NUMA
architectures. Each NUMA CPU socket can have it's own MMU (and TLB)
and corresponding memory controller. All CPUs in an SMP system map
process and kernel virtual addresses to one common "physical" address
space. This means allocation and use of "physical address space" has
to be managed as one entity (even if several page tables exist in the
implementation - e.g. NUMA).


Back to the original comment that started my question (pulled out of
context now...sorry):
   "Just make sure that it will be possible to attach more than one
sysmmu controller to one iommu domain."

Does that mean the IOMMU now has to map to multiple "physical address
spaces" or am I completely missing what a SysMMU does?

The "SysMMU" is the System Memory Management Unit, right?

I still thinking one IOMMU domain maps one (IO) virtual address space
to one (common with CPU and other IOMMU) physical address space.

cheers,
grant

>
> Thank you,
> KyongHo
>>
>> thanks,
>> grant
>

^ permalink raw reply	[flat|nested] 65+ messages in thread

* [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-08-07 16:21                 ` Grant Grundler
  0 siblings, 0 replies; 65+ messages in thread
From: Grant Grundler @ 2013-08-07 16:21 UTC (permalink / raw)
  To: linux-arm-kernel

On Wed, Aug 7, 2013 at 5:07 AM, Cho KyongHo <pullip.cho@samsung.com> wrote:
...
>> I don't understand how this is possible. Can someone explain this
>> better in the IOMMU documentation please?
>
> System MMU is dedicated to a master H/W such as FIMD and FIMC.

Sory - Exynos 5250 documentation I have (confidential version) uses
FIMD and FIMC but never explains what they are nor identifies them in
a diagram. Based on the references, they are related to the video
mixer but I don't know exactly what function FIMD/FIMC serve.


> Thus, attaching a master H/W to an iommu domain can be thought as
> attaching a System MMU to an iommu domain even though such thinking
> is not correct view of the relationship between iommu domain and
> System MMU.

This almost makes sense. I understand the above to mean the System MMU
is a proxy for the FIMD and FIMC.

>> I can understand we might have multiple MMUs in a system...e.g. every
>> range of memory might have it's own MMU. But they share the same
>> physical address space and generally live under one page table.
>> Because of "one page table" I would consider them one entity from the
>> the IOMMUs perspective.
>
> Sorry, I don't understand.
> Do you mean you are thinking that it is better to share one page table
> by all IOMMUs in a system?

No. This is how the previous IOMMUs I worked on functioned. It doesn't
mean this is how current ones should.

My example above was referring to CPU MMUs in the case of NUMA
architectures. Each NUMA CPU socket can have it's own MMU (and TLB)
and corresponding memory controller. All CPUs in an SMP system map
process and kernel virtual addresses to one common "physical" address
space. This means allocation and use of "physical address space" has
to be managed as one entity (even if several page tables exist in the
implementation - e.g. NUMA).


Back to the original comment that started my question (pulled out of
context now...sorry):
   "Just make sure that it will be possible to attach more than one
sysmmu controller to one iommu domain."

Does that mean the IOMMU now has to map to multiple "physical address
spaces" or am I completely missing what a SysMMU does?

The "SysMMU" is the System Memory Management Unit, right?

I still thinking one IOMMU domain maps one (IO) virtual address space
to one (common with CPU and other IOMMU) physical address space.

cheers,
grant

>
> Thank you,
> KyongHo
>>
>> thanks,
>> grant
>

^ permalink raw reply	[flat|nested] 65+ messages in thread

* RE: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
  2013-08-07 16:21                 ` Grant Grundler
@ 2013-08-08  2:19                   ` Cho KyongHo
  -1 siblings, 0 replies; 65+ messages in thread
From: Cho KyongHo @ 2013-08-08  2:19 UTC (permalink / raw)
  To: 'Grant Grundler'
  Cc: 'Marek Szyprowski', 'Bartlomiej Zolnierkiewicz',
	'Linux ARM Kernel', 'Linux IOMMU',
	'Linux Kernel', 'Linux Samsung SOC',
	'Hyunwoong Kim', 'Joerg Roedel',
	'Kukjin Kim', 'Prathyush', 'Rahul Sharma',
	'Subash Patel', 'Keyyoung Park',
	'Antonios Motakis', kvmarm, 'Sachin Kamat'

> -----Original Message-----
> From: grundler@google.com [mailto:grundler@google.com] On Behalf Of Grant Grundler
> Sent: Thursday, August 08, 2013 1:21 AM
> 
> On Wed, Aug 7, 2013 at 5:07 AM, Cho KyongHo <pullip.cho@samsung.com> wrote:
> ...
> >> I don't understand how this is possible. Can someone explain this
> >> better in the IOMMU documentation please?
> >
> > System MMU is dedicated to a master H/W such as FIMD and FIMC.
> 
> Sory - Exynos 5250 documentation I have (confidential version) uses
> FIMD and FIMC but never explains what they are nor identifies them in
> a diagram. Based on the references, they are related to the video
> mixer but I don't know exactly what function FIMD/FIMC serve.

Ok.
FIMD is a display controller that reads RGB data and conveys the data
to the screen.
FIMC performs various functions including storing camera censor data to
the memory, image post processing like scaling, color space conversion
and rotation and conveying the processed data to FIMD.

> 
> 
> > Thus, attaching a master H/W to an iommu domain can be thought as
> > attaching a System MMU to an iommu domain even though such thinking
> > is not correct view of the relationship between iommu domain and
> > System MMU.
> 
> This almost makes sense. I understand the above to mean the System MMU
> is a proxy for the FIMD and FIMC.
> 
> >> I can understand we might have multiple MMUs in a system...e.g. every
> >> range of memory might have it's own MMU. But they share the same
> >> physical address space and generally live under one page table.
> >> Because of "one page table" I would consider them one entity from the
> >> the IOMMUs perspective.
> >
> > Sorry, I don't understand.
> > Do you mean you are thinking that it is better to share one page table
> > by all IOMMUs in a system?
> 
> No. This is how the previous IOMMUs I worked on functioned. It doesn't
> mean this is how current ones should.
> 
> My example above was referring to CPU MMUs in the case of NUMA
> architectures. Each NUMA CPU socket can have it's own MMU (and TLB)
> and corresponding memory controller. All CPUs in an SMP system map
> process and kernel virtual addresses to one common "physical" address
> space. This means allocation and use of "physical address space" has
> to be managed as one entity (even if several page tables exist in the
> implementation - e.g. NUMA).
> 
> 
> Back to the original comment that started my question (pulled out of
> context now...sorry):
>    "Just make sure that it will be possible to attach more than one
> sysmmu controller to one iommu domain."
> 
> Does that mean the IOMMU now has to map to multiple "physical address
> spaces" or am I completely missing what a SysMMU does?

I think I have explained what the quotation actually intended.
Exynos System MMUs in a SoC have the same view of physical address space.
But they provide different views of memory to their master H/Ws.
I think this is what Marek wanted to say.
> 
> The "SysMMU" is the System Memory Management Unit, right?

Yes it is IOMMU in Exynos SoCs.
It is referred as "SysMMU", "sysmmu", "smmu" or "System MMU".
All are the same in the context of Exynos SoCs.

It is not an implementation of ARM System MMU specifications.

> 
> I still thinking one IOMMU domain maps one (IO) virtual address space
> to one (common with CPU and other IOMMU) physical address space.

Definitely I agree with you.
However, this discussion is not started from Marek's comment that
several System MMUs can be attached to the same page table
It actually means:
 -> providing the same virtual address space to their master H/W
 -> ** The master H/Ws are attached to the same iommu domain. **

Regards,

KyongHo.
> 
> cheers,
> grant
> 
> >
> > Thank you,
> > KyongHo
> >>
> >> thanks,
> >> grant
> >


^ permalink raw reply	[flat|nested] 65+ messages in thread

* [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-08-08  2:19                   ` Cho KyongHo
  0 siblings, 0 replies; 65+ messages in thread
From: Cho KyongHo @ 2013-08-08  2:19 UTC (permalink / raw)
  To: linux-arm-kernel

> -----Original Message-----
> From: grundler at google.com [mailto:grundler at google.com] On Behalf Of Grant Grundler
> Sent: Thursday, August 08, 2013 1:21 AM
> 
> On Wed, Aug 7, 2013 at 5:07 AM, Cho KyongHo <pullip.cho@samsung.com> wrote:
> ...
> >> I don't understand how this is possible. Can someone explain this
> >> better in the IOMMU documentation please?
> >
> > System MMU is dedicated to a master H/W such as FIMD and FIMC.
> 
> Sory - Exynos 5250 documentation I have (confidential version) uses
> FIMD and FIMC but never explains what they are nor identifies them in
> a diagram. Based on the references, they are related to the video
> mixer but I don't know exactly what function FIMD/FIMC serve.

Ok.
FIMD is a display controller that reads RGB data and conveys the data
to the screen.
FIMC performs various functions including storing camera censor data to
the memory, image post processing like scaling, color space conversion
and rotation and conveying the processed data to FIMD.

> 
> 
> > Thus, attaching a master H/W to an iommu domain can be thought as
> > attaching a System MMU to an iommu domain even though such thinking
> > is not correct view of the relationship between iommu domain and
> > System MMU.
> 
> This almost makes sense. I understand the above to mean the System MMU
> is a proxy for the FIMD and FIMC.
> 
> >> I can understand we might have multiple MMUs in a system...e.g. every
> >> range of memory might have it's own MMU. But they share the same
> >> physical address space and generally live under one page table.
> >> Because of "one page table" I would consider them one entity from the
> >> the IOMMUs perspective.
> >
> > Sorry, I don't understand.
> > Do you mean you are thinking that it is better to share one page table
> > by all IOMMUs in a system?
> 
> No. This is how the previous IOMMUs I worked on functioned. It doesn't
> mean this is how current ones should.
> 
> My example above was referring to CPU MMUs in the case of NUMA
> architectures. Each NUMA CPU socket can have it's own MMU (and TLB)
> and corresponding memory controller. All CPUs in an SMP system map
> process and kernel virtual addresses to one common "physical" address
> space. This means allocation and use of "physical address space" has
> to be managed as one entity (even if several page tables exist in the
> implementation - e.g. NUMA).
> 
> 
> Back to the original comment that started my question (pulled out of
> context now...sorry):
>    "Just make sure that it will be possible to attach more than one
> sysmmu controller to one iommu domain."
> 
> Does that mean the IOMMU now has to map to multiple "physical address
> spaces" or am I completely missing what a SysMMU does?

I think I have explained what the quotation actually intended.
Exynos System MMUs in a SoC have the same view of physical address space.
But they provide different views of memory to their master H/Ws.
I think this is what Marek wanted to say.
> 
> The "SysMMU" is the System Memory Management Unit, right?

Yes it is IOMMU in Exynos SoCs.
It is referred as "SysMMU", "sysmmu", "smmu" or "System MMU".
All are the same in the context of Exynos SoCs.

It is not an implementation of ARM System MMU specifications.

> 
> I still thinking one IOMMU domain maps one (IO) virtual address space
> to one (common with CPU and other IOMMU) physical address space.

Definitely I agree with you.
However, this discussion is not started from Marek's comment that
several System MMUs can be attached to the same page table
It actually means:
 -> providing the same virtual address space to their master H/W
 -> ** The master H/Ws are attached to the same iommu domain. **

Regards,

KyongHo.
> 
> cheers,
> grant
> 
> >
> > Thank you,
> > KyongHo
> >>
> >> thanks,
> >> grant
> >

^ permalink raw reply	[flat|nested] 65+ messages in thread

* Re: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
  2013-08-01 13:05     ` Cho KyongHo
  (?)
@ 2013-08-08 13:09       ` Rob Herring
  -1 siblings, 0 replies; 65+ messages in thread
From: Rob Herring @ 2013-08-08 13:09 UTC (permalink / raw)
  To: Cho KyongHo
  Cc: Linux ARM Kernel, Linux IOMMU, Linux Kernel, Linux Samsung SOC,
	Kukjin Kim, Hyunwoong Kim, Prathyush, Grant Grundler,
	Joerg Roedel, Keyyoung Park, Subash Patel, Sachin Kamat,
	Antonios Motakis, kvmarm, Rahul Sharma, Will Deacon

On Thu, Aug 1, 2013 at 8:05 AM, Cho KyongHo <pullip.cho@samsung.com> wrote:
>> -----Original Message-----
>> From: Rob Herring [mailto:robherring2@gmail.com]
>> Sent: Saturday, July 27, 2013 10:55 PM
>> On Fri, Jul 26, 2013 at 6:28 AM, Cho KyongHo <pullip.cho@samsung.com> wrote:
>> > Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
>> > ---
>> >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
>> >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
>> >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
>> >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
>> >  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
>> >  5 files changed, 617 insertions(+), 0 deletions(-)
>> >  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
>> >
>> > diff --git a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
>> > b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
>> > new file mode 100644
>> > index 0000000..92f0a33
>> > --- /dev/null
>> > +++ b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
>> > @@ -0,0 +1,103 @@
>> > +Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management Unit)
>> > +
>> > +Samsung's Exynos architecture contains System MMU that enables scattered
>> > +physical memory chunks visible as a contiguous region to DMA-capable peripheral
>> > +devices like MFC, FIMC, FIMD, GScaler, FIMC-IS and so forth.
>> > +
>> > +System MMU is a sort of IOMMU and support identical translation table format to
>> > +ARMv7 translation tables with minimum set of page properties including access
>> > +permissions, shareability and security protection. In addition, System MMU has
>> > +another capabilities like L2 TLB or block-fetch buffers to minimize translation
>> > +latency.
>> > +
>> > +A System MMU is dedicated to a single master peripheral device.  Thus, it is
>> > +important to specify the correct System MMU in the device node of its master
>> > +device. Whereas a System MMU is dedicated to a master device, the master device
>> > +may have more than one System MMU.
>>
>> I don't follow the last sentence. Can you elaborate on the type of
>> connection you are talking about.
>>
> Grant also addressed that.
> He corrected the sentence like the following:
>
>   " Can I suggest rewriting the last two sentences to:
>      The master device node must correctly specify at least one
>      SystemMMU. A master  device may have more than one System MMU. "
>
> I will change the sentence
>
>> Also, please align with the ARM system MMU binding that Will Deacon
>> has submitted particularly in terms of how master connections are
>> described.
>>
> I didn't check it.
>
> Should this align with ARM System MMU bindings?
> System MMU in Exynos SoC is different from ARM System MMU.
> It does not follows the specifications of ARM System MMU.

I'm not saying the h/w is the same or even the same spec, but how you
describe a master to iommu connection needs to be done in the same
way. This should be done in the same way for ALL iommu's. And if what
is defined does not work for you, then we need to understand that and
fix the binding now.

Rob

^ permalink raw reply	[flat|nested] 65+ messages in thread

* Re: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-08-08 13:09       ` Rob Herring
  0 siblings, 0 replies; 65+ messages in thread
From: Rob Herring @ 2013-08-08 13:09 UTC (permalink / raw)
  To: Cho KyongHo
  Cc: Kukjin Kim, Hyunwoong Kim, Prathyush, Grant Grundler,
	Will Deacon, Keyyoung Park, Subash Patel, Linux Kernel,
	Sachin Kamat, Linux IOMMU, Linux Samsung SOC, Antonios Motakis,
	kvmarm-FPEHb7Xf0XXUo1n7N8X6UoWGPAHP3yOg, Linux ARM Kernel,
	Rahul Sharma

On Thu, Aug 1, 2013 at 8:05 AM, Cho KyongHo <pullip.cho-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org> wrote:
>> -----Original Message-----
>> From: Rob Herring [mailto:robherring2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org]
>> Sent: Saturday, July 27, 2013 10:55 PM
>> On Fri, Jul 26, 2013 at 6:28 AM, Cho KyongHo <pullip.cho-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org> wrote:
>> > Signed-off-by: Cho KyongHo <pullip.cho-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
>> > ---
>> >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
>> >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
>> >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
>> >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
>> >  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
>> >  5 files changed, 617 insertions(+), 0 deletions(-)
>> >  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
>> >
>> > diff --git a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
>> > b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
>> > new file mode 100644
>> > index 0000000..92f0a33
>> > --- /dev/null
>> > +++ b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
>> > @@ -0,0 +1,103 @@
>> > +Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management Unit)
>> > +
>> > +Samsung's Exynos architecture contains System MMU that enables scattered
>> > +physical memory chunks visible as a contiguous region to DMA-capable peripheral
>> > +devices like MFC, FIMC, FIMD, GScaler, FIMC-IS and so forth.
>> > +
>> > +System MMU is a sort of IOMMU and support identical translation table format to
>> > +ARMv7 translation tables with minimum set of page properties including access
>> > +permissions, shareability and security protection. In addition, System MMU has
>> > +another capabilities like L2 TLB or block-fetch buffers to minimize translation
>> > +latency.
>> > +
>> > +A System MMU is dedicated to a single master peripheral device.  Thus, it is
>> > +important to specify the correct System MMU in the device node of its master
>> > +device. Whereas a System MMU is dedicated to a master device, the master device
>> > +may have more than one System MMU.
>>
>> I don't follow the last sentence. Can you elaborate on the type of
>> connection you are talking about.
>>
> Grant also addressed that.
> He corrected the sentence like the following:
>
>   " Can I suggest rewriting the last two sentences to:
>      The master device node must correctly specify at least one
>      SystemMMU. A master  device may have more than one System MMU. "
>
> I will change the sentence
>
>> Also, please align with the ARM system MMU binding that Will Deacon
>> has submitted particularly in terms of how master connections are
>> described.
>>
> I didn't check it.
>
> Should this align with ARM System MMU bindings?
> System MMU in Exynos SoC is different from ARM System MMU.
> It does not follows the specifications of ARM System MMU.

I'm not saying the h/w is the same or even the same spec, but how you
describe a master to iommu connection needs to be done in the same
way. This should be done in the same way for ALL iommu's. And if what
is defined does not work for you, then we need to understand that and
fix the binding now.

Rob

^ permalink raw reply	[flat|nested] 65+ messages in thread

* [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-08-08 13:09       ` Rob Herring
  0 siblings, 0 replies; 65+ messages in thread
From: Rob Herring @ 2013-08-08 13:09 UTC (permalink / raw)
  To: linux-arm-kernel

On Thu, Aug 1, 2013 at 8:05 AM, Cho KyongHo <pullip.cho@samsung.com> wrote:
>> -----Original Message-----
>> From: Rob Herring [mailto:robherring2 at gmail.com]
>> Sent: Saturday, July 27, 2013 10:55 PM
>> On Fri, Jul 26, 2013 at 6:28 AM, Cho KyongHo <pullip.cho@samsung.com> wrote:
>> > Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
>> > ---
>> >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
>> >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
>> >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
>> >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
>> >  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
>> >  5 files changed, 617 insertions(+), 0 deletions(-)
>> >  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
>> >
>> > diff --git a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
>> > b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
>> > new file mode 100644
>> > index 0000000..92f0a33
>> > --- /dev/null
>> > +++ b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
>> > @@ -0,0 +1,103 @@
>> > +Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management Unit)
>> > +
>> > +Samsung's Exynos architecture contains System MMU that enables scattered
>> > +physical memory chunks visible as a contiguous region to DMA-capable peripheral
>> > +devices like MFC, FIMC, FIMD, GScaler, FIMC-IS and so forth.
>> > +
>> > +System MMU is a sort of IOMMU and support identical translation table format to
>> > +ARMv7 translation tables with minimum set of page properties including access
>> > +permissions, shareability and security protection. In addition, System MMU has
>> > +another capabilities like L2 TLB or block-fetch buffers to minimize translation
>> > +latency.
>> > +
>> > +A System MMU is dedicated to a single master peripheral device.  Thus, it is
>> > +important to specify the correct System MMU in the device node of its master
>> > +device. Whereas a System MMU is dedicated to a master device, the master device
>> > +may have more than one System MMU.
>>
>> I don't follow the last sentence. Can you elaborate on the type of
>> connection you are talking about.
>>
> Grant also addressed that.
> He corrected the sentence like the following:
>
>   " Can I suggest rewriting the last two sentences to:
>      The master device node must correctly specify at least one
>      SystemMMU. A master  device may have more than one System MMU. "
>
> I will change the sentence
>
>> Also, please align with the ARM system MMU binding that Will Deacon
>> has submitted particularly in terms of how master connections are
>> described.
>>
> I didn't check it.
>
> Should this align with ARM System MMU bindings?
> System MMU in Exynos SoC is different from ARM System MMU.
> It does not follows the specifications of ARM System MMU.

I'm not saying the h/w is the same or even the same spec, but how you
describe a master to iommu connection needs to be done in the same
way. This should be done in the same way for ALL iommu's. And if what
is defined does not work for you, then we need to understand that and
fix the binding now.

Rob

^ permalink raw reply	[flat|nested] 65+ messages in thread

* Re: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-08-08 21:38         ` Tomasz Figa
  0 siblings, 0 replies; 65+ messages in thread
From: Tomasz Figa @ 2013-08-08 21:38 UTC (permalink / raw)
  To: Rob Herring
  Cc: Cho KyongHo, Linux ARM Kernel, Linux IOMMU, Linux Kernel,
	Linux Samsung SOC, Kukjin Kim, Hyunwoong Kim, Prathyush,
	Grant Grundler, Joerg Roedel, Keyyoung Park, Subash Patel,
	Sachin Kamat, Antonios Motakis, kvmarm, Rahul Sharma,
	Will Deacon

On Thursday 08 of August 2013 08:09:49 Rob Herring wrote:
> On Thu, Aug 1, 2013 at 8:05 AM, Cho KyongHo <pullip.cho@samsung.com> 
wrote:
> >> -----Original Message-----
> >> From: Rob Herring [mailto:robherring2@gmail.com]
> >> Sent: Saturday, July 27, 2013 10:55 PM
> >> 
> >> On Fri, Jul 26, 2013 at 6:28 AM, Cho KyongHo <pullip.cho@samsung.com> 
wrote:
> >> > Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
> >> > ---
> >> > 
> >> >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
> >> >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
> >> >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
> >> >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
> >> >  arch/arm/boot/dts/exynos5250.dtsi                  |  291
> >> >  ++++++++++++++++++++ 5 files changed, 617 insertions(+), 0
> >> >  deletions(-)
> >> >  create mode 100644
> >> >  Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu
> >> >  .txt>> > 
> >> > diff --git
> >> > a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmm
> >> > u.txt
> >> > b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmm
> >> > u.txt new file mode 100644
> >> > index 0000000..92f0a33
> >> > --- /dev/null
> >> > +++
> >> > b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmm
> >> > u.txt @@ -0,0 +1,103 @@
> >> > +Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management
> >> > Unit) +
> >> > +Samsung's Exynos architecture contains System MMU that enables
> >> > scattered +physical memory chunks visible as a contiguous region
> >> > to DMA-capable peripheral +devices like MFC, FIMC, FIMD, GScaler,
> >> > FIMC-IS and so forth.
> >> > +
> >> > +System MMU is a sort of IOMMU and support identical translation
> >> > table format to +ARMv7 translation tables with minimum set of page
> >> > properties including access +permissions, shareability and
> >> > security protection. In addition, System MMU has +another
> >> > capabilities like L2 TLB or block-fetch buffers to minimize
> >> > translation +latency.
> >> > +
> >> > +A System MMU is dedicated to a single master peripheral device. 
> >> > Thus, it is +important to specify the correct System MMU in the
> >> > device node of its master +device. Whereas a System MMU is
> >> > dedicated to a master device, the master device +may have more
> >> > than one System MMU.
> >> 
> >> I don't follow the last sentence. Can you elaborate on the type of
> >> connection you are talking about.
> > 
> > Grant also addressed that.
> > 
> > He corrected the sentence like the following:
> >   " Can I suggest rewriting the last two sentences to:
> >      The master device node must correctly specify at least one
> >      SystemMMU. A master  device may have more than one System MMU. "
> > 
> > I will change the sentence
> > 
> >> Also, please align with the ARM system MMU binding that Will Deacon
> >> has submitted particularly in terms of how master connections are
> >> described.
> > 
> > I didn't check it.
> > 
> > Should this align with ARM System MMU bindings?
> > System MMU in Exynos SoC is different from ARM System MMU.
> > It does not follows the specifications of ARM System MMU.
> 
> I'm not saying the h/w is the same or even the same spec, but how you
> describe a master to iommu connection needs to be done in the same
> way. This should be done in the same way for ALL iommu's. And if what
> is defined does not work for you, then we need to understand that and
> fix the binding now.

+1

All IOMMUs should use a generic IOMMU Device Tree bindings (and in 
general, the same should be true for all Device Tree bindings).

This means that if we already have some bindings for IOMMU, then they 
should be reused if possible or extended if there is anything missing.

Of course there might be things that such generic bindings can't specify. 
In this case device-specific properties can be introduced, but this is 
last resort.

Best regards,
Tomasz


^ permalink raw reply	[flat|nested] 65+ messages in thread

* Re: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-08-08 21:38         ` Tomasz Figa
  0 siblings, 0 replies; 65+ messages in thread
From: Tomasz Figa @ 2013-08-08 21:38 UTC (permalink / raw)
  To: Rob Herring
  Cc: Kukjin Kim, Hyunwoong Kim, Prathyush, Grant Grundler,
	Will Deacon, Keyyoung Park, Subash Patel, Linux Kernel,
	Sachin Kamat, Linux IOMMU, Linux Samsung SOC, Antonios Motakis,
	Cho KyongHo, kvmarm-FPEHb7Xf0XXUo1n7N8X6UoWGPAHP3yOg,
	Linux ARM Kernel, Rahul Sharma

On Thursday 08 of August 2013 08:09:49 Rob Herring wrote:
> On Thu, Aug 1, 2013 at 8:05 AM, Cho KyongHo <pullip.cho-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org> 
wrote:
> >> -----Original Message-----
> >> From: Rob Herring [mailto:robherring2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org]
> >> Sent: Saturday, July 27, 2013 10:55 PM
> >> 
> >> On Fri, Jul 26, 2013 at 6:28 AM, Cho KyongHo <pullip.cho-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org> 
wrote:
> >> > Signed-off-by: Cho KyongHo <pullip.cho-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
> >> > ---
> >> > 
> >> >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
> >> >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
> >> >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
> >> >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
> >> >  arch/arm/boot/dts/exynos5250.dtsi                  |  291
> >> >  ++++++++++++++++++++ 5 files changed, 617 insertions(+), 0
> >> >  deletions(-)
> >> >  create mode 100644
> >> >  Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu
> >> >  .txt>> > 
> >> > diff --git
> >> > a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmm
> >> > u.txt
> >> > b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmm
> >> > u.txt new file mode 100644
> >> > index 0000000..92f0a33
> >> > --- /dev/null
> >> > +++
> >> > b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmm
> >> > u.txt @@ -0,0 +1,103 @@
> >> > +Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management
> >> > Unit) +
> >> > +Samsung's Exynos architecture contains System MMU that enables
> >> > scattered +physical memory chunks visible as a contiguous region
> >> > to DMA-capable peripheral +devices like MFC, FIMC, FIMD, GScaler,
> >> > FIMC-IS and so forth.
> >> > +
> >> > +System MMU is a sort of IOMMU and support identical translation
> >> > table format to +ARMv7 translation tables with minimum set of page
> >> > properties including access +permissions, shareability and
> >> > security protection. In addition, System MMU has +another
> >> > capabilities like L2 TLB or block-fetch buffers to minimize
> >> > translation +latency.
> >> > +
> >> > +A System MMU is dedicated to a single master peripheral device. 
> >> > Thus, it is +important to specify the correct System MMU in the
> >> > device node of its master +device. Whereas a System MMU is
> >> > dedicated to a master device, the master device +may have more
> >> > than one System MMU.
> >> 
> >> I don't follow the last sentence. Can you elaborate on the type of
> >> connection you are talking about.
> > 
> > Grant also addressed that.
> > 
> > He corrected the sentence like the following:
> >   " Can I suggest rewriting the last two sentences to:
> >      The master device node must correctly specify at least one
> >      SystemMMU. A master  device may have more than one System MMU. "
> > 
> > I will change the sentence
> > 
> >> Also, please align with the ARM system MMU binding that Will Deacon
> >> has submitted particularly in terms of how master connections are
> >> described.
> > 
> > I didn't check it.
> > 
> > Should this align with ARM System MMU bindings?
> > System MMU in Exynos SoC is different from ARM System MMU.
> > It does not follows the specifications of ARM System MMU.
> 
> I'm not saying the h/w is the same or even the same spec, but how you
> describe a master to iommu connection needs to be done in the same
> way. This should be done in the same way for ALL iommu's. And if what
> is defined does not work for you, then we need to understand that and
> fix the binding now.

+1

All IOMMUs should use a generic IOMMU Device Tree bindings (and in 
general, the same should be true for all Device Tree bindings).

This means that if we already have some bindings for IOMMU, then they 
should be reused if possible or extended if there is anything missing.

Of course there might be things that such generic bindings can't specify. 
In this case device-specific properties can be introduced, but this is 
last resort.

Best regards,
Tomasz

^ permalink raw reply	[flat|nested] 65+ messages in thread

* [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-08-08 21:38         ` Tomasz Figa
  0 siblings, 0 replies; 65+ messages in thread
From: Tomasz Figa @ 2013-08-08 21:38 UTC (permalink / raw)
  To: linux-arm-kernel

On Thursday 08 of August 2013 08:09:49 Rob Herring wrote:
> On Thu, Aug 1, 2013 at 8:05 AM, Cho KyongHo <pullip.cho@samsung.com> 
wrote:
> >> -----Original Message-----
> >> From: Rob Herring [mailto:robherring2 at gmail.com]
> >> Sent: Saturday, July 27, 2013 10:55 PM
> >> 
> >> On Fri, Jul 26, 2013 at 6:28 AM, Cho KyongHo <pullip.cho@samsung.com> 
wrote:
> >> > Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
> >> > ---
> >> > 
> >> >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
> >> >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
> >> >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
> >> >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
> >> >  arch/arm/boot/dts/exynos5250.dtsi                  |  291
> >> >  ++++++++++++++++++++ 5 files changed, 617 insertions(+), 0
> >> >  deletions(-)
> >> >  create mode 100644
> >> >  Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu
> >> >  .txt>> > 
> >> > diff --git
> >> > a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmm
> >> > u.txt
> >> > b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmm
> >> > u.txt new file mode 100644
> >> > index 0000000..92f0a33
> >> > --- /dev/null
> >> > +++
> >> > b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmm
> >> > u.txt @@ -0,0 +1,103 @@
> >> > +Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management
> >> > Unit) +
> >> > +Samsung's Exynos architecture contains System MMU that enables
> >> > scattered +physical memory chunks visible as a contiguous region
> >> > to DMA-capable peripheral +devices like MFC, FIMC, FIMD, GScaler,
> >> > FIMC-IS and so forth.
> >> > +
> >> > +System MMU is a sort of IOMMU and support identical translation
> >> > table format to +ARMv7 translation tables with minimum set of page
> >> > properties including access +permissions, shareability and
> >> > security protection. In addition, System MMU has +another
> >> > capabilities like L2 TLB or block-fetch buffers to minimize
> >> > translation +latency.
> >> > +
> >> > +A System MMU is dedicated to a single master peripheral device. 
> >> > Thus, it is +important to specify the correct System MMU in the
> >> > device node of its master +device. Whereas a System MMU is
> >> > dedicated to a master device, the master device +may have more
> >> > than one System MMU.
> >> 
> >> I don't follow the last sentence. Can you elaborate on the type of
> >> connection you are talking about.
> > 
> > Grant also addressed that.
> > 
> > He corrected the sentence like the following:
> >   " Can I suggest rewriting the last two sentences to:
> >      The master device node must correctly specify at least one
> >      SystemMMU. A master  device may have more than one System MMU. "
> > 
> > I will change the sentence
> > 
> >> Also, please align with the ARM system MMU binding that Will Deacon
> >> has submitted particularly in terms of how master connections are
> >> described.
> > 
> > I didn't check it.
> > 
> > Should this align with ARM System MMU bindings?
> > System MMU in Exynos SoC is different from ARM System MMU.
> > It does not follows the specifications of ARM System MMU.
> 
> I'm not saying the h/w is the same or even the same spec, but how you
> describe a master to iommu connection needs to be done in the same
> way. This should be done in the same way for ALL iommu's. And if what
> is defined does not work for you, then we need to understand that and
> fix the binding now.

+1

All IOMMUs should use a generic IOMMU Device Tree bindings (and in 
general, the same should be true for all Device Tree bindings).

This means that if we already have some bindings for IOMMU, then they 
should be reused if possible or extended if there is anything missing.

Of course there might be things that such generic bindings can't specify. 
In this case device-specific properties can be introduced, but this is 
last resort.

Best regards,
Tomasz

^ permalink raw reply	[flat|nested] 65+ messages in thread

* Re: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
  2013-08-08 21:38         ` Tomasz Figa
@ 2013-08-08 21:43           ` Will Deacon
  -1 siblings, 0 replies; 65+ messages in thread
From: Will Deacon @ 2013-08-08 21:43 UTC (permalink / raw)
  To: Tomasz Figa
  Cc: Rob Herring, Cho KyongHo, Linux ARM Kernel, Linux IOMMU,
	Linux Kernel, Linux Samsung SOC, Kukjin Kim, Hyunwoong Kim,
	Prathyush, Grant Grundler, Joerg Roedel, Keyyoung Park,
	Subash Patel, Sachin Kamat, Antonios Motakis, kvmarm,
	Rahul Sharma

On Thu, Aug 08, 2013 at 10:38:10PM +0100, Tomasz Figa wrote:
> On Thursday 08 of August 2013 08:09:49 Rob Herring wrote:
> > On Thu, Aug 1, 2013 at 8:05 AM, Cho KyongHo <pullip.cho@samsung.com> 
> wrote:
> > > Should this align with ARM System MMU bindings?
> > > System MMU in Exynos SoC is different from ARM System MMU.
> > > It does not follows the specifications of ARM System MMU.
> > 
> > I'm not saying the h/w is the same or even the same spec, but how you
> > describe a master to iommu connection needs to be done in the same
> > way. This should be done in the same way for ALL iommu's. And if what
> > is defined does not work for you, then we need to understand that and
> > fix the binding now.
> 
> +1
> 
> All IOMMUs should use a generic IOMMU Device Tree bindings (and in 
> general, the same should be true for all Device Tree bindings).
> 
> This means that if we already have some bindings for IOMMU, then they 
> should be reused if possible or extended if there is anything missing.
> 
> Of course there might be things that such generic bindings can't specify. 
> In this case device-specific properties can be introduced, but this is 
> last resort.

I'm also happy to discuss and/or review bindings in light of what we did for
the ARM SMMU.

Will

^ permalink raw reply	[flat|nested] 65+ messages in thread

* [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-08-08 21:43           ` Will Deacon
  0 siblings, 0 replies; 65+ messages in thread
From: Will Deacon @ 2013-08-08 21:43 UTC (permalink / raw)
  To: linux-arm-kernel

On Thu, Aug 08, 2013 at 10:38:10PM +0100, Tomasz Figa wrote:
> On Thursday 08 of August 2013 08:09:49 Rob Herring wrote:
> > On Thu, Aug 1, 2013 at 8:05 AM, Cho KyongHo <pullip.cho@samsung.com> 
> wrote:
> > > Should this align with ARM System MMU bindings?
> > > System MMU in Exynos SoC is different from ARM System MMU.
> > > It does not follows the specifications of ARM System MMU.
> > 
> > I'm not saying the h/w is the same or even the same spec, but how you
> > describe a master to iommu connection needs to be done in the same
> > way. This should be done in the same way for ALL iommu's. And if what
> > is defined does not work for you, then we need to understand that and
> > fix the binding now.
> 
> +1
> 
> All IOMMUs should use a generic IOMMU Device Tree bindings (and in 
> general, the same should be true for all Device Tree bindings).
> 
> This means that if we already have some bindings for IOMMU, then they 
> should be reused if possible or extended if there is anything missing.
> 
> Of course there might be things that such generic bindings can't specify. 
> In this case device-specific properties can be introduced, but this is 
> last resort.

I'm also happy to discuss and/or review bindings in light of what we did for
the ARM SMMU.

Will

^ permalink raw reply	[flat|nested] 65+ messages in thread

* Re: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-08-09  2:24             ` Cho KyongHo
  0 siblings, 0 replies; 65+ messages in thread
From: Cho KyongHo @ 2013-08-09  2:24 UTC (permalink / raw)
  To: Will Deacon
  Cc: Tomasz Figa, Rob Herring, Linux ARM Kernel, Linux IOMMU,
	Linux Kernel, Linux Samsung SOC, Kukjin Kim, Hyunwoong Kim,
	Prathyush, Grant Grundler, Joerg Roedel, Keyyoung Park,
	Subash Patel, Sachin Kamat, Antonios Motakis, kvmarm,
	Rahul Sharma

On Thu, 08 Aug 2013 22:43:43 +0100, Will Deacon wrote:
> On Thu, Aug 08, 2013 at 10:38:10PM +0100, Tomasz Figa wrote:
> > On Thursday 08 of August 2013 08:09:49 Rob Herring wrote:
> > > On Thu, Aug 1, 2013 at 8:05 AM, Cho KyongHo <pullip.cho@samsung.com> 
> > wrote:
> > > > Should this align with ARM System MMU bindings?
> > > > System MMU in Exynos SoC is different from ARM System MMU.
> > > > It does not follows the specifications of ARM System MMU.
> > > 
> > > I'm not saying the h/w is the same or even the same spec, but how you
> > > describe a master to iommu connection needs to be done in the same
> > > way. This should be done in the same way for ALL iommu's. And if what
> > > is defined does not work for you, then we need to understand that and
> > > fix the binding now.
> > 
> > +1
> > 
> > All IOMMUs should use a generic IOMMU Device Tree bindings (and in 
> > general, the same should be true for all Device Tree bindings).
> > 
> > This means that if we already have some bindings for IOMMU, then they 
> > should be reused if possible or extended if there is anything missing.
> > 
> > Of course there might be things that such generic bindings can't specify. 
> > In this case device-specific properties can be introduced, but this is 
> > last resort.
> 
> I'm also happy to discuss and/or review bindings in light of what we did for
> the ARM SMMU.
> 
> Will

Rob, I now understood what you are talking about.
Do you mean the binding description is lack of details about connection
betwen  System MMU and its master?

thanks.

KyongHo.

^ permalink raw reply	[flat|nested] 65+ messages in thread

* Re: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-08-09  2:24             ` Cho KyongHo
  0 siblings, 0 replies; 65+ messages in thread
From: Cho KyongHo @ 2013-08-09  2:24 UTC (permalink / raw)
  To: Will Deacon
  Cc: Linux Samsung SOC, Hyunwoong Kim, Prathyush, Grant Grundler,
	Keyyoung Park, Subash Patel, Tomasz Figa, Linux Kernel,
	Sachin Kamat, Linux IOMMU, Kukjin Kim, Rob Herring,
	Antonios Motakis, kvmarm-FPEHb7Xf0XXUo1n7N8X6UoWGPAHP3yOg,
	Linux ARM Kernel, Rahul Sharma

On Thu, 08 Aug 2013 22:43:43 +0100, Will Deacon wrote:
> On Thu, Aug 08, 2013 at 10:38:10PM +0100, Tomasz Figa wrote:
> > On Thursday 08 of August 2013 08:09:49 Rob Herring wrote:
> > > On Thu, Aug 1, 2013 at 8:05 AM, Cho KyongHo <pullip.cho-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org> 
> > wrote:
> > > > Should this align with ARM System MMU bindings?
> > > > System MMU in Exynos SoC is different from ARM System MMU.
> > > > It does not follows the specifications of ARM System MMU.
> > > 
> > > I'm not saying the h/w is the same or even the same spec, but how you
> > > describe a master to iommu connection needs to be done in the same
> > > way. This should be done in the same way for ALL iommu's. And if what
> > > is defined does not work for you, then we need to understand that and
> > > fix the binding now.
> > 
> > +1
> > 
> > All IOMMUs should use a generic IOMMU Device Tree bindings (and in 
> > general, the same should be true for all Device Tree bindings).
> > 
> > This means that if we already have some bindings for IOMMU, then they 
> > should be reused if possible or extended if there is anything missing.
> > 
> > Of course there might be things that such generic bindings can't specify. 
> > In this case device-specific properties can be introduced, but this is 
> > last resort.
> 
> I'm also happy to discuss and/or review bindings in light of what we did for
> the ARM SMMU.
> 
> Will

Rob, I now understood what you are talking about.
Do you mean the binding description is lack of details about connection
betwen  System MMU and its master?

thanks.

KyongHo.

^ permalink raw reply	[flat|nested] 65+ messages in thread

* [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-08-09  2:24             ` Cho KyongHo
  0 siblings, 0 replies; 65+ messages in thread
From: Cho KyongHo @ 2013-08-09  2:24 UTC (permalink / raw)
  To: linux-arm-kernel

On Thu, 08 Aug 2013 22:43:43 +0100, Will Deacon wrote:
> On Thu, Aug 08, 2013 at 10:38:10PM +0100, Tomasz Figa wrote:
> > On Thursday 08 of August 2013 08:09:49 Rob Herring wrote:
> > > On Thu, Aug 1, 2013 at 8:05 AM, Cho KyongHo <pullip.cho@samsung.com> 
> > wrote:
> > > > Should this align with ARM System MMU bindings?
> > > > System MMU in Exynos SoC is different from ARM System MMU.
> > > > It does not follows the specifications of ARM System MMU.
> > > 
> > > I'm not saying the h/w is the same or even the same spec, but how you
> > > describe a master to iommu connection needs to be done in the same
> > > way. This should be done in the same way for ALL iommu's. And if what
> > > is defined does not work for you, then we need to understand that and
> > > fix the binding now.
> > 
> > +1
> > 
> > All IOMMUs should use a generic IOMMU Device Tree bindings (and in 
> > general, the same should be true for all Device Tree bindings).
> > 
> > This means that if we already have some bindings for IOMMU, then they 
> > should be reused if possible or extended if there is anything missing.
> > 
> > Of course there might be things that such generic bindings can't specify. 
> > In this case device-specific properties can be introduced, but this is 
> > last resort.
> 
> I'm also happy to discuss and/or review bindings in light of what we did for
> the ARM SMMU.
> 
> Will

Rob, I now understood what you are talking about.
Do you mean the binding description is lack of details about connection
betwen  System MMU and its master?

thanks.

KyongHo.

^ permalink raw reply	[flat|nested] 65+ messages in thread

* Re: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
  2013-07-26 11:28 ` Cho KyongHo
@ 2013-10-07 13:44   ` Rob Herring
  -1 siblings, 0 replies; 65+ messages in thread
From: Rob Herring @ 2013-10-07 13:44 UTC (permalink / raw)
  To: Cho KyongHo
  Cc: Linux ARM Kernel, Linux IOMMU, Linux Kernel, Linux Samsung SOC,
	Kukjin Kim, Hyunwoong Kim, Prathyush, Grant Grundler,
	Joerg Roedel, Keyyoung Park, Subash Patel, Sachin Kamat,
	Antonios Motakis, kvmarm, Rahul Sharma, Will Deacon

On Fri, Jul 26, 2013 at 6:28 AM, Cho KyongHo <pullip.cho@samsung.com> wrote:
> Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
> ---
>  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
>  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
>  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
>  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
>  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
>  5 files changed, 617 insertions(+), 0 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
>
> diff --git a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> new file mode 100644
> index 0000000..92f0a33
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> @@ -0,0 +1,103 @@
> +Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management Unit)
> +
> +Samsung's Exynos architecture contains System MMU that enables scattered
> +physical memory chunks visible as a contiguous region to DMA-capable peripheral
> +devices like MFC, FIMC, FIMD, GScaler, FIMC-IS and so forth.
> +
> +System MMU is a sort of IOMMU and support identical translation table format to
> +ARMv7 translation tables with minimum set of page properties including access
> +permissions, shareability and security protection. In addition, System MMU has
> +another capabilities like L2 TLB or block-fetch buffers to minimize translation
> +latency.
> +
> +A System MMU is dedicated to a single master peripheral device.  Thus, it is
> +important to specify the correct System MMU in the device node of its master
> +device. Whereas a System MMU is dedicated to a master device, the master device
> +may have more than one System MMU.
> +
> +Required properties:
> +- compatible: Should be "samsung,exynos4210-sysmmu"
> +- reg: A tuple of base address and size of System MMU registers.
> +- interrupt-parent: The phandle of the interrupt controller of System MMU
> +- interrupts: A tuple of numbers that indicates the interrupt source.
> +- clock-names: Should be "sysmmu" if the System MMU is needed to gate its clock.
> +               Please refer to the following documents:
> +              Documentation/devicetree/bindings/clock/clock-bindings.txt
> +              Documentation/devicetree/bindings/clock/exynos4-clock.txt
> +              Documentation/devicetree/bindings/clock/exynos5250-clock.txt
> +              Optional "master" if the clock to the System MMU is gated by
> +              another gate clock other than "sysmmu". The System MMU driver
> +              sets "master" the parent of "sysmmu".
> +              Exynos4 SoCs, there needs no "master" clocks.
> +              Exynos5 SoCs, some System MMUs must have "master" clocks.
> +- clocks: Required if the System MMU is needed to gate its clock.
> +         Please refer to the documents listed above.
> +- samsung,power-domain: Required if the System MMU is needed to gate its power.
> +         Please refer to the following document:
> +         Documentation/devicetree/bindings/arm/exynos/power_domain.txt
> +
> +Required properties for the master peripheral devices:
> +- iommu: phandles to the System MMUs of the device

You have not addressed my comments from the last version. We do not
need 2 (or more) different ways to describe the connection between
masters and iommu's. Use mmu-masters property here to describe the
connection.

Rob

^ permalink raw reply	[flat|nested] 65+ messages in thread

* [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-10-07 13:44   ` Rob Herring
  0 siblings, 0 replies; 65+ messages in thread
From: Rob Herring @ 2013-10-07 13:44 UTC (permalink / raw)
  To: linux-arm-kernel

On Fri, Jul 26, 2013 at 6:28 AM, Cho KyongHo <pullip.cho@samsung.com> wrote:
> Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
> ---
>  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
>  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
>  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
>  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
>  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
>  5 files changed, 617 insertions(+), 0 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
>
> diff --git a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> new file mode 100644
> index 0000000..92f0a33
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> @@ -0,0 +1,103 @@
> +Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management Unit)
> +
> +Samsung's Exynos architecture contains System MMU that enables scattered
> +physical memory chunks visible as a contiguous region to DMA-capable peripheral
> +devices like MFC, FIMC, FIMD, GScaler, FIMC-IS and so forth.
> +
> +System MMU is a sort of IOMMU and support identical translation table format to
> +ARMv7 translation tables with minimum set of page properties including access
> +permissions, shareability and security protection. In addition, System MMU has
> +another capabilities like L2 TLB or block-fetch buffers to minimize translation
> +latency.
> +
> +A System MMU is dedicated to a single master peripheral device.  Thus, it is
> +important to specify the correct System MMU in the device node of its master
> +device. Whereas a System MMU is dedicated to a master device, the master device
> +may have more than one System MMU.
> +
> +Required properties:
> +- compatible: Should be "samsung,exynos4210-sysmmu"
> +- reg: A tuple of base address and size of System MMU registers.
> +- interrupt-parent: The phandle of the interrupt controller of System MMU
> +- interrupts: A tuple of numbers that indicates the interrupt source.
> +- clock-names: Should be "sysmmu" if the System MMU is needed to gate its clock.
> +               Please refer to the following documents:
> +              Documentation/devicetree/bindings/clock/clock-bindings.txt
> +              Documentation/devicetree/bindings/clock/exynos4-clock.txt
> +              Documentation/devicetree/bindings/clock/exynos5250-clock.txt
> +              Optional "master" if the clock to the System MMU is gated by
> +              another gate clock other than "sysmmu". The System MMU driver
> +              sets "master" the parent of "sysmmu".
> +              Exynos4 SoCs, there needs no "master" clocks.
> +              Exynos5 SoCs, some System MMUs must have "master" clocks.
> +- clocks: Required if the System MMU is needed to gate its clock.
> +         Please refer to the documents listed above.
> +- samsung,power-domain: Required if the System MMU is needed to gate its power.
> +         Please refer to the following document:
> +         Documentation/devicetree/bindings/arm/exynos/power_domain.txt
> +
> +Required properties for the master peripheral devices:
> +- iommu: phandles to the System MMUs of the device

You have not addressed my comments from the last version. We do not
need 2 (or more) different ways to describe the connection between
masters and iommu's. Use mmu-masters property here to describe the
connection.

Rob

^ permalink raw reply	[flat|nested] 65+ messages in thread

* Re: [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
  2013-10-07 13:44   ` Rob Herring
@ 2013-10-08  4:38     ` Cho KyongHo
  -1 siblings, 0 replies; 65+ messages in thread
From: Cho KyongHo @ 2013-10-08  4:38 UTC (permalink / raw)
  To: Rob Herring
  Cc: Linux ARM Kernel, Linux IOMMU, Linux Kernel, Linux Samsung SOC,
	Kukjin Kim, Hyunwoong Kim, Prathyush, Grant Grundler,
	Joerg Roedel, Keyyoung Park, Subash Patel, Sachin Kamat,
	Antonios Motakis, kvmarm, Rahul Sharma, Will Deacon

On Mon, 07 Oct 2013 08:44:54 -0500, Rob Herring wrote:
> On Fri, Jul 26, 2013 at 6:28 AM, Cho KyongHo <pullip.cho@samsung.com> wrote:
> > Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
> > ---
> >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
> >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
> >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
> >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
> >  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
> >  5 files changed, 617 insertions(+), 0 deletions(-)
> >  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> >
> > diff --git a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > new file mode 100644
> > index 0000000..92f0a33
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > @@ -0,0 +1,103 @@
> > +Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management Unit)
> > +
> > +Samsung's Exynos architecture contains System MMU that enables scattered
> > +physical memory chunks visible as a contiguous region to DMA-capable peripheral
> > +devices like MFC, FIMC, FIMD, GScaler, FIMC-IS and so forth.
> > +
> > +System MMU is a sort of IOMMU and support identical translation table format to
> > +ARMv7 translation tables with minimum set of page properties including access
> > +permissions, shareability and security protection. In addition, System MMU has
> > +another capabilities like L2 TLB or block-fetch buffers to minimize translation
> > +latency.
> > +
> > +A System MMU is dedicated to a single master peripheral device.  Thus, it is
> > +important to specify the correct System MMU in the device node of its master
> > +device. Whereas a System MMU is dedicated to a master device, the master device
> > +may have more than one System MMU.
> > +
> > +Required properties:
> > +- compatible: Should be "samsung,exynos4210-sysmmu"
> > +- reg: A tuple of base address and size of System MMU registers.
> > +- interrupt-parent: The phandle of the interrupt controller of System MMU
> > +- interrupts: A tuple of numbers that indicates the interrupt source.
> > +- clock-names: Should be "sysmmu" if the System MMU is needed to gate its clock.
> > +               Please refer to the following documents:
> > +              Documentation/devicetree/bindings/clock/clock-bindings.txt
> > +              Documentation/devicetree/bindings/clock/exynos4-clock.txt
> > +              Documentation/devicetree/bindings/clock/exynos5250-clock.txt
> > +              Optional "master" if the clock to the System MMU is gated by
> > +              another gate clock other than "sysmmu". The System MMU driver
> > +              sets "master" the parent of "sysmmu".
> > +              Exynos4 SoCs, there needs no "master" clocks.
> > +              Exynos5 SoCs, some System MMUs must have "master" clocks.
> > +- clocks: Required if the System MMU is needed to gate its clock.
> > +         Please refer to the documents listed above.
> > +- samsung,power-domain: Required if the System MMU is needed to gate its power.
> > +         Please refer to the following document:
> > +         Documentation/devicetree/bindings/arm/exynos/power_domain.txt
> > +
> > +Required properties for the master peripheral devices:
> > +- iommu: phandles to the System MMUs of the device
> 
> You have not addressed my comments from the last version. We do not
> need 2 (or more) different ways to describe the connection between
> masters and iommu's. Use mmu-masters property here to describe the
> connection.
> 

Sorry, I forgot to reply.
I just thought the meaning of your comment that it should be align with ARM System MMU.
I now understand and it should be changed to mmu-masters property
because it is now in the kernel.

Thank you.


> Rob

^ permalink raw reply	[flat|nested] 65+ messages in thread

* [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs
@ 2013-10-08  4:38     ` Cho KyongHo
  0 siblings, 0 replies; 65+ messages in thread
From: Cho KyongHo @ 2013-10-08  4:38 UTC (permalink / raw)
  To: linux-arm-kernel

On Mon, 07 Oct 2013 08:44:54 -0500, Rob Herring wrote:
> On Fri, Jul 26, 2013 at 6:28 AM, Cho KyongHo <pullip.cho@samsung.com> wrote:
> > Signed-off-by: Cho KyongHo <pullip.cho@samsung.com>
> > ---
> >  .../bindings/iommu/samsung,exynos4210-sysmmu.txt   |  103 +++++++
> >  arch/arm/boot/dts/exynos4.dtsi                     |  122 ++++++++
> >  arch/arm/boot/dts/exynos4210.dtsi                  |   25 ++
> >  arch/arm/boot/dts/exynos4x12.dtsi                  |   76 +++++
> >  arch/arm/boot/dts/exynos5250.dtsi                  |  291 ++++++++++++++++++++
> >  5 files changed, 617 insertions(+), 0 deletions(-)
> >  create mode 100644 Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> >
> > diff --git a/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > new file mode 100644
> > index 0000000..92f0a33
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/iommu/samsung,exynos4210-sysmmu.txt
> > @@ -0,0 +1,103 @@
> > +Samsung Exynos4210 IOMMU H/W, System MMU (System Memory Management Unit)
> > +
> > +Samsung's Exynos architecture contains System MMU that enables scattered
> > +physical memory chunks visible as a contiguous region to DMA-capable peripheral
> > +devices like MFC, FIMC, FIMD, GScaler, FIMC-IS and so forth.
> > +
> > +System MMU is a sort of IOMMU and support identical translation table format to
> > +ARMv7 translation tables with minimum set of page properties including access
> > +permissions, shareability and security protection. In addition, System MMU has
> > +another capabilities like L2 TLB or block-fetch buffers to minimize translation
> > +latency.
> > +
> > +A System MMU is dedicated to a single master peripheral device.  Thus, it is
> > +important to specify the correct System MMU in the device node of its master
> > +device. Whereas a System MMU is dedicated to a master device, the master device
> > +may have more than one System MMU.
> > +
> > +Required properties:
> > +- compatible: Should be "samsung,exynos4210-sysmmu"
> > +- reg: A tuple of base address and size of System MMU registers.
> > +- interrupt-parent: The phandle of the interrupt controller of System MMU
> > +- interrupts: A tuple of numbers that indicates the interrupt source.
> > +- clock-names: Should be "sysmmu" if the System MMU is needed to gate its clock.
> > +               Please refer to the following documents:
> > +              Documentation/devicetree/bindings/clock/clock-bindings.txt
> > +              Documentation/devicetree/bindings/clock/exynos4-clock.txt
> > +              Documentation/devicetree/bindings/clock/exynos5250-clock.txt
> > +              Optional "master" if the clock to the System MMU is gated by
> > +              another gate clock other than "sysmmu". The System MMU driver
> > +              sets "master" the parent of "sysmmu".
> > +              Exynos4 SoCs, there needs no "master" clocks.
> > +              Exynos5 SoCs, some System MMUs must have "master" clocks.
> > +- clocks: Required if the System MMU is needed to gate its clock.
> > +         Please refer to the documents listed above.
> > +- samsung,power-domain: Required if the System MMU is needed to gate its power.
> > +         Please refer to the following document:
> > +         Documentation/devicetree/bindings/arm/exynos/power_domain.txt
> > +
> > +Required properties for the master peripheral devices:
> > +- iommu: phandles to the System MMUs of the device
> 
> You have not addressed my comments from the last version. We do not
> need 2 (or more) different ways to describe the connection between
> masters and iommu's. Use mmu-masters property here to describe the
> connection.
> 

Sorry, I forgot to reply.
I just thought the meaning of your comment that it should be align with ARM System MMU.
I now understand and it should be changed to mmu-masters property
because it is now in the kernel.

Thank you.


> Rob

^ permalink raw reply	[flat|nested] 65+ messages in thread

end of thread, other threads:[~2013-10-08  4:39 UTC | newest]

Thread overview: 65+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-07-26 11:28 [PATCH v8 06/12] ARM: dts: Add description of System MMU of Exynos SoCs Cho KyongHo
2013-07-26 11:28 ` Cho KyongHo
2013-07-26 17:58 ` Grant Grundler
2013-07-26 17:58   ` Grant Grundler
2013-07-27  9:29   ` Cho KyongHo
2013-07-27  9:29     ` Cho KyongHo
2013-07-27  9:29     ` Cho KyongHo
2013-07-27 13:54 ` Rob Herring
2013-07-27 13:54   ` Rob Herring
2013-08-01 13:05   ` Cho KyongHo
2013-08-01 13:05     ` Cho KyongHo
2013-08-01 13:05     ` Cho KyongHo
2013-08-08 13:09     ` Rob Herring
2013-08-08 13:09       ` Rob Herring
2013-08-08 13:09       ` Rob Herring
2013-08-08 21:38       ` Tomasz Figa
2013-08-08 21:38         ` Tomasz Figa
2013-08-08 21:38         ` Tomasz Figa
2013-08-08 21:43         ` Will Deacon
2013-08-08 21:43           ` Will Deacon
2013-08-09  2:24           ` Cho KyongHo
2013-08-09  2:24             ` Cho KyongHo
2013-08-09  2:24             ` Cho KyongHo
2013-07-29  6:37 ` Sachin Kamat
2013-07-29  6:37   ` Sachin Kamat
2013-07-29  6:37   ` Sachin Kamat
2013-07-29  7:20   ` Cho KyongHo
2013-07-29  7:20     ` Cho KyongHo
2013-07-29  7:57   ` Cho KyongHo
2013-07-29  7:57     ` Cho KyongHo
2013-07-29  7:57     ` Cho KyongHo
2013-07-29  8:05     ` Sachin Kamat
2013-07-29  8:05       ` Sachin Kamat
2013-08-01 13:12       ` Cho KyongHo
2013-08-01 13:12         ` Cho KyongHo
2013-08-01 13:12         ` Cho KyongHo
2013-08-02 17:14 ` Bartlomiej Zolnierkiewicz
2013-08-02 17:14   ` Bartlomiej Zolnierkiewicz
2013-08-02 17:14   ` Bartlomiej Zolnierkiewicz
2013-08-05 11:16   ` Cho KyongHo
2013-08-05 11:16     ` Cho KyongHo
2013-08-05 13:09     ` Bartlomiej Zolnierkiewicz
2013-08-05 13:09       ` Bartlomiej Zolnierkiewicz
2013-08-05 13:09       ` Bartlomiej Zolnierkiewicz
2013-08-05 13:34       ` Marek Szyprowski
2013-08-05 13:34         ` Marek Szyprowski
2013-08-06  9:54       ` Cho KyongHo
2013-08-06  9:54         ` Cho KyongHo
2013-08-06  9:54         ` Cho KyongHo
2013-08-06 13:17         ` Marek Szyprowski
2013-08-06 13:17           ` Marek Szyprowski
2013-08-06 16:07           ` Grant Grundler
2013-08-06 16:07             ` Grant Grundler
     [not found]             ` <CANEJEGtQuKG5err-R7SxD6m+aJWVmn47X9NJLx7UzaRkKhUMoQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-08-06 16:21               ` Eric Boxer
2013-08-07 12:07             ` Cho KyongHo
2013-08-07 12:07               ` Cho KyongHo
2013-08-07 16:21               ` Grant Grundler
2013-08-07 16:21                 ` Grant Grundler
2013-08-07 16:21                 ` Grant Grundler
2013-08-08  2:19                 ` Cho KyongHo
2013-08-08  2:19                   ` Cho KyongHo
2013-10-07 13:44 ` Rob Herring
2013-10-07 13:44   ` Rob Herring
2013-10-08  4:38   ` Cho KyongHo
2013-10-08  4:38     ` Cho KyongHo

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.