Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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

+20 -15
+1
drivers/pci/Kconfig
··· 306 306 bool "VGA Arbitration" if EXPERT 307 307 default y 308 308 depends on (PCI && !S390) 309 + select SCREEN_INFO if X86 309 310 help 310 311 Some "legacy" VGA devices implemented on PCI typically have the same 311 312 hard-decoded addresses as they did on ISA. When multiple PCI devices
+1 -1
drivers/pci/controller/cadence/pcie-cadence-ep.c
··· 255 255 u16 flags, mme; 256 256 u8 cap; 257 257 258 - cap = cdns_pcie_find_capability(pcie, PCI_CAP_ID_MSIX); 258 + cap = cdns_pcie_find_capability(pcie, PCI_CAP_ID_MSI); 259 259 fn = cdns_pcie_get_fn_from_vfn(pcie, fn, vfn); 260 260 261 261 /* Validate that the MSI feature is actually enabled. */
+13
drivers/pci/controller/vmd.c
··· 192 192 data->chip->irq_unmask(data); 193 193 } 194 194 195 + static unsigned int vmd_pci_msi_startup(struct irq_data *data) 196 + { 197 + vmd_pci_msi_enable(data); 198 + return 0; 199 + } 200 + 195 201 static void vmd_irq_disable(struct irq_data *data) 196 202 { 197 203 struct vmd_irq *vmdirq = data->chip_data; ··· 214 208 { 215 209 data->chip->irq_mask(data); 216 210 vmd_irq_disable(data->parent_data); 211 + } 212 + 213 + static void vmd_pci_msi_shutdown(struct irq_data *data) 214 + { 215 + vmd_pci_msi_disable(data); 217 216 } 218 217 219 218 static struct irq_chip vmd_msi_controller = { ··· 320 309 if (!msi_lib_init_dev_msi_info(dev, domain, real_parent, info)) 321 310 return false; 322 311 312 + info->chip->irq_startup = vmd_pci_msi_startup; 313 + info->chip->irq_shutdown = vmd_pci_msi_shutdown; 323 314 info->chip->irq_enable = vmd_pci_msi_enable; 324 315 info->chip->irq_disable = vmd_pci_msi_disable; 325 316 return true;
+3 -10
drivers/pci/probe.c
··· 538 538 } 539 539 if (io) { 540 540 bridge->io_window = 1; 541 - pci_read_bridge_io(bridge, 542 - pci_resource_n(bridge, PCI_BRIDGE_IO_WINDOW), 543 - true); 541 + pci_read_bridge_io(bridge, &res, true); 544 542 } 545 543 546 - pci_read_bridge_mmio(bridge, 547 - pci_resource_n(bridge, PCI_BRIDGE_MEM_WINDOW), 548 - true); 544 + pci_read_bridge_mmio(bridge, &res, true); 549 545 550 546 /* 551 547 * DECchip 21050 pass 2 errata: the bridge may miss an address ··· 579 583 bridge->pref_64_window = 1; 580 584 } 581 585 582 - pci_read_bridge_mmio_pref(bridge, 583 - pci_resource_n(bridge, 584 - PCI_BRIDGE_PREF_MEM_WINDOW), 585 - true); 586 + pci_read_bridge_mmio_pref(bridge, &res, true); 586 587 } 587 588 588 589 void pci_read_bridge_bases(struct pci_bus *child)
+2 -4
drivers/pci/vgaarb.c
··· 556 556 557 557 static bool vga_is_firmware_default(struct pci_dev *pdev) 558 558 { 559 - #ifdef CONFIG_SCREEN_INFO 560 - struct screen_info *si = &screen_info; 561 - 562 - return pdev == screen_info_pci_dev(si); 559 + #if defined CONFIG_X86 560 + return pdev == screen_info_pci_dev(&screen_info); 563 561 #else 564 562 return false; 565 563 #endif