[PATCH v19 3/4] arm64: dts: renesas: rzg3l-smarc-som: Enable SD/eMMC on SDHI0
Biju <[email protected]> Thu, 23 Jul 2026 16:41:49 +0100
| Newsgroups | org.kernel.vger.linux-renesas-soc,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
From: Biju Das <[email protected]> Add support for enabling SD card or eMMC on SDHI0 on the RZ/G3L SMARC SoM. The selection between SD and eMMC is controlled by the SW_SD0_DEV_SEL macro in the board DTS, which must match the position of switch SYS.1 on the SoM. By default, eMMC is enabled. Signed-off-by: Biju Das <[email protected]> --- v18->v19: * Split SD0_CLK and SD0_CMD separate as input enable not available for SD0_CLK. * Added bias_pull_down, input enable, default drive strength for SD0_DS. * Added input enable for SD0_CMD and SD0_DAT* * Added default drive-strength for all SD0 pins except cd. v17->v18: * No change. v1->v17: * No change. --- .../boot/dts/renesas/r9a08g046l48-smarc.dts | 1 + .../boot/dts/renesas/rzg3l-smarc-som.dtsi | 145 ++++++++++++++++++ 2 files changed, 146 insertions(+) diff --git a/arch/arm64/boot/dts/renesas/r9a08g046l48-smarc.dts b/arch/arm64/boot/dts/renesas/r9a08g046l48-smarc.dts index 0b6b7e109200..96cc7ee46a6a 100644 --- a/arch/arm64/boot/dts/renesas/r9a08g046l48-smarc.dts +++ b/arch/arm64/boot/dts/renesas/r9a08g046l48-smarc.dts @@ -9,6 +9,7 @@ /* Switch selection settings */ #define RZ_BOOT_MODE3 1 +#define SW_SD0_DEV_SEL 0 #define SW_SD2_EN 0 #define SW_DPI_EN 0 #define SW_GPIO4 1 diff --git a/arch/arm64/boot/dts/renesas/rzg3l-smarc-som.dtsi b/arch/arm64/boot/dts/renesas/rzg3l-smarc-som.dtsi index 091a227233cb..c365b8087520 100644 --- a/arch/arm64/boot/dts/renesas/rzg3l-smarc-som.dtsi +++ b/arch/arm64/boot/dts/renesas/rzg3l-smarc-som.dtsi @@ -9,6 +9,10 @@ * Please set the below switch position on the SoM and the corresponding macro * on the board DTS: * + * Switch position SYS.1, Macro SW_SD0_DEV_SEL: + * 0 - SD0 is connected to eMMC (default) + * 1 - SD0 is connected to uSD0 card + * * Switch position SYS.2, Macro SW_I3C_EN: * 0 - SMARC_I2C_GP is enabled * 1 - I3C is enabled @@ -37,6 +41,7 @@ aliases { ethernet0 = ð0; ethernet1 = ð1; i2c0 = &i2c0; + mmc0 = &sdhi0; }; memory@48000000 { @@ -63,6 +68,19 @@ reg_3p3v: regulator-3p3v { regulator-always-on; }; +#if SW_SD0_DEV_SEL + vqmmc_sd0_pvdd: vqmmc-sd0-pvdd { + compatible = "regulator-gpio"; + regulator-name = "SD0_PVDD"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + gpios = <&pinctrl RZG3L_GPIO(L, 4) GPIO_ACTIVE_HIGH>; + gpios-states = <0>; + states = <3300000 0>, <1800000 1>; + regulator-ramp-delay = <1200>; + }; +#endif + x2_clk: x2-clock { compatible = "fixed-clock"; #clock-cells = <0>; @@ -216,7 +234,134 @@ i2c0_pins: i2c0 { pinmux = <RZG3L_PORT_PINMUX(L, 2, 4)>, /* RIIC0_SCL */ <RZG3L_PORT_PINMUX(L, 3, 4)>; /* RIIC0_SDA */ }; + + sd0-pwr-en-hog { + gpio-hog; + gpios = <RZG3L_GPIO(5, 1) GPIO_ACTIVE_HIGH>; + output-high; + line-name = "sd0_pwr_en"; + }; + + sdhi0_emmc_pins: sd0-emmc { + sd0-clk { + pins = "SD0_CLK"; + power-source = <1800>; + drive-strength-microamp = <9000>; + }; + + sd0-cmd { + pins = "SD0_CMD"; + input-enable; + drive-strength-microamp = <9000>; + power-source = <1800>; + }; + + sd0-data { + pins = "SD0_DAT0", "SD0_DAT1", "SD0_DAT2", "SD0_DAT3", + "SD0_DAT4", "SD0_DAT5", "SD0_DAT6", "SD0_DAT7"; + input-enable; + drive-strength-microamp = <9000>; + power-source = <1800>; + }; + + sd0-rst { + pins = "SD0_RST#"; + drive-strength-microamp = <9000>; + power-source = <1800>; + }; + + sd0-ds { + pins = "SD0_DS"; + input-enable; + bias-pull-down; + drive-strength-microamp = <9000>; + power-source = <1800>; + }; + }; + + sdhi0_usd_pins: sd0-usd { + sd0-cd { + pinmux = <RZG2L_PORT_PINMUX(5, 0, 8)>; /* SD0_CD */ + }; + + sd0-clk { + pins = "SD0_CLK"; + drive-strength-microamp = <8000>; + power-source = <3300>; + }; + + sd0-cmd { + pins = "SD0_CMD"; + input-enable; + drive-strength-microamp = <8000>; + power-source = <3300>; + }; + + sd0-data { + pins = "SD0_DAT0", "SD0_DAT1", "SD0_DAT2", "SD0_DAT3"; + input-enable; + drive-strength-microamp = <8000>; + power-source = <3300>; + }; + }; + + sdhi0_usd_uhs_pins: sd0-usd-uhs { + sd0-cd { + pinmux = <RZG2L_PORT_PINMUX(5, 0, 8)>; /* SD0_CD */ + }; + + sd0-clk { + pins = "SD0_CLK"; + drive-strength-microamp = <9000>; + power-source = <1800>; + }; + + sd0-cmd { + pins = "SD0_CMD"; + input-enable; + drive-strength-microamp = <9000>; + power-source = <1800>; + }; + + sd0-data { + pins = "SD0_DAT0", "SD0_DAT1", "SD0_DAT2", "SD0_DAT3"; + input-enable; + drive-strength-microamp = <9000>; + power-source = <1800>; + }; + }; +}; + +#if (SW_SD0_DEV_SEL) +&sdhi0 { + pinctrl-0 = <&sdhi0_usd_pins>; + pinctrl-1 = <&sdhi0_usd_uhs_pins>; + pinctrl-names = "default", "state_uhs"; + + vmmc-supply = <®_3p3v>; + vqmmc-supply = <&vqmmc_sd0_pvdd>; + bus-width = <4>; + sd-uhs-sdr50; + sd-uhs-sdr104; + status = "okay"; +}; +#else +&sdhi0 { + pinctrl-0 = <&sdhi0_emmc_pins>; + pinctrl-1 = <&sdhi0_emmc_pins>; + pinctrl-names = "default", "state_uhs"; + + vmmc-supply = <®_3p3v>; + vqmmc-supply = <®_1p8v>; + bus-width = <8>; + mmc-hs200-1_8v; + mmc-hs400-1_8v; + mmc-hs400-enhanced-strobe; + non-removable; + fixed-emmc-driver-type = <1>; + status = "okay"; }; +#endif &wdt0 { timeout-sec = <60>; -- 2.43.0