Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: mdiobus: add reset-post-delay-us handling

Load new "reset-post-delay-us" value from MDIO properties,
and if configured to a greater then zero delay do a
flexible sleeping delay after MDIO bus reset deassert.
This allows devices to exit reset state before start
bus communication.

Signed-off-by: Bruno Thomsen <bruno.thomsen@gmail.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Bruno Thomsen and committed by
David S. Miller
bb383129 6259e0f5

+6
+2
drivers/net/phy/mdio_bus.c
··· 556 556 gpiod_set_value_cansleep(gpiod, 1); 557 557 fsleep(bus->reset_delay_us); 558 558 gpiod_set_value_cansleep(gpiod, 0); 559 + if (bus->reset_post_delay_us > 0) 560 + fsleep(bus->reset_post_delay_us); 559 561 } 560 562 561 563 if (bus->reset) {
+2
drivers/of/of_mdio.c
··· 268 268 /* Get bus level PHY reset GPIO details */ 269 269 mdio->reset_delay_us = DEFAULT_GPIO_RESET_DELAY; 270 270 of_property_read_u32(np, "reset-delay-us", &mdio->reset_delay_us); 271 + mdio->reset_post_delay_us = 0; 272 + of_property_read_u32(np, "reset-post-delay-us", &mdio->reset_post_delay_us); 271 273 272 274 /* Register the MDIO bus */ 273 275 rc = mdiobus_register(mdio);
+2
include/linux/phy.h
··· 293 293 294 294 /* GPIO reset pulse width in microseconds */ 295 295 int reset_delay_us; 296 + /* GPIO reset deassert delay in microseconds */ 297 + int reset_post_delay_us; 296 298 /* RESET GPIO descriptor pointer */ 297 299 struct gpio_desc *reset_gpiod; 298 300