5858#define FIRMWARE_8125B_2 "rtl_nic/rtl8125b-2.fw"
5959#define FIRMWARE_8125D_1 "rtl_nic/rtl8125d-1.fw"
6060#define FIRMWARE_8125D_2 "rtl_nic/rtl8125d-2.fw"
61+ #define FIRMWARE_8125BP_2 "rtl_nic/rtl8125bp-2.fw"
6162#define FIRMWARE_8126A_2 "rtl_nic/rtl8126a-2.fw"
6263#define FIRMWARE_8126A_3 "rtl_nic/rtl8126a-3.fw"
6364
@@ -142,6 +143,7 @@ static const struct {
142143 [RTL_GIGA_MAC_VER_63 ] = {"RTL8125B" , FIRMWARE_8125B_2 },
143144 [RTL_GIGA_MAC_VER_64 ] = {"RTL8125D" , FIRMWARE_8125D_1 },
144145 [RTL_GIGA_MAC_VER_65 ] = {"RTL8125D" , FIRMWARE_8125D_2 },
146+ [RTL_GIGA_MAC_VER_66 ] = {"RTL8125BP" , FIRMWARE_8125BP_2 },
145147 [RTL_GIGA_MAC_VER_70 ] = {"RTL8126A" , FIRMWARE_8126A_2 },
146148 [RTL_GIGA_MAC_VER_71 ] = {"RTL8126A" , FIRMWARE_8126A_3 },
147149};
@@ -632,6 +634,7 @@ enum rtl_dash_type {
632634 RTL_DASH_NONE ,
633635 RTL_DASH_DP ,
634636 RTL_DASH_EP ,
637+ RTL_DASH_25_BP ,
635638};
636639
637640struct rtl8169_private {
@@ -709,6 +712,7 @@ MODULE_FIRMWARE(FIRMWARE_8125A_3);
709712MODULE_FIRMWARE (FIRMWARE_8125B_2 );
710713MODULE_FIRMWARE (FIRMWARE_8125D_1 );
711714MODULE_FIRMWARE (FIRMWARE_8125D_2 );
715+ MODULE_FIRMWARE (FIRMWARE_8125BP_2 );
712716MODULE_FIRMWARE (FIRMWARE_8126A_2 );
713717MODULE_FIRMWARE (FIRMWARE_8126A_3 );
714718
@@ -1361,10 +1365,19 @@ static void rtl8168ep_driver_start(struct rtl8169_private *tp)
13611365 rtl_loop_wait_high (tp , & rtl_ep_ocp_read_cond , 10000 , 30 );
13621366}
13631367
1368+ static void rtl8125bp_driver_start (struct rtl8169_private * tp )
1369+ {
1370+ r8168ep_ocp_write (tp , 0x01 , 0x14 , OOB_CMD_DRIVER_START );
1371+ r8168ep_ocp_write (tp , 0x01 , 0x18 , 0x00 );
1372+ r8168ep_ocp_write (tp , 0x01 , 0x10 , 0x01 );
1373+ }
1374+
13641375static void rtl8168_driver_start (struct rtl8169_private * tp )
13651376{
13661377 if (tp -> dash_type == RTL_DASH_DP )
13671378 rtl8168dp_driver_start (tp );
1379+ else if (tp -> dash_type == RTL_DASH_25_BP )
1380+ rtl8125bp_driver_start (tp );
13681381 else
13691382 rtl8168ep_driver_start (tp );
13701383}
@@ -1385,10 +1398,19 @@ static void rtl8168ep_driver_stop(struct rtl8169_private *tp)
13851398 rtl_loop_wait_low (tp , & rtl_ep_ocp_read_cond , 10000 , 10 );
13861399}
13871400
1401+ static void rtl8125bp_driver_stop (struct rtl8169_private * tp )
1402+ {
1403+ r8168ep_ocp_write (tp , 0x01 , 0x14 , OOB_CMD_DRIVER_STOP );
1404+ r8168ep_ocp_write (tp , 0x01 , 0x18 , 0x00 );
1405+ r8168ep_ocp_write (tp , 0x01 , 0x10 , 0x01 );
1406+ }
1407+
13881408static void rtl8168_driver_stop (struct rtl8169_private * tp )
13891409{
13901410 if (tp -> dash_type == RTL_DASH_DP )
13911411 rtl8168dp_driver_stop (tp );
1412+ else if (tp -> dash_type == RTL_DASH_25_BP )
1413+ rtl8125bp_driver_stop (tp );
13921414 else
13931415 rtl8168ep_driver_stop (tp );
13941416}
@@ -1411,6 +1433,7 @@ static bool rtl_dash_is_enabled(struct rtl8169_private *tp)
14111433 case RTL_DASH_DP :
14121434 return r8168dp_check_dash (tp );
14131435 case RTL_DASH_EP :
1436+ case RTL_DASH_25_BP :
14141437 return r8168ep_check_dash (tp );
14151438 default :
14161439 return false;
@@ -1425,6 +1448,8 @@ static enum rtl_dash_type rtl_get_dash_type(struct rtl8169_private *tp)
14251448 return RTL_DASH_DP ;
14261449 case RTL_GIGA_MAC_VER_51 ... RTL_GIGA_MAC_VER_53 :
14271450 return RTL_DASH_EP ;
1451+ case RTL_GIGA_MAC_VER_66 :
1452+ return RTL_DASH_25_BP ;
14281453 default :
14291454 return RTL_DASH_NONE ;
14301455 }
@@ -2261,6 +2286,9 @@ static enum mac_version rtl8169_get_mac_version(u16 xid, bool gmii)
22612286 { 0x7cf , 0x64a , RTL_GIGA_MAC_VER_71 },
22622287 { 0x7cf , 0x649 , RTL_GIGA_MAC_VER_70 },
22632288
2289+ /* 8125BP family. */
2290+ { 0x7cf , 0x681 , RTL_GIGA_MAC_VER_66 },
2291+
22642292 /* 8125D family. */
22652293 { 0x7cf , 0x689 , RTL_GIGA_MAC_VER_65 },
22662294 { 0x7cf , 0x688 , RTL_GIGA_MAC_VER_64 },
@@ -3842,6 +3870,7 @@ static void rtl_hw_config(struct rtl8169_private *tp)
38423870 [RTL_GIGA_MAC_VER_63 ] = rtl_hw_start_8125b ,
38433871 [RTL_GIGA_MAC_VER_64 ] = rtl_hw_start_8125d ,
38443872 [RTL_GIGA_MAC_VER_65 ] = rtl_hw_start_8125d ,
3873+ [RTL_GIGA_MAC_VER_66 ] = rtl_hw_start_8125d ,
38453874 [RTL_GIGA_MAC_VER_70 ] = rtl_hw_start_8126a ,
38463875 [RTL_GIGA_MAC_VER_71 ] = rtl_hw_start_8126a ,
38473876 };
@@ -3861,6 +3890,7 @@ static void rtl_hw_start_8125(struct rtl8169_private *tp)
38613890 case RTL_GIGA_MAC_VER_61 :
38623891 case RTL_GIGA_MAC_VER_64 :
38633892 case RTL_GIGA_MAC_VER_65 :
3893+ case RTL_GIGA_MAC_VER_66 :
38643894 for (i = 0xa00 ; i < 0xb00 ; i += 4 )
38653895 RTL_W32 (tp , i , 0 );
38663896 break ;
0 commit comments