[PATCH] net: eth-phy: Handle gpio_request_by_name() return value

Ramon Fried rfried.dev at gmail.com
Thu Dec 2 06:03:15 CET 2021


On Tue, Nov 16, 2021 at 7:52 AM Ramon Fried <rfried.dev at gmail.com> wrote:
>
> On Sat, Nov 13, 2021 at 4:23 AM Marek Vasut <marex at denx.de> wrote:
> >
> > The gpio_request_by_name() returns zero in case of success, however the
> > conditional return value check in gpio_request_by_name() checks only for
> > (ret != -ENOENT) and if the condition is true, returns ret outright.
> >
> > This leads to a situation where successful gpio_request_by_name() return
> > leads to immediate successful eth_phy_of_to_plat() return as well, and
> > to skipped parsing of "reset-assert-us" and "reset-deassert-us", so the
> > PHY driver operates with valid reset GPIO, but with assert/deassert times
> > set to default, which is 0, instead of the values from DT. This breaks
> > PHY reset.
> >
> > Fix this by checking if return value is non-zero and then for this one
> > single allowed non-zero return value, -ENOENT.
> >
> > Signed-off-by: Marek Vasut <marex at denx.de>
> > Cc: Ramon Fried <rfried.dev at gmail.com>
> > ---
> >  drivers/net/eth-phy-uclass.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/net/eth-phy-uclass.c b/drivers/net/eth-phy-uclass.c
> > index c04bab944d6..a9b358ee234 100644
> > --- a/drivers/net/eth-phy-uclass.c
> > +++ b/drivers/net/eth-phy-uclass.c
> > @@ -138,7 +138,7 @@ static int eth_phy_of_to_plat(struct udevice *dev)
> >         ret = gpio_request_by_name(dev, "reset-gpios", 0,
> >                                    &uc_priv->reset_gpio,
> >                                    GPIOD_IS_OUT);
> > -       if (ret != -ENOENT)
> > +       if (ret && ret != -ENOENT)
> >                 return ret;
> >
> >         uc_priv->reset_assert_delay = dev_read_u32_default(dev, "reset-assert-us", 0);
> > --
> > 2.33.0
> >
> Reviewed-by: Ramon Fried <rfried.dev at gmail.com>
Applied to u-boot-net/next,
Thanks.


More information about the U-Boot mailing list