]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
PCI: rcar: Fix I/O offset for multiple host bridges
authorPhil Edworthy <phil.edworthy@renesas.com>
Fri, 2 Oct 2015 10:25:07 +0000 (11:25 +0100)
committerBjorn Helgaas <bhelgaas@google.com>
Fri, 30 Oct 2015 13:23:15 +0000 (08:23 -0500)
Fix I/O offset for multiple host bridges.

Signed-off-by: Phil Edworthy <phil.edworthy@renesas.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Simon Horman <horms+renesas@verge.net.au>
drivers/pci/host/pcie-rcar.c

index 8e583c200f026fc3954c4e334c0be508b051d5ad..f4fa6c537448cae9d25519a8697e212aa70facaa 100644 (file)
 #define RCAR_PCI_MAX_RESOURCES 4
 #define MAX_NR_INBOUND_MAPS 6
 
+static unsigned long global_io_offset;
+
 struct rcar_msi {
        DECLARE_BITMAP(used, INT_PCI_MSI_NR);
        struct irq_domain *domain;
@@ -357,7 +359,7 @@ static void rcar_pcie_setup_window(int win, struct rcar_pcie *pcie)
        rcar_pci_write_reg(pcie, mask, PCIEPTCTLR(win));
 }
 
-static int rcar_pcie_setup(int nr, struct list_head *resource, struct rcar_pcie *pcie)
+static int rcar_pcie_setup(struct list_head *resource, struct rcar_pcie *pcie)
 {
        struct resource *res;
        int i;
@@ -375,7 +377,8 @@ static int rcar_pcie_setup(int nr, struct list_head *resource, struct rcar_pcie
 
                if (res->flags & IORESOURCE_IO) {
                        phys_addr_t io_start = pci_pio_to_address(res->start);
-                       pci_ioremap_io(nr * SZ_64K, io_start);
+                       pci_ioremap_io(global_io_offset, io_start);
+                       global_io_offset += SZ_64K;
                }
 
                pci_add_resource(resource, res);
@@ -390,7 +393,7 @@ static int rcar_pcie_enable(struct rcar_pcie *pcie)
        struct pci_bus *bus, *child;
        LIST_HEAD(res);
 
-       rcar_pcie_setup(1, &res, pcie);
+       rcar_pcie_setup(&res, pcie);
 
        /* Do not reassign resources if probe only */
        if (!pci_has_flag(PCI_PROBE_ONLY))