[PATCH] net: ti: am65-cpsw-nuss: invoke phy_config() in driver's .start callback

Heiko Thiery heiko.thiery at gmail.com
Mon Sep 8 10:52:37 CEST 2025


Hi Siddhardth,

Am Mi., 16. Apr. 2025 um 14:57 Uhr schrieb Siddharth Vadapalli
<s-vadapalli at ti.com>:
>
> Currently, the phy_config() API is invoked by the driver only once since it
> has been probed. While this works in general, it doesn't allow the driver
> to bring the PHY back to its default reset state. As a result, the driver
> might not be able to recover the PHY from a bad state. To address this,
> move phy_config() into the driver's start callback (am65_cpsw_start()).
>
> Apart from providing the means to recover the PHY in the event of failure,
> the implementation is in line with the idea of "reset and configure" that
> is already followed by am65_cpsw_start() when it comes to programming the
> CPSW MAC.
>

I do not know if this is the same issue here, but I see that in case
no cable is connected and I try to do a dhcp command the board/network
stack of a J722S EVM stays in a broken state. After plugging a cable
it is not possible to do a successful dhcp. It requires a reset to get
a working network again. Same issue can be reproduced when unterrupt a
running dhcp task with CTRL-C.

----
U-Boot 2025.07-rc3-g259a4765c26b (Sep 08 2025 - 10:44:20 +0200)

SoC:   J722S SR1.0 HS-FS
Model: Texas Instruments J722S EVM
DRAM:  2 GiB (total 8 GiB)
Core:  91 devices, 29 uclasses, devicetree: separate
MMC:   mmc at fa10000: 0, mmc at fa00000: 1
Loading Environment from nowhere... OK
In:    serial at 2800000
Out:   serial at 2800000
Err:   serial at 2800000
Net:   eth0: ethernet at 8000000port@1
Hit any key to stop autoboot:  0
=> dhcp
ethernet at 8000000port@1 Waiting for PHY auto negotiation to
complete......... TIMEOUT !
am65_cpsw_nuss_port ethernet at 8000000port@1: phy_startup failed
am65_cpsw_nuss_port ethernet at 8000000port@1: am65_cpsw_start end error
BOOTP broadcast 1

----

Do you have an idea what is going on here?

> Signed-off-by: Siddharth Vadapalli <s-vadapalli at ti.com>
> ---
>
> Hello,
>
> This patch is based on commit
> f892a7f397a Revert "Merge patch series "pxe: Precursor series for supporting read_all() in extlinux / PXE""
> of the next branch of U-Boot.
>
> Regards,
> Siddharth.
>
>  drivers/net/ti/am65-cpsw-nuss.c | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/ti/am65-cpsw-nuss.c b/drivers/net/ti/am65-cpsw-nuss.c
> index 3c62fc0b428..9b69f36d04d 100644
> --- a/drivers/net/ti/am65-cpsw-nuss.c
> +++ b/drivers/net/ti/am65-cpsw-nuss.c
> @@ -438,6 +438,12 @@ static int am65_cpsw_start(struct udevice *dev)
>                        port->port_sgmii_base + AM65_CPSW_SGMII_CONTROL_REG);
>         }
>
> +       ret = phy_config(priv->phydev);
> +       if (ret < 0) {
> +               dev_err(dev, "phy_config failed: %d", ret);
> +               goto err_dis_rx;
> +       }
> +
>         ret = phy_startup(priv->phydev);
>         if (ret) {
>                 dev_err(dev, "phy_startup failed\n");
> @@ -639,9 +645,6 @@ static int am65_cpsw_phy_init(struct udevice *dev)
>         phydev->advertising = phydev->supported;
>
>         priv->phydev = phydev;
> -       ret = phy_config(phydev);
> -       if (ret < 0)
> -               dev_err(dev, "phy_config() failed: %d", ret);
>
>         return ret;
>  }
> --
> 2.34.1
>

BR,
Heiko


More information about the U-Boot mailing list