diff options
author | Jonas Karlman <jonas@kwiboo.se> | 2024-01-18 07:19:45 +0000 |
---|---|---|
committer | Kever Yang <kever.yang@rock-chips.com> | 2024-02-04 18:02:45 +0800 |
commit | f1e2f412b0aa24a5f5256dc7894a4c70bb6a0076 (patch) | |
tree | c30b709a32022ca9aae785c0f947c48f0517dff6 | |
parent | 52e33533856952731314ea28a5f8b6c94d74f740 (diff) | |
download | u-boot-f1e2f412b0aa24a5f5256dc7894a4c70bb6a0076.zip u-boot-f1e2f412b0aa24a5f5256dc7894a4c70bb6a0076.tar.gz u-boot-f1e2f412b0aa24a5f5256dc7894a4c70bb6a0076.tar.bz2 |
net: designware: Reset eth phy before phy connect
Some ethernet PHY require being reset before a phy-id can be read back
on the MDIO bus. This can result in the following message being show
on e.g. a Radxa ROCK Pi E v1.21 with a RTL8211F ethernet PHY.
Could not get PHY for ethernet@ff540000: addr -1
Add support to designware ethernet driver to reset eth phy by calling
the eth phy uclass function eth_phy_set_mdio_bus(). The call use NULL
as bus parameter to not set a shared mdio bus reference that would be
freed when probe fails. Also add a eth_phy_get_addr() call to try and
get the phy addr from DT when DM_MDIO is disabled.
This help fix ethernet on Radxa ROCK Pi E v1.21:
=> mdio list
ethernet@ff540000:
1 - RealTek RTL8211F <--> ethernet@ff540000
Reported-by: Trevor Woerner <twoerner@gmail.com>
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
Reviewed-by: Kever Yang <kever.yang@rock-chips.com>
-rw-r--r-- | drivers/net/designware.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/net/designware.c b/drivers/net/designware.c index c869635..c15fb36 100644 --- a/drivers/net/designware.c +++ b/drivers/net/designware.c @@ -13,6 +13,7 @@ #include <cpu_func.h> #include <dm.h> #include <errno.h> +#include <eth_phy.h> #include <log.h> #include <miiphy.h> #include <malloc.h> @@ -576,6 +577,9 @@ static int dw_phy_init(struct dw_eth_dev *priv, void *dev) struct phy_device *phydev; int ret; + if (IS_ENABLED(CONFIG_DM_ETH_PHY)) + eth_phy_set_mdio_bus(dev, NULL); + #if IS_ENABLED(CONFIG_DM_MDIO) phydev = dm_eth_phy_connect(dev); if (!phydev) @@ -583,6 +587,9 @@ static int dw_phy_init(struct dw_eth_dev *priv, void *dev) #else int phy_addr = -1; + if (IS_ENABLED(CONFIG_DM_ETH_PHY)) + phy_addr = eth_phy_get_addr(dev); + #ifdef CONFIG_PHY_ADDR phy_addr = CONFIG_PHY_ADDR; #endif |