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+ker...@armlinux.org.uk>
Reviewed-by: Ioana Ciornei <ioana.cior...@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 >