[PATCH v1 1/2] net: dwc_eth_xgmac: Move DMA reset and pad calibration after PHY init

Jerome Forissier jerome.forissier at arm.com
Wed Mar 18 09:36:18 CET 2026


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 <boon.khai.ng at altera.com>
> ---
>  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


More information about the U-Boot mailing list