]> Git Repo - J-u-boot.git/commitdiff
net: fec: phy: Don't advertise Gbit on (R)MII
authorAlexander Sverdlin <[email protected]>
Thu, 12 Dec 2024 17:25:24 +0000 (18:25 +0100)
committerFabio Estevam <[email protected]>
Sun, 15 Dec 2024 15:34:41 +0000 (12:34 -0300)
Currently if a gigabit-capable PHY is connected to FEC via RMII or MII, it
will advertise 1000FULL and 1000HALF to a link partner.

Different problems may arise here:
- usually with (R)MII between MAC and PHY the PHY's connection to magnetics
would have only 2 pairs routed as well, otherwise a PHY can negotiate 1000
speed and there will be no traffic possible;
- but even if there is no way to negotiate 1000 speed in HW (only 2 signal
pairs routed), it may take a lot of time for PHY to figure this out; in
case of AD1300 it takes 17-20 seconds, which is waay longer than default
4s PHY_ANEG_TIMEOUT.

Use phy_set_supported() in such cases to disable gigabit advertised
options.

Signed-off-by: Alexander Sverdlin <[email protected]>
drivers/net/fec_mxc.c

index eca681b16d11c37321b36d74ba9c814187233aec..7d2170ae72c474826b19c0de5a023c95807fafc3 100644 (file)
@@ -1162,6 +1162,7 @@ static int fec_phy_init(struct fec_priv *priv, struct udevice *dev)
 {
        struct phy_device *phydev = NULL;
        int addr;
+       int ret;
 
        addr = device_get_phy_addr(priv, dev);
 #ifdef CFG_FEC_MXC_PHYADDR
@@ -1175,6 +1176,17 @@ static int fec_phy_init(struct fec_priv *priv, struct udevice *dev)
        if (!phydev)
                return -ENODEV;
 
+       switch (priv->interface) {
+       case PHY_INTERFACE_MODE_MII:
+       case PHY_INTERFACE_MODE_RMII:
+               ret = phy_set_supported(phydev, SPEED_100);
+               if (ret)
+                       return ret;
+               break;
+       default:
+               break;
+       }
+
        priv->phydev = phydev;
        priv->phydev->node = priv->phy_of_node;
        phy_config(phydev);
This page took 0.029503 seconds and 4 git commands to generate.