Skip to content

Commit 1a7642b

Browse files
JiafeiPankartben
authored andcommitted
boards: imx93_evk: enable SDHC on the board
Added pinctrl and dts nodes for uSDHC1 and uSDHC2, they are disabled by default, and provided overlay files to enable them if needed. Signed-off-by: Jiafei Pan <[email protected]> Signed-off-by: Lei Xu <[email protected]>
1 parent 6e72749 commit 1a7642b

File tree

6 files changed

+305
-0
lines changed

6 files changed

+305
-0
lines changed

boards/nxp/imx93_evk/Kconfig.defconfig

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,4 +67,11 @@ endif # NETWORKING
6767

6868
endif # BOARD_IMX93_EVK_MIMX9352_A55
6969

70+
if IMX_USDHC
71+
72+
config GPIO
73+
default y
74+
75+
endif # IMX_USDHC
76+
7077
endif # BOARD_IMX93_EVK

boards/nxp/imx93_evk/doc/index.rst

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,37 @@ Serial Port
6262
This board configuration uses a single serial communication channel with the
6363
CPU's UART2 for A55 core and M33 core.
6464

65+
uSDHC (SD or eMMC Interface on A55)
66+
-----------------------------------
67+
68+
i.MX 93 processor has three ultra secured digital host controller (uSDHC) modules
69+
for SD/eMMC interface support. On the MCIMX93-EVK board, the uSDHC2 interface of
70+
the processor connects to the MicroSD card slot (J1002), and uSDHC1 interface connects
71+
to the eMMC memory (located at the SOM board). DTS overlay file "usdhc1.overlay" and
72+
"usdhc2.overlay" are provided to enable specified the uSDHC controller.
73+
74+
Currently it rely on U-boot or Linux to boot Zephyr on Cortex-A Core, so Zephyr need
75+
to use different uSDHC controller from U-boot or Linux to avoid resource conflict.
76+
For example, if EVK board boots from SD Card which uses uSDHC2, Zephyr can use MMC
77+
which uses uSDHC1 for testing:
78+
79+
.. zephyr-app-commands::
80+
:zephyr-app: tests/subsys/sd/mmc
81+
:host-os: unix
82+
:board: imx93_evk/mimx9352/a55
83+
:goals: build
84+
:gen-args: -DEXTRA_DTC_OVERLAY_FILE=usdhc1.overlay
85+
86+
And if EVK board boots from MMC which uses uSDHC1, Zephyr can use SD Card which uses
87+
uSDHC2 for testing:
88+
89+
.. zephyr-app-commands::
90+
:zephyr-app: tests/subsys/sd/sdmmc
91+
:host-os: unix
92+
:board: imx93_evk/mimx9352/a55
93+
:goals: build
94+
:gen-args: -DEXTRA_DTC_OVERLAY_FILE=usdhc2.overlay
95+
6596
Board MUX Control
6697
-----------------
6798

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/*
2+
* Copyright 2025 NXP
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
/ {
8+
aliases {
9+
sdhc0 = &usdhc1;
10+
};
11+
};
12+
13+
&usdhc1 {
14+
status = "okay";
15+
sdmmc {
16+
status = "okay";
17+
};
18+
};
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/*
2+
* Copyright 2025 NXP
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
/ {
8+
aliases {
9+
sdhc0 = &usdhc2;
10+
};
11+
};
12+
13+
&usdhc2 {
14+
status = "okay";
15+
sdmmc {
16+
status = "okay";
17+
};
18+
};

boards/nxp/imx93_evk/imx93_evk-pinctrl.dtsi

Lines changed: 194 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,4 +129,198 @@
129129

130130
};
131131

132+
pinmux_usdhc1: pinmux_usdhc1 {
133+
group0 {
134+
pinmux = <&iomuxc1_sd1_clk_usdhc_clk_usdhc1_clk>,
135+
<&iomuxc1_sd1_strobe_usdhc_strobe_usdhc1_strobe>;
136+
drive-strength = "x1";
137+
bias-pull-down;
138+
slew-rate = "fast";
139+
input-schmitt-enable;
140+
};
141+
142+
group1 {
143+
pinmux = <&iomuxc1_sd1_cmd_usdhc_cmd_usdhc1_cmd>,
144+
<&iomuxc1_sd1_data0_usdhc_data_usdhc1_data0>,
145+
<&iomuxc1_sd1_data1_usdhc_data_usdhc1_data1>,
146+
<&iomuxc1_sd1_data2_usdhc_data_usdhc1_data2>,
147+
<&iomuxc1_sd1_data3_usdhc_data_usdhc1_data3>,
148+
<&iomuxc1_sd1_data4_usdhc_data_usdhc1_data4>,
149+
<&iomuxc1_sd1_data5_usdhc_data_usdhc1_data5>,
150+
<&iomuxc1_sd1_data6_usdhc_data_usdhc1_data6>,
151+
<&iomuxc1_sd1_data7_usdhc_data_usdhc1_data7>;
152+
drive-strength = "x1";
153+
slew-rate = "fast";
154+
input-schmitt-enable;
155+
bias-pull-up;
156+
input-enable;
157+
};
158+
};
159+
160+
pinmux_usdhc1_100mhz: pinmux_usdhc1_100mhz {
161+
group0 {
162+
pinmux = <&iomuxc1_sd1_clk_usdhc_clk_usdhc1_clk>,
163+
<&iomuxc1_sd1_strobe_usdhc_strobe_usdhc1_strobe>;
164+
drive-strength = "x3";
165+
bias-pull-down;
166+
slew-rate = "fast";
167+
input-schmitt-enable;
168+
};
169+
170+
group1 {
171+
pinmux = <&iomuxc1_sd1_cmd_usdhc_cmd_usdhc1_cmd>,
172+
<&iomuxc1_sd1_data0_usdhc_data_usdhc1_data0>,
173+
<&iomuxc1_sd1_data1_usdhc_data_usdhc1_data1>,
174+
<&iomuxc1_sd1_data2_usdhc_data_usdhc1_data2>,
175+
<&iomuxc1_sd1_data3_usdhc_data_usdhc1_data3>,
176+
<&iomuxc1_sd1_data4_usdhc_data_usdhc1_data4>,
177+
<&iomuxc1_sd1_data5_usdhc_data_usdhc1_data5>,
178+
<&iomuxc1_sd1_data6_usdhc_data_usdhc1_data6>,
179+
<&iomuxc1_sd1_data7_usdhc_data_usdhc1_data7>;
180+
drive-strength = "x3";
181+
slew-rate = "fast";
182+
input-schmitt-enable;
183+
bias-pull-up;
184+
input-enable;
185+
};
186+
};
187+
188+
pinmux_usdhc1_200mhz: pinmux_usdhc1_200mhz {
189+
group0 {
190+
pinmux = <&iomuxc1_sd1_clk_usdhc_clk_usdhc1_clk>,
191+
<&iomuxc1_sd1_strobe_usdhc_strobe_usdhc1_strobe>;
192+
drive-strength = "x6";
193+
bias-pull-down;
194+
slew-rate = "fast";
195+
input-schmitt-enable;
196+
};
197+
198+
group1 {
199+
pinmux = <&iomuxc1_sd1_cmd_usdhc_cmd_usdhc1_cmd>,
200+
<&iomuxc1_sd1_data0_usdhc_data_usdhc1_data0>,
201+
<&iomuxc1_sd1_data1_usdhc_data_usdhc1_data1>,
202+
<&iomuxc1_sd1_data2_usdhc_data_usdhc1_data2>,
203+
<&iomuxc1_sd1_data3_usdhc_data_usdhc1_data3>,
204+
<&iomuxc1_sd1_data4_usdhc_data_usdhc1_data4>,
205+
<&iomuxc1_sd1_data5_usdhc_data_usdhc1_data5>,
206+
<&iomuxc1_sd1_data6_usdhc_data_usdhc1_data6>,
207+
<&iomuxc1_sd1_data7_usdhc_data_usdhc1_data7>;
208+
drive-strength = "x6";
209+
slew-rate = "fast";
210+
input-schmitt-enable;
211+
bias-pull-up;
212+
input-enable;
213+
};
214+
};
215+
216+
pinmux_usdhc2: pinmux_usdhc2 {
217+
group0 {
218+
pinmux = <&iomuxc1_sd2_clk_usdhc_clk_usdhc2_clk>;
219+
drive-strength = "x1";
220+
bias-pull-down;
221+
slew-rate = "fast";
222+
input-schmitt-enable;
223+
};
224+
225+
group1 {
226+
pinmux = <&iomuxc1_sd2_cmd_usdhc_cmd_usdhc2_cmd>,
227+
<&iomuxc1_sd2_data0_usdhc_data_usdhc2_data0>,
228+
<&iomuxc1_sd2_data1_usdhc_data_usdhc2_data1>,
229+
<&iomuxc1_sd2_data2_usdhc_data_usdhc2_data2>,
230+
<&iomuxc1_sd2_data3_usdhc_data_usdhc2_data3>;
231+
drive-strength = "x1";
232+
slew-rate = "fast";
233+
input-schmitt-enable;
234+
bias-pull-up;
235+
input-enable;
236+
};
237+
238+
group2 {
239+
pinmux = <&iomuxc1_sd2_vselect_usdhc_vselect_usdhc2_vselect>;
240+
drive-strength = "x4";
241+
slew-rate = "slightly_fast";
242+
};
243+
244+
group3 {
245+
pinmux = <&iomuxc1_sd2_cd_b_gpio_io_gpio3_io00>,
246+
<&iomuxc1_sd2_reset_b_gpio_io_gpio3_io07>;
247+
drive-strength = "x4";
248+
slew-rate = "slightly_fast";
249+
bias-pull-up;
250+
};
251+
};
252+
253+
pinmux_usdhc2_100mhz: pinmux_usdhc2_100mhz {
254+
group0 {
255+
pinmux = <&iomuxc1_sd2_clk_usdhc_clk_usdhc2_clk>;
256+
drive-strength = "x3";
257+
bias-pull-down;
258+
slew-rate = "fast";
259+
input-schmitt-enable;
260+
};
261+
262+
group1 {
263+
pinmux = <&iomuxc1_sd2_cmd_usdhc_cmd_usdhc2_cmd>,
264+
<&iomuxc1_sd2_data0_usdhc_data_usdhc2_data0>,
265+
<&iomuxc1_sd2_data1_usdhc_data_usdhc2_data1>,
266+
<&iomuxc1_sd2_data2_usdhc_data_usdhc2_data2>,
267+
<&iomuxc1_sd2_data3_usdhc_data_usdhc2_data3>;
268+
drive-strength = "x3";
269+
slew-rate = "fast";
270+
input-schmitt-enable;
271+
bias-pull-up;
272+
input-enable;
273+
};
274+
275+
group2 {
276+
pinmux = <&iomuxc1_sd2_vselect_usdhc_vselect_usdhc2_vselect>;
277+
drive-strength = "x4";
278+
slew-rate = "slightly_fast";
279+
};
280+
281+
group3 {
282+
pinmux = <&iomuxc1_sd2_cd_b_gpio_io_gpio3_io00>,
283+
<&iomuxc1_sd2_reset_b_gpio_io_gpio3_io07>;
284+
drive-strength = "x4";
285+
slew-rate = "slightly_fast";
286+
bias-pull-up;
287+
};
288+
};
289+
290+
pinmux_usdhc2_200mhz: pinmux_usdhc2_200mhz {
291+
group0 {
292+
pinmux = <&iomuxc1_sd2_clk_usdhc_clk_usdhc2_clk>;
293+
drive-strength = "x6";
294+
bias-pull-down;
295+
slew-rate = "fast";
296+
input-schmitt-enable;
297+
};
298+
299+
group1 {
300+
pinmux = <&iomuxc1_sd2_cmd_usdhc_cmd_usdhc2_cmd>,
301+
<&iomuxc1_sd2_data0_usdhc_data_usdhc2_data0>,
302+
<&iomuxc1_sd2_data1_usdhc_data_usdhc2_data1>,
303+
<&iomuxc1_sd2_data2_usdhc_data_usdhc2_data2>,
304+
<&iomuxc1_sd2_data3_usdhc_data_usdhc2_data3>;
305+
drive-strength = "x6";
306+
slew-rate = "fast";
307+
input-schmitt-enable;
308+
bias-pull-up;
309+
input-enable;
310+
};
311+
312+
group2 {
313+
pinmux = <&iomuxc1_sd2_vselect_usdhc_vselect_usdhc2_vselect>;
314+
drive-strength = "x4";
315+
slew-rate = "slightly_fast";
316+
};
317+
318+
group3 {
319+
pinmux = <&iomuxc1_sd2_cd_b_gpio_io_gpio3_io00>,
320+
<&iomuxc1_sd2_reset_b_gpio_io_gpio3_io07>;
321+
drive-strength = "x4";
322+
slew-rate = "slightly_fast";
323+
bias-pull-up;
324+
};
325+
};
132326
};

boards/nxp/imx93_evk/imx93_evk_mimx9352_a55.dts

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,3 +203,40 @@
203203
phys = <&can_phy0>;
204204
status = "okay";
205205
};
206+
207+
&usdhc1 {
208+
pinctrl-0 = <&pinmux_usdhc1>;
209+
pinctrl-1 = <&pinmux_usdhc1_100mhz>;
210+
pinctrl-2 = <&pinmux_usdhc1_200mhz>;
211+
pinctrl-names = "default", "med", "fast";
212+
mmc-hs200-1_8v;
213+
mmc-hs400-1_8v;
214+
read-watermark = <0x10>;
215+
write-watermark = <0x80>;
216+
status = "disabled";
217+
sdmmc {
218+
compatible = "zephyr,mmc-disk";
219+
disk-name = "SD2";
220+
status = "disabled";
221+
};
222+
};
223+
224+
&usdhc2 {
225+
pinctrl-0 = <&pinmux_usdhc2>;
226+
pinctrl-1 = <&pinmux_usdhc2_100mhz>;
227+
pinctrl-2 = <&pinmux_usdhc2_200mhz>;
228+
pinctrl-names = "default", "med", "fast";
229+
pwr-gpios = <&gpio3 7 GPIO_ACTIVE_HIGH>;
230+
cd-gpios = <&gpio3 0 GPIO_ACTIVE_LOW>;
231+
power-delay-ms = <20>;
232+
mmc-hs200-1_8v;
233+
mmc-hs400-1_8v;
234+
read-watermark = <0x10>;
235+
write-watermark = <0x80>;
236+
status = "disabled";
237+
sdmmc {
238+
compatible = "zephyr,sdmmc-disk";
239+
disk-name = "SD";
240+
status = "disabled";
241+
};
242+
};

0 commit comments

Comments
 (0)