Skip to content

Commit 611f841

Browse files
committed
Merge branch 'remotes/lorenzo/pci/xgene'
- Revert "PCI: xgene: Use inbound resources for setup" (Marc Zyngier) - Revert "PCI: xgene: Fix IB window setup" (Marc Zyngier) * remotes/lorenzo/pci/xgene: PCI: xgene: Revert "PCI: xgene: Fix IB window setup" PCI: xgene: Revert "PCI: xgene: Use inbound resources for setup"
2 parents c1e10d8 + 825da4e commit 611f841

File tree

1 file changed

+23
-12
lines changed

1 file changed

+23
-12
lines changed

drivers/pci/controller/pci-xgene.c

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -464,7 +464,7 @@ static int xgene_pcie_select_ib_reg(u8 *ib_reg_mask, u64 size)
464464
return 1;
465465
}
466466

467-
if ((size > SZ_1K) && (size < SZ_4G) && !(*ib_reg_mask & (1 << 0))) {
467+
if ((size > SZ_1K) && (size < SZ_1T) && !(*ib_reg_mask & (1 << 0))) {
468468
*ib_reg_mask |= (1 << 0);
469469
return 0;
470470
}
@@ -478,28 +478,27 @@ static int xgene_pcie_select_ib_reg(u8 *ib_reg_mask, u64 size)
478478
}
479479

480480
static void xgene_pcie_setup_ib_reg(struct xgene_pcie *port,
481-
struct resource_entry *entry,
482-
u8 *ib_reg_mask)
481+
struct of_pci_range *range, u8 *ib_reg_mask)
483482
{
484483
void __iomem *cfg_base = port->cfg_base;
485484
struct device *dev = port->dev;
486485
void __iomem *bar_addr;
487486
u32 pim_reg;
488-
u64 cpu_addr = entry->res->start;
489-
u64 pci_addr = cpu_addr - entry->offset;
490-
u64 size = resource_size(entry->res);
487+
u64 cpu_addr = range->cpu_addr;
488+
u64 pci_addr = range->pci_addr;
489+
u64 size = range->size;
491490
u64 mask = ~(size - 1) | EN_REG;
492491
u32 flags = PCI_BASE_ADDRESS_MEM_TYPE_64;
493492
u32 bar_low;
494493
int region;
495494

496-
region = xgene_pcie_select_ib_reg(ib_reg_mask, size);
495+
region = xgene_pcie_select_ib_reg(ib_reg_mask, range->size);
497496
if (region < 0) {
498497
dev_warn(dev, "invalid pcie dma-range config\n");
499498
return;
500499
}
501500

502-
if (entry->res->flags & IORESOURCE_PREFETCH)
501+
if (range->flags & IORESOURCE_PREFETCH)
503502
flags |= PCI_BASE_ADDRESS_MEM_PREFETCH;
504503

505504
bar_low = pcie_bar_low_val((u32)cpu_addr, flags);
@@ -530,13 +529,25 @@ static void xgene_pcie_setup_ib_reg(struct xgene_pcie *port,
530529

531530
static int xgene_pcie_parse_map_dma_ranges(struct xgene_pcie *port)
532531
{
533-
struct pci_host_bridge *bridge = pci_host_bridge_from_priv(port);
534-
struct resource_entry *entry;
532+
struct device_node *np = port->node;
533+
struct of_pci_range range;
534+
struct of_pci_range_parser parser;
535+
struct device *dev = port->dev;
535536
u8 ib_reg_mask = 0;
536537

537-
resource_list_for_each_entry(entry, &bridge->dma_ranges)
538-
xgene_pcie_setup_ib_reg(port, entry, &ib_reg_mask);
538+
if (of_pci_dma_range_parser_init(&parser, np)) {
539+
dev_err(dev, "missing dma-ranges property\n");
540+
return -EINVAL;
541+
}
542+
543+
/* Get the dma-ranges from DT */
544+
for_each_of_pci_range(&parser, &range) {
545+
u64 end = range.cpu_addr + range.size - 1;
539546

547+
dev_dbg(dev, "0x%08x 0x%016llx..0x%016llx -> 0x%016llx\n",
548+
range.flags, range.cpu_addr, end, range.pci_addr);
549+
xgene_pcie_setup_ib_reg(port, &range, &ib_reg_mask);
550+
}
540551
return 0;
541552
}
542553

0 commit comments

Comments
 (0)