Skip to content

Commit b11bff9

Browse files
RealtekNICPaolo Abeni
authored andcommitted
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>
1 parent 31eae6d commit b11bff9

File tree

3 files changed

+54
-0
lines changed

3 files changed

+54
-0
lines changed

drivers/net/ethernet/realtek/r8169.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ enum mac_version {
7070
RTL_GIGA_MAC_VER_63,
7171
RTL_GIGA_MAC_VER_64,
7272
RTL_GIGA_MAC_VER_65,
73+
RTL_GIGA_MAC_VER_66,
7374
RTL_GIGA_MAC_VER_70,
7475
RTL_GIGA_MAC_VER_71,
7576
RTL_GIGA_MAC_NONE

drivers/net/ethernet/realtek/r8169_main.c

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
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

637640
struct rtl8169_private {
@@ -709,6 +712,7 @@ MODULE_FIRMWARE(FIRMWARE_8125A_3);
709712
MODULE_FIRMWARE(FIRMWARE_8125B_2);
710713
MODULE_FIRMWARE(FIRMWARE_8125D_1);
711714
MODULE_FIRMWARE(FIRMWARE_8125D_2);
715+
MODULE_FIRMWARE(FIRMWARE_8125BP_2);
712716
MODULE_FIRMWARE(FIRMWARE_8126A_2);
713717
MODULE_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+
13641375
static 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+
13881408
static 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;

drivers/net/ethernet/realtek/r8169_phy_config.c

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1102,6 +1102,28 @@ static void rtl8125d_hw_phy_config(struct rtl8169_private *tp,
11021102
rtl8125_config_eee_phy(phydev);
11031103
}
11041104

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+
11051127
static void rtl8126a_hw_phy_config(struct rtl8169_private *tp,
11061128
struct phy_device *phydev)
11071129
{
@@ -1163,6 +1185,7 @@ void r8169_hw_phy_config(struct rtl8169_private *tp, struct phy_device *phydev,
11631185
[RTL_GIGA_MAC_VER_63] = rtl8125b_hw_phy_config,
11641186
[RTL_GIGA_MAC_VER_64] = rtl8125d_hw_phy_config,
11651187
[RTL_GIGA_MAC_VER_65] = rtl8125d_hw_phy_config,
1188+
[RTL_GIGA_MAC_VER_66] = rtl8125bp_hw_phy_config,
11661189
[RTL_GIGA_MAC_VER_70] = rtl8126a_hw_phy_config,
11671190
[RTL_GIGA_MAC_VER_71] = rtl8126a_hw_phy_config,
11681191
};

0 commit comments

Comments
 (0)