1515#include <linux/irqchip/chained_irq.h>
1616#include <linux/irqdomain.h>
1717#include <linux/kernel.h>
18+ #include <linux/mfd/syscon.h>
1819#include <linux/module.h>
1920#include <linux/msi.h>
2021#include <linux/of_device.h>
2425#include <linux/platform_device.h>
2526#include <linux/pm_domain.h>
2627#include <linux/pm_runtime.h>
28+ #include <linux/regmap.h>
2729#include <linux/reset.h>
2830
2931#include "../pci.h"
@@ -352,7 +354,8 @@ static int mtk_pcie_set_trans_table(struct mtk_gen3_pcie *pcie,
352354
353355 dev_dbg (pcie -> dev , "set %s trans window[%d]: cpu_addr = %#llx, pci_addr = %#llx, size = %#llx\n" ,
354356 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 );
356359
357360 cpu_addr += table_size ;
358361 pci_addr += table_size ;
@@ -887,7 +890,8 @@ static int mtk_pcie_parse_port(struct mtk_gen3_pcie *pcie)
887890 for (i = 0 ; i < num_resets ; i ++ )
888891 pcie -> phy_resets [i ].id = pcie -> soc -> phy_resets .id [i ];
889892
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 );
891895 if (ret ) {
892896 dev_err (dev , "failed to get PHY bulk reset\n" );
893897 return ret ;
@@ -917,34 +921,58 @@ static int mtk_pcie_parse_port(struct mtk_gen3_pcie *pcie)
917921 return pcie -> num_clks ;
918922 }
919923
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 ))
923928 dev_warn (dev , "invalid num-lanes, using controller defaults\n" );
924- else
929+ else
925930 pcie -> num_lanes = num_lanes ;
926- }
931+ }
927932
928933 return 0 ;
929934}
930935
931936static int mtk_pcie_en7581_power_up (struct mtk_gen3_pcie * pcie )
932937{
938+ struct pci_host_bridge * host = pci_host_bridge_from_priv (pcie );
933939 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 ;
934944 int err ;
935- u32 val ;
936945
937946 /*
938947 * The controller may have been left out of reset by the bootloader
939948 * so make sure that we get a clean start by asserting resets here.
940949 */
941950 reset_control_bulk_assert (pcie -> soc -> phy_resets .num_resets ,
942951 pcie -> phy_resets );
943- reset_control_assert (pcie -> mac_reset );
944952
945953 /* Wait for the time needed to complete the reset lines assert. */
946954 msleep (PCIE_EN7581_RESET_TIME_MS );
947955
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+
948976 /*
949977 * Unlike the other MediaTek Gen3 controllers, the Airoha EN7581
950978 * 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)
961989 goto err_phy_on ;
962990 }
963991
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 );
965994 if (err ) {
966995 dev_err (dev , "failed to deassert PHYs\n" );
967996 goto err_phy_deassert ;
@@ -1006,7 +1035,8 @@ static int mtk_pcie_en7581_power_up(struct mtk_gen3_pcie *pcie)
10061035err_clk_prepare_enable :
10071036 pm_runtime_put_sync (dev );
10081037 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 );
10101040err_phy_deassert :
10111041 phy_power_off (pcie -> phy );
10121042err_phy_on :
@@ -1030,7 +1060,8 @@ static int mtk_pcie_power_up(struct mtk_gen3_pcie *pcie)
10301060 usleep_range (PCIE_MTK_RESET_TIME_US , 2 * PCIE_MTK_RESET_TIME_US );
10311061
10321062 /* 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 );
10341065 if (err ) {
10351066 dev_err (dev , "failed to deassert PHYs\n" );
10361067 return err ;
@@ -1070,7 +1101,8 @@ static int mtk_pcie_power_up(struct mtk_gen3_pcie *pcie)
10701101err_phy_on :
10711102 phy_exit (pcie -> phy );
10721103err_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 );
10741106
10751107 return err ;
10761108}
@@ -1085,7 +1117,8 @@ static void mtk_pcie_power_down(struct mtk_gen3_pcie *pcie)
10851117
10861118 phy_power_off (pcie -> phy );
10871119 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 );
10891122}
10901123
10911124static 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)
11121145 * Deassert the line in order to avoid unbalance in deassert_count
11131146 * counter since the bulk is shared.
11141147 */
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 );
11161150
11171151 /* Don't touch the hardware registers before power up */
11181152 err = pcie -> soc -> power_up (pcie );
0 commit comments