mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-29 07:34:06 +08:00
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 <robh@kernel.org> Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Cc: Simon Horman <horms@verge.net.au> Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Cc: Bjorn Helgaas <bhelgaas@google.com>
This commit is contained in:
parent
b9ae59b30b
commit
085f793984
@ -1014,16 +1014,16 @@ err_irq1:
|
||||
}
|
||||
|
||||
static int rcar_pcie_inbound_ranges(struct rcar_pcie *pcie,
|
||||
struct of_pci_range *range,
|
||||
struct resource_entry *entry,
|
||||
int *index)
|
||||
{
|
||||
u64 restype = range->flags;
|
||||
u64 cpu_addr = range->cpu_addr;
|
||||
u64 cpu_end = range->cpu_addr + range->size;
|
||||
u64 pci_addr = range->pci_addr;
|
||||
u64 restype = entry->res->flags;
|
||||
u64 cpu_addr = entry->res->start;
|
||||
u64 cpu_end = entry->res->end;
|
||||
u64 pci_addr = entry->res->start - entry->offset;
|
||||
u32 flags = LAM_64BIT | LAR_ENABLE;
|
||||
u64 mask;
|
||||
u64 size;
|
||||
u64 size = resource_size(entry->res);
|
||||
int idx = *index;
|
||||
|
||||
if (restype & IORESOURCE_PREFETCH)
|
||||
@ -1037,9 +1037,7 @@ static int rcar_pcie_inbound_ranges(struct rcar_pcie *pcie,
|
||||
unsigned long nr_zeros = __ffs64(cpu_addr);
|
||||
u64 alignment = 1ULL << nr_zeros;
|
||||
|
||||
size = min(range->size, alignment);
|
||||
} else {
|
||||
size = range->size;
|
||||
size = min(size, alignment);
|
||||
}
|
||||
/* Hardware supports max 4GiB inbound region */
|
||||
size = min(size, 1ULL << 32);
|
||||
@ -1078,30 +1076,19 @@ static int rcar_pcie_inbound_ranges(struct rcar_pcie *pcie,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int rcar_pcie_parse_map_dma_ranges(struct rcar_pcie *pcie,
|
||||
struct device_node *np)
|
||||
static int rcar_pcie_parse_map_dma_ranges(struct rcar_pcie *pcie)
|
||||
{
|
||||
struct of_pci_range range;
|
||||
struct of_pci_range_parser parser;
|
||||
int index = 0;
|
||||
int err;
|
||||
struct pci_host_bridge *bridge = pci_host_bridge_from_priv(pcie);
|
||||
struct resource_entry *entry;
|
||||
int index = 0, err = 0;
|
||||
|
||||
if (of_pci_dma_range_parser_init(&parser, np))
|
||||
return -EINVAL;
|
||||
|
||||
/* Get the dma-ranges from DT */
|
||||
for_each_of_pci_range(&parser, &range) {
|
||||
u64 end = range.cpu_addr + range.size - 1;
|
||||
|
||||
dev_dbg(pcie->dev, "0x%08x 0x%016llx..0x%016llx -> 0x%016llx\n",
|
||||
range.flags, range.cpu_addr, end, range.pci_addr);
|
||||
|
||||
err = rcar_pcie_inbound_ranges(pcie, &range, &index);
|
||||
resource_list_for_each_entry(entry, &bridge->dma_ranges) {
|
||||
err = rcar_pcie_inbound_ranges(pcie, entry, &index);
|
||||
if (err)
|
||||
return err;
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return err;
|
||||
}
|
||||
|
||||
static const struct of_device_id rcar_pcie_of_match[] = {
|
||||
@ -1162,7 +1149,7 @@ static int rcar_pcie_probe(struct platform_device *pdev)
|
||||
goto err_unmap_msi_irqs;
|
||||
}
|
||||
|
||||
err = rcar_pcie_parse_map_dma_ranges(pcie, dev->of_node);
|
||||
err = rcar_pcie_parse_map_dma_ranges(pcie);
|
||||
if (err)
|
||||
goto err_clk_disable;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user