mirror of
https://git.openwrt.org/openwrt/openwrt.git
synced 2026-02-04 20:37:42 +01:00
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 <jelonek.jonas@gmail.com> Link: https://github.com/openwrt/openwrt/pull/20736 Signed-off-by: Robert Marko <robimarko@gmail.com>
This commit is contained in:
parent
19585a7966
commit
90cddeb75e
1 changed files with 89 additions and 89 deletions
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue