Commit f79bebad authored by David S. Miller's avatar David S. Miller
Browse files

Merge branch 'am65-cpsw-nuss-switchdev-driver'

Vignesh Raghavendra says:

====================
net: ti: am65-cpsw-nuss: Add switchdev driver

This series adds switchdev support for AM65 CPSW NUSS driver to support
multi port CPSW present on J721e and AM64 SoCs.
It adds devlink hook to switch b/w switch mode and multi mac mode.

v2:
Rebased on latest net-next
Update patch 1/4 with rationale for using devlink
====================
parents b4e18b29 e276cfb9
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ Contents:
   stmicro/stmmac
   ti/cpsw
   ti/cpsw_switchdev
   ti/am65_nuss_cpsw_switchdev
   ti/tlan
   toshiba/spider_net

+143 −0
Original line number Diff line number Diff line
.. SPDX-License-Identifier: GPL-2.0

===================================================================
Texas Instruments K3 AM65 CPSW NUSS switchdev based ethernet driver
===================================================================

:Version: 1.0

Port renaming
=============

In order to rename via udev::

    ip -d link show dev sw0p1 | grep switchid

    SUBSYSTEM=="net", ACTION=="add", ATTR{phys_switch_id}==<switchid>, \
	    ATTR{phys_port_name}!="", NAME="sw0$attr{phys_port_name}"


Multi mac mode
==============

- The driver is operating in multi-mac mode by default, thus
  working as N individual network interfaces.

Devlink configuration parameters
================================

See Documentation/networking/devlink/am65-nuss-cpsw-switch.rst

Enabling "switch"
=================

The Switch mode can be enabled by configuring devlink driver parameter
"switch_mode" to 1/true::

        devlink dev param set platform/c000000.ethernet \
        name switch_mode value true cmode runtime

This can be done regardless of the state of Port's netdev devices - UP/DOWN, but
Port's netdev devices have to be in UP before joining to the bridge to avoid
overwriting of bridge configuration as CPSW switch driver completely reloads its
configuration when first port changes its state to UP.

When the both interfaces joined the bridge - CPSW switch driver will enable
marking packets with offload_fwd_mark flag.

All configuration is implemented via switchdev API.

Bridge setup
============

::

        devlink dev param set platform/c000000.ethernet \
        name switch_mode value true cmode runtime

	ip link add name br0 type bridge
	ip link set dev br0 type bridge ageing_time 1000
	ip link set dev sw0p1 up
	ip link set dev sw0p2 up
	ip link set dev sw0p1 master br0
	ip link set dev sw0p2 master br0

	[*] bridge vlan add dev br0 vid 1 pvid untagged self

	[*] if vlan_filtering=1. where default_pvid=1

	Note. Steps [*] are mandatory.


On/off STP
==========

::

	ip link set dev BRDEV type bridge stp_state 1/0

VLAN configuration
==================

::

  bridge vlan add dev br0 vid 1 pvid untagged self <---- add cpu port to VLAN 1

Note. This step is mandatory for bridge/default_pvid.

Add extra VLANs
===============

 1. untagged::

	bridge vlan add dev sw0p1 vid 100 pvid untagged master
	bridge vlan add dev sw0p2 vid 100 pvid untagged master
	bridge vlan add dev br0 vid 100 pvid untagged self <---- Add cpu port to VLAN100

 2. tagged::

	bridge vlan add dev sw0p1 vid 100 master
	bridge vlan add dev sw0p2 vid 100 master
	bridge vlan add dev br0 vid 100 pvid tagged self <---- Add cpu port to VLAN100

FDBs
----

FDBs are automatically added on the appropriate switch port upon detection

Manually adding FDBs::

    bridge fdb add aa:bb:cc:dd:ee:ff dev sw0p1 master vlan 100
    bridge fdb add aa:bb:cc:dd:ee:fe dev sw0p2 master <---- Add on all VLANs

MDBs
----

MDBs are automatically added on the appropriate switch port upon detection

Manually adding MDBs::

  bridge mdb add dev br0 port sw0p1 grp 239.1.1.1 permanent vid 100
  bridge mdb add dev br0 port sw0p1 grp 239.1.1.1 permanent <---- Add on all VLANs

Multicast flooding
==================
CPU port mcast_flooding is always on

Turning flooding on/off on swithch ports:
bridge link set dev sw0p1 mcast_flood on/off

Access and Trunk port
=====================

::

 bridge vlan add dev sw0p1 vid 100 pvid untagged master
 bridge vlan add dev sw0p2 vid 100 master


 bridge vlan add dev br0 vid 100 self
 ip link add link br0 name br0.100 type vlan id 100

Note. Setting PVID on Bridge device itself works only for
default VLAN (default_pvid).
+26 −0
Original line number Diff line number Diff line
.. SPDX-License-Identifier: GPL-2.0

==============================
am65-cpsw-nuss devlink support
==============================

This document describes the devlink features implemented by the ``am65-cpsw-nuss``
device driver.

Parameters
==========

The ``am65-cpsw-nuss`` driver implements the following driver-specific
parameters.

.. list-table:: Driver-specific parameters implemented
   :widths: 5 5 5 85

   * - Name
     - Type
     - Mode
     - Description
   * - ``switch_mode``
     - Boolean
     - runtime
     - Enable switch mode
+1 −0
Original line number Diff line number Diff line
@@ -45,3 +45,4 @@ parameters, info versions, and other features it supports.
   sja1105
   qed
   ti-cpsw-switch
   am65-nuss-cpsw-switch
+10 −0
Original line number Diff line number Diff line
@@ -92,6 +92,7 @@ config TI_CPTS
config TI_K3_AM65_CPSW_NUSS
	tristate "TI K3 AM654x/J721E CPSW Ethernet driver"
	depends on ARCH_K3 && OF && TI_K3_UDMA_GLUE_LAYER
	select NET_DEVLINK
	select TI_DAVINCI_MDIO
	imply PHY_TI_GMII_SEL
	depends on TI_K3_AM65_CPTS || !TI_K3_AM65_CPTS
@@ -105,6 +106,15 @@ config TI_K3_AM65_CPSW_NUSS
	  To compile this driver as a module, choose M here: the module
	  will be called ti-am65-cpsw-nuss.

config TI_K3_AM65_CPSW_SWITCHDEV
	bool "TI K3 AM654x/J721E CPSW Switch mode support"
	depends on TI_K3_AM65_CPSW_NUSS
	depends on NET_SWITCHDEV
	help
	 This enables switchdev support for TI K3 CPSWxG Ethernet
	 Switch. Enable this driver to support hardware switch support for AM65
	 CPSW NUSS driver.

config TI_K3_AM65_CPTS
	tristate "TI K3 AM65x CPTS"
	depends on ARCH_K3 && OF
Loading