Skip to content

Commit 06ff98f

Browse files
robherringLorenzo Pieralisi
authored andcommitted
PCI: cadence: Use bridge resources for outbound window setup
Instead of parsing 'ranges' from DT again, use the bridge window resources. Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Rob Herring <[email protected]> Signed-off-by: Lorenzo Pieralisi <[email protected]> Acked-by: Bjorn Helgaas <[email protected]> Cc: Tom Joseph <[email protected]> Cc: Lorenzo Pieralisi <[email protected]> Cc: Bjorn Helgaas <[email protected]>
1 parent 4f5c883 commit 06ff98f

File tree

1 file changed

+16
-21
lines changed

1 file changed

+16
-21
lines changed

drivers/pci/controller/cadence/pcie-cadence-host.c

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -104,16 +104,14 @@ static int cdns_pcie_host_init_root_port(struct cdns_pcie_rc *rc)
104104
static int cdns_pcie_host_init_address_translation(struct cdns_pcie_rc *rc)
105105
{
106106
struct cdns_pcie *pcie = &rc->pcie;
107+
struct pci_host_bridge *bridge = pci_host_bridge_from_priv(rc);
107108
struct resource *mem_res = pcie->mem_res;
108109
struct resource *bus_range = rc->bus_range;
109110
struct resource *cfg_res = rc->cfg_res;
110-
struct device *dev = pcie->dev;
111-
struct device_node *np = dev->of_node;
112-
struct of_pci_range_parser parser;
113-
struct of_pci_range range;
111+
struct resource_entry *entry;
114112
u32 addr0, addr1, desc1;
115113
u64 cpu_addr;
116-
int r, err;
114+
int r;
117115

118116
/*
119117
* Reserve region 0 for PCI configure space accesses:
@@ -132,25 +130,22 @@ static int cdns_pcie_host_init_address_translation(struct cdns_pcie_rc *rc)
132130
cdns_pcie_writel(pcie, CDNS_PCIE_AT_OB_REGION_CPU_ADDR0(0), addr0);
133131
cdns_pcie_writel(pcie, CDNS_PCIE_AT_OB_REGION_CPU_ADDR1(0), addr1);
134132

135-
err = of_pci_range_parser_init(&parser, np);
136-
if (err)
137-
return err;
138-
139133
r = 1;
140-
for_each_of_pci_range(&parser, &range) {
141-
bool is_io;
142-
143-
if ((range.flags & IORESOURCE_TYPE_BITS) == IORESOURCE_MEM)
144-
is_io = false;
145-
else if ((range.flags & IORESOURCE_TYPE_BITS) == IORESOURCE_IO)
146-
is_io = true;
134+
resource_list_for_each_entry(entry, &bridge->windows) {
135+
struct resource *res = entry->res;
136+
u64 pci_addr = res->start - entry->offset;
137+
138+
if (resource_type(res) == IORESOURCE_IO)
139+
cdns_pcie_set_outbound_region(pcie, 0, r, true,
140+
pci_pio_to_address(res->start),
141+
pci_addr,
142+
resource_size(res));
147143
else
148-
continue;
144+
cdns_pcie_set_outbound_region(pcie, 0, r, false,
145+
res->start,
146+
pci_addr,
147+
resource_size(res));
149148

150-
cdns_pcie_set_outbound_region(pcie, 0, r, is_io,
151-
range.cpu_addr,
152-
range.pci_addr,
153-
range.size);
154149
r++;
155150
}
156151

0 commit comments

Comments
 (0)