@@ -135,6 +135,7 @@ enum mac_version {
135
135
RTL_GIGA_MAC_VER_49 ,
136
136
RTL_GIGA_MAC_VER_50 ,
137
137
RTL_GIGA_MAC_VER_51 ,
138
+ RTL_GIGA_MAC_VER_52 ,
138
139
RTL_GIGA_MAC_VER_60 ,
139
140
RTL_GIGA_MAC_VER_61 ,
140
141
RTL_GIGA_MAC_NONE
@@ -202,6 +203,7 @@ static const struct {
202
203
[RTL_GIGA_MAC_VER_49 ] = {"RTL8168ep/8111ep" },
203
204
[RTL_GIGA_MAC_VER_50 ] = {"RTL8168ep/8111ep" },
204
205
[RTL_GIGA_MAC_VER_51 ] = {"RTL8168ep/8111ep" },
206
+ [RTL_GIGA_MAC_VER_52 ] = {"RTL8117" },
205
207
[RTL_GIGA_MAC_VER_60 ] = {"RTL8125" },
206
208
[RTL_GIGA_MAC_VER_61 ] = {"RTL8125" , FIRMWARE_8125A_3 },
207
209
};
@@ -751,7 +753,7 @@ static bool rtl_is_8168evl_up(struct rtl8169_private *tp)
751
753
{
752
754
return tp -> mac_version >= RTL_GIGA_MAC_VER_34 &&
753
755
tp -> mac_version != RTL_GIGA_MAC_VER_39 &&
754
- tp -> mac_version <= RTL_GIGA_MAC_VER_51 ;
756
+ tp -> mac_version <= RTL_GIGA_MAC_VER_52 ;
755
757
}
756
758
757
759
static bool rtl_supports_eee (struct rtl8169_private * tp )
@@ -1290,9 +1292,7 @@ static void rtl8168_driver_start(struct rtl8169_private *tp)
1290
1292
case RTL_GIGA_MAC_VER_31 :
1291
1293
rtl8168dp_driver_start (tp );
1292
1294
break ;
1293
- case RTL_GIGA_MAC_VER_49 :
1294
- case RTL_GIGA_MAC_VER_50 :
1295
- case RTL_GIGA_MAC_VER_51 :
1295
+ case RTL_GIGA_MAC_VER_49 ... RTL_GIGA_MAC_VER_52 :
1296
1296
rtl8168ep_driver_start (tp );
1297
1297
break ;
1298
1298
default :
@@ -1324,9 +1324,7 @@ static void rtl8168_driver_stop(struct rtl8169_private *tp)
1324
1324
case RTL_GIGA_MAC_VER_31 :
1325
1325
rtl8168dp_driver_stop (tp );
1326
1326
break ;
1327
- case RTL_GIGA_MAC_VER_49 :
1328
- case RTL_GIGA_MAC_VER_50 :
1329
- case RTL_GIGA_MAC_VER_51 :
1327
+ case RTL_GIGA_MAC_VER_49 ... RTL_GIGA_MAC_VER_52 :
1330
1328
rtl8168ep_driver_stop (tp );
1331
1329
break ;
1332
1330
default :
@@ -1354,9 +1352,7 @@ static bool r8168_check_dash(struct rtl8169_private *tp)
1354
1352
case RTL_GIGA_MAC_VER_28 :
1355
1353
case RTL_GIGA_MAC_VER_31 :
1356
1354
return r8168dp_check_dash (tp );
1357
- case RTL_GIGA_MAC_VER_49 :
1358
- case RTL_GIGA_MAC_VER_50 :
1359
- case RTL_GIGA_MAC_VER_51 :
1355
+ case RTL_GIGA_MAC_VER_49 ... RTL_GIGA_MAC_VER_52 :
1360
1356
return r8168ep_check_dash (tp );
1361
1357
default :
1362
1358
return false;
@@ -1531,7 +1527,7 @@ static void __rtl8169_set_wol(struct rtl8169_private *tp, u32 wolopts)
1531
1527
break ;
1532
1528
case RTL_GIGA_MAC_VER_34 :
1533
1529
case RTL_GIGA_MAC_VER_37 :
1534
- case RTL_GIGA_MAC_VER_39 ... RTL_GIGA_MAC_VER_51 :
1530
+ case RTL_GIGA_MAC_VER_39 ... RTL_GIGA_MAC_VER_52 :
1535
1531
options = RTL_R8 (tp , Config2 ) & ~PME_SIGNAL ;
1536
1532
if (wolopts )
1537
1533
options |= PME_SIGNAL ;
@@ -2170,6 +2166,9 @@ static void rtl8169_get_mac_version(struct rtl8169_private *tp)
2170
2166
{ 0x7cf , 0x608 , RTL_GIGA_MAC_VER_60 },
2171
2167
{ 0x7c8 , 0x608 , RTL_GIGA_MAC_VER_61 },
2172
2168
2169
+ /* RTL8117 */
2170
+ { 0x7cf , 0x54a , RTL_GIGA_MAC_VER_52 },
2171
+
2173
2172
/* 8168EP family. */
2174
2173
{ 0x7cf , 0x502 , RTL_GIGA_MAC_VER_51 },
2175
2174
{ 0x7cf , 0x501 , RTL_GIGA_MAC_VER_50 },
@@ -3336,6 +3335,46 @@ static void rtl8168ep_2_hw_phy_config(struct rtl8169_private *tp)
3336
3335
rtl_enable_eee (tp );
3337
3336
}
3338
3337
3338
+ static void rtl8117_hw_phy_config (struct rtl8169_private * tp )
3339
+ {
3340
+ struct phy_device * phydev = tp -> phydev ;
3341
+
3342
+ /* CHN EST parameters adjust - fnet */
3343
+ r8168g_phy_param (phydev , 0x808e , 0xff00 , 0x4800 );
3344
+ r8168g_phy_param (phydev , 0x8090 , 0xff00 , 0xcc00 );
3345
+ r8168g_phy_param (phydev , 0x8092 , 0xff00 , 0xb000 );
3346
+
3347
+ r8168g_phy_param (phydev , 0x8088 , 0xff00 , 0x6000 );
3348
+ r8168g_phy_param (phydev , 0x808b , 0x3f00 , 0x0b00 );
3349
+ r8168g_phy_param (phydev , 0x808d , 0x1f00 , 0x0600 );
3350
+ r8168g_phy_param (phydev , 0x808c , 0xff00 , 0xb000 );
3351
+ r8168g_phy_param (phydev , 0x80a0 , 0xff00 , 0x2800 );
3352
+ r8168g_phy_param (phydev , 0x80a2 , 0xff00 , 0x5000 );
3353
+ r8168g_phy_param (phydev , 0x809b , 0xf800 , 0xb000 );
3354
+ r8168g_phy_param (phydev , 0x809a , 0xff00 , 0x4b00 );
3355
+ r8168g_phy_param (phydev , 0x809d , 0x3f00 , 0x0800 );
3356
+ r8168g_phy_param (phydev , 0x80a1 , 0xff00 , 0x7000 );
3357
+ r8168g_phy_param (phydev , 0x809f , 0x1f00 , 0x0300 );
3358
+ r8168g_phy_param (phydev , 0x809e , 0xff00 , 0x8800 );
3359
+ r8168g_phy_param (phydev , 0x80b2 , 0xff00 , 0x2200 );
3360
+ r8168g_phy_param (phydev , 0x80ad , 0xf800 , 0x9800 );
3361
+ r8168g_phy_param (phydev , 0x80af , 0x3f00 , 0x0800 );
3362
+ r8168g_phy_param (phydev , 0x80b3 , 0xff00 , 0x6f00 );
3363
+ r8168g_phy_param (phydev , 0x80b1 , 0x1f00 , 0x0300 );
3364
+ r8168g_phy_param (phydev , 0x80b0 , 0xff00 , 0x9300 );
3365
+
3366
+ r8168g_phy_param (phydev , 0x8011 , 0x0000 , 0x0800 );
3367
+
3368
+ /* enable GPHY 10M */
3369
+ phy_modify_paged (tp -> phydev , 0x0a44 , 0x11 , 0 , BIT (11 ));
3370
+
3371
+ r8168g_phy_param (phydev , 0x8016 , 0x0000 , 0x0400 );
3372
+
3373
+ rtl8168g_disable_aldps (tp );
3374
+ rtl8168h_config_eee_phy (tp );
3375
+ rtl_enable_eee (tp );
3376
+ }
3377
+
3339
3378
static void rtl8102e_hw_phy_config (struct rtl8169_private * tp )
3340
3379
{
3341
3380
static const struct phy_reg phy_reg_init [] = {
@@ -3564,6 +3603,7 @@ static void rtl_hw_phy_config(struct net_device *dev)
3564
3603
[RTL_GIGA_MAC_VER_49 ] = rtl8168ep_1_hw_phy_config ,
3565
3604
[RTL_GIGA_MAC_VER_50 ] = rtl8168ep_2_hw_phy_config ,
3566
3605
[RTL_GIGA_MAC_VER_51 ] = rtl8168ep_2_hw_phy_config ,
3606
+ [RTL_GIGA_MAC_VER_52 ] = rtl8117_hw_phy_config ,
3567
3607
[RTL_GIGA_MAC_VER_60 ] = rtl8125_1_hw_phy_config ,
3568
3608
[RTL_GIGA_MAC_VER_61 ] = rtl8125_2_hw_phy_config ,
3569
3609
};
@@ -3657,7 +3697,7 @@ static void rtl_wol_suspend_quirk(struct rtl8169_private *tp)
3657
3697
case RTL_GIGA_MAC_VER_32 :
3658
3698
case RTL_GIGA_MAC_VER_33 :
3659
3699
case RTL_GIGA_MAC_VER_34 :
3660
- case RTL_GIGA_MAC_VER_37 ... RTL_GIGA_MAC_VER_51 :
3700
+ case RTL_GIGA_MAC_VER_37 ... RTL_GIGA_MAC_VER_52 :
3661
3701
RTL_W32 (tp , RxConfig , RTL_R32 (tp , RxConfig ) |
3662
3702
AcceptBroadcast | AcceptMulticast | AcceptMyPhys );
3663
3703
break ;
@@ -3693,6 +3733,7 @@ static void rtl_pll_power_down(struct rtl8169_private *tp)
3693
3733
case RTL_GIGA_MAC_VER_48 :
3694
3734
case RTL_GIGA_MAC_VER_50 :
3695
3735
case RTL_GIGA_MAC_VER_51 :
3736
+ case RTL_GIGA_MAC_VER_52 :
3696
3737
case RTL_GIGA_MAC_VER_60 :
3697
3738
case RTL_GIGA_MAC_VER_61 :
3698
3739
RTL_W8 (tp , PMCH , RTL_R8 (tp , PMCH ) & ~0x80 );
@@ -3724,6 +3765,7 @@ static void rtl_pll_power_up(struct rtl8169_private *tp)
3724
3765
case RTL_GIGA_MAC_VER_48 :
3725
3766
case RTL_GIGA_MAC_VER_50 :
3726
3767
case RTL_GIGA_MAC_VER_51 :
3768
+ case RTL_GIGA_MAC_VER_52 :
3727
3769
case RTL_GIGA_MAC_VER_60 :
3728
3770
case RTL_GIGA_MAC_VER_61 :
3729
3771
RTL_W8 (tp , PMCH , RTL_R8 (tp , PMCH ) | 0xc0 );
@@ -3755,7 +3797,7 @@ static void rtl_init_rxcfg(struct rtl8169_private *tp)
3755
3797
case RTL_GIGA_MAC_VER_38 :
3756
3798
RTL_W32 (tp , RxConfig , RX128_INT_EN | RX_MULTI_EN | RX_DMA_BURST );
3757
3799
break ;
3758
- case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_51 :
3800
+ case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_52 :
3759
3801
RTL_W32 (tp , RxConfig , RX128_INT_EN | RX_MULTI_EN | RX_DMA_BURST | RX_EARLY_OFF );
3760
3802
break ;
3761
3803
case RTL_GIGA_MAC_VER_60 ... RTL_GIGA_MAC_VER_61 :
@@ -3941,7 +3983,7 @@ static void rtl8169_hw_reset(struct rtl8169_private *tp)
3941
3983
rtl_udelay_loop_wait_low (tp , & rtl_npq_cond , 20 , 42 * 42 );
3942
3984
break ;
3943
3985
case RTL_GIGA_MAC_VER_34 ... RTL_GIGA_MAC_VER_38 :
3944
- case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_51 :
3986
+ case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_52 :
3945
3987
RTL_W8 (tp , ChipCmd , RTL_R8 (tp , ChipCmd ) | StopReq );
3946
3988
rtl_udelay_loop_wait_high (tp , & rtl_txcfg_empty_cond , 100 , 666 );
3947
3989
break ;
@@ -4787,6 +4829,68 @@ static void rtl_hw_start_8168ep_3(struct rtl8169_private *tp)
4787
4829
rtl_hw_aspm_clkreq_enable (tp , true);
4788
4830
}
4789
4831
4832
+ static void rtl_hw_start_8117 (struct rtl8169_private * tp )
4833
+ {
4834
+ static const struct ephy_info e_info_8117 [] = {
4835
+ { 0x19 , 0x0040 , 0x1100 },
4836
+ { 0x59 , 0x0040 , 0x1100 },
4837
+ };
4838
+ int rg_saw_cnt ;
4839
+
4840
+ rtl8168ep_stop_cmac (tp );
4841
+
4842
+ /* disable aspm and clock request before access ephy */
4843
+ rtl_hw_aspm_clkreq_enable (tp , false);
4844
+ rtl_ephy_init (tp , e_info_8117 );
4845
+
4846
+ rtl_set_fifo_size (tp , 0x08 , 0x10 , 0x02 , 0x06 );
4847
+ rtl8168g_set_pause_thresholds (tp , 0x2f , 0x5f );
4848
+
4849
+ rtl_set_def_aspm_entry_latency (tp );
4850
+
4851
+ rtl_reset_packet_filter (tp );
4852
+
4853
+ rtl_eri_set_bits (tp , 0xd4 , ERIAR_MASK_1111 , 0x1f90 );
4854
+
4855
+ rtl_eri_write (tp , 0x5f0 , ERIAR_MASK_0011 , 0x4f87 );
4856
+
4857
+ RTL_W32 (tp , MISC , RTL_R32 (tp , MISC ) & ~RXDV_GATED_EN );
4858
+
4859
+ rtl_eri_write (tp , 0xc0 , ERIAR_MASK_0011 , 0x0000 );
4860
+ rtl_eri_write (tp , 0xb8 , ERIAR_MASK_0011 , 0x0000 );
4861
+
4862
+ rtl8168_config_eee_mac (tp );
4863
+
4864
+ RTL_W8 (tp , DLLPR , RTL_R8 (tp , DLLPR ) & ~PFM_EN );
4865
+ RTL_W8 (tp , MISC_1 , RTL_R8 (tp , MISC_1 ) & ~PFM_D3COLD_EN );
4866
+
4867
+ RTL_W8 (tp , DLLPR , RTL_R8 (tp , DLLPR ) & ~TX_10M_PS_EN );
4868
+
4869
+ rtl_eri_clear_bits (tp , 0x1b0 , ERIAR_MASK_0011 , BIT (12 ));
4870
+
4871
+ rtl_pcie_state_l2l3_disable (tp );
4872
+
4873
+ rg_saw_cnt = phy_read_paged (tp -> phydev , 0x0c42 , 0x13 ) & 0x3fff ;
4874
+ if (rg_saw_cnt > 0 ) {
4875
+ u16 sw_cnt_1ms_ini ;
4876
+
4877
+ sw_cnt_1ms_ini = (16000000 / rg_saw_cnt ) & 0x0fff ;
4878
+ r8168_mac_ocp_modify (tp , 0xd412 , 0x0fff , sw_cnt_1ms_ini );
4879
+ }
4880
+
4881
+ r8168_mac_ocp_modify (tp , 0xe056 , 0x00f0 , 0x0070 );
4882
+ r8168_mac_ocp_write (tp , 0xea80 , 0x0003 );
4883
+ r8168_mac_ocp_modify (tp , 0xe052 , 0x0000 , 0x0009 );
4884
+ r8168_mac_ocp_modify (tp , 0xd420 , 0x0fff , 0x047f );
4885
+
4886
+ r8168_mac_ocp_write (tp , 0xe63e , 0x0001 );
4887
+ r8168_mac_ocp_write (tp , 0xe63e , 0x0000 );
4888
+ r8168_mac_ocp_write (tp , 0xc094 , 0x0000 );
4889
+ r8168_mac_ocp_write (tp , 0xc09e , 0x0000 );
4890
+
4891
+ rtl_hw_aspm_clkreq_enable (tp , true);
4892
+ }
4893
+
4790
4894
static void rtl_hw_start_8102e_1 (struct rtl8169_private * tp )
4791
4895
{
4792
4896
static const struct ephy_info e_info_8102e_1 [] = {
@@ -5074,6 +5178,7 @@ static void rtl_hw_config(struct rtl8169_private *tp)
5074
5178
[RTL_GIGA_MAC_VER_49 ] = rtl_hw_start_8168ep_1 ,
5075
5179
[RTL_GIGA_MAC_VER_50 ] = rtl_hw_start_8168ep_2 ,
5076
5180
[RTL_GIGA_MAC_VER_51 ] = rtl_hw_start_8168ep_3 ,
5181
+ [RTL_GIGA_MAC_VER_52 ] = rtl_hw_start_8117 ,
5077
5182
[RTL_GIGA_MAC_VER_60 ] = rtl_hw_start_8125_1 ,
5078
5183
[RTL_GIGA_MAC_VER_61 ] = rtl_hw_start_8125_2 ,
5079
5184
};
@@ -6620,7 +6725,7 @@ static void rtl_hw_init_8125(struct rtl8169_private *tp)
6620
6725
static void rtl_hw_initialize (struct rtl8169_private * tp )
6621
6726
{
6622
6727
switch (tp -> mac_version ) {
6623
- case RTL_GIGA_MAC_VER_49 ... RTL_GIGA_MAC_VER_51 :
6728
+ case RTL_GIGA_MAC_VER_49 ... RTL_GIGA_MAC_VER_52 :
6624
6729
rtl8168ep_stop_cmac (tp );
6625
6730
/* fall through */
6626
6731
case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_48 :
0 commit comments