Re: [PATCH v2] net: fec: manage corner deferred probe condition

From: Andrew Lunn
Date: Tue Jan 17 2023 - 09:18:16 EST


On Tue, Jan 17, 2023 at 05:54:21AM +0000, Wei Fang wrote:
> > -----Original Message-----
> > From: Pierluigi Passaro <pierluigi.p@xxxxxxxxxxxxx>
> > Sent: 2023年1月17日 4:23
> > To: Andrew Lunn <andrew@xxxxxxx>
> > Cc: Pierluigi Passaro <pierluigi.passaro@xxxxxxxxx>; Wei Fang
> > <wei.fang@xxxxxxx>; Shenwei Wang <shenwei.wang@xxxxxxx>; Clark Wang
> > <xiaoning.wang@xxxxxxx>; dl-linux-imx <linux-imx@xxxxxxx>;
> > davem@xxxxxxxxxxxxx; edumazet@xxxxxxxxxx; kuba@xxxxxxxxxx;
> > pabeni@xxxxxxxxxx; netdev@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx;
> > eran.m@xxxxxxxxxxxxx; Nate Drude <Nate.D@xxxxxxxxxxxxx>; Francesco
> > Ferraro <francesco.f@xxxxxxxxxxxxx>
> > Subject: Re: [PATCH v2] net: fec: manage corner deferred probe condition
> >
> > On Mon, Jan 16, 2023 at 4:32 PM Andrew Lunn <andrew@xxxxxxx> wrote:
> > > > This is the setup of the corner case:
> > > > - FEC0 is the owner of MDIO bus, but its own PHY rely on a "delayed"
> > > > GPIO
> > > > - FEC1 rely on FEC0 for MDIO communications The sequence is
> > > > something like this
> > > > - FEC0 probe start, but being the reset GPIO "delayed" it return
> > > > EPROBE_DEFERRED
> > > > - FEC1 is successfully probed: being the MDIO bus still not owned,
> > > > the driver assume
> > > >   that the ownership must be assigned to the 1st one successfully
> > > > probed, but no
> > > >   MDIO node is actually present and no communication takes place.
> > >
> > > So semantics of a phandle is that you expect what it points to, to
> > > exists. So if phy-handle points to a PHY, when you follow that pointer
> > > and find it missing, you should defer the probe. So this step should
> > > not succeed.
> > >
> > I agree with you: the check is present, but the current logic is not consistent.
> > Whenever the node owning the MDIO fails the probe due to
> > EPROBE_DEFERRED, also the second node must defer the probe, otherwise no
> > MDIO communication is possible.
> > That's why the patch set the static variable wait_for_mdio_bus to track the
> > status.
> > > > - FEC0 is successfully probed, but MDIO bus is now assigned to FEC1
> > > >   and cannot  and no communication takes place
> > >
>
> Have you tested that this issue also exists on the net tree? According to your
> description, I simulated your situation on the net tree and tested it with imx6ul,
> but the problem you mentioned does not exist. Below is is my test patch.

Hi Wei

Reading the emails from Pierluigi, i don't get the feeling he really
understands the problem and has got to the root cause. I've not seen a
really good, detailed explanation of what is going wrong.

Andrew