@@ -5289,6 +5289,17 @@ static void rtl_pcie_state_l2l3_enable(struct rtl8169_private *tp, bool enable)
5289
5289
RTL_W8 (tp , Config3 , data );
5290
5290
}
5291
5291
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
+
5292
5303
static void rtl_hw_start_8168bb (struct rtl8169_private * tp )
5293
5304
{
5294
5305
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)
5645
5656
rtl_hw_start_8168g (tp );
5646
5657
5647
5658
/* 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);
5650
5660
rtl_ephy_init (tp , e_info_8168g_1 , ARRAY_SIZE (e_info_8168g_1 ));
5661
+ rtl_hw_aspm_clkreq_enable (tp , true);
5651
5662
}
5652
5663
5653
5664
static 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)
5680
5691
rtl_hw_start_8168g (tp );
5681
5692
5682
5693
/* 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);
5685
5695
rtl_ephy_init (tp , e_info_8411_2 , ARRAY_SIZE (e_info_8411_2 ));
5696
+ rtl_hw_aspm_clkreq_enable (tp , true);
5686
5697
}
5687
5698
5688
5699
static 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)
5699
5710
};
5700
5711
5701
5712
/* 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);
5704
5714
rtl_ephy_init (tp , e_info_8168h_1 , ARRAY_SIZE (e_info_8168h_1 ));
5705
5715
5706
5716
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)
5779
5789
r8168_mac_ocp_write (tp , 0xe63e , 0x0000 );
5780
5790
r8168_mac_ocp_write (tp , 0xc094 , 0x0000 );
5781
5791
r8168_mac_ocp_write (tp , 0xc09e , 0x0000 );
5792
+
5793
+ rtl_hw_aspm_clkreq_enable (tp , true);
5782
5794
}
5783
5795
5784
5796
static void rtl_hw_start_8168ep (struct rtl8169_private * tp )
@@ -5830,11 +5842,12 @@ static void rtl_hw_start_8168ep_1(struct rtl8169_private *tp)
5830
5842
};
5831
5843
5832
5844
/* 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);
5835
5846
rtl_ephy_init (tp , e_info_8168ep_1 , ARRAY_SIZE (e_info_8168ep_1 ));
5836
5847
5837
5848
rtl_hw_start_8168ep (tp );
5849
+
5850
+ rtl_hw_aspm_clkreq_enable (tp , true);
5838
5851
}
5839
5852
5840
5853
static 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)
5846
5859
};
5847
5860
5848
5861
/* 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);
5851
5863
rtl_ephy_init (tp , e_info_8168ep_2 , ARRAY_SIZE (e_info_8168ep_2 ));
5852
5864
5853
5865
rtl_hw_start_8168ep (tp );
5854
5866
5855
5867
RTL_W8 (tp , DLLPR , RTL_R8 (tp , DLLPR ) & ~PFM_EN );
5856
5868
RTL_W8 (tp , MISC_1 , RTL_R8 (tp , MISC_1 ) & ~PFM_D3COLD_EN );
5869
+
5870
+ rtl_hw_aspm_clkreq_enable (tp , true);
5857
5871
}
5858
5872
5859
5873
static 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)
5867
5881
};
5868
5882
5869
5883
/* 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);
5872
5885
rtl_ephy_init (tp , e_info_8168ep_3 , ARRAY_SIZE (e_info_8168ep_3 ));
5873
5886
5874
5887
rtl_hw_start_8168ep (tp );
@@ -5888,6 +5901,8 @@ static void rtl_hw_start_8168ep_3(struct rtl8169_private *tp)
5888
5901
data = r8168_mac_ocp_read (tp , 0xe860 );
5889
5902
data |= 0x0080 ;
5890
5903
r8168_mac_ocp_write (tp , 0xe860 , data );
5904
+
5905
+ rtl_hw_aspm_clkreq_enable (tp , true);
5891
5906
}
5892
5907
5893
5908
static void rtl_hw_start_8168 (struct rtl8169_private * tp )
0 commit comments