Skip to content
/ linux Public

Commit fb10875

Browse files
ij-intelSasha Levin
authored andcommitted
PCI/bwctrl: Disable BW controller on Intel P45 using a quirk
[ Upstream commit 46a9f70 ] The commit 665745f ("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>
1 parent b8bd9fe commit fb10875

File tree

3 files changed

+14
-0
lines changed

3 files changed

+14
-0
lines changed

drivers/pci/pcie/bwctrl.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,9 @@ static int pcie_bwnotif_probe(struct pcie_device *srv)
250250
struct pci_dev *port = srv->port;
251251
int ret;
252252

253+
if (port->no_bw_notif)
254+
return -ENODEV;
255+
253256
/* Can happen if we run out of bus numbers during enumeration. */
254257
if (!port->subordinate)
255258
return -ENODEV;

drivers/pci/quirks.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1359,6 +1359,16 @@ static void quirk_transparent_bridge(struct pci_dev *dev)
13591359
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82380FB, quirk_transparent_bridge);
13601360
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_TOSHIBA, 0x605, quirk_transparent_bridge);
13611361

1362+
/*
1363+
* Enabling Link Bandwidth Management Interrupts (BW notifications) can cause
1364+
* boot hangs on P45.
1365+
*/
1366+
static void quirk_p45_bw_notifications(struct pci_dev *dev)
1367+
{
1368+
dev->no_bw_notif = 1;
1369+
}
1370+
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e21, quirk_p45_bw_notifications);
1371+
13621372
/*
13631373
* Common misconfiguration of the MediaGX/Geode PCI master that will reduce
13641374
* PCI bandwidth from 70MB/s to 25MB/s. See the GXM/GXLV/GX1 datasheets

include/linux/pci.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,7 @@ struct pci_dev {
406406
user sysfs */
407407
unsigned int clear_retrain_link:1; /* Need to clear Retrain Link
408408
bit manually */
409+
unsigned int no_bw_notif:1; /* BW notifications may cause issues */
409410
unsigned int d3hot_delay; /* D3hot->D0 transition time in ms */
410411
unsigned int d3cold_delay; /* D3cold->D0 transition time in ms */
411412

0 commit comments

Comments
 (0)