@@ -806,19 +806,28 @@ static int rockchip_pcie_prog_ib_atu(struct rockchip_pcie *rockchip,
806
806
static int rockchip_pcie_cfg_atu (struct rockchip_pcie * rockchip )
807
807
{
808
808
struct device * dev = rockchip -> dev ;
809
+ struct pci_host_bridge * bridge = pci_host_bridge_from_priv (rockchip );
810
+ struct resource_entry * entry ;
811
+ u64 pci_addr , size ;
809
812
int offset ;
810
813
int err ;
811
814
int reg_no ;
812
815
813
816
rockchip_pcie_cfg_configuration_accesses (rockchip ,
814
817
AXI_WRAPPER_TYPE0_CFG );
818
+ entry = resource_list_first_type (& bridge -> windows , IORESOURCE_MEM );
819
+ if (!entry )
820
+ return - ENODEV ;
821
+
822
+ size = resource_size (entry -> res );
823
+ pci_addr = entry -> res -> start - entry -> offset ;
824
+ rockchip -> msg_bus_addr = pci_addr ;
815
825
816
- for (reg_no = 0 ; reg_no < (rockchip -> mem_size >> 20 ); reg_no ++ ) {
826
+ for (reg_no = 0 ; reg_no < (size >> 20 ); reg_no ++ ) {
817
827
err = rockchip_pcie_prog_ob_atu (rockchip , reg_no + 1 ,
818
828
AXI_WRAPPER_MEM_WRITE ,
819
829
20 - 1 ,
820
- rockchip -> mem_bus_addr +
821
- (reg_no << 20 ),
830
+ pci_addr + (reg_no << 20 ),
822
831
0 );
823
832
if (err ) {
824
833
dev_err (dev , "program RC mem outbound ATU failed\n" );
@@ -832,14 +841,20 @@ static int rockchip_pcie_cfg_atu(struct rockchip_pcie *rockchip)
832
841
return err ;
833
842
}
834
843
835
- offset = rockchip -> mem_size >> 20 ;
836
- for (reg_no = 0 ; reg_no < (rockchip -> io_size >> 20 ); reg_no ++ ) {
844
+ entry = resource_list_first_type (& bridge -> windows , IORESOURCE_IO );
845
+ if (!entry )
846
+ return - ENODEV ;
847
+
848
+ size = resource_size (entry -> res );
849
+ pci_addr = entry -> res -> start - entry -> offset ;
850
+
851
+ offset = size >> 20 ;
852
+ for (reg_no = 0 ; reg_no < (size >> 20 ); reg_no ++ ) {
837
853
err = rockchip_pcie_prog_ob_atu (rockchip ,
838
854
reg_no + 1 + offset ,
839
855
AXI_WRAPPER_IO_WRITE ,
840
856
20 - 1 ,
841
- rockchip -> io_bus_addr +
842
- (reg_no << 20 ),
857
+ pci_addr + (reg_no << 20 ),
843
858
0 );
844
859
if (err ) {
845
860
dev_err (dev , "program RC io outbound ATU failed\n" );
@@ -852,8 +867,7 @@ static int rockchip_pcie_cfg_atu(struct rockchip_pcie *rockchip)
852
867
AXI_WRAPPER_NOR_MSG ,
853
868
20 - 1 , 0 , 0 );
854
869
855
- rockchip -> msg_bus_addr = rockchip -> mem_bus_addr +
856
- ((reg_no + offset ) << 20 );
870
+ rockchip -> msg_bus_addr += ((reg_no + offset ) << 20 );
857
871
return err ;
858
872
}
859
873
@@ -951,7 +965,6 @@ static int rockchip_pcie_probe(struct platform_device *pdev)
951
965
struct pci_bus * bus , * child ;
952
966
struct pci_host_bridge * bridge ;
953
967
struct resource * bus_res ;
954
- struct resource_entry * win ;
955
968
int err ;
956
969
957
970
if (!dev -> of_node )
@@ -997,27 +1010,6 @@ static int rockchip_pcie_probe(struct platform_device *pdev)
997
1010
998
1011
rockchip -> root_bus_nr = bus_res -> start ;
999
1012
1000
- /* Get the I/O and memory ranges from DT */
1001
- resource_list_for_each_entry (win , & bridge -> windows ) {
1002
- switch (resource_type (win -> res )) {
1003
- case IORESOURCE_IO :
1004
- io = win -> res ;
1005
- io -> name = "I/O" ;
1006
- rockchip -> io_size = resource_size (io );
1007
- rockchip -> io_bus_addr = io -> start - win -> offset ;
1008
- rockchip -> io = io ;
1009
- break ;
1010
- case IORESOURCE_MEM :
1011
- mem = win -> res ;
1012
- mem -> name = "MEM" ;
1013
- rockchip -> mem_size = resource_size (mem );
1014
- rockchip -> mem_bus_addr = mem -> start - win -> offset ;
1015
- break ;
1016
- default :
1017
- continue ;
1018
- }
1019
- }
1020
-
1021
1013
err = rockchip_pcie_cfg_atu (rockchip );
1022
1014
if (err )
1023
1015
goto err_remove_irq_domain ;
0 commit comments