Dear Community, > This patch series adds support for More Than IP's L2 switch driver > embedded in some NXP's SoCs. This one has been tested on imx287, but > is also available in the vf610. > > In the past there has been performed some attempts to upstream this > driver: > > 1. The 4.19-cip based one [1] > 2. DSA based one for 5.12 [2] - i.e. the switch itself was treat as a > DSA switch with NO tag appended. > 3. The extension for FEC driver for 5.12 [3] - the trick here was to > fully reuse FEC when the in-HW switching is disabled. When bridge > offloading is enabled, the driver uses already configured MAC and PHY > to also configure PHY. > > All three approaches were not accepted as eligible for upstreaming. > > The driver from this series has floowing features: > > 1. It is fully separated from fec_main - i.e. can be used > interchangeable with it. To be more specific - one can build them as > modules and if required switch between them when e.g. bridge > offloading is required. > > To be more specific: > - Use FEC_MAIN: When one needs support for two ETH ports with > separate uDMAs used for both and bridging can be realized in SW. > > - Use MTIPL2SW: When it is enough to support two ports with > only uDMA0 attached to switch and bridging shall be offloaded to HW. > > 2. This driver uses MTIP's L2 switch internal VLAN feature to provide > port separation at boot time. Port separation is disabled when > bridging is required. > > 3. Example usage: > Configuration: > ip link set lan0 up; sleep 1; > ip link set lan1 up; sleep 1; > ip link add name br0 type bridge; > ip link set br0 up; sleep 1; > ip link set lan0 master br0; > ip link set lan1 master br0; > bridge link; > ip addr add 192.168.2.17/24 dev br0; > ping -c 5 192.168.2.222 > > Removal: > ip link set br0 down; > ip link delete br0 type bridge; > ip link set dev lan1 down > ip link set dev lan0 down > > 4. Limitations: > - Driver enables and disables switch operation with learning > and ageing. > - Missing is the advanced configuration (e.g. adding entries > to FBD). This is on purpose, as up till now we didn't had consensus > about how the driver shall be added to Linux. > > 5. Clang build: > make LLVM_SUFFIX=-19 LLVM=1 mrproper > cp ./arch/arm/configs/mxs_defconfig .config > make ARCH=arm LLVM_SUFFIX=-19 LLVM=1 W=1 menuconfig > make ARCH=arm LLVM_SUFFIX=-19 LLVM=1 W=1 -j8 > LOADADDR=0x40008000 uImage dtbs > > make LLVM_SUFFIX=-19 LLVM=1 mrproper > make LLVM_SUFFIX=-19 LLVM=1 allmodconfig > make LLVM_SUFFIX=-19 LLVM=1 W=1 > drivers/net/ethernet/freescale/mtipsw/ | tee llvm_build.log make > LLVM_SUFFIX=-19 LLVM=1 W=1 -j8 | tee llvm_build.log > > 6. Kernel compliance checks: > make coccicheck MODE=report J=4 > M=drivers/net/ethernet/freescale/mtipsw/ > ~/work/src/smatch/smatch_scripts/kchecker > drivers/net/ethernet/freescale/mtipsw/ > > 7. GCC > make mrproper > make allmodconfig > make W=1 drivers/net/ethernet/freescale/mtipsw/ > Gentle ping on this driver's patch set ... > Links: > [1] - https://github.com/lmajewski/linux-imx28-l2switch/commits/master > [2] - > https://github.com/lmajewski/linux-imx28-l2switch/tree/imx28-v5.12-L2-upstream-RFC_v1 > [3] - > https://source.denx.de/linux/linux-imx28-l2switch/-/tree/imx28-v5.12-L2-upstream-switchdev-RFC_v1?ref_type=heads > > > Lukasz Majewski (12): > dt-bindings: net: Add MTIP L2 switch description > ARM: dts: nxp: mxs: Adjust the imx28.dtsi L2 switch description > ARM: dts: nxp: mxs: Adjust XEA board's DTS to support L2 switch > net: mtip: The L2 switch driver for imx287 > net: mtip: Add buffers management functions to the L2 switch driver > net: mtip: Add net_device_ops functions to the L2 switch driver > net: mtip: Add mtip_switch_{rx|tx} functions to the L2 switch driver > net: mtip: Extend the L2 switch driver with management operations > net: mtip: Extend the L2 switch driver for imx287 with bridge > operations > ARM: mxs_defconfig: Enable CONFIG_NFS_FSCACHE > ARM: mxs_defconfig: Update mxs_defconfig to 6.16-rc1 > ARM: mxs_defconfig: Enable CONFIG_FEC_MTIP_L2SW to support MTIP L2 > switch > > .../bindings/net/nxp,imx28-mtip-switch.yaml | 150 ++ > MAINTAINERS | 7 + > arch/arm/boot/dts/nxp/mxs/imx28-xea.dts | 56 + > arch/arm/boot/dts/nxp/mxs/imx28.dtsi | 9 +- > arch/arm/configs/mxs_defconfig | 13 +- > drivers/net/ethernet/freescale/Kconfig | 1 + > drivers/net/ethernet/freescale/Makefile | 1 + > drivers/net/ethernet/freescale/mtipsw/Kconfig | 13 + > .../net/ethernet/freescale/mtipsw/Makefile | 4 + > .../net/ethernet/freescale/mtipsw/mtipl2sw.c | 1958 > +++++++++++++++++ .../net/ethernet/freescale/mtipsw/mtipl2sw.h | > 654 ++++++ .../ethernet/freescale/mtipsw/mtipl2sw_br.c | 120 + > .../ethernet/freescale/mtipsw/mtipl2sw_mgnt.c | 443 ++++ > 13 files changed, 3418 insertions(+), 11 deletions(-) > create mode 100644 > Documentation/devicetree/bindings/net/nxp,imx28-mtip-switch.yaml > create mode 100644 drivers/net/ethernet/freescale/mtipsw/Kconfig > create mode 100644 drivers/net/ethernet/freescale/mtipsw/Makefile > create mode 100644 drivers/net/ethernet/freescale/mtipsw/mtipl2sw.c > create mode 100644 drivers/net/ethernet/freescale/mtipsw/mtipl2sw.h > create mode 100644 > drivers/net/ethernet/freescale/mtipsw/mtipl2sw_br.c create mode > 100644 drivers/net/ethernet/freescale/mtipsw/mtipl2sw_mgnt.c > Best regards, Lukasz Majewski -- DENX Software Engineering GmbH, Managing Director: Erika Unter HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de