]> www.infradead.org Git - users/jedix/linux-maple.git/commit
PCI/portdrv: Only disable pciehp interrupts early when needed
authorFeng Tang <feng.tang@linux.alibaba.com>
Mon, 3 Mar 2025 02:36:30 +0000 (10:36 +0800)
committerBjorn Helgaas <bhelgaas@google.com>
Tue, 4 Mar 2025 23:17:01 +0000 (17:17 -0600)
commit9d7db4db19827380e225914618c0c1bf435ed2f5
tree6caf254156aaad87c092a66e25624749bb832ec0
parentcc973ef13f8e31608d34c349c6ed85d44d716523
PCI/portdrv: Only disable pciehp interrupts early when needed

Firmware developers reported that Linux issues two PCIe hotplug commands in
very short intervals on an ARM server, which doesn't comply with the PCIe
spec.  According to PCIe r6.1, sec 6.7.3.2, if the Command Completed event
is supported, software must wait for a command to complete or wait at
least 1 second before sending a new command.

In the failure case, the first PCIe hotplug command is from
get_port_device_capability(), which sends a command to disable PCIe hotplug
interrupts without waiting for its completion, and the second command comes
from pcie_enable_notification() of pciehp driver, which enables hotplug
interrupts again.

Fix this by only disabling the hotplug interrupts when the pciehp driver is
not enabled.

Link: https://lore.kernel.org/r/20250303023630.78397-1-feng.tang@linux.alibaba.com
Fixes: 2bd50dd800b5 ("PCI: PCIe: Disable PCIe port services during port initialization")
Suggested-by: Lukas Wunner <lukas@wunner.de>
Signed-off-by: Feng Tang <feng.tang@linux.alibaba.com>
[bhelgaas: commit log]
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Lukas Wunner <lukas@wunner.de>
Reviewed-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
drivers/pci/pcie/portdrv.c