Re: [PATCH net] net: dsa: mxl-gsw1xx: manually clear RANEG bit
From: Daniel Golle
Date: Fri Dec 05 2025 - 08:56:56 EST
On Fri, Dec 05, 2025 at 02:45:35PM +0100, Andrew Lunn wrote:
> On Fri, Dec 05, 2025 at 01:32:20AM +0000, Daniel Golle wrote:
> > Despite being documented as self-clearing, the RANEG bit sometimes
> > remains set, preventing auto-negotiation from happening.
> >
> > Manually clear the RANEG bit after 10ms as advised by MaxLinear, using
> > delayed_work emulating the asynchronous self-clearing behavior.
>
> Maybe add some text why the complexity of delayed work is used, rather
> than just a msleep(10)?
>
> Calling regmap_read_poll_timeout() to see if it clears itself could
> optimise this, and still be simpler.
Is the restart_an() operation allowed to sleep? Looking at other
drivers I only ever see that it sets a self-clearing AN RESTART bit,
never waiting for that bit to clear. Hence I wanted to immitate
that behavior by clearing the bit asynchronously. If that's not needed
and msleep(10) or usleep_range(10000, 20000) can be used instead that'd
be much easier, of course.