net: dsa: bcm_sf2: Do not override speed settings
The SF2 driver currently overrides speed settings for its port
configured using a fixed PHY, this is both unnecessary and incorrect,
because we keep feedback to the hardware parameters that we read from
the PHY device, which in the case of a fixed PHY cannot possibly change
speed.
This is a required change to allow the fixed PHY code to allow
registering a PHY with a link configured as DOWN by default and avoid
some sort of circular dependency where we require the link_update
callback to run to program the hardware, and we then utilize the fixed
PHY parameters to program the hardware with the same settings.
Fixes: 246d7f773c
("net: dsa: add Broadcom SF2 switch driver")
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
e181a54304
commit
d2eac98f7d
|
@ -890,15 +890,11 @@ static void bcm_sf2_sw_fixed_link_update(struct dsa_switch *ds, int port,
|
||||||
struct fixed_phy_status *status)
|
struct fixed_phy_status *status)
|
||||||
{
|
{
|
||||||
struct bcm_sf2_priv *priv = ds_to_priv(ds);
|
struct bcm_sf2_priv *priv = ds_to_priv(ds);
|
||||||
u32 duplex, pause, speed;
|
u32 duplex, pause;
|
||||||
u32 reg;
|
u32 reg;
|
||||||
|
|
||||||
duplex = core_readl(priv, CORE_DUPSTS);
|
duplex = core_readl(priv, CORE_DUPSTS);
|
||||||
pause = core_readl(priv, CORE_PAUSESTS);
|
pause = core_readl(priv, CORE_PAUSESTS);
|
||||||
speed = core_readl(priv, CORE_SPDSTS);
|
|
||||||
|
|
||||||
speed >>= (port * SPDSTS_SHIFT);
|
|
||||||
speed &= SPDSTS_MASK;
|
|
||||||
|
|
||||||
status->link = 0;
|
status->link = 0;
|
||||||
|
|
||||||
|
@ -933,18 +929,6 @@ static void bcm_sf2_sw_fixed_link_update(struct dsa_switch *ds, int port,
|
||||||
reg &= ~LINK_STS;
|
reg &= ~LINK_STS;
|
||||||
core_writel(priv, reg, CORE_STS_OVERRIDE_GMIIP_PORT(port));
|
core_writel(priv, reg, CORE_STS_OVERRIDE_GMIIP_PORT(port));
|
||||||
|
|
||||||
switch (speed) {
|
|
||||||
case SPDSTS_10:
|
|
||||||
status->speed = SPEED_10;
|
|
||||||
break;
|
|
||||||
case SPDSTS_100:
|
|
||||||
status->speed = SPEED_100;
|
|
||||||
break;
|
|
||||||
case SPDSTS_1000:
|
|
||||||
status->speed = SPEED_1000;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((pause & (1 << port)) &&
|
if ((pause & (1 << port)) &&
|
||||||
(pause & (1 << (port + PAUSESTS_TX_PAUSE_SHIFT)))) {
|
(pause & (1 << (port + PAUSESTS_TX_PAUSE_SHIFT)))) {
|
||||||
status->asym_pause = 1;
|
status->asym_pause = 1;
|
||||||
|
|
Loading…
Reference in New Issue