blob: c532ec92d2d9c69d87cbfc4b1de9b10dd3aa421c [file] [log] [blame]
Tom Rini53633a82024-02-29 12:33:36 -05001# SPDX-License-Identifier: GPL-2.0
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/mmc/mtk-sd.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: MTK MSDC Storage Host Controller
8
9maintainers:
10 - Chaotian Jing <chaotian.jing@mediatek.com>
11 - Wenbin Mei <wenbin.mei@mediatek.com>
12
13properties:
14 compatible:
15 oneOf:
16 - enum:
17 - mediatek,mt2701-mmc
18 - mediatek,mt2712-mmc
19 - mediatek,mt6779-mmc
20 - mediatek,mt6795-mmc
21 - mediatek,mt7620-mmc
22 - mediatek,mt7622-mmc
23 - mediatek,mt7986-mmc
24 - mediatek,mt8135-mmc
25 - mediatek,mt8173-mmc
26 - mediatek,mt8183-mmc
27 - mediatek,mt8516-mmc
28 - items:
29 - const: mediatek,mt7623-mmc
30 - const: mediatek,mt2701-mmc
31 - items:
32 - enum:
33 - mediatek,mt8186-mmc
34 - mediatek,mt8188-mmc
35 - mediatek,mt8192-mmc
36 - mediatek,mt8195-mmc
37 - mediatek,mt8365-mmc
38 - const: mediatek,mt8183-mmc
39
40 reg:
41 minItems: 1
42 items:
43 - description: base register (required).
44 - description: top base register (required for MT8183).
45
46 clocks:
47 description:
48 Should contain phandle for the clock feeding the MMC controller.
49 minItems: 2
50 maxItems: 7
51
52 clock-names:
53 minItems: 2
54 maxItems: 7
55
56 interrupts:
57 description:
58 Should at least contain MSDC GIC interrupt. To support SDIO in-band wakeup, an extended
59 interrupt is required and be configured as wakeup source irq.
60 minItems: 1
61 maxItems: 2
62
63 interrupt-names:
64 items:
65 - const: msdc
66 - const: sdio_wakeup
67
68 pinctrl-names:
69 description:
70 Should at least contain default and state_uhs. To support SDIO in-band wakeup, dat1 pin
71 will be switched between GPIO mode and SDIO DAT1 mode, state_eint is mandatory in this
72 scenario.
73 minItems: 2
74 items:
75 - const: default
76 - const: state_uhs
77 - const: state_eint
78
79 pinctrl-0:
80 description:
81 should contain default/high speed pin ctrl.
82 maxItems: 1
83
84 pinctrl-1:
85 description:
86 should contain uhs mode pin ctrl.
87 maxItems: 1
88
89 pinctrl-2:
90 description:
91 should switch dat1 pin to GPIO mode.
92 maxItems: 1
93
94 hs400-ds-delay:
95 $ref: /schemas/types.yaml#/definitions/uint32
96 description:
97 HS400 DS delay setting.
98 minimum: 0
99 maximum: 0xffffffff
100
101 mediatek,hs200-cmd-int-delay:
102 $ref: /schemas/types.yaml#/definitions/uint32
103 description:
104 HS200 command internal delay setting.
105 This field has total 32 stages.
106 The value is an integer from 0 to 31.
107 minimum: 0
108 maximum: 31
109
110 mediatek,hs400-cmd-int-delay:
111 $ref: /schemas/types.yaml#/definitions/uint32
112 description:
113 HS400 command internal delay setting.
114 This field has total 32 stages.
115 The value is an integer from 0 to 31.
116 minimum: 0
117 maximum: 31
118
119 mediatek,hs400-cmd-resp-sel-rising:
120 $ref: /schemas/types.yaml#/definitions/flag
121 description:
122 HS400 command response sample selection.
123 If present, HS400 command responses are sampled on rising edges.
124 If not present, HS400 command responses are sampled on falling edges.
125
126 mediatek,hs400-ds-dly3:
127 $ref: /schemas/types.yaml#/definitions/uint32
128 description:
129 Gear of the third delay line for DS for input data latch in data
130 pad macro, there are 32 stages from 0 to 31.
131 For different corner IC, the time is different about one step, it is
132 about 100ps.
133 The value is confirmed by doing scan and calibration to find a best
134 value with corner IC and it is valid only for HS400 mode.
135 minimum: 0
136 maximum: 31
137
138 mediatek,latch-ck:
139 $ref: /schemas/types.yaml#/definitions/uint32
140 description:
141 Some SoCs do not support enhance_rx, need set correct latch-ck to avoid
142 data crc error caused by stop clock(fifo full) Valid range = [0:0x7].
143 if not present, default value is 0.
144 applied to compatible "mediatek,mt2701-mmc".
145 minimum: 0
146 maximum: 7
147
Tom Rini93743d22024-04-01 09:08:13 -0400148 mediatek,tuning-step:
149 $ref: /schemas/types.yaml#/definitions/uint32
150 description:
151 Some SoCs need extend tuning step for better delay value to avoid CRC issue.
152 If not present, default tuning step is 32. For eMMC and SD, this can yield
153 satisfactory calibration results in most cases.
154 enum: [32, 64]
155 default: 32
156
Tom Rini53633a82024-02-29 12:33:36 -0500157 resets:
158 maxItems: 1
159
160 reset-names:
161 const: hrst
162
163required:
164 - compatible
165 - reg
166 - interrupts
167 - clocks
168 - clock-names
169 - pinctrl-names
170 - pinctrl-0
171 - pinctrl-1
172 - vmmc-supply
173 - vqmmc-supply
174
175allOf:
176 - $ref: mmc-controller.yaml#
177 - if:
178 properties:
179 compatible:
180 enum:
181 - mediatek,mt2701-mmc
182 - mediatek,mt6779-mmc
183 - mediatek,mt6795-mmc
184 - mediatek,mt7620-mmc
185 - mediatek,mt7622-mmc
186 - mediatek,mt7623-mmc
187 - mediatek,mt8135-mmc
188 - mediatek,mt8173-mmc
189 - mediatek,mt8183-mmc
190 - mediatek,mt8186-mmc
191 - mediatek,mt8188-mmc
192 - mediatek,mt8195-mmc
193 - mediatek,mt8516-mmc
194 then:
195 properties:
196 clocks:
197 minItems: 2
198 items:
199 - description: source clock
200 - description: HCLK which used for host
201 - description: independent source clock gate
202 clock-names:
203 minItems: 2
204 items:
205 - const: source
206 - const: hclk
207 - const: source_cg
208
209 - if:
210 properties:
211 compatible:
212 contains:
213 const: mediatek,mt2712-mmc
214 then:
215 properties:
216 clocks:
217 minItems: 3
218 items:
219 - description: source clock
220 - description: HCLK which used for host
221 - description: independent source clock gate
222 - description: bus clock used for internal register access (required for MSDC0/3).
223 clock-names:
224 minItems: 3
225 items:
226 - const: source
227 - const: hclk
228 - const: source_cg
229 - const: bus_clk
230
231 - if:
232 properties:
233 compatible:
234 contains:
235 const: mediatek,mt8183-mmc
236 then:
237 properties:
238 reg:
239 minItems: 2
240
241 - if:
242 properties:
243 compatible:
244 contains:
245 enum:
246 - mediatek,mt7986-mmc
247 then:
248 properties:
249 clocks:
250 minItems: 3
251 items:
252 - description: source clock
253 - description: HCLK which used for host
254 - description: independent source clock gate
255 - description: bus clock used for internal register access (required for MSDC0/3).
256 - description: msdc subsys clock gate
257 clock-names:
258 minItems: 3
259 items:
260 - const: source
261 - const: hclk
262 - const: source_cg
263 - const: bus_clk
264 - const: sys_cg
265
266 - if:
267 properties:
268 compatible:
269 enum:
270 - mediatek,mt8186-mmc
271 - mediatek,mt8188-mmc
272 - mediatek,mt8195-mmc
273 then:
274 properties:
275 clocks:
276 items:
277 - description: source clock
278 - description: HCLK which used for host
279 - description: independent source clock gate
280 - description: crypto clock used for data encrypt/decrypt (optional)
281 clock-names:
282 items:
283 - const: source
284 - const: hclk
285 - const: source_cg
286 - const: crypto
287
288 - if:
289 properties:
290 compatible:
291 contains:
292 const: mediatek,mt8192-mmc
293 then:
294 properties:
295 clocks:
296 items:
297 - description: source clock
298 - description: HCLK which used for host
299 - description: independent source clock gate
300 - description: msdc subsys clock gate
301 - description: peripheral bus clock gate
302 - description: AXI bus clock gate
303 - description: AHB bus clock gate
304 clock-names:
305 items:
306 - const: source
307 - const: hclk
308 - const: source_cg
309 - const: sys_cg
310 - const: pclk_cg
311 - const: axi_cg
312 - const: ahb_cg
313
314unevaluatedProperties: false
315
316examples:
317 - |
318 #include <dt-bindings/interrupt-controller/irq.h>
319 #include <dt-bindings/interrupt-controller/arm-gic.h>
320 #include <dt-bindings/clock/mt8173-clk.h>
321 mmc0: mmc@11230000 {
322 compatible = "mediatek,mt8173-mmc";
323 reg = <0x11230000 0x1000>;
324 interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_LOW>;
325 vmmc-supply = <&mt6397_vemc_3v3_reg>;
326 vqmmc-supply = <&mt6397_vio18_reg>;
327 clocks = <&pericfg CLK_PERI_MSDC30_0>,
328 <&topckgen CLK_TOP_MSDC50_0_H_SEL>;
329 clock-names = "source", "hclk";
330 pinctrl-names = "default", "state_uhs";
331 pinctrl-0 = <&mmc0_pins_default>;
332 pinctrl-1 = <&mmc0_pins_uhs>;
333 assigned-clocks = <&topckgen CLK_TOP_MSDC50_0_SEL>;
334 assigned-clock-parents = <&topckgen CLK_TOP_MSDCPLL_D2>;
335 hs400-ds-delay = <0x14015>;
336 mediatek,hs200-cmd-int-delay = <26>;
337 mediatek,hs400-cmd-int-delay = <14>;
338 mediatek,hs400-cmd-resp-sel-rising;
339 };
340
341 mmc3: mmc@11260000 {
342 compatible = "mediatek,mt8173-mmc";
343 reg = <0x11260000 0x1000>;
344 clock-names = "source", "hclk";
345 clocks = <&pericfg CLK_PERI_MSDC30_3>,
346 <&topckgen CLK_TOP_MSDC50_2_H_SEL>;
347 interrupt-names = "msdc", "sdio_wakeup";
348 interrupts-extended = <&gic GIC_SPI 74 IRQ_TYPE_LEVEL_LOW 0>,
349 <&pio 23 IRQ_TYPE_LEVEL_LOW>;
350 pinctrl-names = "default", "state_uhs", "state_eint";
351 pinctrl-0 = <&mmc2_pins_default>;
352 pinctrl-1 = <&mmc2_pins_uhs>;
353 pinctrl-2 = <&mmc2_pins_eint>;
354 bus-width = <4>;
355 max-frequency = <200000000>;
356 cap-sd-highspeed;
357 sd-uhs-sdr104;
358 keep-power-in-suspend;
359 wakeup-source;
360 cap-sdio-irq;
361 no-mmc;
362 no-sd;
363 non-removable;
364 vmmc-supply = <&sdio_fixed_3v3>;
365 vqmmc-supply = <&mt6397_vgp3_reg>;
366 mmc-pwrseq = <&wifi_pwrseq>;
367 };
368
369...