mirror of https://github.com/torvalds/linux.git
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:
commit
e67bb0da33
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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. */
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue