summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoon Khai Ng <[email protected]>2026-03-12 19:22:46 +0800
committerJerome Forissier <[email protected]>2026-03-31 16:43:28 +0200
commit6e30330d7ac1b708772b1f5c2afae4bbec7c9678 (patch)
treef23f05bcc1afb0dab1fcad5fe255c584cce43062
parent6b5d2990f4951dc832cc162790a8baea5a8715ce (diff)
net: dwc_eth_xgmac: Move DMA reset and pad calibration after PHY init
- 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]>
-rw-r--r--drivers/net/dwc_eth_xgmac.c28
1 files 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 */