- Move DMA software reset and pad calibration in xgmac_start() to occur
  after the PHY is initialized and connected.
- This ensures the PHY is ready before performing these operations,
  which is necessary for proper recovery after reboot.

This change fixes issues where the PHY did not recover from power-down
state after a Linux reboot, for the board using Micrel KSZ90x1 PHY.

Signed-off-by: Boon Khai Ng <[email protected]>
---
 drivers/net/dwc_eth_xgmac.c | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/drivers/net/dwc_eth_xgmac.c b/drivers/net/dwc_eth_xgmac.c
index 458b87af7a2..2ab5ec5f0d9 100644
--- a/drivers/net/dwc_eth_xgmac.c
+++ b/drivers/net/dwc_eth_xgmac.c
@@ -497,20 +497,6 @@ static int xgmac_start(struct udevice *dev)
 
        xgmac->reg_access_ok = true;
 
-       ret = wait_for_bit_le32(&xgmac->dma_regs->mode,
-                               XGMAC_DMA_MODE_SWR, false,
-                               xgmac->config->swr_wait, false);
-       if (ret) {
-               pr_err("%s XGMAC_DMA_MODE_SWR stuck: %d\n", dev->name, ret);
-               goto err_stop_resets;
-       }
-
-       ret = xgmac->config->ops->xgmac_calibrate_pads(dev);
-       if (ret < 0) {
-               pr_err("%s xgmac_calibrate_pads() failed: %d\n", dev->name, 
ret);
-               goto err_stop_resets;
-       }
-
        /*
         * if PHY was already connected and configured,
         * don't need to reconnect/reconfigure again
@@ -559,6 +545,20 @@ static int xgmac_start(struct udevice *dev)
                goto err_shutdown_phy;
        }
 
+       ret = wait_for_bit_le32(&xgmac->dma_regs->mode,
+                               XGMAC_DMA_MODE_SWR, false,
+                               xgmac->config->swr_wait, false);
+       if (ret) {
+               pr_err("%s XGMAC_DMA_MODE_SWR stuck: %d\n", dev->name, ret);
+               goto err_stop_resets;
+       }
+
+       ret = xgmac->config->ops->xgmac_calibrate_pads(dev);
+       if (ret < 0) {
+               pr_err("%s xgmac_calibrate_pads() failed: %d\n", dev->name, 
ret);
+               goto err_stop_resets;
+       }
+
        /* Configure MTL */
 
        /* Enable Store and Forward mode for TX */
-- 
2.43.7

Reply via email to