From nobody Thu Apr 9 20:27:12 2026 Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.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 CACAD2E7185 for ; Thu, 5 Mar 2026 19:40:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772739658; cv=none; b=cZOsOxW+GejBHvv56obxmb3Y8FF1XOZDoBm73yKcF1QX4Mw7wCw/aEGazow5RJcEW6ZyBChGjWhCvnsEEHGIQkJ6Kd+1AkPALnMx4htf0szVFaMK1Yd+bm2TASdOXGIpOk42q4+uIAsMPpfgd1Jl6Paai/yxtCM6imygmGL1IB0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772739658; c=relaxed/simple; bh=q7K+v3piZJcrosJPTRdRPWUfVCCMq202FgtLyEjDs48=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XVvu1m+4Y3ZyKlYMYqL+L6+L8mgWmYSkN+IVHY2ghEnsvd5Xv24/2MCHb12xUE7irJ0aSeQ1jPzZcxNh0v5IbqLjPEEyZwp6tVWXXZPJD/evhs+wkshrxdbLKgI5nx6g+OOqQcRMXqBmdLXQu571ByQ/3aI3oT0ksr2e3tR8hq4= 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=pfhiXIq3; arc=none smtp.client-ip=209.85.128.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="pfhiXIq3" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-48375f1defeso63664025e9.0 for ; Thu, 05 Mar 2026 11:40:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=starlabs-systems.20230601.gappssmtp.com; s=20230601; t=1772739655; x=1773344455; 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=pfhiXIq3nAWzGUbYE3clcn08V6DXlp25FuGdXfFAA61qibpPF3K6MsB7G9JdxJlabR 2TsJIFJFDOi5BnaZNRwSnMGadvwrm4ZAaR/AoC97OkQWzdnCf9ZuMZim3sNuFOCClAwO +KlwlsNsztvoFbs8UBdH4YZtCNVhm3bVTf6X7Z4sbrAh1Iq/IB30HpJSRvQm5NiMJ5qf uzggkG/w6gXKoTobLK5nlAWz4/CYVGcA5vFgneGK66WRkgus6sHB8PCqeALjavVWkNTu wPk1p3CTd9767WAh6aOLv/89H/bCaujAqi9UoAJcgO776y55Al8lBUUA7dEsHnFPEqEs cTLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772739655; x=1773344455; 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=fM0KbuCEhSX96Y4j32176ENi2ecSXQljrR2/2CT5ecqJEYMoIEP1vSufKK4c12klLu loFhifImyepfWrRFPjkVJXoil+YWAYnOQVFwdiWmzYppXVtGSjNhWUD/6Hqx7KhX/4mR rL8Q+ChiJN5kExi/YF5N2RTIAC1+xDrYLx5dtlpblTNqJ9+JfGt7BpxKY7wqaf8956AP ElwAsmQLYnI6ViMguhxOuoM5mZM9FLP9Q5EW2WuM4V9m2v4O7jyNpvsjB0HkDDSSB19S WlLbJosPDXDaXO3LCuuNGavNPZYyFutu0nafSYNWHsNCEYdTAAxPQuIMMvghmRv+rf6x bx8w== X-Forwarded-Encrypted: i=1; AJvYcCVrStiS6TJCHDGphNgGrFsWOpmhjbA0SP4xq5t/yi/XI9sdKk+Ff4goFAaWvKNeK9MMKjH4BujQQ7eFzms=@vger.kernel.org X-Gm-Message-State: AOJu0YwYMPh87vJF+cn8IZNaU3fMzlNGOBP2ciP72dqdNWq4X7K/s4kY 38/xwjbSCk5IRbTT08qY4Ctg29EvKv3nRqinGEaNqoUHMwNh/nJFKrf2dngynZ0kcA== X-Gm-Gg: ATEYQzxlWW3i+O546+gheW1EGGuZRd6cDVImBOgCrlLxIOwdfHSpTF+t0LET0mZzHtT gzM9fSmGEcmWxaFm2z3XtG2r/f5C5PPn5etXcXj+yIN2mx43Z27ETBDCRBdrBCld1JqkRgMU4ZU eHyrgTmZ1m6b4UDwT8sSKQW8JPCpnh7Qe7tlm/ybYIl4SdUPb8nk0g/rGOZbbTLccqHrgkesXbx gFqENrPOU45IH4pT8b8/T/lcmnyHD6zqR7XnmXtykhwNr+gycQ9o5kKFaJPbNjvZOg/W29OddF3 zrGOI4NnXuOl5AHjJWwLP9G+/HK1DGdQ9Muun4Ql+EQ3jND4gMP73HGS35iDLnzNS6u0zWkk+Nn 7ewaTLg+NaEPq5K1HsPPDeTur73h5HLg7OF8qiQUnPuHQIQBDUSydGXFxMgJUT8GW94qUXXV5bu 7SthyXzePY8+L6uIMIt7hwj/OHXywomuulT0aAqWSwSRGaq12qfzb/kf0aHCdD6w== X-Received: by 2002:a05:600c:5490:b0:480:4a90:1af2 with SMTP id 5b1f17b1804b1-48523610816mr9841645e9.35.1772739655147; Thu, 05 Mar 2026 11:40:55 -0800 (PST) Received: from starbook ([217.155.46.38]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-485246fd127sm3265e9.6.2026.03.05.11.40.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Mar 2026 11:40:54 -0800 (PST) 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 1/6] mmc: rtsx_usb_sdmmc: avoid false card-detect on tray readers Date: Thu, 5 Mar 2026 19:40:47 +0000 Message-ID: <20260305194052.5120-2-sean@starlabs.systems> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260305194052.5120-1-sean@starlabs.systems> References: <1ca7b488a11e03b3f107f1829a40cf2c92c7d5fd.1771533586.git.sean@starlabs.systems> <20260305194052.5120-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 Thu Apr 9 20:27:12 2026 Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) (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 BC1A631F999 for ; Thu, 5 Mar 2026 19:40:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772739659; cv=none; b=K4PZlT3C9oS2FSZXuLq9gJvMxtcCKkY/bHUFmLJIOOvrBhz6zeN+nEURwbPnjdCN2d5boMYffA9eiCAKdIGvHQ2NA8s6VoDAFxvDLeaAwQ0EyG5nA1FNE5HzIU3VmKDpCoYdV+4ajobItPYAxlSifG7te7weZ+1m9rc9jH/sfxg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772739659; c=relaxed/simple; bh=AbncytGo/OWfyaXKOnMZkV2SkbCa9h8pOQP7KxGY75g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bFkFAcsLzgTMyZAzQY2YLNqI1A1ZUJlUdytVELJn0nm93H2YzueJQKfTDGk4zV/DhcLmFk85UDHtiN94zCMcq4fDL//t5ZPlrToTSOQG6PTT9VVPFthmXXA/WOO+JxYcipuIVnaVZKItqfRQtUnFzdEzOMEcnHoNOOpDUWCVnq0= 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=LemOkAvk; arc=none smtp.client-ip=209.85.128.53 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="LemOkAvk" Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-48371bb515eso125212245e9.1 for ; Thu, 05 Mar 2026 11:40:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=starlabs-systems.20230601.gappssmtp.com; s=20230601; t=1772739656; x=1773344456; 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=LemOkAvk6gWs/d3s08Hyng5pT90vv7aihrLGxfVoAEEQLZ9SsNjWDmq+C4WK6i1Q1n Xx/epNag61mwmoPFKxxr3GvSY6zu1qHoXKnVJ5NJGvSJALjBDoAM+Np/EadGKZjYyl98 EAlJkB4SnM+WKVbUz7ehlrojUd5CVDr0r5jSLhHdL8yaM5KqrzQDjd5Q++fuBEDVjAG2 1UW60DSSVYTZfAElQTfaVYLYXDjrc8FfaVr3ZmM/BTvZHo5DSqZ6+QQ2ry5cgGWR0lB3 YYsJMa9hkymFN4KQXpzw8iCahQt0wsQUmsQkfebuAPnMrducfMVjcMBsqtHDDAgrIcUx NTEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772739656; x=1773344456; 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=EXcjpGooZHYMAO0AJcGVL2TIfuwX5oT5zUmef7xaZIEZw1SnEZtDqFjuL9L4uW51ZB iltU+oKyUDKGhLW18L+/rqND8GQGu3BWj6J5Qt+ayK14SwPzipma/qq8z94KvqbU1LAQ gu2B+xDJFfknhQXYaFZb/PiNmhrtz8JFQUDjkp2DKVxencDNJnLW4zYJ62fU99NtOeQw fcTGs7vxmQIedDaiMGWM2x++fPRiu9FJmVRK/Vt1awQyHMajl9BDhhtRFX0K0wwpKgwJ UlKbpjaLoQJsZTPtiHCzXQ3DUEGHzScvcgU36uCv8hPGjznD3OAoNBGDrxbS2pMuT5VL HIpQ== X-Forwarded-Encrypted: i=1; AJvYcCXgUxXnvtMZrW8DKOO/OzoAbDgRzexqLCO6JkmN84w3B/8Nw7Pv9fNAcKOowI5XZU93LPV9/B5xtMrN034=@vger.kernel.org X-Gm-Message-State: AOJu0YxTv8s5FIbiNEddUzTmuBR/gV8GOiOZwmWopK8k3bxfks/6+Qje gF3xIQOFA2xEVha91jeuVUoC3YEGCjCXyqSKQN2rXE3UYGTVq7xgqoY7O+c3uDnkSQ== X-Gm-Gg: ATEYQzwWBCoXiRsDE3Og6oDVCHiyAggfd4fDO5Kw6PucGtGg6EKEZuozIdaxseVK84K 2/eM6Cy46zIOsPQI6nezOUpkdsms04nJA2JC5VES5O7KgO61p63UuQUcVrcaEc6QVtPKbTh/1mb lr/QsFg/59QvDOFkzkTRodzwCyK2BvJz8FBXcNXooh1gYG1ofIUkiMEUtm6NH6q2czgm21ZsQxl qPwrNoj7WIEBQ+msI31XcEPqVQtkK+hQL8uFsqh0TEE1bOWlBZFdn2Fn1pSkFLZ2HFYMeRGH0T+ EZeS5XJQE45QKixbZbcE5DVmPWzfRpP2NHVP/WFlEScr2LjJeY/0wT2mXWDukg93wQDgBDEkxc7 IEniGryfHhQH0Abjy/y5/Spl1JNavoIvwsa5B6zoSuuCEn6FwoHdZhGLUOfGECqx7oiuZrIOHcz M04mflVPf6aAN9ZWkWkqH4sMmSAgQZ6fy6AYZUQJnoCoPEPs+6T7o= X-Received: by 2002:a05:600c:3510:b0:483:badb:6191 with SMTP id 5b1f17b1804b1-485235b42ebmr10938365e9.8.1772739656215; Thu, 05 Mar 2026 11:40:56 -0800 (PST) Received: from starbook ([217.155.46.38]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-485246fd127sm3265e9.6.2026.03.05.11.40.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Mar 2026 11:40:55 -0800 (PST) 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 2/6] mmc: rtsx_usb_sdmmc: start card power-up at 3.3V Date: Thu, 5 Mar 2026 19:40:48 +0000 Message-ID: <20260305194052.5120-3-sean@starlabs.systems> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260305194052.5120-1-sean@starlabs.systems> References: <1ca7b488a11e03b3f107f1829a40cf2c92c7d5fd.1771533586.git.sean@starlabs.systems> <20260305194052.5120-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 Thu Apr 9 20:27:12 2026 Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) (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 D0A343DFC7F for ; Thu, 5 Mar 2026 19:40:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772739660; cv=none; b=VO2qHaAMftXxu+fnz1wf+jVq0VQXzpmOaz7TKqnGTp+P6oSTsAbzlA6EI5BRvoKhhCbZd8vHs5UY7+GmWXX5DOKiR311cjOszeptR5uhJIHLY0phZUP/25K8VLzicN4/G9WFW08yew9xjKEOPpGCAJ0YCDQ2/vpuxatIDMTh0s4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772739660; c=relaxed/simple; bh=N6Q3DV9Hf2gd5Ew9bki/uNf8ROrb8Qv6zbSptgVxae4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=h4dqur+tqUPw8Pe+AVUNbU/c18ejZEzE8mzc1yH76JoF5PM++MV71Azmkv0C9J051MaXvJZ+d81I+0wJCIHaFZ2fobD1aIAXW/od/kOJVVE+hUuwpHbPOhjx27WobqBa9FEgahe2+TQCc7X9cDK0A74bkZXstFYtC14IZ/xuTkw= 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=OLNkcY7d; arc=none smtp.client-ip=209.85.128.42 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="OLNkcY7d" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-4837f27cf2dso77831525e9.2 for ; Thu, 05 Mar 2026 11:40:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=starlabs-systems.20230601.gappssmtp.com; s=20230601; t=1772739657; x=1773344457; 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=OLNkcY7dNIfTMHaTtJ0CEy59Sqc7iyPvfJGjfhhHc5jDT5ZBQOirzzhvrWaZpV3B0N kxyNKxH/W4RIrqd4CyVnZB6zFgnUyhzF+EP8YCaOwIj6UnGRJF4tHI/G4F6k9klNbaC+ 5yp2gR/r+RSRJGEP68GfupeYu7jglsEwczQ1t6qa4F38GFSV6MUABIpf7zKZIZZGE3yz HXPttSOHLcZAd1Cos7+irjTGpBfCydORMQyWZ7J1WKlBlzXLMHkU5mgVn4Jm59O1JlVq MTGxcmxWeahRQ08WJOSEEF5zEV15nJdPIEM30nx92nIwPRGndQMEbYKgNReN+hRaJvCe CyzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772739657; x=1773344457; 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=if9P2qGpYzZxd7/yW2JWm0mevuYttKW6u4nmKROI/BE4qRtpLpq1/mEJMrx8Br4d/J 9BU+aibRRLvCP0hRi3UdeY5tPHRb0aC+oAOEVXvBdhWOF/pN/Ln+FdIYcHhqruJpB9gU XBwfipMblR1fHxD68Scq58+WxC+nNulehK69tDDrva8YyPq2cwa4Lx4G/PClO8qDQvDF FJHxkE8XflIKIfgaKrWg2W0aclW+W4WsFsxLysUDe0QeC4CFQ6D+4Than0U7AteP7LBu H87udFJezOhtXrNDJXOSUo4q2AWRwL1FbWbTAxA0v+I8lSoYW6KAmmkeAmWk0f60ZGX2 cmLQ== X-Forwarded-Encrypted: i=1; AJvYcCWjGFyKahGwG3MtaQP10lZXW257cJTzaaY3g8oalMa6xXH/aG8eJVxm9UCh1c0neAvKs5VDnWcL2R51LTI=@vger.kernel.org X-Gm-Message-State: AOJu0Yx8miuxkIDLWyGiBjTNJm+ezrQjjbBJ3uv/SD5/EYi5aKe8Fxnk vS0SEyCQzvXXONa9orwvA+EQED7E79Pb5vPk0uvUsJonvplN5xe6zBWCbX6pyA+GIw== X-Gm-Gg: ATEYQzwkNDBPSB56d+aDW18W2aSmEp3SIjIp7zj58BA1wzmcBlFbPw2d9RKU2uNasTk El08hOChxTCLi2qwpkLUB3cZoHpx81ilh4P2yqEyfgEwfYRagpBJeApVXv3NRSXRVqDWxF4KAvN /oqROVhNerq4FVLrSxbRgsPRLdkgsNNd9Cq4dJhS36FLT91qqIgyWrMSs08jTyeCXDEvGBnJMbj z4QsvWp7iXKoKHvRWD9UUw+ycPnY6JcgDouJa7Ca9tbvotZtkW1uqIrJqbYy4G10C0kJoXjwLaA NUJjR/I++ViAw3x+yxslYoaVrz34f0TOAQQW/9pLY9T9FaZWjeBFloc6ppBVua62hJxcNX8bcZI Hv4kPqffqw7zz+jG46jH9VHTK0UpEqdERYuJfXhxSeH4yEauFbteOdoza9E96dW+K5TKmzqj0B/ Ye5rzE4id3B9ReTwDgAKGb5Jrw2p0rIvWTftlbGcaMSjqIaVgvp+8= X-Received: by 2002:a05:600c:8b67:b0:480:2521:4d92 with SMTP id 5b1f17b1804b1-4851989ca05mr122090905e9.24.1772739657211; Thu, 05 Mar 2026 11:40:57 -0800 (PST) Received: from starbook ([217.155.46.38]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-485246fd127sm3265e9.6.2026.03.05.11.40.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Mar 2026 11:40:56 -0800 (PST) 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 3/6] mmc: rtsx_usb_sdmmc: advertise UHS SDR104 and DDR50 Date: Thu, 5 Mar 2026 19:40:49 +0000 Message-ID: <20260305194052.5120-4-sean@starlabs.systems> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260305194052.5120-1-sean@starlabs.systems> References: <1ca7b488a11e03b3f107f1829a40cf2c92c7d5fd.1771533586.git.sean@starlabs.systems> <20260305194052.5120-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 Thu Apr 9 20:27:12 2026 Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) (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 39EFA3DEAE6 for ; Thu, 5 Mar 2026 19:41:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772739662; cv=none; b=dTWwxCJ023Vu1UvGxtWqARsaJIPEeVcjPUen20Xjof59lt20ld3+EPxKAjjx1ivxApOsi3Sdq39W6VMzfSpi+l+vxw64UnOwf1sMpD6pA3kQtYbUo62ZZkUHhJX8TXhWrMK9CnjW1n7B4KYQqX6w8WF793vmbUtyIU5bhcOz3jI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772739662; c=relaxed/simple; bh=/QGGg48sn9sKA1F8TWZlfBuzKMx3jTk/2UYyPAjLJh4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=a9SHWq007NpzDsnnLNlX8vq+ruZ49WUJ+Bwat7ucDh/E8MaiDlReD5E8JX94UD1XK+O/aIU8J/1IbOHafAxwgABVFr4wxKrc5zgc8EgRjkzNxC1Y9k+0QqQj13fP9n7rWmJ4LtwHTkHBiwP5taYvQln4e3/FPL/szjBqfgqeseg= 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=KwYKcoaF; arc=none smtp.client-ip=209.85.128.44 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="KwYKcoaF" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-4833115090dso86092155e9.3 for ; Thu, 05 Mar 2026 11:40:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=starlabs-systems.20230601.gappssmtp.com; s=20230601; t=1772739658; x=1773344458; 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=KwYKcoaFtp3Cc7lf2nPF2UwHPyq9mWXgRzRnDTMxFl65pW/1WC/JI35zssXlWKmPca xNISZnQFeVn5qzYImlYn406We5i8C0TCYSKblI/m6fHIDwytGn07cscaKJgPlrlVEqz4 VBUMjRa28JVhQpa4JchjiE/JV7zSfkWV3gxE8k7gY11maolJkZiDXkzwnhrHgehbjQ1G kX8OxUdwNgihNHL+sAxzrU7eGS5px87nd1CHwCXr4sz27Lp93/DbGzOZHK8OpVQzrhjP iObss4qH66Vq0/RGtoWmR9/0PIkyS0ejBPLqhGp2X/DO9skaNA/fiVXFSTV74PFuUb/O oY2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772739658; x=1773344458; 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=hmnCAWMT0S4BWmEo1avB7nHgzFlSqJnF1igpS9uwnyNa0X4IOKmUafgnLJ0CsefarY dTmCsfVja05R0JvA+xzMOoXFSQCOo5OwVRHqH+xX84MScYAIFWe2/hAZPSHWCQEqHPOF hUDWyOcZjIGoHxDbfTWI0Ek8zEFZbzBHGZE9Kqu3NyWPjaETAjltBLsotMBcn8CnHABT n767TUI8fU383kYuc+ShNII1Ep5/Y83cc3asn/QwvCLPGe6Tanx9kBofHXIWa0oB91vf sWUVQIZCQG4lEye0MrY7jg2Vv5qIGxrM82rOItdso9HK69hpQqFX5WAHPkWK0e38MkmU tFeQ== X-Forwarded-Encrypted: i=1; AJvYcCWEcDBxGsWTg3MzjWszHXiVQTKZV9vgdvAOfOxGjysslaDnt+1M/v9ofyJuzelPAzCsZirAaGaGYfOnWsE=@vger.kernel.org X-Gm-Message-State: AOJu0Yytc/yeZzL0BiCRC8iOn1px4afDVCjbtHWmSWPnNxGmFqOQKeFk Sp+IPK2ipF9hocqPec3G/IYf3JaAshU9LHYY31bH4hi7CXMTXLB188e98qa261MuKA== X-Gm-Gg: ATEYQzzfmoXbcadJ2uQjYVrvPDX2IG3G1XYzpEXtEiZInKwy+Ll5lLlv2QOB/XhomLl NBUol6j9wP0XwN2yqHp3es/BgMtdzfkN7MfB9vOBII9xmTr7IhQo7V/5DROhZO1KmQETyoNiINK deJC5nzY1ivORbqwI3FUCJUTezG/VBQM4xl7Gn2IVfm9YizTsQRfeOnp+610xBC1FauTlxGThUi banW/3P65Qldoilbkkg60VhG4b0POIPnwbfKkSEZu/u8F2BbmKlaBCeWTlecSVHSHexfPVDOp4Z esxXSvmMCVIPOOZcDgr9aNceWfsQRKpwYcH2icl1bGC8wudYLoGzWbrrziuHM5ahhY5t7eSkAyk NZgRgcJGoW91Hl3jNnpK99KAXYaacuRW+/njUX4LNv582SyoyVAoiBlXTKWfAdQPqXtXrnlSrCc 8GAPwZ9UqK0+BJ9TBf9R7QVICL3RVBJOUIicnpzSdf35qXkCpwFuM= X-Received: by 2002:a05:600c:1e8c:b0:483:79a6:e7e1 with SMTP id 5b1f17b1804b1-48523589b03mr12597475e9.7.1772739658401; Thu, 05 Mar 2026 11:40:58 -0800 (PST) Received: from starbook ([217.155.46.38]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-485246fd127sm3265e9.6.2026.03.05.11.40.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Mar 2026 11:40:57 -0800 (PST) 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 4/6] mmc: rtsx_usb_sdmmc: program SD30 mode for UHS SDR12/SDR25 Date: Thu, 5 Mar 2026 19:40:50 +0000 Message-ID: <20260305194052.5120-5-sean@starlabs.systems> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260305194052.5120-1-sean@starlabs.systems> References: <1ca7b488a11e03b3f107f1829a40cf2c92c7d5fd.1771533586.git.sean@starlabs.systems> <20260305194052.5120-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 Thu Apr 9 20:27:12 2026 Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) (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 288C53E3DA9 for ; Thu, 5 Mar 2026 19:41:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772739662; cv=none; b=e1OcjSlWcoUlYY6+sEjfM0JEFuN9UMNkkmqDVEUQWRIwmh3ySZ4y1J2aHVcnEySUZ7QBmPo52YM/Qq1YI+WjvPtjQ59t+Hn0XAbqdka5zKKegOOkh4ZTThOIFzpqr1t2GdbZVrUWPtLqwbAPigUxE6dzZzsCIiAcKnMZmOb6zOU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772739662; c=relaxed/simple; bh=L1iquWccV2yVTQCH11JwiafCcxb5GJJdUIRGsXkOSjI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SRiAiFIElON3ah7HEY0bp3fE0wAezKf63BhxVSuf1TWLJ3vyf9TP7Lg0SVBXU7dAb2zVSCFjkskn+Dd2g7FUTbJMipwasQodYIs8WTGZLL0UHIwjand1kJukjkqhwNaxCyCMWCqQje6qiBHpb2V3dm7H3Wf8ZpduORObX/AISPw= 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=jXYtEPPe; arc=none smtp.client-ip=209.85.128.53 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="jXYtEPPe" Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-483703e4b08so82199675e9.1 for ; Thu, 05 Mar 2026 11:41:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=starlabs-systems.20230601.gappssmtp.com; s=20230601; t=1772739659; x=1773344459; 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=jXYtEPPez1gPVsGzjsX99d9bL0WntryP+8R/jbVHsPajMBiV6qWfB3XXPkUaUAC1YB R32XRbK1LzbTOQtWFlU44b6Sb7i2I+AEChL/uWzI4w7Bmx8vifP0KwOqNVnNZ7TIpnJL 0HkkLkApWCOS+LO6zGlbouMEmAt5Usp6oST4xxSjG85bF0HdODwuQg2HcXiCpLmq0tOq Y1H9GJ2U89YKzicNPOjlLUebtymdhfN02sgfJWsPE/jGdtMhJs4P7BtRgZaQOHOWWWFa Tprsi2p/CIQSt/Louiti2ctIcwLlrAjWkLBmbitCrWklpAb4JTHvf0zGXgP8etfL2G+7 4avA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772739659; x=1773344459; 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=HnjI99i+UfeoQAUD5HAjKL+h6MiHtSnAVRsm5pE+HvnbueAwejDnLTMUyXZNWNoI0x MkdM4iXEdgdCjVW5Ub/eEMj/FcwIrTRRKOX54kOCldqB3QKaiBAm36IO6Ewp0LfV5z/G i2dZJOrxWweeR8lBjHJreVX1exXneoKs+Xnb8BaGs9tnSGwFjb3I4RALhuIFl/iMItu7 yrtwVTN0X1aLINW5SXu+Iz4/uYY0UuaIoFRYAxlcUGyCqVQgV9+ryu3axZugbgS/epxW 9OnO9RAoqFkbElel4AJksHpSYj3ksFR+63roCClaInWnFAk4dwhwGW3TsD5iozWmL3vJ eUog== X-Forwarded-Encrypted: i=1; AJvYcCVpeQ9U2rmj50wLCb+Na9tMItZDyVZmmw09qb81tPBNVWRsRqpmwbcCT1baK4OEof3VOnnHOCF8xYSgqT8=@vger.kernel.org X-Gm-Message-State: AOJu0YyHDffLg4SHdlHjI0jUmpu87OJ4NaMoMYH1c6LRk3cu3i/c97iw q43t3SS8qUu0tJ4aXcRSjI8RN9Yd8ggJ7nWj8sly1GwZ8qcTQhuy7s9ZDLkZ9tiIjg== X-Gm-Gg: ATEYQzxLZ1NcWKtemyV8V7NSEraVaLF+ubxyjDEcxKLuT1+3YgF+KTkkxll4JUaM+EW Hz6gK9LCmLFvpUAJ7C1iKsX2P/h9ryETlUdjRmoBEKQAAv2Yh0wAm6kaYz6xuM0UTyz1UBsdHkB ZlIZYu1zWOt6wkA7JJRk12cQykcSsiKZfYpmxm9CD+YikYiZK8Ii1UPVLp8DGgI6tLrjAe0pfOt rh0vyAZuuscWtL8ec8gkvGc7L0YrLSfPkmt14glWM9Kdi9cawGZ1/7rykl/2fHjEjLumifroAKY vnOlvfE/sHm2ayCBgQbfm+EUVIrwbE4PlXrQ5Tp9VSsAJ3gd4IEWNj5MpIqS9rTm7LR8Dw3LlI9 MZlpSUZeFsNdeeLu2t88Sz9Uf65KbK8+xME0sek/cVF/o3FhVgJw+Kl2GivJI6eb9HruvEOlIPS IZW2TlN2bUnUWke/K+pF5UmzddhMPFyKtaPmUuvh+eQXgX0I6TEDE= X-Received: by 2002:a05:600c:870c:b0:483:a352:b4e4 with SMTP id 5b1f17b1804b1-4851ee81a6amr60300225e9.6.1772739659513; Thu, 05 Mar 2026 11:40:59 -0800 (PST) Received: from starbook ([217.155.46.38]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-485246fd127sm3265e9.6.2026.03.05.11.40.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Mar 2026 11:40:58 -0800 (PST) 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 5/6] rtsx_usb: hold runtime PM during transfers Date: Thu, 5 Mar 2026 19:40:51 +0000 Message-ID: <20260305194052.5120-6-sean@starlabs.systems> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260305194052.5120-1-sean@starlabs.systems> References: <1ca7b488a11e03b3f107f1829a40cf2c92c7d5fd.1771533586.git.sean@starlabs.systems> <20260305194052.5120-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 Thu Apr 9 20:27:12 2026 Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) (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 366893EB7E3 for ; Thu, 5 Mar 2026 19:41:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772739666; cv=none; b=LH3Mx+5p5vusdX7oYUY0SVEyiYyOoPzs56yGJqwyiuiSENpAbdgkzlMz7NXzgjTaK4kRI6/QuFz3ZIF98fXGEsbdo12AGepEXF/YhNIlIqhI2XaVdNQwDvM0bIcjb3KkfRTP+YyOH44Qfsq4dZ/8pO2LY5vOZkgTOv5R8X76JXc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772739666; c=relaxed/simple; bh=QfcpGq77fLYNDCobaNjjIeOj2imphrNCAcezXXgBA2U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=L+Ob0xf+wIHzrt0os51VFJSBKtrj96Pt2uHgQbZrcnS3PjEOt/UKTI+UnRasEcnBm7N5ycZIXJE0hLjLrStj0vWAwC1I3tiYOEUgDekHBZbDcXeY0YdafbDr5S3g1P6FMi3spHF5D9z2jaihPloGrkGAoKaVBm8bMMzdKvUX1IQ= 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=yY0GtH/B; arc=none smtp.client-ip=209.85.128.42 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="yY0GtH/B" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-4806ce0f97bso74089275e9.0 for ; Thu, 05 Mar 2026 11:41:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=starlabs-systems.20230601.gappssmtp.com; s=20230601; t=1772739661; x=1773344461; 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=yY0GtH/B0csIqZprwtA9RNssxYYXEpWLCERb4a3elQygSvahpMbauPpEKyksnlNSHM yhovoWw6MlmbJb01FgUIAkIFzGY3W7iErvYN5hUQl+T/tYvIf5kr34f2du4a4wh6YEwq epf9uTpLUzbQ9YAVYo3VHlU7EwjLCR5VSi59laySIGZjZEJ+OXuc14354GyGr1Y35ERd sBqBhdNhh0Kst2DkX7ipDXvnhcdfE+OGTfgd5HEoVQAdR1G5VMt/wufkoSgi5B6tYiqW Mpp458XVxcnA1FDlTNfeeV0iE0sy+Su4QFTZldr+yPCHe0UWgYFQ3Rf8n1hBh4UO5+Px +Cdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772739661; x=1773344461; 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=azQKblilXIr+jWhqPqIUpSv/5PZeCyzjTSKXdu23Fb1qVW/Sut15JOQAYI9fCVgQuQ fsKyvaEGZcsR2CJG9+5qKlHZBFMGm7eKDZELBZ/p5Di+1QB8yLvo+LYYiEabwOwPQpFj c8Gkl+IvrSL2RbBl/VI+KXdhegGd7BQUOZBCp674BVYfxvT5WAHkrwIaWdXZGsEdwbrG UPxwKYfeqgFPtSdwFPclRIT9Nw4QpQBq8r/z7vArvJuvNu0ptGQsbvK9evz4/1h066q8 0GWdFNDUplO+0ZeaFYHjffbdnaO392y29ZTDP9t+UvIQr6q2tV+MqCvARz6S1nzq7Uwi gJog== X-Forwarded-Encrypted: i=1; AJvYcCVsnqtlK9ddbKI3UxLzNJwtievIkvS2d803NbiZm7fgaVZ6O1DnB0htpstmwQkITm3BVKGZMaXyEdQo/xE=@vger.kernel.org X-Gm-Message-State: AOJu0YzfvfCGEUYFlD1h5VK02jB3ICm0OI2oFJb8QNffgOlDOy16SAzE e+TMukHvMfidlh5sCLrAWlZjga6dLrAHFCVUErgA+Bf2oyVQm1vrjMZlbjzxIA7X4w== X-Gm-Gg: ATEYQzxdxaK95NpvN3cUfT1wH00X8nHX2GnPlbStwzaHkmYMs77T0QlmKPyFOn4KyP9 XpIh9skdFR7TzP3QDmr97eCG8knhuY7b+pGa/mEI0cLA2mluyNh0MWMRMOKGpEgKXwjWL+GAJCO KchTj1kImfDuFQndouQBGtICSkRWsMgu+oCuIEU3z7rxojYNB09G0mceQMdmoufWsnO9aDw3ubX q6itI5YIqb3oyvcshH6JCmwOy62LLqBWchjWqgMsoDpis05THVkILljL4lKyBYE5pFmzvOnI/0z KtVVPwVFfMh3cZ+SLf0WxkXY/bN7tMc+2Yc5z5PcKZucKIDg+73AkN4cz33qUZGwfIT6Y24Fnc9 AXsd0yTvGCSgrdNPHRPHolE/ycvMyPm172Gr+mPbApJqEA3IrWeUIj7jeeZCJeC/LnsEa57YyrB Z9zKmx6aYLTP6o3/K8wQTEJaf21F0Y27rb3HWywDxGZg0ryEQ2WLU= X-Received: by 2002:a05:600c:1550:b0:47e:e970:b4e4 with SMTP id 5b1f17b1804b1-485235fb068mr10533765e9.29.1772739660509; Thu, 05 Mar 2026 11:41:00 -0800 (PST) Received: from starbook ([217.155.46.38]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-485246fd127sm3265e9.6.2026.03.05.11.40.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Mar 2026 11:41:00 -0800 (PST) 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 6/6] rtsx_usb: avoid USB I/O in runtime autosuspend Date: Thu, 5 Mar 2026 19:40:52 +0000 Message-ID: <20260305194052.5120-7-sean@starlabs.systems> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260305194052.5120-1-sean@starlabs.systems> References: <1ca7b488a11e03b3f107f1829a40cf2c92c7d5fd.1771533586.git.sean@starlabs.systems> <20260305194052.5120-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