diff options
| author | Boon Khai Ng <[email protected]> | 2026-03-12 19:22:46 +0800 |
|---|---|---|
| committer | Jerome Forissier <[email protected]> | 2026-03-31 16:43:28 +0200 |
| commit | 6e30330d7ac1b708772b1f5c2afae4bbec7c9678 (patch) | |
| tree | f23f05bcc1afb0dab1fcad5fe255c584cce43062 /drivers | |
| parent | 6b5d2990f4951dc832cc162790a8baea5a8715ce (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]>
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/net/dwc_eth_xgmac.c | 28 |
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 */ |
