[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