From: Jonas Jelonek Date: Sat, 20 Dec 2025 18:57:35 +0000 (+0000) Subject: realtek: pcs: rtl931x: reorder functions X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=90cddeb75e69b06d5930a13a8a1254fcf683fe2f;p=thirdparty%2Fopenwrt.git realtek: pcs: rtl931x: reorder functions Bring the RTL931X functions into a proper order for two purposes: - be able to reuse code - have blocks of logically connected functions This just moves code, no functional changes. Signed-off-by: Jonas Jelonek Link: https://github.com/openwrt/openwrt/pull/20736 Signed-off-by: Robert Marko --- diff --git a/target/linux/realtek/files-6.12/drivers/net/pcs/pcs-rtl-otto.c b/target/linux/realtek/files-6.12/drivers/net/pcs/pcs-rtl-otto.c index 768952b4725..bf2110ef534 100644 --- a/target/linux/realtek/files-6.12/drivers/net/pcs/pcs-rtl-otto.c +++ b/target/linux/realtek/files-6.12/drivers/net/pcs/pcs-rtl-otto.c @@ -2305,41 +2305,6 @@ static int rtpcs_930x_setup_serdes(struct rtpcs_serdes *sds, /* RTL931X */ -static int rtpcs_931x_sds_power(struct rtpcs_serdes *sds, bool power_on) -{ - u32 en_val = power_on ? 0 : BIT(sds->id); - - return regmap_write_bits(sds->ctrl->map, - RTL931X_PS_SERDES_OFF_MODE_CTRL_ADDR, - BIT(sds->id), en_val); -} - -static void rtpcs_931x_sds_reset(struct rtpcs_serdes *sds) -{ - struct rtpcs_ctrl *ctrl = sds->ctrl; - u32 sds_id = sds->id; - u32 v, o_mode; - int shift = ((sds_id & 0x3) << 3); - - /* TODO: We need to lock this! */ - - rtpcs_931x_sds_power(sds, false); - - regmap_read(ctrl->map, RTL931X_SERDES_MODE_CTRL + 4 * (sds_id >> 2), &o_mode); - v = BIT(7) | 0x1F; - regmap_write_bits(ctrl->map, RTL931X_SERDES_MODE_CTRL + 4 * (sds_id >> 2), - 0xff << shift, v << shift); - regmap_write(ctrl->map, RTL931X_SERDES_MODE_CTRL + 4 * (sds_id >> 2), o_mode); - - rtpcs_931x_sds_power(sds, true); -} - -static void rtpcs_931x_sds_disable(struct rtpcs_serdes *sds) -{ - regmap_write(sds->ctrl->map, - RTL931X_SERDES_MODE_CTRL + (sds->id >> 2) * 4, 0x9f); -} - __maybe_unused static int rtpcs_931x_sds_fiber_get_symerr(struct rtpcs_serdes *sds, phy_interface_t mode) @@ -2403,12 +2368,48 @@ static void rtpcs_931x_sds_clear_symerr(struct rtpcs_serdes *sds, } } -__always_unused -static void rtpcs_931x_sds_fiber_disable(struct rtpcs_serdes *sds) +static int rtpcs_931x_sds_power(struct rtpcs_serdes *sds, bool power_on) { - u32 v = 0x3F; + u32 en_val = power_on ? 0 : BIT(sds->id); - rtpcs_sds_write_bits(sds, 0x1F, 0x9, 11, 6, v); + return regmap_write_bits(sds->ctrl->map, + RTL931X_PS_SERDES_OFF_MODE_CTRL_ADDR, + BIT(sds->id), en_val); +} + +static void rtpcs_931x_sds_mii_mode_set(struct rtpcs_serdes *sds, + phy_interface_t mode) +{ + u32 val; + + switch (mode) { + case PHY_INTERFACE_MODE_QSGMII: + val = 0x6; + break; + case PHY_INTERFACE_MODE_XGMII: + val = 0x10; /* serdes mode XSGMII */ + break; + case PHY_INTERFACE_MODE_USXGMII: + case PHY_INTERFACE_MODE_2500BASEX: + val = 0xD; + break; + case PHY_INTERFACE_MODE_SGMII: + val = 0x2; + break; + default: + return; + } + + val |= (1 << 7); + + regmap_write(sds->ctrl->map, + RTL931X_SERDES_MODE_CTRL + 4 * (sds->id >> 2), val); +} + +static void rtpcs_931x_sds_disable(struct rtpcs_serdes *sds) +{ + regmap_write(sds->ctrl->map, + RTL931X_SERDES_MODE_CTRL + (sds->id >> 2) * 4, 0x9f); } static void rtpcs_931x_sds_fiber_mode_set(struct rtpcs_serdes *sds, @@ -2435,9 +2436,9 @@ static void rtpcs_931x_sds_fiber_mode_set(struct rtpcs_serdes *sds, case PHY_INTERFACE_MODE_10GKR: val = 0x35; break; -/* case MII_10GR1000BX_AUTO: - val = 0x39; - break; */ +/* case MII_10GR1000BX_AUTO: + val = 0x39; + break; */ case PHY_INTERFACE_MODE_USXGMII: val = 0x1B; @@ -2450,6 +2451,52 @@ static void rtpcs_931x_sds_fiber_mode_set(struct rtpcs_serdes *sds, rtpcs_sds_write_bits(sds, 0x1F, 0x9, 11, 6, val); } +static void rtpcs_931x_sds_reset(struct rtpcs_serdes *sds) +{ + struct rtpcs_ctrl *ctrl = sds->ctrl; + u32 sds_id = sds->id; + u32 v, o_mode; + int shift = ((sds_id & 0x3) << 3); + + /* TODO: We need to lock this! */ + + rtpcs_931x_sds_power(sds, false); + + regmap_read(ctrl->map, RTL931X_SERDES_MODE_CTRL + 4 * (sds_id >> 2), &o_mode); + v = BIT(7) | 0x1F; + regmap_write_bits(ctrl->map, RTL931X_SERDES_MODE_CTRL + 4 * (sds_id >> 2), + 0xff << shift, v << shift); + regmap_write(ctrl->map, RTL931X_SERDES_MODE_CTRL + 4 * (sds_id >> 2), o_mode); + + rtpcs_931x_sds_power(sds, true); +} + +static void rtpcs_931x_sds_rx_reset(struct rtpcs_serdes *sds) +{ + if (sds->id < 2) + return; + + rtpcs_sds_write(sds, 0x2e, 0x12, 0x2740); + rtpcs_sds_write(sds, 0x2f, 0x0, 0x0); + rtpcs_sds_write(sds, 0x2f, 0x2, 0x2010); + rtpcs_sds_write(sds, 0x20, 0x0, 0xc10); + + rtpcs_sds_write(sds, 0x2e, 0x12, 0x27c0); + rtpcs_sds_write(sds, 0x2f, 0x0, 0xc000); + rtpcs_sds_write(sds, 0x2f, 0x2, 0x6010); + rtpcs_sds_write(sds, 0x20, 0x0, 0xc30); + + mdelay(50); +} + +__always_unused +static void rtpcs_931x_sds_fiber_disable(struct rtpcs_serdes *sds) +{ + u32 v = 0x3F; + + rtpcs_sds_write_bits(sds, 0x1F, 0x9, 11, 6, v); +} + static int rtpcs_931x_sds_cmu_page_get(phy_interface_t mode) { switch (mode) { @@ -2559,53 +2606,6 @@ static void rtpcs_931x_sds_cmu_type_set(struct rtpcs_serdes *sds, pr_info("%s CMU page 0x28 0x7 %08x\n", __func__, rtpcs_sds_read(sds, 0x28, 0x7)); } -static void rtpcs_931x_sds_rx_reset(struct rtpcs_serdes *sds) -{ - if (sds->id < 2) - return; - - rtpcs_sds_write(sds, 0x2e, 0x12, 0x2740); - rtpcs_sds_write(sds, 0x2f, 0x0, 0x0); - rtpcs_sds_write(sds, 0x2f, 0x2, 0x2010); - rtpcs_sds_write(sds, 0x20, 0x0, 0xc10); - - rtpcs_sds_write(sds, 0x2e, 0x12, 0x27c0); - rtpcs_sds_write(sds, 0x2f, 0x0, 0xc000); - rtpcs_sds_write(sds, 0x2f, 0x2, 0x6010); - rtpcs_sds_write(sds, 0x20, 0x0, 0xc30); - - mdelay(50); -} - -static void rtpcs_931x_sds_mii_mode_set(struct rtpcs_serdes *sds, - phy_interface_t mode) -{ - u32 val; - - switch (mode) { - case PHY_INTERFACE_MODE_QSGMII: - val = 0x6; - break; - case PHY_INTERFACE_MODE_XGMII: - val = 0x10; /* serdes mode XSGMII */ - break; - case PHY_INTERFACE_MODE_USXGMII: - case PHY_INTERFACE_MODE_2500BASEX: - val = 0xD; - break; - case PHY_INTERFACE_MODE_SGMII: - val = 0x2; - break; - default: - return; - } - - val |= (1 << 7); - - regmap_write(sds->ctrl->map, - RTL931X_SERDES_MODE_CTRL + 4 * (sds->id >> 2), val); -} - static int rtpcs_931x_sds_cmu_band_set(struct rtpcs_serdes *sds, bool enable, u32 band, phy_interface_t mode)