Re: [PATCH 8/8] arm64: dts: rockchip: Enable SD-card interface on Radxa E20C
From: Jonas Karlman <jonas@kwiboo.se>
Date: 2025-03-04 19:55:45
Also in:
linux-clk, linux-devicetree, linux-mmc, linux-rockchip, lkml
Hi Yao Zi, On 2025-03-04 20:49, Yao Zi wrote:
On Tue, Mar 04, 2025 at 08:10:36PM +0800, Chukun Pan wrote:quoted
Hi,quoted
+ aliases { + mmc0 = &sdmmc;s/mmc0/mmc1Will take it and add the missing pinctrl, as Jonas already pointed out.quoted
quoted
+&sdmmc { + bus-width = <4>; + cap-mmc-highspeed; + cap-sd-highspeed;I think for sdcard, only cap-sd-highspeed is needed, not cap-mmc-highspeed?This makes sense, will remove it in the next version.
Please do not remove the cap-mmc-highspeed prop, I tested the controller with a microSD to eMMC adapter and MMC HS speed is supported: mmc1: card 59b4 removed mmc_host mmc1: Bus speed (slot 0) = 400000Hz (slot req 400000Hz, actual 400000HZ div = 0) mmc_host mmc1: Bus speed (slot 0) = 49800000Hz (slot req 52000000Hz, actual 49800000HZ div = 0) mmc1: new high speed MMC card at address 0001 mmcblk1: mmc1:0001 DG4008 7.28 GiB mmcblk1: p1 p2 mmcblk1boot0: mmc1:0001 DG4008 4.00 MiB mmcblk1boot1: mmc1:0001 DG4008 4.00 MiB mmcblk1rpmb: mmc1:0001 DG4008 4.00 MiB, chardev (499:0) ~ # cat /sys/kernel/debug/mmc1/ios clock: 52000000 Hz vdd: 21 (3.3 ~ 3.4 V) bus mode: 2 (push-pull) chip select: 0 (don't care) power mode: 2 (on) bus width: 2 (4 bits) timing spec: 1 (mmc high-speed) signal voltage: 0 (3.30 V) driver type: 0 (driver type B) Regards, Jonas
quoted
quoted
+ disable-wp;Missing pinctrl.quoted
+ rockchip,default-sample-phase = <90>;It seems that all rk3528 devices need to set this default phase, so maybe this can be placed in dtsi?Yes, since the tuned phase offset is a SoC-specific value, as pointed out by comment in the driver, this is _not_ a value that is dynamically tuned and is also _not_ a value that will vary from board to board. It is a value that could vary between different SoC models. Will take it in the next version, thanks for finding it!quoted
quoted
+ sd-uhs-sdr104;The rk3528 devices uses gpio to switch IO voltage, maybe more modes should be added here like vendor kernel?I cannot get the relationship between things you mentioned. For the regulator, yes, here vqmmc-supply is missing, as already pointed out by Jonas.quoted
And these devices use 3.3V IO voltage by default. sd-uhs-sdr12; sd-uhs-sdr25; sd-uhs-sdr50; sd-uhs-sdr104;But I don't think it's necessary to lay out these slower modes explicitly, since SDR104 seems to imply them, see sd_update_bus_speed_mode() in drivers/mmc/core/sd.c[1], if ((card->host->caps & MMC_CAP_UHS_SDR104) && (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR104)) { card->sd_bus_speed = UHS_SDR104_BUS_SPEED; } else if ((card->host->caps & MMC_CAP_UHS_DDR50) && (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_DDR50)) { card->sd_bus_speed = UHS_DDR50_BUS_SPEED; } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 | MMC_CAP_UHS_SDR50)) && (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR50)) { card->sd_bus_speed = UHS_SDR50_BUS_SPEED; } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 | MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR25)) && (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR25)) { card->sd_bus_speed = UHS_SDR25_BUS_SPEED; } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 | MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR25 | MMC_CAP_UHS_SDR12)) && (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR12)) { card->sd_bus_speed = UHS_SDR12_BUS_SPEED; }quoted
Thanks, Chukun -- 2.25.1Regards, Yao Zi [1]: https://elixir.bootlin.com/linux/v6.13.5/source/drivers/mmc/core/sd.c#L448-L479