On Wed, Aug 24, 2022 at 09:28:27PM +0200, Horatiu Vultur wrote:
> The same GPIO line can be shared by multiple phys for the coma mode pin.
> If that is the case then, all the other phys that share the same line
> will failed to be probed because the access to the gpio line is not
> non-exclusive.
> Fix this by making access to the gpio line to be nonexclusive using flag
> GPIOD_FLAGS_BIT_NONEXCLUSIVE. This allows all the other PHYs to be
> probed.
>
> Fixes: 738871b09250ee ("net: phy: micrel: add coma mode GPIO")
> Signed-off-by: Horatiu Vultur <[email protected]>
> ---
> drivers/net/phy/micrel.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c
> index e78d0bf69bc3..ea72ff64ad33 100644
> --- a/drivers/net/phy/micrel.c
> +++ b/drivers/net/phy/micrel.c
> @@ -2878,7 +2878,8 @@ static int lan8814_release_coma_mode(struct phy_device *phydev)
> struct gpio_desc *gpiod;
>
> gpiod = devm_gpiod_get_optional(&phydev->mdio.dev, "coma-mode",
> - GPIOD_OUT_HIGH_OPEN_DRAIN);
> + GPIOD_OUT_HIGH_OPEN_DRAIN |
> + GPIOD_FLAGS_BIT_NONEXCLUSIVE);
I would suggest putting a comment here. You are assuming the driver
never gains a lan8814_take_coma_mode() when the PHY is put into
suspend, since it sounds like that will put all PHYs on the shared
GPIO into coma mode.
Andrew
The 08/24/2022 21:47, Andrew Lunn wrote:
Hi Andrew,
>
> On Wed, Aug 24, 2022 at 09:28:27PM +0200, Horatiu Vultur wrote:
> > The same GPIO line can be shared by multiple phys for the coma mode pin.
> > If that is the case then, all the other phys that share the same line
> > will failed to be probed because the access to the gpio line is not
> > non-exclusive.
> > Fix this by making access to the gpio line to be nonexclusive using flag
> > GPIOD_FLAGS_BIT_NONEXCLUSIVE. This allows all the other PHYs to be
> > probed.
> >
> > Fixes: 738871b09250ee ("net: phy: micrel: add coma mode GPIO")
> > Signed-off-by: Horatiu Vultur <[email protected]>
> > ---
> > drivers/net/phy/micrel.c | 3 ++-
> > 1 file changed, 2 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c
> > index e78d0bf69bc3..ea72ff64ad33 100644
> > --- a/drivers/net/phy/micrel.c
> > +++ b/drivers/net/phy/micrel.c
> > @@ -2878,7 +2878,8 @@ static int lan8814_release_coma_mode(struct phy_device *phydev)
> > struct gpio_desc *gpiod;
> >
> > gpiod = devm_gpiod_get_optional(&phydev->mdio.dev, "coma-mode",
> > - GPIOD_OUT_HIGH_OPEN_DRAIN);
> > + GPIOD_OUT_HIGH_OPEN_DRAIN |
> > + GPIOD_FLAGS_BIT_NONEXCLUSIVE);
>
> I would suggest putting a comment here. You are assuming the driver
> never gains a lan8814_take_coma_mode() when the PHY is put into
> suspend, since it sounds like that will put all PHYs on the shared
> GPIO into coma mode.
That is correct.
I will add a comment in the next version.
>
> Andrew
--
/Horatiu