PCI: tegra: Use generic accessors where possible
authorThierry Reding <thierry.reding@gmail.com>
Sat, 23 Sep 2017 06:18:41 +0000 (23:18 -0700)
committerBjorn Helgaas <bhelgaas@google.com>
Wed, 11 Oct 2017 20:10:27 +0000 (15:10 -0500)
The Tegra PCI host controller can generate configuration space accesses
with byte, word and dword granularity for devices. Only root ports can't
have their configuration space accessed in this way.

Signed-off-by: Thierry Reding <treding@nvidia.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/pci/host/pci-tegra.c

index 9c40da54f88a10aab4dde9ba705b187912101909..e8e1ddbaabc9aaffcd46970ee5842074049ea685 100644 (file)
@@ -491,12 +491,32 @@ static void __iomem *tegra_pcie_map_bus(struct pci_bus *bus,
        return addr;
 }
 
+static int tegra_pcie_config_read(struct pci_bus *bus, unsigned int devfn,
+                                 int where, int size, u32 *value)
+{
+       if (bus->number == 0)
+               return pci_generic_config_read32(bus, devfn, where, size,
+                                                value);
+
+       return pci_generic_config_read(bus, devfn, where, size, value);
+}
+
+static int tegra_pcie_config_write(struct pci_bus *bus, unsigned int devfn,
+                                  int where, int size, u32 value)
+{
+       if (bus->number == 0)
+               return pci_generic_config_write32(bus, devfn, where, size,
+                                                 value);
+
+       return pci_generic_config_write(bus, devfn, where, size, value);
+}
+
 static struct pci_ops tegra_pcie_ops = {
        .add_bus = tegra_pcie_add_bus,
        .remove_bus = tegra_pcie_remove_bus,
        .map_bus = tegra_pcie_map_bus,
-       .read = pci_generic_config_read32,
-       .write = pci_generic_config_write32,
+       .read = tegra_pcie_config_read,
+       .write = tegra_pcie_config_write,
 };
 
 static unsigned long tegra_pcie_port_get_pex_ctrl(struct tegra_pcie_port *port)