mbox series

[RFC,00/10] net: pcs: xpcs: cleanups batch 1

Message ID ZvF0er+vyciwy3Nx@shell.armlinux.org.uk (mailing list archive)
Headers show
Series net: pcs: xpcs: cleanups batch 1 | expand

Message

Russell King (Oracle) Sept. 23, 2024, 2 p.m. UTC
Hi,

First, sorry for the bland series subject - this is the first in a
number of cleanup series to the XPCS driver. This series has some
functional changes beyond merely cleanups, notably the first patch.

This series starts off with a patch that moves the PCS reset from
the xpcs_create*() family of calls to when phylink first configures
the PHY. The motivation for this change is to get rid of the
interface argument to the xpcs_create*() functions, which I see as
unnecessary complexity. This patch needs testing on SJA1105, Wangxun
and STMMAC drivers.

Patch 2 removes the now unnecessary interface argument from the
internal xpcs_create() and xpcs_init_iface() functions. With this,
xpcs_init_iface() becomes a misnamed function, but patch 3 removes
this function, moving its now meager contents to xpcs_create().

Patch 4 adds xpcs_destroy_pcs() and xpcs_create_pcs_mdiodev()
functions which return and take a phylink_pcs, allowing SJA1105
and Wangxun drivers to be converted to using the phylink_pcs
structure internally.

Patches 5 through 8 convert both these drivers to that end.

Patch 9 drops the interface argument from the remaining xpcs_create*()
functions, addressing the only remaining caller of these functions,
that being the STMMAC driver.

As patch 7 removed the direct calls to the XPCS config/link-up
functions, the last patch makes these functions static.

 drivers/net/dsa/sja1105/sja1105.h                 |  2 +-
 drivers/net/dsa/sja1105/sja1105_main.c            | 83 ++++++++++----------
 drivers/net/dsa/sja1105/sja1105_mdio.c            | 28 ++++---
 drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c |  7 +-
 drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c    | 18 ++---
 drivers/net/ethernet/wangxun/txgbe/txgbe_type.h   |  2 +-
 drivers/net/pcs/pcs-xpcs.c                        | 92 ++++++++++++++---------
 include/linux/pcs/pcs-xpcs.h                      | 14 ++--
 8 files changed, 130 insertions(+), 116 deletions(-)

Comments

Maxime Chevallier Sept. 23, 2024, 3:02 p.m. UTC | #1
Hi Russell,

On Mon, 23 Sep 2024 15:00:26 +0100
"Russell King (Oracle)" <linux@armlinux.org.uk> wrote:

> Hi,
> 
> First, sorry for the bland series subject - this is the first in a
> number of cleanup series to the XPCS driver. This series has some
> functional changes beyond merely cleanups, notably the first patch.

FWIW I've reviewed the whole series, to the best of my knowledge this
looks fine, nice improvements. I don't have any means to test however.

Thanks,

Maxime
Vladimir Oltean Sept. 25, 2024, 1:43 p.m. UTC | #2
Hi Russell,

On Mon, Sep 23, 2024 at 03:00:26PM +0100, Russell King (Oracle) wrote:
> First, sorry for the bland series subject - this is the first in a
> number of cleanup series to the XPCS driver.

I presume you intend to remove the rest of the exported xpcs functions
as well, in further "batches". Could you share in advance some details
about what you plan to do with xpcs_get_an_mode() as used in stmmac?

	if (xpcs_get_an_mode(priv->hw->xpcs, mode) != DW_AN_C73))

I'm interested because I actually have some downstream NXP patches which
introduce an entirely new MLO_AN_C73 negotiating mode in phylink (though
they don't convert XPCS to it, sadly). Just wondering where this is going
in your view.
Russell King (Oracle) Sept. 26, 2024, 11:41 a.m. UTC | #3
On Wed, Sep 25, 2024 at 04:43:37PM +0300, Vladimir Oltean wrote:
> Hi Russell,
> 
> On Mon, Sep 23, 2024 at 03:00:26PM +0100, Russell King (Oracle) wrote:
> > First, sorry for the bland series subject - this is the first in a
> > number of cleanup series to the XPCS driver.
> 
> I presume you intend to remove the rest of the exported xpcs functions
> as well, in further "batches". Could you share in advance some details
> about what you plan to do with xpcs_get_an_mode() as used in stmmac?

I've been concentrating more on the sja1105 and wangxun users with this
cleanup, as changing stmmac is going to be quite painful - so I've left
this as something for the future. stmmac already stores a phylink_pcs
pointer, but we can't re-use that for XPCS because stmmac needs to know
that it's an XPCS vs some other PCS due to the direct calls such as
xpcs_get_an_mode() and xpcs_config_eee().

When I was working on EEE support at phylink level, I did try to figure
out what xpcs_config_eee() is all about, what it's trying to do, why,
and how it would fit into any phylink-based EEE scheme, but I never got
very far with that due to lack of documentation.

So, at the moment I have no plans to touch the prototypes of
xpcs_get_an_mode(), xpcs_config_eee() nor xpcs_get_interfaces(). With
the entire patch series being so large already, I'm in no hurry to add
patches for this - which would need yet more work on stmmac that I'm
no longer willing to do.

> 	if (xpcs_get_an_mode(priv->hw->xpcs, mode) != DW_AN_C73))
> 
> I'm interested because I actually have some downstream NXP patches which
> introduce an entirely new MLO_AN_C73 negotiating mode in phylink (though
> they don't convert XPCS to it, sadly). Just wondering where this is going
> in your view.

To give a flavour of what remains:

net: pcs: xpcs: move Wangxun VR_XS_PCS_DIG_CTRL1 configuration
net: pcs: xpcs: correctly place DW_VR_MII_DIG_CTRL1_2G5_EN
net: pcs: xpcs: use dev_*() to print messages
net: pcs: xpcs: convert to use read_poll_timeout()
net: pcs: xpcs: add _modify() accessors
net: pcs: xpcs: use FIELD_PREP() and FIELD_GET()
net: pcs: xpcs: convert to use linkmode_adv_to_c73()
net: pcs: xpcs: add xpcs_linkmode_supported()
net: mdio: add linkmode_adv_to_c73()
net: pcs: xpcs: move searching ID list out of line
net: pcs: xpcs: rename xpcs_get_id()
net: pcs: xpcs: move definition of struct dw_xpcs to private header
net: pcs: xpcs: provide a helper to get the phylink pcs given xpcs
net: pcs: xpcs: pass xpcs instead of xpcs->id to xpcs_find_compat()
net: pcs: xpcs: don't use array for interface
net: pcs: xpcs: remove dw_xpcs_compat enum

which looks like this on the diffstat:

 drivers/net/ethernet/stmicro/stmmac/dwmac-intel.c |   2 +-
 drivers/net/pcs/pcs-xpcs-nxp.c                    |  24 +-
 drivers/net/pcs/pcs-xpcs-wx.c                     |  51 +--
 drivers/net/pcs/pcs-xpcs.c                        | 521 +++++++++-------------
 drivers/net/pcs/pcs-xpcs.h                        |  42 +-
 include/linux/mdio.h                              |  40 ++
 include/linux/pcs/pcs-xpcs.h                      |  19 +-
 7 files changed, 303 insertions(+), 396 deletions(-)
Vladimir Oltean Sept. 26, 2024, 1:49 p.m. UTC | #4
On Thu, Sep 26, 2024 at 12:41:27PM +0100, Russell King (Oracle) wrote:
> On Wed, Sep 25, 2024 at 04:43:37PM +0300, Vladimir Oltean wrote:
> > Hi Russell,
> > 
> > On Mon, Sep 23, 2024 at 03:00:26PM +0100, Russell King (Oracle) wrote:
> > > First, sorry for the bland series subject - this is the first in a
> > > number of cleanup series to the XPCS driver.
> > 
> > I presume you intend to remove the rest of the exported xpcs functions
> > as well, in further "batches". Could you share in advance some details
> > about what you plan to do with xpcs_get_an_mode() as used in stmmac?
> 
> I've been concentrating more on the sja1105 and wangxun users with this
> cleanup, as changing stmmac is going to be quite painful - so I've left
> this as something for the future. stmmac already stores a phylink_pcs
> pointer, but we can't re-use that for XPCS because stmmac needs to know
> that it's an XPCS vs some other PCS due to the direct calls such as
> xpcs_get_an_mode() and xpcs_config_eee().
> 
> When I was working on EEE support at phylink level, I did try to figure
> out what xpcs_config_eee() is all about, what it's trying to do, why,
> and how it would fit into any phylink-based EEE scheme, but I never got
> very far with that due to lack of documentation.
> 
> So, at the moment I have no plans to touch the prototypes of
> xpcs_get_an_mode(), xpcs_config_eee() nor xpcs_get_interfaces(). With
> the entire patch series being so large already, I'm in no hurry to add
> patches for this - which would need yet more work on stmmac that I'm
> no longer willing to do.

Ok, but I guess that the (very) long-term plan still is that direct
calls from the MAC driver into symbols exported by the PCS are no longer
going to be a thing, right?

> > 	if (xpcs_get_an_mode(priv->hw->xpcs, mode) != DW_AN_C73))
> > 
> > I'm interested because I actually have some downstream NXP patches which
> > introduce an entirely new MLO_AN_C73 negotiating mode in phylink (though
> > they don't convert XPCS to it, sadly). Just wondering where this is going
> > in your view.
> 
> To give a flavour of what remains:
> 
> net: pcs: xpcs: move Wangxun VR_XS_PCS_DIG_CTRL1 configuration
> net: pcs: xpcs: correctly place DW_VR_MII_DIG_CTRL1_2G5_EN
> net: pcs: xpcs: use dev_*() to print messages
> net: pcs: xpcs: convert to use read_poll_timeout()
> net: pcs: xpcs: add _modify() accessors
> net: pcs: xpcs: use FIELD_PREP() and FIELD_GET()
> net: pcs: xpcs: convert to use linkmode_adv_to_c73()
> net: pcs: xpcs: add xpcs_linkmode_supported()
> net: mdio: add linkmode_adv_to_c73()
> net: pcs: xpcs: move searching ID list out of line
> net: pcs: xpcs: rename xpcs_get_id()
> net: pcs: xpcs: move definition of struct dw_xpcs to private header
> net: pcs: xpcs: provide a helper to get the phylink pcs given xpcs
> net: pcs: xpcs: pass xpcs instead of xpcs->id to xpcs_find_compat()
> net: pcs: xpcs: don't use array for interface
> net: pcs: xpcs: remove dw_xpcs_compat enum
> 
> which looks like this on the diffstat:
> 
>  drivers/net/ethernet/stmicro/stmmac/dwmac-intel.c |   2 +-
>  drivers/net/pcs/pcs-xpcs-nxp.c                    |  24 +-
>  drivers/net/pcs/pcs-xpcs-wx.c                     |  51 +--
>  drivers/net/pcs/pcs-xpcs.c                        | 521 +++++++++-------------
>  drivers/net/pcs/pcs-xpcs.h                        |  42 +-
>  include/linux/mdio.h                              |  40 ++
>  include/linux/pcs/pcs-xpcs.h                      |  19 +-
>  7 files changed, 303 insertions(+), 396 deletions(-)

Ok, I don't see anything major on the clause 73 autoneg front. Which I
guess is good? (because at least there aren't competing ideas in flight
about phylink's role for this operating mode)

The bad part is that some user-visible functional changes in xpcs will
most likely be in order. So will probably not be able to be converted
without someone with both access to the 10G hardware and the motivation
to do so (and this might make the conversion unreachable for me too).

For example, without having seen the content of your patch list,
I can only assume linkmode_adv_to_c73() is based on the ethtool
link modes that _xpcs_config_aneg_c73(), mii_c73_mod_linkmode() and
phylink_c73_priority_resolution[] treat.

But I'm already objecting that 2500baseX shouldn't be in those tables.
There should have been a new 2500base-KX ethtool mode, which is one
of the amendments to 802.3-2018 called 802.3cb-2018.

I also have other objections to XPCS's implementation of C73, but I
don't think this is the right context to point them all out. The gist
is that at least for this area, I don't think it would be a good idea
at all to base core phylink support based on what XPCS has/does.

I guess what I'm saying is that taking a break from stmmac until the
groundwork in the core has been laid out through some other vector also
seems like the best idea to me.

Would you be interested in seeing an alternative implementation of
clause 73 support (for the Lynx PCS), this time centered around phylink_pcs,
even if it doesn't touch stmmac/xpcs? As a side effect of that work, it
would maybe provide a long-term avenue of avoiding the xpcs_get_interfaces()
and xpcs_get_an_mode() direct calls, as well as a more consolidated
framework for C73 in XPCS to be reimplemented by somebody. (warning,
this implementation will be quite large, so the question is also about
your time/energy availability in the near future).