From nobody Sat Jun 13 02:19:19 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 877042D0610; Tue, 28 Apr 2026 03:47:35 +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=1777348057; cv=none; b=SWcYv5eA7qjDJOOyn0Mtx3NqEuDYbdoPFcnYFwNgQzSf1uy/bqXTCVy8TItt4VWSKvMZHfjbsBEaVqesusLEH79F27bTr64L1ktdlwpaDIG6Ax+UDNleCIZkmGzWaRDMYgdBgItdgSuhDSYLIG1Tk6gEoU3p2spMJF918UKYTq8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777348057; c=relaxed/simple; bh=iQ/eoC1GV+1Ova+P8hwer13i+tvxj2gUmoJ1TI22vE8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SSmBL9RjG2KckkKfTBUkxdxJH3ZIqqayMVt0owuHBsdXoIYk/AQ6zQsWc0MfLNET4WKmfAIXbuF+e1pLscnVPkiF3MoglA8JR1xHfs+FkM/ULLGH2TFB55YJvmO4YhYMF5qdiPf/7K81OK2vkjXNDnOTFjLOGmopR1cwEQCxh0A= 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=0BQVdo7Q; dkim=pass (2048-bit key) header.d=birger-koblitz.de header.i=@birger-koblitz.de header.b=CIcCEseT; 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="0BQVdo7Q"; dkim=pass (2048-bit key) header.d=birger-koblitz.de header.i=@birger-koblitz.de header.b="CIcCEseT" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=birger-koblitz.de; s=default; t=1777348054; bh=iQ/eoC1GV+1Ova+P8hwer13i+tvxj2gUmoJ1TI22vE8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=0BQVdo7QiFsEKKXtdiwVPE1HfQfZbrWxIxHA7V1SuffZM2gLF5rVfwvBdCuJf6cf2 AChp+dmg0SaW7P9K5Q6kY8rawIg8NBmbGbPPiDIm6EHToiQMheSogkKqEP/NzMxFKe U1x9Xgb7APbqJO1noYnl1CQWoNt5jnCwWNpuuDFYblC152lEbilkG8EKD56xb9v1hf oqYA5N+q70HUCnHJ0Bwpt37qtrrbWXlxpd+ppd+z6gj8GMYYzIKwtGLhl7djg4hSMz JoCJ3MCNyxHj5rGSElRqY7rhgsy+f9R4KTg8Xah9WTvS2BA9+qxQJSOKOy1nk28feJ QEjqjY9l/jIog== Received: by bkemail.birger-koblitz.de (Postfix, from userid 109) id 1607747DBB; Tue, 28 Apr 2026 03:47:34 +0000 (UTC) X-Spam-Level: DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=birger-koblitz.de; s=default; t=1777348052; bh=iQ/eoC1GV+1Ova+P8hwer13i+tvxj2gUmoJ1TI22vE8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=CIcCEseTs+xWYuB0qXpGBuLeKF1qF5bQEPWX06Dfy5JpyOMzWRgpT75MXqEhYFof6 IOLabXb9322y3IralaQhAAWDLNQaGPdS1jaeyvl9noUMZEYwJ/9JYBxj4+PxydcgnF msaoHjda0tdDu0R+k4ap8n96bKMv5Mmuknukek3k/I3A5xhLShZbj9jlefLhfOXlj+ FSZWb4JuWODCQIJHyw2++jm7p7rMLK04pQNTVLXS3AwGEV7yOZtjM+LooIRZ2bk0m6 sRLYYpd7iMHkHv1ZWYt85hAHaTtGg6aX/tXcqykLcGQm9T+SVzlZsrxuNk6XjXAhq7 JSWZqUljuHUDQ== Received: from AMDDesktop.lan (unknown [IPv6:2a00:6020:47a3:e800:271c:c6c5:9fde:77cb]) by bkemail.birger-koblitz.de (Postfix) with ESMTPSA id 6DDC64761E; Tue, 28 Apr 2026 03:47:32 +0000 (UTC) From: Birger Koblitz Date: Tue, 28 Apr 2026 05:47:21 +0200 Subject: [PATCH net-next 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: <20260428-rtl8159_net_next-v1-1-52d03927b46f@birger-koblitz.de> References: <20260428-rtl8159_net_next-v1-0-52d03927b46f@birger-koblitz.de> In-Reply-To: <20260428-rtl8159_net_next-v1-0-52d03927b46f@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 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 --- 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 Sat Jun 13 02:19:19 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 0497D31A7F6; Tue, 28 Apr 2026 03:47:37 +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=1777348059; cv=none; b=Yl9X9VvsZrvsFbsElFkjCws9a+QCqy6nS4KNV8HjiyV0AlfiLcOJPG+0aVp9fHZ2D8iRj8hYWzzd0geO/kwBzF+zchdY44V0aJ20tzI8rvP86glc9wCNZFB9FLsAk0hZj0l1RYcTAOKgJDdK/BrNgB5UJBeAY07OAL1wwT8XC94= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777348059; c=relaxed/simple; bh=KaNozOAWBlw4pz9SEPvbi4pEd040ijLPdLsoL6Fx9UY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=EgNj7vACO8qFllIdTo9f85uJLSAgNdC920j+eFb8exDA3pCX4fGIPddqG46dBUEtHDHu52z6blO0XGNDPV99LnXRgW8YCFkXpqCbaUEyZu3tHD55kNFaZIOBUoF2Kt5Smig0yr15SV6DoOqgLAUEih99ryXn0US6NEn2iD4kEBU= 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=aMUU/srN; dkim=pass (2048-bit key) header.d=birger-koblitz.de header.i=@birger-koblitz.de header.b=f0/apKzO; 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="aMUU/srN"; dkim=pass (2048-bit key) header.d=birger-koblitz.de header.i=@birger-koblitz.de header.b="f0/apKzO" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=birger-koblitz.de; s=default; t=1777348055; bh=KaNozOAWBlw4pz9SEPvbi4pEd040ijLPdLsoL6Fx9UY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=aMUU/srNS0oPUhqY3uriemxvU9fBnq02WlrS98M1B3xv+PaWD17RhIx2pCsD0nh20 X7aS0/KP/B2wDsb/1d1hlzxo7TXmgKIf9E77tXkWY3dggcXCZgt6oNtkO577WYAKX4 tqZ8cbinDxEKe3C/e89h4cjDkw6k7bhwTn3uo+GZocz2PZuckBJFd51joj1UOdPKDO PFmAdwhK51FCxFDsaW2iZ6X5R4y8eDQBGHtgjIUzeSTsAeUo6lTvEG22MDJOnbcPRV W7LPIQCh7hfu4F2ya4MpBDSV+mbpp+ldZeSHecNpBi5EgNJOr2kkLYo3I2fpjpdNH9 ksBn/Ur1HkbFg== Received: by bkemail.birger-koblitz.de (Postfix, from userid 109) id 99F7E47DD5; Tue, 28 Apr 2026 03:47:35 +0000 (UTC) X-Spam-Level: DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=birger-koblitz.de; s=default; t=1777348052; bh=KaNozOAWBlw4pz9SEPvbi4pEd040ijLPdLsoL6Fx9UY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=f0/apKzOP6amax2C/u3Ya4fYydktNM7kRsq6hR5p5ONrLlPBIXZn2gbd4Q6v/6J5P B8NOxxqa+gcNLrre6F2F+9HLy3fu8C112k4CIwA2VtN4e+RswXsAbE3wP0RRKh1FD6 AXDx5NNH4Y0LKu36kE17pSCY9/ewr4/COo7bacZYeIShiXV0cWa1OcDg88Nj+hZ7OP hmR0LnKfsl4+yv0KTD0qJtCSScAhokVE0cK2BekWcYFPyD8hAU8Q3BTnD76f3u42pK Z6Fdfv95Ga4ndUeCmrIm/pIgPzqlwA2iT2QgVXkn+l02zG4sbEUOH8ZaqIFxW9Dkam 98dL0iiOpbI4A== Received: from AMDDesktop.lan (unknown [IPv6:2a00:6020:47a3:e800:271c:c6c5:9fde:77cb]) by bkemail.birger-koblitz.de (Postfix) with ESMTPSA id AF260478CD; Tue, 28 Apr 2026 03:47:32 +0000 (UTC) From: Birger Koblitz Date: Tue, 28 Apr 2026 05:47:22 +0200 Subject: [PATCH net-next 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: <20260428-rtl8159_net_next-v1-2-52d03927b46f@birger-koblitz.de> References: <20260428-rtl8159_net_next-v1-0-52d03927b46f@birger-koblitz.de> In-Reply-To: <20260428-rtl8159_net_next-v1-0-52d03927b46f@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 --- drivers/net/usb/r8152.c | 249 ++++++++++++++++++++++++++++++++++++++++++++= ++-- 1 file changed, 241 insertions(+), 8 deletions(-) diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c index 01e65d845f8732f23427305423e4e270dae775dc..8255261d73148a7b4dabe0188fa= f07cb1f356437 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 }; @@ -3431,6 +3432,7 @@ static void rtl8152_nic_reset(struct r8152 *tp) ocp_word_clr_bits(tp, MCU_TYPE_USB, USB_USB_CTRL, CDC_ECM_EN); break; =20 + case RTL_VER_17: case RTL_VER_16: ocp_byte_clr_bits(tp, MCU_TYPE_PLA, PLA_CR, CR_RE | CR_TE); break; @@ -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,184 @@ 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 +8362,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 +8383,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 +8404,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 +8421,9 @@ static void r8156_init(struct r8152 *tp) return; } =20 + if (tp->version =3D=3D RTL_VER_17 && r8159_wait_backup_restore(tp)) + 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 +8439,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 +8450,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 +8497,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 +8508,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 +9896,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 +10072,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 +10392,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 Sat Jun 13 02:19:19 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 5124F3246F4; Tue, 28 Apr 2026 03:47:37 +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=1777348058; cv=none; b=L7sVWyivTasLAbW00Tmld560JmL2BoaCl/KZNMh0aRST9mGpzUOtBIE50OlTSnvkNeHkfGjo+O1RAe21xw55ork6zjmr9pQSltGlEg0mCHmodhfk9V4b4xxKIKLsL596KaAUaQ0pcuf8NPhf/Sc+unNo73eDvZaNW23JZ2o48nk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777348058; c=relaxed/simple; bh=2HeLRS+9Oy1I9V2GqKYRBj5SGf5uOCzP41BzpxFObe0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=F32v0JD1H8wtUbwh6zFjP4e63yI7fbq8kUfwpZ9837pEGSKg6nBdCCS/QTm6M3y92j+8WBmhF9ysnX8CN/El/f10ZKA46wEOgTNmPJFVjVP2p/0JsSBIvV8sST5H6UXd/nALTJ3a0e4/4tNZJoUsn5rlmbnuMnDop6kzjsP55wE= 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=UYkNN7t2; dkim=pass (2048-bit key) header.d=birger-koblitz.de header.i=@birger-koblitz.de header.b=fD3N5uIf; 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="UYkNN7t2"; dkim=pass (2048-bit key) header.d=birger-koblitz.de header.i=@birger-koblitz.de header.b="fD3N5uIf" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=birger-koblitz.de; s=default; t=1777348055; bh=2HeLRS+9Oy1I9V2GqKYRBj5SGf5uOCzP41BzpxFObe0=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=UYkNN7t2LQkn3p9T6I5yv9i5t5xas+rc+zr8WXr5bMssLH0uCi3FPQfijPWol/ptO X6z93UY4PNsBWMPE/4SRBclCOBUXmp5UFAaDeyBsptrNOHty4Thfh4D6F75mPdGP74 iqI74YJWDDzkE/koWxYYP3M/cxp04qeHD+IbmEUeiOatLFLSOTCqr2PNIBWj31xa4w nXfZxdGGbZQuJISEscwrzXXDImY5nTnU/NC5NU+XpIke6DvugatCKKK3S9Peov1KCe 9GcCwt7M8fMAh/RElVEH83Ys8UHpuOx1d8afuw7YsHPD4PmYjTl4AefUWFw6joT0WQ PoeozyDEo9rew== Received: by bkemail.birger-koblitz.de (Postfix, from userid 109) id BA87347DAF; Tue, 28 Apr 2026 03:47:35 +0000 (UTC) X-Spam-Level: DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=birger-koblitz.de; s=default; t=1777348053; bh=2HeLRS+9Oy1I9V2GqKYRBj5SGf5uOCzP41BzpxFObe0=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=fD3N5uIfZHG5/9rPASI0npkl99iPphEv5Gwh58r2jLXFv47URbXmCAkp1ixpNc1ef qTeuCJqaSI0wekaoky2Bwa/ks4mJqoZ/fyb977glNNuvsD5bfJHjec05cNmr+QjzP+ SUSvxmcuITR8E4TXrjafqhhuBfVFeethnXm9dY4m8PHBV4C5EbghM25QSjUAWoA8UU V3nO7unAhH1iMVCYtTBZuFCh9vRRqoq6sRVaMigKzUoOrLWU9tvCSqbYfC5amrZj/4 15ecIqObiiK++9LnR3DJPDd3lKt4tDgoCDQrWB9XxISQJOutCyc46KjMYWRN12T4eT BH7hnWK+OBULg== Received: from AMDDesktop.lan (unknown [IPv6:2a00:6020:47a3:e800:271c:c6c5:9fde:77cb]) by bkemail.birger-koblitz.de (Postfix) with ESMTPSA id F181E476A4; Tue, 28 Apr 2026 03:47:32 +0000 (UTC) From: Birger Koblitz Date: Tue, 28 Apr 2026 05:47:23 +0200 Subject: [PATCH net-next 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: <20260428-rtl8159_net_next-v1-3-52d03927b46f@birger-koblitz.de> References: <20260428-rtl8159_net_next-v1-0-52d03927b46f@birger-koblitz.de> In-Reply-To: <20260428-rtl8159_net_next-v1-0-52d03927b46f@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 --- 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 8255261d73148a7b4dabe0188faf07cb1f356437..08cc3c1dae0facb2400890ba4d0= 93c97ed56d40b 100644 --- a/drivers/net/usb/r8152.c +++ b/drivers/net/usb/r8152.c @@ -8444,6 +8444,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 Sat Jun 13 02:19:19 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 93B593254A9; Tue, 28 Apr 2026 03:47:37 +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=1777348059; cv=none; b=gLeSJr4Opz3wYfjalw1rBurBbsbVmNlQpC7TOZ2mscKeTU2b4j94hTZjQLjnKYYVKHRML3tmTmtokWmq9k46OkYwc00M+43fD6UxPJeOgm2uJyY4QLAM8V1PcbpiXZrgUPmPxmmXI6oh3sJhge97xS2I9Ozgxp2ZHMjrEh4TUpw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777348059; c=relaxed/simple; bh=Ue/Yt2sNqpCKF/L65QQ7e6/PWVKVomQsIcdBCjnAhBg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZTu1PHhS/H6ElfpuZWydJMQduLs4rxiYeXRL1d87t1KkBInF0IO7SNLwCh+0bdFSplM2v33blE2hKv5NG50x0sONwF7LFlu78Fbgf+q50HLMRdVX5rh+f5iRVMYzlipAgxOyaJFUMo4AxPq609sonSSUBEFwf048hK8ovcNKYH0= 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=DeA8bs+V; dkim=pass (2048-bit key) header.d=birger-koblitz.de header.i=@birger-koblitz.de header.b=nKUSUSu+; 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="DeA8bs+V"; dkim=pass (2048-bit key) header.d=birger-koblitz.de header.i=@birger-koblitz.de header.b="nKUSUSu+" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=birger-koblitz.de; s=default; t=1777348056; bh=Ue/Yt2sNqpCKF/L65QQ7e6/PWVKVomQsIcdBCjnAhBg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=DeA8bs+V0BwFJSH+slVrBkXgg8xopZrWEnAz1GswLkD79kYDAFdBqQATTB8S4Y12D RXWIQ4rDkIq1ZUPKb08PgQi/XtVdyFE/QBR4XlNNO30023AJ7LrQneTHMnZMdBRg9X e36wRWdWHZWep1I7QnY3NA2kaeC6pDvV4x7xKa1TXNkuQ2u4lmdTF3xEWDFXK1m6dq c3mcfSkJDKM9HnQsjKW5X9hO6S0rEJY5dl1GnoIGjsZnI5BLcmr8xsHcNQgIsfp1KN jd7D9E4H8wbORL2cFxvvfRtFRzyyO1rtv8ROypw8YNclVo6QBIlRc/PBE9NcLfuItC hfrRfBaT1sUQg== Received: by bkemail.birger-koblitz.de (Postfix, from userid 109) id 2BA2147DDE; Tue, 28 Apr 2026 03:47:36 +0000 (UTC) X-Spam-Level: DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=birger-koblitz.de; s=default; t=1777348053; bh=Ue/Yt2sNqpCKF/L65QQ7e6/PWVKVomQsIcdBCjnAhBg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=nKUSUSu+Bq418rAZ7H7gyVQ2wC+QS7eAVZTXTHj7Y428SfRk2vr/lo4Kaj3irdyOK 9PZmHIiUmyrosEoAZYEypEEguG2Qa3tF8OnL7qMiPawmeZqaEN+blTIZUu4NwfHn2P 1r2heINekU13pjBrNZHrQ8+J0hMfBSobLoS6BRiKaU5jDrHChb9D4rhCquKjY7AhQy CPZMDtBTPe7xL9TrcCwJzck9POBqfYqg9PgnepgHrhKPCowyZmDH2AlQUBd9+ThB/V J9gAGISGH63aFNllpbloocoWcQ+pMfR2GeCz3fesEIOqBq62cq5+SV7sEinkzX2IOE QsOLuiTQW9LSw== Received: from AMDDesktop.lan (unknown [IPv6:2a00:6020:47a3:e800:271c:c6c5:9fde:77cb]) by bkemail.birger-koblitz.de (Postfix) with ESMTPSA id 3912547DAB; Tue, 28 Apr 2026 03:47:33 +0000 (UTC) From: Birger Koblitz Date: Tue, 28 Apr 2026 05:47:24 +0200 Subject: [PATCH net-next 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: <20260428-rtl8159_net_next-v1-4-52d03927b46f@birger-koblitz.de> References: <20260428-rtl8159_net_next-v1-0-52d03927b46f@birger-koblitz.de> In-Reply-To: <20260428-rtl8159_net_next-v1-0-52d03927b46f@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 requires firmware for its PHY in order to work at connection speeds > 5GBit. Add support for uploading firmware for the PHYs using the existing rtl8152_apply_firmware() function in r8157_hw_phy_cfg() and set up the correct names for the firmware files. If no firmware is found, both the RTL8157 and the RTL8159 will continue to work. Signed-off-by: Birger Koblitz --- 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 08cc3c1dae0facb2400890ba4d093c97ed56d40b..56e00fe6f32405ce753df3e03e5= 4a7daaf1a29ac 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 @@ -9941,6 +9944,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); @@ -9949,6 +9954,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) { @@ -9987,6 +9994,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