On Tue, Aug 08, 2023 at 02:16:50PM +0200, Bartosz Golaszewski wrote: > On Tue, Aug 8, 2023 at 12:27 AM Andrew Halaney <ahalaney@xxxxxxxxxx> wrote: > > > > On Mon, Aug 07, 2023 at 11:51:40PM +0200, Andrew Lunn wrote: > > > > > I have proposed a solution for this problem in 2020 but it never got > > > > > upstream. Now we have a workaround in place which allows us to hard-code > > > > > the PHY id in the compatible property, thus skipping the ID scanning). > > > > > > > > nitpicky, but I think that already existed at that time :D > > > > > > Yes, it has been there are long long time. It is however only in the > > > last 5 years of so has it been seen as a solution to the chicken egg > > > problem. > > > > > > > > sgmii_phy: phy@8 { > > > > > + compatible = "ethernet-phy-id0141.0dd4"; > > > > > reg = <0x8>; > > > > > device_type = "ethernet-phy"; > > > > > + reset-gpios = <&pmm8654au_2_gpios 8 GPIO_ACTIVE_LOW>; > > > > > + reset-deassert-us = <70000>; > > > > > > > > Doesn't this need reset-assert-us? > > > > > > If i remember correctly, there is a default value if DT does not > > > provide one. > > > > > > > I've been trying to make sure I view devicetree properties as an OS > > agnostic ABI lately, with that in mind... > > > > The dt-binding says this for ethernet-phy: > > > > reset-assert-us: > > description: > > Delay after the reset was asserted in microseconds. If this > > property is missing the delay will be skipped. > > > > If the hardware needs a delay I think we should encode it based on that > > description, else we risk it starting to look like a unit impulse! > > > > Please note that the mdio-level delay properties are not the same as > the ones on the PHY levels. > > reset-delay-us - this is the delay BEFORE *DEASSERTING* the reset line > reset-post-delay-us - this is the delay AFTER *DEASSERTING* the reset line > > On PHY level we have: > > reset-assert-us - AFTER *ASSERTING* > reset-deassert-us - AFTER *DEASSERTING* > > There never has been any reset-assert delay on that line before. It > doesn't look like we need a delay BEFORE deasserting the line, do we? > The MDIO reset-delay-us happens "before deassert"/"after assert", so to make things a proper move here I think it needs a resrt-assert, otherwise behavior with respect to reset timing is definitely changed from this patch! Here's a trimmed version of the reset handling in mdio_bus.c to back that up: /* assert bus level PHY GPIO reset */ gpiod = devm_gpiod_get_optional(&bus->dev, "reset", GPIOD_OUT_HIGH); ... } else if (gpiod) { bus->reset_gpiod = gpiod; fsleep(bus->reset_delay_us); gpiod_set_value_cansleep(gpiod, 0); if (bus->reset_post_delay_us > 0) fsleep(bus->reset_post_delay_us); } so its assert reset, sleep reset_delay_us, deassert, sleep reset_post_delay_us for the MDIO case. Thanks, Andrew