@@ -1014,16 +1014,16 @@ static int rcar_pcie_get_resources(struct rcar_pcie *pcie)
1014
1014
}
1015
1015
1016
1016
static int rcar_pcie_inbound_ranges (struct rcar_pcie * pcie ,
1017
- struct of_pci_range * range ,
1017
+ struct resource_entry * entry ,
1018
1018
int * index )
1019
1019
{
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 ;
1024
1024
u32 flags = LAM_64BIT | LAR_ENABLE ;
1025
1025
u64 mask ;
1026
- u64 size ;
1026
+ u64 size = resource_size ( entry -> res ) ;
1027
1027
int idx = * index ;
1028
1028
1029
1029
if (restype & IORESOURCE_PREFETCH )
@@ -1037,9 +1037,7 @@ static int rcar_pcie_inbound_ranges(struct rcar_pcie *pcie,
1037
1037
unsigned long nr_zeros = __ffs64 (cpu_addr );
1038
1038
u64 alignment = 1ULL << nr_zeros ;
1039
1039
1040
- size = min (range -> size , alignment );
1041
- } else {
1042
- size = range -> size ;
1040
+ size = min (size , alignment );
1043
1041
}
1044
1042
/* Hardware supports max 4GiB inbound region */
1045
1043
size = min (size , 1ULL << 32 );
@@ -1078,30 +1076,19 @@ static int rcar_pcie_inbound_ranges(struct rcar_pcie *pcie,
1078
1076
return 0 ;
1079
1077
}
1080
1078
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 )
1083
1080
{
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 ;
1098
1084
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 );
1100
1087
if (err )
1101
- return err ;
1088
+ break ;
1102
1089
}
1103
1090
1104
- return 0 ;
1091
+ return err ;
1105
1092
}
1106
1093
1107
1094
static const struct of_device_id rcar_pcie_of_match [] = {
@@ -1162,7 +1149,7 @@ static int rcar_pcie_probe(struct platform_device *pdev)
1162
1149
goto err_unmap_msi_irqs ;
1163
1150
}
1164
1151
1165
- err = rcar_pcie_parse_map_dma_ranges (pcie , dev -> of_node );
1152
+ err = rcar_pcie_parse_map_dma_ranges (pcie );
1166
1153
if (err )
1167
1154
goto err_clk_disable ;
1168
1155
0 commit comments