diff options
Diffstat (limited to 'arch/powerpc')
-rw-r--r-- | arch/powerpc/include/asm/pci.h | 1 | ||||
-rw-r--r-- | arch/powerpc/kernel/pci_of_scan.c | 1 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/eeh.c | 10 |
3 files changed, 10 insertions, 2 deletions
diff --git a/arch/powerpc/include/asm/pci.h b/arch/powerpc/include/asm/pci.h index 7aca4839387..b5ea626eea2 100644 --- a/arch/powerpc/include/asm/pci.h +++ b/arch/powerpc/include/asm/pci.h | |||
@@ -45,7 +45,6 @@ struct pci_dev; | |||
45 | */ | 45 | */ |
46 | #define pcibios_assign_all_busses() \ | 46 | #define pcibios_assign_all_busses() \ |
47 | (ppc_pci_has_flag(PPC_PCI_REASSIGN_ALL_BUS)) | 47 | (ppc_pci_has_flag(PPC_PCI_REASSIGN_ALL_BUS)) |
48 | #define pcibios_scan_all_fns(a, b) 0 | ||
49 | 48 | ||
50 | static inline void pcibios_set_master(struct pci_dev *dev) | 49 | static inline void pcibios_set_master(struct pci_dev *dev) |
51 | { | 50 | { |
diff --git a/arch/powerpc/kernel/pci_of_scan.c b/arch/powerpc/kernel/pci_of_scan.c index 72c31bcb7aa..7311fdfb9bf 100644 --- a/arch/powerpc/kernel/pci_of_scan.c +++ b/arch/powerpc/kernel/pci_of_scan.c | |||
@@ -139,6 +139,7 @@ struct pci_dev *of_create_pci_dev(struct device_node *node, | |||
139 | dev->dev.bus = &pci_bus_type; | 139 | dev->dev.bus = &pci_bus_type; |
140 | dev->devfn = devfn; | 140 | dev->devfn = devfn; |
141 | dev->multifunction = 0; /* maybe a lie? */ | 141 | dev->multifunction = 0; /* maybe a lie? */ |
142 | dev->needs_freset = 0; /* pcie fundamental reset required */ | ||
142 | 143 | ||
143 | dev->vendor = get_int_prop(node, "vendor-id", 0xffff); | 144 | dev->vendor = get_int_prop(node, "vendor-id", 0xffff); |
144 | dev->device = get_int_prop(node, "device-id", 0xffff); | 145 | dev->device = get_int_prop(node, "device-id", 0xffff); |
diff --git a/arch/powerpc/platforms/pseries/eeh.c b/arch/powerpc/platforms/pseries/eeh.c index 989d6462c15..ccd8dd03b8c 100644 --- a/arch/powerpc/platforms/pseries/eeh.c +++ b/arch/powerpc/platforms/pseries/eeh.c | |||
@@ -744,7 +744,15 @@ int pcibios_set_pcie_reset_state(struct pci_dev *dev, enum pcie_reset_state stat | |||
744 | 744 | ||
745 | static void __rtas_set_slot_reset(struct pci_dn *pdn) | 745 | static void __rtas_set_slot_reset(struct pci_dn *pdn) |
746 | { | 746 | { |
747 | rtas_pci_slot_reset (pdn, 1); | 747 | struct pci_dev *dev = pdn->pcidev; |
748 | |||
749 | /* Determine type of EEH reset required by device, | ||
750 | * default hot reset or fundamental reset | ||
751 | */ | ||
752 | if (dev->needs_freset) | ||
753 | rtas_pci_slot_reset(pdn, 3); | ||
754 | else | ||
755 | rtas_pci_slot_reset(pdn, 1); | ||
748 | 756 | ||
749 | /* The PCI bus requires that the reset be held high for at least | 757 | /* The PCI bus requires that the reset be held high for at least |
750 | * a 100 milliseconds. We wait a bit longer 'just in case'. */ | 758 | * a 100 milliseconds. We wait a bit longer 'just in case'. */ |