GNU Linux-libre 6.1.90-gnu
[releases.git] / Documentation / devicetree / bindings / mmc / mtk-sd.yaml
1 # 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
7 title: MTK MSDC Storage Host Controller Binding
8
9 maintainers:
10   - Chaotian Jing <chaotian.jing@mediatek.com>
11   - Wenbin Mei <wenbin.mei@mediatek.com>
12
13 allOf:
14   - $ref: mmc-controller.yaml#
15
16 properties:
17   compatible:
18     oneOf:
19       - enum:
20           - mediatek,mt2701-mmc
21           - mediatek,mt2712-mmc
22           - mediatek,mt6779-mmc
23           - mediatek,mt6795-mmc
24           - mediatek,mt7620-mmc
25           - mediatek,mt7622-mmc
26           - mediatek,mt8135-mmc
27           - mediatek,mt8173-mmc
28           - mediatek,mt8183-mmc
29           - mediatek,mt8516-mmc
30       - items:
31           - const: mediatek,mt7623-mmc
32           - const: mediatek,mt2701-mmc
33       - items:
34           - enum:
35               - mediatek,mt8186-mmc
36               - mediatek,mt8188-mmc
37               - mediatek,mt8192-mmc
38               - mediatek,mt8195-mmc
39           - const: mediatek,mt8183-mmc
40
41   reg:
42     minItems: 1
43     items:
44       - description: base register (required).
45       - description: top base register (required for MT8183).
46
47   clocks:
48     description:
49       Should contain phandle for the clock feeding the MMC controller.
50     minItems: 2
51     items:
52       - description: source clock (required).
53       - description: HCLK which used for host (required).
54       - description: independent source clock gate (required for MT2712).
55       - description: bus clock used for internal register access (required for MT2712 MSDC0/3).
56       - description: msdc subsys clock gate (required for MT8192).
57       - description: peripheral bus clock gate (required for MT8192).
58       - description: AXI bus clock gate (required for MT8192).
59       - description: AHB bus clock gate (required for MT8192).
60
61   clock-names:
62     minItems: 2
63     items:
64       - const: source
65       - const: hclk
66       - const: source_cg
67       - const: bus_clk
68       - const: sys_cg
69       - const: pclk_cg
70       - const: axi_cg
71       - const: ahb_cg
72
73   interrupts:
74     description:
75       Should at least contain MSDC GIC interrupt. To support SDIO in-band wakeup, an extended
76       interrupt is required and be configured as wakeup source irq.
77     minItems: 1
78     maxItems: 2
79
80   interrupt-names:
81     items:
82       - const: msdc
83       - const: sdio_wakeup
84
85   pinctrl-names:
86     description:
87       Should at least contain default and state_uhs. To support SDIO in-band wakeup, dat1 pin
88       will be switched between GPIO mode and SDIO DAT1 mode, state_eint is mandatory in this
89       scenario.
90     minItems: 2
91     items:
92       - const: default
93       - const: state_uhs
94       - const: state_eint
95
96   pinctrl-0:
97     description:
98       should contain default/high speed pin ctrl.
99     maxItems: 1
100
101   pinctrl-1:
102     description:
103       should contain uhs mode pin ctrl.
104     maxItems: 1
105
106   pinctrl-2:
107     description:
108       should switch dat1 pin to GPIO mode.
109     maxItems: 1
110
111   assigned-clocks:
112     description:
113       PLL of the source clock.
114     maxItems: 1
115
116   assigned-clock-parents:
117     description:
118       parent of source clock, used for HS400 mode to get 400Mhz source clock.
119     maxItems: 1
120
121   hs400-ds-delay:
122     $ref: /schemas/types.yaml#/definitions/uint32
123     description:
124       HS400 DS delay setting.
125     minimum: 0
126     maximum: 0xffffffff
127
128   mediatek,hs200-cmd-int-delay:
129     $ref: /schemas/types.yaml#/definitions/uint32
130     description:
131       HS200 command internal delay setting.
132       This field has total 32 stages.
133       The value is an integer from 0 to 31.
134     minimum: 0
135     maximum: 31
136
137   mediatek,hs400-cmd-int-delay:
138     $ref: /schemas/types.yaml#/definitions/uint32
139     description:
140       HS400 command internal delay setting.
141       This field has total 32 stages.
142       The value is an integer from 0 to 31.
143     minimum: 0
144     maximum: 31
145
146   mediatek,hs400-cmd-resp-sel-rising:
147     $ref: /schemas/types.yaml#/definitions/flag
148     description:
149       HS400 command response sample selection.
150       If present, HS400 command responses are sampled on rising edges.
151       If not present, HS400 command responses are sampled on falling edges.
152
153   mediatek,hs400-ds-dly3:
154     $ref: /schemas/types.yaml#/definitions/uint32
155     description:
156       Gear of the third delay line for DS for input data latch in data
157       pad macro, there are 32 stages from 0 to 31.
158       For different corner IC, the time is different about one step, it is
159       about 100ps.
160       The value is confirmed by doing scan and calibration to find a best
161       value with corner IC and it is valid only for HS400 mode.
162     minimum: 0
163     maximum: 31
164
165   mediatek,latch-ck:
166     $ref: /schemas/types.yaml#/definitions/uint32
167     description:
168       Some SoCs do not support enhance_rx, need set correct latch-ck to avoid
169       data crc error caused by stop clock(fifo full) Valid range = [0:0x7].
170       if not present, default value is 0.
171       applied to compatible "mediatek,mt2701-mmc".
172     minimum: 0
173     maximum: 7
174
175   resets:
176     maxItems: 1
177
178   reset-names:
179     const: hrst
180
181 required:
182   - compatible
183   - reg
184   - interrupts
185   - clocks
186   - clock-names
187   - pinctrl-names
188   - pinctrl-0
189   - pinctrl-1
190   - vmmc-supply
191   - vqmmc-supply
192
193 if:
194   properties:
195     compatible:
196       contains:
197         const: mediatek,mt8183-mmc
198 then:
199   properties:
200     reg:
201       minItems: 2
202
203 unevaluatedProperties: false
204
205 examples:
206   - |
207     #include <dt-bindings/interrupt-controller/irq.h>
208     #include <dt-bindings/interrupt-controller/arm-gic.h>
209     #include <dt-bindings/clock/mt8173-clk.h>
210     mmc0: mmc@11230000 {
211         compatible = "mediatek,mt8173-mmc";
212         reg = <0x11230000 0x1000>;
213         interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_LOW>;
214         vmmc-supply = <&mt6397_vemc_3v3_reg>;
215         vqmmc-supply = <&mt6397_vio18_reg>;
216         clocks = <&pericfg CLK_PERI_MSDC30_0>,
217                  <&topckgen CLK_TOP_MSDC50_0_H_SEL>;
218         clock-names = "source", "hclk";
219         pinctrl-names = "default", "state_uhs";
220         pinctrl-0 = <&mmc0_pins_default>;
221         pinctrl-1 = <&mmc0_pins_uhs>;
222         assigned-clocks = <&topckgen CLK_TOP_MSDC50_0_SEL>;
223         assigned-clock-parents = <&topckgen CLK_TOP_MSDCPLL_D2>;
224         hs400-ds-delay = <0x14015>;
225         mediatek,hs200-cmd-int-delay = <26>;
226         mediatek,hs400-cmd-int-delay = <14>;
227         mediatek,hs400-cmd-resp-sel-rising;
228     };
229
230     mmc3: mmc@11260000 {
231         compatible = "mediatek,mt8173-mmc";
232         reg = <0x11260000 0x1000>;
233         clock-names = "source", "hclk";
234         clocks = <&pericfg CLK_PERI_MSDC30_3>,
235                  <&topckgen CLK_TOP_MSDC50_2_H_SEL>;
236         interrupt-names = "msdc", "sdio_wakeup";
237         interrupts-extended = <&gic GIC_SPI 74 IRQ_TYPE_LEVEL_LOW 0>,
238                      <&pio 23 IRQ_TYPE_LEVEL_LOW>;
239         pinctrl-names = "default", "state_uhs", "state_eint";
240         pinctrl-0 = <&mmc2_pins_default>;
241         pinctrl-1 = <&mmc2_pins_uhs>;
242         pinctrl-2 = <&mmc2_pins_eint>;
243         bus-width = <4>;
244         max-frequency = <200000000>;
245         cap-sd-highspeed;
246         sd-uhs-sdr104;
247         keep-power-in-suspend;
248         wakeup-source;
249         cap-sdio-irq;
250         no-mmc;
251         no-sd;
252         non-removable;
253         vmmc-supply = <&sdio_fixed_3v3>;
254         vqmmc-supply = <&mt6397_vgp3_reg>;
255         mmc-pwrseq = <&wifi_pwrseq>;
256     };
257
258 ...