mirror of https://gitee.com/openkylin/linux.git
net: dsa/bcm_sf2: move speed/duplex forcing to mac_link_up()
Convert the bcm_sf2 to use the finalised speed and duplex in its mac_link_up() call rather than the parameters in mac_config(). Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> Tested-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
2d1f90f9ba
commit
50cc2020a8
|
@ -558,16 +558,11 @@ static void bcm_sf2_sw_mac_config(struct dsa_switch *ds, int port,
|
|||
{
|
||||
struct bcm_sf2_priv *priv = bcm_sf2_to_priv(ds);
|
||||
u32 id_mode_dis = 0, port_mode;
|
||||
u32 reg, offset;
|
||||
u32 reg;
|
||||
|
||||
if (port == core_readl(priv, CORE_IMP0_PRT_ID))
|
||||
return;
|
||||
|
||||
if (priv->type == BCM7445_DEVICE_ID)
|
||||
offset = CORE_STS_OVERRIDE_GMIIP_PORT(port);
|
||||
else
|
||||
offset = CORE_STS_OVERRIDE_GMIIP2_PORT(port);
|
||||
|
||||
switch (state->interface) {
|
||||
case PHY_INTERFACE_MODE_RGMII:
|
||||
id_mode_dis = 1;
|
||||
|
@ -582,8 +577,8 @@ static void bcm_sf2_sw_mac_config(struct dsa_switch *ds, int port,
|
|||
port_mode = EXT_REVMII;
|
||||
break;
|
||||
default:
|
||||
/* all other PHYs: internal and MoCA */
|
||||
goto force_link;
|
||||
/* Nothing required for all other PHYs: internal and MoCA */
|
||||
return;
|
||||
}
|
||||
|
||||
/* Clear id_mode_dis bit, and the existing port mode, let
|
||||
|
@ -605,23 +600,6 @@ static void bcm_sf2_sw_mac_config(struct dsa_switch *ds, int port,
|
|||
}
|
||||
|
||||
reg_writel(priv, reg, REG_RGMII_CNTRL_P(port));
|
||||
|
||||
force_link:
|
||||
/* Force link settings detected from the PHY */
|
||||
reg = SW_OVERRIDE;
|
||||
switch (state->speed) {
|
||||
case SPEED_1000:
|
||||
reg |= SPDSTS_1000 << SPEED_SHIFT;
|
||||
break;
|
||||
case SPEED_100:
|
||||
reg |= SPDSTS_100 << SPEED_SHIFT;
|
||||
break;
|
||||
}
|
||||
|
||||
if (state->duplex == DUPLEX_FULL)
|
||||
reg |= DUPLX_MODE;
|
||||
|
||||
core_writel(priv, reg, offset);
|
||||
}
|
||||
|
||||
static void bcm_sf2_sw_mac_link_set(struct dsa_switch *ds, int port,
|
||||
|
@ -684,8 +662,19 @@ static void bcm_sf2_sw_mac_link_up(struct dsa_switch *ds, int port,
|
|||
else
|
||||
offset = CORE_STS_OVERRIDE_GMIIP2_PORT(port);
|
||||
|
||||
reg = core_readl(priv, offset);
|
||||
reg |= LINK_STS;
|
||||
reg = SW_OVERRIDE | LINK_STS;
|
||||
switch (speed) {
|
||||
case SPEED_1000:
|
||||
reg |= SPDSTS_1000 << SPEED_SHIFT;
|
||||
break;
|
||||
case SPEED_100:
|
||||
reg |= SPDSTS_100 << SPEED_SHIFT;
|
||||
break;
|
||||
}
|
||||
|
||||
if (duplex == DUPLEX_FULL)
|
||||
reg |= DUPLX_MODE;
|
||||
|
||||
core_writel(priv, reg, offset);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue