From nobody Sat Feb 7 18:15:57 2026 Received: from out-185.mta0.migadu.com (out-185.mta0.migadu.com [91.218.175.185]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2A172201113 for ; Sat, 3 Jan 2026 20:43:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.185 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767473007; cv=none; b=WT0wEVYaXPuVIV9N11I7dyW8BZ8q7tOQTdW7zm2oAP2fvR6R6uT7HhDiA9RAvNFoEtWrz9MbyENgsBux7fXBnuj0q7RmAmuI6SnaCxVi9kTUV0y1rmjAq7Mg6WKKglc/4KG0QpAGT8M1DM6AGva6m3f8/wsUKosIvOi5ZtzSqig= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767473007; c=relaxed/simple; bh=C6ZOWGhjLHBWNsEB+PRa4qKLbY4mQoJgPw6j/3YjgtU=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=kO9B55EyXwjmcuGfmHY464d3vnZsfGbYUo541Y8acjQHATLl7Beu4FbNLtDMwT4JJsX0MnVaNx5VKt+jUcB/NKOXhI8x+SH1X0RsG9Iq0KNbtY3DU8GVmhzjcXkt8GBGlvsUJnLMzQwhxD92fRJFozjPQfz65N8ys3yuryfDE1Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=T8sEh9re; arc=none smtp.client-ip=91.218.175.185 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="T8sEh9re" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1767472993; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=jwoYd2vDow/47fJS8TtJp3L4zqIzHNMYsl09ujbOUAk=; b=T8sEh9recliIHTCtOn9fW2Q2cOagD+dmEfAgpXX7Sf+Dbe1OFyFMd8RZfVdR8PIZjA5d/+ 5vu4u/fmi3QBTgCv82wHwbQD9URH+2MYe1s55Y2ve75S55KVLh1dmGbHmZQBn+KXSW+SE/ 1vZIhZdFDcfPq6A4SQKLixlDkwJc594= From: Matthew Schwartz To: Ulf Hansson , Arnd Bergmann , Ricky Wu , Greg Kroah-Hartman Cc: linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org, Matthew Schwartz Subject: [PATCH] mmc: rtsx_pci: add quirk to disable MMC_CAP_AGGRESSIVE_PM for RTS525A Date: Sat, 3 Jan 2026 12:42:26 -0800 Message-ID: <20260103204226.71752-1-matthew.schwartz@linux.dev> 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 X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" Using MMC_CAP_AGGRESSIVE_PM on RTS525A card readers causes game performance issues when the card reader comes back from idle into active use. This can be observed in Hades II when loading new sections of the game or menu after the card reader puts itself into idle, and presents as a 1-2 second hang. Add EXTRA_CAPS_NO_AGGRESSIVE_PM quirk to allow cardreader drivers to opt-out of aggressive PM, and set it for RTS525A. Closes: https://lore.kernel.org/linux-mmc/ff9a7c20-f465-4afa-bf29-708d4a529= 74a@linux.dev/ Signed-off-by: Matthew Schwartz --- drivers/misc/cardreader/rts5249.c | 3 +++ drivers/mmc/host/rtsx_pci_sdmmc.c | 4 ++-- include/linux/rtsx_pci.h | 1 + 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/misc/cardreader/rts5249.c b/drivers/misc/cardreader/rt= s5249.c index 38aefd8db452..87d576a03e68 100644 --- a/drivers/misc/cardreader/rts5249.c +++ b/drivers/misc/cardreader/rts5249.c @@ -78,6 +78,9 @@ static void rtsx_base_fetch_vendor_settings(struct rtsx_p= cr *pcr) if (CHK_PCI_PID(pcr, PID_524A) || CHK_PCI_PID(pcr, PID_525A)) pcr->rtd3_en =3D rtsx_reg_to_rtd3_uhsii(reg); =20 + if (CHK_PCI_PID(pcr, PID_525A)) + pcr->extra_caps |=3D EXTRA_CAPS_NO_AGGRESSIVE_PM; + if (rtsx_check_mmc_support(reg)) pcr->extra_caps |=3D EXTRA_CAPS_NO_MMC; pcr->sd30_drive_sel_3v3 =3D rtsx_reg_to_sd30_drive_sel_3v3(reg); diff --git a/drivers/mmc/host/rtsx_pci_sdmmc.c b/drivers/mmc/host/rtsx_pci_= sdmmc.c index dc2587ff8519..5d3599ee06bf 100644 --- a/drivers/mmc/host/rtsx_pci_sdmmc.c +++ b/drivers/mmc/host/rtsx_pci_sdmmc.c @@ -1456,8 +1456,8 @@ static void realtek_init_host(struct realtek_pci_sdmm= c *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; - if (pcr->rtd3_en) - mmc->caps =3D mmc->caps | MMC_CAP_AGGRESSIVE_PM; + if (pcr->rtd3_en && !(pcr->extra_caps & EXTRA_CAPS_NO_AGGRESSIVE_PM)) + mmc->caps |=3D MMC_CAP_AGGRESSIVE_PM; mmc->caps2 =3D MMC_CAP2_NO_PRESCAN_POWERUP | MMC_CAP2_FULL_PWR_CYCLE | MMC_CAP2_NO_SDIO; mmc->max_current_330 =3D 400; diff --git a/include/linux/rtsx_pci.h b/include/linux/rtsx_pci.h index 3c5689356004..f6122349c00e 100644 --- a/include/linux/rtsx_pci.h +++ b/include/linux/rtsx_pci.h @@ -1230,6 +1230,7 @@ struct rtsx_pcr { #define EXTRA_CAPS_MMC_8BIT (1 << 5) #define EXTRA_CAPS_NO_MMC (1 << 7) #define EXTRA_CAPS_SD_EXPRESS (1 << 8) +#define EXTRA_CAPS_NO_AGGRESSIVE_PM (1 << 9) u32 extra_caps; =20 #define IC_VER_A 0 --=20 2.52.0