|
@@ -109,12 +109,29 @@ void pcibios_free_controller(struct pci_controller *phb)
|
|
|
resource_size_t pcibios_window_alignment(struct pci_bus *bus,
|
|
|
unsigned long type)
|
|
|
{
|
|
|
- return pci_window_alignment(bus, type);
|
|
|
+ struct pci_controller *phb = pci_bus_to_host(bus);
|
|
|
+
|
|
|
+ if (phb->controller_ops.window_alignment)
|
|
|
+ return phb->controller_ops.window_alignment(bus, type);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * PCI core will figure out the default
|
|
|
+ * alignment: 4KiB for I/O and 1MiB for
|
|
|
+ * memory window.
|
|
|
+ */
|
|
|
+ return 1;
|
|
|
}
|
|
|
|
|
|
void pcibios_reset_secondary_bus(struct pci_dev *dev)
|
|
|
{
|
|
|
- pcibios_reset_secondary_bus_shim(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);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ pci_reset_secondary_bus(dev);
|
|
|
}
|
|
|
|
|
|
static resource_size_t pcibios_io_size(const struct pci_controller *hose)
|
|
@@ -929,6 +946,8 @@ static void pcibios_fixup_bridge(struct pci_bus *bus)
|
|
|
|
|
|
void pcibios_setup_bus_self(struct pci_bus *bus)
|
|
|
{
|
|
|
+ struct pci_controller *phb;
|
|
|
+
|
|
|
/* Fix up the bus resources for P2P bridges */
|
|
|
if (bus->self != NULL)
|
|
|
pcibios_fixup_bridge(bus);
|
|
@@ -940,11 +959,14 @@ void pcibios_setup_bus_self(struct pci_bus *bus)
|
|
|
ppc_md.pcibios_fixup_bus(bus);
|
|
|
|
|
|
/* Setup bus DMA mappings */
|
|
|
- pci_dma_bus_setup(bus);
|
|
|
+ phb = pci_bus_to_host(bus);
|
|
|
+ if (phb->controller_ops.dma_bus_setup)
|
|
|
+ phb->controller_ops.dma_bus_setup(bus);
|
|
|
}
|
|
|
|
|
|
static void pcibios_setup_device(struct pci_dev *dev)
|
|
|
{
|
|
|
+ struct pci_controller *phb;
|
|
|
/* Fixup NUMA node as it may not be setup yet by the generic
|
|
|
* code and is needed by the DMA init
|
|
|
*/
|
|
@@ -955,7 +977,9 @@ static void pcibios_setup_device(struct pci_dev *dev)
|
|
|
set_dma_offset(&dev->dev, PCI_DRAM_OFFSET);
|
|
|
|
|
|
/* Additional platform DMA/iommu setup */
|
|
|
- pci_dma_dev_setup(dev);
|
|
|
+ phb = pci_bus_to_host(dev->bus);
|
|
|
+ if (phb->controller_ops.dma_dev_setup)
|
|
|
+ phb->controller_ops.dma_dev_setup(dev);
|
|
|
|
|
|
/* Read default IRQs and fixup if necessary */
|
|
|
pci_read_irq_line(dev);
|
|
@@ -1435,8 +1459,11 @@ EXPORT_SYMBOL_GPL(pcibios_finish_adding_to_bus);
|
|
|
|
|
|
int pcibios_enable_device(struct pci_dev *dev, int mask)
|
|
|
{
|
|
|
- if (!pcibios_enable_device_hook(dev))
|
|
|
- return -EINVAL;
|
|
|
+ struct pci_controller *phb = pci_bus_to_host(dev->bus);
|
|
|
+
|
|
|
+ if (phb->controller_ops.enable_device_hook)
|
|
|
+ if (!phb->controller_ops.enable_device_hook(dev))
|
|
|
+ return -EINVAL;
|
|
|
|
|
|
return pci_enable_resources(dev, mask);
|
|
|
}
|
|
@@ -1608,8 +1635,8 @@ void pcibios_scan_phb(struct pci_controller *hose)
|
|
|
|
|
|
/* Get probe mode and perform scan */
|
|
|
mode = PCI_PROBE_NORMAL;
|
|
|
- if (node)
|
|
|
- mode = pci_probe_mode(bus);
|
|
|
+ if (node && hose->controller_ops.probe_mode)
|
|
|
+ mode = hose->controller_ops.probe_mode(bus);
|
|
|
pr_debug(" probe mode: %d\n", mode);
|
|
|
if (mode == PCI_PROBE_DEVTREE)
|
|
|
of_scan_bus(node, bus);
|