[PATCH v9 0/8] Add MV88E6xxx DSA driver and use on gwventana

Tim Harvey
2022-11-30T17:43:17Z

This series adds a DSA driver for the MV88E6xxx based on
drivers/net/phy/mv88e61xx and uses it in the gwventana_gw5904_defconfig.

The hope is that the other three boards that use the MV88E61xx driver
can move to this as well eventually so that we can remove the non-dm
driver and the 4 Kconfig options it requires.

The MV88E6xxx has an MDIO interface thus DM_MDIO must be used so support
for a UCLASS_MDIO driver is added to the fec_mxc ethernet driver in a
way that allows a fallback to the previous non DM_MDIO case as there are
many boards out there using this driver that define DM_MDIO but do not
have the required dt props for a DM_MDIO driver which would cause a
regression.

Additionally some other patches are here suggested by Vladimir:
- ensure MDIO children are scanned on post-bind is needed
- sanity check DSA driver required ops are present
- allow DSA drivers to not require xmit/recv functions
- remove unecessary xmit/recv functions from ksz9477 driver

v9:
- fix regression in dsa xmit() logic for patch 4:
net: dsa: allow rcv() and xmit() to be optional

v8:
- en remove energy-detect low-power mode config
- add phy-mode internal dt prop to phy ports

v7:
- rebase on master
- update commit short msg (s/MV88E61xx/MV88E6xxx)
- replace inline smi_cmd* with macros using logical operators
- replace bitfield_replace with logical operators for readibility
- removed some unused register definitions
- config switch based SERDES mode once in probe vs port_enable
- rework port_enable to clean up and:
- enable energy-detect for all non fixed PHY ports
- configure RGMII delays based on interface type
- add Vladimir's rb tag to patch 8

v6:
- update commit messages
- squash accidently change to mv88e6xxx driver into previous patch
- remove unused dt label for cpu port
- removed unnecessary semicolon
- update commit msg (s/MV88E61xx/MV88E6xxx)
- remove GbE from commit msg and Kconfig desc
- squash accidental change from patch 7 into patch 6
- added error print on failure to read switch id
- mv88e6xxx_probe:
- check for switch enabled
- remove unused variable enabled
- remove unnecessary call to dsa_set_tagging
- port_probe:
- new function to configure phy features by calling phy_config
- port_enable:
- only enable energy-detect sensing on phy ports
- add phy/cmode verification mistmatch warning
- remove mv88e6xxx_fixed_port_setup()
- always force link up for fixed ports
- always set SERDES mode regardless of cpu port
- remove unnecessary setting of CPUDEST
- port_disable:
- remove pointless error check
- removed unnecessary priv data for mdio controller
- fix indentation
- change variable name for clarity

v5:
- fix typo in defconfig update
- added support for MV88E6320
- added Fabio's rb tag

v4:
- use standard Linux internal MDIO dt structure
- use PHY_FIXED_ID define
- rename to mv88e6xxx
- sort includes alphabetically
- remove dsa term from function names
- reduce indentation level and remove unecessary code in of probe_mdio
function
- rename pdev to mdev to represent mdio device

v3:
- fix mdios node in dt
- add Vladimir's rb tag's

v2:
- added Ramon's rb tag's to first two patches
- add patches for dsa-uclass to sanity check ops and make xmit/recv
optional
- fec: fix fallback for non conforming DM_MDIO dts
- mv88e61xx:
- rebase on v2022.07-rc2 (use ofnode_get_phy_node)
- remove unused commented out fields from struct
- remove unused PORT_MASK macro
- remove phy from priv struct name
- refactor code from original drivers/net/phy/mv88e61xx with
suggestions from review to consolidate some functions
into mv88e61xx_dsa_port_enable
- remove unecessary skiping of disabling of CPU port
- remove unecessary dev_set_parent_priv
- remove unnecessary static init flag
- replace debug with a dev_warn if switch device-id unsupported
- remove unnecessary xmit/recv functions as we rely on the fact that
only a single port is active instead of mangling packets

Tested on a Gateworks GW5904 which has a Marvell 88E6176 switch hanging
off the IMX6 FEC.

Best Regards,

Tim

Tim Harvey (8):
net: mdio-uclass: scan for dm mdio children on post-bind
net: dsa: move cpu port probe to dsa_post_probe
net: dsa: ensure dsa driver has proper ops
net: dsa: allow rcv() and xmit() to be optional
net: ksz9477: remove unnecessary xmit and recv functions
net: fec: add support for DM_MDIO
net: add MV88E6xxx DSA driver
board: gw_ventana: enable MV88E61XX DSA support

arch/arm/dts/imx6qdl-gw5904.dtsi | 36 +-
board/gateworks/gw_ventana/gw_ventana.c | 50 +-
configs/gwventana_gw5904_defconfig | 7 +-
drivers/net/Kconfig | 7 +
drivers/net/Makefile | 1 +
drivers/net/fec_mxc.c | 90 ++-
drivers/net/ksz9477.c | 23 -
drivers/net/mv88e6xxx.c | 755 ++++++++++++++++++++++++
net/dsa-uclass.c | 56 +-
net/mdio-uclass.c | 4 +
10 files changed, 953 insertions(+), 76 deletions(-)
create mode 100644 drivers/net/mv88e6xxx.c

--
2.25.1