From 35be35efd37c6595aae1a7955a47bef7d56ff5a1 Mon Sep 17 00:00:00 2001 From: Lei Xu Date: Tue, 10 Jun 2025 18:07:10 -0700 Subject: [PATCH 1/2] boards: frdm_imx93: 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: Lei Xu Signed-off-by: Jiafei Pan --- boards/nxp/frdm_imx93/Kconfig.defconfig | 7 + boards/nxp/frdm_imx93/doc/index.rst | 31 +++ boards/nxp/frdm_imx93/dts/usdhc1.overlay | 19 ++ boards/nxp/frdm_imx93/dts/usdhc2.overlay | 19 ++ boards/nxp/frdm_imx93/frdm_imx93-pinctrl.dtsi | 195 ++++++++++++++++++ .../frdm_imx93/frdm_imx93_mimx9352_a55.dts | 39 ++++ 6 files changed, 310 insertions(+) create mode 100644 boards/nxp/frdm_imx93/dts/usdhc1.overlay create mode 100644 boards/nxp/frdm_imx93/dts/usdhc2.overlay diff --git a/boards/nxp/frdm_imx93/Kconfig.defconfig b/boards/nxp/frdm_imx93/Kconfig.defconfig index 1a28e237ac0fc..d6a9e3efb1925 100644 --- a/boards/nxp/frdm_imx93/Kconfig.defconfig +++ b/boards/nxp/frdm_imx93/Kconfig.defconfig @@ -60,4 +60,11 @@ endif # NETWORKING endif # BOARD_FRDM_IMX93_MIMX9352_A55 +if IMX_USDHC + +config GPIO + default y + +endif # IMX_USDHC + endif # BOARD_FRDM_IMX93 diff --git a/boards/nxp/frdm_imx93/doc/index.rst b/boards/nxp/frdm_imx93/doc/index.rst index ff4a26eabe6dc..0d8b9744c751c 100644 --- a/boards/nxp/frdm_imx93/doc/index.rst +++ b/boards/nxp/frdm_imx93/doc/index.rst @@ -69,6 +69,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 Secure Digital Host Controller (uSDHC) modules +for SD/eMMC interface support. On the FRDM-IMX93 board, the uSDHC2 interface of +the processor connects to the MicroSD card slot (P13), 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 relies on U-boot or Linux to boot Zephyr on Cortex-A Core, so Zephyr needs +to use a different uSDHC controller from U-boot or Linux to avoid resource conflict. +For example, if FRDM-IMX93 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: frdm_imx93/mimx9352/a55 + :goals: build + :gen-args: -DEXTRA_DTC_OVERLAY_FILE=usdhc1.overlay + +And if FRDM-IMX93 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: frdm_imx93/mimx9352/a55 + :goals: build + :gen-args: -DEXTRA_DTC_OVERLAY_FILE=usdhc2.overlay + User Button GPIO Option -------------------------- diff --git a/boards/nxp/frdm_imx93/dts/usdhc1.overlay b/boards/nxp/frdm_imx93/dts/usdhc1.overlay new file mode 100644 index 0000000000000..f6e7cede42342 --- /dev/null +++ b/boards/nxp/frdm_imx93/dts/usdhc1.overlay @@ -0,0 +1,19 @@ +/* + * Copyright 2025 NXP + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + aliases { + sdhc0 = &usdhc1; + }; +}; + +&usdhc1 { + status = "okay"; + + sdmmc { + status = "okay"; + }; +}; diff --git a/boards/nxp/frdm_imx93/dts/usdhc2.overlay b/boards/nxp/frdm_imx93/dts/usdhc2.overlay new file mode 100644 index 0000000000000..9ff767116887e --- /dev/null +++ b/boards/nxp/frdm_imx93/dts/usdhc2.overlay @@ -0,0 +1,19 @@ +/* + * Copyright 2025 NXP + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + aliases { + sdhc0 = &usdhc2; + }; +}; + +&usdhc2 { + status = "okay"; + + sdmmc { + status = "okay"; + }; +}; diff --git a/boards/nxp/frdm_imx93/frdm_imx93-pinctrl.dtsi b/boards/nxp/frdm_imx93/frdm_imx93-pinctrl.dtsi index 08e85ca05660d..3279ad3ebe1f1 100644 --- a/boards/nxp/frdm_imx93/frdm_imx93-pinctrl.dtsi +++ b/boards/nxp/frdm_imx93/frdm_imx93-pinctrl.dtsi @@ -127,4 +127,199 @@ drive-strength = "x6"; }; }; + + 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; + }; + }; }; diff --git a/boards/nxp/frdm_imx93/frdm_imx93_mimx9352_a55.dts b/boards/nxp/frdm_imx93/frdm_imx93_mimx9352_a55.dts index 3427d06707afd..3b52f48189c31 100644 --- a/boards/nxp/frdm_imx93/frdm_imx93_mimx9352_a55.dts +++ b/boards/nxp/frdm_imx93/frdm_imx93_mimx9352_a55.dts @@ -149,3 +149,42 @@ &wdog4 { 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"; + }; +}; From fa77427d2d4c3caae8fa2d22b26c63ad3bd8ae99 Mon Sep 17 00:00:00 2001 From: Lei Xu Date: Thu, 26 Dec 2024 20:08:59 -0800 Subject: [PATCH 2/2] samples: fs: fs_sample: Increase CONFIG_MAIN_STACK_SIZE for imx93 Increase CONFIG_MAIN_STACK_SIZE to 8192 to avoid possible crash. Signed-off-by: Lei Xu Signed-off-by: Jiafei Pan --- samples/subsys/fs/fs_sample/boards/frdm_imx93_mimx9352_a55.conf | 1 + samples/subsys/fs/fs_sample/boards/imx93_evk_mimx9352_a55.conf | 1 + 2 files changed, 2 insertions(+) create mode 100644 samples/subsys/fs/fs_sample/boards/frdm_imx93_mimx9352_a55.conf create mode 100644 samples/subsys/fs/fs_sample/boards/imx93_evk_mimx9352_a55.conf diff --git a/samples/subsys/fs/fs_sample/boards/frdm_imx93_mimx9352_a55.conf b/samples/subsys/fs/fs_sample/boards/frdm_imx93_mimx9352_a55.conf new file mode 100644 index 0000000000000..dd98d3df475c9 --- /dev/null +++ b/samples/subsys/fs/fs_sample/boards/frdm_imx93_mimx9352_a55.conf @@ -0,0 +1 @@ +CONFIG_MAIN_STACK_SIZE=8192 diff --git a/samples/subsys/fs/fs_sample/boards/imx93_evk_mimx9352_a55.conf b/samples/subsys/fs/fs_sample/boards/imx93_evk_mimx9352_a55.conf new file mode 100644 index 0000000000000..dd98d3df475c9 --- /dev/null +++ b/samples/subsys/fs/fs_sample/boards/imx93_evk_mimx9352_a55.conf @@ -0,0 +1 @@ +CONFIG_MAIN_STACK_SIZE=8192