/* Called during PCI resource reassignment */
        resource_size_t (*window_alignment)(struct pci_bus *, unsigned long type);
+       void            (*reset_secondary_bus)(struct pci_dev *dev);
 };
 
 /*
        return 1;
 }
 
+static inline void pcibios_reset_secondary_bus_shim(struct pci_dev *dev)
+{
+       struct pci_controller *phb = pci_bus_to_host(dev->bus);
+
+       if (phb->controller_ops.reset_secondary_bus)
+               phb->controller_ops.reset_secondary_bus(dev);
+       else if (ppc_md.pcibios_reset_secondary_bus)
+               ppc_md.pcibios_reset_secondary_bus(dev);
+       else
+               /*
+                * Fallback to the generic function if no
+                * platform-specific one is provided
+                */
+               pci_reset_secondary_bus(dev);
+}
+
 #endif /* __KERNEL__ */
 #endif /* _ASM_POWERPC_PCI_BRIDGE_H */
 
 
 void pcibios_reset_secondary_bus(struct pci_dev *dev)
 {
-       if (ppc_md.pcibios_reset_secondary_bus) {
-               ppc_md.pcibios_reset_secondary_bus(dev);
-               return;
-       }
-
-       pci_reset_secondary_bus(dev);
+       pcibios_reset_secondary_bus_shim(dev);
 }
 
 static resource_size_t pcibios_io_size(const struct pci_controller *hose)