RE: [PATCH net-next v3 0/8] net: dsa: microchip: Remove unnecessary ksz_dev_ops callbacks
From: <hidden>
Date: 2026-05-23 00:03:25
Also in:
lkml
This series continues the rework of the KSZ driver initiated by a previous series (see [1]), following the discussion we had here [2]. The KSZ driver got way too convoluted over time because it uses a common framework to handle more than 20 switches split in 5 families (see below table) +----------+---------+---------+---------+---------+---------+ | Family | KSZ8463 | KSZ87xx | KSZ88xx | KSZ9477 | LAN937X | +----------+---------+---------+---------+---------+---------+ | Switches | KSZ8463 | KSZ8795 | KSZ88X3 | KSZ8563 | LAN9370 | | | | KSZ8794 | KSZ8864 | KSZ9477 | LAN9371 | | | | KSZ8765 | KSZ8895 | KSZ9896 | LAN9372 | | | | | | KSZ9897 | LAN9373 | | | | | | KSZ9893 | LAN9374 | | | | | | KSZ9563 | | | | | | | KSZ8567 | | | | | | | KSZ9567 | | | | | | | LAN9646 | | +----------+---------+---------+---------+---------+---------+
I would say KSZ8863/KSZ8873/KSZ8463 are in the same family, except KSZ8463 has PTP function and uses a special access scheme. They should use the same tagging format. KSZ8795/KSZ8895 can be put in the same family. They should use the same tagging format. KSZ9897/KSZ9567/.../KSZ9477 is in the KSZ9897 family. KSZ9893/KSZ9563/KSZ8563 is in the KSZ9893 family. They use about the same registers as KSZ9897 but has its own tagging format, just because they use 3 ports instead of 7. LAN9370/.../LAN9374 is in the LAN937X family. They use about the same registers as KSZ9897 but has additional functions.
The previous series ([1]) replaced the unique dsa_swicth_ops struct used by all the KSZ families with one dsa_switch_ops struct for each family. These dsa_switch_ops structs still rely on common functions that redirect the calls to ksz_dev_ops operations which are custom to each switch family. Many of hese ksz_dev_ops callbacks have a direct equivalent in the struct dsa_switch_ops. This series directly connects the implementations of these ksz_dev_ops operations to the relevant dsa_switch_ops attribute to get rid of one unnecessary level of indirection. On top of this on-going rework I added PTP and periodic output support for the KSZ8463 (which was my first goal). There are more than 60 patches for all this so this series will be followed by several others and if you want to see the full picture we can check my github ([3]). I haven't finished yet to group all the patches into meaningful series but here is more or less what I plan to do next: - A series will split again some operations to get rid of the if (is_kszXYZ) branches. - Maybe another series will be needed to completely move out of ksz_common.c everything that isn't truly common to all the switches - A series will add PTP support for the KSZ8463 - A final series will add periodic output support for the KSZ8463 FYI, I only have a KSZ8463 so, unfortunately, I can't test other switches. [1]: https://lore.kernel.org/r/20260505-clean-ksz-driver-v1-0- 05d70fa42461@bootlin.com [2]: https://lore.kernel.org/r/20260304-ksz8463-ptp-v6-0- 3f4c47954c71@bootlin.com) [3]: https://github.com/bastien-curutchet/linux/tree/ksz_rework Signed-off-by: Bastien Curutchet (Schneider Electric) [off-list ref] --- Changes in v3: - PATCH 1: Update kdoc of ksz_wol_pre_shutdown() - Link to v2: https://lore.kernel.org/r/20260515-clean-ksz-2nd-series-v2-0- 35a968a739f6@bootlin.com Changes in v2: - Remove patches 1 to 7 since they were applied on net-next - PATCH 6 (previously 13): Create a LAN937x-specific port_setup() instead of using the KSZ9477 one - Link to v1: https://lore.kernel.org/r/20260512-clean-ksz-2nd-series-v1-0- c00f6ce037fa@bootlin.com --- Bastien Curutchet (Schneider Electric) (3): net: dsa: microchip: bypass dev_ops for port_setup() net: dsa: microchip: call DSA's phy_{read/write} to do mdio {read/write} net: dsa: microchip: bypass dev_ops for phy_read()/phy_write() Vladimir Oltean (5): net: dsa: microchip: don't reset on shutdown or driver removal net: dsa: microchip: bypass dev_ops->setup() and teardown() for lan937x net: dsa: microchip: bypass dev_ops->setup() and teardown() for ksz9477 net: dsa: microchip: bypass dev_ops->setup() and teardown() for ksz8 net: dsa: microchip: remove dev_ops->setup() and teardown() drivers/net/dsa/microchip/ksz8.c | 235 +++++++++++++++++++++++------ drivers/net/dsa/microchip/ksz9477.c | 184 ++++++++++++++++++++--- drivers/net/dsa/microchip/ksz_common.c | 247 +++---------------------------- drivers/net/dsa/microchip/ksz_common.h | 22 +-- drivers/net/dsa/microchip/lan937x_main.c | 169 +++++++++++++++++---- 5 files changed, 521 insertions(+), 336 deletions(-) --- base-commit: 822d4a8e390a08ccfaf2abb347ae670b230b196f change-id: 20260511-clean-ksz-2nd-series-3b755ec99cf0 Best regards, -- Bastien Curutchet (Schneider Electric) [off-list ref]