diff options
| author | Bjorn Helgaas <bhelgaas@google.com> | 2026-02-06 17:09:14 -0600 |
|---|---|---|
| committer | Bjorn Helgaas <bhelgaas@google.com> | 2026-02-06 17:09:14 -0600 |
| commit | 7ac2359cf1063de8f3d241aaa871b14a81999bc9 (patch) | |
| tree | f8261f7bb0181007ff797568e740e643b99f9ba1 | |
| parent | 88632421689766f394fe69513e5a4d7c31d36caa (diff) | |
| parent | 46a9f70e93ef73860d1dbbec75ef840031f8f30a (diff) | |
Merge branch 'pci/bwctrl'
- Disable bwctrl on Intel P45 to avoid a boot hang (Ilpo Järvinen)
* pci/bwctrl:
PCI/bwctrl: Disable BW controller on Intel P45 using a quirk
| -rw-r--r-- | drivers/pci/pcie/bwctrl.c | 3 | ||||
| -rw-r--r-- | drivers/pci/quirks.c | 10 | ||||
| -rw-r--r-- | include/linux/pci.h | 1 |
3 files changed, 14 insertions, 0 deletions
diff --git a/drivers/pci/pcie/bwctrl.c b/drivers/pci/pcie/bwctrl.c index 36f939f23d34..4ae92c9f912a 100644 --- a/drivers/pci/pcie/bwctrl.c +++ b/drivers/pci/pcie/bwctrl.c @@ -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; diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index b9c252aa6fe0..6ef42a2c4831 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c @@ -1360,6 +1360,16 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82380FB, quirk 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 * found at http://www.national.com/analog for info on what these bits do. diff --git a/include/linux/pci.h b/include/linux/pci.h index 864775651c6f..3a556cd749e3 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -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 */ |
