Merge tag 'pci-v4.0-fixes-3' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci
Pull PCI fixes from Bjorn Helgaas:
"Here are some fixes for v4.0. I apologize for how late they are. We
were hoping for some better fixes, but couldn't get them polished in
time. These fix:
- a Xen domU oops with PCI passthrough devices
- a sparc T5 boot failure
- a STM SPEAr13xx crash (use after initdata freed)
- a cpcihp hotplug driver thinko
- an AER thinko that printed stack junk
Details:
Enumeration
- Don't look for ACPI hotplug parameters if ACPI is disabled (Bjorn Helgaas)
Resource management
- Revert "sparc/PCI: Clip bridge windows to fit in upstream windows" (Bjorn Helgaas)
AER
- Avoid info leak in __print_tlp_header() (Rasmus Villemoes)
PCI device hotplug
- Add missing curly braces in cpci_configure_slot() (Dan Carpenter)
ST Microelectronics SPEAr13xx host bridge driver
- Drop __initdata from spear13xx_pcie_driver (Matwey V. Kornilov)
* tag 'pci-v4.0-fixes-3' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci:
Revert "sparc/PCI: Clip bridge windows to fit in upstream windows"
PCI: Don't look for ACPI hotplug parameters if ACPI is disabled
PCI: cpcihp: Add missing curly braces in cpci_configure_slot()
PCI/AER: Avoid info leak in __print_tlp_header()
PCI: spear: Drop __initdata from spear13xx_pcie_driver
This commit is contained in:
@@ -639,10 +639,7 @@ static void pci_claim_bus_resources(struct pci_bus *bus)
|
|||||||
(unsigned long long)r->end,
|
(unsigned long long)r->end,
|
||||||
(unsigned int)r->flags);
|
(unsigned int)r->flags);
|
||||||
|
|
||||||
if (pci_claim_resource(dev, i) == 0)
|
pci_claim_resource(dev, i);
|
||||||
continue;
|
|
||||||
|
|
||||||
pci_claim_bridge_resource(dev, i);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -342,7 +342,7 @@ static const struct irq_domain_ops msi_domain_ops = {
|
|||||||
.map = dw_pcie_msi_map,
|
.map = dw_pcie_msi_map,
|
||||||
};
|
};
|
||||||
|
|
||||||
int __init dw_pcie_host_init(struct pcie_port *pp)
|
int dw_pcie_host_init(struct pcie_port *pp)
|
||||||
{
|
{
|
||||||
struct device_node *np = pp->dev->of_node;
|
struct device_node *np = pp->dev->of_node;
|
||||||
struct platform_device *pdev = to_platform_device(pp->dev);
|
struct platform_device *pdev = to_platform_device(pp->dev);
|
||||||
|
|||||||
@@ -269,7 +269,7 @@ static struct pcie_host_ops spear13xx_pcie_host_ops = {
|
|||||||
.host_init = spear13xx_pcie_host_init,
|
.host_init = spear13xx_pcie_host_init,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init spear13xx_add_pcie_port(struct pcie_port *pp,
|
static int spear13xx_add_pcie_port(struct pcie_port *pp,
|
||||||
struct platform_device *pdev)
|
struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct device *dev = &pdev->dev;
|
struct device *dev = &pdev->dev;
|
||||||
@@ -299,7 +299,7 @@ static int __init spear13xx_add_pcie_port(struct pcie_port *pp,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init spear13xx_pcie_probe(struct platform_device *pdev)
|
static int spear13xx_pcie_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct spear13xx_pcie *spear13xx_pcie;
|
struct spear13xx_pcie *spear13xx_pcie;
|
||||||
struct pcie_port *pp;
|
struct pcie_port *pp;
|
||||||
@@ -370,7 +370,7 @@ static const struct of_device_id spear13xx_pcie_of_match[] = {
|
|||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(of, spear13xx_pcie_of_match);
|
MODULE_DEVICE_TABLE(of, spear13xx_pcie_of_match);
|
||||||
|
|
||||||
static struct platform_driver spear13xx_pcie_driver __initdata = {
|
static struct platform_driver spear13xx_pcie_driver = {
|
||||||
.probe = spear13xx_pcie_probe,
|
.probe = spear13xx_pcie_probe,
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = "spear-pcie",
|
.name = "spear-pcie",
|
||||||
|
|||||||
@@ -286,11 +286,12 @@ int cpci_configure_slot(struct slot *slot)
|
|||||||
}
|
}
|
||||||
parent = slot->dev->bus;
|
parent = slot->dev->bus;
|
||||||
|
|
||||||
list_for_each_entry(dev, &parent->devices, bus_list)
|
list_for_each_entry(dev, &parent->devices, bus_list) {
|
||||||
if (PCI_SLOT(dev->devfn) != PCI_SLOT(slot->devfn))
|
if (PCI_SLOT(dev->devfn) != PCI_SLOT(slot->devfn))
|
||||||
continue;
|
continue;
|
||||||
if (pci_is_bridge(dev))
|
if (pci_is_bridge(dev))
|
||||||
pci_hp_add_bridge(dev);
|
pci_hp_add_bridge(dev);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
pci_assign_unassigned_bridge_resources(parent->self);
|
pci_assign_unassigned_bridge_resources(parent->self);
|
||||||
|
|||||||
@@ -248,6 +248,9 @@ int pci_get_hp_params(struct pci_dev *dev, struct hotplug_params *hpp)
|
|||||||
acpi_handle handle, phandle;
|
acpi_handle handle, phandle;
|
||||||
struct pci_bus *pbus;
|
struct pci_bus *pbus;
|
||||||
|
|
||||||
|
if (acpi_pci_disabled)
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
handle = NULL;
|
handle = NULL;
|
||||||
for (pbus = dev->bus; pbus; pbus = pbus->parent) {
|
for (pbus = dev->bus; pbus; pbus = pbus->parent) {
|
||||||
handle = acpi_pci_get_bridge_handle(pbus);
|
handle = acpi_pci_get_bridge_handle(pbus);
|
||||||
|
|||||||
@@ -132,16 +132,8 @@ static const char *aer_agent_string[] = {
|
|||||||
static void __print_tlp_header(struct pci_dev *dev,
|
static void __print_tlp_header(struct pci_dev *dev,
|
||||||
struct aer_header_log_regs *t)
|
struct aer_header_log_regs *t)
|
||||||
{
|
{
|
||||||
unsigned char *tlp = (unsigned char *)&t;
|
dev_err(&dev->dev, " TLP Header: %08x %08x %08x %08x\n",
|
||||||
|
t->dw0, t->dw1, t->dw2, t->dw3);
|
||||||
dev_err(&dev->dev, " TLP Header:"
|
|
||||||
" %02x%02x%02x%02x %02x%02x%02x%02x"
|
|
||||||
" %02x%02x%02x%02x %02x%02x%02x%02x\n",
|
|
||||||
*(tlp + 3), *(tlp + 2), *(tlp + 1), *tlp,
|
|
||||||
*(tlp + 7), *(tlp + 6), *(tlp + 5), *(tlp + 4),
|
|
||||||
*(tlp + 11), *(tlp + 10), *(tlp + 9),
|
|
||||||
*(tlp + 8), *(tlp + 15), *(tlp + 14),
|
|
||||||
*(tlp + 13), *(tlp + 12));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __aer_print_error(struct pci_dev *dev,
|
static void __aer_print_error(struct pci_dev *dev,
|
||||||
|
|||||||
Reference in New Issue
Block a user