mirror of
https://github.com/home-assistant/operating-system.git
synced 2026-05-08 09:39:03 +01:00
7b3ce53ab2
As pointed out in [1] by @cdce8p, the RTL8125D has an internal PHY that also needs some changes to be backported. Also, move the patches to more targeted directories is it would be otherwise applied to RPi 6.6 kernel with failures. We can move it back to the top-level patches directory once RPi moves to kernel 6.12. [1] https://github.com/home-assistant/operating-system/issues/3880#issuecomment-2790105503
155 lines
6.0 KiB
Diff
155 lines
6.0 KiB
Diff
From f0fb974644a132ecc4bd2dc5cce9622435d0ec13 Mon Sep 17 00:00:00 2001
|
|
From: Heiner Kallweit <hkallweit1@gmail.com>
|
|
Date: Thu, 24 Oct 2024 22:42:33 +0200
|
|
Subject: [PATCH] r8169: add support for RTL8125D
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
This adds support for new chip version RTL8125D, which can be found on
|
|
boards like Gigabyte X870E AORUS ELITE WIFI7. Firmware rtl8125d-1.fw
|
|
for this chip version is available in linux-firmware already.
|
|
|
|
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
|
|
Reviewed-by: Simon Horman <horms@kernel.org>
|
|
Link: https://patch.msgid.link/d0306912-e88e-4c25-8b5d-545ae8834c0c@gmail.com
|
|
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|
Upstream: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=f75d1fbe7809bc5ed134204b920fd9e2fc5db1df
|
|
Signed-off-by: Jan Čermák <sairon@sairon.cz>
|
|
---
|
|
drivers/net/ethernet/realtek/r8169.h | 1 +
|
|
drivers/net/ethernet/realtek/r8169_main.c | 23 +++++++++++++------
|
|
.../net/ethernet/realtek/r8169_phy_config.c | 10 ++++++++
|
|
3 files changed, 27 insertions(+), 7 deletions(-)
|
|
|
|
diff --git a/drivers/net/ethernet/realtek/r8169.h b/drivers/net/ethernet/realtek/r8169.h
|
|
index e2db944e6fa8b..be4c9622618d8 100644
|
|
--- a/drivers/net/ethernet/realtek/r8169.h
|
|
+++ b/drivers/net/ethernet/realtek/r8169.h
|
|
@@ -68,6 +68,7 @@ enum mac_version {
|
|
/* support for RTL_GIGA_MAC_VER_60 has been removed */
|
|
RTL_GIGA_MAC_VER_61,
|
|
RTL_GIGA_MAC_VER_63,
|
|
+ RTL_GIGA_MAC_VER_64,
|
|
RTL_GIGA_MAC_VER_65,
|
|
RTL_GIGA_MAC_VER_66,
|
|
RTL_GIGA_MAC_NONE
|
|
diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c
|
|
index 5ed2818bac257..1cbde7ebd6f30 100644
|
|
--- a/drivers/net/ethernet/realtek/r8169_main.c
|
|
+++ b/drivers/net/ethernet/realtek/r8169_main.c
|
|
@@ -55,6 +55,7 @@
|
|
#define FIRMWARE_8107E_2 "rtl_nic/rtl8107e-2.fw"
|
|
#define FIRMWARE_8125A_3 "rtl_nic/rtl8125a-3.fw"
|
|
#define FIRMWARE_8125B_2 "rtl_nic/rtl8125b-2.fw"
|
|
+#define FIRMWARE_8125D_1 "rtl_nic/rtl8125d-1.fw"
|
|
#define FIRMWARE_8126A_2 "rtl_nic/rtl8126a-2.fw"
|
|
#define FIRMWARE_8126A_3 "rtl_nic/rtl8126a-3.fw"
|
|
|
|
@@ -138,6 +139,7 @@ static const struct {
|
|
[RTL_GIGA_MAC_VER_61] = {"RTL8125A", FIRMWARE_8125A_3},
|
|
/* reserve 62 for CFG_METHOD_4 in the vendor driver */
|
|
[RTL_GIGA_MAC_VER_63] = {"RTL8125B", FIRMWARE_8125B_2},
|
|
+ [RTL_GIGA_MAC_VER_64] = {"RTL8125D", FIRMWARE_8125D_1},
|
|
[RTL_GIGA_MAC_VER_65] = {"RTL8126A", FIRMWARE_8126A_2},
|
|
[RTL_GIGA_MAC_VER_66] = {"RTL8126A", FIRMWARE_8126A_3},
|
|
};
|
|
@@ -707,6 +709,7 @@ MODULE_FIRMWARE(FIRMWARE_8168FP_3);
|
|
MODULE_FIRMWARE(FIRMWARE_8107E_2);
|
|
MODULE_FIRMWARE(FIRMWARE_8125A_3);
|
|
MODULE_FIRMWARE(FIRMWARE_8125B_2);
|
|
+MODULE_FIRMWARE(FIRMWARE_8125D_1);
|
|
MODULE_FIRMWARE(FIRMWARE_8126A_2);
|
|
MODULE_FIRMWARE(FIRMWARE_8126A_3);
|
|
|
|
@@ -2098,10 +2101,7 @@ static void rtl_set_eee_txidle_timer(struct rtl8169_private *tp)
|
|
tp->tx_lpi_timer = timer_val;
|
|
r8168_mac_ocp_write(tp, 0xe048, timer_val);
|
|
break;
|
|
- case RTL_GIGA_MAC_VER_61:
|
|
- case RTL_GIGA_MAC_VER_63:
|
|
- case RTL_GIGA_MAC_VER_65:
|
|
- case RTL_GIGA_MAC_VER_66:
|
|
+ case RTL_GIGA_MAC_VER_61 ... RTL_GIGA_MAC_VER_66:
|
|
tp->tx_lpi_timer = timer_val;
|
|
RTL_W16(tp, EEE_TXIDLE_TIMER_8125, timer_val);
|
|
break;
|
|
@@ -2233,6 +2233,9 @@ static enum mac_version rtl8169_get_mac_version(u16 xid, bool gmii)
|
|
{ 0x7cf, 0x64a, RTL_GIGA_MAC_VER_66 },
|
|
{ 0x7cf, 0x649, RTL_GIGA_MAC_VER_65 },
|
|
|
|
+ /* 8125D family. */
|
|
+ { 0x7cf, 0x688, RTL_GIGA_MAC_VER_64 },
|
|
+
|
|
/* 8125B family. */
|
|
{ 0x7cf, 0x641, RTL_GIGA_MAC_VER_63 },
|
|
|
|
@@ -2500,9 +2503,7 @@ static void rtl_init_rxcfg(struct rtl8169_private *tp)
|
|
case RTL_GIGA_MAC_VER_61:
|
|
RTL_W32(tp, RxConfig, RX_FETCH_DFLT_8125 | RX_DMA_BURST);
|
|
break;
|
|
- case RTL_GIGA_MAC_VER_63:
|
|
- case RTL_GIGA_MAC_VER_65:
|
|
- case RTL_GIGA_MAC_VER_66:
|
|
+ case RTL_GIGA_MAC_VER_63 ... RTL_GIGA_MAC_VER_66:
|
|
RTL_W32(tp, RxConfig, RX_FETCH_DFLT_8125 | RX_DMA_BURST |
|
|
RX_PAUSE_SLOT_ON);
|
|
break;
|
|
@@ -3814,6 +3815,12 @@ static void rtl_hw_start_8125b(struct rtl8169_private *tp)
|
|
rtl_hw_start_8125_common(tp);
|
|
}
|
|
|
|
+static void rtl_hw_start_8125d(struct rtl8169_private *tp)
|
|
+{
|
|
+ rtl_set_def_aspm_entry_latency(tp);
|
|
+ rtl_hw_start_8125_common(tp);
|
|
+}
|
|
+
|
|
static void rtl_hw_start_8126a(struct rtl8169_private *tp)
|
|
{
|
|
rtl_set_def_aspm_entry_latency(tp);
|
|
@@ -3862,6 +3869,7 @@ static void rtl_hw_config(struct rtl8169_private *tp)
|
|
[RTL_GIGA_MAC_VER_53] = rtl_hw_start_8117,
|
|
[RTL_GIGA_MAC_VER_61] = rtl_hw_start_8125a_2,
|
|
[RTL_GIGA_MAC_VER_63] = rtl_hw_start_8125b,
|
|
+ [RTL_GIGA_MAC_VER_64] = rtl_hw_start_8125d,
|
|
[RTL_GIGA_MAC_VER_65] = rtl_hw_start_8126a,
|
|
[RTL_GIGA_MAC_VER_66] = rtl_hw_start_8126a,
|
|
};
|
|
@@ -3879,6 +3887,7 @@ static void rtl_hw_start_8125(struct rtl8169_private *tp)
|
|
/* disable interrupt coalescing */
|
|
switch (tp->mac_version) {
|
|
case RTL_GIGA_MAC_VER_61:
|
|
+ case RTL_GIGA_MAC_VER_64:
|
|
for (i = 0xa00; i < 0xb00; i += 4)
|
|
RTL_W32(tp, i, 0);
|
|
break;
|
|
diff --git a/drivers/net/ethernet/realtek/r8169_phy_config.c b/drivers/net/ethernet/realtek/r8169_phy_config.c
|
|
index cf29b12084826..d09b2a41cd062 100644
|
|
--- a/drivers/net/ethernet/realtek/r8169_phy_config.c
|
|
+++ b/drivers/net/ethernet/realtek/r8169_phy_config.c
|
|
@@ -1104,6 +1104,15 @@ static void rtl8125b_hw_phy_config(struct rtl8169_private *tp,
|
|
rtl8125b_config_eee_phy(phydev);
|
|
}
|
|
|
|
+static void rtl8125d_hw_phy_config(struct rtl8169_private *tp,
|
|
+ struct phy_device *phydev)
|
|
+{
|
|
+ r8169_apply_firmware(tp);
|
|
+ rtl8125_legacy_force_mode(phydev);
|
|
+ rtl8168g_disable_aldps(phydev);
|
|
+ rtl8125b_config_eee_phy(phydev);
|
|
+}
|
|
+
|
|
static void rtl8126a_hw_phy_config(struct rtl8169_private *tp,
|
|
struct phy_device *phydev)
|
|
{
|
|
@@ -1160,6 +1169,7 @@ void r8169_hw_phy_config(struct rtl8169_private *tp, struct phy_device *phydev,
|
|
[RTL_GIGA_MAC_VER_53] = rtl8117_hw_phy_config,
|
|
[RTL_GIGA_MAC_VER_61] = rtl8125a_2_hw_phy_config,
|
|
[RTL_GIGA_MAC_VER_63] = rtl8125b_hw_phy_config,
|
|
+ [RTL_GIGA_MAC_VER_64] = rtl8125d_hw_phy_config,
|
|
[RTL_GIGA_MAC_VER_65] = rtl8126a_hw_phy_config,
|
|
[RTL_GIGA_MAC_VER_66] = rtl8126a_hw_phy_config,
|
|
};
|