From nobody Tue Apr 7 16:20:25 2026 Received: from mail-wr1-f47.google.com (mail-wr1-f47.google.com [209.85.221.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8F2E51D9663 for ; Thu, 12 Mar 2026 12:16:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773317770; cv=none; b=PitjBw2J7obVBm1KvR2THVDPUuScYbtPYb9QFLBWFGHyKMW2y/Ohm+KuhcFT8BriEVLwFg1MLGc9RYwGi8+2kvpTofMz+56L8qoWoxjYQ6wq4E53e/gcWHgiNsIvLI4E5K36RC1Dw17d7t5mFWyWxu84e/MqufdaCbD3kKpqLXw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773317770; c=relaxed/simple; bh=q7K+v3piZJcrosJPTRdRPWUfVCCMq202FgtLyEjDs48=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=H7i3OSXcVDUCePyddBWHo06FWHGKUjQ4NZIJyhs/Ta5kbj8eFnicB2Nvf5TcnJKXIWYxIXZlThHHQ0wj8YGhs410d8PX5j0/79Hl7e/yXthu7w85RubrzEgba/MzDaWmUp9CK/q1W6AJzE2exHozOfOXxN+uE7lwnh/tHUWWgTU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=starlabs.systems; spf=pass smtp.mailfrom=starlabs.systems; dkim=pass (2048-bit key) header.d=starlabs-systems.20230601.gappssmtp.com header.i=@starlabs-systems.20230601.gappssmtp.com header.b=Cz+Al66g; arc=none smtp.client-ip=209.85.221.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=starlabs.systems Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=starlabs.systems Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=starlabs-systems.20230601.gappssmtp.com header.i=@starlabs-systems.20230601.gappssmtp.com header.b="Cz+Al66g" Received: by mail-wr1-f47.google.com with SMTP id ffacd0b85a97d-439b6d9c981so693949f8f.1 for ; Thu, 12 Mar 2026 05:16:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=starlabs-systems.20230601.gappssmtp.com; s=20230601; t=1773317764; x=1773922564; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=dpvL5W3u/QtSEFCecru0A3tqQQejPltz3A2r1FTtM90=; b=Cz+Al66g7/kVsYoAqCwETrymvjChAVZgkMe4q6S33PNUsQOSFk8LLnAC4+Z/C1xvmi bfa8Z0JDSo+E1oExYEXqNsTKX74JhQnuTbmzRPQH6rUzFJKFR2wkXA5LMj1yBE+ouYUQ mUi5HmxNpON8X0G0f9RyqueYA/uMlHlXDBHb+xG5w6zuZKT+2HYR5osgpli64JyvVG97 Tv61MmcYRh3bTm9jWT7Al0se5l8EtaOyJt+ZN6c1Q0aY5uuN4W6ugT60Gnqp8UIzfGeU OuBtUqN34O3Gx3X3fmCr4YO/U2DJaxi8GBdsToiKeRxfxgV3juozqnck4KpGH2ioT+BJ yiPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773317764; x=1773922564; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=dpvL5W3u/QtSEFCecru0A3tqQQejPltz3A2r1FTtM90=; b=mdpDX86kxO7dRp9OCbcc+TO3P/dG+PL5mlKPM1r/WkU8VIq2SdcjBWEMcoy2lbV7TM VaCz5kHMI50iFNOsTLSqZNITygwTptHMYXk/X1srWZaLEZA1COmSp+ABhV1+zJ4ajVEO G7ntU/W6kFcLhqrANGdj9hcfsJMOdwCrMPcGZXB0BRGq4cp4bWsd5sETbpAw9y4r0LTe sjUFNYuzrALzM0h+Yi6BHO8v73ulDBwHoQudFtGerW5ubjxTOy1byvl4ED+D+x0FxTsP X5M1+GzVLow7UE044O4xt5A04DT9I3QJEURcn4vuWdmVqJFZ36MAsIaC6BlLt6HbAGFh Uzgw== X-Forwarded-Encrypted: i=1; AJvYcCW+BO0mm0uT3izsWLJPbXaxwcR7duI5QcVMZiWrflN3sN8V2jkltT9UOl0mgM1Om5o/rdpGb1m9lNZyYvw=@vger.kernel.org X-Gm-Message-State: AOJu0YyQekFSk1TsU93QlsO/JaF14XgueOuDtdCpFjQev+5yeIhZSVDi KDuKmcmOWwQ7qd8pcJj/25O7F+iiblZkJEplHa3lmNQmTd6LV3diEPizjBIZgFcnvw== X-Gm-Gg: ATEYQzw2NICG+1JhI31Dk+mojnaMCoXJ04eIayyfXgLdjxuA3NOMRUkbq552q6EdxA3 R9JZwUBleaqQ6uy0EAo9Xc4Yjh5OlSLcegJ1GSP/4EPUKBwZ3goR7YVb7ESBrGY4AvGrqPexCWz 63uvG/6aUd9Hy4mMDf0idHikiCBhoYolpadA9hlrP2lLXzcUdFjKFxt/YgAFJ+vuiPbDyu1+Evb Qtz7SOUIYB9eML2jpY3L7Pl789MUWzpCuN+S4hZsyGLvpiFRZM8Gel/J4zYmywYzV/lBcqaniTH cYAMqF7Ho0/kbIuHHAe0twFCW+NO814jUgE4lPUjalnSzfI1U1WxuB0SS1W/nmjqs/SbnZWoyPJ 28xcomFu4uz1QzwliYxtpohhQfK35GLkmHIrgvJcOxvocfxYiUnjHNDgKH9OrUVTLvL6W4FoLmf nWinK/rRlXFG0RIS3qU+bXa6BlHwR1KJh5A7G3XRj3dYoacLM7/nHZO+BCDYoQFj90n1kNIw== X-Received: by 2002:a5d:5f96:0:b0:439:c8b3:a3e9 with SMTP id ffacd0b85a97d-439fe194765mr6267301f8f.14.1773317763477; Thu, 12 Mar 2026 05:16:03 -0700 (PDT) Received: from starbook.localdomain ([212.105.129.204]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-439fe20c473sm8139874f8f.24.2026.03.12.05.16.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Mar 2026 05:16:02 -0700 (PDT) From: Sean Rhodes To: linux-mmc@vger.kernel.org, Ulf Hansson , Greg Kroah-Hartman Cc: Ricky Wu , Avri Altman , Binbin Zhou , Dan Carpenter , Jisheng Zhang , Nathan Chancellor , Arnd Bergmann , Huacai Chen , Ingo Molnar , Thomas Gleixner , linux-kernel@vger.kernel.org Subject: [PATCH v2 RESEND 1/6] mmc: rtsx_usb_sdmmc: avoid false card-detect on tray readers Date: Thu, 12 Mar 2026 12:15:54 +0000 Message-ID: <20260312121559.19197-2-sean@starlabs.systems> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260312121559.19197-1-sean@starlabs.systems> References: <20260305194052.5120-1-sean@starlabs.systems> <20260312121559.19197-1-sean@starlabs.systems> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Some Realtek USB SD readers with a tray can assert SD_CD even when no card is present. This can make the MMC core believe a card exists and trigger unnecessary initialization and suspend/shutdown failures. Debounce the CD signal and validate a newly detected card by probing for a response (CMD0 + CMD8/CMD55/CMD1) before reporting it present. Also treat SD_INT as a removal indication even if SD_CD stays asserted. Tested: Realtek RTS5129 (0bda:0129), tray inserted, no card (2026-02-24) Tested: Realtek RTS5129 (0bda:0129), tray + SDXC card, mmcblk0 (2026-02-24) Signed-off-by: Sean Rhodes --- drivers/mmc/host/rtsx_usb_sdmmc.c | 156 ++++++++++++++++++++++++++++-- 1 file changed, 148 insertions(+), 8 deletions(-) diff --git a/drivers/mmc/host/rtsx_usb_sdmmc.c b/drivers/mmc/host/rtsx_usb_= sdmmc.c index 84674659a84d..ec3eeea78e95 100644 --- a/drivers/mmc/host/rtsx_usb_sdmmc.c +++ b/drivers/mmc/host/rtsx_usb_sdmmc.c @@ -19,6 +19,7 @@ #include #include #include +#include =20 #include #include @@ -30,6 +31,9 @@ #define RTSX_USB_USE_LEDS_CLASS #endif =20 +#define RTSX_USB_SD_CD_DEBOUNCE_CNT 2 +#define RTSX_USB_SD_INSERT_RETRY_MS 1000 + struct rtsx_usb_sdmmc { struct platform_device *pdev; struct rtsx_ucr *ucr; @@ -46,6 +50,8 @@ struct rtsx_usb_sdmmc { bool card_exist; bool initial_mode; bool ddr_mode; + u8 cd_debounce; + unsigned long next_insert_check; =20 unsigned char power_mode; u16 ocp_stat; @@ -72,6 +78,13 @@ static inline void sd_clear_error(struct rtsx_usb_sdmmc = *host) rtsx_usb_clear_fsm_err(ucr); } =20 +static int sd_set_bus_width(struct rtsx_usb_sdmmc *host, + unsigned char bus_width); +static int sd_set_timing(struct rtsx_usb_sdmmc *host, + unsigned char timing, bool *ddr_mode); +static int sd_power_on(struct rtsx_usb_sdmmc *host); +static int sd_power_off(struct rtsx_usb_sdmmc *host); + #ifdef DEBUG static void sd_print_debug_regs(struct rtsx_usb_sdmmc *host) { @@ -768,12 +781,94 @@ static int sdmmc_get_ro(struct mmc_host *mmc) return 0; } =20 +static bool sdmmc_validate_insert_locked(struct rtsx_usb_sdmmc *host) +{ + struct rtsx_ucr *ucr =3D host->ucr; + struct mmc_command cmd =3D { }; + int err =3D 0; + bool probe_powered =3D false; + bool ddr_mode =3D false; + + /* + * Some readers with a tray assert the mechanical SD_CD pin even when no + * card is present. Only report a card present when it responds to a + * minimal reset/probe sequence, similar to the old rts5139 behavior. + * + * Must be called with ucr->dev_mutex held. + */ + if (host->power_mode =3D=3D MMC_POWER_OFF) { + err =3D sd_power_on(host); + if (err) + return false; + probe_powered =3D true; + + /* Issue clock signals to card for at least 74 clocks. */ + rtsx_usb_write_register(ucr, SD_BUS_STAT, + SD_CLK_TOGGLE_EN, SD_CLK_TOGGLE_EN); + usleep_range(200, 400); + rtsx_usb_write_register(ucr, SD_BUS_STAT, SD_CLK_TOGGLE_EN, 0); + } + + /* + * Ensure the interface is in a safe, legacy / initial-clock mode before + * probing for a response. The MMC core may not have configured ios yet. + */ + err =3D sd_set_bus_width(host, MMC_BUS_WIDTH_1); + if (err) + goto out; + + err =3D sd_set_timing(host, MMC_TIMING_LEGACY, &ddr_mode); + if (err) + goto out; + + ucr->cur_clk =3D 0; + err =3D rtsx_usb_switch_clock(ucr, 400000, SSC_DEPTH_512K, + true, true, false); + if (err) + goto out; + + cmd.opcode =3D MMC_GO_IDLE_STATE; + cmd.arg =3D 0; + cmd.flags =3D MMC_RSP_NONE | MMC_CMD_BC; + sd_send_cmd_get_rsp(host, &cmd); + + /* SD v2.0+: CMD8 */ + cmd.opcode =3D SD_SEND_IF_COND; + cmd.arg =3D 0x1aa; + cmd.flags =3D MMC_RSP_R7 | MMC_CMD_BCR; + sd_send_cmd_get_rsp(host, &cmd); + if (!cmd.error) + goto out; + + /* SD v1.x: CMD55 */ + cmd.opcode =3D MMC_APP_CMD; + cmd.arg =3D 0; + cmd.flags =3D MMC_RSP_R1 | MMC_CMD_AC; + sd_send_cmd_get_rsp(host, &cmd); + if (!cmd.error) + goto out; + + /* MMC: CMD1 */ + cmd.opcode =3D MMC_SEND_OP_COND; + cmd.arg =3D 0; + cmd.flags =3D MMC_RSP_R3 | MMC_CMD_BCR; + sd_send_cmd_get_rsp(host, &cmd); + +out: + if (probe_powered) + sd_power_off(host); + return !err && !cmd.error; +} + static int sdmmc_get_cd(struct mmc_host *mmc) { struct rtsx_usb_sdmmc *host =3D mmc_priv(mmc); struct rtsx_ucr *ucr =3D host->ucr; int err; u16 val; + u8 pend; + bool sd_int =3D false; + bool cd_raw =3D false; =20 if (host->host_removal) return -ENOMEDIUM; @@ -782,28 +877,71 @@ static int sdmmc_get_cd(struct mmc_host *mmc) =20 /* Check SD card detect */ err =3D rtsx_usb_get_card_status(ucr, &val); - - mutex_unlock(&ucr->dev_mutex); - - /* Treat failed detection as non-exist */ if (err) - goto no_card; + goto no_card_unlock; =20 /* get OCP status */ host->ocp_stat =3D (val >> 4) & 0x03; =20 - if (val & SD_CD) { - host->card_exist =3D true; + cd_raw =3D !!(val & SD_CD); + + /* Use SD_INT as a reliable removal indication on some tray readers. */ + err =3D rtsx_usb_read_register(ucr, CARD_INT_PEND, &pend); + if (!err) { + sd_int =3D !!(pend & SD_INT); + if (sd_int) + rtsx_usb_write_register(ucr, CARD_INT_PEND, + SD_INT, SD_INT); + } + + if (!cd_raw) { + host->cd_debounce =3D 0; + host->next_insert_check =3D 0; + goto no_card_unlock; + } + + /* + * rts5139-style: when a card is already known present, treat SD_INT as + * a removal event even if SD_CD stays high (e.g. tray-based readers). + */ + if (host->card_exist) { + if (sd_int) { + host->cd_debounce =3D 0; + host->next_insert_check =3D 0; + goto no_card_unlock; + } + mutex_unlock(&ucr->dev_mutex); return 1; } =20 -no_card: + /* Debounce mechanical CD before probing for a response. */ + if (host->cd_debounce < RTSX_USB_SD_CD_DEBOUNCE_CNT) { + host->cd_debounce++; + goto no_card_unlock; + } + + /* Avoid pounding the bus with probes if CD is stuck asserted. */ + if (time_before(jiffies, host->next_insert_check)) + goto no_card_unlock; + + if (!sdmmc_validate_insert_locked(host)) { + host->next_insert_check =3D jiffies + + msecs_to_jiffies(RTSX_USB_SD_INSERT_RETRY_MS); + goto no_card_unlock; + } + + host->card_exist =3D true; + mutex_unlock(&ucr->dev_mutex); + return 1; + +no_card_unlock: /* clear OCP status */ if (host->ocp_stat & (MS_OCP_NOW | MS_OCP_EVER)) { rtsx_usb_write_register(ucr, OCPCTL, MS_OCP_CLEAR, MS_OCP_CLEAR); host->ocp_stat =3D 0; } host->card_exist =3D false; + mutex_unlock(&ucr->dev_mutex); return 0; } =20 @@ -1359,6 +1497,8 @@ static void rtsx_usb_init_host(struct rtsx_usb_sdmmc = *host) =20 host->power_mode =3D MMC_POWER_OFF; host->ocp_stat =3D 0; + host->cd_debounce =3D 0; + host->next_insert_check =3D 0; } =20 static int rtsx_usb_sdmmc_drv_probe(struct platform_device *pdev) --=20 2.51.0 From nobody Tue Apr 7 16:20:25 2026 Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 02C802D1F40 for ; Thu, 12 Mar 2026 12:16:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773317772; cv=none; b=uIc0upIJ0KPFcrB5HYYwfrSUT9zRpPDtlLkGI2+Y0LUYKuEGW+Jxe3DFr15+jUwVyRn75zi5UjlJi5fPern4D3L35Kj9JSZjLzbC/RX5qQmH1OlOTA4wPgUJ7WXP+pVHP4rTixAophjCCHdISM0+m4k/3qmmmRmIVEkUiDI2AIQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773317772; c=relaxed/simple; bh=AbncytGo/OWfyaXKOnMZkV2SkbCa9h8pOQP7KxGY75g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TUyc9cqoF6ItOlpOot78DClYramRobIBtpc1BxS8ecD39et6aWTvs+mRnXoH2QdTvIWmgkIWdi685EhITta5C7IhFlBdM+RnIV+Nt1TCPZrEClXjcvDjIqpRoj4cO1M8u6jPnlhBvS9xA1PiwfPYRHHYnp9q2N39MWCNgS69iO0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=starlabs.systems; spf=pass smtp.mailfrom=starlabs.systems; dkim=pass (2048-bit key) header.d=starlabs-systems.20230601.gappssmtp.com header.i=@starlabs-systems.20230601.gappssmtp.com header.b=O7j6T6Tx; arc=none smtp.client-ip=209.85.221.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=starlabs.systems Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=starlabs.systems Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=starlabs-systems.20230601.gappssmtp.com header.i=@starlabs-systems.20230601.gappssmtp.com header.b="O7j6T6Tx" Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-439c6fc2910so781348f8f.0 for ; Thu, 12 Mar 2026 05:16:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=starlabs-systems.20230601.gappssmtp.com; s=20230601; t=1773317765; x=1773922565; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=/eeZ0mjv866Z0Uw5ZhaTkSoek9Tp9x+KF8G9Qscf4X8=; b=O7j6T6TxI3y1c05eDrwObgR3/xPQPselhI1c8+6nlO22Dno0n1nDcI71B+Mq1pDZxz bjq0JmCuHMA9sxSfP5dhNiaPZayL9X0wKbU7FqIK85apxyZSkDlYy2h1VKwlVoFuQJ5r ydwfw3j0gDrN/VdkW6RirVMms2nLhOMggfeytwBeFI8WHhtpfrIKWU/hGgySW8WBT8y0 CqGPpOJ94iZlY8tT+z3e21VH32RwwXch57RxgbrX2L3Z9XDpavR2YivDB+dgJCq3/9wJ 2zWr3SCCpNDtGASeILsEQLsQrwN156jEZaLDoK5yWZXMeuECZbMkR4HFbZW2wlMbAMxM LK1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773317765; x=1773922565; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=/eeZ0mjv866Z0Uw5ZhaTkSoek9Tp9x+KF8G9Qscf4X8=; b=Ump1lcGixwwq6v135TzWHDvw8zdzbjczksAHCvZCGS+pMOJ1uoBWqtfIIPAxUMoa/m ZWzS/6KS1TexLUWv6NGnfwlIdFP5NhtYGEJFphT00fQnwKzy4GbNWQ+WfJq1Iak4/1s9 IKLuGdZPn+962xzyvLqArnTgdusJkoEZYjOswz7is7E6Ed6VSoS+TfRhA3uEDxfCNgpc 0KST7NJTpi+zFbcg3LDAVWcf6xczXBvlo+mtVVjlwR8+mf/eBsPneRZKfaFAuuf/Pral n2Fzf1KzsMtknV1ncPViW6aHCVUrjcUpZ3VrXDCZtzNWqUbwxzbYLWmQErekAiYmzU1C Eaag== X-Forwarded-Encrypted: i=1; AJvYcCX0JA4ZFYxKykRn+0wfZ2K7cP874HZwERWZOdpa8M5IFqP9WgMw3OehjdMyDyGAnXm+K/C9296hhg5owfk=@vger.kernel.org X-Gm-Message-State: AOJu0Yy4YxfuJZJzoFIqlzkZo9Jp0yR0Itt/FtLaiIvxZ3TxIybKM4o3 k+yj/2eUm67Anq+urPltTLKKpwOIn/KXhyGAiI+SHibeV70XzuE+2hyxATKVu/q/hA== X-Gm-Gg: ATEYQzzLYxQfhiHBBCYbFftEIwZ8zYpIGA9fSi4+LaCntn16cwvtSIgaRc76r4zls1x BtB5LIQqXk2Ij13VMQKPric2rku1bbwOr5HTDkDukT4QI/BMQ8m2c+G3kJFdgO26c1Z3S42KzHX IgH7iMkn+tihuH/PRaJ6La+9hp90obs93YfqBGQhSiK+qeSfkbFa5ssnkj/JwuIS6l9g3KZSXg5 R2AkU8foj0SHRyjjPdaOCfKq6zZSS/UsAKqoD/NO49tJBUA61TmsTSWi+f/vwJ1+MM48ohqY7cJ 8C5Kxgok7Y9fBF5aAaZJAGHG+f7c9etuzZjFFS37H7NPIhy72vFfEqrvQ1vjoBcIlXZq9B2nUYo tOoNLgO+0Tnqj4pMjvPFZlCcfb+PnbPTFVXh45UOOER7MEqhZjfZp4e0EK89eBAN9aFqnzcYRgu lyIXNd5xyfx4++/PFNXAl+8OKb2QFhklLHJeqaRl8x2+3E4XNRhUJiYfSdYELeMuvBLtBNci52A E05Q8eI X-Received: by 2002:a05:6000:2681:b0:439:cbf3:4a8f with SMTP id ffacd0b85a97d-439f8434f2amr12147772f8f.41.1773317764802; Thu, 12 Mar 2026 05:16:04 -0700 (PDT) Received: from starbook.localdomain ([212.105.129.204]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-439fe20c473sm8139874f8f.24.2026.03.12.05.16.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Mar 2026 05:16:04 -0700 (PDT) From: Sean Rhodes To: linux-mmc@vger.kernel.org, Ulf Hansson , Greg Kroah-Hartman Cc: Ricky Wu , Avri Altman , Binbin Zhou , Dan Carpenter , Jisheng Zhang , Nathan Chancellor , Arnd Bergmann , Huacai Chen , Ingo Molnar , Thomas Gleixner , linux-kernel@vger.kernel.org Subject: [PATCH v2 RESEND 2/6] mmc: rtsx_usb_sdmmc: start card power-up at 3.3V Date: Thu, 12 Mar 2026 12:15:55 +0000 Message-ID: <20260312121559.19197-3-sean@starlabs.systems> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260312121559.19197-1-sean@starlabs.systems> References: <20260305194052.5120-1-sean@starlabs.systems> <20260312121559.19197-1-sean@starlabs.systems> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Some tray-based readers keep SD_CD asserted even without a card. The rtsx_usb_sdmmc driver now validates insertion with a minimal probe sequence. That probe must start with the SD pads in 3.3V mode. Like the old rts5139 driver (sd_init_power()), force the SD pads to 3.3V and tune the SD18 regulator to 3.3V before powering up the card. This avoids spurious probe timeouts when the reader is left in 1.8V from a previous UHS session. Tested: Realtek RTS5129 (0bda:0129) + tray + Lexar 2TB SDXC Tested: cold boot detects mmcblk0 (2026-02-24) Tested: hotplug insert enumerates mmcblk0 (2026-02-23) Signed-off-by: Sean Rhodes --- drivers/mmc/host/rtsx_usb_sdmmc.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/mmc/host/rtsx_usb_sdmmc.c b/drivers/mmc/host/rtsx_usb_= sdmmc.c index ec3eeea78e95..6be98926387d 100644 --- a/drivers/mmc/host/rtsx_usb_sdmmc.c +++ b/drivers/mmc/host/rtsx_usb_sdmmc.c @@ -1108,6 +1108,11 @@ static int sd_power_on(struct rtsx_usb_sdmmc *host) } dev_dbg(sdmmc_dev(host), "%s\n", __func__); rtsx_usb_init_cmd(ucr); + /* Start SD init at 3.3V, like the old rts5139 driver. */ + rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_PAD_CTL, + SD_IO_USING_1V8, SD_IO_USING_3V3); + rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, LDO_POWER_CFG, + TUNE_SD18_MASK, TUNE_SD18_3V3); rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_SELECT, 0x07, SD_MOD_SEL); rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_SHARE_MODE, CARD_SHARE_MASK, CARD_SHARE_SD); --=20 2.51.0 From nobody Tue Apr 7 16:20:25 2026 Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 418672D8393 for ; Thu, 12 Mar 2026 12:16:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773317772; cv=none; b=UZQL/a3l8hrYq1Z4BWaQuzMoulsjRr7eCIiowjG497nr4KH5WQiNeAHYZK4+XiOoOb3gLOLerUBMNEUuac9T+xZ9bIj33qpnunLu/IrdGIfbmBTBe2/bIUpk7g0eRzf+T9J1yH5jJprI6Pr4bQkr0X14/1E3D0f9K5DbXO8zzI0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773317772; c=relaxed/simple; bh=N6Q3DV9Hf2gd5Ew9bki/uNf8ROrb8Qv6zbSptgVxae4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UVS5UyGEd+0vRLoLdVrUYRvb458vEdVTexChQShYgabdRALWdmUL6LBct5fwuYii8Hd6g9e87YayPYuoxC3nFgVT0vKbBfKZ9ozzuZliFkurikegQUeTN4/98qdjo/LaRf7n3oaYWgQvN7/zSY2RecMGw8V2rn9aJ4pmP0E6ziI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=starlabs.systems; spf=pass smtp.mailfrom=starlabs.systems; dkim=pass (2048-bit key) header.d=starlabs-systems.20230601.gappssmtp.com header.i=@starlabs-systems.20230601.gappssmtp.com header.b=A8KpD5ul; arc=none smtp.client-ip=209.85.221.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=starlabs.systems Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=starlabs.systems Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=starlabs-systems.20230601.gappssmtp.com header.i=@starlabs-systems.20230601.gappssmtp.com header.b="A8KpD5ul" Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-439cb5af25bso999470f8f.1 for ; Thu, 12 Mar 2026 05:16:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=starlabs-systems.20230601.gappssmtp.com; s=20230601; t=1773317766; x=1773922566; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Kl6zJ1Nk20DUYrjnz4TXPBNcE4uS38sMaZmdYaClkFE=; b=A8KpD5ulghKvBkQ5O2j1uxHSfbWoEYQX9TIu72fkFPsUUZI7QjjEOcKbdq98hvsSdq 4nSSfEKVzNtjTNwkGWWH4j8lvaCdz57Q/NolcZCuQu+iBSKJ4+STYb8tlynyWFQ3J/mh Oc46000GKibWnnTCDAmE+h1sAW3YGC7tdBgUNEvDcS5/u3I0cncFpOe+H0bDMvtxvcFA zUzsgMejiHZIO8JeO/xtavHCGMNWeZUJARvwchLgBDRBkPAO9WTHxdj/Rg38g58mfF2N tuUpYCgQjyxQUVE69pIQ38b4wsRh+PFwKM5X0dIhaXj4N6/0wg0Fiuo25+0MrNLt2BQt hVKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773317766; x=1773922566; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Kl6zJ1Nk20DUYrjnz4TXPBNcE4uS38sMaZmdYaClkFE=; b=ApPI/WnITxs5V4tku/GFRpEEVmH3Q+/Odl2kO4Qz7lZJgoW84pIg40bu8cxeaVTbQh PdDW0Aq+LsJltLXwBu0c3o4x/FgbTwWUYnFboEeglRZGmuodeGH1nmOjpUBLvZS92+pI qRSCZBNWAce/wkslr1Y6lBKQ3qodjKs3HfMfoMyp7lSdytY3AfX7Ccmznku8nOHROqv+ QwFZBadWxvAx/ClAtix2Ex0JTB5+84i5YI8pvjCM9QJ6hIGv08wxAU5i45itAsBqZWwm gwcMIf6HbjKKb5L64RmtNbKqv/a9fo8iQNGrDRnvuwOO0jULiMFFBblCpXVHwIo7a1dx 2pag== X-Forwarded-Encrypted: i=1; AJvYcCWqYZOWKVaclLcSn7Z3XyitN+kKJ1ryQRog7nD9ygqX00p9AF/s6zKH8SFI610ruv0NzbHlud1cjjkwA64=@vger.kernel.org X-Gm-Message-State: AOJu0Yx1Goz0dbu7ERXE4r4uIp/hm4wSWwoL2RFB4NC9Zdb6EFTyAcfQ Bll5RR+0hEWtodfOXas3hrVA/sqzEJ7ApBioIP7JiX4+xt7mBozkggX5JRdKyATYKA== X-Gm-Gg: ATEYQzyQwc/APjnPH7KFZdiNXM0KRojKq2jUm6ud1KrmoR1YnlfpOq72ZUY1VYmjiOE aSStkAkC3Lv8NbRTKIC842Kmpbu/f+YP5WL8lB2p/Bvl/6r2T0lQq6dtKxP8a7bxKoMztADkuvC hL/dvQ16FtyUedry9dAND/MGFH0breyJkS3FnojzDHgjzBBxbEij/wtB/AwPypmOyi8QoBovXbi P9/6xrrV3oMkAp+nh/KOfFxMMy4+7c18kjQ44rRfcoaYmYWFiHv0RtCqBKqTDRRhNX7lNJC8tCi fq/vLmpD/fby5WnjDc1grUt1WEcAE2hhL5Giy4MmwxkgRDcIQ5PDlfhcubVpqD+8GxRqyrrisYE L5GHJPOH0uPvxNVBMMK4djrXMr2cZUQC3PX060RKFXnG6GKHgSb0wG1O10x10zJEpb7im46dOxk ELEGnuHFnet5zubEMnuKOw9LWuSlgmx9m2z63xt7hyOW13+bb70TlZojUl2cXIURc6i2+ZCw== X-Received: by 2002:a5d:5f86:0:b0:439:a897:6515 with SMTP id ffacd0b85a97d-439f842a386mr11340398f8f.36.1773317766189; Thu, 12 Mar 2026 05:16:06 -0700 (PDT) Received: from starbook.localdomain ([212.105.129.204]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-439fe20c473sm8139874f8f.24.2026.03.12.05.16.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Mar 2026 05:16:05 -0700 (PDT) From: Sean Rhodes To: linux-mmc@vger.kernel.org, Ulf Hansson , Greg Kroah-Hartman Cc: Ricky Wu , Avri Altman , Binbin Zhou , Dan Carpenter , Jisheng Zhang , Nathan Chancellor , Arnd Bergmann , Huacai Chen , Ingo Molnar , Thomas Gleixner , linux-kernel@vger.kernel.org Subject: [PATCH v2 RESEND 3/6] mmc: rtsx_usb_sdmmc: advertise UHS SDR104 and DDR50 Date: Thu, 12 Mar 2026 12:15:56 +0000 Message-ID: <20260312121559.19197-4-sean@starlabs.systems> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260312121559.19197-1-sean@starlabs.systems> References: <20260305194052.5120-1-sean@starlabs.systems> <20260312121559.19197-1-sean@starlabs.systems> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The rtsx_usb_sdmmc driver already implements UHS-I voltage switching, timing setup and tuning, but it only advertises support up to SDR50. Like the old rts5139 driver, also advertise SDR104 and DDR50 so the MMC core can pick the best mode supported by the card. 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 --- drivers/mmc/host/rtsx_usb_sdmmc.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/mmc/host/rtsx_usb_sdmmc.c b/drivers/mmc/host/rtsx_usb_= sdmmc.c index 6be98926387d..8d5ebe92018e 100644 --- a/drivers/mmc/host/rtsx_usb_sdmmc.c +++ b/drivers/mmc/host/rtsx_usb_sdmmc.c @@ -1487,6 +1487,7 @@ static void rtsx_usb_init_host(struct rtsx_usb_sdmmc = *host) mmc->caps =3D 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_DDR50 | MMC_CAP_UHS_SDR104 | MMC_CAP_SYNC_RUNTIME_PM; mmc->caps2 =3D MMC_CAP2_NO_PRESCAN_POWERUP | MMC_CAP2_FULL_PWR_CYCLE | MMC_CAP2_NO_SDIO; --=20 2.51.0 From nobody Tue Apr 7 16:20:25 2026 Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6E4571DE8BB for ; Thu, 12 Mar 2026 12:16:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773317774; cv=none; b=JC7bHTEdesScf7XMR5RK0/iqF/hwh8xqUGJj4NlURKQpdXD02Uj7YqMydF/w1dJySUx8x2s4vRXFyKv8IYwDsexvJdj84ze0VzUttSQscL+UCBabvaE40YfFOObNHwOVciFIT+dzN1+DwuPcNBp6JcZdQcUslQ1aG/yItfexuK8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773317774; c=relaxed/simple; bh=/QGGg48sn9sKA1F8TWZlfBuzKMx3jTk/2UYyPAjLJh4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HAkCXfOGosob8m73FT16F+3TfAn7WyA9QCLgZhfyre3kFqquRKaDRNbjhFB2/5UjrotMQqDsVEuGgT+iKJX5SAUoCrMKeWZ4qrj8Z1Zd9a53CJXyu0l0GUN6ayqFqja/0ATF7aVDwYmE/rIJCC6pZbDbhtIchJuM+MO9t0jJVPk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=starlabs.systems; spf=pass smtp.mailfrom=starlabs.systems; dkim=pass (2048-bit key) header.d=starlabs-systems.20230601.gappssmtp.com header.i=@starlabs-systems.20230601.gappssmtp.com header.b=ANybRDnE; arc=none smtp.client-ip=209.85.221.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=starlabs.systems Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=starlabs.systems Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=starlabs-systems.20230601.gappssmtp.com header.i=@starlabs-systems.20230601.gappssmtp.com header.b="ANybRDnE" Received: by mail-wr1-f51.google.com with SMTP id ffacd0b85a97d-439b6d9c981so693985f8f.1 for ; Thu, 12 Mar 2026 05:16:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=starlabs-systems.20230601.gappssmtp.com; s=20230601; t=1773317767; x=1773922567; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Kq4shlsXpyVXkpp2qtgEESfDg63q+osNt2mDVKvT2FU=; b=ANybRDnEJvrJJtvQIvc6h9Vsr9IC/G5Jv0SyhtiP6nWR3ntsoCEsi6yINDj+iULuq+ azKbTGHlKHYutWB/eQs0Tl0uI6Jnxhy2L8I4v30Vz9MbxTid2p2bod3b6ZYuEoiO/qeY p1iS04YcqaacdE+9gdpzCWitFvVprdmUFJy/R9VnRlc+oEM7FtP+M0Ffu+btxSiD6nap MvyEq2RvO1lxLwtVOyfts9cvgu8wtCcZq0ikhrUocgIKY9wuvLbc3W97HLXiCpzshj2s rvvXQSV79HPD6L6sK+H1rS7nh2e5zdLB7KEEEakFepohiN3ahhh2CSLq4uqDmollyMR2 fGVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773317767; x=1773922567; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Kq4shlsXpyVXkpp2qtgEESfDg63q+osNt2mDVKvT2FU=; b=Aq/xf5qSarnLvAlqvZ2HM7twZQyz8UhrcmJm2WQXS1Pep+MgwDEb+6R1L4k6eHQRH8 qwEXYV3bnqtCZHmHgmfcaf4k2bJVYHs9/YY+F1K9ccuoNJvOjNRrk3p+0Pte6d+DJlGt GGUTNNTMuSEwMJ00ZLJFnrubQKif23AxmYAuh3hF0owJgPMsT95YNqCtXSND1pxpOSY9 U+tpRkg0SKL77t4BtG4/+reviUD1bwCPnvDRWSE/50W1BZftjJyfseZIFVTLdujSVGfZ TnwI9x6oLGqnne4+fSwvgeVedynAHY95D2DlkqDgJJySBrCk6IyMj0v/HNHf0P+WaEmQ pyZg== X-Forwarded-Encrypted: i=1; AJvYcCW76YgoSEmzTA2KPrOTlRCMNfSJKpXPtFlhvTGw8WDlXbyw5edAVN5M7o9iexavP91DAT1JuUDmgoQBUJk=@vger.kernel.org X-Gm-Message-State: AOJu0YxRM4vqmku/mTKFGeBIUNLlQnHwkmo6E4iIzT/Gk72JLP7/49hq mvue8s4B7pDCDuoOVh0US9OZ6G5xoqro89mzCrJlqlVOmFiW07rnkiYA8nrpQLOycQ== X-Gm-Gg: ATEYQzyy88g8Fxfg7qdBFHrKG+RNdS/kB2WzkynR5K15wkwrESds4moi52VgsocCAkr drbMRs0XTokYzxMYbfZDlEZ2yKwFDCWZtZji/QwW1rPjTW/yxlf77nzZLmV6ModxLgtcdYd0QYj aNEFrnC30YshXY4fvGphl9fCczjaSygVsjufx2Uo37pE6wkdDHyjp05PwYWduaRa4fdEofg4XQG F+mDba6XrIGGlvakhGzvDiSyHO+FbyjFVrKmyp+uXTsRdanvG48gMaSbhheC4iQmDXIjG27DFnt 5/cQvVxesGzrr/D6jkvWvX2jHe4pTz13n3teVtKBNG9ewYysomKnkh4y7iLlTzr/gi+vOkZaLOf s70YFMEJ95sfvK6lUcCAr4f032oPn21r8vcdOuGe7bsqncshVwxdFhx1Gw1OZAA6eD9F05tcSpK +Jwma0p1ythEnSrFgr8RhXEN2OtZXLuOm+1s7ddsrnwuJPfWt9xwaEtomdo/BZugAOnKDTxQ== X-Received: by 2002:a05:6000:1a8e:b0:439:bde0:62ea with SMTP id ffacd0b85a97d-439fe1ae91fmr5920647f8f.29.1773317767462; Thu, 12 Mar 2026 05:16:07 -0700 (PDT) Received: from starbook.localdomain ([212.105.129.204]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-439fe20c473sm8139874f8f.24.2026.03.12.05.16.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Mar 2026 05:16:07 -0700 (PDT) From: Sean Rhodes To: linux-mmc@vger.kernel.org, Ulf Hansson , Greg Kroah-Hartman Cc: Ricky Wu , Avri Altman , Binbin Zhou , Dan Carpenter , Jisheng Zhang , Nathan Chancellor , Arnd Bergmann , Huacai Chen , Ingo Molnar , Thomas Gleixner , linux-kernel@vger.kernel.org Subject: [PATCH v2 RESEND 4/6] mmc: rtsx_usb_sdmmc: program SD30 mode for UHS SDR12/SDR25 Date: Thu, 12 Mar 2026 12:15:57 +0000 Message-ID: <20260312121559.19197-5-sean@starlabs.systems> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260312121559.19197-1-sean@starlabs.systems> References: <20260305194052.5120-1-sean@starlabs.systems> <20260312121559.19197-1-sean@starlabs.systems> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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 --- 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, =20 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, str= uct mmc_ios *ios) =20 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 =3D SSC_DEPTH_2M; host->vpclk =3D true; host->double_clk =3D false; break; case MMC_TIMING_UHS_DDR50: - case MMC_TIMING_UHS_SDR25: host->ssc_depth =3D SSC_DEPTH_1M; break; default: --=20 2.51.0 From nobody Tue Apr 7 16:20:25 2026 Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C67822E0902 for ; Thu, 12 Mar 2026 12:16:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773317774; cv=none; b=s6qu130Wq2k0SthUTw2Ki4jbjF6yV0zu+TkjsE7wDjqJfE3ohTNww6ZhTaWb7oKBoXKlX5MyVI2mZvCPNY1gWW3/ZT8fu3aFtPULLjEZssaTtWKOsjTo8O/Sar5q023iYUTnNpnddeE1BI4LoExVAwmuAiYqgHi+O0wN9nkcYMw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773317774; c=relaxed/simple; bh=L1iquWccV2yVTQCH11JwiafCcxb5GJJdUIRGsXkOSjI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZSa4tzsCpjNsixFKp8X8SQnPLxIIAfGoKScM8sbn1m1sKTUFT0/TZXRbNmZMHJ655O8OXoJH+OIPYNPYQEsJHx3gJrtYzcb2BikASBaF5owuQefr00EealjzqiSvtC2YFtm+CPcrcgiLRVLfK+xZpXjbtZ/1Q19LzofWj1Fukdk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=starlabs.systems; spf=pass smtp.mailfrom=starlabs.systems; dkim=pass (2048-bit key) header.d=starlabs-systems.20230601.gappssmtp.com header.i=@starlabs-systems.20230601.gappssmtp.com header.b=vQBQGIWy; arc=none smtp.client-ip=209.85.221.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=starlabs.systems Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=starlabs.systems Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=starlabs-systems.20230601.gappssmtp.com header.i=@starlabs-systems.20230601.gappssmtp.com header.b="vQBQGIWy" Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-439bcec8613so771715f8f.3 for ; Thu, 12 Mar 2026 05:16:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=starlabs-systems.20230601.gappssmtp.com; s=20230601; t=1773317769; x=1773922569; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=apEGcP2fvlwAgwLrCM8QRJtwowl3Oio23Mz89ebHt+8=; b=vQBQGIWyOtfgeiEyrIzPNDJvaNhKLa+mDPJYKfdyqsPLFUaV2MsgR1oEZHj1gMIrsa KnmUQ5f3jLgG0a+qYpEiTLFIMHjroy/hl8Quj47EBMvTcprx8MFUERe36a71NfzaZZCD OTidePuosxtzs41NmB9Fu3tPvzwZnAH+rWonpmKPc8hBhfH3MgkZG8QgGsKcn26hXYr/ JNLfGQMcwx2kxdkmqp4tO4/hr0SOiY/OyLDGO4TDrfFHWGNE+DpNF+BwpN2CLfogxQP7 cvhV/d6t78ftdX9QyqneM1mZuNxkVSF7gaoEFVD4vMkTVXwlf06WNQ4ekUfX1J1lykMH TidA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773317769; x=1773922569; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=apEGcP2fvlwAgwLrCM8QRJtwowl3Oio23Mz89ebHt+8=; b=UvsqcHQhcAEdN/G54W+bx/cY1akcqUmyHYDJe4tNAxhNye6DQ++4y4n7WAv6Hf049k CvuI/9fqrT2W2mR1IsaQVW9JpkhhB3KEu4/AOyyjc96XmOlDS6AyMiJTuKHrv+aDT0Al Oh8YWiSylKRb0m5P2X+r3A2D0BrWPNjOCDqNcS5O/WX2QVtiQTERoeA1105QsIajboKs rj9wh74AgdM5hj2qp3XKUW/o6yvFvPWQzV94OYCUod0VmV0D41dokAzL6ygS69a8DGV2 ZvbsobTcVo5Ha/QisOVlhPosJ+tI2kHdk6kQPTH8b4cxuy8YZOwsBpEgdIwCMMe7zoI2 gf0g== X-Forwarded-Encrypted: i=1; AJvYcCUhPanika6Ivbxw7YwtxZH4GElNgT+UI7f6Id8WVwpWVy4nKhHGmTBrm3NBG+DUnJhn75DSXYXafto1X0M=@vger.kernel.org X-Gm-Message-State: AOJu0YyYcj2LVQUNHngfZEVVnhbADEL4i2yxdDxeUxkd7dddCZEJ5FbO lIKKzjkr6nMEv99yxZLTUk7zPLZqH4lzSCRNVmrM1lWpg/cNaovXHWRDRHBC2Q49Rg== X-Gm-Gg: ATEYQzwv7U15bXN8pT9f9dNYuKg47ppDbN15EuWfS6mhKHilC/pxSTDFQAIFzw5z3Kl Ju1IfVNHiKuMqP/by8tPTIIhh6E2BdthfjvLmykB1hXF9ABP8b3jeQ98JqiWMYEt5CYO/ASWcQ8 ZyJ4yupIhF3b72gdF/cvfyLGB9jYJnnq3sMxS6/rhMvtNz3atYoo6it0Rc9eGLdF3CM/ejZgMFz HDgHaP0SKzKkfuiD/ZCe5Fo95TzlL+50tmcF1wdwYl1BrSNa9xCG9PNIiYIaboWmfHGKwcYTKia Hfo0XV1/k10lbLv6VSajBPxKMwvuQhcAbwDJpIe/Rv52Yu7HrNgYCIuRQopWCvVcOly4zk6DLNl ZnBl1ldzAJ9Ot/yeJJ7SeNsyL7Z4d+FYOdxQ3l1IPFRzGm41cy3OJqH+gfd8xoxXdihm+kbEzlt RtNT5Q6RW6jHyOPb/yX7suHVnqBVxP8F0GciPYtFJHDHiffyFlgVNgGrgtqDX3YoHJtOgDaBant rLk19WE X-Received: by 2002:a05:6000:1aca:b0:439:ca9b:1f61 with SMTP id ffacd0b85a97d-439f81c74admr11574930f8f.17.1773317768726; Thu, 12 Mar 2026 05:16:08 -0700 (PDT) Received: from starbook.localdomain ([212.105.129.204]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-439fe20c473sm8139874f8f.24.2026.03.12.05.16.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Mar 2026 05:16:08 -0700 (PDT) From: Sean Rhodes To: linux-mmc@vger.kernel.org, Ulf Hansson , Greg Kroah-Hartman Cc: Ricky Wu , Avri Altman , Binbin Zhou , Dan Carpenter , Jisheng Zhang , Nathan Chancellor , Arnd Bergmann , Huacai Chen , Ingo Molnar , Thomas Gleixner , linux-kernel@vger.kernel.org Subject: [PATCH v2 RESEND 5/6] rtsx_usb: hold runtime PM during transfers Date: Thu, 12 Mar 2026 12:15:58 +0000 Message-ID: <20260312121559.19197-6-sean@starlabs.systems> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260312121559.19197-1-sean@starlabs.systems> References: <20260305194052.5120-1-sean@starlabs.systems> <20260312121559.19197-1-sean@starlabs.systems> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Hold a runtime-PM reference across bulk transfers, and mark the device busy afterwards. When runtime PM is already in progress (e.g. from rtsx_usb_suspend()), avoid forcing a runtime resume from within the PM path by using usb_autopm_get_interface_no_resume() unless the interface is already runtime-suspended. Signed-off-by: Sean Rhodes --- drivers/misc/cardreader/rtsx_usb.c | 38 ++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 7 deletions(-) diff --git a/drivers/misc/cardreader/rtsx_usb.c b/drivers/misc/cardreader/r= tsx_usb.c index 1830e9ed2521..5d818b632788 100644 --- a/drivers/misc/cardreader/rtsx_usb.c +++ b/drivers/misc/cardreader/rtsx_usb.c @@ -12,6 +12,7 @@ #include #include #include +#include #include =20 static int polling_pipe =3D 1; @@ -65,19 +66,42 @@ static int rtsx_usb_bulk_transfer_sglist(struct rtsx_uc= r *ucr, } =20 int rtsx_usb_transfer_data(struct rtsx_ucr *ucr, unsigned int pipe, - void *buf, unsigned int len, int num_sg, - unsigned int *act_len, int timeout) + void *buf, unsigned int len, int num_sg, + unsigned int *act_len, int timeout) { + int ret; + struct device *dev =3D &ucr->pusb_intf->dev; + if (timeout < 600) timeout =3D 600; =20 + /* + * During runtime suspend/resume callbacks, avoid forcing a runtime resume + * from within the PM path. The device is still active when + * rtsx_usb_suspend() runs, but usb_autopm_get_interface() can block when + * runtime PM is already in progress. + */ + if (pm_runtime_status_suspended(dev)) { + ret =3D usb_autopm_get_interface(ucr->pusb_intf); + } else { + usb_autopm_get_interface_no_resume(ucr->pusb_intf); + ret =3D 0; + } + if (ret) + return ret; + if (num_sg) - return rtsx_usb_bulk_transfer_sglist(ucr, pipe, - (struct scatterlist *)buf, num_sg, len, act_len, - timeout); + ret =3D rtsx_usb_bulk_transfer_sglist(ucr, pipe, + (struct scatterlist *)buf, + num_sg, len, act_len, + timeout); else - return usb_bulk_msg(ucr->pusb_dev, pipe, buf, len, act_len, - timeout); + ret =3D usb_bulk_msg(ucr->pusb_dev, pipe, buf, len, act_len, + timeout); + + usb_mark_last_busy(ucr->pusb_dev); + usb_autopm_put_interface(ucr->pusb_intf); + return ret; } EXPORT_SYMBOL_GPL(rtsx_usb_transfer_data); =20 --=20 2.51.0 From nobody Tue Apr 7 16:20:25 2026 Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4F2F12F532C for ; Thu, 12 Mar 2026 12:16:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773317778; cv=none; b=qwBGTSPJ9ouT/JGNJ+/Y8xg8sljnyXv4nbJRDNSyJJ7Vt1jmXpLTkgRpRVbvhslGtiXuLj8yGLlONGVh9EapZ2NuFR7L7e5lLRSR5WrVoV9AIa4VgdxHC9cEdb3VPI54P0y1hGFuSXWiYd43j6NzwrciqroSuBGSsDvTDuXh7N4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773317778; c=relaxed/simple; bh=QfcpGq77fLYNDCobaNjjIeOj2imphrNCAcezXXgBA2U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=pln9tJAI0PqNxB69B2Ech/j7x8K+UHT2ZNFHH0HQv3CyvMZ9ELgz6hLXmLzZzU8LsNrNke0D1nHxyVM7gtL2HZt2uyfHYxZLXuL2BTgF56ojOc3BW3JtQLJurCZiShtMFYGR6I4nMqH+X6VlC5p2QzGeVdYeez+465LWhi08zA0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=starlabs.systems; spf=pass smtp.mailfrom=starlabs.systems; dkim=pass (2048-bit key) header.d=starlabs-systems.20230601.gappssmtp.com header.i=@starlabs-systems.20230601.gappssmtp.com header.b=0iNdwIYV; arc=none smtp.client-ip=209.85.221.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=starlabs.systems Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=starlabs.systems Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=starlabs-systems.20230601.gappssmtp.com header.i=@starlabs-systems.20230601.gappssmtp.com header.b="0iNdwIYV" Received: by mail-wr1-f48.google.com with SMTP id ffacd0b85a97d-439ac15f35fso893247f8f.0 for ; Thu, 12 Mar 2026 05:16:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=starlabs-systems.20230601.gappssmtp.com; s=20230601; t=1773317770; x=1773922570; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=fdIy1fm/RRHFyWbC0yhnY1690tyzx/03AbGybTnU4TE=; b=0iNdwIYVXvXfMxMJzQRUstDg5kFYHo1FwHmc+PVHPpPrfVprih9s2DIavYhGHAqnDi Wm37Kubvh5rAbD5g1EwKGQ/Dkxvomc2L0to7a6amviBk0yEk2aRuWi2BWx7kI6gATAwM KXswJrT0dkh/MYeHlmyfeZfJoWQkW1/cZ//BN3WsFrixvqSnmz945wpEQXER4Zvh3yZz gmYXHtymP8Jr/xq4AXviII8EYM26I3tZgtl7GSLbMTgc5h9b00GB8jliiq6SzFyFoxm5 hYDiruFFLntm+07V1joYSH7UjQjhzu+XKxRHWVmgPWAxCczInolTKCFQcos/8pGR+Ri/ ihLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773317770; x=1773922570; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=fdIy1fm/RRHFyWbC0yhnY1690tyzx/03AbGybTnU4TE=; b=JrLlOKevOY4apskKI8h2T+y+TGR8GHaVPPSwNbXNCJhuBnCsJl0B7LXdQG9BqWuW1g ZgOBdTagRR71Yvdnml43IslhC9AanJAYJfYGdDv3rcGaRUwk0WXIXwQyjRRJOZE1gZlz 3XWMtwS9tarec6ueRqnk6hwqdCCIE2tQzXfRJovY9QZ8dwYPFBH/xwE6JXFyaTLj5X9r KDg4X/xE54un3IbUbekq2Byh2DiKBxnaj6FUyWXw+sk0nDThArwCeyGgLwUGH3Ia6Lq3 cDTsnWQcVQhTJR+hGmQIErsoNDG1wGzey6DCu3TlCcPvnaYm8TfTyMm7MZhdtD8A55k7 ftHw== X-Forwarded-Encrypted: i=1; AJvYcCX0/o6iNHuSEDM2EM0fCgiEbHE3USEft7/Ku9XYJxgvIkJBPe/nrYRXLsWqKhxvALzlZL0WowsJTPBlxXg=@vger.kernel.org X-Gm-Message-State: AOJu0YwXE6G0waaohnsXihnhCwGPX2VyLOraOAIlGhnoyP/tGOz1vxMP wjzhSBXaZHTnqEwxXXkoA99iPc+wfAufJytFQ+PUVvpE73tW2430Ol2tnTRMRvBQuA== X-Gm-Gg: ATEYQzxyy/+ymauPf9QJgkidIjrQ6NCKAGXQaFWOkTqr1KWS5GYIkDDMgqZoq0lP4S6 v4ARuAheJIFZXfW3vlAVTiS8mFLb15LVLFN+H6g9tq2P1x23qhYUJsJAeqnEQHekHIXie/FYfkT RO9GEm3MgisLSWeSGKPTyGaKgu8NBXIMmsuNml8dRl0fsdZ/XMut3EsO9rlTX5Mgo84PsX1ErA8 SwQbIRpXjKZay7YtAOWP3wLbaLOnaGRduKH7WLOoMr7WJ3f6hNt8WKNPuBKT5L6TcRK5QiyIEiG JjMSrUL3PcODSdthcN2ofjT2lWMs/CUV1IHOjTHkpKkFbX/MXcgTl0vMHEsyz5aIQ5QonUiGPdL c8EfgW/wIeBIgPI9l4gCMFLqU8yhcHUVnFegppSbYT9ya9Ef6GDNKwDHvoXm5rSP8vzDmkvOd5I m0kxZBZbJcadWHg4E4xM1eNmrq0y0wONe/44FMVHROTOG8Aq41lmMmURoMQ7Pej+dkldPxvg== X-Received: by 2002:a05:6000:250a:b0:439:be3b:ddb6 with SMTP id ffacd0b85a97d-439f8441487mr11829204f8f.59.1773317770061; Thu, 12 Mar 2026 05:16:10 -0700 (PDT) Received: from starbook.localdomain ([212.105.129.204]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-439fe20c473sm8139874f8f.24.2026.03.12.05.16.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Mar 2026 05:16:09 -0700 (PDT) From: Sean Rhodes To: linux-mmc@vger.kernel.org, Ulf Hansson , Greg Kroah-Hartman Cc: Ricky Wu , Avri Altman , Binbin Zhou , Dan Carpenter , Jisheng Zhang , Nathan Chancellor , Arnd Bergmann , Huacai Chen , Ingo Molnar , Thomas Gleixner , linux-kernel@vger.kernel.org Subject: [PATCH v2 RESEND 6/6] rtsx_usb: avoid USB I/O in runtime autosuspend Date: Thu, 12 Mar 2026 12:15:59 +0000 Message-ID: <20260312121559.19197-7-sean@starlabs.systems> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260312121559.19197-1-sean@starlabs.systems> References: <20260305194052.5120-1-sean@starlabs.systems> <20260312121559.19197-1-sean@starlabs.systems> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The runtime autosuspend callback currently queries card status and clears OCP via USB register accesses. On some systems this can deadlock runtime PM and leave the USB device stuck in the "suspending" state. Avoid issuing USB commands from the runtime autosuspend callback. Instead, use the last cached card status (updated on successful status reads) and conservatively assume a card may be present until status is known. Signed-off-by: Sean Rhodes --- drivers/misc/cardreader/rtsx_usb.c | 11 +++++++---- include/linux/rtsx_usb.h | 3 +++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/drivers/misc/cardreader/rtsx_usb.c b/drivers/misc/cardreader/r= tsx_usb.c index 5d818b632788..63751797ee2b 100644 --- a/drivers/misc/cardreader/rtsx_usb.c +++ b/drivers/misc/cardreader/rtsx_usb.c @@ -336,6 +336,9 @@ int rtsx_usb_get_card_status(struct rtsx_ucr *ucr, u16 = *status) if (ret < 0) return ret; =20 + ucr->card_status_cache =3D *status; + ucr->card_status_valid =3D true; + return 0; } EXPORT_SYMBOL_GPL(rtsx_usb_get_card_status); @@ -743,16 +746,16 @@ static int rtsx_usb_suspend(struct usb_interface *int= f, pm_message_t message) =20 if (PMSG_IS_AUTO(message)) { if (mutex_trylock(&ucr->dev_mutex)) { - rtsx_usb_get_card_status(ucr, &val); + if (ucr->card_status_valid) + val =3D ucr->card_status_cache; + else + val =3D SD_CD | MS_CD; mutex_unlock(&ucr->dev_mutex); =20 /* Defer the autosuspend if card exists */ if (val & (SD_CD | MS_CD)) { device_for_each_child(&intf->dev, NULL, rtsx_usb_resume_child); return -EAGAIN; - } else { - /* if the card does not exists, clear OCP status */ - rtsx_usb_write_register(ucr, OCPCTL, MS_OCP_CLEAR, MS_OCP_CLEAR); } } else { /* There is an ongoing operation*/ diff --git a/include/linux/rtsx_usb.h b/include/linux/rtsx_usb.h index 276b509c03e3..3188f6616729 100644 --- a/include/linux/rtsx_usb.h +++ b/include/linux/rtsx_usb.h @@ -59,6 +59,9 @@ struct rtsx_ucr { struct usb_interface *pusb_intf; struct usb_sg_request current_sg; =20 + u16 card_status_cache; + bool card_status_valid; + struct timer_list sg_timer; struct mutex dev_mutex; }; --=20 2.51.0