Commit 8470f18e authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab Committed by David S. Miller

docs: networking: device drivers: convert ti/cpsw_switchdev.txt to ReST

- add SPDX header;
- adjust titles and chapters, adding proper markups;
- use :field: markup;
- mark code blocks and literals as such;
- adjust identation, whitespaces and blank lines where needed;
- add to networking/index.rst.
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d6a99873
...@@ -47,6 +47,7 @@ Contents: ...@@ -47,6 +47,7 @@ Contents:
qualcomm/rmnet qualcomm/rmnet
sb1000 sb1000
smsc/smc9 smsc/smc9
ti/cpsw_switchdev
.. only:: subproject and html .. only:: subproject and html
......
* Texas Instruments CPSW switchdev based ethernet driver 2.0 .. SPDX-License-Identifier: GPL-2.0
======================================================
Texas Instruments CPSW switchdev based ethernet driver
======================================================
:Version: 2.0
Port renaming
=============
- Port renaming
On older udev versions renaming of ethX to swXpY will not be automatically On older udev versions renaming of ethX to swXpY will not be automatically
supported supported
In order to rename via udev:
ip -d link show dev sw0p1 | grep switchid
SUBSYSTEM=="net", ACTION=="add", ATTR{phys_switch_id}==<switchid>, \ In order to rename via udev::
ATTR{phys_port_name}!="", NAME="sw0$attr{phys_port_name}"
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}"
Dual mac mode
=============
====================
# Dual mac mode
====================
- The new (cpsw_new.c) driver is operating in dual-emac mode by default, thus - The new (cpsw_new.c) driver is operating in dual-emac mode by default, thus
working as 2 individual network interfaces. Main differences from legacy CPSW working as 2 individual network interfaces. Main differences from legacy CPSW
driver are: driver are:
- optimized promiscuous mode: The P0_UNI_FLOOD (both ports) is enabled in - optimized promiscuous mode: The P0_UNI_FLOOD (both ports) is enabled in
addition to ALLMULTI (current port) instead of ALE_BYPASS. addition to ALLMULTI (current port) instead of ALE_BYPASS.
So, Ports in promiscuous mode will keep possibility of mcast and vlan filtering, So, Ports in promiscuous mode will keep possibility of mcast and vlan
which is provides significant benefits when ports are joined to the same bridge, filtering, which is provides significant benefits when ports are joined
but without enabling "switch" mode, or to different bridges. to the same bridge, but without enabling "switch" mode, or to different
bridges.
- learning disabled on ports as it make not too much sense for - learning disabled on ports as it make not too much sense for
segregated ports - no forwarding in HW. segregated ports - no forwarding in HW.
- enabled basic support for devlink. - enabled basic support for devlink.
::
devlink dev show devlink dev show
platform/48484000.switch platform/48484000.switch
...@@ -38,22 +52,25 @@ but without enabling "switch" mode, or to different bridges. ...@@ -38,22 +52,25 @@ but without enabling "switch" mode, or to different bridges.
cmode runtime value false cmode runtime value false
Devlink configuration parameters Devlink configuration parameters
==================== ================================
See Documentation/networking/devlink/ti-cpsw-switch.rst See Documentation/networking/devlink/ti-cpsw-switch.rst
==================== Bridging in dual mac mode
# Bridging in dual mac mode =========================
====================
The dual_mac mode requires two vids to be reserved for internal purposes, The dual_mac mode requires two vids to be reserved for internal purposes,
which, by default, equal CPSW Port numbers. As result, bridge has to be which, by default, equal CPSW Port numbers. As result, bridge has to be
configured in vlan unaware mode or default_pvid has to be adjusted. configured in vlan unaware mode or default_pvid has to be adjusted::
ip link add name br0 type bridge ip link add name br0 type bridge
ip link set dev br0 type bridge vlan_filtering 0 ip link set dev br0 type bridge vlan_filtering 0
echo 0 > /sys/class/net/br0/bridge/default_pvid echo 0 > /sys/class/net/br0/bridge/default_pvid
ip link set dev sw0p1 master br0 ip link set dev sw0p1 master br0
ip link set dev sw0p2 master br0 ip link set dev sw0p2 master br0
- or -
or::
ip link add name br0 type bridge ip link add name br0 type bridge
ip link set dev br0 type bridge vlan_filtering 0 ip link set dev br0 type bridge vlan_filtering 0
echo 100 > /sys/class/net/br0/bridge/default_pvid echo 100 > /sys/class/net/br0/bridge/default_pvid
...@@ -61,11 +78,12 @@ configured in vlan unaware mode or default_pvid has to be adjusted. ...@@ -61,11 +78,12 @@ configured in vlan unaware mode or default_pvid has to be adjusted.
ip link set dev sw0p1 master br0 ip link set dev sw0p1 master br0
ip link set dev sw0p2 master br0 ip link set dev sw0p2 master br0
==================== Enabling "switch"
# Enabling "switch" =================
====================
The Switch mode can be enabled by configuring devlink driver parameter The Switch mode can be enabled by configuring devlink driver parameter
"switch_mode" to 1/true: "switch_mode" to 1/true::
devlink dev param set platform/48484000.switch \ devlink dev param set platform/48484000.switch \
name switch_mode value 1 cmode runtime name switch_mode value 1 cmode runtime
...@@ -79,9 +97,11 @@ marking packets with offload_fwd_mark flag unless "ale_bypass=0" ...@@ -79,9 +97,11 @@ marking packets with offload_fwd_mark flag unless "ale_bypass=0"
All configuration is implemented via switchdev API. All configuration is implemented via switchdev API.
==================== Bridge setup
# Bridge setup ============
====================
::
devlink dev param set platform/48484000.switch \ devlink dev param set platform/48484000.switch \
name switch_mode value 1 cmode runtime name switch_mode value 1 cmode runtime
...@@ -91,56 +111,65 @@ All configuration is implemented via switchdev API. ...@@ -91,56 +111,65 @@ All configuration is implemented via switchdev API.
ip link set dev sw0p2 up ip link set dev sw0p2 up
ip link set dev sw0p1 master br0 ip link set dev sw0p1 master br0
ip link set dev sw0p2 master br0 ip link set dev sw0p2 master br0
[*] bridge vlan add dev br0 vid 1 pvid untagged self [*] bridge vlan add dev br0 vid 1 pvid untagged self
[*] if vlan_filtering=1. where default_pvid=1 [*] 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 On/off STP
==========
Note. Steps [*] are mandatory. ::
==================== ip link set dev BRDEV type bridge stp_state 1/0
# VLAN configuration
==================== VLAN configuration
bridge vlan add dev br0 vid 1 pvid untagged self <---- add cpu port to VLAN 1 ==================
::
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. Note. This step is mandatory for bridge/default_pvid.
================= Add extra VLANs
# 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: 1. untagged::
bridge vlan add dev sw0p1 vid 100 master
bridge vlan add dev sw0p2 vid 100 master bridge vlan add dev sw0p1 vid 100 pvid untagged master
bridge vlan add dev br0 vid 100 pvid tagged self <---- Add cpu port to VLAN100 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
==== ----
FDBs are automatically added on the appropriate switch port upon detection FDBs are automatically added on the appropriate switch port upon detection
Manually adding FDBs: 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 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
==== ----
MDBs are automatically added on the appropriate switch port upon detection MDBs are automatically added on the appropriate switch port upon detection
Manually adding MDBs: 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 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 Multicast flooding
================== ==================
CPU port mcast_flooding is always on CPU port mcast_flooding is always on
...@@ -148,9 +177,11 @@ CPU port mcast_flooding is always on ...@@ -148,9 +177,11 @@ CPU port mcast_flooding is always on
Turning flooding on/off on swithch ports: Turning flooding on/off on swithch ports:
bridge link set dev sw0p1 mcast_flood on/off bridge link set dev sw0p1 mcast_flood on/off
==================
Access and Trunk port Access and Trunk port
================== =====================
::
bridge vlan add dev sw0p1 vid 100 pvid untagged master bridge vlan add dev sw0p1 vid 100 pvid untagged master
bridge vlan add dev sw0p2 vid 100 master bridge vlan add dev sw0p2 vid 100 master
...@@ -158,52 +189,54 @@ Access and Trunk port ...@@ -158,52 +189,54 @@ Access and Trunk port
bridge vlan add dev br0 vid 100 self bridge vlan add dev br0 vid 100 self
ip link add link br0 name br0.100 type vlan id 100 ip link add link br0 name br0.100 type vlan id 100
Note. Setting PVID on Bridge device itself working only for Note. Setting PVID on Bridge device itself working only for
default VLAN (default_pvid). default VLAN (default_pvid).
NFS
===
=====================
NFS
=====================
The only way for NFS to work is by chrooting to a minimal environment when The only way for NFS to work is by chrooting to a minimal environment when
switch configuration that will affect connectivity is needed. switch configuration that will affect connectivity is needed.
Assuming you are booting NFS with eth1 interface(the script is hacky and Assuming you are booting NFS with eth1 interface(the script is hacky and
it's just there to prove NFS is doable). it's just there to prove NFS is doable).
setup.sh: setup.sh::
#!/bin/sh
mkdir proc #!/bin/sh
mount -t proc none /proc mkdir proc
ifconfig br0 > /dev/null mount -t proc none /proc
if [ $? -ne 0 ]; then ifconfig br0 > /dev/null
echo "Setting up bridge" if [ $? -ne 0 ]; then
ip link add name br0 type bridge echo "Setting up bridge"
ip link set dev br0 type bridge ageing_time 1000 ip link add name br0 type bridge
ip link set dev br0 type bridge vlan_filtering 1 ip link set dev br0 type bridge ageing_time 1000
ip link set dev br0 type bridge vlan_filtering 1
ip link set eth1 down
ip link set eth1 name sw0p1 ip link set eth1 down
ip link set dev sw0p1 up ip link set eth1 name sw0p1
ip link set dev sw0p2 up ip link set dev sw0p1 up
ip link set dev sw0p2 master br0 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 ip link set dev sw0p1 master br0
ifconfig sw0p1 0.0.0.0 bridge vlan add dev br0 vid 1 pvid untagged self
udhchc -i br0 ifconfig sw0p1 0.0.0.0
fi udhchc -i br0
umount /proc fi
umount /proc
run_nfs.sh:
#!/bin/sh run_nfs.sh:::
mkdir /tmp/root/bin -p
mkdir /tmp/root/lib -p #!/bin/sh
mkdir /tmp/root/bin -p
cp -r /lib/ /tmp/root/ mkdir /tmp/root/lib -p
cp -r /bin/ /tmp/root/
cp /sbin/ip /tmp/root/bin cp -r /lib/ /tmp/root/
cp /sbin/bridge /tmp/root/bin cp -r /bin/ /tmp/root/
cp /sbin/ifconfig /tmp/root/bin cp /sbin/ip /tmp/root/bin
cp /sbin/udhcpc /tmp/root/bin cp /sbin/bridge /tmp/root/bin
cp /path/to/setup.sh /tmp/root/bin cp /sbin/ifconfig /tmp/root/bin
chroot /tmp/root/ busybox sh /bin/setup.sh cp /sbin/udhcpc /tmp/root/bin
cp /path/to/setup.sh /tmp/root/bin
run ./run_nfs.sh chroot /tmp/root/ busybox sh /bin/setup.sh
run ./run_nfs.sh
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment