On 3/23/19 8:23 PM, Vladimir Oltean wrote: > This patchset adds a DSA driver for the SPI-managed NXP SJA1105 driver. > Due to the hardware's unfriendliness, most of its state needs to be > shadowed in kernel memory by the driver. To support this and keep a > decent amount of cleanliness in the code, a new generic API for > converting between CPU-accessible ("unpacked") structures and > hardware-accessible ("packed") structures is proposed and used. > > Then several small modifications are done to the DSA core, like changing > the order of two calls during initialization, or permitting driver > access to the dp->vlan_filtering property. > > These small modifications are done for the greater goal of adding > support for 802.1Q pseudo-switch tagging. The limitations of this type > of tagging are discussed in the commit that adds it, and in the code > comments. > > The SJA1105 driver then proceeds to extend this 8021q switch tagging > protocol while adding its own (tag_sja1105). This is done because > SJA1105 needs SPI intervention during transmission of link-local > traffic, which cannot be done from the xmit handler but requires a > deferred worker thread. > > The driver is GPL-2.0 licensed. The source code files which are licensed > as BSD-3-Clause are hardware support files and derivative of the > userspace NXP sja1105-tool program, which is BSD-3-Clause licensed. > > TODO items: > * Add full support for the P/Q/R/S series. The patches were mostly > tested on a first-generation T device. > * Add timestamping support and PTP clock manipulation. > * Figure out what the current state of tc-taprio hw offload is, and > attempt to configure the switch's time-aware scheduler using that.
Overall this is a very clean and impressive piece of work, especially given the constraints you have to work with, I will follow-up with comments in individual patches thanks Vladimir! > > Vladimir Oltean (13): > lib: Add support for generic packing operations > net: dsa: Store vlan_filtering as a property of dsa_port > net: dsa: Create a more convenient function for installing port VLANs > net: dsa: Call driver's setup callback after setting up its switchdev > notifier > net: dsa: Optional VLAN-based port separation for switches without > tagging > net: dsa: Introduce driver for NXP SJA1105 5-port L2 switch > net: dsa: sja1105: Add support for FDB and MDB management > net: dsa: sja1105: Add support for VLAN operations > net: dsa: sja1105: Add support for ethtool port counters > net: dsa: sja1105: Add support for traffic through standalone ports > net: dsa: sja1105: Add support for Spanning Tree Protocol > Documentation: networking: dsa: Add details about NXP SJA1105 driver > dt-bindings: net: dsa: Add documentation for NXP SJA1105 driver > > .../devicetree/bindings/net/dsa/sja1105.txt | 123 ++ > Documentation/networking/dsa/sja1105.txt | 83 + > Documentation/packing.txt | 150 ++ > MAINTAINERS | 14 + > drivers/net/dsa/Kconfig | 2 + > drivers/net/dsa/Makefile | 1 + > drivers/net/dsa/sja1105/Kconfig | 17 + > drivers/net/dsa/sja1105/Makefile | 10 + > drivers/net/dsa/sja1105/sja1105.h | 148 ++ > drivers/net/dsa/sja1105/sja1105_clocking.c | 677 ++++++ > .../net/dsa/sja1105/sja1105_dynamic_config.c | 607 ++++++ > .../net/dsa/sja1105/sja1105_dynamic_config.h | 40 + > drivers/net/dsa/sja1105/sja1105_ethtool.c | 420 ++++ > drivers/net/dsa/sja1105/sja1105_main.c | 1580 ++++++++++++++ > drivers/net/dsa/sja1105/sja1105_spi.c | 667 ++++++ > .../net/dsa/sja1105/sja1105_static_config.c | 1810 +++++++++++++++++ > .../net/dsa/sja1105/sja1105_static_config.h | 500 +++++ > include/linux/dsa/sja1105.h | 52 + > include/linux/packing.h | 49 + > include/net/dsa.h | 6 + > lib/Makefile | 2 +- > lib/packing.c | 211 ++ > net/dsa/Kconfig | 12 + > net/dsa/Makefile | 2 + > net/dsa/dsa.c | 6 + > net/dsa/dsa2.c | 8 +- > net/dsa/dsa_priv.h | 15 + > net/dsa/port.c | 36 +- > net/dsa/slave.c | 16 +- > net/dsa/tag_8021q.c | 185 ++ > net/dsa/tag_sja1105.c | 142 ++ > 31 files changed, 7568 insertions(+), 23 deletions(-) > create mode 100644 Documentation/devicetree/bindings/net/dsa/sja1105.txt > create mode 100644 Documentation/networking/dsa/sja1105.txt > create mode 100644 Documentation/packing.txt > create mode 100644 drivers/net/dsa/sja1105/Kconfig > create mode 100644 drivers/net/dsa/sja1105/Makefile > create mode 100644 drivers/net/dsa/sja1105/sja1105.h > create mode 100644 drivers/net/dsa/sja1105/sja1105_clocking.c > create mode 100644 drivers/net/dsa/sja1105/sja1105_dynamic_config.c > create mode 100644 drivers/net/dsa/sja1105/sja1105_dynamic_config.h > create mode 100644 drivers/net/dsa/sja1105/sja1105_ethtool.c > create mode 100644 drivers/net/dsa/sja1105/sja1105_main.c > create mode 100644 drivers/net/dsa/sja1105/sja1105_spi.c > create mode 100644 drivers/net/dsa/sja1105/sja1105_static_config.c > create mode 100644 drivers/net/dsa/sja1105/sja1105_static_config.h > create mode 100644 include/linux/dsa/sja1105.h > create mode 100644 include/linux/packing.h > create mode 100644 lib/packing.c > create mode 100644 net/dsa/tag_8021q.c > create mode 100644 net/dsa/tag_sja1105.c > -- Florian