RE: [PATCH net-next v3 0/8] net: dsa: microchip: Remove unnecessary ksz_dev_ops callbacks

From: Tristram.Ha

Date: Fri May 22 2026 - 20:03:33 EST


> 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@xxxxxxxxxxx
> [2]: https://lore.kernel.org/r/20260304-ksz8463-ptp-v6-0-
> 3f4c47954c71@xxxxxxxxxxx)
> [3]: https://github.com/bastien-curutchet/linux/tree/ksz_rework
>
> Signed-off-by: Bastien Curutchet (Schneider Electric)
> <bastien.curutchet@xxxxxxxxxxx>
> ---
> 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@xxxxxxxxxxx
>
> 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@xxxxxxxxxxx
>
> ---
> 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) <bastien.curutchet@xxxxxxxxxxx>