From b6cb94a06da8abbe5a30dd3104e6d9350b2b7ddc Mon Sep 17 00:00:00 2001 From: Pavel Pisa Date: Thu, 9 Apr 2026 01:05:21 +0200 Subject: [PATCH] arch/arm/stm32h7: fix stm32_mdio private structure use The struct stm32_mdio_bus_s aka g_stm32_mdio_bus has not been referenced at all, because mdio_register() allocates its own structure. Then lower half drivers receive only their respective part in mdio_read() and mdio_write() because MDIO_WRITE/MDIO_READ provides only d->lower to the specific lower level drivers. Signed-off-by: Pavel Pisa --- arch/arm/src/stm32h7/stm32_mdio.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/arch/arm/src/stm32h7/stm32_mdio.c b/arch/arm/src/stm32h7/stm32_mdio.c index 257cb95e381..d524b27ce1f 100644 --- a/arch/arm/src/stm32h7/stm32_mdio.c +++ b/arch/arm/src/stm32h7/stm32_mdio.c @@ -46,6 +46,7 @@ static void stm32_checksetup(void); #include #include +#include #include #include @@ -58,9 +59,9 @@ static void stm32_checksetup(void); * Private Types ****************************************************************************/ -struct stm32_mdio_bus_s +struct stm32_mdio_lowerhalf_s { - struct mdio_lowerhalf_s *lower; + struct mdio_lowerhalf_s base; /* MDIO bus timeout in milliseconds */ @@ -88,14 +89,12 @@ const struct mdio_ops_s g_stm32_mdio_ops = .reset = NULL, }; -struct mdio_lowerhalf_s g_stm32_mdio_lowerhalf = +struct stm32_mdio_lowerhalf_s g_stm32_mdio_lowerhalf = { - .ops = &g_stm32_mdio_ops -}; - -struct stm32_mdio_bus_s g_stm32_mdio_bus = -{ - .lower = &g_stm32_mdio_lowerhalf, + .base = + { + .ops = &g_stm32_mdio_ops + }, .timeout = 10 }; @@ -110,7 +109,8 @@ static int stm32_c22_read(struct mdio_lowerhalf_s *dev, uint8_t phydev, uint32_t regval; int retval = -ETIMEDOUT; - struct stm32_mdio_bus_s *priv = (struct stm32_mdio_bus_s *)dev; + struct stm32_mdio_lowerhalf_s *priv = + container_of(dev, struct stm32_mdio_lowerhalf_s, base); /* Configure the MACMDIOAR register, preserving CSR Clock Range CR[3:0] * bits @@ -161,7 +161,8 @@ static int stm32_c22_write(struct mdio_lowerhalf_s *dev, uint8_t phydev, uint32_t regval; int retval = -ETIMEDOUT; - struct stm32_mdio_bus_s *priv = (struct stm32_mdio_bus_s *)dev; + struct stm32_mdio_lowerhalf_s *priv = + container_of(dev, struct stm32_mdio_lowerhalf_s, base); /* Configure the MACMDIOAR register, preserving CSR Clock Range CR[3:0] * bits @@ -228,5 +229,5 @@ static int stm32_c22_write(struct mdio_lowerhalf_s *dev, uint8_t phydev, struct mdio_bus_s *stm32_mdio_bus_initialize(void) { - return mdio_register(&g_stm32_mdio_lowerhalf); + return mdio_register(&g_stm32_mdio_lowerhalf.base); }