Skip to content

Commit fc984b9

Browse files
authored
Backport RTL8125D (rev C, XID 688) support (#4011)
* Backport RTL8125D (rev C, XID 688) support Apply mainline patch adding support for NIC present e.g. on ASUS NUC 14 Essential. Fixes #3880 * Update buildroot to add RTL8125D firmware * buildroot 4cd211162d...5379c358bf (1): > linux-firmware: add RTL8125D firmware
1 parent 349b7e4 commit fc984b9

2 files changed

Lines changed: 155 additions & 1 deletion

File tree

buildroot

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
From f0fb974644a132ecc4bd2dc5cce9622435d0ec13 Mon Sep 17 00:00:00 2001
2+
From: Heiner Kallweit <hkallweit1@gmail.com>
3+
Date: Thu, 24 Oct 2024 22:42:33 +0200
4+
Subject: [PATCH] r8169: add support for RTL8125D
5+
MIME-Version: 1.0
6+
Content-Type: text/plain; charset=UTF-8
7+
Content-Transfer-Encoding: 8bit
8+
9+
This adds support for new chip version RTL8125D, which can be found on
10+
boards like Gigabyte X870E AORUS ELITE WIFI7. Firmware rtl8125d-1.fw
11+
for this chip version is available in linux-firmware already.
12+
13+
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
14+
Reviewed-by: Simon Horman <horms@kernel.org>
15+
Link: https://patch.msgid.link/d0306912-e88e-4c25-8b5d-545ae8834c0c@gmail.com
16+
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
17+
Upstream: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=f75d1fbe7809bc5ed134204b920fd9e2fc5db1df
18+
Signed-off-by: Jan Čermák <sairon@sairon.cz>
19+
---
20+
drivers/net/ethernet/realtek/r8169.h | 1 +
21+
drivers/net/ethernet/realtek/r8169_main.c | 23 +++++++++++++------
22+
.../net/ethernet/realtek/r8169_phy_config.c | 10 ++++++++
23+
3 files changed, 27 insertions(+), 7 deletions(-)
24+
25+
diff --git a/drivers/net/ethernet/realtek/r8169.h b/drivers/net/ethernet/realtek/r8169.h
26+
index e2db944e6fa8b..be4c9622618d8 100644
27+
--- a/drivers/net/ethernet/realtek/r8169.h
28+
+++ b/drivers/net/ethernet/realtek/r8169.h
29+
@@ -68,6 +68,7 @@ enum mac_version {
30+
/* support for RTL_GIGA_MAC_VER_60 has been removed */
31+
RTL_GIGA_MAC_VER_61,
32+
RTL_GIGA_MAC_VER_63,
33+
+ RTL_GIGA_MAC_VER_64,
34+
RTL_GIGA_MAC_VER_65,
35+
RTL_GIGA_MAC_VER_66,
36+
RTL_GIGA_MAC_NONE
37+
diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c
38+
index 5ed2818bac257..1cbde7ebd6f30 100644
39+
--- a/drivers/net/ethernet/realtek/r8169_main.c
40+
+++ b/drivers/net/ethernet/realtek/r8169_main.c
41+
@@ -55,6 +55,7 @@
42+
#define FIRMWARE_8107E_2 "rtl_nic/rtl8107e-2.fw"
43+
#define FIRMWARE_8125A_3 "rtl_nic/rtl8125a-3.fw"
44+
#define FIRMWARE_8125B_2 "rtl_nic/rtl8125b-2.fw"
45+
+#define FIRMWARE_8125D_1 "rtl_nic/rtl8125d-1.fw"
46+
#define FIRMWARE_8126A_2 "rtl_nic/rtl8126a-2.fw"
47+
#define FIRMWARE_8126A_3 "rtl_nic/rtl8126a-3.fw"
48+
49+
@@ -138,6 +139,7 @@ static const struct {
50+
[RTL_GIGA_MAC_VER_61] = {"RTL8125A", FIRMWARE_8125A_3},
51+
/* reserve 62 for CFG_METHOD_4 in the vendor driver */
52+
[RTL_GIGA_MAC_VER_63] = {"RTL8125B", FIRMWARE_8125B_2},
53+
+ [RTL_GIGA_MAC_VER_64] = {"RTL8125D", FIRMWARE_8125D_1},
54+
[RTL_GIGA_MAC_VER_65] = {"RTL8126A", FIRMWARE_8126A_2},
55+
[RTL_GIGA_MAC_VER_66] = {"RTL8126A", FIRMWARE_8126A_3},
56+
};
57+
@@ -707,6 +709,7 @@ MODULE_FIRMWARE(FIRMWARE_8168FP_3);
58+
MODULE_FIRMWARE(FIRMWARE_8107E_2);
59+
MODULE_FIRMWARE(FIRMWARE_8125A_3);
60+
MODULE_FIRMWARE(FIRMWARE_8125B_2);
61+
+MODULE_FIRMWARE(FIRMWARE_8125D_1);
62+
MODULE_FIRMWARE(FIRMWARE_8126A_2);
63+
MODULE_FIRMWARE(FIRMWARE_8126A_3);
64+
65+
@@ -2098,10 +2101,7 @@ static void rtl_set_eee_txidle_timer(struct rtl8169_private *tp)
66+
tp->tx_lpi_timer = timer_val;
67+
r8168_mac_ocp_write(tp, 0xe048, timer_val);
68+
break;
69+
- case RTL_GIGA_MAC_VER_61:
70+
- case RTL_GIGA_MAC_VER_63:
71+
- case RTL_GIGA_MAC_VER_65:
72+
- case RTL_GIGA_MAC_VER_66:
73+
+ case RTL_GIGA_MAC_VER_61 ... RTL_GIGA_MAC_VER_66:
74+
tp->tx_lpi_timer = timer_val;
75+
RTL_W16(tp, EEE_TXIDLE_TIMER_8125, timer_val);
76+
break;
77+
@@ -2233,6 +2233,9 @@ static enum mac_version rtl8169_get_mac_version(u16 xid, bool gmii)
78+
{ 0x7cf, 0x64a, RTL_GIGA_MAC_VER_66 },
79+
{ 0x7cf, 0x649, RTL_GIGA_MAC_VER_65 },
80+
81+
+ /* 8125D family. */
82+
+ { 0x7cf, 0x688, RTL_GIGA_MAC_VER_64 },
83+
+
84+
/* 8125B family. */
85+
{ 0x7cf, 0x641, RTL_GIGA_MAC_VER_63 },
86+
87+
@@ -2500,9 +2503,7 @@ static void rtl_init_rxcfg(struct rtl8169_private *tp)
88+
case RTL_GIGA_MAC_VER_61:
89+
RTL_W32(tp, RxConfig, RX_FETCH_DFLT_8125 | RX_DMA_BURST);
90+
break;
91+
- case RTL_GIGA_MAC_VER_63:
92+
- case RTL_GIGA_MAC_VER_65:
93+
- case RTL_GIGA_MAC_VER_66:
94+
+ case RTL_GIGA_MAC_VER_63 ... RTL_GIGA_MAC_VER_66:
95+
RTL_W32(tp, RxConfig, RX_FETCH_DFLT_8125 | RX_DMA_BURST |
96+
RX_PAUSE_SLOT_ON);
97+
break;
98+
@@ -3814,6 +3815,12 @@ static void rtl_hw_start_8125b(struct rtl8169_private *tp)
99+
rtl_hw_start_8125_common(tp);
100+
}
101+
102+
+static void rtl_hw_start_8125d(struct rtl8169_private *tp)
103+
+{
104+
+ rtl_set_def_aspm_entry_latency(tp);
105+
+ rtl_hw_start_8125_common(tp);
106+
+}
107+
+
108+
static void rtl_hw_start_8126a(struct rtl8169_private *tp)
109+
{
110+
rtl_set_def_aspm_entry_latency(tp);
111+
@@ -3862,6 +3869,7 @@ static void rtl_hw_config(struct rtl8169_private *tp)
112+
[RTL_GIGA_MAC_VER_53] = rtl_hw_start_8117,
113+
[RTL_GIGA_MAC_VER_61] = rtl_hw_start_8125a_2,
114+
[RTL_GIGA_MAC_VER_63] = rtl_hw_start_8125b,
115+
+ [RTL_GIGA_MAC_VER_64] = rtl_hw_start_8125d,
116+
[RTL_GIGA_MAC_VER_65] = rtl_hw_start_8126a,
117+
[RTL_GIGA_MAC_VER_66] = rtl_hw_start_8126a,
118+
};
119+
@@ -3879,6 +3887,7 @@ static void rtl_hw_start_8125(struct rtl8169_private *tp)
120+
/* disable interrupt coalescing */
121+
switch (tp->mac_version) {
122+
case RTL_GIGA_MAC_VER_61:
123+
+ case RTL_GIGA_MAC_VER_64:
124+
for (i = 0xa00; i < 0xb00; i += 4)
125+
RTL_W32(tp, i, 0);
126+
break;
127+
diff --git a/drivers/net/ethernet/realtek/r8169_phy_config.c b/drivers/net/ethernet/realtek/r8169_phy_config.c
128+
index cf29b12084826..d09b2a41cd062 100644
129+
--- a/drivers/net/ethernet/realtek/r8169_phy_config.c
130+
+++ b/drivers/net/ethernet/realtek/r8169_phy_config.c
131+
@@ -1104,6 +1104,15 @@ static void rtl8125b_hw_phy_config(struct rtl8169_private *tp,
132+
rtl8125b_config_eee_phy(phydev);
133+
}
134+
135+
+static void rtl8125d_hw_phy_config(struct rtl8169_private *tp,
136+
+ struct phy_device *phydev)
137+
+{
138+
+ r8169_apply_firmware(tp);
139+
+ rtl8125_legacy_force_mode(phydev);
140+
+ rtl8168g_disable_aldps(phydev);
141+
+ rtl8125b_config_eee_phy(phydev);
142+
+}
143+
+
144+
static void rtl8126a_hw_phy_config(struct rtl8169_private *tp,
145+
struct phy_device *phydev)
146+
{
147+
@@ -1160,6 +1169,7 @@ void r8169_hw_phy_config(struct rtl8169_private *tp, struct phy_device *phydev,
148+
[RTL_GIGA_MAC_VER_53] = rtl8117_hw_phy_config,
149+
[RTL_GIGA_MAC_VER_61] = rtl8125a_2_hw_phy_config,
150+
[RTL_GIGA_MAC_VER_63] = rtl8125b_hw_phy_config,
151+
+ [RTL_GIGA_MAC_VER_64] = rtl8125d_hw_phy_config,
152+
[RTL_GIGA_MAC_VER_65] = rtl8126a_hw_phy_config,
153+
[RTL_GIGA_MAC_VER_66] = rtl8126a_hw_phy_config,
154+
};

0 commit comments

Comments
 (0)