]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
PCI/bwctrl: Disable BW controller on Intel P45 using a quirk
authorIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Fri, 16 Jan 2026 13:15:12 +0000 (15:15 +0200)
committerSasha Levin <sashal@kernel.org>
Wed, 4 Mar 2026 12:20:33 +0000 (07:20 -0500)
[ Upstream commit 46a9f70e93ef73860d1dbbec75ef840031f8f30a ]

The commit 665745f27487 ("PCI/bwctrl: Re-add BW notification portdrv as
PCIe BW controller") was found to lead to a boot hang on a Intel P45
system. Testing without setting Link Bandwidth Management Interrupt Enable
(LBMIE) and Link Autonomous Bandwidth Interrupt Enable (LABIE) (PCIe r7.0,
sec 7.5.3.7) in bwctrl allowed system to come up.

P45 is a very old chipset and supports only up to gen2 PCIe, so not having
bwctrl does not seem a huge deficiency.

Add no_bw_notif in struct pci_dev and quirk Intel P45 Root Port with it.

Reported-by: Adam Stylinski <kungfujesus06@gmail.com>
Link: https://lore.kernel.org/linux-pci/aUCt1tHhm_-XIVvi@eggsbenedict/
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Tested-by: Adam Stylinski <kungfujesus06@gmail.com>
Link: https://patch.msgid.link/20260116131513.2359-1-ilpo.jarvinen@linux.intel.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/pci/pcie/bwctrl.c
drivers/pci/quirks.c
include/linux/pci.h

index 36f939f23d34e8a3b25a2d1b9059e015f298ca94..4ae92c9f912a8b2d57ccfa60a16e2cae131ba757 100644 (file)
@@ -250,6 +250,9 @@ static int pcie_bwnotif_probe(struct pcie_device *srv)
        struct pci_dev *port = srv->port;
        int ret;
 
+       if (port->no_bw_notif)
+               return -ENODEV;
+
        /* Can happen if we run out of bus numbers during enumeration. */
        if (!port->subordinate)
                return -ENODEV;
index 90676cb2fd10b3e923baee6d08c29f453e85bc3f..fd86f72f54aefc96e523002376b937632a6d98f7 100644 (file)
@@ -1359,6 +1359,16 @@ static void quirk_transparent_bridge(struct pci_dev *dev)
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL,  PCI_DEVICE_ID_INTEL_82380FB,    quirk_transparent_bridge);
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_TOSHIBA,        0x605,  quirk_transparent_bridge);
 
+/*
+ * Enabling Link Bandwidth Management Interrupts (BW notifications) can cause
+ * boot hangs on P45.
+ */
+static void quirk_p45_bw_notifications(struct pci_dev *dev)
+{
+       dev->no_bw_notif = 1;
+}
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e21, quirk_p45_bw_notifications);
+
 /*
  * Common misconfiguration of the MediaGX/Geode PCI master that will reduce
  * PCI bandwidth from 70MB/s to 25MB/s.  See the GXM/GXLV/GX1 datasheets
index b5cc0c2b99065d4a1ee4581275362e79726a2145..e958ff7443356923f8a024c6558b6521e73f1ed3 100644 (file)
@@ -406,6 +406,7 @@ struct pci_dev {
                                                      user sysfs */
        unsigned int    clear_retrain_link:1;   /* Need to clear Retrain Link
                                                   bit manually */
+       unsigned int    no_bw_notif:1;  /* BW notifications may cause issues */
        unsigned int    d3hot_delay;    /* D3hot->D0 transition time in ms */
        unsigned int    d3cold_delay;   /* D3cold->D0 transition time in ms */