mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-30 14:33:24 -04:00
net: enetc: simplify enetc4_set_port_speed()
Since phylink may pass SPEED_UNKNOWN to mac_link_up, handle it explicitly by defaulting to SPEED_10, then replace the switch statement with a direct call to PCR_PSPEED_VAL(). Also update PCR_PSPEED_VAL() to use FIELD_PREP() for proper field masking instead of an open-coded shift. Signed-off-by: Wei Fang <wei.fang@nxp.com> Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com> Link: https://patch.msgid.link/20260720014317.1059359-7-wei.fang@oss.nxp.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
@@ -148,7 +148,7 @@
|
||||
#define PCR_L2DOSE BIT(4)
|
||||
#define PCR_TIMER_CS BIT(8)
|
||||
#define PCR_PSPEED GENMASK(29, 16)
|
||||
#define PCR_PSPEED_VAL(speed) (((speed) / 10 - 1) << 16)
|
||||
#define PCR_PSPEED_VAL(s) FIELD_PREP(PCR_PSPEED, ((s) / 10 - 1))
|
||||
|
||||
/* Port MAC address register 0/1 */
|
||||
#define ENETC4_PMAR0 0x4020
|
||||
|
||||
@@ -628,26 +628,19 @@ static void enetc4_set_port_speed(struct enetc_ndev_priv *priv, int speed)
|
||||
u32 old_speed = priv->speed;
|
||||
u32 val;
|
||||
|
||||
/* If the speed is unknown, use the minimum value */
|
||||
if (speed == SPEED_UNKNOWN) {
|
||||
speed = SPEED_10;
|
||||
dev_warn(priv->dev, "Speed unknown, default is 10Mbps\n");
|
||||
}
|
||||
|
||||
if (speed == old_speed)
|
||||
return;
|
||||
|
||||
val = enetc_port_rd(&priv->si->hw, ENETC4_PCR);
|
||||
val &= ~PCR_PSPEED;
|
||||
|
||||
switch (speed) {
|
||||
case SPEED_100:
|
||||
case SPEED_1000:
|
||||
case SPEED_2500:
|
||||
case SPEED_10000:
|
||||
val |= (PCR_PSPEED & PCR_PSPEED_VAL(speed));
|
||||
break;
|
||||
case SPEED_10:
|
||||
default:
|
||||
val |= (PCR_PSPEED & PCR_PSPEED_VAL(SPEED_10));
|
||||
}
|
||||
|
||||
priv->speed = speed;
|
||||
val = enetc_port_rd(&priv->si->hw, ENETC4_PCR) & (~PCR_PSPEED);
|
||||
val |= PCR_PSPEED_VAL(speed);
|
||||
enetc_port_wr(&priv->si->hw, ENETC4_PCR, val);
|
||||
priv->speed = speed;
|
||||
}
|
||||
|
||||
static void enetc4_set_rgmii_mac(struct enetc_pf *pf, int speed, int duplex)
|
||||
|
||||
Reference in New Issue
Block a user