From: Howard Wang <howard_wang@realsil.com.cn>
To: <dev@dpdk.org>
Cc: <pro_nic_dpdk@realtek.com>, Howard Wang <howard_wang@realsil.com.cn>
Subject: [PATCH v1 2/3] net/r8169: simplify config method check with if
Date: Tue, 28 Oct 2025 16:47:15 +0800 [thread overview]
Message-ID: <20251028084716.369128-3-howard_wang@realsil.com.cn> (raw)
In-Reply-To: <20251028084716.369128-1-howard_wang@realsil.com.cn>
Signed-off-by: Howard Wang <howard_wang@realsil.com.cn>
---
drivers/net/r8169/r8169_compat.h | 1 +
drivers/net/r8169/r8169_ethdev.c | 25 +-
drivers/net/r8169/r8169_hw.c | 462 ++++++++-----------------------
drivers/net/r8169/r8169_phy.c | 237 ++--------------
drivers/net/r8169/r8169_rxtx.c | 10 +-
5 files changed, 144 insertions(+), 591 deletions(-)
diff --git a/drivers/net/r8169/r8169_compat.h b/drivers/net/r8169/r8169_compat.h
index b106105389..9163c7f59f 100644
--- a/drivers/net/r8169/r8169_compat.h
+++ b/drivers/net/r8169/r8169_compat.h
@@ -310,6 +310,7 @@ enum RTL_register_content {
RxBufEmpty = 0x01,
/* Cfg9346 bits */
+ Cfg9346_EEM_MASK = 0xC0,
Cfg9346_Lock = 0x00,
Cfg9346_Unlock = 0xC0,
Cfg9346_EEDO = (1UL << 0),
diff --git a/drivers/net/r8169/r8169_ethdev.c b/drivers/net/r8169/r8169_ethdev.c
index 1f7106a95e..f620154bf0 100644
--- a/drivers/net/r8169/r8169_ethdev.c
+++ b/drivers/net/r8169/r8169_ethdev.c
@@ -164,26 +164,19 @@ _rtl_setup_link(struct rte_eth_dev *dev)
/* Setup link speed and duplex */
if (*link_speeds == RTE_ETH_LINK_SPEED_AUTONEG) {
- switch (hw->mcfg) {
- case CFG_METHOD_48:
- case CFG_METHOD_49:
- case CFG_METHOD_50:
- case CFG_METHOD_51:
- case CFG_METHOD_52:
- case CFG_METHOD_53:
- case CFG_METHOD_54:
- case CFG_METHOD_55:
- case CFG_METHOD_56:
- case CFG_METHOD_57:
- case CFG_METHOD_58:
+ switch (hw->chipset_name) {
+ case RTL8125A:
+ case RTL8125B:
+ case RTL8168KB:
+ case RTL8125BP:
+ case RTL8125D:
+ case RTL8125CP:
speed_mode = SPEED_2500;
break;
- case CFG_METHOD_69:
- case CFG_METHOD_70:
- case CFG_METHOD_71:
+ case RTL8126A:
speed_mode = SPEED_5000;
break;
- case CFG_METHOD_91:
+ case RTL8127:
speed_mode = SPEED_10000;
break;
default:
diff --git a/drivers/net/r8169/r8169_hw.c b/drivers/net/r8169/r8169_hw.c
index cb0fadf193..f69f87c202 100644
--- a/drivers/net/r8169/r8169_hw.c
+++ b/drivers/net/r8169/r8169_hw.c
@@ -612,25 +612,6 @@ rtl_stop_all_request(struct rtl_hw *hw)
int i;
switch (hw->mcfg) {
- case CFG_METHOD_21:
- case CFG_METHOD_22:
- case CFG_METHOD_23:
- case CFG_METHOD_24:
- case CFG_METHOD_25:
- case CFG_METHOD_26:
- case CFG_METHOD_27:
- case CFG_METHOD_28:
- case CFG_METHOD_29:
- case CFG_METHOD_30:
- case CFG_METHOD_31:
- case CFG_METHOD_32:
- case CFG_METHOD_33:
- case CFG_METHOD_34:
- case CFG_METHOD_35:
- case CFG_METHOD_36:
- case CFG_METHOD_37:
- rte_delay_ms(2);
- break;
case CFG_METHOD_48:
case CFG_METHOD_49:
case CFG_METHOD_52:
@@ -656,6 +637,9 @@ rtl_stop_all_request(struct rtl_hw *hw)
RTL_W8(hw, ChipCmd, RTL_R8(hw, ChipCmd) | StopReq);
rte_delay_us(200);
break;
+ default:
+ rte_delay_ms(2);
+ break;
}
}
@@ -775,45 +759,26 @@ rtl_enable_force_clkreq(struct rtl_hw *hw, bool enable)
static void
rtl_enable_aspm_clkreq_lock(struct rtl_hw *hw, bool enable)
{
- switch (hw->mcfg) {
- case CFG_METHOD_21:
- case CFG_METHOD_22:
- case CFG_METHOD_23:
- case CFG_METHOD_24:
- case CFG_METHOD_25:
- case CFG_METHOD_26:
- case CFG_METHOD_27:
- case CFG_METHOD_28:
- case CFG_METHOD_29:
- case CFG_METHOD_30:
- case CFG_METHOD_31:
- case CFG_METHOD_32:
- case CFG_METHOD_33:
- case CFG_METHOD_34:
- case CFG_METHOD_35:
- case CFG_METHOD_36:
- case CFG_METHOD_37:
+ bool unlock_cfg_wr;
+
+ if ((RTL_R8(hw, Cfg9346) & Cfg9346_EEM_MASK) == Cfg9346_Unlock)
+ unlock_cfg_wr = false;
+ else
+ unlock_cfg_wr = true;
+
+ if (unlock_cfg_wr)
+ rtl_enable_cfg9346_write(hw);
+
+ if (hw->mcfg == CFG_METHOD_70 || hw->mcfg == CFG_METHOD_71 ||
+ hw->mcfg == CFG_METHOD_91) {
if (enable) {
- RTL_W8(hw, Config2, RTL_R8(hw, Config2) | BIT_7);
+ RTL_W8(hw, INT_CFG0_8125, RTL_R8(hw, INT_CFG0_8125) | BIT_3);
RTL_W8(hw, Config5, RTL_R8(hw, Config5) | BIT_0);
} else {
- RTL_W8(hw, Config2, RTL_R8(hw, Config2) & ~BIT_7);
+ RTL_W8(hw, INT_CFG0_8125, RTL_R8(hw, INT_CFG0_8125) & ~BIT_3);
RTL_W8(hw, Config5, RTL_R8(hw, Config5) & ~BIT_0);
}
- rte_delay_us(10);
- break;
- case CFG_METHOD_48:
- case CFG_METHOD_49:
- case CFG_METHOD_50:
- case CFG_METHOD_51:
- case CFG_METHOD_52:
- case CFG_METHOD_53:
- case CFG_METHOD_54:
- case CFG_METHOD_55:
- case CFG_METHOD_56:
- case CFG_METHOD_57:
- case CFG_METHOD_58:
- case CFG_METHOD_69:
+ } else {
if (enable) {
RTL_W8(hw, Config2, RTL_R8(hw, Config2) | BIT_7);
RTL_W8(hw, Config5, RTL_R8(hw, Config5) | BIT_0);
@@ -821,19 +786,13 @@ rtl_enable_aspm_clkreq_lock(struct rtl_hw *hw, bool enable)
RTL_W8(hw, Config2, RTL_R8(hw, Config2) & ~BIT_7);
RTL_W8(hw, Config5, RTL_R8(hw, Config5) & ~BIT_0);
}
- break;
- case CFG_METHOD_70:
- case CFG_METHOD_71:
- case CFG_METHOD_91:
- if (enable) {
- RTL_W8(hw, INT_CFG0_8125, RTL_R8(hw, INT_CFG0_8125) | BIT_3);
- RTL_W8(hw, Config5, RTL_R8(hw, Config5) | BIT_0);
- } else {
- RTL_W8(hw, INT_CFG0_8125, RTL_R8(hw, INT_CFG0_8125) & ~BIT_3);
- RTL_W8(hw, Config5, RTL_R8(hw, Config5) & ~BIT_0);
- }
- break;
+
+ if (!rtl_is_8125(hw))
+ rte_delay_us(10);
}
+
+ if (unlock_cfg_wr)
+ rtl_disable_cfg9346_write(hw);
}
static void
@@ -851,49 +810,16 @@ rtl8125_disable_eee_plus(struct rtl_hw *hw)
static void
rtl_hw_clear_timer_int(struct rtl_hw *hw)
{
- switch (hw->mcfg) {
- case CFG_METHOD_21:
- case CFG_METHOD_22:
- case CFG_METHOD_23:
- case CFG_METHOD_24:
- case CFG_METHOD_25:
- case CFG_METHOD_26:
- case CFG_METHOD_27:
- case CFG_METHOD_28:
- case CFG_METHOD_29:
- case CFG_METHOD_30:
- case CFG_METHOD_31:
- case CFG_METHOD_32:
- case CFG_METHOD_33:
- case CFG_METHOD_34:
- case CFG_METHOD_35:
- case CFG_METHOD_36:
- case CFG_METHOD_37:
+ if (hw->mcfg >= CFG_METHOD_21 && hw->mcfg <= CFG_METHOD_37) {
RTL_W32(hw, TimeInt0, 0x0000);
RTL_W32(hw, TimeInt1, 0x0000);
RTL_W32(hw, TimeInt2, 0x0000);
RTL_W32(hw, TimeInt3, 0x0000);
- break;
- case CFG_METHOD_48:
- case CFG_METHOD_49:
- case CFG_METHOD_50:
- case CFG_METHOD_51:
- case CFG_METHOD_52:
- case CFG_METHOD_53:
- case CFG_METHOD_54:
- case CFG_METHOD_55:
- case CFG_METHOD_56:
- case CFG_METHOD_57:
- case CFG_METHOD_58:
- case CFG_METHOD_69:
- case CFG_METHOD_70:
- case CFG_METHOD_71:
- case CFG_METHOD_91:
+ } else {
RTL_W32(hw, TIMER_INT0_8125, 0x0000);
RTL_W32(hw, TIMER_INT1_8125, 0x0000);
RTL_W32(hw, TIMER_INT2_8125, 0x0000);
RTL_W32(hw, TIMER_INT3_8125, 0x0000);
- break;
}
}
@@ -1035,25 +961,12 @@ rtl8125_hw_config(struct rtl_hw *hw)
RTL_W32(hw, TxConfig, (RTL_R32(hw, TxConfig) | BIT_6));
/* TCAM */
- switch (hw->mcfg) {
- case CFG_METHOD_48:
- case CFG_METHOD_49:
- case CFG_METHOD_50:
- case CFG_METHOD_51:
- case CFG_METHOD_52:
- case CFG_METHOD_53:
+ if (hw->mcfg >= CFG_METHOD_48 && hw->mcfg <= CFG_METHOD_53)
RTL_W16(hw, 0x382, 0x221B);
- break;
- }
- switch (hw->mcfg) {
- case CFG_METHOD_69:
- case CFG_METHOD_70:
- case CFG_METHOD_71:
- case CFG_METHOD_91:
+ if ((hw->mcfg >= CFG_METHOD_69 && hw->mcfg <= CFG_METHOD_71) ||
+ hw->mcfg == CFG_METHOD_91)
rtl_disable_l1_timeout(hw);
- break;
- }
/* Disable speed down */
RTL_W8(hw, Config1, RTL_R8(hw, Config1) & ~0x10);
@@ -1220,18 +1133,8 @@ rtl8168_hw_config(struct rtl_hw *hw)
hw->hw_ops.hw_config(hw);
- switch (hw->mcfg) {
- case CFG_METHOD_21:
- case CFG_METHOD_22:
- case CFG_METHOD_23:
- case CFG_METHOD_24:
- case CFG_METHOD_25:
- case CFG_METHOD_26:
- case CFG_METHOD_27:
- case CFG_METHOD_28:
+ if (hw->mcfg >= CFG_METHOD_21 && hw->mcfg <= CFG_METHOD_28)
rtl_eri_write(hw, 0x2F8, 2, 0x1D8F, ERIAR_ExGMAC);
- break;
- }
rtl_hw_clear_timer_int(hw);
@@ -1260,18 +1163,14 @@ rtl8168_hw_config(struct rtl_hw *hw)
break;
}
- switch (hw->mcfg) {
- case CFG_METHOD_21:
- case CFG_METHOD_22:
- case CFG_METHOD_24:
- case CFG_METHOD_25:
- case CFG_METHOD_26:
+ if (hw->mcfg == CFG_METHOD_21 || hw->mcfg == CFG_METHOD_22 ||
+ hw->mcfg == CFG_METHOD_24 || hw->mcfg == CFG_METHOD_25 ||
+ hw->mcfg == CFG_METHOD_26) {
for (timeout = 0; timeout < 10; timeout++) {
if ((rtl_eri_read(hw, 0x1AE, 2, ERIAR_ExGMAC) & BIT_13) == 0)
break;
rte_delay_ms(1);
}
- break;
}
rtl_disable_cfg9346_write(hw);
@@ -1372,40 +1271,12 @@ rtl_hw_disable_mac_mcu_bps(struct rtl_hw *hw)
{
u16 reg_addr;
- rtl_enable_cfg9346_write(hw);
rtl_enable_aspm_clkreq_lock(hw, 0);
- rtl_disable_cfg9346_write(hw);
- switch (hw->mcfg) {
- case CFG_METHOD_29:
- case CFG_METHOD_30:
- case CFG_METHOD_31:
- case CFG_METHOD_32:
- case CFG_METHOD_33:
- case CFG_METHOD_34:
- case CFG_METHOD_35:
- case CFG_METHOD_36:
- case CFG_METHOD_37:
- rtl_mac_ocp_write(hw, 0xFC38, 0x0000);
- break;
- case CFG_METHOD_48:
- case CFG_METHOD_49:
- case CFG_METHOD_50:
- case CFG_METHOD_51:
- case CFG_METHOD_52:
- case CFG_METHOD_53:
- case CFG_METHOD_54:
- case CFG_METHOD_55:
- case CFG_METHOD_56:
- case CFG_METHOD_57:
- case CFG_METHOD_58:
- case CFG_METHOD_69:
- case CFG_METHOD_70:
- case CFG_METHOD_71:
- case CFG_METHOD_91:
+ if (rtl_is_8125(hw))
rtl_mac_ocp_write(hw, 0xFC48, 0x0000);
- break;
- }
+ else if (hw->mcfg >= CFG_METHOD_29)
+ rtl_mac_ocp_write(hw, 0xFC38, 0x0000);
if (rtl_is_8125(hw)) {
for (reg_addr = 0xFC28; reg_addr < 0xFC48; reg_addr += 2)
@@ -1618,25 +1489,81 @@ rtl_init_software_variable(struct rtl_hw *hw)
u32 tmp;
switch (hw->mcfg) {
+ case CFG_METHOD_21:
+ case CFG_METHOD_22:
+ case CFG_METHOD_24:
+ case CFG_METHOD_25:
+ hw->chipset_name = RTL8168G;
+ break;
+ case CFG_METHOD_23:
+ case CFG_METHOD_27:
+ case CFG_METHOD_28:
+ hw->chipset_name = RTL8168EP;
+ break;
+ case CFG_METHOD_29:
+ case CFG_METHOD_30:
+ case CFG_METHOD_35:
+ case CFG_METHOD_36:
+ hw->chipset_name = RTL8168H;
+ break;
+ case CFG_METHOD_31:
+ case CFG_METHOD_32:
+ case CFG_METHOD_33:
+ case CFG_METHOD_34:
+ hw->chipset_name = RTL8168FP;
+ break;
+ case CFG_METHOD_37:
+ hw->chipset_name = RTL8168M;
+ break;
case CFG_METHOD_48:
case CFG_METHOD_49:
+ hw->chipset_name = RTL8125A;
+ break;
case CFG_METHOD_50:
case CFG_METHOD_51:
+ hw->chipset_name = RTL8125B;
+ break;
case CFG_METHOD_52:
case CFG_METHOD_53:
+ hw->chipset_name = RTL8168KB;
+ break;
case CFG_METHOD_54:
case CFG_METHOD_55:
+ hw->chipset_name = RTL8125BP;
+ break;
case CFG_METHOD_56:
case CFG_METHOD_57:
+ hw->chipset_name = RTL8125D;
+ break;
case CFG_METHOD_58:
- speed_mode = SPEED_2500;
+ hw->chipset_name = RTL8125CP;
break;
case CFG_METHOD_69:
case CFG_METHOD_70:
case CFG_METHOD_71:
- speed_mode = SPEED_5000;
+ hw->chipset_name = RTL8126A;
break;
case CFG_METHOD_91:
+ hw->chipset_name = RTL8127;
+ break;
+ default:
+ hw->chipset_name = UNKNOWN;
+ break;
+ }
+
+ switch (hw->chipset_name) {
+ case RTL8125A:
+ case RTL8125B:
+ case RTL8168KB:
+ case RTL8125BP:
+ case RTL8125D:
+ case RTL8125CP:
+ speed_mode = SPEED_2500;
+ break;
+ case RTL8126A:
+ speed_mode = SPEED_5000;
+ break;
+ case RTL8127:
speed_mode = SPEED_10000;
break;
default:
@@ -1644,6 +1571,8 @@ rtl_init_software_variable(struct rtl_hw *hw)
break;
}
+ hw->HwSuppMaxPhyLinkSpeed = speed_mode;
+
switch (hw->mcfg) {
case CFG_METHOD_23:
case CFG_METHOD_27:
@@ -1674,20 +1603,12 @@ rtl_init_software_variable(struct rtl_hw *hw)
break;
}
- switch (hw->mcfg) {
- case CFG_METHOD_31:
- case CFG_METHOD_32:
- case CFG_METHOD_33:
- case CFG_METHOD_34:
+ if (hw->mcfg >= CFG_METHOD_31 && hw->mcfg <= CFG_METHOD_34) {
tmp = rtl_mac_ocp_read(hw, 0xDC00);
hw->HwPkgDet = (tmp >> 3) & 0x0F;
- break;
}
- switch (hw->mcfg) {
- case CFG_METHOD_32:
- case CFG_METHOD_33:
- case CFG_METHOD_34:
+ if (hw->mcfg >= CFG_METHOD_32 && hw->mcfg <= CFG_METHOD_34) {
if (hw->HwPkgDet == 0x06) {
tmp = rtl_eri_read(hw, 0xE6, 1, ERIAR_ExGMAC);
if (tmp == 0x02)
@@ -1695,7 +1616,6 @@ rtl_init_software_variable(struct rtl_hw *hw)
else if (tmp == 0x00)
hw->HwSuppSerDesPhyVer = 2;
}
- break;
}
switch (hw->mcfg) {
@@ -1735,69 +1655,6 @@ rtl_init_software_variable(struct rtl_hw *hw)
if (HW_DASH_SUPPORT_TYPE_2(hw))
hw->cmac_ioaddr = hw->mmio_addr;
- switch (hw->mcfg) {
- case CFG_METHOD_21:
- case CFG_METHOD_22:
- case CFG_METHOD_24:
- case CFG_METHOD_25:
- hw->chipset_name = RTL8168G;
- break;
- case CFG_METHOD_23:
- case CFG_METHOD_27:
- case CFG_METHOD_28:
- hw->chipset_name = RTL8168EP;
- break;
- case CFG_METHOD_29:
- case CFG_METHOD_30:
- case CFG_METHOD_35:
- case CFG_METHOD_36:
- hw->chipset_name = RTL8168H;
- break;
- case CFG_METHOD_31:
- case CFG_METHOD_32:
- case CFG_METHOD_33:
- case CFG_METHOD_34:
- hw->chipset_name = RTL8168FP;
- break;
- case CFG_METHOD_37:
- hw->chipset_name = RTL8168M;
- break;
- case CFG_METHOD_48:
- case CFG_METHOD_49:
- hw->chipset_name = RTL8125A;
- break;
- case CFG_METHOD_50:
- case CFG_METHOD_51:
- hw->chipset_name = RTL8125B;
- break;
- case CFG_METHOD_52:
- case CFG_METHOD_53:
- hw->chipset_name = RTL8168KB;
- break;
- case CFG_METHOD_54:
- case CFG_METHOD_55:
- hw->chipset_name = RTL8125BP;
- break;
- case CFG_METHOD_56:
- case CFG_METHOD_57:
- hw->chipset_name = RTL8125D;
- break;
- case CFG_METHOD_58:
- hw->chipset_name = RTL8125CP;
- break;
- case CFG_METHOD_69:
- case CFG_METHOD_70:
- case CFG_METHOD_71:
- hw->chipset_name = RTL8126A;
- break;
- case CFG_METHOD_91:
- hw->chipset_name = RTL8127;
- break;
- default:
- hw->chipset_name = UNKNOWN;
- break;
- }
-
hw->HwSuppNowIsOobVer = 1;
switch (hw->mcfg) {
@@ -1839,31 +1696,6 @@ rtl_init_software_variable(struct rtl_hw *hw)
break;
}
- switch (hw->mcfg) {
- case CFG_METHOD_48:
- case CFG_METHOD_49:
- case CFG_METHOD_50:
- case CFG_METHOD_51:
- case CFG_METHOD_54:
- case CFG_METHOD_55:
- case CFG_METHOD_56:
- case CFG_METHOD_57:
- case CFG_METHOD_58:
- hw->HwSuppMaxPhyLinkSpeed = SPEED_2500;
- break;
- case CFG_METHOD_69:
- case CFG_METHOD_70:
- case CFG_METHOD_71:
- hw->HwSuppMaxPhyLinkSpeed = SPEED_5000;
- break;
- case CFG_METHOD_91:
- hw->HwSuppMaxPhyLinkSpeed = SPEED_10000;
- break;
- default:
- hw->HwSuppMaxPhyLinkSpeed = SPEED_1000;
- break;
- }
-
switch (hw->mcfg) {
case CFG_METHOD_48:
case CFG_METHOD_49:
@@ -2004,13 +1836,10 @@ rtl_init_software_variable(struct rtl_hw *hw)
else
hw->EnableRss = 0;
- switch (hw->mcfg) {
- case CFG_METHOD_49:
- case CFG_METHOD_52:
+ if (hw->mcfg == CFG_METHOD_49 || hw->mcfg == CFG_METHOD_52) {
if ((rtl_mac_ocp_read(hw, 0xD442) & BIT_5) &&
(rtl_mdio_direct_read_phy_ocp(hw, 0xD068) & BIT_1))
hw->RequirePhyMdiSwapPatch = TRUE;
- break;
}
switch (hw->mcfg) {
@@ -2056,14 +1885,10 @@ rtl_init_software_variable(struct rtl_hw *hw)
break;
}
- switch (hw->mcfg) {
- case CFG_METHOD_91:
+ if (hw->mcfg == CFG_METHOD_91) {
tmp = (u8)rtl_mac_ocp_read(hw, 0xD006);
if (tmp == 0x07)
hw->HwFiberModeVer = FIBER_MODE_RTL8127ATF;
- break;
- default:
- break;
}
rtl_set_link_option(hw, autoneg_mode, speed_mode, duplex_mode, rtl_fc_full);
@@ -2212,37 +2037,12 @@ rtl_exit_oob(struct rtl_hw *hw)
static void
rtl_disable_ups(struct rtl_hw *hw)
{
- switch (hw->mcfg) {
- case CFG_METHOD_29:
- case CFG_METHOD_30:
- case CFG_METHOD_31:
- case CFG_METHOD_32:
- case CFG_METHOD_33:
- case CFG_METHOD_34:
- case CFG_METHOD_35:
- case CFG_METHOD_36:
+ if (hw->mcfg >= CFG_METHOD_29 && hw->mcfg <= CFG_METHOD_36)
rtl_mac_ocp_write(hw, 0xD400,
rtl_mac_ocp_read(hw, 0xD400) & ~BIT_0);
- break;
- case CFG_METHOD_48:
- case CFG_METHOD_49:
- case CFG_METHOD_50:
- case CFG_METHOD_51:
- case CFG_METHOD_52:
- case CFG_METHOD_53:
- case CFG_METHOD_54:
- case CFG_METHOD_55:
- case CFG_METHOD_56:
- case CFG_METHOD_57:
- case CFG_METHOD_58:
- case CFG_METHOD_69:
- case CFG_METHOD_70:
- case CFG_METHOD_71:
- case CFG_METHOD_91:
+ else if (rtl_is_8125(hw))
rtl_mac_ocp_write(hw, 0xD40A,
rtl_mac_ocp_read(hw, 0xD40A) & ~BIT_4);
- break;
- }
}
static void
@@ -2250,20 +2050,7 @@ rtl_disable_ocp_phy_power_saving(struct rtl_hw *hw)
{
u16 val;
- switch (hw->mcfg) {
- case CFG_METHOD_25:
- case CFG_METHOD_26:
- case CFG_METHOD_27:
- case CFG_METHOD_28:
- case CFG_METHOD_29:
- case CFG_METHOD_30:
- case CFG_METHOD_31:
- case CFG_METHOD_32:
- case CFG_METHOD_33:
- case CFG_METHOD_34:
- case CFG_METHOD_35:
- case CFG_METHOD_36:
- case CFG_METHOD_37:
+ if (hw->mcfg >= CFG_METHOD_25 && hw->mcfg <= CFG_METHOD_37) {
val = rtl_mdio_real_read_phy_ocp(hw, 0x0C41, 0x13);
if (val != 0x0500) {
rtl_set_phy_mcu_patch_request(hw);
@@ -2271,10 +2058,8 @@ rtl_disable_ocp_phy_power_saving(struct rtl_hw *hw)
rtl_mdio_real_write_phy_ocp(hw, 0x0C41, 0x13, 0x0500);
rtl_clear_phy_mcu_patch_request(hw);
}
- break;
- case CFG_METHOD_48:
- case CFG_METHOD_49:
- case CFG_METHOD_52:
+ } else if (hw->mcfg == CFG_METHOD_48 || hw->mcfg == CFG_METHOD_49 ||
+ hw->mcfg == CFG_METHOD_52){
val = rtl_mdio_direct_read_phy_ocp(hw, 0xC416);
if (val != 0x0050) {
rtl_set_phy_mcu_patch_request(hw);
@@ -2282,23 +2067,13 @@ rtl_disable_ocp_phy_power_saving(struct rtl_hw *hw)
rtl_mdio_direct_write_phy_ocp(hw, 0xC416, 0x0500);
rtl_clear_phy_mcu_patch_request(hw);
}
- break;
}
}
static void
rtl8168_disable_dma_agg(struct rtl_hw *hw)
{
- switch (hw->mcfg) {
- case CFG_METHOD_29:
- case CFG_METHOD_30:
- case CFG_METHOD_31:
- case CFG_METHOD_32:
- case CFG_METHOD_33:
- case CFG_METHOD_34:
- case CFG_METHOD_35:
- case CFG_METHOD_36:
- case CFG_METHOD_37:
+ if (hw->mcfg >= CFG_METHOD_29 && hw->mcfg <= CFG_METHOD_37) {
rtl_mac_ocp_write(hw, 0xE63E, rtl_mac_ocp_read(hw, 0xE63E) &
~(BIT_3 | BIT_2 | BIT_1));
rtl_mac_ocp_write(hw, 0xE63E,
@@ -2307,7 +2082,6 @@ rtl8168_disable_dma_agg(struct rtl_hw *hw)
rtl_mac_ocp_read(hw, 0xE63E) & ~(BIT_0));
rtl_mac_ocp_write(hw, 0xC094, 0x0);
rtl_mac_ocp_write(hw, 0xC09E, 0x0);
- break;
}
}
@@ -2318,9 +2092,7 @@ rtl_hw_init(struct rtl_hw *hw)
/* Disable aspm clkreq internal */
rtl_enable_force_clkreq(hw, 0);
- rtl_enable_cfg9346_write(hw);
rtl_enable_aspm_clkreq_lock(hw, 0);
- rtl_disable_cfg9346_write(hw);
rtl_disable_ups(hw);
@@ -2338,31 +2110,15 @@ rtl_hw_init(struct rtl_hw *hw)
rtl_csi_write(hw, 0x108, csi_tmp);
/* MCU PME setting */
- switch (hw->mcfg) {
- case CFG_METHOD_21:
- case CFG_METHOD_22:
- case CFG_METHOD_23:
- case CFG_METHOD_24:
+ if (hw->mcfg >= CFG_METHOD_21 && hw->mcfg <= CFG_METHOD_24) {
csi_tmp = rtl_eri_read(hw, 0x1AB, 1, ERIAR_ExGMAC);
csi_tmp |= (BIT_2 | BIT_3 | BIT_4 | BIT_5 | BIT_6 | BIT_7);
rtl_eri_write(hw, 0x1AB, 1, csi_tmp, ERIAR_ExGMAC);
- break;
- case CFG_METHOD_25:
- case CFG_METHOD_27:
- case CFG_METHOD_28:
- case CFG_METHOD_29:
- case CFG_METHOD_30:
- case CFG_METHOD_31:
- case CFG_METHOD_32:
- case CFG_METHOD_33:
- case CFG_METHOD_34:
- case CFG_METHOD_35:
- case CFG_METHOD_36:
- case CFG_METHOD_37:
+ } else if (hw->mcfg == CFG_METHOD_25 ||
+ (hw->mcfg >= CFG_METHOD_27 && hw->mcfg <= CFG_METHOD_37)) {
csi_tmp = rtl_eri_read(hw, 0x1AB, 1, ERIAR_ExGMAC);
csi_tmp |= (BIT_3 | BIT_6);
rtl_eri_write(hw, 0x1AB, 1, csi_tmp, ERIAR_ExGMAC);
- break;
}
}
diff --git a/drivers/net/r8169/r8169_phy.c b/drivers/net/r8169/r8169_phy.c
index 9da3a9d41b..9bb5774672 100644
--- a/drivers/net/r8169/r8169_phy.c
+++ b/drivers/net/r8169/r8169_phy.c
@@ -470,44 +470,20 @@ rtl_wait_phy_ups_resume(struct rtl_hw *hw, u16 PhyState)
u16 tmp_phy_state;
int i = 0;
- switch (hw->mcfg) {
- case CFG_METHOD_29:
- case CFG_METHOD_30:
- case CFG_METHOD_31:
- case CFG_METHOD_32:
- case CFG_METHOD_33:
- case CFG_METHOD_34:
- case CFG_METHOD_35:
- case CFG_METHOD_36:
+ if (hw->mcfg >= CFG_METHOD_29 && hw->mcfg <= CFG_METHOD_36) {
do {
tmp_phy_state = rtl_mdio_real_read_phy_ocp(hw, 0x0A42, 0x10);
tmp_phy_state &= 0x7;
rte_delay_ms(1);
i++;
} while ((i < 100) && (tmp_phy_state != PhyState));
- break;
- case CFG_METHOD_48:
- case CFG_METHOD_49:
- case CFG_METHOD_50:
- case CFG_METHOD_51:
- case CFG_METHOD_52:
- case CFG_METHOD_53:
- case CFG_METHOD_54:
- case CFG_METHOD_55:
- case CFG_METHOD_56:
- case CFG_METHOD_57:
- case CFG_METHOD_58:
- case CFG_METHOD_69:
- case CFG_METHOD_70:
- case CFG_METHOD_71:
- case CFG_METHOD_91:
+ } else if (rtl_is_8125(hw)) {
do {
tmp_phy_state = rtl_mdio_direct_read_phy_ocp(hw, 0xA420);
tmp_phy_state &= 0x7;
rte_delay_ms(1);
i++;
} while ((i < 100) && (tmp_phy_state != PhyState));
- break;
}
}
@@ -522,13 +498,9 @@ rtl_phy_power_up(struct rtl_hw *hw)
rtl_mdio_write(hw, MII_BMCR, BMCR_ANENABLE);
/* Wait mdc/mdio ready */
- switch (hw->mcfg) {
- case CFG_METHOD_23:
- case CFG_METHOD_27:
- case CFG_METHOD_28:
+ if (hw->mcfg == CFG_METHOD_23 || hw->mcfg == CFG_METHOD_27 ||
+ hw->mcfg == CFG_METHOD_28)
rte_delay_ms(10);
- break;
- }
/* Wait ups resume (phy state 3) */
rtl_wait_phy_ups_resume(hw, 3);
@@ -537,40 +509,8 @@ rtl_phy_power_up(struct rtl_hw *hw)
void
rtl_powerup_pll(struct rtl_hw *hw)
{
- switch (hw->mcfg) {
- case CFG_METHOD_21:
- case CFG_METHOD_22:
- case CFG_METHOD_24:
- case CFG_METHOD_25:
- case CFG_METHOD_26:
- case CFG_METHOD_27:
- case CFG_METHOD_28:
- case CFG_METHOD_29:
- case CFG_METHOD_30:
- case CFG_METHOD_31:
- case CFG_METHOD_32:
- case CFG_METHOD_33:
- case CFG_METHOD_34:
- case CFG_METHOD_35:
- case CFG_METHOD_36:
- case CFG_METHOD_48:
- case CFG_METHOD_49:
- case CFG_METHOD_50:
- case CFG_METHOD_51:
- case CFG_METHOD_52:
- case CFG_METHOD_53:
- case CFG_METHOD_54:
- case CFG_METHOD_55:
- case CFG_METHOD_56:
- case CFG_METHOD_57:
- case CFG_METHOD_58:
- case CFG_METHOD_69:
- case CFG_METHOD_70:
- case CFG_METHOD_71:
- case CFG_METHOD_91:
+ if (!(hw->mcfg == CFG_METHOD_23 || hw->mcfg == CFG_METHOD_37))
RTL_W8(hw, PMCH, RTL_R8(hw, PMCH) | BIT_7 | BIT_6);
- break;
- }
rtl_phy_power_up(hw);
}
@@ -581,66 +521,24 @@ rtl_phy_power_down(struct rtl_hw *hw)
u32 csi_tmp;
/* MCU PME intr masks */
- switch (hw->mcfg) {
- case CFG_METHOD_21:
- case CFG_METHOD_22:
- case CFG_METHOD_23:
- case CFG_METHOD_24:
+ if (hw->mcfg >= CFG_METHOD_21 && hw->mcfg <= CFG_METHOD_24) {
csi_tmp = rtl_eri_read(hw, 0x1AB, 1, ERIAR_ExGMAC);
csi_tmp &= ~(BIT_2 | BIT_3 | BIT_4 | BIT_5 | BIT_6 | BIT_7);
rtl_eri_write(hw, 0x1AB, 1, csi_tmp, ERIAR_ExGMAC);
- break;
- case CFG_METHOD_25:
- case CFG_METHOD_27:
- case CFG_METHOD_28:
- case CFG_METHOD_29:
- case CFG_METHOD_30:
- case CFG_METHOD_31:
- case CFG_METHOD_32:
- case CFG_METHOD_33:
- case CFG_METHOD_34:
- case CFG_METHOD_35:
- case CFG_METHOD_36:
- case CFG_METHOD_37:
+ } else if (hw->mcfg == CFG_METHOD_25 ||
+ (hw->mcfg >= CFG_METHOD_27 && hw->mcfg <= CFG_METHOD_37)) {
csi_tmp = rtl_eri_read(hw, 0x1AB, 1, ERIAR_ExGMAC);
csi_tmp &= ~(BIT_3 | BIT_6);
rtl_eri_write(hw, 0x1AB, 1, csi_tmp, ERIAR_ExGMAC);
- break;
}
rtl_mdio_write(hw, 0x1F, 0x0000);
- switch (hw->mcfg) {
- case CFG_METHOD_21:
- case CFG_METHOD_22:
- case CFG_METHOD_23:
- case CFG_METHOD_24:
- case CFG_METHOD_29:
- case CFG_METHOD_30:
- case CFG_METHOD_35:
- case CFG_METHOD_36:
- case CFG_METHOD_37:
- case CFG_METHOD_48:
- case CFG_METHOD_49:
- case CFG_METHOD_50:
- case CFG_METHOD_51:
- case CFG_METHOD_52:
- case CFG_METHOD_53:
- case CFG_METHOD_54:
- case CFG_METHOD_55:
- case CFG_METHOD_56:
- case CFG_METHOD_57:
- case CFG_METHOD_58:
- case CFG_METHOD_69:
- case CFG_METHOD_70:
- case CFG_METHOD_71:
- case CFG_METHOD_91:
- rtl_mdio_write(hw, MII_BMCR, BMCR_ANENABLE | BMCR_PDOWN);
- break;
- default:
+ if ((hw->mcfg >= CFG_METHOD_25 && hw->mcfg <= CFG_METHOD_28) ||
+ (hw->mcfg >= CFG_METHOD_31 && hw->mcfg <= CFG_METHOD_34))
rtl_mdio_write(hw, MII_BMCR, BMCR_PDOWN);
- break;
- }
+ else
+ rtl_mdio_write(hw, MII_BMCR, BMCR_ANENABLE | BMCR_PDOWN);
}
void
@@ -652,78 +550,18 @@ rtl_powerdown_pll(struct rtl_hw *hw)
rtl_phy_power_down(hw);
if (!hw->HwIcVerUnknown) {
- switch (hw->mcfg) {
- case CFG_METHOD_21:
- case CFG_METHOD_22:
- case CFG_METHOD_24:
- case CFG_METHOD_25:
- case CFG_METHOD_26:
- case CFG_METHOD_27:
- case CFG_METHOD_28:
- case CFG_METHOD_29:
- case CFG_METHOD_30:
- case CFG_METHOD_31:
- case CFG_METHOD_32:
- case CFG_METHOD_33:
- case CFG_METHOD_34:
- case CFG_METHOD_35:
- case CFG_METHOD_36:
- case CFG_METHOD_48:
- case CFG_METHOD_49:
- case CFG_METHOD_50:
- case CFG_METHOD_51:
- case CFG_METHOD_52:
- case CFG_METHOD_53:
- case CFG_METHOD_54:
- case CFG_METHOD_55:
- case CFG_METHOD_56:
- case CFG_METHOD_57:
- case CFG_METHOD_58:
- case CFG_METHOD_69:
- case CFG_METHOD_70:
- case CFG_METHOD_71:
+ if (!(hw->mcfg == CFG_METHOD_23 || hw->mcfg == CFG_METHOD_37 ||
+ hw->mcfg == CFG_METHOD_91))
RTL_W8(hw, PMCH, RTL_R8(hw, PMCH) & ~BIT_7);
- break;
- }
}
- switch (hw->mcfg) {
- case CFG_METHOD_21:
- case CFG_METHOD_22:
- case CFG_METHOD_23:
- case CFG_METHOD_24:
- case CFG_METHOD_25:
- case CFG_METHOD_26:
- case CFG_METHOD_27:
- case CFG_METHOD_28:
- case CFG_METHOD_29:
- case CFG_METHOD_30:
- case CFG_METHOD_31:
- case CFG_METHOD_32:
- case CFG_METHOD_33:
- case CFG_METHOD_34:
- case CFG_METHOD_35:
- case CFG_METHOD_36:
+ if (hw->mcfg >= CFG_METHOD_21 && hw->mcfg <= CFG_METHOD_36) {
RTL_W8(hw, 0xD0, RTL_R8(hw, 0xD0) & ~BIT_6);
RTL_W8(hw, 0xF2, RTL_R8(hw, 0xF2) & ~BIT_6);
- break;
- case CFG_METHOD_48:
- case CFG_METHOD_49:
- case CFG_METHOD_50:
- case CFG_METHOD_51:
- case CFG_METHOD_52:
- case CFG_METHOD_53:
- case CFG_METHOD_54:
- case CFG_METHOD_55:
- case CFG_METHOD_56:
- case CFG_METHOD_57:
- case CFG_METHOD_58:
- case CFG_METHOD_69:
- case CFG_METHOD_70:
- case CFG_METHOD_71:
- case CFG_METHOD_91:
+ } else if ((hw->mcfg >= CFG_METHOD_48 && hw->mcfg <= CFG_METHOD_58) ||
+ (hw->mcfg >= CFG_METHOD_69 && hw->mcfg <= CFG_METHOD_71) ||
+ hw->mcfg == CFG_METHOD_91) {
RTL_W8(hw, 0xF2, RTL_R8(hw, 0xF2) & ~BIT_6);
- break;
}
}
@@ -786,8 +624,7 @@ rtl8125_set_hw_phy_before_init_phy_mcu(struct rtl_hw *hw)
{
u16 val;
- switch (hw->mcfg) {
- case CFG_METHOD_50:
+ if (hw->mcfg == CFG_METHOD_50) {
rtl_mdio_direct_write_phy_ocp(hw, 0xBF86, 0x9000);
rtl_set_eth_phy_ocp_bit(hw, 0xC402, BIT_10);
@@ -805,7 +642,6 @@ rtl8125_set_hw_phy_before_init_phy_mcu(struct rtl_hw *hw)
rtl_clear_and_set_eth_phy_ocp_bit(hw, 0xBD4E, (BIT_11 | BIT_10), BIT_11);
rtl_clear_and_set_eth_phy_ocp_bit(hw, 0xBF46, (BIT_11 | BIT_10 | BIT_9 | BIT_8),
(BIT_10 | BIT_9 | BIT_8));
- break;
}
}
@@ -1057,42 +893,17 @@ rtl_is_adv_eee_enabled(struct rtl_hw *hw)
{
bool enabled = false;
- switch (hw->mcfg) {
- case CFG_METHOD_25:
- case CFG_METHOD_26:
- case CFG_METHOD_27:
- case CFG_METHOD_28:
- case CFG_METHOD_29:
- case CFG_METHOD_30:
- case CFG_METHOD_31:
- case CFG_METHOD_32:
- case CFG_METHOD_33:
- case CFG_METHOD_34:
- case CFG_METHOD_35:
- case CFG_METHOD_36:
+ if (hw->mcfg >= CFG_METHOD_25 && hw->mcfg <= CFG_METHOD_36) {
rtl_mdio_write(hw, 0x1F, 0x0A43);
if (rtl_mdio_read(hw, 0x10) & BIT_15)
enabled = true;
rtl_mdio_write(hw, 0x1F, 0x0000);
- break;
- case CFG_METHOD_48:
- case CFG_METHOD_49:
- case CFG_METHOD_50:
- case CFG_METHOD_51:
- case CFG_METHOD_52:
- case CFG_METHOD_53:
- case CFG_METHOD_54:
- case CFG_METHOD_55:
- case CFG_METHOD_58:
- case CFG_METHOD_69:
- case CFG_METHOD_70:
- case CFG_METHOD_71:
- case CFG_METHOD_91:
+ } else if ((hw->mcfg >= CFG_METHOD_48 && hw->mcfg <= CFG_METHOD_55) ||
+ hw->mcfg == CFG_METHOD_58 || hw->mcfg == CFG_METHOD_69 ||
+ hw->mcfg == CFG_METHOD_70 || hw->mcfg == CFG_METHOD_71 ||
+ hw->mcfg == CFG_METHOD_91){
if (rtl_mdio_direct_read_phy_ocp(hw, 0xA430) & BIT_15)
enabled = true;
- break;
- default:
- break;
}
return enabled;
diff --git a/drivers/net/r8169/r8169_rxtx.c b/drivers/net/r8169/r8169_rxtx.c
index 94ae5f8212..50a47c3670 100644
--- a/drivers/net/r8169/r8169_rxtx.c
+++ b/drivers/net/r8169/r8169_rxtx.c
@@ -1612,16 +1612,8 @@ rtl_xmit_pkt(struct rtl_hw *hw, struct rtl_tx_queue *txq,
if (large_send == 0) {
rtl_setup_csum_offload(tx_pkt, tx_ol_flags, opts);
- switch (hw->mcfg) {
- case CFG_METHOD_48:
- case CFG_METHOD_49:
- case CFG_METHOD_50:
- case CFG_METHOD_51:
- case CFG_METHOD_52:
- case CFG_METHOD_53:
+ if (hw->mcfg >= CFG_METHOD_48 && hw->mcfg <= CFG_METHOD_53)
rtl8125_ptp_patch(tx_pkt);
- break;
- }
}
for (m_seg = tx_pkt; m_seg; m_seg = m_seg->next) {
--
2.34.1
next prev parent reply other threads:[~2025-10-28 8:47 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-28 8:47 [PATCH v1 0/3] net/r8169: support multiq and code refactor Howard Wang
2025-10-28 8:47 ` [PATCH v1 1/3] net/r8169: support multiq for 8126 and 8127 Howard Wang
2025-10-28 8:47 ` Howard Wang [this message]
2025-10-28 8:47 ` [PATCH v1 3/3] net/r8169: fix issues reported by Coverity Howard Wang
2025-10-28 13:37 ` Stephen Hemminger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251028084716.369128-3-howard_wang@realsil.com.cn \
--to=howard_wang@realsil.com.cn \
--cc=dev@dpdk.org \
--cc=pro_nic_dpdk@realtek.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).