[<prev] [next>] [day] [month] [year] [list]
Message-ID: <CABtds-12OYfBo8pS5zZrNp7Rvgifh0jqZ3SyRvoZz+mAVJM3kw@mail.gmail.com>
Date: Tue, 4 Nov 2025 12:02:40 -0500
from: Sean Rhodes <sean@...rlabs.systems>
To: linux-kernel@...r.kernel.org
Subject: [PATCH] drivers/mmc: rtsx_usb: gate UHS/MMC caps on supported
>From 2dfdbea7ff59c9f7b4927a8d020810bfb1c11e24 Mon Sep 17 00:00:00 2001
From: Sean Rhodes <sean@...rlabs.systems>
Date: Tue, 4 Nov 2025 16:02:01 +0000
Subject: [PATCH 3/5] drivers/mmc: rtsx_usb: gate UHS/MMC caps on supported
parts
Only advertise SDR50, DDR50 and MMC DDR when the USB companion reports
support, and treat MMC DDR timing like DDR50 so the host can switch to
that mode safely
Cc: Ulf Hansson <ulf.hansson@...aro.org>
Cc: Ricky Wu <ricky_wu@...ltek.com>
Cc: Avri Altman <avri.altman@...disk.com>
Cc: Jisheng Zhang <jszhang@...nel.org>
Cc: Dan Carpenter <dan.carpenter@...aro.org>
Cc: Binbin Zhou <zhoubinbin@...ngson.cn>
Cc: linux-mmc@...r.kernel.org
Cc: linux-kernel@...r.kernel.org
Signed-off-by: Sean Rhodes <sean@...rlabs.systems>
---
drivers/mmc/host/rtsx_usb_sdmmc.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/drivers/mmc/host/rtsx_usb_sdmmc.c
b/drivers/mmc/host/rtsx_usb_sdmmc.c
index 84674659a84d..e23ef4111dab 100644
--- a/drivers/mmc/host/rtsx_usb_sdmmc.c
+++ b/drivers/mmc/host/rtsx_usb_sdmmc.c
@@ -1097,6 +1097,7 @@ static int sd_set_timing(struct rtsx_usb_sdmmc *host,
break;
case MMC_TIMING_UHS_DDR50:
+ case MMC_TIMING_MMC_DDR52:
*ddr_mode = true;
rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_CFG1,
@@ -1161,6 +1162,7 @@ static void sdmmc_set_ios(struct mmc_host *mmc,
struct mmc_ios *ios)
host->double_clk = false;
break;
case MMC_TIMING_UHS_DDR50:
+ case MMC_TIMING_MMC_DDR52:
case MMC_TIMING_UHS_SDR25:
host->ssc_depth = SSC_DEPTH_1M;
break;
@@ -1343,8 +1345,14 @@ static void rtsx_usb_init_host(struct
rtsx_usb_sdmmc *host)
mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34 | MMC_VDD_165_195;
mmc->caps = MMC_CAP_4_BIT_DATA | MMC_CAP_SD_HIGHSPEED |
MMC_CAP_MMC_HIGHSPEED | MMC_CAP_BUS_WIDTH_TEST |
- MMC_CAP_UHS_SDR12 | MMC_CAP_UHS_SDR25 | MMC_CAP_UHS_SDR50 |
+ MMC_CAP_UHS_SDR12 | MMC_CAP_UHS_SDR25 |
MMC_CAP_SYNC_RUNTIME_PM;
+ if (host->ucr->supports_sdr50)
+ mmc->caps |= MMC_CAP_UHS_SDR50;
+ if (host->ucr->supports_ddr50)
+ mmc->caps |= MMC_CAP_UHS_DDR50;
+ if (host->ucr->supports_mmc_ddr)
+ mmc->caps |= MMC_CAP_1_8V_DDR;
mmc->caps2 = MMC_CAP2_NO_PRESCAN_POWERUP | MMC_CAP2_FULL_PWR_CYCLE |
MMC_CAP2_NO_SDIO;
--
2.51.0
Powered by blists - more mailing lists