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:
parent
6e72749c64
commit
1a7642b291
6 changed files with 305 additions and 0 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
-----------------
|
||||
|
||||
|
|
18
boards/nxp/imx93_evk/dts/usdhc1.overlay
Normal file
18
boards/nxp/imx93_evk/dts/usdhc1.overlay
Normal file
|
@ -0,0 +1,18 @@
|
|||
/*
|
||||
* Copyright 2025 NXP
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
/ {
|
||||
aliases {
|
||||
sdhc0 = &usdhc1;
|
||||
};
|
||||
};
|
||||
|
||||
&usdhc1 {
|
||||
status = "okay";
|
||||
sdmmc {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
18
boards/nxp/imx93_evk/dts/usdhc2.overlay
Normal file
18
boards/nxp/imx93_evk/dts/usdhc2.overlay
Normal file
|
@ -0,0 +1,18 @@
|
|||
/*
|
||||
* Copyright 2025 NXP
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
/ {
|
||||
aliases {
|
||||
sdhc0 = &usdhc2;
|
||||
};
|
||||
};
|
||||
|
||||
&usdhc2 {
|
||||
status = "okay";
|
||||
sdmmc {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
|
@ -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;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -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";
|
||||
};
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue