1*4882a593Smuzhiyun# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2*4882a593Smuzhiyun# Copyright (c) 2020 MediaTek Inc.
3*4882a593Smuzhiyun%YAML 1.2
4*4882a593Smuzhiyun---
5*4882a593Smuzhiyun$id: http://devicetree.org/schemas/memory-controllers/mediatek,smi-common.yaml#
6*4882a593Smuzhiyun$schema: http://devicetree.org/meta-schemas/core.yaml#
7*4882a593Smuzhiyun
8*4882a593Smuzhiyuntitle: SMI (Smart Multimedia Interface) Common
9*4882a593Smuzhiyun
10*4882a593Smuzhiyunmaintainers:
11*4882a593Smuzhiyun  - Yong Wu <yong.wu@mediatek.com>
12*4882a593Smuzhiyun
13*4882a593Smuzhiyundescription: |
14*4882a593Smuzhiyun  The hardware block diagram please check bindings/iommu/mediatek,iommu.yaml
15*4882a593Smuzhiyun
16*4882a593Smuzhiyun  MediaTek SMI have two generations of HW architecture, here is the list
17*4882a593Smuzhiyun  which generation the SoCs use:
18*4882a593Smuzhiyun  generation 1: mt2701 and mt7623.
19*4882a593Smuzhiyun  generation 2: mt2712, mt6779, mt8167, mt8173 and mt8183.
20*4882a593Smuzhiyun
21*4882a593Smuzhiyun  There's slight differences between the two SMI, for generation 2, the
22*4882a593Smuzhiyun  register which control the iommu port is at each larb's register base. But
23*4882a593Smuzhiyun  for generation 1, the register is at smi ao base(smi always on register
24*4882a593Smuzhiyun  base). Besides that, the smi async clock should be prepared and enabled for
25*4882a593Smuzhiyun  SMI generation 1 to transform the smi clock into emi clock domain, but that is
26*4882a593Smuzhiyun  not needed for SMI generation 2.
27*4882a593Smuzhiyun
28*4882a593Smuzhiyunproperties:
29*4882a593Smuzhiyun  compatible:
30*4882a593Smuzhiyun    oneOf:
31*4882a593Smuzhiyun      - enum:
32*4882a593Smuzhiyun          - mediatek,mt2701-smi-common
33*4882a593Smuzhiyun          - mediatek,mt2712-smi-common
34*4882a593Smuzhiyun          - mediatek,mt6779-smi-common
35*4882a593Smuzhiyun          - mediatek,mt8167-smi-common
36*4882a593Smuzhiyun          - mediatek,mt8173-smi-common
37*4882a593Smuzhiyun          - mediatek,mt8183-smi-common
38*4882a593Smuzhiyun
39*4882a593Smuzhiyun      - description: for mt7623
40*4882a593Smuzhiyun        items:
41*4882a593Smuzhiyun          - const: mediatek,mt7623-smi-common
42*4882a593Smuzhiyun          - const: mediatek,mt2701-smi-common
43*4882a593Smuzhiyun
44*4882a593Smuzhiyun  reg:
45*4882a593Smuzhiyun    maxItems: 1
46*4882a593Smuzhiyun
47*4882a593Smuzhiyun  power-domains:
48*4882a593Smuzhiyun    maxItems: 1
49*4882a593Smuzhiyun
50*4882a593Smuzhiyun  clocks:
51*4882a593Smuzhiyun    description: |
52*4882a593Smuzhiyun      apb and smi are mandatory. the async is only for generation 1 smi HW.
53*4882a593Smuzhiyun      gals(global async local sync) also is optional, see below.
54*4882a593Smuzhiyun    minItems: 2
55*4882a593Smuzhiyun    maxItems: 4
56*4882a593Smuzhiyun    items:
57*4882a593Smuzhiyun      - description: apb is Advanced Peripheral Bus clock, It's the clock for
58*4882a593Smuzhiyun          setting the register.
59*4882a593Smuzhiyun      - description: smi is the clock for transfer data and command.
60*4882a593Smuzhiyun      - description: async is asynchronous clock, it help transform the smi
61*4882a593Smuzhiyun          clock into the emi clock domain.
62*4882a593Smuzhiyun      - description: gals0 is the path0 clock of gals.
63*4882a593Smuzhiyun      - description: gals1 is the path1 clock of gals.
64*4882a593Smuzhiyun
65*4882a593Smuzhiyun  clock-names:
66*4882a593Smuzhiyun    minItems: 2
67*4882a593Smuzhiyun    maxItems: 4
68*4882a593Smuzhiyun
69*4882a593Smuzhiyunrequired:
70*4882a593Smuzhiyun  - compatible
71*4882a593Smuzhiyun  - reg
72*4882a593Smuzhiyun  - power-domains
73*4882a593Smuzhiyun  - clocks
74*4882a593Smuzhiyun  - clock-names
75*4882a593Smuzhiyun
76*4882a593SmuzhiyunallOf:
77*4882a593Smuzhiyun  - if:  # only for gen1 HW
78*4882a593Smuzhiyun      properties:
79*4882a593Smuzhiyun        compatible:
80*4882a593Smuzhiyun          contains:
81*4882a593Smuzhiyun            enum:
82*4882a593Smuzhiyun              - mediatek,mt2701-smi-common
83*4882a593Smuzhiyun    then:
84*4882a593Smuzhiyun      properties:
85*4882a593Smuzhiyun        clocks:
86*4882a593Smuzhiyun          minItems: 3
87*4882a593Smuzhiyun          maxItems: 3
88*4882a593Smuzhiyun        clock-names:
89*4882a593Smuzhiyun          items:
90*4882a593Smuzhiyun            - const: apb
91*4882a593Smuzhiyun            - const: smi
92*4882a593Smuzhiyun            - const: async
93*4882a593Smuzhiyun
94*4882a593Smuzhiyun  - if:  # for gen2 HW that have gals
95*4882a593Smuzhiyun      properties:
96*4882a593Smuzhiyun        compatible:
97*4882a593Smuzhiyun          enum:
98*4882a593Smuzhiyun            - mediatek,mt6779-smi-common
99*4882a593Smuzhiyun            - mediatek,mt8183-smi-common
100*4882a593Smuzhiyun
101*4882a593Smuzhiyun    then:
102*4882a593Smuzhiyun      properties:
103*4882a593Smuzhiyun        clocks:
104*4882a593Smuzhiyun          minItems: 4
105*4882a593Smuzhiyun          maxItems: 4
106*4882a593Smuzhiyun        clock-names:
107*4882a593Smuzhiyun          items:
108*4882a593Smuzhiyun            - const: apb
109*4882a593Smuzhiyun            - const: smi
110*4882a593Smuzhiyun            - const: gals0
111*4882a593Smuzhiyun            - const: gals1
112*4882a593Smuzhiyun
113*4882a593Smuzhiyun    else:  # for gen2 HW that don't have gals
114*4882a593Smuzhiyun      properties:
115*4882a593Smuzhiyun        clocks:
116*4882a593Smuzhiyun          minItems: 2
117*4882a593Smuzhiyun          maxItems: 2
118*4882a593Smuzhiyun        clock-names:
119*4882a593Smuzhiyun          items:
120*4882a593Smuzhiyun            - const: apb
121*4882a593Smuzhiyun            - const: smi
122*4882a593Smuzhiyun
123*4882a593SmuzhiyunadditionalProperties: false
124*4882a593Smuzhiyun
125*4882a593Smuzhiyunexamples:
126*4882a593Smuzhiyun  - |+
127*4882a593Smuzhiyun    #include <dt-bindings/clock/mt8173-clk.h>
128*4882a593Smuzhiyun    #include <dt-bindings/power/mt8173-power.h>
129*4882a593Smuzhiyun
130*4882a593Smuzhiyun    smi_common: smi@14022000 {
131*4882a593Smuzhiyun            compatible = "mediatek,mt8173-smi-common";
132*4882a593Smuzhiyun            reg = <0x14022000 0x1000>;
133*4882a593Smuzhiyun            power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
134*4882a593Smuzhiyun            clocks = <&mmsys CLK_MM_SMI_COMMON>,
135*4882a593Smuzhiyun                     <&mmsys CLK_MM_SMI_COMMON>;
136*4882a593Smuzhiyun            clock-names = "apb", "smi";
137*4882a593Smuzhiyun    };
138