From nobody Tue Apr 7 09:48: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 984CB54768; Sat, 14 Mar 2026 09:31:52 +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=1773480714; cv=none; b=ok9AaqvTQt/czx3L4c7Fq1bawRSalHH6JUMfIRl+IkY9CpujR5c463au2VfXa+t8HSp8TNLFON4bjSvjo00rIAuP4L7fvDbJDSH0pWJ7i0m4KPkA5p+RkbdAhuV+xIV7+7aSCp4jJ9E+6hikBALcOSr8rdW4OaB6qIiUo1UbYDc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773480714; c=relaxed/simple; bh=kg1M5KLfR5Qb64R4Q4qeIgsFHFjGRkixCYeT1nI+vj4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GuwIOywMCXp7jEowDkJJUHAbT0W8Rl0PReEhpWLOtNvc67FPW1H0xDO2rtxTapOWwblK5n32aAxMhzWC89TIUj6aAHDoGEqXYb681pzYVg9ScIcChM4j4w9X1wrtIxAEGayVlZqdYaZQDAtv6ElKbc9gmH5UpCbdYxnCRu06ZYE= 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=gD5GNwlN; dkim=pass (2048-bit key) header.d=birger-koblitz.de header.i=@birger-koblitz.de header.b=NBOQjM5T; 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="gD5GNwlN"; dkim=pass (2048-bit key) header.d=birger-koblitz.de header.i=@birger-koblitz.de header.b="NBOQjM5T" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=birger-koblitz.de; s=default; t=1773480708; bh=kg1M5KLfR5Qb64R4Q4qeIgsFHFjGRkixCYeT1nI+vj4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=gD5GNwlNXXqcTpXRYkq2EQsz6YXshvERChvfGl8buAhaBjIOt5V0uN+tFNUlrFPdL blThdTJeeRdUbTiJrYNMCfXehJI7fVOEGPqLikbleVKO6laLI5R6WxFL8Eazm+GCw1 X69B6fHDv4S1D6ZL6yT9jTTlnh5kP1XgL42dwWTo+AWe+uWLTzoGYRBjA2S3MZeq0M bS5Rlc5UHwjPtsMGi5wB/T/00ImSRnQyEvM7bnNyQRceCRQG+xp/IOVht9N0asyUwc 6S0YPBJ0wUrBJ4fwRYFsp9janNAkbO09qrSyHJQ107HTds/rHM3b0Xsdl1wMIR3ylZ eRGUMkX4in5mQ== Received: by bkemail.birger-koblitz.de (Postfix, from userid 109) id 48DCB3FCDC; Sat, 14 Mar 2026 09:31:48 +0000 (UTC) X-Spam-Level: DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=birger-koblitz.de; s=default; t=1773480703; bh=kg1M5KLfR5Qb64R4Q4qeIgsFHFjGRkixCYeT1nI+vj4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=NBOQjM5Tw2RdJozW1/QWjqX0lQwP+acBgEyl/rOe3PB25G1TiqxtWAd2y6r8nEQ0t JX4hgVXYagIkxQY/Y8TXtoECNS3tXJ9d++agqUfBHhu1ShI5I14G6QaZn8pFXw63mI ou7UGsocvgc7bBNf5+siE+Yn+06TxRa8jU6HVc7WOz6unDPzpzu/yOL1533C/Arno/ E1XcC4ZhP0mIvEIvz7dvMOGpuYgg7w95OYNpSRrJ0QWaErVAOkhkO2gNs5+It/PI7l vTb0vgl9hM+3uepUnsChS1nXQQTBIcvqJzsXAQB6JWur5ke8djGBADw0mDdlyfOt68 70zVNEwvCcYPw== Received: from AMDDesktop.lan (unknown [IPv6:2a00:6020:47a3:e800:271c:c6c5:9fde:77cb]) by bkemail.birger-koblitz.de (Postfix) with ESMTPSA id A38993FCC8; Sat, 14 Mar 2026 09:31:43 +0000 (UTC) From: Birger Koblitz Date: Sat, 14 Mar 2026 10:31:42 +0100 Subject: [PATCH net-next 6/9] r8152: Add support for chip version RTL_VER_16 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: <20260314-rtl8157_next-v1-6-9ba77b428afd@birger-koblitz.de> References: <20260314-rtl8157_next-v1-0-9ba77b428afd@birger-koblitz.de> In-Reply-To: <20260314-rtl8157_next-v1-0-9ba77b428afd@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, Birger Koblitz X-Mailer: b4 0.14.2 The RTL8157 uses RTL_VER_16. Add support for this version in all remaining configuration functions for power management and RX/TX configuration. Signed-off-by: Birger Koblitz --- drivers/net/usb/r8152.c | 71 ++++++++++++++++++++++++++++-----------------= ---- 1 file changed, 40 insertions(+), 31 deletions(-) diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c index 435ab6bbae6f2f3a5df59d20ba8838217bf0a841..bef38211c3157b5774ceccbfd92= 3b227f285aaaf 100644 --- a/drivers/net/usb/r8152.c +++ b/drivers/net/usb/r8152.c @@ -3609,6 +3609,7 @@ static void r8153_set_rx_early_timeout(struct r8152 *= tp) case RTL_VER_12: case RTL_VER_13: case RTL_VER_15: + case RTL_VER_16: 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, @@ -3652,6 +3653,10 @@ static void r8153_set_rx_early_size(struct r8152 *tp) ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE, ocp_data / 8); break; + case RTL_VER_16: + ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE, + ocp_data / 16); + break; default: WARN_ON_ONCE(1); break; @@ -3777,6 +3782,7 @@ static void rtl_rx_vlan_en(struct r8152 *tp, bool ena= ble) case RTL_VER_12: case RTL_VER_13: case RTL_VER_15: + case RTL_VER_16: default: ocp_data =3D ocp_read_word(tp, MCU_TYPE_PLA, PLA_RCR1); if (enable) @@ -4468,6 +4474,14 @@ static void rtl8156_runtime_enable(struct r8152 *tp,= bool enable) } } =20 +static void rtl8157_runtime_enable(struct r8152 *tp, bool enable) +{ + r8153_queue_wake(tp, enable); + r8153b_u1u2en(tp, false); + r8157_u2p3en(tp, false); + rtl_runtime_suspend_enable(tp, enable); +} + static void r8153_teredo_off(struct r8152 *tp) { u32 ocp_data; @@ -4495,6 +4509,7 @@ static void r8153_teredo_off(struct r8152 *tp) case RTL_VER_13: case RTL_VER_14: case RTL_VER_15: + case RTL_VER_16: default: /* The bit 0 ~ 7 are relative with teredo settings. They are * W1C (write 1 to clear), so set all 1 to disable it. @@ -4551,6 +4566,7 @@ static void rtl_clear_bp(struct r8152 *tp, u16 type) bp_num =3D 8; break; case RTL_VER_14: + case RTL_VER_16: default: ocp_write_word(tp, type, USB_BP2_EN, 0); bp_num =3D 16; @@ -4666,6 +4682,7 @@ static bool rtl8152_is_fw_phy_speed_up_ok(struct r815= 2 *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: @@ -5831,6 +5848,7 @@ static void rtl_eee_enable(struct r8152 *tp, bool ena= ble) case RTL_VER_12: case RTL_VER_13: case RTL_VER_15: + case RTL_VER_16: if (enable) { r8156_eee_en(tp, true); ocp_reg_write(tp, OCP_EEE_ADV, tp->eee_adv); @@ -6967,26 +6985,24 @@ static void rtl8156_up(struct r8152 *tp) return; =20 r8153b_u1u2en(tp, false); - r8153_u2p3en(tp, false); + if (tp->version !=3D RTL_VER_16) + r8153_u2p3en(tp, false); r8153_aldps_en(tp, false); =20 rxdy_gated_en(tp, true); r8153_teredo_off(tp); =20 - ocp_data =3D ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); - ocp_data &=3D ~RCR_ACPT_ALL; - ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); + ocp_word_clr_bits(tp, MCU_TYPE_PLA, PLA_RCR, RCR_ACPT_ALL); =20 rtl8152_nic_reset(tp); rtl_reset_bmu(tp); =20 - ocp_data =3D ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); - ocp_data &=3D ~NOW_IS_OOB; - ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); + ocp_byte_clr_bits(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, NOW_IS_OOB); =20 - ocp_data =3D ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); - ocp_data &=3D ~MCU_BORW_EN; - ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); + if (tp->version =3D=3D RTL_VER_16) + ocp_word_clr_bits(tp, MCU_TYPE_PLA, PLA_RCR1, BIT(3)); + + ocp_word_clr_bits(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, MCU_BORW_EN); =20 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); =20 @@ -6996,9 +7012,7 @@ static void rtl8156_up(struct r8152 *tp) case RTL_TEST_01: case RTL_VER_10: case RTL_VER_11: - ocp_data =3D ocp_read_word(tp, MCU_TYPE_USB, USB_BMU_CONFIG); - ocp_data |=3D ACT_ODMA; - ocp_write_word(tp, MCU_TYPE_USB, USB_BMU_CONFIG, ocp_data); + ocp_word_set_bits(tp, MCU_TYPE_USB, USB_BMU_CONFIG, ACT_ODMA); break; default: break; @@ -7010,13 +7024,11 @@ static void rtl8156_up(struct r8152 *tp) ocp_data |=3D 0x08; ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_FULL, ocp_data); =20 - ocp_data =3D ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3); - ocp_data &=3D ~PLA_MCU_SPDWN_EN; - ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data); + ocp_word_clr_bits(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, PLA_MCU_SPDWN_EN); =20 - ocp_data =3D ocp_read_word(tp, MCU_TYPE_USB, USB_SPEED_OPTION); - ocp_data &=3D ~(RG_PWRDN_EN | ALL_SPEED_OFF); - ocp_write_word(tp, MCU_TYPE_USB, USB_SPEED_OPTION, ocp_data); + if (tp->version !=3D RTL_VER_16) + ocp_word_clr_bits(tp, MCU_TYPE_USB, USB_SPEED_OPTION, + RG_PWRDN_EN | ALL_SPEED_OFF); =20 ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, 0x00600400); =20 @@ -7028,7 +7040,7 @@ static void rtl8156_up(struct r8152 *tp) r8153_aldps_en(tp, true); r8153_u2p3en(tp, true); =20 - if (tp->udev->speed >=3D USB_SPEED_SUPER) + if (tp->version !=3D RTL_VER_16 && tp->udev->speed >=3D USB_SPEED_SUPER) r8153b_u1u2en(tp, true); } =20 @@ -7041,13 +7053,13 @@ static void rtl8156_down(struct r8152 *tp) return; } =20 - ocp_data =3D ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3); - ocp_data |=3D PLA_MCU_SPDWN_EN; - ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data); + ocp_word_set_bits(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, PLA_MCU_SPDWN_EN); =20 r8153b_u1u2en(tp, false); - r8153_u2p3en(tp, false); - r8153b_power_cut_en(tp, false); + if (tp->version !=3D RTL_VER_16) { + r8153_u2p3en(tp, false); + r8153b_power_cut_en(tp, false); + } r8153_aldps_en(tp, false); =20 ocp_data =3D ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); @@ -7071,13 +7083,9 @@ static void rtl8156_down(struct r8152 *tp) */ ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_WAKE_BASE, 0x00ff); =20 - ocp_data =3D ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); - ocp_data |=3D NOW_IS_OOB; - ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); + ocp_byte_set_bits(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, NOW_IS_OOB); =20 - ocp_data =3D ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); - ocp_data |=3D MCU_BORW_EN; - ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); + ocp_word_set_bits(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, MCU_BORW_EN); =20 rtl_rx_vlan_en(tp, true); rxdy_gated_en(tp, false); @@ -10418,6 +10426,7 @@ static int rtl8152_probe_once(struct usb_interface = *intf, case RTL_VER_12: case RTL_VER_13: case RTL_VER_15: + case RTL_VER_16: netdev->max_mtu =3D size_to_mtu(16 * 1024); break; case RTL_VER_01: --=20 2.47.3