Commit f75d1fbe authored by Heiner Kallweit's avatar Heiner Kallweit Committed by Jakub Kicinski
Browse files

r8169: add support for RTL8125D



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: default avatarHeiner Kallweit <hkallweit1@gmail.com>
Reviewed-by: default avatarSimon Horman <horms@kernel.org>
Link: https://patch.msgid.link/d0306912-e88e-4c25-8b5d-545ae8834c0c@gmail.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent a27646c4
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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
+16 −7
Original line number Diff line number Diff line
@@ -56,6 +56,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"

@@ -139,6 +140,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);

@@ -2079,10 +2082,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;
@@ -2293,6 +2293,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 },

@@ -2558,9 +2561,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;
@@ -3872,6 +3873,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);
@@ -3920,6 +3927,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,
	};
@@ -3937,6 +3945,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;
+10 −0
Original line number Diff line number Diff line
@@ -1103,6 +1103,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)
{
@@ -1159,6 +1168,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,
	};