1c626695eSWenbin Mei# SPDX-License-Identifier: GPL-2.0
2c626695eSWenbin Mei%YAML 1.2
3c626695eSWenbin Mei---
4c626695eSWenbin Mei$id: http://devicetree.org/schemas/mmc/mtk-sd.yaml#
5c626695eSWenbin Mei$schema: http://devicetree.org/meta-schemas/core.yaml#
6c626695eSWenbin Mei
7c626695eSWenbin Meititle: MTK MSDC Storage Host Controller Binding
8c626695eSWenbin Mei
9c626695eSWenbin Meimaintainers:
10c626695eSWenbin Mei  - Chaotian Jing <chaotian.jing@mediatek.com>
11c626695eSWenbin Mei  - Wenbin Mei <wenbin.mei@mediatek.com>
12c626695eSWenbin Mei
13c626695eSWenbin Meiproperties:
14c626695eSWenbin Mei  compatible:
15c626695eSWenbin Mei    oneOf:
16c626695eSWenbin Mei      - enum:
17c626695eSWenbin Mei          - mediatek,mt2701-mmc
18c626695eSWenbin Mei          - mediatek,mt2712-mmc
19c626695eSWenbin Mei          - mediatek,mt6779-mmc
2055e7dceeSAngeloGioacchino Del Regno          - mediatek,mt6795-mmc
21c626695eSWenbin Mei          - mediatek,mt7620-mmc
22c626695eSWenbin Mei          - mediatek,mt7622-mmc
23c626695eSWenbin Mei          - mediatek,mt8135-mmc
24c626695eSWenbin Mei          - mediatek,mt8173-mmc
25c626695eSWenbin Mei          - mediatek,mt8183-mmc
26c626695eSWenbin Mei          - mediatek,mt8516-mmc
27c626695eSWenbin Mei      - items:
28c626695eSWenbin Mei          - const: mediatek,mt7623-mmc
29c626695eSWenbin Mei          - const: mediatek,mt2701-mmc
3059a23395SWenbin Mei      - items:
314ec43b87SJohnson Wang          - enum:
324ec43b87SJohnson Wang              - mediatek,mt8186-mmc
334ec43b87SJohnson Wang              - mediatek,mt8188-mmc
344ec43b87SJohnson Wang              - mediatek,mt8192-mmc
354ec43b87SJohnson Wang              - mediatek,mt8195-mmc
3659a23395SWenbin Mei          - const: mediatek,mt8183-mmc
37c626695eSWenbin Mei
384df297aaSRob Herring  reg:
397792fdf6STinghan Shen    minItems: 1
407792fdf6STinghan Shen    items:
417792fdf6STinghan Shen      - description: base register (required).
427792fdf6STinghan Shen      - description: top base register (required for MT8183).
434df297aaSRob Herring
44c626695eSWenbin Mei  clocks:
45c626695eSWenbin Mei    description:
46c626695eSWenbin Mei      Should contain phandle for the clock feeding the MMC controller.
47c626695eSWenbin Mei    minItems: 2
48*0b36b7cdSNícolas F. R. A. Prado    maxItems: 7
49c626695eSWenbin Mei
50c626695eSWenbin Mei  clock-names:
51c626695eSWenbin Mei    minItems: 2
52*0b36b7cdSNícolas F. R. A. Prado    maxItems: 7
53c626695eSWenbin Mei
544df297aaSRob Herring  interrupts:
55035cc395SAxe Yang    description:
56035cc395SAxe Yang      Should at least contain MSDC GIC interrupt. To support SDIO in-band wakeup, an extended
57035cc395SAxe Yang      interrupt is required and be configured as wakeup source irq.
58035cc395SAxe Yang    minItems: 1
59035cc395SAxe Yang    maxItems: 2
60035cc395SAxe Yang
61035cc395SAxe Yang  interrupt-names:
62035cc395SAxe Yang    items:
63035cc395SAxe Yang      - const: msdc
64035cc395SAxe Yang      - const: sdio_wakeup
654df297aaSRob Herring
66c626695eSWenbin Mei  pinctrl-names:
67035cc395SAxe Yang    description:
68035cc395SAxe Yang      Should at least contain default and state_uhs. To support SDIO in-band wakeup, dat1 pin
69035cc395SAxe Yang      will be switched between GPIO mode and SDIO DAT1 mode, state_eint is mandatory in this
70035cc395SAxe Yang      scenario.
71035cc395SAxe Yang    minItems: 2
72c626695eSWenbin Mei    items:
73c626695eSWenbin Mei      - const: default
74c626695eSWenbin Mei      - const: state_uhs
75035cc395SAxe Yang      - const: state_eint
76c626695eSWenbin Mei
77c626695eSWenbin Mei  pinctrl-0:
78c626695eSWenbin Mei    description:
79c626695eSWenbin Mei      should contain default/high speed pin ctrl.
80c626695eSWenbin Mei    maxItems: 1
81c626695eSWenbin Mei
82c626695eSWenbin Mei  pinctrl-1:
83c626695eSWenbin Mei    description:
84c626695eSWenbin Mei      should contain uhs mode pin ctrl.
85c626695eSWenbin Mei    maxItems: 1
86c626695eSWenbin Mei
87035cc395SAxe Yang  pinctrl-2:
88035cc395SAxe Yang    description:
89035cc395SAxe Yang      should switch dat1 pin to GPIO mode.
90035cc395SAxe Yang    maxItems: 1
91035cc395SAxe Yang
92c626695eSWenbin Mei  assigned-clocks:
93c626695eSWenbin Mei    description:
94c626695eSWenbin Mei      PLL of the source clock.
95c626695eSWenbin Mei    maxItems: 1
96c626695eSWenbin Mei
97c626695eSWenbin Mei  assigned-clock-parents:
98c626695eSWenbin Mei    description:
99c626695eSWenbin Mei      parent of source clock, used for HS400 mode to get 400Mhz source clock.
100c626695eSWenbin Mei    maxItems: 1
101c626695eSWenbin Mei
102c626695eSWenbin Mei  hs400-ds-delay:
103c626695eSWenbin Mei    $ref: /schemas/types.yaml#/definitions/uint32
104c626695eSWenbin Mei    description:
105c626695eSWenbin Mei      HS400 DS delay setting.
106c626695eSWenbin Mei    minimum: 0
107c626695eSWenbin Mei    maximum: 0xffffffff
108c626695eSWenbin Mei
109c626695eSWenbin Mei  mediatek,hs200-cmd-int-delay:
110c626695eSWenbin Mei    $ref: /schemas/types.yaml#/definitions/uint32
111c626695eSWenbin Mei    description:
112c626695eSWenbin Mei      HS200 command internal delay setting.
113c626695eSWenbin Mei      This field has total 32 stages.
114c626695eSWenbin Mei      The value is an integer from 0 to 31.
115c626695eSWenbin Mei    minimum: 0
116c626695eSWenbin Mei    maximum: 31
117c626695eSWenbin Mei
118c626695eSWenbin Mei  mediatek,hs400-cmd-int-delay:
119c626695eSWenbin Mei    $ref: /schemas/types.yaml#/definitions/uint32
120c626695eSWenbin Mei    description:
121c626695eSWenbin Mei      HS400 command internal delay setting.
122c626695eSWenbin Mei      This field has total 32 stages.
123c626695eSWenbin Mei      The value is an integer from 0 to 31.
124c626695eSWenbin Mei    minimum: 0
125c626695eSWenbin Mei    maximum: 31
126c626695eSWenbin Mei
127c626695eSWenbin Mei  mediatek,hs400-cmd-resp-sel-rising:
128c626695eSWenbin Mei    $ref: /schemas/types.yaml#/definitions/flag
129c626695eSWenbin Mei    description:
130c626695eSWenbin Mei      HS400 command response sample selection.
131c626695eSWenbin Mei      If present, HS400 command responses are sampled on rising edges.
132c626695eSWenbin Mei      If not present, HS400 command responses are sampled on falling edges.
133c626695eSWenbin Mei
134fb4708e6SWenbin Mei  mediatek,hs400-ds-dly3:
135fb4708e6SWenbin Mei    $ref: /schemas/types.yaml#/definitions/uint32
136fb4708e6SWenbin Mei    description:
137fb4708e6SWenbin Mei      Gear of the third delay line for DS for input data latch in data
138fb4708e6SWenbin Mei      pad macro, there are 32 stages from 0 to 31.
139fb4708e6SWenbin Mei      For different corner IC, the time is different about one step, it is
140fb4708e6SWenbin Mei      about 100ps.
141fb4708e6SWenbin Mei      The value is confirmed by doing scan and calibration to find a best
142fb4708e6SWenbin Mei      value with corner IC and it is valid only for HS400 mode.
143fb4708e6SWenbin Mei    minimum: 0
144fb4708e6SWenbin Mei    maximum: 31
145fb4708e6SWenbin Mei
146c626695eSWenbin Mei  mediatek,latch-ck:
147c626695eSWenbin Mei    $ref: /schemas/types.yaml#/definitions/uint32
148c626695eSWenbin Mei    description:
149c626695eSWenbin Mei      Some SoCs do not support enhance_rx, need set correct latch-ck to avoid
150c626695eSWenbin Mei      data crc error caused by stop clock(fifo full) Valid range = [0:0x7].
151c626695eSWenbin Mei      if not present, default value is 0.
152c626695eSWenbin Mei      applied to compatible "mediatek,mt2701-mmc".
153c626695eSWenbin Mei    minimum: 0
154c626695eSWenbin Mei    maximum: 7
155c626695eSWenbin Mei
156c626695eSWenbin Mei  resets:
157c626695eSWenbin Mei    maxItems: 1
158c626695eSWenbin Mei
159c626695eSWenbin Mei  reset-names:
160c626695eSWenbin Mei    const: hrst
161c626695eSWenbin Mei
162c626695eSWenbin Meirequired:
163c626695eSWenbin Mei  - compatible
164c626695eSWenbin Mei  - reg
165c626695eSWenbin Mei  - interrupts
166c626695eSWenbin Mei  - clocks
167c626695eSWenbin Mei  - clock-names
168c626695eSWenbin Mei  - pinctrl-names
169c626695eSWenbin Mei  - pinctrl-0
170c626695eSWenbin Mei  - pinctrl-1
171c626695eSWenbin Mei  - vmmc-supply
172c626695eSWenbin Mei  - vqmmc-supply
173c626695eSWenbin Mei
174*0b36b7cdSNícolas F. R. A. PradoallOf:
175*0b36b7cdSNícolas F. R. A. Prado  - $ref: mmc-controller.yaml#
176*0b36b7cdSNícolas F. R. A. Prado  - if:
177*0b36b7cdSNícolas F. R. A. Prado      properties:
178*0b36b7cdSNícolas F. R. A. Prado        compatible:
179*0b36b7cdSNícolas F. R. A. Prado          enum:
180*0b36b7cdSNícolas F. R. A. Prado            - mediatek,mt2701-mmc
181*0b36b7cdSNícolas F. R. A. Prado            - mediatek,mt6779-mmc
182*0b36b7cdSNícolas F. R. A. Prado            - mediatek,mt6795-mmc
183*0b36b7cdSNícolas F. R. A. Prado            - mediatek,mt7620-mmc
184*0b36b7cdSNícolas F. R. A. Prado            - mediatek,mt7622-mmc
185*0b36b7cdSNícolas F. R. A. Prado            - mediatek,mt7623-mmc
186*0b36b7cdSNícolas F. R. A. Prado            - mediatek,mt8135-mmc
187*0b36b7cdSNícolas F. R. A. Prado            - mediatek,mt8173-mmc
188*0b36b7cdSNícolas F. R. A. Prado            - mediatek,mt8183-mmc
189*0b36b7cdSNícolas F. R. A. Prado            - mediatek,mt8186-mmc
190*0b36b7cdSNícolas F. R. A. Prado            - mediatek,mt8188-mmc
191*0b36b7cdSNícolas F. R. A. Prado            - mediatek,mt8195-mmc
192*0b36b7cdSNícolas F. R. A. Prado            - mediatek,mt8516-mmc
193*0b36b7cdSNícolas F. R. A. Prado    then:
194*0b36b7cdSNícolas F. R. A. Prado      properties:
195*0b36b7cdSNícolas F. R. A. Prado        clocks:
196*0b36b7cdSNícolas F. R. A. Prado          minItems: 2
197*0b36b7cdSNícolas F. R. A. Prado          items:
198*0b36b7cdSNícolas F. R. A. Prado            - description: source clock
199*0b36b7cdSNícolas F. R. A. Prado            - description: HCLK which used for host
200*0b36b7cdSNícolas F. R. A. Prado            - description: independent source clock gate
201*0b36b7cdSNícolas F. R. A. Prado        clock-names:
202*0b36b7cdSNícolas F. R. A. Prado          minItems: 2
203*0b36b7cdSNícolas F. R. A. Prado          items:
204*0b36b7cdSNícolas F. R. A. Prado            - const: source
205*0b36b7cdSNícolas F. R. A. Prado            - const: hclk
206*0b36b7cdSNícolas F. R. A. Prado            - const: source_cg
207*0b36b7cdSNícolas F. R. A. Prado
208*0b36b7cdSNícolas F. R. A. Prado  - if:
209*0b36b7cdSNícolas F. R. A. Prado      properties:
210*0b36b7cdSNícolas F. R. A. Prado        compatible:
211*0b36b7cdSNícolas F. R. A. Prado          contains:
212*0b36b7cdSNícolas F. R. A. Prado            const: mediatek,mt2712-mmc
213*0b36b7cdSNícolas F. R. A. Prado    then:
214*0b36b7cdSNícolas F. R. A. Prado      properties:
215*0b36b7cdSNícolas F. R. A. Prado        clocks:
216*0b36b7cdSNícolas F. R. A. Prado          minItems: 3
217*0b36b7cdSNícolas F. R. A. Prado          items:
218*0b36b7cdSNícolas F. R. A. Prado            - description: source clock
219*0b36b7cdSNícolas F. R. A. Prado            - description: HCLK which used for host
220*0b36b7cdSNícolas F. R. A. Prado            - description: independent source clock gate
221*0b36b7cdSNícolas F. R. A. Prado            - description: bus clock used for internal register access (required for MSDC0/3).
222*0b36b7cdSNícolas F. R. A. Prado        clock-names:
223*0b36b7cdSNícolas F. R. A. Prado          minItems: 3
224*0b36b7cdSNícolas F. R. A. Prado          items:
225*0b36b7cdSNícolas F. R. A. Prado            - const: source
226*0b36b7cdSNícolas F. R. A. Prado            - const: hclk
227*0b36b7cdSNícolas F. R. A. Prado            - const: source_cg
228*0b36b7cdSNícolas F. R. A. Prado            - const: bus_clk
229*0b36b7cdSNícolas F. R. A. Prado
230*0b36b7cdSNícolas F. R. A. Prado  - if:
2317792fdf6STinghan Shen      properties:
2327792fdf6STinghan Shen        compatible:
2337792fdf6STinghan Shen          contains:
2347792fdf6STinghan Shen            const: mediatek,mt8183-mmc
2357792fdf6STinghan Shen    then:
2367792fdf6STinghan Shen      properties:
2377792fdf6STinghan Shen        reg:
2387792fdf6STinghan Shen          minItems: 2
2397792fdf6STinghan Shen
240*0b36b7cdSNícolas F. R. A. Prado  - if:
241*0b36b7cdSNícolas F. R. A. Prado      properties:
242*0b36b7cdSNícolas F. R. A. Prado        compatible:
243*0b36b7cdSNícolas F. R. A. Prado          contains:
244*0b36b7cdSNícolas F. R. A. Prado            const: mediatek,mt8192-mmc
245*0b36b7cdSNícolas F. R. A. Prado    then:
246*0b36b7cdSNícolas F. R. A. Prado      properties:
247*0b36b7cdSNícolas F. R. A. Prado        clocks:
248*0b36b7cdSNícolas F. R. A. Prado          items:
249*0b36b7cdSNícolas F. R. A. Prado            - description: source clock
250*0b36b7cdSNícolas F. R. A. Prado            - description: HCLK which used for host
251*0b36b7cdSNícolas F. R. A. Prado            - description: independent source clock gate
252*0b36b7cdSNícolas F. R. A. Prado            - description: msdc subsys clock gate
253*0b36b7cdSNícolas F. R. A. Prado            - description: peripheral bus clock gate
254*0b36b7cdSNícolas F. R. A. Prado            - description: AXI bus clock gate
255*0b36b7cdSNícolas F. R. A. Prado            - description: AHB bus clock gate
256*0b36b7cdSNícolas F. R. A. Prado        clock-names:
257*0b36b7cdSNícolas F. R. A. Prado          items:
258*0b36b7cdSNícolas F. R. A. Prado            - const: source
259*0b36b7cdSNícolas F. R. A. Prado            - const: hclk
260*0b36b7cdSNícolas F. R. A. Prado            - const: source_cg
261*0b36b7cdSNícolas F. R. A. Prado            - const: sys_cg
262*0b36b7cdSNícolas F. R. A. Prado            - const: pclk_cg
263*0b36b7cdSNícolas F. R. A. Prado            - const: axi_cg
264*0b36b7cdSNícolas F. R. A. Prado            - const: ahb_cg
265*0b36b7cdSNícolas F. R. A. Prado
266c626695eSWenbin MeiunevaluatedProperties: false
267c626695eSWenbin Mei
268c626695eSWenbin Meiexamples:
269c626695eSWenbin Mei  - |
270c626695eSWenbin Mei    #include <dt-bindings/interrupt-controller/irq.h>
271c626695eSWenbin Mei    #include <dt-bindings/interrupt-controller/arm-gic.h>
272c626695eSWenbin Mei    #include <dt-bindings/clock/mt8173-clk.h>
273c626695eSWenbin Mei    mmc0: mmc@11230000 {
274c626695eSWenbin Mei        compatible = "mediatek,mt8173-mmc";
275c626695eSWenbin Mei        reg = <0x11230000 0x1000>;
276c626695eSWenbin Mei        interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_LOW>;
277c626695eSWenbin Mei        vmmc-supply = <&mt6397_vemc_3v3_reg>;
278c626695eSWenbin Mei        vqmmc-supply = <&mt6397_vio18_reg>;
279c626695eSWenbin Mei        clocks = <&pericfg CLK_PERI_MSDC30_0>,
280c626695eSWenbin Mei                 <&topckgen CLK_TOP_MSDC50_0_H_SEL>;
281c626695eSWenbin Mei        clock-names = "source", "hclk";
282c626695eSWenbin Mei        pinctrl-names = "default", "state_uhs";
283c626695eSWenbin Mei        pinctrl-0 = <&mmc0_pins_default>;
284c626695eSWenbin Mei        pinctrl-1 = <&mmc0_pins_uhs>;
285c626695eSWenbin Mei        assigned-clocks = <&topckgen CLK_TOP_MSDC50_0_SEL>;
286c626695eSWenbin Mei        assigned-clock-parents = <&topckgen CLK_TOP_MSDCPLL_D2>;
287c626695eSWenbin Mei        hs400-ds-delay = <0x14015>;
288c626695eSWenbin Mei        mediatek,hs200-cmd-int-delay = <26>;
289c626695eSWenbin Mei        mediatek,hs400-cmd-int-delay = <14>;
290c626695eSWenbin Mei        mediatek,hs400-cmd-resp-sel-rising;
291c626695eSWenbin Mei    };
292c626695eSWenbin Mei
293035cc395SAxe Yang    mmc3: mmc@11260000 {
294035cc395SAxe Yang        compatible = "mediatek,mt8173-mmc";
295035cc395SAxe Yang        reg = <0x11260000 0x1000>;
296035cc395SAxe Yang        clock-names = "source", "hclk";
297035cc395SAxe Yang        clocks = <&pericfg CLK_PERI_MSDC30_3>,
298035cc395SAxe Yang                 <&topckgen CLK_TOP_MSDC50_2_H_SEL>;
299035cc395SAxe Yang        interrupt-names = "msdc", "sdio_wakeup";
300035cc395SAxe Yang        interrupts-extended = <&gic GIC_SPI 74 IRQ_TYPE_LEVEL_LOW 0>,
301035cc395SAxe Yang                     <&pio 23 IRQ_TYPE_LEVEL_LOW>;
302035cc395SAxe Yang        pinctrl-names = "default", "state_uhs", "state_eint";
303035cc395SAxe Yang        pinctrl-0 = <&mmc2_pins_default>;
304035cc395SAxe Yang        pinctrl-1 = <&mmc2_pins_uhs>;
305035cc395SAxe Yang        pinctrl-2 = <&mmc2_pins_eint>;
306035cc395SAxe Yang        bus-width = <4>;
307035cc395SAxe Yang        max-frequency = <200000000>;
308035cc395SAxe Yang        cap-sd-highspeed;
309035cc395SAxe Yang        sd-uhs-sdr104;
310035cc395SAxe Yang        keep-power-in-suspend;
311035cc395SAxe Yang        wakeup-source;
312035cc395SAxe Yang        cap-sdio-irq;
313035cc395SAxe Yang        no-mmc;
314035cc395SAxe Yang        no-sd;
315035cc395SAxe Yang        non-removable;
316035cc395SAxe Yang        vmmc-supply = <&sdio_fixed_3v3>;
317035cc395SAxe Yang        vqmmc-supply = <&mt6397_vgp3_reg>;
318035cc395SAxe Yang        mmc-pwrseq = <&wifi_pwrseq>;
319035cc395SAxe Yang    };
320035cc395SAxe Yang
321c626695eSWenbin Mei...
322