|
@@ -480,59 +480,10 @@ static void __iomem *tegra_pcie_conf_address(struct pci_bus *bus,
|
|
|
return addr;
|
|
|
}
|
|
|
|
|
|
-static int tegra_pcie_read_conf(struct pci_bus *bus, unsigned int devfn,
|
|
|
- int where, int size, u32 *value)
|
|
|
-{
|
|
|
- void __iomem *addr;
|
|
|
-
|
|
|
- addr = tegra_pcie_conf_address(bus, devfn, where);
|
|
|
- if (!addr) {
|
|
|
- *value = 0xffffffff;
|
|
|
- return PCIBIOS_DEVICE_NOT_FOUND;
|
|
|
- }
|
|
|
-
|
|
|
- *value = readl(addr);
|
|
|
-
|
|
|
- if (size == 1)
|
|
|
- *value = (*value >> (8 * (where & 3))) & 0xff;
|
|
|
- else if (size == 2)
|
|
|
- *value = (*value >> (8 * (where & 3))) & 0xffff;
|
|
|
-
|
|
|
- return PCIBIOS_SUCCESSFUL;
|
|
|
-}
|
|
|
-
|
|
|
-static int tegra_pcie_write_conf(struct pci_bus *bus, unsigned int devfn,
|
|
|
- int where, int size, u32 value)
|
|
|
-{
|
|
|
- void __iomem *addr;
|
|
|
- u32 mask, tmp;
|
|
|
-
|
|
|
- addr = tegra_pcie_conf_address(bus, devfn, where);
|
|
|
- if (!addr)
|
|
|
- return PCIBIOS_DEVICE_NOT_FOUND;
|
|
|
-
|
|
|
- if (size == 4) {
|
|
|
- writel(value, addr);
|
|
|
- return PCIBIOS_SUCCESSFUL;
|
|
|
- }
|
|
|
-
|
|
|
- if (size == 2)
|
|
|
- mask = ~(0xffff << ((where & 0x3) * 8));
|
|
|
- else if (size == 1)
|
|
|
- mask = ~(0xff << ((where & 0x3) * 8));
|
|
|
- else
|
|
|
- return PCIBIOS_BAD_REGISTER_NUMBER;
|
|
|
-
|
|
|
- tmp = readl(addr) & mask;
|
|
|
- tmp |= value << ((where & 0x3) * 8);
|
|
|
- writel(tmp, addr);
|
|
|
-
|
|
|
- return PCIBIOS_SUCCESSFUL;
|
|
|
-}
|
|
|
-
|
|
|
static struct pci_ops tegra_pcie_ops = {
|
|
|
- .read = tegra_pcie_read_conf,
|
|
|
- .write = tegra_pcie_write_conf,
|
|
|
+ .map_bus = tegra_pcie_conf_address,
|
|
|
+ .read = pci_generic_config_read32,
|
|
|
+ .write = pci_generic_config_write32,
|
|
|
};
|
|
|
|
|
|
static unsigned long tegra_pcie_port_get_pex_ctrl(struct tegra_pcie_port *port)
|