@@ -5289,6 +5289,17 @@ static void rtl_pcie_state_l2l3_enable(struct rtl8169_private *tp, bool enable)
52895289 RTL_W8 (tp , Config3 , data );
52905290}
52915291
5292+ static void rtl_hw_aspm_clkreq_enable (struct rtl8169_private * tp , bool enable )
5293+ {
5294+ if (enable ) {
5295+ RTL_W8 (tp , Config2 , RTL_R8 (tp , Config2 ) | ClkReqEn );
5296+ RTL_W8 (tp , Config5 , RTL_R8 (tp , Config5 ) | ASPM_en );
5297+ } else {
5298+ RTL_W8 (tp , Config2 , RTL_R8 (tp , Config2 ) & ~ClkReqEn );
5299+ RTL_W8 (tp , Config5 , RTL_R8 (tp , Config5 ) & ~ASPM_en );
5300+ }
5301+ }
5302+
52925303static void rtl_hw_start_8168bb (struct rtl8169_private * tp )
52935304{
52945305 RTL_W8 (tp , Config3 , RTL_R8 (tp , Config3 ) & ~Beacon_en );
@@ -5645,9 +5656,9 @@ static void rtl_hw_start_8168g_1(struct rtl8169_private *tp)
56455656 rtl_hw_start_8168g (tp );
56465657
56475658 /* disable aspm and clock request before access ephy */
5648- RTL_W8 (tp , Config2 , RTL_R8 (tp , Config2 ) & ~ClkReqEn );
5649- RTL_W8 (tp , Config5 , RTL_R8 (tp , Config5 ) & ~ASPM_en );
5659+ rtl_hw_aspm_clkreq_enable (tp , false);
56505660 rtl_ephy_init (tp , e_info_8168g_1 , ARRAY_SIZE (e_info_8168g_1 ));
5661+ rtl_hw_aspm_clkreq_enable (tp , true);
56515662}
56525663
56535664static void rtl_hw_start_8168g_2 (struct rtl8169_private * tp )
@@ -5680,9 +5691,9 @@ static void rtl_hw_start_8411_2(struct rtl8169_private *tp)
56805691 rtl_hw_start_8168g (tp );
56815692
56825693 /* disable aspm and clock request before access ephy */
5683- RTL_W8 (tp , Config2 , RTL_R8 (tp , Config2 ) & ~ClkReqEn );
5684- RTL_W8 (tp , Config5 , RTL_R8 (tp , Config5 ) & ~ASPM_en );
5694+ rtl_hw_aspm_clkreq_enable (tp , false);
56855695 rtl_ephy_init (tp , e_info_8411_2 , ARRAY_SIZE (e_info_8411_2 ));
5696+ rtl_hw_aspm_clkreq_enable (tp , true);
56865697}
56875698
56885699static void rtl_hw_start_8168h_1 (struct rtl8169_private * tp )
@@ -5699,8 +5710,7 @@ static void rtl_hw_start_8168h_1(struct rtl8169_private *tp)
56995710 };
57005711
57015712 /* disable aspm and clock request before access ephy */
5702- RTL_W8 (tp , Config2 , RTL_R8 (tp , Config2 ) & ~ClkReqEn );
5703- RTL_W8 (tp , Config5 , RTL_R8 (tp , Config5 ) & ~ASPM_en );
5713+ rtl_hw_aspm_clkreq_enable (tp , false);
57045714 rtl_ephy_init (tp , e_info_8168h_1 , ARRAY_SIZE (e_info_8168h_1 ));
57055715
57065716 RTL_W32 (tp , TxConfig , RTL_R32 (tp , TxConfig ) | TXCFG_AUTO_FIFO );
@@ -5779,6 +5789,8 @@ static void rtl_hw_start_8168h_1(struct rtl8169_private *tp)
57795789 r8168_mac_ocp_write (tp , 0xe63e , 0x0000 );
57805790 r8168_mac_ocp_write (tp , 0xc094 , 0x0000 );
57815791 r8168_mac_ocp_write (tp , 0xc09e , 0x0000 );
5792+
5793+ rtl_hw_aspm_clkreq_enable (tp , true);
57825794}
57835795
57845796static void rtl_hw_start_8168ep (struct rtl8169_private * tp )
@@ -5830,11 +5842,12 @@ static void rtl_hw_start_8168ep_1(struct rtl8169_private *tp)
58305842 };
58315843
58325844 /* disable aspm and clock request before access ephy */
5833- RTL_W8 (tp , Config2 , RTL_R8 (tp , Config2 ) & ~ClkReqEn );
5834- RTL_W8 (tp , Config5 , RTL_R8 (tp , Config5 ) & ~ASPM_en );
5845+ rtl_hw_aspm_clkreq_enable (tp , false);
58355846 rtl_ephy_init (tp , e_info_8168ep_1 , ARRAY_SIZE (e_info_8168ep_1 ));
58365847
58375848 rtl_hw_start_8168ep (tp );
5849+
5850+ rtl_hw_aspm_clkreq_enable (tp , true);
58385851}
58395852
58405853static void rtl_hw_start_8168ep_2 (struct rtl8169_private * tp )
@@ -5846,14 +5859,15 @@ static void rtl_hw_start_8168ep_2(struct rtl8169_private *tp)
58465859 };
58475860
58485861 /* disable aspm and clock request before access ephy */
5849- RTL_W8 (tp , Config2 , RTL_R8 (tp , Config2 ) & ~ClkReqEn );
5850- RTL_W8 (tp , Config5 , RTL_R8 (tp , Config5 ) & ~ASPM_en );
5862+ rtl_hw_aspm_clkreq_enable (tp , false);
58515863 rtl_ephy_init (tp , e_info_8168ep_2 , ARRAY_SIZE (e_info_8168ep_2 ));
58525864
58535865 rtl_hw_start_8168ep (tp );
58545866
58555867 RTL_W8 (tp , DLLPR , RTL_R8 (tp , DLLPR ) & ~PFM_EN );
58565868 RTL_W8 (tp , MISC_1 , RTL_R8 (tp , MISC_1 ) & ~PFM_D3COLD_EN );
5869+
5870+ rtl_hw_aspm_clkreq_enable (tp , true);
58575871}
58585872
58595873static void rtl_hw_start_8168ep_3 (struct rtl8169_private * tp )
@@ -5867,8 +5881,7 @@ static void rtl_hw_start_8168ep_3(struct rtl8169_private *tp)
58675881 };
58685882
58695883 /* disable aspm and clock request before access ephy */
5870- RTL_W8 (tp , Config2 , RTL_R8 (tp , Config2 ) & ~ClkReqEn );
5871- RTL_W8 (tp , Config5 , RTL_R8 (tp , Config5 ) & ~ASPM_en );
5884+ rtl_hw_aspm_clkreq_enable (tp , false);
58725885 rtl_ephy_init (tp , e_info_8168ep_3 , ARRAY_SIZE (e_info_8168ep_3 ));
58735886
58745887 rtl_hw_start_8168ep (tp );
@@ -5888,6 +5901,8 @@ static void rtl_hw_start_8168ep_3(struct rtl8169_private *tp)
58885901 data = r8168_mac_ocp_read (tp , 0xe860 );
58895902 data |= 0x0080 ;
58905903 r8168_mac_ocp_write (tp , 0xe860 , data );
5904+
5905+ rtl_hw_aspm_clkreq_enable (tp , true);
58915906}
58925907
58935908static void rtl_hw_start_8168 (struct rtl8169_private * tp )
0 commit comments