Re: [PATCH v2] pci: quirks: Disable native PCIe hotplug on MSI Claw A8 root bridge

From: Lukas Wunner

Date: Wed Aug 12 2026 - 14:25:21 EST


On Tue, Aug 11, 2026 at 07:19:12AM +0200, Lukas Wunner wrote:
> On Mon, Aug 10, 2026 at 01:57:58PM -0700, Derek John Clark wrote:
> > I suppose that is true, but in that case we still wouldn't be able to
> > use it as the root fs since it gets removed/re-added during a suspend.
> > Would the quirk I submitted not have this compromise?
>
> Okay I wasn't sure that using the MMC card as root filesystem
> is even possible on this product. If that's a potential use case,
> it needs a separate fix. I'll come up with a proposal for that one
> as well.

Here's my proposal for allowing root on an MMC card.

Both this and the other patch I just sent (or something like it)
need to be submitted upstream. The other one is necessary so others
don't see a lockup when disconnecting e.g. a Thunderbolt-attached
card reader during system sleep.

But either one of the patches should make the issue go away on the
MSI Claw, so each patch needs to be tested by itself, without applying
the other one as well. Thanks!

-- >8 --

diff --git a/arch/x86/pci/fixup.c b/arch/x86/pci/fixup.c
index b301c6c8df75..9da7ae0b2437 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 */