powerpc/pci: Add calls to set_pcie_port_type() and set_pcie_hotplug_bridge()
PATCH 1/3 powerpc/pci: Add calls to set_pcie_port_type() and set_pcie_hotplug_bridge()
We are missing these when building the pci_dev from scratch off the Open Firmware device-tree
--- arch/powerpc/kernel/pci_of_scan.c | 2 ++ drivers/pci/probe.c | 4 ++-- include/linux/pci.h | 4 ++++ 3 files changed, 8 insertions(+), 2 deletions(-)
Jesse, can I have an ack for the generic bits ? Note that I couldn't test on a pSeries machine with PCI-E as all such machines in ozlabs currently have all their partitions with PCI-E devices in them in FAIL state in ABAT and our admin is out.
Breno, can you test ? Also if you could give a quick spin to the other ones too make sure they don't break anything else, it would be great !
arch/powerpc/kernel/pci_of_scan.c +2 -0
@@ -140,6 +140,7 @@ struct pci_dev *of_create_pci_dev(struct device_node *node, dev->devfn = devfn; dev->multifunction =0 ;/* maybe a lie? */ dev->needs_freset =0 ;/* pcie fundamental reset required */ +set_pcie_port_type (dev); dev->vendor =get_int_prop (node,"vendor-id" ,0xffff ); dev->device =get_int_prop (node,"device-id" ,0xffff );
@@ -164,6 +165,7 @@ struct pci_dev *of_create_pci_dev(struct device_node *node,/* a PCI-PCI bridge */ dev->hdr_type =PCI_HEADER_TYPE_BRIDGE ; dev->rom_base_reg =PCI_ROM_ADDRESS1 ; +set_pcie_hotplug_bridge (dev); }else if (!strcmp (type,"cardbus" )) { dev->hdr_type =PCI_HEADER_TYPE_CARDBUS ; }else {
drivers/pci/probe.c +2 -2
@@ -681,7 +681,7 @@ static void pci_read_irq(struct pci_dev *dev) dev->irq = irq; } -static void set_pcie_port_type (struct pci_dev *pdev) +void set_pcie_port_type (struct pci_dev *pdev) {int pos;u16 reg16;
@@ -695,7 +695,7 @@ static void set_pcie_port_type(struct pci_dev *pdev) pdev->pcie_type = (reg16 &PCI_EXP_FLAGS_TYPE ) >>4 ; } -static void set_pcie_hotplug_bridge (struct pci_dev *pdev) +void set_pcie_hotplug_bridge (struct pci_dev *pdev) {int pos;u16 reg16;
include/linux/pci.h +4 -0
@@ -756,6 +756,10 @@ pci_power_t pci_target_state(struct pci_dev *dev);int pci_prepare_to_sleep (struct pci_dev *dev);int pci_back_from_sleep (struct pci_dev *dev); +/* For use by arch with custom probe code */ +void set_pcie_port_type (struct pci_dev *pdev); +void set_pcie_hotplug_bridge (struct pci_dev *pdev); +/* Functions for PCI Hotplug drivers to use */ int pci_bus_find_capability (struct pci_bus *bus,unsigned int devfn,int cap);#ifdef CONFIG_HOTPLUG
Quoted 10 lines · On Wed, 27 Jan 2010 14:10:03 +1100 Benjamin Herrenschmidt…
We are missing these when building the
pci_devfrom scratch off the Open Firmware device-treeSigned-off-by Benjamin Herrenschmidt <[email protected]>--- arch/powerpc/kernel/pci_of_scan.c | 2 ++ drivers/pci/probe.c | 4 ++-- include/linux/pci.h | 4 ++++ 3 files changed, 8 insertions(+), 2 deletions(-)
Quoted 4 lines
Jesse, can I have an ack for the generic bits ? Note that I couldn't test on a pSeries machine with PCI-E as all such machines in ozlabs currently have all their partitions with PCI-E devices in them in FAIL state in ABAT and our admin is out.
Yeah, generic bits look fine.
Signature · 1 line
Jesse Barnes, Intel Open Source Technology Center
Hi Ben,
Quoted 2 lines · Benjamin Herrenschmidt
Breno, can you test ? Also if you could give a quick spin to the other ones too make sure they don't break anything else, it would be great !
I tested and also asked my team to test and the changes work fine, fixing the problem. Also, we did a regression test and nothing seem to be broken.
Thanks,
Breno