Skip to content

Commit

Permalink
net: dsa/ar9331: convert to mac_link_up()
Browse files Browse the repository at this point in the history
Convert the ar9331 DSA driver to use the finalised link parameters in
mac_link_up() rather than the parameters in mac_config().

Tested-by: Oleksij Rempel <o.rempel@pengutronix.de>
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Russell King authored and David S. Miller committed Jun 25, 2020
1 parent 6d29302 commit a5440cb
Showing 1 changed file with 31 additions and 29 deletions.
60 changes: 31 additions & 29 deletions drivers/net/dsa/qca/ar9331.c
Original file line number Diff line number Diff line change
Expand Up @@ -97,8 +97,7 @@
(AR9331_SW_PORT_STATUS_TXMAC | AR9331_SW_PORT_STATUS_RXMAC)

#define AR9331_SW_PORT_STATUS_LINK_MASK \
(AR9331_SW_PORT_STATUS_LINK_EN | AR9331_SW_PORT_STATUS_FLOW_LINK_EN | \
AR9331_SW_PORT_STATUS_DUPLEX_MODE | \
(AR9331_SW_PORT_STATUS_DUPLEX_MODE | \
AR9331_SW_PORT_STATUS_RX_FLOW_EN | AR9331_SW_PORT_STATUS_TX_FLOW_EN | \
AR9331_SW_PORT_STATUS_SPEED_M)

Expand Down Expand Up @@ -410,33 +409,10 @@ static void ar9331_sw_phylink_mac_config(struct dsa_switch *ds, int port,
struct ar9331_sw_priv *priv = (struct ar9331_sw_priv *)ds->priv;
struct regmap *regmap = priv->regmap;
int ret;
u32 val;

switch (state->speed) {
case SPEED_1000:
val = AR9331_SW_PORT_STATUS_SPEED_1000;
break;
case SPEED_100:
val = AR9331_SW_PORT_STATUS_SPEED_100;
break;
case SPEED_10:
val = AR9331_SW_PORT_STATUS_SPEED_10;
break;
default:
return;
}

if (state->duplex)
val |= AR9331_SW_PORT_STATUS_DUPLEX_MODE;

if (state->pause & MLO_PAUSE_TX)
val |= AR9331_SW_PORT_STATUS_TX_FLOW_EN;

if (state->pause & MLO_PAUSE_RX)
val |= AR9331_SW_PORT_STATUS_RX_FLOW_EN;

ret = regmap_update_bits(regmap, AR9331_SW_REG_PORT_STATUS(port),
AR9331_SW_PORT_STATUS_LINK_MASK, val);
AR9331_SW_PORT_STATUS_LINK_EN |
AR9331_SW_PORT_STATUS_FLOW_LINK_EN, 0);
if (ret)
dev_err_ratelimited(priv->dev, "%s: %i\n", __func__, ret);
}
Expand Down Expand Up @@ -464,11 +440,37 @@ static void ar9331_sw_phylink_mac_link_up(struct dsa_switch *ds, int port,
{
struct ar9331_sw_priv *priv = (struct ar9331_sw_priv *)ds->priv;
struct regmap *regmap = priv->regmap;
u32 val;
int ret;

val = AR9331_SW_PORT_STATUS_MAC_MASK;
switch (speed) {
case SPEED_1000:
val |= AR9331_SW_PORT_STATUS_SPEED_1000;
break;
case SPEED_100:
val |= AR9331_SW_PORT_STATUS_SPEED_100;
break;
case SPEED_10:
val |= AR9331_SW_PORT_STATUS_SPEED_10;
break;
default:
return;
}

if (duplex)
val |= AR9331_SW_PORT_STATUS_DUPLEX_MODE;

if (tx_pause)
val |= AR9331_SW_PORT_STATUS_TX_FLOW_EN;

if (rx_pause)
val |= AR9331_SW_PORT_STATUS_RX_FLOW_EN;

ret = regmap_update_bits(regmap, AR9331_SW_REG_PORT_STATUS(port),
AR9331_SW_PORT_STATUS_MAC_MASK,
AR9331_SW_PORT_STATUS_MAC_MASK);
AR9331_SW_PORT_STATUS_MAC_MASK |
AR9331_SW_PORT_STATUS_LINK_MASK,
val);
if (ret)
dev_err_ratelimited(priv->dev, "%s: %i\n", __func__, ret);
}
Expand Down

0 comments on commit a5440cb

Please sign in to comment.