Skip to content

Commit 085f793

Browse files
robherringLorenzo Pieralisi
authored andcommitted
PCI: rcar: Use inbound resources for setup
Now that the helpers provide the inbound resources in the host bridge 'dma_ranges' resource list, convert Renesas R-Car PCIe host bridge to use the resource list to setup the inbound addresses. Signed-off-by: Rob Herring <[email protected]> Signed-off-by: Lorenzo Pieralisi <[email protected]> Cc: Simon Horman <[email protected]> Cc: Lorenzo Pieralisi <[email protected]> Cc: Bjorn Helgaas <[email protected]>
1 parent b9ae59b commit 085f793

File tree

1 file changed

+16
-29
lines changed

1 file changed

+16
-29
lines changed

drivers/pci/controller/pcie-rcar.c

Lines changed: 16 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1014,16 +1014,16 @@ static int rcar_pcie_get_resources(struct rcar_pcie *pcie)
10141014
}
10151015

10161016
static int rcar_pcie_inbound_ranges(struct rcar_pcie *pcie,
1017-
struct of_pci_range *range,
1017+
struct resource_entry *entry,
10181018
int *index)
10191019
{
1020-
u64 restype = range->flags;
1021-
u64 cpu_addr = range->cpu_addr;
1022-
u64 cpu_end = range->cpu_addr + range->size;
1023-
u64 pci_addr = range->pci_addr;
1020+
u64 restype = entry->res->flags;
1021+
u64 cpu_addr = entry->res->start;
1022+
u64 cpu_end = entry->res->end;
1023+
u64 pci_addr = entry->res->start - entry->offset;
10241024
u32 flags = LAM_64BIT | LAR_ENABLE;
10251025
u64 mask;
1026-
u64 size;
1026+
u64 size = resource_size(entry->res);
10271027
int idx = *index;
10281028

10291029
if (restype & IORESOURCE_PREFETCH)
@@ -1037,9 +1037,7 @@ static int rcar_pcie_inbound_ranges(struct rcar_pcie *pcie,
10371037
unsigned long nr_zeros = __ffs64(cpu_addr);
10381038
u64 alignment = 1ULL << nr_zeros;
10391039

1040-
size = min(range->size, alignment);
1041-
} else {
1042-
size = range->size;
1040+
size = min(size, alignment);
10431041
}
10441042
/* Hardware supports max 4GiB inbound region */
10451043
size = min(size, 1ULL << 32);
@@ -1078,30 +1076,19 @@ static int rcar_pcie_inbound_ranges(struct rcar_pcie *pcie,
10781076
return 0;
10791077
}
10801078

1081-
static int rcar_pcie_parse_map_dma_ranges(struct rcar_pcie *pcie,
1082-
struct device_node *np)
1079+
static int rcar_pcie_parse_map_dma_ranges(struct rcar_pcie *pcie)
10831080
{
1084-
struct of_pci_range range;
1085-
struct of_pci_range_parser parser;
1086-
int index = 0;
1087-
int err;
1088-
1089-
if (of_pci_dma_range_parser_init(&parser, np))
1090-
return -EINVAL;
1091-
1092-
/* Get the dma-ranges from DT */
1093-
for_each_of_pci_range(&parser, &range) {
1094-
u64 end = range.cpu_addr + range.size - 1;
1095-
1096-
dev_dbg(pcie->dev, "0x%08x 0x%016llx..0x%016llx -> 0x%016llx\n",
1097-
range.flags, range.cpu_addr, end, range.pci_addr);
1081+
struct pci_host_bridge *bridge = pci_host_bridge_from_priv(pcie);
1082+
struct resource_entry *entry;
1083+
int index = 0, err = 0;
10981084

1099-
err = rcar_pcie_inbound_ranges(pcie, &range, &index);
1085+
resource_list_for_each_entry(entry, &bridge->dma_ranges) {
1086+
err = rcar_pcie_inbound_ranges(pcie, entry, &index);
11001087
if (err)
1101-
return err;
1088+
break;
11021089
}
11031090

1104-
return 0;
1091+
return err;
11051092
}
11061093

11071094
static const struct of_device_id rcar_pcie_of_match[] = {
@@ -1162,7 +1149,7 @@ static int rcar_pcie_probe(struct platform_device *pdev)
11621149
goto err_unmap_msi_irqs;
11631150
}
11641151

1165-
err = rcar_pcie_parse_map_dma_ranges(pcie, dev->of_node);
1152+
err = rcar_pcie_parse_map_dma_ranges(pcie);
11661153
if (err)
11671154
goto err_clk_disable;
11681155

0 commit comments

Comments
 (0)