Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

mmc: rtsx_pci: add quirk to disable MMC_CAP_AGGRESSIVE_PM for RTS525A

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-708d4a52974a@linux.dev/
Signed-off-by: Matthew Schwartz <matthew.schwartz@linux.dev>
Link: https://patch.msgid.link/20260103204226.71752-1-matthew.schwartz@linux.dev
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Matthew Schwartz and committed by
Greg Kroah-Hartman
5f0bf80c ed1613fc

+6 -2
+3
drivers/misc/cardreader/rts5249.c
··· 78 78 if (CHK_PCI_PID(pcr, PID_524A) || CHK_PCI_PID(pcr, PID_525A)) 79 79 pcr->rtd3_en = rtsx_reg_to_rtd3_uhsii(reg); 80 80 81 + if (CHK_PCI_PID(pcr, PID_525A)) 82 + pcr->extra_caps |= EXTRA_CAPS_NO_AGGRESSIVE_PM; 83 + 81 84 if (rtsx_check_mmc_support(reg)) 82 85 pcr->extra_caps |= EXTRA_CAPS_NO_MMC; 83 86 pcr->sd30_drive_sel_3v3 = rtsx_reg_to_sd30_drive_sel_3v3(reg);
+2 -2
drivers/mmc/host/rtsx_pci_sdmmc.c
··· 1456 1456 mmc->caps = MMC_CAP_4_BIT_DATA | MMC_CAP_SD_HIGHSPEED | 1457 1457 MMC_CAP_MMC_HIGHSPEED | MMC_CAP_BUS_WIDTH_TEST | 1458 1458 MMC_CAP_UHS_SDR12 | MMC_CAP_UHS_SDR25; 1459 - if (pcr->rtd3_en) 1460 - mmc->caps = mmc->caps | MMC_CAP_AGGRESSIVE_PM; 1459 + if (pcr->rtd3_en && !(pcr->extra_caps & EXTRA_CAPS_NO_AGGRESSIVE_PM)) 1460 + mmc->caps |= MMC_CAP_AGGRESSIVE_PM; 1461 1461 mmc->caps2 = MMC_CAP2_NO_PRESCAN_POWERUP | MMC_CAP2_FULL_PWR_CYCLE | 1462 1462 MMC_CAP2_NO_SDIO; 1463 1463 mmc->max_current_330 = 400;
+1
include/linux/rtsx_pci.h
··· 1230 1230 #define EXTRA_CAPS_MMC_8BIT (1 << 5) 1231 1231 #define EXTRA_CAPS_NO_MMC (1 << 7) 1232 1232 #define EXTRA_CAPS_SD_EXPRESS (1 << 8) 1233 + #define EXTRA_CAPS_NO_AGGRESSIVE_PM (1 << 9) 1233 1234 u32 extra_caps; 1234 1235 1235 1236 #define IC_VER_A 0