netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next 00/10] net: stmmac: remove mac_interface
@ 2025-09-17 15:11 Russell King (Oracle)
  2025-09-17 15:12 ` [PATCH net-next 01/10] net: stmmac: rework mac_interface and phy_interface documentation Russell King (Oracle)
                   ` (10 more replies)
  0 siblings, 11 replies; 15+ messages in thread
From: Russell King (Oracle) @ 2025-09-17 15:11 UTC (permalink / raw)
  To: Andrew Lunn, Heiner Kallweit
  Cc: Alexandre Torgue, Andrew Lunn, Chen-Yu Tsai, David S. Miller,
	Drew Fustini, Emil Renner Berthing, Eric Dumazet, Fabio Estevam,
	Fu Wei, Guo Ren, imx, Jakub Kicinski, Jernej Skrabec,
	linux-arm-kernel, linux-riscv, linux-stm32, linux-sunxi,
	Maxime Chevallier, Maxime Coquelin, Minda Chen, Mohd Ayaan Anwar,
	netdev, Paolo Abeni, Pengutronix Kernel Team, Samuel Holland,
	Sascha Hauer, Shawn Guo, Vladimir Zapolskiy

The dwmac core supports a range of interfaces, but when it comes to
SerDes interfaces, the core itself does not include the SerDes block.
Consequently, it has to provide an interface suitable to interface such
a block to, and uses TBI for this.

The driver also uses "PCS" for RGMII, even though the dwmac PCS block
is not present for this interface type - it was a convenice for the
code structure as RGMII includes inband signalling of the PHY state,
much like Cisco SGMII does at a high level.

As such, the code refers to RGMII and SGMII modes for the PCS, and
there used to be STMMAC_PCS_TBI and STMMAC_PCS_RTBI constants as well
but these were never set, although they were used in the code.

The selection of the PCS mode was from mac_interface. Thus, it seems
that the original intention was for mac_interface to describe the
interface mode used within the dwmac core, and phy_interface to
describe the external world-accessible interface (e.g. which would
connect to a PHY or SFP cage.)

It appears that many glue drivers misinterpret these. A good exmple
is socfpga. This supports SGMII and 1000BASE-X, but does not include
the dwmac PCS, relying on the Lynx PCS instead. However, it makes use
of mac_interface to configure the dwmac core to its GMII/MII mode.

So, when operating in either of these modes, the dwmac is configured
for GMII mode to communicate with the Lynx PCS which then provides
the SGMII or 1000BASE-X interface mode to the external world.

Given that phy_interface is the external world interface, and
mac_interface is the dwmac core interface, selecting the interface
mode based on mac_interface being 1000BASEX makes no sense.

Moreover, mac_interface is initialised by the stmmac core code. If
the "mac-mode" property is set in DT, this will be used. Otherwise,
it will reflect the "phy-mode" property - meaning that it defaults
to phy_interface. As no in-kernel DT makes reference to a "mac-mode"
property, we can assume that for all in-kernel platforms, these two
interface variables are the same. The exception are those platform
glues which I reviwed and suggested they use phy_interface, setting
mac_interface to PHY_INTERFACE_MODE_NA.

The conclusion to all of this is that mac_interface serves no useful
purpose, and causes confusion as the platform glue code doesn't seem
to know which one should be used.

Thus, let's get rid of mac_interface, which makes all this code more
understandable. It also helps to untangle some of the questions such
as:
- should this be using the interface passed from phylink
- should we set the range of phylink supported interfaces to be
  more than one
- when we get phylink PCS support for the dwmac PCS, should we be
  selecting it based on mac_interface or phy_interface, and how
  should we populate the PCS' supported_interface bitmap.

Having converted socfpga to use phy_interface, this turns out to
feel like "the right way" to do this - convert the external world
"phy_interface" to whatever phy_intf_sel value that the dwmac core
needs to achieve the connection to whatever hardware blocks are
integrated inside the SoC to achieve the requested external world
interface.

As an illustration why - consider that in the case of socfpga, it
_could_ have been implemented such that the dwmac PCS was used for
SGMII, and the Lynx PCS for 1000BASE-X, or vice versa. Only the
platform glue would know which it is.

I will also note that several cores provide their currently configured
interface mode via the ACTPHYIF field of Hardware Feature 0, and thus
can be read back in the platform-independent parts of the driver to
decide whether the internal PCS or the RGMII (or actually SMII) "PCS"
should be used.

This is hot-off-the-press, and has only been build tested. As I have
none of these platforms, this series has not been run-tested, so
please test on your hardware. Thanks.

 drivers/net/ethernet/stmicro/stmmac/dwmac-imx.c    | 20 +++++++-------
 .../net/ethernet/stmicro/stmmac/dwmac-ingenic.c    | 25 ++++++++++-------
 .../net/ethernet/stmicro/stmmac/dwmac-loongson.c   |  2 --
 .../net/ethernet/stmicro/stmmac/dwmac-lpc18xx.c    |  1 -
 .../net/ethernet/stmicro/stmmac/dwmac-socfpga.c    |  2 +-
 .../net/ethernet/stmicro/stmmac/dwmac-starfive.c   |  6 ++---
 drivers/net/ethernet/stmicro/stmmac/dwmac-stm32.c  | 26 +++++++++---------
 drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c  |  4 +--
 drivers/net/ethernet/stmicro/stmmac/dwmac-thead.c  | 24 ++++++++---------
 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c  |  2 +-
 .../net/ethernet/stmicro/stmmac/stmmac_platform.c  |  6 ++++-
 include/linux/stmmac.h                             | 31 ++++++++++++++--------
 12 files changed, 82 insertions(+), 67 deletions(-)

-- 
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2025-09-21  8:18 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-09-17 15:11 [PATCH net-next 00/10] net: stmmac: remove mac_interface Russell King (Oracle)
2025-09-17 15:12 ` [PATCH net-next 01/10] net: stmmac: rework mac_interface and phy_interface documentation Russell King (Oracle)
2025-09-17 15:12 ` [PATCH net-next 02/10] net: stmmac: use phy_interface in stmmac_check_pcs_mode() Russell King (Oracle)
2025-09-17 15:12 ` [PATCH net-next 03/10] net: stmmac: imx: convert to use phy_interface Russell King (Oracle)
2025-09-17 15:12 ` [PATCH net-next 04/10] net: stmmac: ingenic: " Russell King (Oracle)
2025-09-17 15:12 ` [PATCH net-next 05/10] net: stmmac: socfpga: " Russell King (Oracle)
2025-09-21  8:18   ` Maxime Chevallier
2025-09-17 15:12 ` [PATCH net-next 06/10] net: stmmac: starfive: " Russell King (Oracle)
2025-09-17 15:12 ` [PATCH net-next 07/10] net: stmmac: stm32: " Russell King (Oracle)
2025-09-17 15:12 ` [PATCH net-next 08/10] net: stmmac: sun8i: " Russell King (Oracle)
2025-09-17 15:25   ` Chen-Yu Tsai
2025-09-17 15:12 ` [PATCH net-next 09/10] net: stmmac: thead: " Russell King (Oracle)
2025-09-17 15:12 ` [PATCH net-next 10/10] net: stmmac: remove mac_interface Russell King (Oracle)
2025-09-18 20:11   ` Vladimir Zapolskiy
2025-09-20  0:30 ` [PATCH net-next 00/10] " patchwork-bot+netdevbpf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).