Skip to content

Commit

Permalink
PCI: designware: Move calculation of bus addresses to DRA7xx
Browse files Browse the repository at this point in the history
Commit f4c55c5 ("PCI: designware: Program ATU with untranslated
address") added the calculation of PCI bus addresses in pcie-designware.c,
storing them in new fields added in struct pcie_port.  This calculation is
done for every DesignWare user even though it only applies to DRA7xx.

Move the calculation of the bus addresses to the DRA7xx driver to allow the
rework of DesignWare to use the new DT parsing API.

Signed-off-by: Gabriele Paoloni <gabriele.paoloni@huawei.com>
Signed-off-by: Zhou Wang <wangzhou1@hisilicon.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Pratyush Anand <pratyush.anand@gmail.com>
  • Loading branch information
Gabriele Paoloni authored and Bjorn Helgaas committed Nov 2, 2015
1 parent 907fce0 commit 883cc17
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 11 deletions.
7 changes: 7 additions & 0 deletions drivers/pci/host/pci-dra7xx.c
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@

#define PCIECTRL_DRA7XX_CONF_PHY_CS 0x010C
#define LINK_UP BIT(16)
#define DRA7XX_CPU_TO_BUS_ADDR 0x0FFFFFFF

struct dra7xx_pcie {
void __iomem *base;
Expand Down Expand Up @@ -151,6 +152,12 @@ static void dra7xx_pcie_enable_interrupts(struct pcie_port *pp)
static void dra7xx_pcie_host_init(struct pcie_port *pp)
{
dw_pcie_setup_rc(pp);

pp->io_mod_base &= DRA7XX_CPU_TO_BUS_ADDR;
pp->mem_mod_base &= DRA7XX_CPU_TO_BUS_ADDR;
pp->cfg0_mod_base &= DRA7XX_CPU_TO_BUS_ADDR;
pp->cfg1_mod_base &= DRA7XX_CPU_TO_BUS_ADDR;

dra7xx_pcie_establish_link(pp);
if (IS_ENABLED(CONFIG_PCI_MSI))
dw_pcie_msi_init(pp);
Expand Down
15 changes: 4 additions & 11 deletions drivers/pci/host/pcie-designware.c
Original file line number Diff line number Diff line change
Expand Up @@ -417,14 +417,10 @@ int dw_pcie_host_init(struct pcie_port *pp)
struct of_pci_range range;
struct of_pci_range_parser parser;
struct resource *cfg_res;
u32 val, na, ns;
u32 val, ns;
const __be32 *addrp;
int i, index, ret;

/* Find the address cell size and the number of cells in order to get
* the untranslated address.
*/
of_property_read_u32(np, "#address-cells", &na);
ns = of_n_size_cells(np);

cfg_res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "config");
Expand Down Expand Up @@ -467,8 +463,7 @@ int dw_pcie_host_init(struct pcie_port *pp)
pp->io_base = range.cpu_addr;

/* Find the untranslated IO space address */
pp->io_mod_base = of_read_number(parser.range -
parser.np + na, ns);
pp->io_mod_base = range.cpu_addr;
}
if (restype == IORESOURCE_MEM) {
of_pci_range_to_resource(&range, np, &pp->mem);
Expand All @@ -477,8 +472,7 @@ int dw_pcie_host_init(struct pcie_port *pp)
pp->mem_bus_addr = range.pci_addr;

/* Find the untranslated MEM space address */
pp->mem_mod_base = of_read_number(parser.range -
parser.np + na, ns);
pp->mem_mod_base = range.cpu_addr;
}
if (restype == 0) {
of_pci_range_to_resource(&range, np, &pp->cfg);
Expand All @@ -488,8 +482,7 @@ int dw_pcie_host_init(struct pcie_port *pp)
pp->cfg1_base = pp->cfg.start + pp->cfg0_size;

/* Find the untranslated configuration space address */
pp->cfg0_mod_base = of_read_number(parser.range -
parser.np + na, ns);
pp->cfg0_mod_base = range.cpu_addr;
pp->cfg1_mod_base = pp->cfg0_mod_base +
pp->cfg0_size;
}
Expand Down

0 comments on commit 883cc17

Please sign in to comment.