On 12/03/2026 12:22, Boon Khai Ng wrote: > - 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 */
Queued for net-next, thanks! -- Jerome

