@@ -871,9 +871,25 @@ static const struct phylink_mac_ops mtk_phylink_ops = {
871
871
.mac_enable_tx_lpi = mtk_mac_enable_tx_lpi ,
872
872
};
873
873
874
+ static void mtk_mdio_config (struct mtk_eth * eth )
875
+ {
876
+ u32 val ;
877
+
878
+ /* Configure MDC Divider */
879
+ val = FIELD_PREP (PPSC_MDC_CFG , eth -> mdc_divider );
880
+
881
+ /* Configure MDC Turbo Mode */
882
+ if (mtk_is_netsys_v3_or_greater (eth ))
883
+ mtk_m32 (eth , 0 , MISC_MDC_TURBO , MTK_MAC_MISC_V3 );
884
+ else
885
+ val |= PPSC_MDC_TURBO ;
886
+
887
+ mtk_m32 (eth , PPSC_MDC_CFG , val , MTK_PPSC );
888
+ }
889
+
874
890
static int mtk_mdio_init (struct mtk_eth * eth )
875
891
{
876
- unsigned int max_clk = 2500000 , divider ;
892
+ unsigned int max_clk = 2500000 ;
877
893
struct device_node * mii_np ;
878
894
int ret ;
879
895
u32 val ;
@@ -908,20 +924,9 @@ static int mtk_mdio_init(struct mtk_eth *eth)
908
924
}
909
925
max_clk = val ;
910
926
}
911
- divider = min_t (unsigned int , DIV_ROUND_UP (MDC_MAX_FREQ , max_clk ), 63 );
912
-
913
- /* Configure MDC Turbo Mode */
914
- if (mtk_is_netsys_v3_or_greater (eth ))
915
- mtk_m32 (eth , 0 , MISC_MDC_TURBO , MTK_MAC_MISC_V3 );
916
-
917
- /* Configure MDC Divider */
918
- val = FIELD_PREP (PPSC_MDC_CFG , divider );
919
- if (!mtk_is_netsys_v3_or_greater (eth ))
920
- val |= PPSC_MDC_TURBO ;
921
- mtk_m32 (eth , PPSC_MDC_CFG , val , MTK_PPSC );
922
-
923
- dev_dbg (eth -> dev , "MDC is running on %d Hz\n" , MDC_MAX_FREQ / divider );
924
-
927
+ eth -> mdc_divider = min_t (unsigned int , DIV_ROUND_UP (MDC_MAX_FREQ , max_clk ), 63 );
928
+ mtk_mdio_config (eth );
929
+ dev_dbg (eth -> dev , "MDC is running on %d Hz\n" , MDC_MAX_FREQ / eth -> mdc_divider );
925
930
ret = of_mdiobus_register (eth -> mii_bus , mii_np );
926
931
927
932
err_put_node :
@@ -3974,6 +3979,10 @@ static int mtk_hw_init(struct mtk_eth *eth, bool reset)
3974
3979
else
3975
3980
mtk_hw_reset (eth );
3976
3981
3982
+ /* No MT7628/88 support yet */
3983
+ if (reset && !MTK_HAS_CAPS (eth -> soc -> caps , MTK_SOC_MT7628 ))
3984
+ mtk_mdio_config (eth );
3985
+
3977
3986
if (mtk_is_netsys_v3_or_greater (eth )) {
3978
3987
/* Set FE to PDMAv2 if necessary */
3979
3988
val = mtk_r32 (eth , MTK_FE_GLO_MISC );
0 commit comments