Message ID | E1l1t35-0005VX-Uj@rmk-PC.armlinux.org.uk |
---|---|
State | New |
Headers | show |
Series | dpaa2: add 1000base-X support | expand |
On Tue, Jan 19, 2021 at 03:36:03PM +0000, Russell King wrote: > Now that pcs-lynx supports 1000BASE-X, add support for this interface > mode to dpaa2-mac. pcs-lynx can be switched at runtime between SGMII > and 1000BASE-X mode, so allow dpaa2-mac to switch between these as > well. > > This commit prepares the ground work for allowing 1G fiber connections > to be used with DPAA2 on the SolidRun CEX7 platforms. > > Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Reviewed-by: Ioana Ciornei <ioana.ciornei@nxp.com> > --- > .../net/ethernet/freescale/dpaa2/dpaa2-mac.c | 20 ++++++++++++++++--- > 1 file changed, 17 insertions(+), 3 deletions(-) > > diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c > index 69ad869446cf..3ddfb40eb5e4 100644 > --- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c > +++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c > @@ -79,10 +79,20 @@ static bool dpaa2_mac_phy_mode_mismatch(struct dpaa2_mac *mac, > phy_interface_t interface) > { > switch (interface) { > + /* We can switch between SGMII and 1000BASE-X at runtime with > + * pcs-lynx > + */ > + case PHY_INTERFACE_MODE_SGMII: > + case PHY_INTERFACE_MODE_1000BASEX: > + if (mac->pcs && > + (mac->if_mode == PHY_INTERFACE_MODE_SGMII || > + mac->if_mode == PHY_INTERFACE_MODE_1000BASEX)) > + return false; > + return interface != mac->if_mode; > + > case PHY_INTERFACE_MODE_10GBASER: > case PHY_INTERFACE_MODE_USXGMII: > case PHY_INTERFACE_MODE_QSGMII: > - case PHY_INTERFACE_MODE_SGMII: > case PHY_INTERFACE_MODE_RGMII: > case PHY_INTERFACE_MODE_RGMII_ID: > case PHY_INTERFACE_MODE_RGMII_RXID: > @@ -122,13 +132,17 @@ static void dpaa2_mac_validate(struct phylink_config *config, > fallthrough; > case PHY_INTERFACE_MODE_SGMII: > case PHY_INTERFACE_MODE_QSGMII: > + case PHY_INTERFACE_MODE_1000BASEX: > case PHY_INTERFACE_MODE_RGMII: > case PHY_INTERFACE_MODE_RGMII_ID: > case PHY_INTERFACE_MODE_RGMII_RXID: > case PHY_INTERFACE_MODE_RGMII_TXID: > - phylink_set(mask, 10baseT_Full); > - phylink_set(mask, 100baseT_Full); > + phylink_set(mask, 1000baseX_Full); > phylink_set(mask, 1000baseT_Full); > + if (state->interface == PHY_INTERFACE_MODE_1000BASEX) > + break; > + phylink_set(mask, 100baseT_Full); > + phylink_set(mask, 10baseT_Full); > break; > default: > goto empty_set; > -- > 2.20.1 >
diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c index 69ad869446cf..3ddfb40eb5e4 100644 --- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c +++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c @@ -79,10 +79,20 @@ static bool dpaa2_mac_phy_mode_mismatch(struct dpaa2_mac *mac, phy_interface_t interface) { switch (interface) { + /* We can switch between SGMII and 1000BASE-X at runtime with + * pcs-lynx + */ + case PHY_INTERFACE_MODE_SGMII: + case PHY_INTERFACE_MODE_1000BASEX: + if (mac->pcs && + (mac->if_mode == PHY_INTERFACE_MODE_SGMII || + mac->if_mode == PHY_INTERFACE_MODE_1000BASEX)) + return false; + return interface != mac->if_mode; + case PHY_INTERFACE_MODE_10GBASER: case PHY_INTERFACE_MODE_USXGMII: case PHY_INTERFACE_MODE_QSGMII: - case PHY_INTERFACE_MODE_SGMII: case PHY_INTERFACE_MODE_RGMII: case PHY_INTERFACE_MODE_RGMII_ID: case PHY_INTERFACE_MODE_RGMII_RXID: @@ -122,13 +132,17 @@ static void dpaa2_mac_validate(struct phylink_config *config, fallthrough; case PHY_INTERFACE_MODE_SGMII: case PHY_INTERFACE_MODE_QSGMII: + case PHY_INTERFACE_MODE_1000BASEX: case PHY_INTERFACE_MODE_RGMII: case PHY_INTERFACE_MODE_RGMII_ID: case PHY_INTERFACE_MODE_RGMII_RXID: case PHY_INTERFACE_MODE_RGMII_TXID: - phylink_set(mask, 10baseT_Full); - phylink_set(mask, 100baseT_Full); + phylink_set(mask, 1000baseX_Full); phylink_set(mask, 1000baseT_Full); + if (state->interface == PHY_INTERFACE_MODE_1000BASEX) + break; + phylink_set(mask, 100baseT_Full); + phylink_set(mask, 10baseT_Full); break; default: goto empty_set;
Now that pcs-lynx supports 1000BASE-X, add support for this interface mode to dpaa2-mac. pcs-lynx can be switched at runtime between SGMII and 1000BASE-X mode, so allow dpaa2-mac to switch between these as well. This commit prepares the ground work for allowing 1G fiber connections to be used with DPAA2 on the SolidRun CEX7 platforms. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> --- .../net/ethernet/freescale/dpaa2/dpaa2-mac.c | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-)