|
@@ -645,61 +645,21 @@ mapped:
|
|
|
return pcie->cfg_type1 + offset;
|
|
|
}
|
|
|
|
|
|
-static int mpc83xx_pcie_read_config(struct pci_bus *bus, unsigned int devfn,
|
|
|
- int offset, int len, u32 *val)
|
|
|
-{
|
|
|
- void __iomem *cfg_addr;
|
|
|
-
|
|
|
- cfg_addr = mpc83xx_pcie_remap_cfg(bus, devfn, offset);
|
|
|
- if (!cfg_addr)
|
|
|
- return PCIBIOS_DEVICE_NOT_FOUND;
|
|
|
-
|
|
|
- switch (len) {
|
|
|
- case 1:
|
|
|
- *val = in_8(cfg_addr);
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- *val = in_le16(cfg_addr);
|
|
|
- break;
|
|
|
- default:
|
|
|
- *val = in_le32(cfg_addr);
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- return PCIBIOS_SUCCESSFUL;
|
|
|
-}
|
|
|
-
|
|
|
static int mpc83xx_pcie_write_config(struct pci_bus *bus, unsigned int devfn,
|
|
|
int offset, int len, u32 val)
|
|
|
{
|
|
|
struct pci_controller *hose = pci_bus_to_host(bus);
|
|
|
- void __iomem *cfg_addr;
|
|
|
-
|
|
|
- cfg_addr = mpc83xx_pcie_remap_cfg(bus, devfn, offset);
|
|
|
- if (!cfg_addr)
|
|
|
- return PCIBIOS_DEVICE_NOT_FOUND;
|
|
|
|
|
|
/* PPC_INDIRECT_TYPE_SURPRESS_PRIMARY_BUS */
|
|
|
if (offset == PCI_PRIMARY_BUS && bus->number == hose->first_busno)
|
|
|
val &= 0xffffff00;
|
|
|
|
|
|
- switch (len) {
|
|
|
- case 1:
|
|
|
- out_8(cfg_addr, val);
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- out_le16(cfg_addr, val);
|
|
|
- break;
|
|
|
- default:
|
|
|
- out_le32(cfg_addr, val);
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- return PCIBIOS_SUCCESSFUL;
|
|
|
+ return pci_generic_config_write(bus, devfn, offset, len, val);
|
|
|
}
|
|
|
|
|
|
static struct pci_ops mpc83xx_pcie_ops = {
|
|
|
- .read = mpc83xx_pcie_read_config,
|
|
|
+ .map_bus = mpc83xx_pcie_remap_cfg,
|
|
|
+ .read = pci_generic_config_read,
|
|
|
.write = mpc83xx_pcie_write_config,
|
|
|
};
|
|
|
|