aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Karlman <jonas@kwiboo.se>2024-01-18 07:19:45 +0000
committerKever Yang <kever.yang@rock-chips.com>2024-02-04 18:02:45 +0800
commitf1e2f412b0aa24a5f5256dc7894a4c70bb6a0076 (patch)
treec30b709a32022ca9aae785c0f947c48f0517dff6
parent52e33533856952731314ea28a5f8b6c94d74f740 (diff)
downloadu-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.c7
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