netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Lee Jones <lee@kernel.org>
To: Vladimir Oltean <vladimir.oltean@nxp.com>
Cc: netdev@vger.kernel.org, Andrew Lunn <andrew@lunn.ch>,
	Heiner Kallweit <hkallweit1@gmail.com>,
	Russell King <linux@armlinux.org.uk>,
	"David S. Miller" <davem@davemloft.net>,
	Eric Dumazet <edumazet@google.com>,
	Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH net-next 07/15] mfd: core: add ability for cells to probe on a custom parent OF node
Date: Tue, 16 Dec 2025 09:18:31 +0000	[thread overview]
Message-ID: <20251216091831.GG9275@google.com> (raw)
In-Reply-To: <20251216002955.bgjy52s4stn2eo4r@skbuf>

> > Side note: The implementation is also janky.
> 
> Yes, this is why it's up for review, so I can learn why it's janky and
> fix it.

I'd be happy to discuss this in great detail if we finally conclude that
this device is suitable for MFD.

Spoiler alert: Unless you add/convert more child devices that are
outside of net/ and drivers/net AND move the core MFD usage to
drivers/mfd/, then we can't conclude that.

> > There does appear to be at least some level of misunderstanding between
> > us.  I'm not for one moment suggesting that a switch can't be an MFD. If
> > it contains probe-able components that need to be split-up across
> > multiple different subsystems, then by all means, move the core driver
> > into drivers/mfd/ and register child devices 'till your heart's content.
> 
> Are you still speaking generically here, or have you actually looked at
> any "nxp,sja1105q" or "nxp,sja1110a" device trees to see what it would
> mean for these compatible strings to be probed by a driver in drivers/mfd?

It's not my role to go digging into existing implementations and
previous submissions to prove whether a particular submission is
suitable for inclusion into MFD.

Please put in front of me, in a concise way (please), why you think this
is fit for inclusion.  I've explained what is usually required, but I'll
(over-)simplify again for clarity:

 - The mfd_* API call-sites must only exist in drivers/mfd/
   - Consumers usually spit out non-system specific logic into a 'core'
 - MFDs need to have more than one child
   - This is where the 'Multi' comes in
 - Children should straddle different sub-systems
   - drivers/net is not enough [0]
   - If all of your sub-devices are in 'net' use the platform_* API
 - <other stipulations less relevant to this stipulation> ...

There will always be exceptions, but previous mistakes are not good
justifications for future ones.

[0]

  .../bindings/net/dsa/nxp,sja1105.yaml         |  28 +
   .../bindings/net/pcs/snps,dw-xpcs.yaml        |   8 +
   MAINTAINERS                                   |   2 +
   drivers/mfd/mfd-core.c                        |  11 +-
   drivers/net/dsa/sja1105/Kconfig               |   2 +
   drivers/net/dsa/sja1105/Makefile              |   2 +-
   drivers/net/dsa/sja1105/sja1105.h             |  42 +-
   drivers/net/dsa/sja1105/sja1105_main.c        | 169 +++---
   drivers/net/dsa/sja1105/sja1105_mdio.c        | 507 ------------------
   drivers/net/dsa/sja1105/sja1105_mfd.c         | 293 ++++++++++
   drivers/net/dsa/sja1105/sja1105_mfd.h         |  11 +
   drivers/net/dsa/sja1105/sja1105_spi.c         | 113 +++-
   drivers/net/mdio/Kconfig                      |  21 +-
   drivers/net/mdio/Makefile                     |   2 +
   drivers/net/mdio/mdio-regmap-simple.c         |  77 +++
   drivers/net/mdio/mdio-regmap.c                |   7 +-
   drivers/net/mdio/mdio-sja1110-cbt1.c          | 173 ++++++
   drivers/net/pcs/pcs-xpcs-plat.c               | 146 +++--
   drivers/net/pcs/pcs-xpcs.c                    |  12 +
   drivers/net/phy/phylink.c                     |  75 ++-
   include/linux/mdio/mdio-regmap.h              |   2 +
   include/linux/mfd/core.h                      |   7 +
   include/linux/pcs/pcs-xpcs.h                  |   1 +
   include/linux/phylink.h                       |   5 +
   24 files changed, 1033 insertions(+), 683 deletions(-)
   delete mode 100644 drivers/net/dsa/sja1105/sja1105_mdio.c
   create mode 100644 drivers/net/dsa/sja1105/sja1105_mfd.c
   create mode 100644 drivers/net/dsa/sja1105/sja1105_mfd.h
   create mode 100644 drivers/net/mdio/mdio-regmap-simple.c
   create mode 100644 drivers/net/mdio/mdio-sja1110-cbt1.c

> What OF node would remain for the DSA switch (child) device driver? The same?
> Or are you suggesting that the entire drivers/net/dsa/sja1105/ would
> move to drivers/mfd/? Or?

See bullet 1.1 above.

[...]

> > I don't recall those discussions from 3 years ago, but the Ocelot
> > platform, whatever it may be, seems to have quite a lot more
> > cross-subsystem device support requirements going on than I see here:
> > 
> > drivers/i2c/busses/i2c-designware-platdrv.c
> > drivers/irqchip/irq-mscc-ocelot.c
> > drivers/mfd/ocelot-*
> > drivers/net/dsa/ocelot/*
> > drivers/net/ethernet/mscc/ocelot*
> > drivers/net/mdio/mdio-mscc-miim.c
> > drivers/phy/mscc/phy-ocelot-serdes.c
> > drivers/pinctrl/pinctrl-microchip-sgpio.c
> > drivers/pinctrl/pinctrl-ocelot.c
> > drivers/power/reset/ocelot-reset.c
> > drivers/spi/spi-dw-mmio.c
> > net/dsa/tag_ocelot_8021q.c
> 
> This is a natural effect of Ocelot being "whatever it may be". It is a
> family of networking SoCs, of which VSC7514 has a MIPS CPU and Linux
> port, where the above drivers are used. The VSC7512 is then a simplified
> variant with the MIPS CPU removed, and the internal components controlled
> externally over SPI. Hence MFD to reuse the same drivers as Linux on
> MIPS (using MMIO) did. This is all that matters, not the quantity.

From what I can see, Ocelot ticks all of the boxes for MFD API usage,
whereas this submission does not.  The fact that the overarching device
provides a similar function is neither here nor there.

These are the results from my searches of your device:

  git grep -i SJA1110 | grep -v 'net\|arch\|include'
  <no results>

[...]

> > My point is, you don't seem to have have any of that here.
> 
> What do you want to see exactly which is not here?
> 
> I have converted three classes of sub-devices on the NXP SJA1110 to MFD
> children in this patch set. Two MDIO buses and an Ethernet PCS for SGMII.
> 
> In the SJA1110 memory map, the important resources look something like this:
> 
> Name         Description                                         Start      End
> SWITCH       Ethernet Switch Subsystem                           0x000000   0x3ffffc
> 100BASE-T1   Internal MDIO bus for 100BASE-T1 PHY (port 5 - 10)  0x704000   0x704ffc
> SGMII1       SGMII Port 1                                        0x705000   0x705ffc
> SGMII2       SGMII Port 2                                        0x706000   0x706ffc
> SGMII3       SGMII Port 3                                        0x707000   0x707ffc
> SGMII4       SGMII Port 4                                        0x708000   0x708ffc
> 100BASE-TX   Internal MDIO bus for 100BASE-TX PHY                0x709000   0x709ffc

All in drivers/net.

> ACU          Auxiliary Control Unit                              0x711000   0x711ffc
> GPIO         General Purpose Input/Output                        0x712000   0x712ffc

Where are these drivers?

> I need to remind you that my purpose here is not to add drivers in
> breadth for all SJA1110 sub-devices now.

You'll see from my discussions with Colin, sub-drivers (if they are to
be used for MFD justification (point 3 above), then they must be added
as part of the first submission.  Perhaps this isn't an MFD, "yet"?

[...]

> The SGMII blocks are highly reusable IPs licensed from Synopsys, and
> Linux already has DT bindings and a corresponding platform driver for
> the case where their registers are viewed using MMIO.

This is a good reason for dividing them up into subordinate platform
devices.  However, it is not a good use-case of MFD.  In it's current
guise, your best bet is to use the platform_* API directly.

This is a well trodden path and it not challenging:

  % git grep platform_device_add -- arch drivers sound | wc -l
  398

[...]

> In my opinion I do not need to add handling for any other sub-device,
> for the support to be more "cross-system" like for Ocelot. What is here
> is enough for you to decide if this is adequate for MFD or not.

Currently ... it's not.

[...]

Hopefully that helps to clarify my expectations a little.

TL;DR, this looks like a good candidate for direct platform_* usage.

-- 
Lee Jones [李琼斯]

  reply	other threads:[~2025-12-16  9:18 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-11-18 19:05 [PATCH net-next 00/15] Probe SJA1105 DSA children using MFD and dynamic OF nodes Vladimir Oltean
2025-11-18 19:05 ` [PATCH net-next 01/15] net: dsa: sja1105: let phylink help with the replay of link callbacks Vladimir Oltean
2025-11-18 19:05 ` [PATCH net-next 02/15] net: mdio-regmap: permit working with non-MMIO regmaps Vladimir Oltean
2025-11-20 14:35   ` Maxime Chevallier
2025-11-18 19:05 ` [PATCH net-next 03/15] net: mdio: add driver for NXP SJA1110 100BASE-T1 embedded PHYs Vladimir Oltean
2025-11-18 19:05 ` [PATCH net-next 04/15] net: mdio: add generic driver for NXP SJA1110 100BASE-TX " Vladimir Oltean
2025-11-20 17:55   ` Maxime Chevallier
2025-11-20 18:49     ` Vladimir Oltean
2025-11-18 19:05 ` [PATCH net-next 05/15] net: dsa: sja1105: prepare regmap for passing to child devices Vladimir Oltean
2025-11-18 19:05 ` [PATCH net-next 06/15] net: dsa: sja1105: include spi.h from sja1105.h Vladimir Oltean
2025-11-18 19:05 ` [PATCH net-next 07/15] mfd: core: add ability for cells to probe on a custom parent OF node Vladimir Oltean
2025-11-20 14:41   ` Lee Jones
2025-11-20 15:36     ` Vladimir Oltean
2025-11-21 12:06       ` Lee Jones
2025-11-21 17:03         ` Vladimir Oltean
2025-11-26 10:20           ` Lee Jones
2025-12-15 15:50           ` Lee Jones
2025-12-16  0:29             ` Vladimir Oltean
2025-12-16  9:18               ` Lee Jones [this message]
2025-12-16 16:24                 ` Vladimir Oltean
2025-12-17  9:31                 ` Andrew Lunn
2025-11-18 19:05 ` [PATCH net-next 08/15] net: dsa: sja1105: transition OF-based MDIO drivers to standalone Vladimir Oltean
2025-11-20 14:40   ` Lee Jones
2025-11-20 15:14     ` Vladimir Oltean
2025-11-20 16:36       ` Lee Jones
2025-11-20 19:59         ` Vladimir Oltean
2025-11-21 12:00           ` Lee Jones
2025-11-18 19:05 ` [PATCH net-next 09/15] net: dsa: sja1105: remove sja1105_mdio_private Vladimir Oltean
2025-11-18 19:05 ` [PATCH net-next 10/15] net: pcs: xpcs: introduce xpcs_create_pcs_fwnode() Vladimir Oltean
2025-11-18 19:05 ` [PATCH net-next 11/15] net: pcs: xpcs-plat: convert to regmap Vladimir Oltean
2025-11-18 19:05 ` [PATCH net-next 12/15] dt-bindings: net: dsa: sja1105: document the PCS nodes Vladimir Oltean
2025-11-20 17:30   ` Rob Herring
2025-11-18 19:05 ` [PATCH net-next 13/15] net: pcs: xpcs-plat: add NXP SJA1105/SJA1110 support Vladimir Oltean
2025-11-18 19:05 ` [PATCH net-next 14/15] net: dsa: sja1105: replace mdiobus-pcs with xpcs-plat driver Vladimir Oltean
2025-11-19  0:41   ` Jakub Kicinski
2025-11-19  9:59     ` Vladimir Oltean
2025-11-19 10:31       ` Andy Shevchenko
2025-11-19 11:25         ` Vladimir Oltean
2025-11-19 16:11           ` Jakub Kicinski
2025-11-19 16:17             ` Andy Shevchenko
2025-11-19 17:23               ` Russell King (Oracle)
2025-11-19 17:39                 ` Andy Shevchenko
2025-11-19 18:35                   ` Jakub Kicinski
2025-11-19 19:33                     ` Andy Shevchenko
2025-11-20 12:32             ` Russell King (Oracle)
2025-11-20 15:00               ` Jakub Kicinski
2025-11-19 11:19   ` kernel test robot
2025-11-19 12:01     ` Vladimir Oltean
2025-11-19 12:03       ` Russell King (Oracle)
2025-11-19 12:05         ` Russell King (Oracle)
2025-11-19 13:28           ` Vladimir Oltean
2025-11-19 12:01   ` kernel test robot
2025-11-20  0:01   ` kernel test robot
2025-11-18 19:05 ` [PATCH net-next 15/15] net: dsa: sja1105: permit finding the XPCS via pcs-handle Vladimir Oltean

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20251216091831.GG9275@google.com \
    --to=lee@kernel.org \
    --cc=andrew@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=hkallweit1@gmail.com \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=vladimir.oltean@nxp.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).