|
| 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