drivers: net: fsl_enetc_mdio: return with time-out if HW is stuck
authorAlex Marginean <alexandru.marginean@nxp.com>
Thu, 14 Nov 2019 16:58:47 +0000 (18:58 +0200)
committerJoe Hershberger <joe.hershberger@ni.com>
Mon, 9 Dec 2019 15:47:43 +0000 (09:47 -0600)
On some boards MDIO may get stuck if it detects echo on the line.  This is
a know hardware issue, there is a board fix for it.  In case we're running
on a board that doesn't have the fix, we don't want to loop here forever
and freeze U-Boot.

Signed-off-by: Alex Marginean <alexandru.marginean@nxp.com>
Acked-by: Joe Hershberger <joe.hershberger@ni.com>
drivers/net/fsl_enetc_mdio.c

index b4463a58a5761c1b61fbc6e243ebd1f140f92201..47257a6cf686ebc7b2e946f29b3ee4600b9837ae 100644 (file)
 
 static void enetc_mdio_wait_bsy(struct enetc_mdio_priv *priv)
 {
-       while (enetc_read(priv, ENETC_MDIO_CFG) & ENETC_EMDIO_CFG_BSY)
+       int to = 10000;
+
+       while ((enetc_read(priv, ENETC_MDIO_CFG) & ENETC_EMDIO_CFG_BSY) &&
+              --to)
                cpu_relax();
+       if (!to)
+               printf("T");
 }
 
 int enetc_mdio_read_priv(struct enetc_mdio_priv *priv, int addr, int devad,