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 <Jiafei.Pan@nxp.com>
Signed-off-by: Lei Xu <lei.xu@nxp.com>
This commit is contained in:
Jiafei Pan 2025-03-24 15:00:08 +08:00 committed by Benjamin Cabé
commit 1a7642b291
6 changed files with 305 additions and 0 deletions

View file

@ -67,4 +67,11 @@ endif # NETWORKING
endif # BOARD_IMX93_EVK_MIMX9352_A55
if IMX_USDHC
config GPIO
default y
endif # IMX_USDHC
endif # BOARD_IMX93_EVK

View file

@ -62,6 +62,37 @@ Serial Port
This board configuration uses a single serial communication channel with the
CPU's UART2 for A55 core and M33 core.
uSDHC (SD or eMMC Interface on A55)
-----------------------------------
i.MX 93 processor has three ultra secured digital host controller (uSDHC) modules
for SD/eMMC interface support. On the MCIMX93-EVK board, the uSDHC2 interface of
the processor connects to the MicroSD card slot (J1002), and uSDHC1 interface connects
to the eMMC memory (located at the SOM board). DTS overlay file "usdhc1.overlay" and
"usdhc2.overlay" are provided to enable specified the uSDHC controller.
Currently it rely on U-boot or Linux to boot Zephyr on Cortex-A Core, so Zephyr need
to use different uSDHC controller from U-boot or Linux to avoid resource conflict.
For example, if EVK board boots from SD Card which uses uSDHC2, Zephyr can use MMC
which uses uSDHC1 for testing:
.. zephyr-app-commands::
:zephyr-app: tests/subsys/sd/mmc
:host-os: unix
:board: imx93_evk/mimx9352/a55
:goals: build
:gen-args: -DEXTRA_DTC_OVERLAY_FILE=usdhc1.overlay
And if EVK board boots from MMC which uses uSDHC1, Zephyr can use SD Card which uses
uSDHC2 for testing:
.. zephyr-app-commands::
:zephyr-app: tests/subsys/sd/sdmmc
:host-os: unix
:board: imx93_evk/mimx9352/a55
:goals: build
:gen-args: -DEXTRA_DTC_OVERLAY_FILE=usdhc2.overlay
Board MUX Control
-----------------

View file

@ -0,0 +1,18 @@
/*
* Copyright 2025 NXP
*
* SPDX-License-Identifier: Apache-2.0
*/
/ {
aliases {
sdhc0 = &usdhc1;
};
};
&usdhc1 {
status = "okay";
sdmmc {
status = "okay";
};
};

View file

@ -0,0 +1,18 @@
/*
* Copyright 2025 NXP
*
* SPDX-License-Identifier: Apache-2.0
*/
/ {
aliases {
sdhc0 = &usdhc2;
};
};
&usdhc2 {
status = "okay";
sdmmc {
status = "okay";
};
};

View file

@ -129,4 +129,198 @@
};
pinmux_usdhc1: pinmux_usdhc1 {
group0 {
pinmux = <&iomuxc1_sd1_clk_usdhc_clk_usdhc1_clk>,
<&iomuxc1_sd1_strobe_usdhc_strobe_usdhc1_strobe>;
drive-strength = "x1";
bias-pull-down;
slew-rate = "fast";
input-schmitt-enable;
};
group1 {
pinmux = <&iomuxc1_sd1_cmd_usdhc_cmd_usdhc1_cmd>,
<&iomuxc1_sd1_data0_usdhc_data_usdhc1_data0>,
<&iomuxc1_sd1_data1_usdhc_data_usdhc1_data1>,
<&iomuxc1_sd1_data2_usdhc_data_usdhc1_data2>,
<&iomuxc1_sd1_data3_usdhc_data_usdhc1_data3>,
<&iomuxc1_sd1_data4_usdhc_data_usdhc1_data4>,
<&iomuxc1_sd1_data5_usdhc_data_usdhc1_data5>,
<&iomuxc1_sd1_data6_usdhc_data_usdhc1_data6>,
<&iomuxc1_sd1_data7_usdhc_data_usdhc1_data7>;
drive-strength = "x1";
slew-rate = "fast";
input-schmitt-enable;
bias-pull-up;
input-enable;
};
};
pinmux_usdhc1_100mhz: pinmux_usdhc1_100mhz {
group0 {
pinmux = <&iomuxc1_sd1_clk_usdhc_clk_usdhc1_clk>,
<&iomuxc1_sd1_strobe_usdhc_strobe_usdhc1_strobe>;
drive-strength = "x3";
bias-pull-down;
slew-rate = "fast";
input-schmitt-enable;
};
group1 {
pinmux = <&iomuxc1_sd1_cmd_usdhc_cmd_usdhc1_cmd>,
<&iomuxc1_sd1_data0_usdhc_data_usdhc1_data0>,
<&iomuxc1_sd1_data1_usdhc_data_usdhc1_data1>,
<&iomuxc1_sd1_data2_usdhc_data_usdhc1_data2>,
<&iomuxc1_sd1_data3_usdhc_data_usdhc1_data3>,
<&iomuxc1_sd1_data4_usdhc_data_usdhc1_data4>,
<&iomuxc1_sd1_data5_usdhc_data_usdhc1_data5>,
<&iomuxc1_sd1_data6_usdhc_data_usdhc1_data6>,
<&iomuxc1_sd1_data7_usdhc_data_usdhc1_data7>;
drive-strength = "x3";
slew-rate = "fast";
input-schmitt-enable;
bias-pull-up;
input-enable;
};
};
pinmux_usdhc1_200mhz: pinmux_usdhc1_200mhz {
group0 {
pinmux = <&iomuxc1_sd1_clk_usdhc_clk_usdhc1_clk>,
<&iomuxc1_sd1_strobe_usdhc_strobe_usdhc1_strobe>;
drive-strength = "x6";
bias-pull-down;
slew-rate = "fast";
input-schmitt-enable;
};
group1 {
pinmux = <&iomuxc1_sd1_cmd_usdhc_cmd_usdhc1_cmd>,
<&iomuxc1_sd1_data0_usdhc_data_usdhc1_data0>,
<&iomuxc1_sd1_data1_usdhc_data_usdhc1_data1>,
<&iomuxc1_sd1_data2_usdhc_data_usdhc1_data2>,
<&iomuxc1_sd1_data3_usdhc_data_usdhc1_data3>,
<&iomuxc1_sd1_data4_usdhc_data_usdhc1_data4>,
<&iomuxc1_sd1_data5_usdhc_data_usdhc1_data5>,
<&iomuxc1_sd1_data6_usdhc_data_usdhc1_data6>,
<&iomuxc1_sd1_data7_usdhc_data_usdhc1_data7>;
drive-strength = "x6";
slew-rate = "fast";
input-schmitt-enable;
bias-pull-up;
input-enable;
};
};
pinmux_usdhc2: pinmux_usdhc2 {
group0 {
pinmux = <&iomuxc1_sd2_clk_usdhc_clk_usdhc2_clk>;
drive-strength = "x1";
bias-pull-down;
slew-rate = "fast";
input-schmitt-enable;
};
group1 {
pinmux = <&iomuxc1_sd2_cmd_usdhc_cmd_usdhc2_cmd>,
<&iomuxc1_sd2_data0_usdhc_data_usdhc2_data0>,
<&iomuxc1_sd2_data1_usdhc_data_usdhc2_data1>,
<&iomuxc1_sd2_data2_usdhc_data_usdhc2_data2>,
<&iomuxc1_sd2_data3_usdhc_data_usdhc2_data3>;
drive-strength = "x1";
slew-rate = "fast";
input-schmitt-enable;
bias-pull-up;
input-enable;
};
group2 {
pinmux = <&iomuxc1_sd2_vselect_usdhc_vselect_usdhc2_vselect>;
drive-strength = "x4";
slew-rate = "slightly_fast";
};
group3 {
pinmux = <&iomuxc1_sd2_cd_b_gpio_io_gpio3_io00>,
<&iomuxc1_sd2_reset_b_gpio_io_gpio3_io07>;
drive-strength = "x4";
slew-rate = "slightly_fast";
bias-pull-up;
};
};
pinmux_usdhc2_100mhz: pinmux_usdhc2_100mhz {
group0 {
pinmux = <&iomuxc1_sd2_clk_usdhc_clk_usdhc2_clk>;
drive-strength = "x3";
bias-pull-down;
slew-rate = "fast";
input-schmitt-enable;
};
group1 {
pinmux = <&iomuxc1_sd2_cmd_usdhc_cmd_usdhc2_cmd>,
<&iomuxc1_sd2_data0_usdhc_data_usdhc2_data0>,
<&iomuxc1_sd2_data1_usdhc_data_usdhc2_data1>,
<&iomuxc1_sd2_data2_usdhc_data_usdhc2_data2>,
<&iomuxc1_sd2_data3_usdhc_data_usdhc2_data3>;
drive-strength = "x3";
slew-rate = "fast";
input-schmitt-enable;
bias-pull-up;
input-enable;
};
group2 {
pinmux = <&iomuxc1_sd2_vselect_usdhc_vselect_usdhc2_vselect>;
drive-strength = "x4";
slew-rate = "slightly_fast";
};
group3 {
pinmux = <&iomuxc1_sd2_cd_b_gpio_io_gpio3_io00>,
<&iomuxc1_sd2_reset_b_gpio_io_gpio3_io07>;
drive-strength = "x4";
slew-rate = "slightly_fast";
bias-pull-up;
};
};
pinmux_usdhc2_200mhz: pinmux_usdhc2_200mhz {
group0 {
pinmux = <&iomuxc1_sd2_clk_usdhc_clk_usdhc2_clk>;
drive-strength = "x6";
bias-pull-down;
slew-rate = "fast";
input-schmitt-enable;
};
group1 {
pinmux = <&iomuxc1_sd2_cmd_usdhc_cmd_usdhc2_cmd>,
<&iomuxc1_sd2_data0_usdhc_data_usdhc2_data0>,
<&iomuxc1_sd2_data1_usdhc_data_usdhc2_data1>,
<&iomuxc1_sd2_data2_usdhc_data_usdhc2_data2>,
<&iomuxc1_sd2_data3_usdhc_data_usdhc2_data3>;
drive-strength = "x6";
slew-rate = "fast";
input-schmitt-enable;
bias-pull-up;
input-enable;
};
group2 {
pinmux = <&iomuxc1_sd2_vselect_usdhc_vselect_usdhc2_vselect>;
drive-strength = "x4";
slew-rate = "slightly_fast";
};
group3 {
pinmux = <&iomuxc1_sd2_cd_b_gpio_io_gpio3_io00>,
<&iomuxc1_sd2_reset_b_gpio_io_gpio3_io07>;
drive-strength = "x4";
slew-rate = "slightly_fast";
bias-pull-up;
};
};
};

View file

@ -203,3 +203,40 @@
phys = <&can_phy0>;
status = "okay";
};
&usdhc1 {
pinctrl-0 = <&pinmux_usdhc1>;
pinctrl-1 = <&pinmux_usdhc1_100mhz>;
pinctrl-2 = <&pinmux_usdhc1_200mhz>;
pinctrl-names = "default", "med", "fast";
mmc-hs200-1_8v;
mmc-hs400-1_8v;
read-watermark = <0x10>;
write-watermark = <0x80>;
status = "disabled";
sdmmc {
compatible = "zephyr,mmc-disk";
disk-name = "SD2";
status = "disabled";
};
};
&usdhc2 {
pinctrl-0 = <&pinmux_usdhc2>;
pinctrl-1 = <&pinmux_usdhc2_100mhz>;
pinctrl-2 = <&pinmux_usdhc2_200mhz>;
pinctrl-names = "default", "med", "fast";
pwr-gpios = <&gpio3 7 GPIO_ACTIVE_HIGH>;
cd-gpios = <&gpio3 0 GPIO_ACTIVE_LOW>;
power-delay-ms = <20>;
mmc-hs200-1_8v;
mmc-hs400-1_8v;
read-watermark = <0x10>;
write-watermark = <0x80>;
status = "disabled";
sdmmc {
compatible = "zephyr,sdmmc-disk";
disk-name = "SD";
status = "disabled";
};
};