Instead of trying to guess which operating modes need in-band
negotiation to be active and which ones don't, parse the available
information from the device tree. That will be correct in the cases we
can already guess, and more.

Signed-off-by: Vladimir Oltean <vladimir.olt...@nxp.com>
---
 drivers/net/mscc_eswitch/felix_switch.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/drivers/net/mscc_eswitch/felix_switch.c 
b/drivers/net/mscc_eswitch/felix_switch.c
index 6aa79784460d..1df7d03fc40c 100644
--- a/drivers/net/mscc_eswitch/felix_switch.c
+++ b/drivers/net/mscc_eswitch/felix_switch.c
@@ -16,6 +16,7 @@
  */
 
 #include <dm/device_compat.h>
+#include <dm/of_extra.h>
 #include <linux/delay.h>
 #include <net/dsa.h>
 #include <asm/io.h>
@@ -210,17 +211,14 @@ static int felix_init_sxgmii(struct mii_dev *imdio, int 
pidx)
 static void felix_start_pcs(struct udevice *dev, int port,
                            struct phy_device *phy, struct mii_dev *imdio)
 {
-       bool autoneg = true;
-
-       if (phy->phy_id == PHY_FIXED_ID ||
-           phy->interface == PHY_INTERFACE_MODE_SGMII_2500)
-               autoneg = false;
+       ofnode node = dsa_port_get_ofnode(dev, port);
+       bool inband_an = ofnode_eth_uses_inband_aneg(node);
 
        switch (phy->interface) {
        case PHY_INTERFACE_MODE_SGMII:
        case PHY_INTERFACE_MODE_SGMII_2500:
        case PHY_INTERFACE_MODE_QSGMII:
-               felix_init_sgmii(imdio, port, autoneg);
+               felix_init_sgmii(imdio, port, inband_an);
                break;
        case PHY_INTERFACE_MODE_XGMII:
        case PHY_INTERFACE_MODE_XFI:
-- 
2.25.1

Reply via email to