[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20221118000124.2754581-9-vladimir.oltean@nxp.com>
Date: Fri, 18 Nov 2022 02:01:24 +0200
From: Vladimir Oltean <vladimir.oltean@....com>
To: netdev@...r.kernel.org
Cc: "David S. Miller" <davem@...emloft.net>,
Eric Dumazet <edumazet@...gle.com>,
Jakub Kicinski <kuba@...nel.org>,
Paolo Abeni <pabeni@...hat.com>,
Heiner Kallweit <hkallweit1@...il.com>,
Andrew Lunn <andrew@...n.ch>,
Russell King <linux@...linux.org.uk>,
Florian Fainelli <f.fainelli@...il.com>,
UNGLinuxDriver@...rochip.com,
bcm-kernel-feedback-list@...adcom.com,
Madalin Bucur <madalin.bucur@....nxp.com>,
Camelia Groza <camelia.groza@....com>,
Claudiu Manoil <claudiu.manoil@....com>,
Ioana Ciornei <ioana.ciornei@....com>,
Maxim Kochetkov <fido_max@...ox.ru>,
Sean Anderson <sean.anderson@...o.com>,
Antoine Tenart <atenart@...nel.org>,
Michael Walle <michael@...le.cc>,
Raag Jadav <raagjadav@...il.com>,
Siddharth Vadapalli <s-vadapalli@...com>,
Ong Boon Leong <boon.leong.ong@...el.com>,
Colin Foster <colin.foster@...advantage.com>,
Marek Behun <marek.behun@....cz>
Subject: [PATCH v4 net-next 8/8] net: opt MAC drivers which use Lynx PCS into phylink sync_an_inband
lynx_pcs_config_giga() enables "SGMII AN" only when used in the
MLO_AN_INBAND mode. If it's connected to a PHY, it expects that the PHY
has the in-band autoneg setting in sync with it.
To fulfill those expectations, set the sync_an_inband field in the
phylink_config structure, to opt into the new phylink behavior which
does the following to help with that:
(1) queries PHY driver to figure out a mode supported by both ends
(2) configures in-band autoneg in the PHY to something supported by both
ends
The Lynx PCS is integrated in DPAA1 and DPAA2 SoCs, as well as in
LS1028A (ENETC + Felix switch) and in the T1040 Seville switch.
It seems that the DPAA1 phylink conversion already took steps to prevent
breakage with old DT blobs, by using ovr_an_inband. That is partially
sufficient, partially insufficient (there is still no guarantee that PHY
really has in-band AN enabled). Remove that logic and simply set
sync_an_inband instead (setting both isn't allowed anyway).
Signed-off-by: Vladimir Oltean <vladimir.oltean@....com>
---
v3->v4: patch is new
drivers/net/dsa/ocelot/felix.c | 2 ++
drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c | 1 +
drivers/net/ethernet/freescale/enetc/enetc_pf.c | 1 +
drivers/net/ethernet/freescale/fman/fman_memac.c | 16 +---------------
4 files changed, 5 insertions(+), 15 deletions(-)
diff --git a/drivers/net/dsa/ocelot/felix.c b/drivers/net/dsa/ocelot/felix.c
index 44e160f32067..6deff681c02d 100644
--- a/drivers/net/dsa/ocelot/felix.c
+++ b/drivers/net/dsa/ocelot/felix.c
@@ -1042,6 +1042,8 @@ static void felix_phylink_get_caps(struct dsa_switch *ds, int port,
{
struct ocelot *ocelot = ds->priv;
+ config->sync_an_inband = true;
+
/* This driver does not make use of the speed, duplex, pause or the
* advertisement in its mac_config, so it is safe to mark this driver
* as non-legacy.
diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c
index 51c9da8e1be2..61d31ffb5d97 100644
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c
@@ -406,6 +406,7 @@ int dpaa2_mac_connect(struct dpaa2_mac *mac)
memset(&mac->phylink_config, 0, sizeof(mac->phylink_config));
mac->phylink_config.dev = &net_dev->dev;
mac->phylink_config.type = PHYLINK_NETDEV;
+ mac->phylink_config.sync_an_inband = true;
mac->phylink_config.mac_capabilities = MAC_SYM_PAUSE | MAC_ASYM_PAUSE |
MAC_10FD | MAC_100FD | MAC_1000FD | MAC_2500FD | MAC_5000FD |
diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf.c b/drivers/net/ethernet/freescale/enetc/enetc_pf.c
index 9f6c4f5c0a6c..c0d4fff00987 100644
--- a/drivers/net/ethernet/freescale/enetc/enetc_pf.c
+++ b/drivers/net/ethernet/freescale/enetc/enetc_pf.c
@@ -1126,6 +1126,7 @@ static int enetc_phylink_create(struct enetc_ndev_priv *priv,
pf->phylink_config.dev = &priv->ndev->dev;
pf->phylink_config.type = PHYLINK_NETDEV;
+ pf->phylink_config.sync_an_inband = true;
pf->phylink_config.mac_capabilities = MAC_ASYM_PAUSE | MAC_SYM_PAUSE |
MAC_10 | MAC_100 | MAC_1000 | MAC_2500FD;
diff --git a/drivers/net/ethernet/freescale/fman/fman_memac.c b/drivers/net/ethernet/freescale/fman/fman_memac.c
index 9349f841bd06..e4a707a7d7f4 100644
--- a/drivers/net/ethernet/freescale/fman/fman_memac.c
+++ b/drivers/net/ethernet/freescale/fman/fman_memac.c
@@ -1075,7 +1075,6 @@ int memac_initialization(struct mac_device *mac_dev,
struct fman_mac_params *params)
{
int err;
- struct device_node *fixed;
struct phylink_pcs *pcs;
struct fman_mac *memac;
unsigned long capabilities;
@@ -1219,6 +1218,7 @@ int memac_initialization(struct mac_device *mac_dev,
capabilities &= ~(MAC_10HD | MAC_100HD);
mac_dev->phylink_config.mac_capabilities = capabilities;
+ mac_dev->phylink_config.sync_an_inband = true;
/* The T2080 and T4240 don't support half duplex RGMII. There is no
* other way to identify these SoCs, so just use the machine
@@ -1231,20 +1231,6 @@ int memac_initialization(struct mac_device *mac_dev,
of_machine_is_compatible("fsl,T4240RDB"))
memac->rgmii_no_half_duplex = true;
- /* Most boards should use MLO_AN_INBAND, but existing boards don't have
- * a managed property. Default to MLO_AN_INBAND if nothing else is
- * specified. We need to be careful and not enable this if we have a
- * fixed link or if we are using MII or RGMII, since those
- * configurations modes don't use in-band autonegotiation.
- */
- fixed = of_get_child_by_name(mac_node, "fixed-link");
- if (!fixed && !of_property_read_bool(mac_node, "fixed-link") &&
- !of_property_read_bool(mac_node, "managed") &&
- mac_dev->phy_if != PHY_INTERFACE_MODE_MII &&
- !phy_interface_mode_is_rgmii(mac_dev->phy_if))
- mac_dev->phylink_config.ovr_an_inband = true;
- of_node_put(fixed);
-
err = memac_init(mac_dev->fman_mac);
if (err < 0)
goto _return_fm_mac_free;
--
2.34.1
Powered by blists - more mailing lists