From nobody Tue Jun 16 19:36:52 2026 Received: from bkemail.birger-koblitz.de (bkemail.birger-koblitz.de [23.88.97.239]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7CC2335AC0C; Wed, 29 Apr 2026 17:01:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=23.88.97.239 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777482105; cv=none; b=Lb+uzYUnIzdNyVKcTmaO6P8vyuui8S6TTzldmK/BLdhMhRLPBFYnifmsa9KKYqYt1OlWI1GmnORObR7jHYGNpMdSjOnZxpmKXRp+3S7CmsojkZiUWSr7xREDPWpgOXVbU0uTHcBJOMo532HmEp6S8XcKMF1Urb4nhvXuyuhg2pE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777482105; c=relaxed/simple; bh=+Ly63vAFJnumAJfsut8x3VvXDh2n2tmLoKlbz85p9Mw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XRItX4k6NPBMjfU0Y8WFTB4HM5hNapv0ayJQZyqwiGqMIapXLY2o0S8m6ROIV3q4kggDmqXKMHjzAeub1p2vSTEib8xnvKmSl0KbEehccR2uMCf7zke4REXyLM1943xW8DByLqXam20l8H7Uxrvn62fN591w/4voV0hevdjkDew= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=birger-koblitz.de; spf=pass smtp.mailfrom=birger-koblitz.de; dkim=pass (2048-bit key) header.d=birger-koblitz.de header.i=@birger-koblitz.de header.b=q5psf7xB; dkim=pass (2048-bit key) header.d=birger-koblitz.de header.i=@birger-koblitz.de header.b=zAoPibhy; arc=none smtp.client-ip=23.88.97.239 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=birger-koblitz.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=birger-koblitz.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=birger-koblitz.de header.i=@birger-koblitz.de header.b="q5psf7xB"; dkim=pass (2048-bit key) header.d=birger-koblitz.de header.i=@birger-koblitz.de header.b="zAoPibhy" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=birger-koblitz.de; s=default; t=1777482101; bh=+Ly63vAFJnumAJfsut8x3VvXDh2n2tmLoKlbz85p9Mw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=q5psf7xBIuwodtKqgPJJrIwI0oun8JEPA1d/uPFeV4eC2Sge9RM7ByWdFiiPXb8sL AjOyVZL67ZVhlSIWLMGwcQRzUC9XaCMOOp/Rtj3r0enF8M+y6D7oFtDRPQkbIBcxn0 1gmK0tFefG47i8+4zoHwhQ5WXuMIAJQYxGI0MNyp37MzC5B+0RAOj5b2xrA7xFGpxR vFvD/OIpSMawCtZYsKrf6oTkfD79Jim38EOLyvz7ub7vx8OgTgumPik3KsdQh6mPZY RPlzoASORWGD7qXq1RQdpRgz63ImerroFYu8uJbVCeLjEbUT/02PHf17wPz4cfHux/ KuNuGg7b9oHEw== Received: by bkemail.birger-koblitz.de (Postfix, from userid 109) id F0AD2481B4; Wed, 29 Apr 2026 17:01:41 +0000 (UTC) X-Spam-Level: DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=birger-koblitz.de; s=default; t=1777482099; bh=+Ly63vAFJnumAJfsut8x3VvXDh2n2tmLoKlbz85p9Mw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=zAoPibhy7vcxwafZu/tvcIPWoS5JGzigaxUCt2ArAgaeylklI1QQoTCZzQz+kKzAy WHp1+qh18SRkcNad354DJreEPFlcln+TSAmmhfC6r6P9TS7SZsf2vK3N8U58YSsXmf TFu2YC/gJBq6WAwI0PJws8Lb1oV6Xd4l/HOQVWxkb1/m7n6D3GO1HAk153Wnhzctze uyidVad7EzTypfzvwClikfEOiYvBZPTYEAu7hFwERwYOiXcnA7pR2HHUJPWntUd9q8 FaHykQQRaPosMqx81OPWzNFjjPC1p2BI3MpektMi/Q1eJY42MzbIHZxfhzpE9kbU2n CbIYtaRIUeRKA== Received: from AMDDesktop.lan (unknown [IPv6:2a00:6020:47a3:e800:271c:c6c5:9fde:77cb]) by bkemail.birger-koblitz.de (Postfix) with ESMTPSA id BE26247E40; Wed, 29 Apr 2026 17:01:38 +0000 (UTC) From: Birger Koblitz Date: Wed, 29 Apr 2026 19:01:09 +0200 Subject: [PATCH net-next v2 1/4] r8152: Add support for 10Gbit Link Speeds and EEE Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260429-rtl8159_net_next-v2-1-bab3cd4e4c66@birger-koblitz.de> References: <20260429-rtl8159_net_next-v2-0-bab3cd4e4c66@birger-koblitz.de> In-Reply-To: <20260429-rtl8159_net_next-v2-0-bab3cd4e4c66@birger-koblitz.de> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: linux-usb@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Chih Kai Hsu , Birger Koblitz , Andrew Lunn X-Mailer: b4 0.14.2 The RTL8159 supports 10GBit Link speeds. Add support for this speed in the setup and setting/getting through ethtool. Also add 10GBit EEE. Add functionality for setup and ethtool get/set methods. Signed-off-by: Birger Koblitz Reviewed-by: Andrew Lunn Tested-by: Aleksander Jan Bajkowski --- drivers/net/usb/r8152.c | 58 +++++++++++++++++++++++++++++++++++++++++++++= +--- 1 file changed, 55 insertions(+), 3 deletions(-) diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c index 7337bf1b7d6ad03572edbc492706c07a8f58760f..01e65d845f8732f23427305423e= 4e270dae775dc 100644 --- a/drivers/net/usb/r8152.c +++ b/drivers/net/usb/r8152.c @@ -621,6 +621,7 @@ enum spd_duplex { FORCE_1000M_FULL, NWAY_2500M_FULL, NWAY_5000M_FULL, + NWAY_10000M_FULL, }; =20 /* OCP_ALDPS_CONFIG */ @@ -742,6 +743,7 @@ enum spd_duplex { #define BP4_SUPER_ONLY 0x1578 /* RTL_VER_04 only */ =20 enum rtl_register_content { + _10000bps =3D BIT(14), _5000bps =3D BIT(12), _2500bps =3D BIT(10), _1250bps =3D BIT(9), @@ -757,6 +759,8 @@ enum rtl_register_content { =20 #define is_speed_2500(_speed) (((_speed) & (_2500bps | LINK_STATUS)) =3D= =3D (_2500bps | LINK_STATUS)) #define is_speed_5000(_speed) (((_speed) & (_5000bps | LINK_STATUS)) =3D= =3D (_5000bps | LINK_STATUS)) +#define is_speed_10000(_speed) (((_speed) & (_10000bps | LINK_STATUS)) \ + =3D=3D (_10000bps | LINK_STATUS)) #define is_flow_control(_speed) (((_speed) & (_tx_flow | _rx_flow)) =3D=3D= (_tx_flow | _rx_flow)) =20 #define RTL8152_MAX_TX 4 @@ -1008,6 +1012,7 @@ struct r8152 { =20 u32 support_2500full:1; u32 support_5000full:1; + u32 support_10000full:1; u32 lenovo_macpassthru:1; u32 dell_tb_rx_agg_bug:1; u16 ocp_base; @@ -1260,6 +1265,7 @@ enum tx_csum_stat { #define RTL_ADVERTISED_1000_FULL BIT(5) #define RTL_ADVERTISED_2500_FULL BIT(6) #define RTL_ADVERTISED_5000_FULL BIT(7) +#define RTL_ADVERTISED_10000_FULL BIT(8) =20 /* Maximum number of multicast addresses to filter (vs. Rx-all-multicast). * The RTL chips use a 64 element hash table based on the Ethernet CRC. @@ -5773,6 +5779,11 @@ static void r8156_eee_en(struct r8152 *tp, bool enab= le) else config &=3D ~MDIO_EEE_5GT; =20 + if (enable && (tp->eee_adv2 & MDIO_EEE_10GT)) + config |=3D MDIO_EEE_10GT; + else + config &=3D ~MDIO_EEE_10GT; + ocp_reg_write(tp, OCP_EEE_ADV2, config); } =20 @@ -6513,6 +6524,9 @@ static int rtl8152_set_speed(struct r8152 *tp, u8 aut= oneg, u32 speed, u8 duplex, =20 if (tp->support_5000full) support |=3D RTL_ADVERTISED_5000_FULL; + + if (tp->support_10000full) + support |=3D RTL_ADVERTISED_10000_FULL; } =20 advertising &=3D support; @@ -6559,9 +6573,10 @@ static int rtl8152_set_speed(struct r8152 *tp, u8 au= toneg, u32 speed, u8 duplex, r8152_mdio_write(tp, MII_CTRL1000, new1); } =20 - if (tp->support_2500full || tp->support_5000full) { + if (tp->support_2500full || tp->support_5000full || tp->support_10000ful= l) { orig =3D ocp_reg_read(tp, OCP_10GBT_CTRL); - new1 =3D orig & ~(MDIO_AN_10GBT_CTRL_ADV2_5G | MDIO_AN_10GBT_CTRL_ADV5G= ); + new1 =3D orig & ~(MDIO_AN_10GBT_CTRL_ADV2_5G | MDIO_AN_10GBT_CTRL_ADV5G + | MDIO_AN_10GBT_CTRL_ADV10G); =20 if (advertising & RTL_ADVERTISED_2500_FULL) { new1 |=3D MDIO_AN_10GBT_CTRL_ADV2_5G; @@ -6573,6 +6588,11 @@ static int rtl8152_set_speed(struct r8152 *tp, u8 au= toneg, u32 speed, u8 duplex, tp->ups_info.speed_duplex =3D NWAY_5000M_FULL; } =20 + if (advertising & RTL_ADVERTISED_10000_FULL) { + new1 |=3D MDIO_AN_10GBT_CTRL_ADV10G; + tp->ups_info.speed_duplex =3D NWAY_10000M_FULL; + } + if (orig !=3D new1) ocp_reg_write(tp, OCP_10GBT_CTRL, new1); } @@ -8723,7 +8743,10 @@ int rtl8152_get_link_ksettings(struct net_device *ne= tdev, linkmode_mod_bit(ETHTOOL_LINK_MODE_5000baseT_Full_BIT, cmd->link_modes.supported, tp->support_5000full); =20 - if (tp->support_2500full || tp->support_5000full) { + linkmode_mod_bit(ETHTOOL_LINK_MODE_10000baseT_Full_BIT, + cmd->link_modes.supported, tp->support_10000full); + + if (tp->support_2500full || tp->support_5000full || tp->support_10000full= ) { u16 ocp_10gbt_ctrl =3D ocp_reg_read(tp, OCP_10GBT_CTRL); u16 ocp_10gbt_stat =3D ocp_reg_read(tp, OCP_10GBT_STAT); =20 @@ -8752,6 +8775,19 @@ int rtl8152_get_link_ksettings(struct net_device *ne= tdev, if (is_speed_5000(rtl8152_get_speed(tp))) cmd->base.speed =3D SPEED_5000; } + + if (tp->support_10000full) { + linkmode_mod_bit(ETHTOOL_LINK_MODE_10000baseT_Full_BIT, + cmd->link_modes.advertising, + ocp_10gbt_ctrl & MDIO_AN_10GBT_CTRL_ADV10G); + + linkmode_mod_bit(ETHTOOL_LINK_MODE_10000baseT_Full_BIT, + cmd->link_modes.lp_advertising, + ocp_10gbt_stat & MDIO_AN_10GBT_STAT_LP10G); + + if (is_speed_10000(rtl8152_get_speed(tp))) + cmd->base.speed =3D SPEED_10000; + } } =20 mutex_unlock(&tp->control); @@ -8805,6 +8841,10 @@ static int rtl8152_set_link_ksettings(struct net_dev= ice *dev, cmd->link_modes.advertising)) advertising |=3D RTL_ADVERTISED_5000_FULL; =20 + if (test_bit(ETHTOOL_LINK_MODE_10000baseT_Full_BIT, + cmd->link_modes.advertising)) + advertising |=3D RTL_ADVERTISED_10000_FULL; + mutex_lock(&tp->control); =20 ret =3D rtl8152_set_speed(tp, cmd->base.autoneg, cmd->base.speed, @@ -8968,6 +9008,13 @@ static int r8153_get_eee(struct r8152 *tp, struct et= htool_keee *eee) linkmode_set_bit(ETHTOOL_LINK_MODE_5000baseT_Full_BIT, common); } =20 + if (tp->support_10000full) { + linkmode_set_bit(ETHTOOL_LINK_MODE_10000baseT_Full_BIT, eee->supported); + + if (speed & _10000bps) + linkmode_set_bit(ETHTOOL_LINK_MODE_10000baseT_Full_BIT, common); + } + eee->eee_enabled =3D tp->eee_en; =20 if (speed & _1000bps) @@ -9982,6 +10029,11 @@ static int rtl8152_probe_once(struct usb_interface = *intf, tp->speed =3D SPEED_5000; tp->advertising |=3D RTL_ADVERTISED_5000_FULL; } + if (tp->support_10000full && + tp->udev->speed >=3D USB_SPEED_SUPER) { + tp->speed =3D SPEED_10000; + tp->advertising |=3D RTL_ADVERTISED_10000_FULL; + } tp->advertising |=3D RTL_ADVERTISED_1000_FULL; } tp->duplex =3D DUPLEX_FULL; --=20 2.47.3 From nobody Tue Jun 16 19:36:52 2026 Received: from bkemail.birger-koblitz.de (bkemail.birger-koblitz.de [23.88.97.239]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2B61A40FDB7; Wed, 29 Apr 2026 17:01:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=23.88.97.239 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777482107; cv=none; b=en5mgvETe3NwJ6qtsoqcUdGfOJNtmhoJOogQ5c62zgA705GLTR+bcU8/nYmtVfBHd3Cv/VRtYyo6mB+jbS6e4Nl4Lok8i9Wl7xBbvHJKZ/ltCob6PRwa/TwwSA3mGjkikTyGQwBBfh1Flq2pU9imxUVlVkxy3+ctRAPj5C2E2GY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777482107; c=relaxed/simple; bh=Dd2wYPSGtYN1H3N/e+YnaklDoZEAoKSnAWn49QqglS8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=i/vvYgN/2UXqwuKVRICiWaqkNe2MHZ2Fbk4ZKpvIdugLEAICp8CJBYItgDwvgyWNEdgBSDajCaAkOgJfOHSjT3CHOhohW96G1VtkhbcjQfB1d+vZoBKkTtKJl6xjNhw5+2WC18IpLBNa3fHUsskOXHTPTBw/tqWgULbX6pQMY1A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=birger-koblitz.de; spf=pass smtp.mailfrom=birger-koblitz.de; dkim=pass (2048-bit key) header.d=birger-koblitz.de header.i=@birger-koblitz.de header.b=0Eu+Kh1i; dkim=pass (2048-bit key) header.d=birger-koblitz.de header.i=@birger-koblitz.de header.b=0lhVgG8h; arc=none smtp.client-ip=23.88.97.239 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=birger-koblitz.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=birger-koblitz.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=birger-koblitz.de header.i=@birger-koblitz.de header.b="0Eu+Kh1i"; dkim=pass (2048-bit key) header.d=birger-koblitz.de header.i=@birger-koblitz.de header.b="0lhVgG8h" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=birger-koblitz.de; s=default; t=1777482103; bh=Dd2wYPSGtYN1H3N/e+YnaklDoZEAoKSnAWn49QqglS8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=0Eu+Kh1ij7mCUGRw9o0D1MHB/BPeqgm7xIEH8b1eOMnGVjuZhtmOcr5lDhKKvUPyd /nMXygfSQhTd5vB67YKPtDJtmzJSfVY6d+OSGXqF3CV7erhCqXtUF+FMrl1t9Gkx2A d+HZ1TkNuEuQ/DfUhUSxsML1lPI1to/sMmBYCwX95LEEc/Wj0bzVBcCn9vftO0Qabi PjmB/s/xXuNprG9cgVdP/gp4QeWY3cRtJ9ISdTG2Hne9/Bv1kRLkqYSbZ9ZkQf7bll aC42dVaSvRyiKlEKSKB+LLyF3eE92EJIcwCXiWPujeh0JoVMa44ni4SWdHSNHme49M E6z+/p3tegsog== Received: by bkemail.birger-koblitz.de (Postfix, from userid 109) id 94EC8481BF; Wed, 29 Apr 2026 17:01:43 +0000 (UTC) X-Spam-Level: DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=birger-koblitz.de; s=default; t=1777482099; bh=Dd2wYPSGtYN1H3N/e+YnaklDoZEAoKSnAWn49QqglS8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=0lhVgG8hgxfWqkgUP9i/hJvVgbAcl9Rs+VeRWEO9VmOLQVulFL81F+5L3Em2S9Fli LqyP+hT8RQBiL4LkremahItUC67gdUxZQQnNX+9uf8J2zj9BWJadtZ9DYlJFAb1S69 mSx8ShLxj+2qR8p9NZhz4t7xVF0As/HPU/7Yw6BeupPGOMIrAAJ4uOwTL4EGgbAEPO Q6qNAiC5hZAeIslTAXElwh2QSk/3feLBHcvaLzkyLt/N6X3+Qg0iPYNsZ24S1BbKeN yetoirMc7R13m4gZlENAeZ/aDsv0kaT+GEVY06lAAkl23syTiatuBaWe/ZwVhQa1P7 s6jw4CClXs3kQ== Received: from AMDDesktop.lan (unknown [IPv6:2a00:6020:47a3:e800:271c:c6c5:9fde:77cb]) by bkemail.birger-koblitz.de (Postfix) with ESMTPSA id 0C9F647E49; Wed, 29 Apr 2026 17:01:39 +0000 (UTC) From: Birger Koblitz Date: Wed, 29 Apr 2026 19:01:10 +0200 Subject: [PATCH net-next v2 2/4] r8152: Add support for the RTL8159 chip Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260429-rtl8159_net_next-v2-2-bab3cd4e4c66@birger-koblitz.de> References: <20260429-rtl8159_net_next-v2-0-bab3cd4e4c66@birger-koblitz.de> In-Reply-To: <20260429-rtl8159_net_next-v2-0-bab3cd4e4c66@birger-koblitz.de> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: linux-usb@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Chih Kai Hsu , Birger Koblitz X-Mailer: b4 0.14.2 The RTL8157 re-uses the packet descriptor format introduced with the RTL8157 and other hardware features of the RTL8157 (RTL_VER_16) such as the SRAM access. The support therefore consists in expanding the existing RTL8157 code for initialization and USB power management to also be used for the RTL8159 (RTL_VER_17). Most of the addiitonal code is added in r8157_hw_phy_cfg() to configure the RTL8159 PHY. Add support for the USB device ID of Realtek RTL8157-based adapters. Detect the RTL8159 as RTL_VER_17 and set it up. Signed-off-by: Birger Koblitz Tested-by: Aleksander Jan Bajkowski --- drivers/net/usb/r8152.c | 257 ++++++++++++++++++++++++++++++++++++++++++++= ++-- 1 file changed, 249 insertions(+), 8 deletions(-) diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c index 01e65d845f8732f23427305423e4e270dae775dc..2a07dde289e2240b221664ae5c5= bceec35b5a1ef 100644 --- a/drivers/net/usb/r8152.c +++ b/drivers/net/usb/r8152.c @@ -1247,6 +1247,7 @@ enum rtl_version { RTL_VER_14, RTL_VER_15, RTL_VER_16, + RTL_VER_17, =20 RTL_VER_MAX }; @@ -3432,6 +3433,7 @@ static void rtl8152_nic_reset(struct r8152 *tp) break; =20 case RTL_VER_16: + case RTL_VER_17: ocp_byte_clr_bits(tp, MCU_TYPE_PLA, PLA_CR, CR_RE | CR_TE); break; =20 @@ -3471,6 +3473,9 @@ static void rtl_eee_plus_en(struct r8152 *tp, bool en= able) =20 static void rtl_set_eee_plus(struct r8152 *tp) { + if (tp->version =3D=3D RTL_VER_17) + return rtl_eee_plus_en(tp, false); + if (rtl8152_get_speed(tp) & _10bps) rtl_eee_plus_en(tp, true); else @@ -3656,6 +3661,7 @@ static void r8153_set_rx_early_timeout(struct r8152 *= tp) case RTL_VER_13: case RTL_VER_15: case RTL_VER_16: + case RTL_VER_17: ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_TIMEOUT, 640 / 8); ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EXTRA_AGGR_TMR, @@ -3700,6 +3706,7 @@ static void r8153_set_rx_early_size(struct r8152 *tp) ocp_data / 8); break; case RTL_VER_16: + case RTL_VER_17: ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE, ocp_data / 16); break; @@ -4548,6 +4555,7 @@ static void rtl_clear_bp(struct r8152 *tp, u16 type) break; case RTL_VER_14: case RTL_VER_16: + case RTL_VER_17: default: ocp_write_word(tp, type, USB_BP2_EN, 0); bp_num =3D 16; @@ -5823,6 +5831,7 @@ static void rtl_eee_enable(struct r8152 *tp, bool ena= ble) case RTL_VER_13: case RTL_VER_15: case RTL_VER_16: + case RTL_VER_17: if (enable) { r8156_eee_en(tp, true); ocp_reg_write(tp, OCP_EEE_ADV, tp->eee_adv); @@ -6894,7 +6903,7 @@ static void rtl8156_down(struct r8152 *tp) PLA_MCU_SPDWN_EN); =20 r8153b_u1u2en(tp, false); - if (tp->version !=3D RTL_VER_16) { + if (tp->version < RTL_VER_16) { r8153_u2p3en(tp, false); r8153b_power_cut_en(tp, false); } @@ -8016,7 +8025,7 @@ static void r8157_hw_phy_cfg(struct r8152 *tp) /* Advanced Power Saving parameter */ ocp_reg_set_bits(tp, 0xa430, BIT(0) | BIT(1)); =20 - /* aldpsce force mode */ + /* Disable ALDPS force mode */ ocp_reg_clr_bits(tp, 0xa44a, BIT(2)); =20 switch (tp->version) { @@ -8140,6 +8149,190 @@ static void r8157_hw_phy_cfg(struct r8152 *tp) sram2_write_w0w1(tp, 0x807c, 0xff00, 0x5000); sram2_write_w0w1(tp, 0x809d, 0xff00, 0x5000); break; + + case RTL_VER_17: + /* Disable bypass turn off clk in ALDPS */ + ocp_byte_clr_bits(tp, MCU_TYPE_PLA, 0xd3c8, BIT(0)); + + /* Power level tuning + * test mode power level + */ + sram_write_w0w1(tp, 0x8415, 0xff00, 0x9300); + /* normal link power level 10G, 5G, 2.5G */ + sram_write_w0w1(tp, 0x81a3, 0xff00, 0x0f00); + sram_write_w0w1(tp, 0x81ae, 0xff00, 0x0f00); + sram_write_w0w1(tp, 0x81b9, 0xff00, 0xb900); + /* nomal link TX filter */ + sram2_write_w0w1(tp, 0x83b0, 0x0e00, 0); + sram2_write_w0w1(tp, 0x83c5, 0x0e00, 0); + sram2_write_w0w1(tp, 0x83da, 0x0e00, 0); + sram2_write_w0w1(tp, 0x83ef, 0x0e00, 0); + + /* AFE power saving for 2.5G & 5G */ + sram_write(tp, 0x8173, 0x8620); + sram_write(tp, 0x8175, 0x8671); + + sram_write_w0w1(tp, 0x817c, 0, BIT(13)); + sram_write_w0w1(tp, 0x8187, 0, BIT(13)); + sram_write_w0w1(tp, 0x8192, 0, BIT(13)); + sram_write_w0w1(tp, 0x819d, 0, BIT(13)); + sram_write_w0w1(tp, 0x81a8, BIT(13), 0); + sram_write_w0w1(tp, 0x81b3, BIT(13), 0); + sram_write_w0w1(tp, 0x81be, 0, BIT(13)); + + sram_write_w0w1(tp, 0x817d, 0xff00, 0xa600); + sram_write_w0w1(tp, 0x8188, 0xff00, 0xa600); + sram_write_w0w1(tp, 0x8193, 0xff00, 0xa600); + sram_write_w0w1(tp, 0x819e, 0xff00, 0xa600); + sram_write_w0w1(tp, 0x81a9, 0xff00, 0x1400); + sram_write_w0w1(tp, 0x81b4, 0xff00, 0x1400); + sram_write_w0w1(tp, 0x81bf, 0xff00, 0xa600); + + /* RFI parameter + * disable preset FBE + */ + ocp_reg_clr_bits(tp, 0xaeaa, BIT(5) | BIT(3)); + /* modify PGA for 5G&10G */ + sram2_write(tp, 0x84f0, 0x201c); + sram2_write(tp, 0x84f2, 0x3117); + /* RFI parameter */ + ocp_reg_write(tp, 0xaec6, 0x0000); + ocp_reg_write(tp, 0xae20, 0xffff); + ocp_reg_write(tp, 0xaece, 0xffff); + ocp_reg_write(tp, 0xaed2, 0xffff); + ocp_reg_write(tp, 0xaec8, 0x0000); + ocp_reg_clr_bits(tp, 0xaed0, BIT(0)); + ocp_reg_write(tp, 0xadb8, 0x0150); + sram2_write_w0w1(tp, 0x8197, 0xff00, 0x5000); + sram2_write_w0w1(tp, 0x8231, 0xff00, 0x5000); + sram2_write_w0w1(tp, 0x82cb, 0xff00, 0x5000); + sram2_write_w0w1(tp, 0x82cd, 0xff00, 0x5700); + sram2_write_w0w1(tp, 0x8233, 0xff00, 0x5700); + sram2_write_w0w1(tp, 0x8199, 0xff00, 0x5700); + + sram2_write(tp, 0x815a, 0x0150); + sram2_write(tp, 0x81f4, 0x0150); + sram2_write(tp, 0x828e, 0x0150); + sram2_write(tp, 0x81b1, 0x0000); + sram2_write(tp, 0x824b, 0x0000); + sram2_write(tp, 0x82e5, 0x0000); + + sram2_write_w0w1(tp, 0x84f7, 0xff00, 0x2800); + ocp_reg_set_bits(tp, 0xaec2, BIT(12)); + sram2_write_w0w1(tp, 0x81b3, 0xff00, 0xad00); + sram2_write_w0w1(tp, 0x824d, 0xff00, 0xad00); + sram2_write_w0w1(tp, 0x82e7, 0xff00, 0xad00); + ocp_reg_w0w1(tp, 0xae4e, 0x000f, 0x0001); + sram2_write_w0w1(tp, 0x82ce, 0xf000, 0x4000); + + /* 5G shift sel, default =3D '04' + * 10G shift sel, default =3D '03' + */ + sram2_write_w0w1(tp, 0x83a5, 0xff00, 0x0400); + sram2_write_w0w1(tp, 0x83a6, 0xff00, 0x0400); + sram2_write_w0w1(tp, 0x83a7, 0xff00, 0x0400); + sram2_write_w0w1(tp, 0x83a8, 0xff00, 0x0400); + + /* XG INRX parameters + * RC coefficients + */ + sram2_write(tp, 0x84ac, 0x0000); + sram2_write(tp, 0x84ae, 0x0000); + sram2_write(tp, 0x84b0, 0xf818); + sram2_write_w0w1(tp, 0x84b2, 0xff00, 0x6000); + /* Training AAGC PAR (with uc2 patch) */ + sram2_write(tp, 0x8ffc, 0x6008); + sram2_write(tp, 0x8ffe, 0xf450); + /* DAC BGK */ + sram2_write_w0w1(tp, 0x8015, 0, BIT(9)); + sram2_write_w0w1(tp, 0x8016, 0, BIT(11)); + sram2_write_w0w1(tp, 0x8fe6, 0xff00, 0x0800); + sram2_write(tp, 0x8fe4, 0x2114); + /* 10G PBO table */ + sram2_write(tp, 0x8647, 0xa7b1); + sram2_write(tp, 0x8649, 0xbbca); + sram2_write_w0w1(tp, 0x864b, 0xff00, 0xdc00); + /* 2.5G ado power window size */ + sram2_write_w0w1(tp, 0x8154, 0xc000, 0x4000); + sram2_write_w0w1(tp, 0x8158, 0xc000, 0); + /* 10G lock far */ + sram2_write(tp, 0x826c, 0xffff); + sram2_write(tp, 0x826e, 0xffff); + /* XG INRX parameter */ + sram2_write_w0w1(tp, 0x8872, 0xff00, 0x0e00); + sram_write_w0w1(tp, 0x8012, 0, BIT(11)); + sram_write_w0w1(tp, 0x8012, 0, BIT(14)); + ocp_reg_set_bits(tp, 0xb576, BIT(0)); + sram_write_w0w1(tp, 0x834a, 0xff00, 0x0700); + sram2_write_w0w1(tp, 0x8217, 0x3f00, 0x2a00); + sram_write_w0w1(tp, 0x81b1, 0xff00, 0x0b00); + sram2_write_w0w1(tp, 0x8fed, 0xff00, 0x4e00); + /* Slave about EC mu of datamode AAGC and DAC BG */ + sram2_write_w0w1(tp, 0x88ac, 0xff00, 0x2300); + /* improve UBE */ + ocp_reg_set_bits(tp, 0xbf0c, 0x7 << 11); + /* close Sparse NEC, improve connect 5EUU calble performace */ + sram2_write_w0w1(tp, 0x88de, 0xff00, 0); + /* 5G slave compatibility issue (will include in v10) */ + sram2_write(tp, 0x80b4, 0x5195); + + /* XG Test Mode + * xgtstm_map_tbl for mdi_cap_sel + */ + sram_write(tp, 0x8370, 0x8671); + sram_write(tp, 0x8372, 0x86c8); + /* xgtstm_amp_map_tbl for REG_IBX_UP_SHIFT_L */ + sram_write(tp, 0x8401, 0x86c8); + sram_write(tp, 0x8403, 0x86da); + sram_write_w0w1(tp, 0x8406, 0x1800, 0x1000); + sram_write_w0w1(tp, 0x8408, 0x1800, 0x1000); + sram_write_w0w1(tp, 0x840a, 0x1800, 0x1000); + sram_write_w0w1(tp, 0x840c, 0x1800, 0x1000); + sram_write_w0w1(tp, 0x840e, 0x1800, 0x1000); + sram_write_w0w1(tp, 0x8410, 0x1800, 0x1000); + sram_write_w0w1(tp, 0x8412, 0x1800, 0x1000); + sram_write_w0w1(tp, 0x8414, 0x1800, 0x1000); + sram_write_w0w1(tp, 0x8416, 0x1800, 0x1000); + + /* Cable Test Patch */ + sram_write(tp, 0x82bd, 0x1f40); + + /* Thermal sensor parameters */ + ocp_reg_w0w1(tp, 0xbfb4, 0x07ff, 0x0328); + ocp_reg_write(tp, 0xbfb6, 0x3e14); + + /* spdchg_gtx_shape_100M */ + ocp_reg_write(tp, OCP_SRAM_ADDR, 0x81c4); + ocp_reg_write(tp, OCP_SRAM_DATA, 0x003b); + ocp_reg_write(tp, OCP_SRAM_DATA, 0x0086); + ocp_reg_write(tp, OCP_SRAM_DATA, 0x00b7); + ocp_reg_write(tp, OCP_SRAM_DATA, 0x00db); + ocp_reg_write(tp, OCP_SRAM_DATA, 0x00fe); + ocp_reg_write(tp, OCP_SRAM_DATA, 0x00fe); + ocp_reg_write(tp, OCP_SRAM_DATA, 0x00fe); + ocp_reg_write(tp, OCP_SRAM_DATA, 0x00fe); + ocp_reg_write(tp, OCP_SRAM_DATA, 0x00c3); + ocp_reg_write(tp, OCP_SRAM_DATA, 0x0078); + ocp_reg_write(tp, OCP_SRAM_DATA, 0x0047); + ocp_reg_write(tp, OCP_SRAM_DATA, 0x0023); + + /* lsbmsk_parameters + * RL6961_lsbmsk_parameter_250207 + */ + sram2_write(tp, 0x88d7, 0x01a0); + sram2_write(tp, 0x88d9, 0x01a0); + sram2_write(tp, 0x8ffa, 0x002a); + + sram2_write(tp, 0x8fee, 0xffdf); + sram2_write(tp, 0x8ff0, 0xffff); + sram2_write(tp, 0x8ff2, 0x0a4a); + sram2_write(tp, 0x8ff4, 0xaa5a); + sram2_write(tp, 0x8ff6, 0x0a4a); + sram2_write(tp, 0x8ff8, 0xaa5a); + + sram2_write_w0w1(tp, 0x88d5, 0xff00, 0x0200); + break; + default: break; } @@ -8175,6 +8368,18 @@ static void r8157_hw_phy_cfg(struct r8152 *tp) set_bit(PHY_RESET, &tp->flags); } =20 +static int r8159_wait_backup_restore(struct r8152 *tp) +{ + u32 ocp_data; + + ocp_data =3D ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0); + if (!(ocp_data & PCUT_STATUS)) + return 0; + + return poll_timeout_us(ocp_data =3D ocp_read_word(tp, MCU_TYPE_USB, USB_G= PHY_CTRL), + ocp_data & BACKUP_RESTRORE, 200, 2000, false); +} + static void r8156_init(struct r8152 *tp) { u32 ocp_data; @@ -8184,14 +8389,14 @@ static void r8156_init(struct r8152 *tp) if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) return; =20 - if (tp->version =3D=3D RTL_VER_16) { + if (tp->version =3D=3D RTL_VER_16 || tp->version =3D=3D RTL_VER_17) { ocp_byte_set_bits(tp, MCU_TYPE_USB, 0xcffe, BIT(3)); ocp_byte_clr_bits(tp, MCU_TYPE_USB, 0xd3ca, BIT(0)); } =20 ocp_byte_clr_bits(tp, MCU_TYPE_USB, USB_ECM_OP, EN_ALL_SPEED); =20 - if (tp->version !=3D RTL_VER_16) + if (tp->version < RTL_VER_16) ocp_write_word(tp, MCU_TYPE_USB, USB_SPEED_OPTION, 0); =20 ocp_word_set_bits(tp, MCU_TYPE_USB, USB_ECM_OPTION, BYPASS_MAC_RESET); @@ -8205,6 +8410,7 @@ static void r8156_init(struct r8152 *tp) case RTL_VER_13: case RTL_VER_15: case RTL_VER_16: + case RTL_VER_17: r8156b_wait_loading_flash(tp); break; default: @@ -8221,6 +8427,11 @@ static void r8156_init(struct r8152 *tp) return; } =20 + if (tp->version =3D=3D RTL_VER_17 && r8159_wait_backup_restore(tp)) { + dev_err(&tp->intf->dev, "init failed, backup-restore timed out\n"); + return; + } + data =3D r8153_phy_status(tp, 0); if (data =3D=3D PHY_STAT_EXT_INIT) { ocp_reg_clr_bits(tp, 0xa468, BIT(3) | BIT(1)); @@ -8236,7 +8447,7 @@ static void r8156_init(struct r8152 *tp) =20 data =3D r8153_phy_status(tp, PHY_STAT_LAN_ON); =20 - if (tp->version =3D=3D RTL_VER_16) + if (tp->version >=3D RTL_VER_16) r8157_u2p3en(tp, false); else r8153_u2p3en(tp, false); @@ -8247,7 +8458,7 @@ static void r8156_init(struct r8152 *tp) /* U1/U2/L1 idle timer. 500 us */ ocp_write_word(tp, MCU_TYPE_USB, USB_U1U2_TIMER, 500); =20 - if (tp->version =3D=3D RTL_VER_16) + if (tp->version >=3D RTL_VER_16) r8157_power_cut_en(tp, false); else r8153b_power_cut_en(tp, false); @@ -8294,7 +8505,10 @@ static void r8156_init(struct r8152 *tp) set_bit(GREEN_ETHERNET, &tp->flags); =20 /* rx aggregation / 16 bytes Rx descriptor */ - if (tp->version =3D=3D RTL_VER_16) + if (tp->version =3D=3D RTL_VER_17) + ocp_word_clr_bits(tp, MCU_TYPE_USB, USB_USB_CTRL, + RX_AGG_DISABLE | RX_DESC_16B | BIT(11)); + else if (tp->version =3D=3D RTL_VER_16) ocp_word_clr_bits(tp, MCU_TYPE_USB, USB_USB_CTRL, RX_AGG_DISABLE | RX_DE= SC_16B); else ocp_word_clr_bits(tp, MCU_TYPE_USB, USB_USB_CTRL, RX_AGG_DISABLE | RX_ZE= RO_EN); @@ -8302,7 +8516,7 @@ static void r8156_init(struct r8152 *tp) if (tp->version < RTL_VER_12) ocp_byte_set_bits(tp, MCU_TYPE_USB, USB_BMU_CONFIG, ACT_ODMA); =20 - if (tp->version =3D=3D RTL_VER_16) { + if (tp->version >=3D RTL_VER_16) { /* Disable Rx Zero Len */ rtl_bmu_clr_bits(tp, 0x2300, BIT(3)); /* TX descriptor Signature */ @@ -9690,6 +9904,29 @@ static int rtl_ops_init(struct r8152 *tp) r8157_desc_init(tp); break; =20 + case RTL_VER_17: + tp->eee_en =3D true; + tp->eee_adv =3D MDIO_EEE_100TX | MDIO_EEE_1000T | MDIO_EEE_10GT; + tp->eee_adv2 =3D MDIO_EEE_2_5GT | MDIO_EEE_5GT; + ops->init =3D r8156_init; + ops->enable =3D rtl8156_enable; + ops->disable =3D rtl8153_disable; + ops->up =3D rtl8156_up; + ops->down =3D rtl8156_down; + ops->unload =3D rtl8153_unload; + ops->eee_get =3D r8153_get_eee; + ops->eee_set =3D r8152_set_eee; + ops->in_nway =3D rtl8153_in_nway; + ops->hw_phy_cfg =3D r8157_hw_phy_cfg; + ops->autosuspend_en =3D rtl8157_runtime_enable; + ops->change_mtu =3D rtl8156_change_mtu; + tp->rx_buf_sz =3D 48 * 1024; + tp->support_2500full =3D 1; + tp->support_5000full =3D 1; + tp->support_10000full =3D 1; + r8157_desc_init(tp); + break; + default: ret =3D -ENODEV; dev_err(&tp->intf->dev, "Unknown Device\n"); @@ -9843,6 +10080,9 @@ static u8 __rtl_get_hw_ver(struct usb_device *udev) case 0x1030: version =3D RTL_VER_16; break; + case 0x2020: + version =3D RTL_VER_17; + break; default: version =3D RTL_VER_UNKNOWN; dev_info(&udev->dev, "Unknown version 0x%04x\n", ocp_data); @@ -10160,6 +10400,7 @@ static const struct usb_device_id rtl8152_table[] = =3D { { USB_DEVICE(VENDOR_ID_REALTEK, 0x8155) }, { USB_DEVICE(VENDOR_ID_REALTEK, 0x8156) }, { USB_DEVICE(VENDOR_ID_REALTEK, 0x8157) }, + { USB_DEVICE(VENDOR_ID_REALTEK, 0x815a) }, =20 /* Microsoft */ { USB_DEVICE(VENDOR_ID_MICROSOFT, 0x07ab) }, --=20 2.47.3 From nobody Tue Jun 16 19:36:52 2026 Received: from bkemail.birger-koblitz.de (bkemail.birger-koblitz.de [23.88.97.239]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2B58640FDB6; Wed, 29 Apr 2026 17:01:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=23.88.97.239 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777482106; cv=none; b=ErThuiKYRG59DgPOz435uoBLEH+BrLdBIt2ZBACq7lisXWvSTTMBortrRdfQYimxP4yp1R3mU104udbZQPI/Gjj/X8NPhbYpZmf3t0o5KTgAZEbdrRLPeSS5JlgDGwp9JS1c7UPek6MXEMVV7IGZ//df/KmHM+sGDUv9aGIHkPY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777482106; c=relaxed/simple; bh=8P79ieZIPwOXD8F50b9fNK6Mz7VEldq+wxBQHBh6KsQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ARHHi43RsKSUiyWwj7+ea3ot+B0r8hnTl6D3b2ZWZcbjCCHpvYtYCH2qK6jy6wZh3qhq+XxW712lRwdwSjhLjP3xbiU53hEwdZms2Fk9DTHhBQmHqmKLsbKSK9Dt7+1zLlZLDXujmaOMb1LmX9eGnuPhn8LVF4URxlyYLhx8ZwI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=birger-koblitz.de; spf=pass smtp.mailfrom=birger-koblitz.de; dkim=pass (2048-bit key) header.d=birger-koblitz.de header.i=@birger-koblitz.de header.b=DSfmBtdM; dkim=pass (2048-bit key) header.d=birger-koblitz.de header.i=@birger-koblitz.de header.b=m2GZ74gE; arc=none smtp.client-ip=23.88.97.239 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=birger-koblitz.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=birger-koblitz.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=birger-koblitz.de header.i=@birger-koblitz.de header.b="DSfmBtdM"; dkim=pass (2048-bit key) header.d=birger-koblitz.de header.i=@birger-koblitz.de header.b="m2GZ74gE" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=birger-koblitz.de; s=default; t=1777482103; bh=8P79ieZIPwOXD8F50b9fNK6Mz7VEldq+wxBQHBh6KsQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=DSfmBtdMtBNkYmPKYqQzCan10Zh53LSdcu8heivSboB1y/m4gsbi0Dy2tqLwLngcB qLKEVZuvE7GkbLn4q+iCdQ41KySxuSwcGIWqS2tfPwP/uc/6NgMWrWfXdT3fFJ6fdW ASTRXkSqvwjGtU2li9XCRgQ+mCtIuIsBsqzV6fTeUb4OyRXJoJi7QY/vjjXb+vGDSK qafEYT5JgIx+158aunJ6HksjpS5CR+aSpcmzKF5lPz2bPB7lHXa1F9aOQRfqq9Kw/R XBMaahK0C0XfNPfpby4hEXG9M56pJKixbTcmdLcg6PWJOp7UFbWO20rN4LCLWTm8np 2JM+TxF2W70oA== Received: by bkemail.birger-koblitz.de (Postfix, from userid 109) id A87D2481BE; Wed, 29 Apr 2026 17:01:43 +0000 (UTC) X-Spam-Level: DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=birger-koblitz.de; s=default; t=1777482099; bh=8P79ieZIPwOXD8F50b9fNK6Mz7VEldq+wxBQHBh6KsQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=m2GZ74gEkXybkCiPFCv7ykdklDVX9vWPq1eMt0MeU4rm2TD9SEs0M7GVS+XrY3YGd Muyyt7RBjgY1yffwrk2IqoMeba1uYO+QHGeN+ibx7eQy5DPzHNfuSraSJxmGEv3Ac3 CUb4VsP7oHgeEdCJpjMLuZSM6KO40v8qgxdrUeuZp22TBR+ClJin2YFSrKutLTao1D c+d63V6gJXLE4HfVH0USauuUSd4pQ1+JYd8NwUu1g4FAShqqYmmhtOL5v1PmmawnZx JwFRm7LC7UB5Zd1ka6b/Asl7um7YjzVLL3d1iDlWI2x6UvqnDVMc+4B5iclKdTDyvE bJQapWgiNzYvw== Received: from AMDDesktop.lan (unknown [IPv6:2a00:6020:47a3:e800:271c:c6c5:9fde:77cb]) by bkemail.birger-koblitz.de (Postfix) with ESMTPSA id 4AE4C48186; Wed, 29 Apr 2026 17:01:39 +0000 (UTC) From: Birger Koblitz Date: Wed, 29 Apr 2026 19:01:11 +0200 Subject: [PATCH net-next v2 3/4] r8152: Add irq mitigation for RTL8157/9 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260429-rtl8159_net_next-v2-3-bab3cd4e4c66@birger-koblitz.de> References: <20260429-rtl8159_net_next-v2-0-bab3cd4e4c66@birger-koblitz.de> In-Reply-To: <20260429-rtl8159_net_next-v2-0-bab3cd4e4c66@birger-koblitz.de> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: linux-usb@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Chih Kai Hsu , Birger Koblitz X-Mailer: b4 0.14.2 Add interrupt mitigation code for both RTL8157 and RTL8159 that prevents USB interrupt callbacks with urb->status ESHUTDOWN being triggered. While t= he issue is rarely seen on the RTL8157, without the mitigation, it is common on the RTL8159: [273.561863] r8152 7-1:1.0 enx88c9b3b5xxxx: Stop submitting intr, status -1= 08 Signed-off-by: Birger Koblitz Tested-by: Aleksander Jan Bajkowski --- drivers/net/usb/r8152.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c index 2a07dde289e2240b221664ae5c5bceec35b5a1ef..9fcad3dac76f8aa76ef074cabd3= b08348dc234bc 100644 --- a/drivers/net/usb/r8152.c +++ b/drivers/net/usb/r8152.c @@ -8452,6 +8452,12 @@ static void r8156_init(struct r8152 *tp) else r8153_u2p3en(tp, false); =20 + if (tp->version >=3D RTL_VER_16) { + /* Disable Interrupt Mitigation */ + ocp_byte_clr_bits(tp, MCU_TYPE_USB, 0xcf04, + BIT(0) | BIT(1) | BIT(2) | BIT(7)); + } + /* MSC timer =3D 0xfff * 8ms =3D 32760 ms */ ocp_write_word(tp, MCU_TYPE_USB, USB_MSC_TIMER, 0x0fff); =20 --=20 2.47.3 From nobody Tue Jun 16 19:36:52 2026 Received: from bkemail.birger-koblitz.de (bkemail.birger-koblitz.de [23.88.97.239]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7F5F7410D1D; Wed, 29 Apr 2026 17:01:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=23.88.97.239 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777482107; cv=none; b=WJQh68Aw791560sUOqataWJWD18Wdjyh9XT/HFPGezMuiS+mycZPBzZiklN8BvwETJosjcDxJNdXPx0n1etWHI15qhnDnpBTrSxOePw/kDGph8xi5uip91NIbdTn5rimv8wRzsMZTN+qVI+69S0/STSHPXbVe0UME3rqaupG5Vk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777482107; c=relaxed/simple; bh=eol+1DnsahDPt0HbY+ktrtopC/qEvd8XCdKez3IJQ2A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pJuOQQxq7TI+xSR7X9szLnycGFOH1Fvh37G6uvIqTPPJw+jXQ1+uVh5KDNoKk66Nf5qoEnGTEYS5NZMCKiozdJjp6giEZyZRwuk3Yh2ZDXHEBBE0lwWB8hqmWP7uHGUPZ8DG5WO6xRTiDdKIVz3wTz65pFbLR3jiClzF+Zwxc9k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=birger-koblitz.de; spf=pass smtp.mailfrom=birger-koblitz.de; dkim=pass (2048-bit key) header.d=birger-koblitz.de header.i=@birger-koblitz.de header.b=2wO2sW//; dkim=pass (2048-bit key) header.d=birger-koblitz.de header.i=@birger-koblitz.de header.b=ijUiT+bw; arc=none smtp.client-ip=23.88.97.239 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=birger-koblitz.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=birger-koblitz.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=birger-koblitz.de header.i=@birger-koblitz.de header.b="2wO2sW//"; dkim=pass (2048-bit key) header.d=birger-koblitz.de header.i=@birger-koblitz.de header.b="ijUiT+bw" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=birger-koblitz.de; s=default; t=1777482104; bh=eol+1DnsahDPt0HbY+ktrtopC/qEvd8XCdKez3IJQ2A=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=2wO2sW//jt6UMP6gWHHyrIy47r+HxSwmEeM4ORaNt2cqJOBT5rRGYOisnC6vYdEVq QlhSAtZhfJYHN10lHEGqo8KrsAhQYLT1o8m34Id9EEZLEbaIP+p3Rh3dJNjd95lsCY kBYjVD9xFACfVqUkEch6TGsPj6kpvVUtgeLPqygHTBEjSayqHS/6IkngIJa9dq5u5j xeVSsCYON3VMVnbDI7wlqd6z/C3SLtIqm8a2rmziuUzsFq+G5iEYoBMI/nF0kg/SpK 1QLqmwqtb3sXlJyFAVSrZP3iCivdyUPSSGd783pOf3YIblHMgCkNlX+UNvSJxkmDNd soojGrT0tpGRQ== Received: by bkemail.birger-koblitz.de (Postfix, from userid 109) id 2024B481B1; Wed, 29 Apr 2026 17:01:44 +0000 (UTC) X-Spam-Level: DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=birger-koblitz.de; s=default; t=1777482099; bh=eol+1DnsahDPt0HbY+ktrtopC/qEvd8XCdKez3IJQ2A=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=ijUiT+bw9ccWDhIFwFxJslyLTldV2dt3yFOkYkkb+P27irR/9srbTv5LeCTKAwRnm eHdusg2W3SeuZfZM6t6A5CDmEEFa3+Ky32x3AQ2dtEvqzzSw8Wk8aURxDJ3jz+/1wG WWlM1nnMh84uZ3HyhVMaN7YKyl8s9rIXWcqFvbxp7Eg4VfbtMYk6GogyM6bNaXZDBl JyukrGI6MrOM1nBrj2fAMYBnC6XS0H0k+5tG1RFsbIpZ1IE7u3PrBlqxHuMudXIX7R xfCcyrKHrU8BXTclr33p+GA4bAfzaM8J1obGsrmUDrEg8gbbK2zXRVYYhg+m9M9Ja2 mK5usLur71ehA== Received: from AMDDesktop.lan (unknown [IPv6:2a00:6020:47a3:e800:271c:c6c5:9fde:77cb]) by bkemail.birger-koblitz.de (Postfix) with ESMTPSA id 895794818A; Wed, 29 Apr 2026 17:01:39 +0000 (UTC) From: Birger Koblitz Date: Wed, 29 Apr 2026 19:01:12 +0200 Subject: [PATCH net-next v2 4/4] r8152: Add firmware upload capability for RTL8157/RTL8159 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260429-rtl8159_net_next-v2-4-bab3cd4e4c66@birger-koblitz.de> References: <20260429-rtl8159_net_next-v2-0-bab3cd4e4c66@birger-koblitz.de> In-Reply-To: <20260429-rtl8159_net_next-v2-0-bab3cd4e4c66@birger-koblitz.de> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: linux-usb@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Chih Kai Hsu , Birger Koblitz X-Mailer: b4 0.14.2 The RTL8159 (RTL_VER_17) requires firmware for its PHY in order to work at connection speeds > 5GBit. Add support for uploading firmware for the PHY using the existing rtl8152_apply_firmware() function in r8157_hw_phy_cfg() and set up the correct names for the firmware files. This also adds support for uploading firmware for the RTL8157 (RTL_VER_16) PHY, for which firmware is however not strictly necessary to work. Still, this allows to upload newer versions of the firmware used by this chip, e.g. to improve interoperability. If no firmware is found, both the RTL8157 and the RTL8159 will continue to work. Signed-off-by: Birger Koblitz Tested-by: Aleksander Jan Bajkowski --- drivers/net/usb/r8152.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c index 9fcad3dac76f8aa76ef074cabd3b08348dc234bc..8d880afd88c9392cd873a5015a0= d7feee538ac7f 100644 --- a/drivers/net/usb/r8152.c +++ b/drivers/net/usb/r8152.c @@ -4663,10 +4663,11 @@ static bool rtl8152_is_fw_phy_speed_up_ok(struct r8= 152 *tp, struct fw_phy_speed_ case RTL_VER_11: case RTL_VER_12: case RTL_VER_14: - case RTL_VER_16: goto out; case RTL_VER_13: case RTL_VER_15: + case RTL_VER_16: + case RTL_VER_17: default: break; } @@ -7996,12 +7997,14 @@ static void r8157_hw_phy_cfg(struct r8152 *tp) data =3D r8153_phy_status(tp, 0); switch (data) { case PHY_STAT_EXT_INIT: + rtl8152_apply_firmware(tp, true); ocp_reg_clr_bits(tp, 0xa466, BIT(0)); ocp_reg_clr_bits(tp, 0xa468, BIT(3) | BIT(1)); break; case PHY_STAT_LAN_ON: case PHY_STAT_PWRDN: default: + rtl8152_apply_firmware(tp, false); break; } =20 @@ -9949,6 +9952,8 @@ static int rtl_ops_init(struct r8152 *tp) #define FIRMWARE_8153C_1 "rtl_nic/rtl8153c-1.fw" #define FIRMWARE_8156A_2 "rtl_nic/rtl8156a-2.fw" #define FIRMWARE_8156B_2 "rtl_nic/rtl8156b-2.fw" +#define FIRMWARE_8157_1 "rtl_nic/rtl8157-1.fw" +#define FIRMWARE_8159_1 "rtl_nic/rtl8159-1.fw" =20 MODULE_FIRMWARE(FIRMWARE_8153A_2); MODULE_FIRMWARE(FIRMWARE_8153A_3); @@ -9957,6 +9962,8 @@ MODULE_FIRMWARE(FIRMWARE_8153B_2); MODULE_FIRMWARE(FIRMWARE_8153C_1); MODULE_FIRMWARE(FIRMWARE_8156A_2); MODULE_FIRMWARE(FIRMWARE_8156B_2); +MODULE_FIRMWARE(FIRMWARE_8157_1); +MODULE_FIRMWARE(FIRMWARE_8159_1); =20 static int rtl_fw_init(struct r8152 *tp) { @@ -9995,6 +10002,12 @@ static int rtl_fw_init(struct r8152 *tp) rtl_fw->pre_fw =3D r8153b_pre_firmware_1; rtl_fw->post_fw =3D r8153c_post_firmware_1; break; + case RTL_VER_16: + rtl_fw->fw_name =3D FIRMWARE_8157_1; + break; + case RTL_VER_17: + rtl_fw->fw_name =3D FIRMWARE_8159_1; + break; default: break; } --=20 2.47.3