Rockchip RK3588 kernel dts解析之MMC

RK3588的MMC分为3中模式:

SDMMCSDIOSDHCI

下面针对每种模式的DTS配置进行说明

SDMMC

SDMMC用于SD卡通信 DTS配置参考rk3588s.dtsi 和rk3588-evb2-lp4.dtsi SDMMC的主要配置在rk3588s.dtsi 中,如下:

sdmmc: mmc@fe2c0000 {

compatible = "rockchip,rk3588-dw-mshc", "rockchip,rk3288-dw-mshc";

reg = <0x0 0xfe2c0000 0x0 0x4000>;

interrupts = ;

clocks = <&scmi_clk SCMI_HCLK_SD>, <&scmi_clk SCMI_CCLK_SD>,

<&cru SCLK_SDMMC_DRV>, <&cru SCLK_SDMMC_SAMPLE>;

clock-names = "biu", "ciu", "ciu-drive", "ciu-sample";

fifo-depth = <0x100>;

max-frequency = <200000000>; //设置 SD 卡的运行频率,虽然设置为 150M,但是还要根据 SD 卡的不同模式进行调整

pinctrl-names = "default";

pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_det &sdmmc_bus4>;

power-domains = <&power RK3588_PD_SDMMC>;

status = "disabled";

};

rk3588s.dtsi默认的sdmmc节点默认是disabled状态,需要在需要使用的产品dts中去enable,比如rk3588-evb2-lp4.dtsi,如下:

&sdmmc {

status = "okay";

vmmc-supply = <&vcc_3v3_sd_s0>; \\配置 SD 卡设备的 3V3 电源

};

sdmmc其他dts配置说明:

vmmc-supply = <&vcc_3v3_sd_s0>; 配置 SD 卡设备的 3V3 电源,rk3588-evb2-lp4.dtsi中SD卡的3v3电源是直接从PMIC RK806的LDO4提供。如果是有GPIO来控制这路电源可以参考rk3588-evb7-lp4.dtsi增加一个gpio模拟regulator的配置:

vcc_3v3_sd_s0: vcc-3v3-sd-s0-regulator {

compatible = "regulator-fixed";

gpio = <&gpio0 RK_PB7 GPIO_ACTIVE_HIGH>;

pinctrl-names = "default";

pinctrl-0 = <&sd_s0_pwr>;

regulator-name = "vcc_3v3_sd_s0";

enable-active-high;

};

cap-mmc-highspeed; cap-sd-highspeed; 此配置为标识此卡槽支持 highspeed 的 SD 卡。 如果不配置,表示不支持 highspeed 的 SD 卡。配置使用 SD3.0

sd-uhs-sdr12: 时钟频率不超过24M

sd-uhs-sdr25: 时钟频率不超过50M

sd-uhs-sdr50: 时钟频率不超过100M

sd-uhs-ddr50: 时钟频率不超过50M,并且采用双沿采样

sd-uhs-sdr104: 时钟频率不超过208M

配置 SD 卡热拔插检测脚 如果检测脚是直接连接到芯片的 SDMMC 控制器的 sdmmc_cd 脚,则请直接将该脚位配置为功能脚,并在 sdmmc 节点的 default 的 pinctrl 内进行引用即可。

如果检测脚是使用其他 GPIO,则需要在 sdmmc 节点内使用 cd-gpios 来进配置,例如

cd-gpios = <&gpio4 24 GPIO_ACTIVE_LOW>;

如果使用 GPIO 的检测脚,但是又要求反向检测方式(即 SD 卡插入时检测脚为高电平),则需要追加

cd-inverted;

SDIO

sdio用于wifi等外设通信 sdio的DTS配置参考rk3588s.dtsi 和rk3588-evb2-lp4.dtsi rk3588s.dtsi中是芯片级的配置,无需修改

sdio: mmc@fe2d0000 {

compatible = "rockchip,rk3588-dw-mshc", "rockchip,rk3288-dw-mshc";

reg = <0x0 0xfe2d0000 0x0 0x4000>;

interrupts = ;

clocks = <&cru HCLK_SDIO>, <&cru CCLK_SRC_SDIO>,

<&cru SCLK_SDIO_DRV>, <&cru SCLK_SDIO_SAMPLE>;

clock-names = "biu", "ciu", "ciu-drive", "ciu-sample";

fifo-depth = <0x100>;

max-frequency = <200000000>;

pinctrl-names = "default";

pinctrl-0 = <&sdiom1_pins>;

power-domains = <&power RK3588_PD_SDIO>;

status = "disabled";

};

rk3588-evb2-lp4.dtsi中主要是板级相关的配置,可以根据实际需求修改

&sdio {

max-frequency = <150000000>; //设置最大的频率,可以根据硬件设计改小

no-sd;

no-mmc;

bus-width = <4>;

disable-wp;

cap-sd-highspeed; //此配置同 SD 卡功能,作为 SDIO 外设,也有区分是否为 highspeed 的 SDIO 外设

cap-sdio-irq; //此配置标识该 SDIO 外设(通常是 Wifi)是否支持 sdio 中断,如果你的外设是 OOB 中断,请不要加入此项。支持哪种类型的中断请联系 Wifi 原厂确定。

keep-power-in-suspend; //此配置表示是否支持睡眠不断电,请默认加入该选项。Wifi 一般都有深度唤醒的要求。

mmc-pwrseq = <&sdio_pwrseq>; //此项是 SDIO 外设(一般是 Wifi)的电源控制。为必须项,否则 Wifi 无法上电工作。请参考下面的例子,晶振时钟和复位-使能的 GPIO 的选择按照实际板级硬件要求进行配置。

non-removable; //此项表示该插槽为不可移动设备且此项为 SDIO 设备必须添加项。

pinctrl-names = "default";

pinctrl-0 = <&sdiom0_pins>;

sd-uhs-sdr104; //此项配置决定该 SDIO 设备是否支持 SDIO3.0 模式。前提是需要 Wifi 的 IO 电压为 1.8v。同SDMMC配置

status = "okay";

}

SDHCI

sdhci用于EMMC通信 sdhci的dts配置参考:rk3588s.dtsi 和rk3588-evb.dtsi 其中rk3588s.dtsi 主要是芯片级的配置无需修改,如下

sdhci: mmc@fe2e0000 {

compatible = "rockchip,rk3588-dwcmshc", "rockchip,dwcmshc-sdhci";

reg = <0x0 0xfe2e0000 0x0 0x10000>;

interrupts = ;

assigned-clocks = <&cru BCLK_EMMC>, <&cru TMCLK_EMMC>, <&cru CCLK_EMMC>;

assigned-clock-rates = <200000000>, <24000000>, <200000000>;

clocks = <&cru CCLK_EMMC>, <&cru HCLK_EMMC>,

<&cru ACLK_EMMC>, <&cru BCLK_EMMC>,

<&cru TMCLK_EMMC>;

clock-names = "core", "bus", "axi", "block", "timer";

resets = <&cru SRST_C_EMMC>, <&cru SRST_H_EMMC>,

<&cru SRST_A_EMMC>, <&cru SRST_B_EMMC>,

<&cru SRST_T_EMMC>;

reset-names = "core", "bus", "axi", "block", "timer";

max-frequency = <200000000>;

status = "disabled";

};

rk3588-evb.dtsi是板级相关配置,可以根据实际需求进行配置

&sdhci {

bus-width = <8>;

no-sdio;

no-sd;

non-removable;

max-frequency = <200000000>;//配置最大频率,根据实际需求可以减少

mmc-hs400-1_8v; //此两项配置表示支持 HS400 模式以及 HS400ES 模式

mmc-hs400-enhanced-strobe; //此两项配置表示支持 HS400 模式以及 HS400ES 模式

status = "okay";

};

SDHCI还支持:

50MDDR 模式:mmc-ddr-1_8v;HS200 模式:mmc-hs200-1_8v;

好文推荐

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。