summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Niebel <[email protected]>2025-11-21 18:34:44 +0100
committerFabio Estevam <[email protected]>2025-11-29 14:42:26 -0300
commitaafdd856941f1ab390db4bbf3105c5480f03397b (patch)
tree5f79b2384b3654c6599ed2bb542d0f970878a51c
parent206f38e8dd33371ec383ae73c07adb76b7b7abcb (diff)
net: fec_mxc: fix remove with DM_MDIO
If DM_MDIO is used and the FEC device is removed the mdio API must not be used to remove the bus structure. Store pointer the the udevice for MDIO bus created by dm_fec_bind_mdio and use DM functions to cleanup the device in fecmxc_remove. Fixes: 3b8f99a3e762 ("net: fec: add support for DM_MDIO") Signed-off-by: Markus Niebel <[email protected]> Signed-off-by: Alexander Stein <[email protected]> Signed-off-by: Alexander Feilke <[email protected]>
-rw-r--r--drivers/net/fec_mxc.c14
-rw-r--r--drivers/net/fec_mxc.h3
2 files changed, 16 insertions, 1 deletions
diff --git a/drivers/net/fec_mxc.c b/drivers/net/fec_mxc.c
index 18c717855b4..69a76e879b1 100644
--- a/drivers/net/fec_mxc.c
+++ b/drivers/net/fec_mxc.c
@@ -9,6 +9,7 @@
#include <cpu_func.h>
#include <dm.h>
+#include <dm/device-internal.h>
#include <env.h>
#include <log.h>
#include <malloc.h>
@@ -1089,8 +1090,12 @@ static int dm_fec_bind_mdio(struct udevice *dev)
/* need to probe it as there is no compatible to do so */
ret = uclass_get_device_by_ofnode(UCLASS_MDIO, mdio, &mdiodev);
- if (!ret)
+ if (!ret) {
+ struct fec_priv *priv = dev_get_priv(dev);
+
+ priv->mdio_bus = mdiodev;
return 0;
+ }
printf("%s probe %s failed: %d\n", __func__, name, ret);
}
@@ -1431,8 +1436,15 @@ static int fecmxc_remove(struct udevice *dev)
free(priv->phydev);
fec_free_descs(priv);
+#ifdef CONFIG_DM_MDIO
+ if (priv->mdio_bus) {
+ device_remove(priv->mdio_bus, DM_REMOVE_NORMAL);
+ device_unbind(priv->mdio_bus);
+ }
+#else
mdio_unregister(priv->bus);
mdio_free(priv->bus);
+#endif
#ifdef CONFIG_DM_REGULATOR
if (priv->phy_supply)
diff --git a/drivers/net/fec_mxc.h b/drivers/net/fec_mxc.h
index 77bfc1cbf45..12cc00423fa 100644
--- a/drivers/net/fec_mxc.h
+++ b/drivers/net/fec_mxc.h
@@ -255,6 +255,9 @@ struct fec_priv {
int phy_id;
int (*mii_postcall)(int);
#endif
+#ifdef CONFIG_DM_MDIO
+ struct udevice *mdio_bus;
+#endif
#ifdef CONFIG_DM_REGULATOR
struct udevice *phy_supply;
#endif