Skip to content

Commit

Permalink
net: dsa: xrs700x: convert to phylink_generic_validate()
Browse files Browse the repository at this point in the history
Populate the supported interfaces and MAC capabilities for the xrs700x
family of DSA switches and remove the old validate implementation to
allow DSA to use phylink_generic_validate() for this switch driver.

According to commit ee00b24 ("net: dsa: add Arrow SpeedChips
XRS700x driver") the switch supports one RMII port and up to three
RGMII ports. This commit assumes that port 0 is the RMII port and the
remainder are RGMII.

This commit also results in the Autoneg bit being set in the ethtool
link modes, which wasn't in the original; if this switch supports
RGMII to a 10/100/1G PHY, then surely we want to allow Autoneg on the
PHY.

Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Russell King (Oracle) authored and David S. Miller committed Feb 3, 2022
1 parent 9865b88 commit 1f8d99d
Showing 1 changed file with 11 additions and 18 deletions.
29 changes: 11 additions & 18 deletions drivers/net/dsa/xrs700x/xrs700x.c
Original file line number Diff line number Diff line change
Expand Up @@ -442,34 +442,27 @@ static void xrs700x_teardown(struct dsa_switch *ds)
cancel_delayed_work_sync(&priv->mib_work);
}

static void xrs700x_phylink_validate(struct dsa_switch *ds, int port,
unsigned long *supported,
struct phylink_link_state *state)
static void xrs700x_phylink_get_caps(struct dsa_switch *ds, int port,
struct phylink_config *config)
{
__ETHTOOL_DECLARE_LINK_MODE_MASK(mask) = { 0, };

switch (port) {
case 0:
__set_bit(PHY_INTERFACE_MODE_RMII,
config->supported_interfaces);
config->mac_capabilities = MAC_10FD | MAC_100FD;
break;

case 1:
case 2:
case 3:
phylink_set(mask, 1000baseT_Full);
phy_interface_set_rgmii(config->supported_interfaces);
config->mac_capabilities = MAC_10FD | MAC_100FD | MAC_1000FD;
break;

default:
linkmode_zero(supported);
dev_err(ds->dev, "Unsupported port: %i\n", port);
return;
break;
}

phylink_set_port_modes(mask);

/* The switch only supports full duplex. */
phylink_set(mask, 10baseT_Full);
phylink_set(mask, 100baseT_Full);

linkmode_and(supported, supported, mask);
linkmode_and(state->advertising, state->advertising, mask);
}

static void xrs700x_mac_link_up(struct dsa_switch *ds, int port,
Expand Down Expand Up @@ -703,7 +696,7 @@ static const struct dsa_switch_ops xrs700x_ops = {
.setup = xrs700x_setup,
.teardown = xrs700x_teardown,
.port_stp_state_set = xrs700x_port_stp_state_set,
.phylink_validate = xrs700x_phylink_validate,
.phylink_get_caps = xrs700x_phylink_get_caps,
.phylink_mac_link_up = xrs700x_mac_link_up,
.get_strings = xrs700x_get_strings,
.get_sset_count = xrs700x_get_sset_count,
Expand Down

0 comments on commit 1f8d99d

Please sign in to comment.