net: dsa: ocelot: accept 1000base-X for VSC9959 and VSC9953
authorVladimir Oltean <vladimir.oltean@nxp.com>
Tue, 10 May 2022 16:43:20 +0000 (19:43 +0300)
committerJakub Kicinski <kuba@kernel.org>
Wed, 11 May 2022 22:24:37 +0000 (15:24 -0700)
Switches using the Lynx PCS driver support 1000base-X optical SFP
modules. Accept this interface type on a port.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Link: https://lore.kernel.org/r/20220510164320.10313-1-vladimir.oltean@nxp.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/dsa/ocelot/felix.c
drivers/net/dsa/ocelot/felix.h
drivers/net/dsa/ocelot/felix_vsc9959.c
drivers/net/dsa/ocelot/seville_vsc9953.c

index a4882e4..f5c9d69 100644 (file)
@@ -1008,6 +1008,7 @@ static const u32 felix_phy_match_table[PHY_INTERFACE_MODE_MAX] = {
        [PHY_INTERFACE_MODE_SGMII] = OCELOT_PORT_MODE_SGMII,
        [PHY_INTERFACE_MODE_QSGMII] = OCELOT_PORT_MODE_QSGMII,
        [PHY_INTERFACE_MODE_USXGMII] = OCELOT_PORT_MODE_USXGMII,
+       [PHY_INTERFACE_MODE_1000BASEX] = OCELOT_PORT_MODE_1000BASEX,
        [PHY_INTERFACE_MODE_2500BASEX] = OCELOT_PORT_MODE_2500BASEX,
 };
 
index 39faf10..a5e5708 100644 (file)
@@ -12,6 +12,7 @@
 #define OCELOT_PORT_MODE_QSGMII                BIT(2)
 #define OCELOT_PORT_MODE_2500BASEX     BIT(3)
 #define OCELOT_PORT_MODE_USXGMII       BIT(4)
+#define OCELOT_PORT_MODE_1000BASEX     BIT(5)
 
 /* Platform-specific information */
 struct felix_info {
index 0818718..98caca4 100644 (file)
@@ -28,6 +28,7 @@
 
 #define VSC9959_PORT_MODE_SERDES       (OCELOT_PORT_MODE_SGMII | \
                                         OCELOT_PORT_MODE_QSGMII | \
+                                        OCELOT_PORT_MODE_1000BASEX | \
                                         OCELOT_PORT_MODE_2500BASEX | \
                                         OCELOT_PORT_MODE_USXGMII)
 
@@ -973,6 +974,7 @@ static void vsc9959_phylink_validate(struct ocelot *ocelot, int port,
        phylink_set(mask, 100baseT_Full);
        phylink_set(mask, 1000baseT_Half);
        phylink_set(mask, 1000baseT_Full);
+       phylink_set(mask, 1000baseX_Full);
 
        if (state->interface == PHY_INTERFACE_MODE_INTERNAL ||
            state->interface == PHY_INTERFACE_MODE_2500BASEX ||
index 48fd43a..ea06492 100644 (file)
@@ -21,7 +21,8 @@
 #define VSC9953_VCAP_POLICER_BASE2             120
 #define VSC9953_VCAP_POLICER_MAX2              161
 
-#define VSC9953_PORT_MODE_SERDES               (OCELOT_PORT_MODE_SGMII | \
+#define VSC9953_PORT_MODE_SERDES               (OCELOT_PORT_MODE_1000BASEX | \
+                                                OCELOT_PORT_MODE_SGMII | \
                                                 OCELOT_PORT_MODE_QSGMII)
 
 static const u32 vsc9953_port_modes[VSC9953_NUM_PORTS] = {
@@ -947,6 +948,7 @@ static void vsc9953_phylink_validate(struct ocelot *ocelot, int port,
        phylink_set(mask, 100baseT_Full);
        phylink_set(mask, 100baseT_Half);
        phylink_set(mask, 1000baseT_Full);
+       phylink_set(mask, 1000baseX_Full);
 
        if (state->interface == PHY_INTERFACE_MODE_INTERNAL) {
                phylink_set(mask, 2500baseT_Full);