|
| 1 | +From f75d1fbe7809bc5ed134204b920fd9e2fc5db1df Mon Sep 17 00:00:00 2001 |
| 2 | +From: Heiner Kallweit < [email protected]> |
| 3 | +Date: Thu, 24 Oct 2024 22:42:33 +0200 |
| 4 | +Subject: [PATCH] r8169: add support for RTL8125D |
| 5 | + |
| 6 | +This adds support for new chip version RTL8125D, which can be found on |
| 7 | +boards like Gigabyte X870E AORUS ELITE WIFI7. Firmware rtl8125d-1.fw |
| 8 | +for this chip version is available in linux-firmware already. |
| 9 | + |
| 10 | +Signed-off-by: Heiner Kallweit < [email protected]> |
| 11 | +Reviewed-by: Simon Horman < [email protected]> |
| 12 | +Link: https://patch.msgid.link/ [email protected] |
| 13 | +Signed-off-by: Jakub Kicinski < [email protected]> |
| 14 | +--- |
| 15 | + drivers/net/ethernet/realtek/r8169.h | 1 + |
| 16 | + drivers/net/ethernet/realtek/r8169_main.c | 23 +++++++++++++------ |
| 17 | + .../net/ethernet/realtek/r8169_phy_config.c | 10 ++++++++ |
| 18 | + 3 files changed, 27 insertions(+), 7 deletions(-) |
| 19 | + |
| 20 | +diff --git a/drivers/net/ethernet/realtek/r8169.h b/drivers/net/ethernet/realtek/r8169.h |
| 21 | +index e2db944e6fa8bd..be4c9622618d84 100644 |
| 22 | +--- a/drivers/net/ethernet/realtek/r8169.h |
| 23 | ++++ b/drivers/net/ethernet/realtek/r8169.h |
| 24 | +@@ -68,6 +68,7 @@ enum mac_version { |
| 25 | + /* support for RTL_GIGA_MAC_VER_60 has been removed */ |
| 26 | + RTL_GIGA_MAC_VER_61, |
| 27 | + RTL_GIGA_MAC_VER_63, |
| 28 | ++ RTL_GIGA_MAC_VER_64, |
| 29 | + RTL_GIGA_MAC_VER_65, |
| 30 | + RTL_GIGA_MAC_VER_66, |
| 31 | + RTL_GIGA_MAC_NONE |
| 32 | +diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c |
| 33 | +index 79e7b223bd5b52..3da0f6be7d8a14 100644 |
| 34 | +--- a/drivers/net/ethernet/realtek/r8169_main.c |
| 35 | ++++ b/drivers/net/ethernet/realtek/r8169_main.c |
| 36 | +@@ -56,6 +56,7 @@ |
| 37 | + #define FIRMWARE_8107E_2 "rtl_nic/rtl8107e-2.fw" |
| 38 | + #define FIRMWARE_8125A_3 "rtl_nic/rtl8125a-3.fw" |
| 39 | + #define FIRMWARE_8125B_2 "rtl_nic/rtl8125b-2.fw" |
| 40 | ++#define FIRMWARE_8125D_1 "rtl_nic/rtl8125d-1.fw" |
| 41 | + #define FIRMWARE_8126A_2 "rtl_nic/rtl8126a-2.fw" |
| 42 | + #define FIRMWARE_8126A_3 "rtl_nic/rtl8126a-3.fw" |
| 43 | + |
| 44 | +@@ -139,6 +140,7 @@ static const struct { |
| 45 | + [RTL_GIGA_MAC_VER_61] = {"RTL8125A", FIRMWARE_8125A_3}, |
| 46 | + /* reserve 62 for CFG_METHOD_4 in the vendor driver */ |
| 47 | + [RTL_GIGA_MAC_VER_63] = {"RTL8125B", FIRMWARE_8125B_2}, |
| 48 | ++ [RTL_GIGA_MAC_VER_64] = {"RTL8125D", FIRMWARE_8125D_1}, |
| 49 | + [RTL_GIGA_MAC_VER_65] = {"RTL8126A", FIRMWARE_8126A_2}, |
| 50 | + [RTL_GIGA_MAC_VER_66] = {"RTL8126A", FIRMWARE_8126A_3}, |
| 51 | + }; |
| 52 | +@@ -707,6 +709,7 @@ MODULE_FIRMWARE(FIRMWARE_8168FP_3); |
| 53 | + MODULE_FIRMWARE(FIRMWARE_8107E_2); |
| 54 | + MODULE_FIRMWARE(FIRMWARE_8125A_3); |
| 55 | + MODULE_FIRMWARE(FIRMWARE_8125B_2); |
| 56 | ++MODULE_FIRMWARE(FIRMWARE_8125D_1); |
| 57 | + MODULE_FIRMWARE(FIRMWARE_8126A_2); |
| 58 | + MODULE_FIRMWARE(FIRMWARE_8126A_3); |
| 59 | + |
| 60 | +@@ -2079,10 +2082,7 @@ static void rtl_set_eee_txidle_timer(struct rtl8169_private *tp) |
| 61 | + tp->tx_lpi_timer = timer_val; |
| 62 | + r8168_mac_ocp_write(tp, 0xe048, timer_val); |
| 63 | + break; |
| 64 | +- case RTL_GIGA_MAC_VER_61: |
| 65 | +- case RTL_GIGA_MAC_VER_63: |
| 66 | +- case RTL_GIGA_MAC_VER_65: |
| 67 | +- case RTL_GIGA_MAC_VER_66: |
| 68 | ++ case RTL_GIGA_MAC_VER_61 ... RTL_GIGA_MAC_VER_66: |
| 69 | + tp->tx_lpi_timer = timer_val; |
| 70 | + RTL_W16(tp, EEE_TXIDLE_TIMER_8125, timer_val); |
| 71 | + break; |
| 72 | +@@ -2293,6 +2293,9 @@ static enum mac_version rtl8169_get_mac_version(u16 xid, bool gmii) |
| 73 | + { 0x7cf, 0x64a, RTL_GIGA_MAC_VER_66 }, |
| 74 | + { 0x7cf, 0x649, RTL_GIGA_MAC_VER_65 }, |
| 75 | + |
| 76 | ++ /* 8125D family. */ |
| 77 | ++ { 0x7cf, 0x688, RTL_GIGA_MAC_VER_64 }, |
| 78 | ++ |
| 79 | + /* 8125B family. */ |
| 80 | + { 0x7cf, 0x641, RTL_GIGA_MAC_VER_63 }, |
| 81 | + |
| 82 | +@@ -2558,9 +2561,7 @@ static void rtl_init_rxcfg(struct rtl8169_private *tp) |
| 83 | + case RTL_GIGA_MAC_VER_61: |
| 84 | + RTL_W32(tp, RxConfig, RX_FETCH_DFLT_8125 | RX_DMA_BURST); |
| 85 | + break; |
| 86 | +- case RTL_GIGA_MAC_VER_63: |
| 87 | +- case RTL_GIGA_MAC_VER_65: |
| 88 | +- case RTL_GIGA_MAC_VER_66: |
| 89 | ++ case RTL_GIGA_MAC_VER_63 ... RTL_GIGA_MAC_VER_66: |
| 90 | + RTL_W32(tp, RxConfig, RX_FETCH_DFLT_8125 | RX_DMA_BURST | |
| 91 | + RX_PAUSE_SLOT_ON); |
| 92 | + break; |
| 93 | +@@ -3872,6 +3873,12 @@ static void rtl_hw_start_8125b(struct rtl8169_private *tp) |
| 94 | + rtl_hw_start_8125_common(tp); |
| 95 | + } |
| 96 | + |
| 97 | ++static void rtl_hw_start_8125d(struct rtl8169_private *tp) |
| 98 | ++{ |
| 99 | ++ rtl_set_def_aspm_entry_latency(tp); |
| 100 | ++ rtl_hw_start_8125_common(tp); |
| 101 | ++} |
| 102 | ++ |
| 103 | + static void rtl_hw_start_8126a(struct rtl8169_private *tp) |
| 104 | + { |
| 105 | + rtl_set_def_aspm_entry_latency(tp); |
| 106 | +@@ -3920,6 +3927,7 @@ static void rtl_hw_config(struct rtl8169_private *tp) |
| 107 | + [RTL_GIGA_MAC_VER_53] = rtl_hw_start_8117, |
| 108 | + [RTL_GIGA_MAC_VER_61] = rtl_hw_start_8125a_2, |
| 109 | + [RTL_GIGA_MAC_VER_63] = rtl_hw_start_8125b, |
| 110 | ++ [RTL_GIGA_MAC_VER_64] = rtl_hw_start_8125d, |
| 111 | + [RTL_GIGA_MAC_VER_65] = rtl_hw_start_8126a, |
| 112 | + [RTL_GIGA_MAC_VER_66] = rtl_hw_start_8126a, |
| 113 | + }; |
| 114 | +@@ -3937,6 +3945,7 @@ static void rtl_hw_start_8125(struct rtl8169_private *tp) |
| 115 | + /* disable interrupt coalescing */ |
| 116 | + switch (tp->mac_version) { |
| 117 | + case RTL_GIGA_MAC_VER_61: |
| 118 | ++ case RTL_GIGA_MAC_VER_64: |
| 119 | + for (i = 0xa00; i < 0xb00; i += 4) |
| 120 | + RTL_W32(tp, i, 0); |
| 121 | + break; |
| 122 | +diff --git a/drivers/net/ethernet/realtek/r8169_phy_config.c b/drivers/net/ethernet/realtek/r8169_phy_config.c |
| 123 | +index d504abba75652c..8739f4b42aaf76 100644 |
| 124 | +--- a/drivers/net/ethernet/realtek/r8169_phy_config.c |
| 125 | ++++ b/drivers/net/ethernet/realtek/r8169_phy_config.c |
| 126 | +@@ -1103,6 +1103,15 @@ static void rtl8125b_hw_phy_config(struct rtl8169_private *tp, |
| 127 | + rtl8125b_config_eee_phy(phydev); |
| 128 | + } |
| 129 | + |
| 130 | ++static void rtl8125d_hw_phy_config(struct rtl8169_private *tp, |
| 131 | ++ struct phy_device *phydev) |
| 132 | ++{ |
| 133 | ++ r8169_apply_firmware(tp); |
| 134 | ++ rtl8125_legacy_force_mode(phydev); |
| 135 | ++ rtl8168g_disable_aldps(phydev); |
| 136 | ++ rtl8125b_config_eee_phy(phydev); |
| 137 | ++} |
| 138 | ++ |
| 139 | + static void rtl8126a_hw_phy_config(struct rtl8169_private *tp, |
| 140 | + struct phy_device *phydev) |
| 141 | + { |
| 142 | +@@ -1159,6 +1168,7 @@ void r8169_hw_phy_config(struct rtl8169_private *tp, struct phy_device *phydev, |
| 143 | + [RTL_GIGA_MAC_VER_53] = rtl8117_hw_phy_config, |
| 144 | + [RTL_GIGA_MAC_VER_61] = rtl8125a_2_hw_phy_config, |
| 145 | + [RTL_GIGA_MAC_VER_63] = rtl8125b_hw_phy_config, |
| 146 | ++ [RTL_GIGA_MAC_VER_64] = rtl8125d_hw_phy_config, |
| 147 | + [RTL_GIGA_MAC_VER_65] = rtl8126a_hw_phy_config, |
| 148 | + [RTL_GIGA_MAC_VER_66] = rtl8126a_hw_phy_config, |
| 149 | + }; |
0 commit comments