Skip to content

Commit 070d7d7

Browse files
robherringLorenzo Pieralisi
authored andcommitted
PCI: v3-semi: Use inbound resources for setup
Now that the helpers provide the inbound resources in the host bridge 'dma_ranges' resource list, convert the v3-semi 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]> Reviewed-by: Andrew Murray <[email protected]> Reviewed-by: Linus Walleij <[email protected]> Cc: Lorenzo Pieralisi <[email protected]> Cc: Bjorn Helgaas <[email protected]>
1 parent ea4f718 commit 070d7d7

File tree

1 file changed

+16
-22
lines changed

1 file changed

+16
-22
lines changed

drivers/pci/controller/pci-v3-semi.c

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -598,28 +598,30 @@ static int v3_pci_setup_resource(struct v3_pci *v3,
598598
}
599599

600600
static int v3_get_dma_range_config(struct v3_pci *v3,
601-
struct of_pci_range *range,
601+
struct resource_entry *entry,
602602
u32 *pci_base, u32 *pci_map)
603603
{
604604
struct device *dev = v3->dev;
605-
u64 cpu_end = range->cpu_addr + range->size - 1;
606-
u64 pci_end = range->pci_addr + range->size - 1;
605+
u64 cpu_addr = entry->res->start;
606+
u64 cpu_end = entry->res->end;
607+
u64 pci_end = cpu_end - entry->offset;
608+
u64 pci_addr = entry->res->start - entry->offset;
607609
u32 val;
608610

609-
if (range->pci_addr & ~V3_PCI_BASE_M_ADR_BASE) {
611+
if (pci_addr & ~V3_PCI_BASE_M_ADR_BASE) {
610612
dev_err(dev, "illegal range, only PCI bits 31..20 allowed\n");
611613
return -EINVAL;
612614
}
613-
val = ((u32)range->pci_addr) & V3_PCI_BASE_M_ADR_BASE;
615+
val = ((u32)pci_addr) & V3_PCI_BASE_M_ADR_BASE;
614616
*pci_base = val;
615617

616-
if (range->cpu_addr & ~V3_PCI_MAP_M_MAP_ADR) {
618+
if (cpu_addr & ~V3_PCI_MAP_M_MAP_ADR) {
617619
dev_err(dev, "illegal range, only CPU bits 31..20 allowed\n");
618620
return -EINVAL;
619621
}
620-
val = ((u32)range->cpu_addr) & V3_PCI_MAP_M_MAP_ADR;
622+
val = ((u32)cpu_addr) & V3_PCI_MAP_M_MAP_ADR;
621623

622-
switch (range->size) {
624+
switch (resource_size(entry->res)) {
623625
case SZ_1M:
624626
val |= V3_LB_BASE_ADR_SIZE_1MB;
625627
break;
@@ -667,8 +669,8 @@ static int v3_get_dma_range_config(struct v3_pci *v3,
667669
dev_dbg(dev,
668670
"DMA MEM CPU: 0x%016llx -> 0x%016llx => "
669671
"PCI: 0x%016llx -> 0x%016llx base %08x map %08x\n",
670-
range->cpu_addr, cpu_end,
671-
range->pci_addr, pci_end,
672+
cpu_addr, cpu_end,
673+
pci_addr, pci_end,
672674
*pci_base, *pci_map);
673675

674676
return 0;
@@ -677,24 +679,16 @@ static int v3_get_dma_range_config(struct v3_pci *v3,
677679
static int v3_pci_parse_map_dma_ranges(struct v3_pci *v3,
678680
struct device_node *np)
679681
{
680-
struct of_pci_range range;
681-
struct of_pci_range_parser parser;
682+
struct pci_host_bridge *bridge = pci_host_bridge_from_priv(v3);
682683
struct device *dev = v3->dev;
684+
struct resource_entry *entry;
683685
int i = 0;
684686

685-
if (of_pci_dma_range_parser_init(&parser, np)) {
686-
dev_err(dev, "missing dma-ranges property\n");
687-
return -EINVAL;
688-
}
689-
690-
/*
691-
* Get the dma-ranges from the device tree
692-
*/
693-
for_each_of_pci_range(&parser, &range) {
687+
resource_list_for_each_entry(entry, &bridge->dma_ranges) {
694688
int ret;
695689
u32 pci_base, pci_map;
696690

697-
ret = v3_get_dma_range_config(v3, &range, &pci_base, &pci_map);
691+
ret = v3_get_dma_range_config(v3, entry, &pci_base, &pci_map);
698692
if (ret)
699693
return ret;
700694

0 commit comments

Comments
 (0)