15
15
#include <linux/irqchip/chained_irq.h>
16
16
#include <linux/irqdomain.h>
17
17
#include <linux/kernel.h>
18
+ #include <linux/mfd/syscon.h>
18
19
#include <linux/module.h>
19
20
#include <linux/msi.h>
20
21
#include <linux/of_device.h>
24
25
#include <linux/platform_device.h>
25
26
#include <linux/pm_domain.h>
26
27
#include <linux/pm_runtime.h>
28
+ #include <linux/regmap.h>
27
29
#include <linux/reset.h>
28
30
29
31
#include "../pci.h"
@@ -352,7 +354,8 @@ static int mtk_pcie_set_trans_table(struct mtk_gen3_pcie *pcie,
352
354
353
355
dev_dbg (pcie -> dev , "set %s trans window[%d]: cpu_addr = %#llx, pci_addr = %#llx, size = %#llx\n" ,
354
356
range_type , * num , (unsigned long long )cpu_addr ,
355
- (unsigned long long )pci_addr , (unsigned long long )table_size );
357
+ (unsigned long long )pci_addr ,
358
+ (unsigned long long )table_size );
356
359
357
360
cpu_addr += table_size ;
358
361
pci_addr += table_size ;
@@ -887,7 +890,8 @@ static int mtk_pcie_parse_port(struct mtk_gen3_pcie *pcie)
887
890
for (i = 0 ; i < num_resets ; i ++ )
888
891
pcie -> phy_resets [i ].id = pcie -> soc -> phy_resets .id [i ];
889
892
890
- ret = devm_reset_control_bulk_get_optional_shared (dev , num_resets , pcie -> phy_resets );
893
+ ret = devm_reset_control_bulk_get_optional_shared (dev , num_resets ,
894
+ pcie -> phy_resets );
891
895
if (ret ) {
892
896
dev_err (dev , "failed to get PHY bulk reset\n" );
893
897
return ret ;
@@ -917,34 +921,58 @@ static int mtk_pcie_parse_port(struct mtk_gen3_pcie *pcie)
917
921
return pcie -> num_clks ;
918
922
}
919
923
920
- ret = of_property_read_u32 (dev -> of_node , "num-lanes" , & num_lanes );
921
- if (ret == 0 ) {
922
- if (num_lanes == 0 || num_lanes > 16 || (num_lanes != 1 && num_lanes % 2 ))
924
+ ret = of_property_read_u32 (dev -> of_node , "num-lanes" , & num_lanes );
925
+ if (ret == 0 ) {
926
+ if (num_lanes == 0 || num_lanes > 16 ||
927
+ (num_lanes != 1 && num_lanes % 2 ))
923
928
dev_warn (dev , "invalid num-lanes, using controller defaults\n" );
924
- else
929
+ else
925
930
pcie -> num_lanes = num_lanes ;
926
- }
931
+ }
927
932
928
933
return 0 ;
929
934
}
930
935
931
936
static int mtk_pcie_en7581_power_up (struct mtk_gen3_pcie * pcie )
932
937
{
938
+ struct pci_host_bridge * host = pci_host_bridge_from_priv (pcie );
933
939
struct device * dev = pcie -> dev ;
940
+ struct resource_entry * entry ;
941
+ struct regmap * pbus_regmap ;
942
+ u32 val , args [2 ], size ;
943
+ resource_size_t addr ;
934
944
int err ;
935
- u32 val ;
936
945
937
946
/*
938
947
* The controller may have been left out of reset by the bootloader
939
948
* so make sure that we get a clean start by asserting resets here.
940
949
*/
941
950
reset_control_bulk_assert (pcie -> soc -> phy_resets .num_resets ,
942
951
pcie -> phy_resets );
943
- reset_control_assert (pcie -> mac_reset );
944
952
945
953
/* Wait for the time needed to complete the reset lines assert. */
946
954
msleep (PCIE_EN7581_RESET_TIME_MS );
947
955
956
+ /*
957
+ * Configure PBus base address and base address mask to allow the
958
+ * hw to detect if a given address is accessible on PCIe controller.
959
+ */
960
+ pbus_regmap = syscon_regmap_lookup_by_phandle_args (dev -> of_node ,
961
+ "mediatek,pbus-csr" ,
962
+ ARRAY_SIZE (args ),
963
+ args );
964
+ if (IS_ERR (pbus_regmap ))
965
+ return PTR_ERR (pbus_regmap );
966
+
967
+ entry = resource_list_first_type (& host -> windows , IORESOURCE_MEM );
968
+ if (!entry )
969
+ return - ENODEV ;
970
+
971
+ addr = entry -> res -> start - entry -> offset ;
972
+ regmap_write (pbus_regmap , args [0 ], lower_32_bits (addr ));
973
+ size = lower_32_bits (resource_size (entry -> res ));
974
+ regmap_write (pbus_regmap , args [1 ], GENMASK (31 , __fls (size )));
975
+
948
976
/*
949
977
* Unlike the other MediaTek Gen3 controllers, the Airoha EN7581
950
978
* requires PHY initialization and power-on before PHY reset deassert.
@@ -961,7 +989,8 @@ static int mtk_pcie_en7581_power_up(struct mtk_gen3_pcie *pcie)
961
989
goto err_phy_on ;
962
990
}
963
991
964
- err = reset_control_bulk_deassert (pcie -> soc -> phy_resets .num_resets , pcie -> phy_resets );
992
+ err = reset_control_bulk_deassert (pcie -> soc -> phy_resets .num_resets ,
993
+ pcie -> phy_resets );
965
994
if (err ) {
966
995
dev_err (dev , "failed to deassert PHYs\n" );
967
996
goto err_phy_deassert ;
@@ -1006,7 +1035,8 @@ static int mtk_pcie_en7581_power_up(struct mtk_gen3_pcie *pcie)
1006
1035
err_clk_prepare_enable :
1007
1036
pm_runtime_put_sync (dev );
1008
1037
pm_runtime_disable (dev );
1009
- reset_control_bulk_assert (pcie -> soc -> phy_resets .num_resets , pcie -> phy_resets );
1038
+ reset_control_bulk_assert (pcie -> soc -> phy_resets .num_resets ,
1039
+ pcie -> phy_resets );
1010
1040
err_phy_deassert :
1011
1041
phy_power_off (pcie -> phy );
1012
1042
err_phy_on :
@@ -1030,7 +1060,8 @@ static int mtk_pcie_power_up(struct mtk_gen3_pcie *pcie)
1030
1060
usleep_range (PCIE_MTK_RESET_TIME_US , 2 * PCIE_MTK_RESET_TIME_US );
1031
1061
1032
1062
/* PHY power on and enable pipe clock */
1033
- err = reset_control_bulk_deassert (pcie -> soc -> phy_resets .num_resets , pcie -> phy_resets );
1063
+ err = reset_control_bulk_deassert (pcie -> soc -> phy_resets .num_resets ,
1064
+ pcie -> phy_resets );
1034
1065
if (err ) {
1035
1066
dev_err (dev , "failed to deassert PHYs\n" );
1036
1067
return err ;
@@ -1070,7 +1101,8 @@ static int mtk_pcie_power_up(struct mtk_gen3_pcie *pcie)
1070
1101
err_phy_on :
1071
1102
phy_exit (pcie -> phy );
1072
1103
err_phy_init :
1073
- reset_control_bulk_assert (pcie -> soc -> phy_resets .num_resets , pcie -> phy_resets );
1104
+ reset_control_bulk_assert (pcie -> soc -> phy_resets .num_resets ,
1105
+ pcie -> phy_resets );
1074
1106
1075
1107
return err ;
1076
1108
}
@@ -1085,7 +1117,8 @@ static void mtk_pcie_power_down(struct mtk_gen3_pcie *pcie)
1085
1117
1086
1118
phy_power_off (pcie -> phy );
1087
1119
phy_exit (pcie -> phy );
1088
- reset_control_bulk_assert (pcie -> soc -> phy_resets .num_resets , pcie -> phy_resets );
1120
+ reset_control_bulk_assert (pcie -> soc -> phy_resets .num_resets ,
1121
+ pcie -> phy_resets );
1089
1122
}
1090
1123
1091
1124
static int mtk_pcie_get_controller_max_link_speed (struct mtk_gen3_pcie * pcie )
@@ -1112,7 +1145,8 @@ static int mtk_pcie_setup(struct mtk_gen3_pcie *pcie)
1112
1145
* Deassert the line in order to avoid unbalance in deassert_count
1113
1146
* counter since the bulk is shared.
1114
1147
*/
1115
- reset_control_bulk_deassert (pcie -> soc -> phy_resets .num_resets , pcie -> phy_resets );
1148
+ reset_control_bulk_deassert (pcie -> soc -> phy_resets .num_resets ,
1149
+ pcie -> phy_resets );
1116
1150
1117
1151
/* Don't touch the hardware registers before power up */
1118
1152
err = pcie -> soc -> power_up (pcie );
0 commit comments