@@ -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
480480static 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
531530static 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