RE: [PATCH] net: fec: fix enet_out clock handling

Duan Andy
2015-11-30T07:31:19Z

From: Lothar Waßmann <LW@KARO-electronics.de> Sent: Monday, November 30, 2015 2:56 PM
> To: Duan Fugang-B38611
> Cc: Andrew Lunn; David S. Miller; Estevam Fabio-R49496; Kevin Hao; Lucas
> Stach; Philippe Reynes; Russell King; Uwe Kleine-K?nig; linux-
> kernel@vger.kernel.org; netdev@vger.kernel.org; Stefan Agner
> Subject: Re: [PATCH] net: fec: fix enet_out clock handling
>
> Hi,
>
> > From: Lothar Waßmann <LW@KARO-electronics.de> Sent: Friday, November
> > 27, 2015 9:39 PM
> > > To: Andrew Lunn; David S. Miller; Estevam Fabio-R49496; Kevin Hao;
> > > Lothar Waßmann; Lucas Stach; Duan Fugang-B38611; Philippe Reynes;
> > > Russell King; Uwe Kleine-König; linux-kernel@vger.kernel.org;
> > > netdev@vger.kernel.org; Stefan Agner
> > > Subject: [PATCH] net: fec: fix enet_out clock handling
> > >
> > > When ENET_OUT is being used as reference clock for an external PHY,
> > > the clock must not be disabled while the PHY is active. Otherwise
> > > the PHY may lose its internal state and require a reset to become
> functional again.
> > >
> > > A symptom for this bug is a network interface that constantly
> > > toggles between UP and DOWN state:
> > > fec 800f0000.ethernet eth0: Link is Up - 100Mbps/Full - flow control
> > > rx/tx fec 800f0000.ethernet eth0: Link is Down fec 800f0000.ethernet
> eth0:
> > > Link is Up - 100Mbps/Full - flow control rx/tx fec 800f0000.ethernet
> eth0:
> > > Link is Down [...]
> > >
> > > Signed-off-by: Lothar Waßmann <LW@KARO-electronics.de>
> > > ---
> > > drivers/net/ethernet/freescale/fec_main.c | 34
> > > +++++++++++++------------
> > > ------
> > > 1 file changed, 14 insertions(+), 20 deletions(-)
> > >
> >
> > When MAC is not ready with clocks disabled, it is not necessary to
> supply clock for PHY. In fact, PHY also is not ready, why does it need
> clock ?
> > For your problem, you must add PHY reset in your dts file to resolve
> your problem.
> >
> The phy-reset-gpio property is set in the DTB. But fec_reset_phy() which
> asserts the RESET is only called from within the probe() function.
> It should probably be called from fec_restart() instead?
>
After enet_out clock enable, you can call fec_reset_phy() do phy reset. Don't put it in .fec_restart() function because
Cable hotplug test cause phy registers reset to HW default status.

Regards,
Andy