[PATCH v2 RESEND 4/6] mmc: rtsx_usb_sdmmc: program SD30 mode for UHS SDR12/SDR25

Sean Rhodes posted 6 patches 3 weeks, 5 days ago
[PATCH v2 RESEND 4/6] mmc: rtsx_usb_sdmmc: program SD30 mode for UHS SDR12/SDR25
Posted by Sean Rhodes 3 weeks, 5 days ago
The driver advertises UHS SDR12 and SDR25 support, but sd_set_timing()
only programs SD_30_MODE for SDR50/SDR104. When the core selects SDR12
or SDR25 this leaves the controller in SD 2.0 mode.

Program SD_30_MODE for SDR12 and SDR25 too.

Tested: Realtek RTS5129 (0bda:0129) + tray + Lexar 2TB SDXC
Tested: timing spec SDR104 @ 208 MHz, signal voltage 1.8 V (2026-02-24)
Signed-off-by: Sean Rhodes <sean@starlabs.systems>
---
 drivers/mmc/host/rtsx_usb_sdmmc.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/mmc/host/rtsx_usb_sdmmc.c b/drivers/mmc/host/rtsx_usb_sdmmc.c
index 8d5ebe92018e..62f6b3f76c7b 100644
--- a/drivers/mmc/host/rtsx_usb_sdmmc.c
+++ b/drivers/mmc/host/rtsx_usb_sdmmc.c
@@ -1231,6 +1231,8 @@ static int sd_set_timing(struct rtsx_usb_sdmmc *host,
 
 	switch (timing) {
 	case MMC_TIMING_UHS_SDR104:
+	case MMC_TIMING_UHS_SDR12:
+	case MMC_TIMING_UHS_SDR25:
 	case MMC_TIMING_UHS_SDR50:
 		rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_CFG1,
 				0x0C | SD_ASYNC_FIFO_RST,
@@ -1298,13 +1300,14 @@ static void sdmmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
 
 	switch (ios->timing) {
 	case MMC_TIMING_UHS_SDR104:
+	case MMC_TIMING_UHS_SDR12:
+	case MMC_TIMING_UHS_SDR25:
 	case MMC_TIMING_UHS_SDR50:
 		host->ssc_depth = SSC_DEPTH_2M;
 		host->vpclk = true;
 		host->double_clk = false;
 		break;
 	case MMC_TIMING_UHS_DDR50:
-	case MMC_TIMING_UHS_SDR25:
 		host->ssc_depth = SSC_DEPTH_1M;
 		break;
 	default:
-- 
2.51.0