|
@@ -868,8 +868,16 @@ static int pnv_eeh_bridge_reset(struct pci_dev *dev, int option)
|
|
|
|
|
|
void pnv_pci_reset_secondary_bus(struct pci_dev *dev)
|
|
|
{
|
|
|
- pnv_eeh_bridge_reset(dev, EEH_RESET_HOT);
|
|
|
- pnv_eeh_bridge_reset(dev, EEH_RESET_DEACTIVATE);
|
|
|
+ struct pci_controller *hose;
|
|
|
+
|
|
|
+ if (pci_is_root_bus(dev->bus)) {
|
|
|
+ hose = pci_bus_to_host(dev->bus);
|
|
|
+ pnv_eeh_root_reset(hose, EEH_RESET_HOT);
|
|
|
+ pnv_eeh_root_reset(hose, EEH_RESET_DEACTIVATE);
|
|
|
+ } else {
|
|
|
+ pnv_eeh_bridge_reset(dev, EEH_RESET_HOT);
|
|
|
+ pnv_eeh_bridge_reset(dev, EEH_RESET_DEACTIVATE);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
static void pnv_eeh_wait_for_pending(struct pci_dn *pdn, const char *type,
|