* [PATCH] PCI: Add quirk for ID mutation of MSI Claw A8 cardreader
@ 2026-08-14 9:06 Lukas Wunner
2026-08-14 9:24 ` sashiko-bot
0 siblings, 1 reply; 2+ messages in thread
From: Lukas Wunner @ 2026-08-14 9:06 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: Derek J. Clark, Matthew Schwartz, Pierre-Loup A. Griffais,
linux-pci, x86
Derek reports a lockup on resume of the MSI Claw A8 if a card is inserted
into the onboard Realtek RTS525A cardreader. He has root-caused it to a
mutation of the cardreader's Subsystem Vendor and Device ID: Firmware
sets an MSI-specific ID on boot, but neglects to reset it on resume.
The ID thus changes to the generic Realtek Vendor and Device ID.
The firmware also incorrectly sets the Hot-Plug Capable bit on the Root
Port and the PCIe hotplug driver interprets the ID mutation as removal of
the cardreader during system sleep (see pciehp_device_replaced()).
The lockup is caused by the block layer being unaware of the hot-removal
and waiting indefinitely in sync_filesystem(). That is fixed with a
separate commit for the cardreader driver. However despite that other
commit, the cardreader is still hot-removed and re-enumerated the first
time the system is put to sleep. This is undesirable because it prevents
using an MMC card as root filesystem.
Avoid hot-removal of the cardreader by mutating the cached copy of the
Subsystem Vendor and Device ID. This needs to be done before going to
sleep, not afterwards, because pci_pm_resume_noirq() is executed top-down
across the hierarchy and hence a pci_fixup_resume_early quirk of the
cardreader would run after hot-removal at its parent Root Port.
In the unlikely event that a fixed firmware becomes available, the quirk
can either be reverted or constrained to specific BIOS versions by way of
a dmi_get_date() conditional.
Reported-by: Derek J. Clark <derekjohn.clark@gmail.com>
Tested-by: Derek J. Clark <derekjohn.clark@gmail.com>
Closes: https://lore.kernel.org/r/20260806214808.1202819-1-derekjohn.clark@gmail.com/
Link: https://github.com/ValveSoftware/SteamOS/issues/2473
Signed-off-by: Lukas Wunner <lukas@wunner.de>
Cc: stable@vger.kernel.org
Cc: Matthew Schwartz <matthew.schwartz@linux.dev>
---
arch/x86/pci/fixup.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/arch/x86/pci/fixup.c b/arch/x86/pci/fixup.c
index b301c6c..9da7ae0 100644
--- a/arch/x86/pci/fixup.c
+++ b/arch/x86/pci/fixup.c
@@ -1080,4 +1080,20 @@ static void quirk_tuxeo_rp_d3(struct pci_dev *pdev)
}
}
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, 0x1502, quirk_tuxeo_rp_d3);
+
+/*
+ * MSI Claw A8 firmware initializes the onboard Realtek RTS525A cardreader
+ * with an MSI-specific Subsystem Vendor and Device ID on boot, but neglects
+ * to re-initialize it on resume. Avoid hot-removal of the cardreader due to
+ * the spurious ID change.
+ */
+static void quirk_msi_claw_cardreader(struct pci_dev *pdev)
+{
+ if (pdev->subsystem_vendor == 0x1462 &&
+ pdev->subsystem_device == 0x14af) {
+ pdev->subsystem_vendor = pdev->vendor;
+ pdev->subsystem_device = pdev->device;
+ }
+}
+DECLARE_PCI_FIXUP_SUSPEND_LATE(PCI_VENDOR_ID_REALTEK, 0x525a, quirk_msi_claw_cardreader);
#endif /* CONFIG_SUSPEND */
--
2.53.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-08-14 9:24 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-14 9:06 [PATCH] PCI: Add quirk for ID mutation of MSI Claw A8 cardreader Lukas Wunner
2026-08-14 9:24 ` sashiko-bot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox