pci-v6.18-fixes-2

-----BEGIN PGP SIGNATURE-----
 
 iQJIBAABCgAyFiEEgMe7l+5h9hnxdsnuWYigwDrT+vwFAmjyX1sUHGJoZWxnYWFz
 QGdvb2dsZS5jb20ACgkQWYigwDrT+vw+DBAAmTruFbffqGqhNwWC586ki4sNYmxf
 g7rqAnUTE23ItblsN+6YfWJvRMf7Id1fMjJ/VYIwm5T7s7FcBWUFqIoVhHc2NmHw
 dmnLFyzrpTT2fDN9H5PSFd24Wu4N0OlXBsum3L6j7Rj6wyDJrakYfqLMsH+rGOoR
 44U2uL8PxhuT5hsUiztFpF6T4i2C6poB6zx173PwAmdNeDoNz1qhRG0mexnByXhU
 fZ6iudP58dw1zg9ZQhPuaBPLWXb9uBXPz5+8j4rB2/Il1q2UL1pjhbu97WoZoPem
 e8yq8p1xQEYlNDVgrEQQE35qQnzSTZLLFyyjupvs3bJEzLQGxZl+ds7tl1JVYWMr
 2PPvDW2LkdQStPGBUuRfgGN7vuCKofy8ibjdWsXOuB7JXZXkbvztqOTcdOLSCnoZ
 jbmVhvoR73wdq0ePG8REm8gNMm+SDPLnxZY3BRTXgrCazeCEFTTCX+UHEWwRBRAj
 VJlO6b95/e5wEjyw5aHHTzD261j+BwfsZ8qIMNbC5OmVJsx46we5/enwpkGLI+TP
 cdWbLz9OKv1Y/FNfb2qy2RttiJTFLI+n30ejVwpHPBNGwkC016f3c6GrImyYL6JD
 21QIh7lA4MODGRDSn/Iqt7YZugWVnOTQJzYgJv1cq1MQSnq9PyXY34GtcyG80cOO
 2/QXi6MGgT52iJQ=
 =oXKT
 -----END PGP SIGNATURE-----

Merge tag 'pci-v6.18-fixes-2' of git://git.kernel.org/pub/scm/linux/kernel/git/pci/pci

Pull pci fixes from Bjorn Helgaas:

 - Search for MSI Capability with correct ID to fix an MSI regression on
   platforms with Cadence IP (Hans Zhang)

 - Revert early bridge resource set up to fix resource assignment
   failures that broke at least alpha boot and Snapdragon ath12k WiFi
   (Ilpo Järvinen)

 - Implement VMD .irq_startup()/.irq_shutdown() to fix IRQ issues that
   caused boot crashes and broken devices below VMD (Inochi Amaoto)

 - Select CONFIG_SCREEN_INFO on X86 to fix black screen on boot when
   SCREEN_INFO not selected (Mario Limonciello)

* tag 'pci-v6.18-fixes-2' of git://git.kernel.org/pub/scm/linux/kernel/git/pci/pci:
  PCI/VGA: Select SCREEN_INFO on X86
  PCI: vmd: Override irq_startup()/irq_shutdown() in vmd_init_dev_msi_info()
  PCI: Revert early bridge resource set up
  PCI: cadence: Search for MSI Capability with correct ID
This commit is contained in:
Linus Torvalds 2025-10-18 08:35:09 -10:00
commit e67bb0da33
5 changed files with 20 additions and 15 deletions

View File

@ -306,6 +306,7 @@ config VGA_ARB
bool "VGA Arbitration" if EXPERT bool "VGA Arbitration" if EXPERT
default y default y
depends on (PCI && !S390) depends on (PCI && !S390)
select SCREEN_INFO if X86
help help
Some "legacy" VGA devices implemented on PCI typically have the same Some "legacy" VGA devices implemented on PCI typically have the same
hard-decoded addresses as they did on ISA. When multiple PCI devices hard-decoded addresses as they did on ISA. When multiple PCI devices

View File

@ -255,7 +255,7 @@ static int cdns_pcie_ep_get_msi(struct pci_epc *epc, u8 fn, u8 vfn)
u16 flags, mme; u16 flags, mme;
u8 cap; u8 cap;
cap = cdns_pcie_find_capability(pcie, PCI_CAP_ID_MSIX); cap = cdns_pcie_find_capability(pcie, PCI_CAP_ID_MSI);
fn = cdns_pcie_get_fn_from_vfn(pcie, fn, vfn); fn = cdns_pcie_get_fn_from_vfn(pcie, fn, vfn);
/* Validate that the MSI feature is actually enabled. */ /* Validate that the MSI feature is actually enabled. */

View File

@ -192,6 +192,12 @@ static void vmd_pci_msi_enable(struct irq_data *data)
data->chip->irq_unmask(data); data->chip->irq_unmask(data);
} }
static unsigned int vmd_pci_msi_startup(struct irq_data *data)
{
vmd_pci_msi_enable(data);
return 0;
}
static void vmd_irq_disable(struct irq_data *data) static void vmd_irq_disable(struct irq_data *data)
{ {
struct vmd_irq *vmdirq = data->chip_data; struct vmd_irq *vmdirq = data->chip_data;
@ -210,6 +216,11 @@ static void vmd_pci_msi_disable(struct irq_data *data)
vmd_irq_disable(data->parent_data); vmd_irq_disable(data->parent_data);
} }
static void vmd_pci_msi_shutdown(struct irq_data *data)
{
vmd_pci_msi_disable(data);
}
static struct irq_chip vmd_msi_controller = { static struct irq_chip vmd_msi_controller = {
.name = "VMD-MSI", .name = "VMD-MSI",
.irq_compose_msi_msg = vmd_compose_msi_msg, .irq_compose_msi_msg = vmd_compose_msi_msg,
@ -309,6 +320,8 @@ static bool vmd_init_dev_msi_info(struct device *dev, struct irq_domain *domain,
if (!msi_lib_init_dev_msi_info(dev, domain, real_parent, info)) if (!msi_lib_init_dev_msi_info(dev, domain, real_parent, info))
return false; return false;
info->chip->irq_startup = vmd_pci_msi_startup;
info->chip->irq_shutdown = vmd_pci_msi_shutdown;
info->chip->irq_enable = vmd_pci_msi_enable; info->chip->irq_enable = vmd_pci_msi_enable;
info->chip->irq_disable = vmd_pci_msi_disable; info->chip->irq_disable = vmd_pci_msi_disable;
return true; return true;

View File

@ -538,14 +538,10 @@ static void pci_read_bridge_windows(struct pci_dev *bridge)
} }
if (io) { if (io) {
bridge->io_window = 1; bridge->io_window = 1;
pci_read_bridge_io(bridge, pci_read_bridge_io(bridge, &res, true);
pci_resource_n(bridge, PCI_BRIDGE_IO_WINDOW),
true);
} }
pci_read_bridge_mmio(bridge, pci_read_bridge_mmio(bridge, &res, true);
pci_resource_n(bridge, PCI_BRIDGE_MEM_WINDOW),
true);
/* /*
* DECchip 21050 pass 2 errata: the bridge may miss an address * DECchip 21050 pass 2 errata: the bridge may miss an address
@ -583,10 +579,7 @@ static void pci_read_bridge_windows(struct pci_dev *bridge)
bridge->pref_64_window = 1; bridge->pref_64_window = 1;
} }
pci_read_bridge_mmio_pref(bridge, pci_read_bridge_mmio_pref(bridge, &res, true);
pci_resource_n(bridge,
PCI_BRIDGE_PREF_MEM_WINDOW),
true);
} }
void pci_read_bridge_bases(struct pci_bus *child) void pci_read_bridge_bases(struct pci_bus *child)

View File

@ -556,10 +556,8 @@ EXPORT_SYMBOL(vga_put);
static bool vga_is_firmware_default(struct pci_dev *pdev) static bool vga_is_firmware_default(struct pci_dev *pdev)
{ {
#ifdef CONFIG_SCREEN_INFO #if defined CONFIG_X86
struct screen_info *si = &screen_info; return pdev == screen_info_pci_dev(&screen_info);
return pdev == screen_info_pci_dev(si);
#else #else
return false; return false;
#endif #endif