Re: [PATCH v3 1/3] net: dsa: mv88e6xxx: Don't force link when using in-band-status

From: Andrew Lunn
Date: Tue Oct 20 2020 - 17:16:11 EST


Hi Chris

> So far I've not needed to use interrupts from the 6097. It's connected
> on my hardware but never been tested.

The mv88e6xxx driver will also poll the interrupt bits, if the
interrupt is not wired to a GPIO.

> There are a couple of SERDES LinkInt bits in the Global2 interrupt
> source/mask register which look as though they should fire.

Sounds good. Maybe more 6352 code you can copy.

> > If you can use that, you can then be more in line with the other
> > implementations and not need this change.

> My particular problem was actually on the other end of the link (which
> is a 98dx160 that doesn't currently have a dsa driver). When the link
> was forced on the 6097 end it would only link up if the 6097 came up
> after the dx160. Are you saying there is a way of avoiding the call to
> mv88e6xxx_mac_link_up() if I have interrupts for the serdes ports?

If you have all the code in place, what should happen is that the PCS
is powered up. It will try to establish a link with its peer. phylink
will also call serdes_pcs_an_restart() function to kick off auto-neg
on the PCS link. Once link is established, you should get an
interrupt. The interrupt handler then calls
dsa_port_phylink_mac_change() which tells phylink the PCS is now
up. It will use the serdes_pcs_get_state() call to find out what the
PCS pair have agreed on, and then configure the MAC with the same
information, forcing it.

Lets just hope you can do this, given the level of integration of the
PCS and MAC, in that there are no real PCS registers you can play
with.

Andrew