net: dsa: ksz8795: convert to phylink_generic_validate()
authorRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Wed, 2 Feb 2022 10:24:18 +0000 (10:24 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 3 Feb 2022 11:47:06 +0000 (11:47 +0000)
Populate the supported interfaces and MAC capabilities for the
Microchip KSZ8795 DSA switch and remove the old validate implementation
to allow DSA to use phylink_generic_validate() for this switch driver.

Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/dsa/microchip/ksz8795.c

index 991b9c6..5dc9899 100644 (file)
@@ -1461,27 +1461,22 @@ static int ksz8_setup(struct dsa_switch *ds)
        return 0;
 }
 
-static void ksz8_validate(struct dsa_switch *ds, int port,
-                         unsigned long *supported,
-                         struct phylink_link_state *state)
+static void ksz8_get_caps(struct dsa_switch *ds, int port,
+                         struct phylink_config *config)
 {
-       __ETHTOOL_DECLARE_LINK_MODE_MASK(mask) = { 0, };
        struct ksz_device *dev = ds->priv;
 
        if (port == dev->cpu_port) {
-               if (state->interface != PHY_INTERFACE_MODE_RMII &&
-                   state->interface != PHY_INTERFACE_MODE_MII &&
-                   state->interface != PHY_INTERFACE_MODE_NA)
-                       goto unsupported;
+               __set_bit(PHY_INTERFACE_MODE_RMII,
+                         config->supported_interfaces);
+               __set_bit(PHY_INTERFACE_MODE_MII,
+                         config->supported_interfaces);
        } else {
-               if (state->interface != PHY_INTERFACE_MODE_INTERNAL &&
-                   state->interface != PHY_INTERFACE_MODE_NA)
-                       goto unsupported;
+               __set_bit(PHY_INTERFACE_MODE_INTERNAL,
+                         config->supported_interfaces);
        }
 
-       /* Allow all the expected bits */
-       phylink_set_port_modes(mask);
-       phylink_set(mask, Autoneg);
+       config->mac_capabilities = MAC_10 | MAC_100;
 
        /* Silicon Errata Sheet (DS80000830A):
         * "Port 1 does not respond to received flow control PAUSE frames"
@@ -1489,27 +1484,11 @@ static void ksz8_validate(struct dsa_switch *ds, int port,
         * switches.
         */
        if (!ksz_is_ksz88x3(dev) || port)
-               phylink_set(mask, Pause);
+               config->mac_capabilities |= MAC_SYM_PAUSE;
 
        /* Asym pause is not supported on KSZ8863 and KSZ8873 */
        if (!ksz_is_ksz88x3(dev))
-               phylink_set(mask, Asym_Pause);
-
-       /* 10M and 100M are only supported */
-       phylink_set(mask, 10baseT_Half);
-       phylink_set(mask, 10baseT_Full);
-       phylink_set(mask, 100baseT_Half);
-       phylink_set(mask, 100baseT_Full);
-
-       linkmode_and(supported, supported, mask);
-       linkmode_and(state->advertising, state->advertising, mask);
-
-       return;
-
-unsupported:
-       linkmode_zero(supported);
-       dev_err(ds->dev, "Unsupported interface: %s, port: %d\n",
-               phy_modes(state->interface), port);
+               config->mac_capabilities |= MAC_ASYM_PAUSE;
 }
 
 static const struct dsa_switch_ops ksz8_switch_ops = {
@@ -1518,7 +1497,7 @@ static const struct dsa_switch_ops ksz8_switch_ops = {
        .setup                  = ksz8_setup,
        .phy_read               = ksz_phy_read16,
        .phy_write              = ksz_phy_write16,
-       .phylink_validate       = ksz8_validate,
+       .phylink_get_caps       = ksz8_get_caps,
        .phylink_mac_link_down  = ksz_mac_link_down,
        .port_enable            = ksz_enable_port,
        .get_strings            = ksz8_get_strings,