Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

r8169: add support for RTL8125BP rev.b

Add support for RTL8125BP rev.b. Its XID is 0x689. This chip supports
DASH and its dash type is "RTL_DASH_25_BP".

Signed-off-by: ChunHao Lin <hau@realtek.com>
Reviewed-by: Heiner Kallweit <hkallweit1@gmail.com>
Link: https://patch.msgid.link/20250107064355.104711-1-hau@realtek.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>

authored by

ChunHao Lin and committed by
Paolo Abeni
b11bff90 31eae6d9

+54
+1
drivers/net/ethernet/realtek/r8169.h
··· 70 70 RTL_GIGA_MAC_VER_63, 71 71 RTL_GIGA_MAC_VER_64, 72 72 RTL_GIGA_MAC_VER_65, 73 + RTL_GIGA_MAC_VER_66, 73 74 RTL_GIGA_MAC_VER_70, 74 75 RTL_GIGA_MAC_VER_71, 75 76 RTL_GIGA_MAC_NONE
+30
drivers/net/ethernet/realtek/r8169_main.c
··· 58 58 #define FIRMWARE_8125B_2 "rtl_nic/rtl8125b-2.fw" 59 59 #define FIRMWARE_8125D_1 "rtl_nic/rtl8125d-1.fw" 60 60 #define FIRMWARE_8125D_2 "rtl_nic/rtl8125d-2.fw" 61 + #define FIRMWARE_8125BP_2 "rtl_nic/rtl8125bp-2.fw" 61 62 #define FIRMWARE_8126A_2 "rtl_nic/rtl8126a-2.fw" 62 63 #define FIRMWARE_8126A_3 "rtl_nic/rtl8126a-3.fw" 63 64 ··· 143 142 [RTL_GIGA_MAC_VER_63] = {"RTL8125B", FIRMWARE_8125B_2}, 144 143 [RTL_GIGA_MAC_VER_64] = {"RTL8125D", FIRMWARE_8125D_1}, 145 144 [RTL_GIGA_MAC_VER_65] = {"RTL8125D", FIRMWARE_8125D_2}, 145 + [RTL_GIGA_MAC_VER_66] = {"RTL8125BP", FIRMWARE_8125BP_2}, 146 146 [RTL_GIGA_MAC_VER_70] = {"RTL8126A", FIRMWARE_8126A_2}, 147 147 [RTL_GIGA_MAC_VER_71] = {"RTL8126A", FIRMWARE_8126A_3}, 148 148 }; ··· 634 632 RTL_DASH_NONE, 635 633 RTL_DASH_DP, 636 634 RTL_DASH_EP, 635 + RTL_DASH_25_BP, 637 636 }; 638 637 639 638 struct rtl8169_private { ··· 712 709 MODULE_FIRMWARE(FIRMWARE_8125B_2); 713 710 MODULE_FIRMWARE(FIRMWARE_8125D_1); 714 711 MODULE_FIRMWARE(FIRMWARE_8125D_2); 712 + MODULE_FIRMWARE(FIRMWARE_8125BP_2); 715 713 MODULE_FIRMWARE(FIRMWARE_8126A_2); 716 714 MODULE_FIRMWARE(FIRMWARE_8126A_3); 717 715 ··· 1365 1361 rtl_loop_wait_high(tp, &rtl_ep_ocp_read_cond, 10000, 30); 1366 1362 } 1367 1363 1364 + static void rtl8125bp_driver_start(struct rtl8169_private *tp) 1365 + { 1366 + r8168ep_ocp_write(tp, 0x01, 0x14, OOB_CMD_DRIVER_START); 1367 + r8168ep_ocp_write(tp, 0x01, 0x18, 0x00); 1368 + r8168ep_ocp_write(tp, 0x01, 0x10, 0x01); 1369 + } 1370 + 1368 1371 static void rtl8168_driver_start(struct rtl8169_private *tp) 1369 1372 { 1370 1373 if (tp->dash_type == RTL_DASH_DP) 1371 1374 rtl8168dp_driver_start(tp); 1375 + else if (tp->dash_type == RTL_DASH_25_BP) 1376 + rtl8125bp_driver_start(tp); 1372 1377 else 1373 1378 rtl8168ep_driver_start(tp); 1374 1379 } ··· 1398 1385 rtl_loop_wait_low(tp, &rtl_ep_ocp_read_cond, 10000, 10); 1399 1386 } 1400 1387 1388 + static void rtl8125bp_driver_stop(struct rtl8169_private *tp) 1389 + { 1390 + r8168ep_ocp_write(tp, 0x01, 0x14, OOB_CMD_DRIVER_STOP); 1391 + r8168ep_ocp_write(tp, 0x01, 0x18, 0x00); 1392 + r8168ep_ocp_write(tp, 0x01, 0x10, 0x01); 1393 + } 1394 + 1401 1395 static void rtl8168_driver_stop(struct rtl8169_private *tp) 1402 1396 { 1403 1397 if (tp->dash_type == RTL_DASH_DP) 1404 1398 rtl8168dp_driver_stop(tp); 1399 + else if (tp->dash_type == RTL_DASH_25_BP) 1400 + rtl8125bp_driver_stop(tp); 1405 1401 else 1406 1402 rtl8168ep_driver_stop(tp); 1407 1403 } ··· 1433 1411 case RTL_DASH_DP: 1434 1412 return r8168dp_check_dash(tp); 1435 1413 case RTL_DASH_EP: 1414 + case RTL_DASH_25_BP: 1436 1415 return r8168ep_check_dash(tp); 1437 1416 default: 1438 1417 return false; ··· 1448 1425 return RTL_DASH_DP; 1449 1426 case RTL_GIGA_MAC_VER_51 ... RTL_GIGA_MAC_VER_53: 1450 1427 return RTL_DASH_EP; 1428 + case RTL_GIGA_MAC_VER_66: 1429 + return RTL_DASH_25_BP; 1451 1430 default: 1452 1431 return RTL_DASH_NONE; 1453 1432 } ··· 2285 2260 /* 8126A family. */ 2286 2261 { 0x7cf, 0x64a, RTL_GIGA_MAC_VER_71 }, 2287 2262 { 0x7cf, 0x649, RTL_GIGA_MAC_VER_70 }, 2263 + 2264 + /* 8125BP family. */ 2265 + { 0x7cf, 0x681, RTL_GIGA_MAC_VER_66 }, 2288 2266 2289 2267 /* 8125D family. */ 2290 2268 { 0x7cf, 0x689, RTL_GIGA_MAC_VER_65 }, ··· 3870 3842 [RTL_GIGA_MAC_VER_63] = rtl_hw_start_8125b, 3871 3843 [RTL_GIGA_MAC_VER_64] = rtl_hw_start_8125d, 3872 3844 [RTL_GIGA_MAC_VER_65] = rtl_hw_start_8125d, 3845 + [RTL_GIGA_MAC_VER_66] = rtl_hw_start_8125d, 3873 3846 [RTL_GIGA_MAC_VER_70] = rtl_hw_start_8126a, 3874 3847 [RTL_GIGA_MAC_VER_71] = rtl_hw_start_8126a, 3875 3848 }; ··· 3890 3861 case RTL_GIGA_MAC_VER_61: 3891 3862 case RTL_GIGA_MAC_VER_64: 3892 3863 case RTL_GIGA_MAC_VER_65: 3864 + case RTL_GIGA_MAC_VER_66: 3893 3865 for (i = 0xa00; i < 0xb00; i += 4) 3894 3866 RTL_W32(tp, i, 0); 3895 3867 break;
+23
drivers/net/ethernet/realtek/r8169_phy_config.c
··· 1102 1102 rtl8125_config_eee_phy(phydev); 1103 1103 } 1104 1104 1105 + static void rtl8125bp_hw_phy_config(struct rtl8169_private *tp, 1106 + struct phy_device *phydev) 1107 + { 1108 + r8169_apply_firmware(tp); 1109 + rtl8168g_enable_gphy_10m(phydev); 1110 + 1111 + r8168g_phy_param(phydev, 0x8010, 0x0800, 0x0000); 1112 + 1113 + phy_write(phydev, 0x1f, 0x0b87); 1114 + phy_write(phydev, 0x16, 0x8088); 1115 + phy_modify(phydev, 0x17, 0xff00, 0x9000); 1116 + phy_write(phydev, 0x16, 0x808f); 1117 + phy_modify(phydev, 0x17, 0xff00, 0x9000); 1118 + phy_write(phydev, 0x1f, 0x0000); 1119 + 1120 + r8168g_phy_param(phydev, 0x8174, 0x2000, 0x1800); 1121 + 1122 + rtl8125_legacy_force_mode(phydev); 1123 + rtl8168g_disable_aldps(phydev); 1124 + rtl8125_config_eee_phy(phydev); 1125 + } 1126 + 1105 1127 static void rtl8126a_hw_phy_config(struct rtl8169_private *tp, 1106 1128 struct phy_device *phydev) 1107 1129 { ··· 1185 1163 [RTL_GIGA_MAC_VER_63] = rtl8125b_hw_phy_config, 1186 1164 [RTL_GIGA_MAC_VER_64] = rtl8125d_hw_phy_config, 1187 1165 [RTL_GIGA_MAC_VER_65] = rtl8125d_hw_phy_config, 1166 + [RTL_GIGA_MAC_VER_66] = rtl8125bp_hw_phy_config, 1188 1167 [RTL_GIGA_MAC_VER_70] = rtl8126a_hw_phy_config, 1189 1168 [RTL_GIGA_MAC_VER_71] = rtl8126a_hw_phy_config, 1190 1169 };