18c2ecf20Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
28c2ecf20Sopenharmony_ci%YAML 1.2
38c2ecf20Sopenharmony_ci---
48c2ecf20Sopenharmony_ci$id: http://devicetree.org/schemas/iommu/samsung,sysmmu.yaml#
58c2ecf20Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
68c2ecf20Sopenharmony_ci
78c2ecf20Sopenharmony_cititle: Samsung Exynos IOMMU H/W, System MMU (System Memory Management Unit)
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_cimaintainers:
108c2ecf20Sopenharmony_ci  - Marek Szyprowski <m.szyprowski@samsung.com>
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_cidescription: |+
138c2ecf20Sopenharmony_ci  Samsung's Exynos architecture contains System MMUs that enables scattered
148c2ecf20Sopenharmony_ci  physical memory chunks visible as a contiguous region to DMA-capable peripheral
158c2ecf20Sopenharmony_ci  devices like MFC, FIMC, FIMD, GScaler, FIMC-IS and so forth.
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_ci  System MMU is an IOMMU and supports identical translation table format to
188c2ecf20Sopenharmony_ci  ARMv7 translation tables with minimum set of page properties including access
198c2ecf20Sopenharmony_ci  permissions, shareability and security protection. In addition, System MMU has
208c2ecf20Sopenharmony_ci  another capabilities like L2 TLB or block-fetch buffers to minimize translation
218c2ecf20Sopenharmony_ci  latency.
228c2ecf20Sopenharmony_ci
238c2ecf20Sopenharmony_ci  System MMUs are in many to one relation with peripheral devices, i.e. single
248c2ecf20Sopenharmony_ci  peripheral device might have multiple System MMUs (usually one for each bus
258c2ecf20Sopenharmony_ci  master), but one System MMU can handle transactions from only one peripheral
268c2ecf20Sopenharmony_ci  device. The relation between a System MMU and the peripheral device needs to be
278c2ecf20Sopenharmony_ci  defined in device node of the peripheral device.
288c2ecf20Sopenharmony_ci
298c2ecf20Sopenharmony_ci  MFC in all Exynos SoCs and FIMD, M2M Scalers and G2D in Exynos5420 has 2 System
308c2ecf20Sopenharmony_ci  MMUs.
318c2ecf20Sopenharmony_ci  * MFC has one System MMU on its left and right bus.
328c2ecf20Sopenharmony_ci  * FIMD in Exynos5420 has one System MMU for window 0 and 4, the other system MMU
338c2ecf20Sopenharmony_ci    for window 1, 2 and 3.
348c2ecf20Sopenharmony_ci  * M2M Scalers and G2D in Exynos5420 has one System MMU on the read channel and
358c2ecf20Sopenharmony_ci    the other System MMU on the write channel.
368c2ecf20Sopenharmony_ci
378c2ecf20Sopenharmony_ci  For information on assigning System MMU controller to its peripheral devices,
388c2ecf20Sopenharmony_ci  see generic IOMMU bindings.
398c2ecf20Sopenharmony_ci
408c2ecf20Sopenharmony_ciproperties:
418c2ecf20Sopenharmony_ci  compatible:
428c2ecf20Sopenharmony_ci    const: samsung,exynos-sysmmu
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_ci  reg:
458c2ecf20Sopenharmony_ci    maxItems: 1
468c2ecf20Sopenharmony_ci
478c2ecf20Sopenharmony_ci  interrupts:
488c2ecf20Sopenharmony_ci    maxItems: 1
498c2ecf20Sopenharmony_ci
508c2ecf20Sopenharmony_ci  clocks:
518c2ecf20Sopenharmony_ci    minItems: 1
528c2ecf20Sopenharmony_ci    maxItems: 2
538c2ecf20Sopenharmony_ci
548c2ecf20Sopenharmony_ci  clock-names:
558c2ecf20Sopenharmony_ci    oneOf:
568c2ecf20Sopenharmony_ci      - items:
578c2ecf20Sopenharmony_ci          - const: sysmmu
588c2ecf20Sopenharmony_ci      - items:
598c2ecf20Sopenharmony_ci          - const: sysmmu
608c2ecf20Sopenharmony_ci          - const: master
618c2ecf20Sopenharmony_ci      - items:
628c2ecf20Sopenharmony_ci          - const: aclk
638c2ecf20Sopenharmony_ci          - const: pclk
648c2ecf20Sopenharmony_ci
658c2ecf20Sopenharmony_ci  "#iommu-cells":
668c2ecf20Sopenharmony_ci    const: 0
678c2ecf20Sopenharmony_ci
688c2ecf20Sopenharmony_ci  power-domains:
698c2ecf20Sopenharmony_ci    description: |
708c2ecf20Sopenharmony_ci      Required if the System MMU is needed to gate its power.
718c2ecf20Sopenharmony_ci      Please refer to the following document:
728c2ecf20Sopenharmony_ci      Documentation/devicetree/bindings/power/pd-samsung.yaml
738c2ecf20Sopenharmony_ci    maxItems: 1
748c2ecf20Sopenharmony_ci
758c2ecf20Sopenharmony_cirequired:
768c2ecf20Sopenharmony_ci  - compatible
778c2ecf20Sopenharmony_ci  - reg
788c2ecf20Sopenharmony_ci  - interrupts
798c2ecf20Sopenharmony_ci  - clocks
808c2ecf20Sopenharmony_ci  - clock-names
818c2ecf20Sopenharmony_ci  - "#iommu-cells"
828c2ecf20Sopenharmony_ci
838c2ecf20Sopenharmony_ciadditionalProperties: false
848c2ecf20Sopenharmony_ci
858c2ecf20Sopenharmony_ciexamples:
868c2ecf20Sopenharmony_ci  - |
878c2ecf20Sopenharmony_ci    #include <dt-bindings/clock/exynos5250.h>
888c2ecf20Sopenharmony_ci
898c2ecf20Sopenharmony_ci    gsc_0: scaler@13e00000 {
908c2ecf20Sopenharmony_ci      compatible = "samsung,exynos5-gsc";
918c2ecf20Sopenharmony_ci      reg = <0x13e00000 0x1000>;
928c2ecf20Sopenharmony_ci      interrupts = <0 85 0>;
938c2ecf20Sopenharmony_ci      power-domains = <&pd_gsc>;
948c2ecf20Sopenharmony_ci      clocks = <&clock CLK_GSCL0>;
958c2ecf20Sopenharmony_ci      clock-names = "gscl";
968c2ecf20Sopenharmony_ci      iommus = <&sysmmu_gsc0>;
978c2ecf20Sopenharmony_ci    };
988c2ecf20Sopenharmony_ci
998c2ecf20Sopenharmony_ci    sysmmu_gsc0: iommu@13e80000 {
1008c2ecf20Sopenharmony_ci      compatible = "samsung,exynos-sysmmu";
1018c2ecf20Sopenharmony_ci      reg = <0x13E80000 0x1000>;
1028c2ecf20Sopenharmony_ci      interrupt-parent = <&combiner>;
1038c2ecf20Sopenharmony_ci      interrupts = <2 0>;
1048c2ecf20Sopenharmony_ci      clock-names = "sysmmu", "master";
1058c2ecf20Sopenharmony_ci      clocks = <&clock CLK_SMMU_GSCL0>,
1068c2ecf20Sopenharmony_ci               <&clock CLK_GSCL0>;
1078c2ecf20Sopenharmony_ci      power-domains = <&pd_gsc>;
1088c2ecf20Sopenharmony_ci      #iommu-cells = <0>;
1098c2ecf20Sopenharmony_ci    };
1108c2ecf20Sopenharmony_ci
111