mbox series

[v4,net-next,0/9] Cleanup in brport flags switchdev offload for DSA

Message ID 20210212010531.2722925-1-olteanv@gmail.com (mailing list archive)
Headers show
Series Cleanup in brport flags switchdev offload for DSA | expand

Message

Vladimir Oltean Feb. 12, 2021, 1:05 a.m. UTC
From: Vladimir Oltean <vladimir.oltean@nxp.com>

The initial goal of this series was to have better support for
standalone ports mode on the DSA drivers like ocelot/felix and sja1105.
This turned out to require some API adjustments in both directions:
to the information presented to and by the switchdev notifier, and to
the API presented to the switch drivers by the DSA layer.

Vladimir Oltean (9):
  net: switchdev: propagate extack to port attributes
  net: bridge: offload all port flags at once in br_setport
  net: bridge: don't print in br_switchdev_set_port_flag
  net: dsa: configure better brport flags when ports leave the bridge
  net: switchdev: pass flags and mask to both {PRE_,}BRIDGE_FLAGS
    attributes
  net: dsa: act as ass passthrough for bridge port flags
  net: mscc: ocelot: use separate flooding PGID for broadcast
  net: mscc: ocelot: offload bridge port flags to device
  net: dsa: sja1105: offload bridge port flags to device

 drivers/net/dsa/b53/b53_common.c              |  91 ++++---
 drivers/net/dsa/b53/b53_priv.h                |   2 -
 drivers/net/dsa/mv88e6xxx/chip.c              | 163 ++++++++++---
 drivers/net/dsa/mv88e6xxx/chip.h              |   6 +-
 drivers/net/dsa/mv88e6xxx/port.c              |  52 ++--
 drivers/net/dsa/mv88e6xxx/port.h              |  19 +-
 drivers/net/dsa/ocelot/felix.c                |  22 ++
 drivers/net/dsa/sja1105/sja1105.h             |   2 +
 drivers/net/dsa/sja1105/sja1105_main.c        | 222 +++++++++++++++++-
 drivers/net/dsa/sja1105/sja1105_spi.c         |   6 +
 .../marvell/prestera/prestera_switchdev.c     |  26 +-
 .../mellanox/mlxsw/spectrum_switchdev.c       |  53 +++--
 drivers/net/ethernet/mscc/ocelot.c            | 100 +++++++-
 drivers/net/ethernet/mscc/ocelot_net.c        |  52 +++-
 drivers/net/ethernet/rocker/rocker_main.c     |  10 +-
 drivers/net/ethernet/ti/cpsw_switchdev.c      |  27 ++-
 drivers/staging/fsl-dpaa2/ethsw/ethsw.c       |  34 ++-
 include/net/dsa.h                             |  10 +-
 include/net/switchdev.h                       |  13 +-
 include/soc/mscc/ocelot.h                     |  20 +-
 net/bridge/br_netlink.c                       | 116 +++------
 net/bridge/br_private.h                       |   6 +-
 net/bridge/br_switchdev.c                     |  23 +-
 net/bridge/br_sysfs_if.c                      |   7 +-
 net/dsa/dsa_priv.h                            |  11 +-
 net/dsa/port.c                                |  76 ++++--
 net/dsa/slave.c                               |  10 +-
 net/switchdev/switchdev.c                     |  11 +-
 28 files changed, 870 insertions(+), 320 deletions(-)

Comments

Grygorii Strashko Feb. 12, 2021, 2:17 p.m. UTC | #1
On 12/02/2021 03:05, Vladimir Oltean wrote:
> From: Vladimir Oltean <vladimir.oltean@nxp.com>
> 
> The initial goal of this series was to have better support for
> standalone ports mode on the DSA drivers like ocelot/felix and sja1105.
> This turned out to require some API adjustments in both directions:
> to the information presented to and by the switchdev notifier, and to
> the API presented to the switch drivers by the DSA layer.
> 
> Vladimir Oltean (9):
>    net: switchdev: propagate extack to port attributes
>    net: bridge: offload all port flags at once in br_setport
>    net: bridge: don't print in br_switchdev_set_port_flag
>    net: dsa: configure better brport flags when ports leave the bridge
>    net: switchdev: pass flags and mask to both {PRE_,}BRIDGE_FLAGS
>      attributes
>    net: dsa: act as ass passthrough for bridge port flags
>    net: mscc: ocelot: use separate flooding PGID for broadcast
>    net: mscc: ocelot: offload bridge port flags to device
>    net: dsa: sja1105: offload bridge port flags to device
> 
>   drivers/net/dsa/b53/b53_common.c              |  91 ++++---
>   drivers/net/dsa/b53/b53_priv.h                |   2 -
>   drivers/net/dsa/mv88e6xxx/chip.c              | 163 ++++++++++---
>   drivers/net/dsa/mv88e6xxx/chip.h              |   6 +-
>   drivers/net/dsa/mv88e6xxx/port.c              |  52 ++--
>   drivers/net/dsa/mv88e6xxx/port.h              |  19 +-
>   drivers/net/dsa/ocelot/felix.c                |  22 ++
>   drivers/net/dsa/sja1105/sja1105.h             |   2 +
>   drivers/net/dsa/sja1105/sja1105_main.c        | 222 +++++++++++++++++-
>   drivers/net/dsa/sja1105/sja1105_spi.c         |   6 +
>   .../marvell/prestera/prestera_switchdev.c     |  26 +-
>   .../mellanox/mlxsw/spectrum_switchdev.c       |  53 +++--
>   drivers/net/ethernet/mscc/ocelot.c            | 100 +++++++-
>   drivers/net/ethernet/mscc/ocelot_net.c        |  52 +++-
>   drivers/net/ethernet/rocker/rocker_main.c     |  10 +-
>   drivers/net/ethernet/ti/cpsw_switchdev.c      |  27 ++-
>   drivers/staging/fsl-dpaa2/ethsw/ethsw.c       |  34 ++-
>   include/net/dsa.h                             |  10 +-
>   include/net/switchdev.h                       |  13 +-
>   include/soc/mscc/ocelot.h                     |  20 +-
>   net/bridge/br_netlink.c                       | 116 +++------
>   net/bridge/br_private.h                       |   6 +-
>   net/bridge/br_switchdev.c                     |  23 +-
>   net/bridge/br_sysfs_if.c                      |   7 +-
>   net/dsa/dsa_priv.h                            |  11 +-
>   net/dsa/port.c                                |  76 ++++--
>   net/dsa/slave.c                               |  10 +-
>   net/switchdev/switchdev.c                     |  11 +-
>   28 files changed, 870 insertions(+), 320 deletions(-)
> 

Sorry, but we seems just added more work for you.
https://lore.kernel.org/patchwork/cover/1379380/
Vignesh Raghavendra Feb. 12, 2021, 2:31 p.m. UTC | #2
Hi Vladimir,

On 2/12/21 7:47 PM, Grygorii Strashko wrote:
> 
> 
> On 12/02/2021 03:05, Vladimir Oltean wrote:
>> From: Vladimir Oltean <vladimir.oltean@nxp.com>
[...]
> 
> Sorry, but we seems just added more work for you.
> https://lore.kernel.org/patchwork/cover/1379380/
> 

Could you squash these when you post new version:
Sorry for not noticing earlier.

-- >8 --

From 69f3a1ff1ea0777f5deceefdb0e79ce625e6488a Mon Sep 17 00:00:00 2001
From: Vignesh Raghavendra <vigneshr@ti.com>
Date: Fri, 12 Feb 2021 19:34:46 +0530
Subject: [PATCH 1/2] fixup! net: switchdev: propagate extack to port
 attributes

---
 drivers/net/ethernet/ti/am65-cpsw-switchdev.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/ti/am65-cpsw-switchdev.c b/drivers/net/ethernet/ti/am65-cpsw-switchdev.c
index 1067e7772dbf..314825acf0a0 100644
--- a/drivers/net/ethernet/ti/am65-cpsw-switchdev.c
+++ b/drivers/net/ethernet/ti/am65-cpsw-switchdev.c
@@ -81,7 +81,8 @@ static int am65_cpsw_port_attr_br_flags_pre_set(struct net_device *netdev,
 }
 
 static int am65_cpsw_port_attr_set(struct net_device *ndev,
-				   const struct switchdev_attr *attr)
+				   const struct switchdev_attr *attr,
+				   struct netlink_ext_ack *extack)
 {
 	struct am65_cpsw_port *port = am65_ndev_to_port(ndev);
 	int ret;


-- >8 --

From 7d7fdb79a8b255a1e9fe5d205b0ff1824a16ce56 Mon Sep 17 00:00:00 2001
From: Vignesh Raghavendra <vigneshr@ti.com>
Date: Fri, 12 Feb 2021 19:40:48 +0530
Subject: [PATCH 2/2] fixup! net: switchdev: pass flags and mask to both
 {PRE_,}BRIDGE_FLAGS attributes

---
 drivers/net/ethernet/ti/am65-cpsw-switchdev.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/ti/am65-cpsw-switchdev.c b/drivers/net/ethernet/ti/am65-cpsw-switchdev.c
index 314825acf0a0..03c7a012f5c5 100644
--- a/drivers/net/ethernet/ti/am65-cpsw-switchdev.c
+++ b/drivers/net/ethernet/ti/am65-cpsw-switchdev.c
@@ -55,12 +55,12 @@ static int am65_cpsw_port_stp_state_set(struct am65_cpsw_port *port, u8 state)
 
 static int am65_cpsw_port_attr_br_flags_set(struct am65_cpsw_port *port,
 					    struct net_device *orig_dev,
-					    unsigned long brport_flags)
+					    struct switchdev_brport_flags flags)
 {
 	struct am65_cpsw_common *cpsw = port->common;
 	bool unreg_mcast_add = false;
 
-	if (brport_flags & BR_MCAST_FLOOD)
+	if (flags.mask & BR_MCAST_FLOOD)
 		unreg_mcast_add = true;
 	netdev_dbg(port->ndev, "BR_MCAST_FLOOD: %d port %u\n",
 		   unreg_mcast_add, port->port_id);
@@ -72,9 +72,9 @@ static int am65_cpsw_port_attr_br_flags_set(struct am65_cpsw_port *port,
 }
 
 static int am65_cpsw_port_attr_br_flags_pre_set(struct net_device *netdev,
-						unsigned long flags)
+						struct switchdev_brport_flags flags)
 {
-	if (flags & ~(BR_LEARNING | BR_MCAST_FLOOD))
+	if (flags.mask & ~(BR_LEARNING | BR_MCAST_FLOOD))
 		return -EINVAL;
 
 	return 0;
Vladimir Oltean Feb. 12, 2021, 2:40 p.m. UTC | #3
On Fri, Feb 12, 2021 at 08:01:33PM +0530, Vignesh Raghavendra wrote:
> Hi Vladimir,
> 
> On 2/12/21 7:47 PM, Grygorii Strashko wrote:
> > 
> > 
> > On 12/02/2021 03:05, Vladimir Oltean wrote:
> >> From: Vladimir Oltean <vladimir.oltean@nxp.com>
> [...]
> > 
> > Sorry, but we seems just added more work for you.
> > https://lore.kernel.org/patchwork/cover/1379380/
> > 
> 
> Could you squash these when you post new version:
> Sorry for not noticing earlier.

Hey, thanks for the fixup patch and congrats on the new driver support
for the AM65 NUSS! What's functionally different compared to the other
CPSW instantiations?

Also, do I get it right that you also tested the bridge port flags
passed in the new format and that they still work ok? May I add your
Tested-by tag?
Vignesh Raghavendra Feb. 16, 2021, 11:22 a.m. UTC | #4
Hi,

On 2/12/21 8:10 PM, Vladimir Oltean wrote:
> On Fri, Feb 12, 2021 at 08:01:33PM +0530, Vignesh Raghavendra wrote:
>> Hi Vladimir,
>>
>> On 2/12/21 7:47 PM, Grygorii Strashko wrote:
>>>
>>>
>>> On 12/02/2021 03:05, Vladimir Oltean wrote:
>>>> From: Vladimir Oltean <vladimir.oltean@nxp.com>
>> [...]
>>>
>>> Sorry, but we seems just added more work for you.
>>> https://lore.kernel.org/patchwork/cover/1379380/
>>>
>>
>> Could you squash these when you post new version:
>> Sorry for not noticing earlier.
> 
> Hey, thanks for the fixup patch and congrats on the new driver support
> for the AM65 NUSS! What's functionally different compared to the other
> CPSW instantiations?
> 

CPSW is mostly present on older TI's 32 bit SoCs and can support upto 2
external ports.

AM65 NUSS is next generation multi port switch IP (up to 8 external
ports) present on TI's newer 64 bit platform. It also has different DMA integration and has native HW support to work as both Multi Mac and Switch mode.

> Also, do I get it right that you also tested the bridge port flags
> passed in the new format and that they still work ok? May I add your
> Tested-by tag?
> 

Sorry, I have not done extensive testing but tried couple of cmds. Those worked as expected:

root@evm:~# ip link set eth0 type bridge_slave flood off mcast_flood off learning off                                                  
Error: bridge: bridge flag offload is not supported.

root@evm:~# ip link set eth0 type bridge_slave  mcast_flood off
[ 65.025285] am65-cpsw-nuss 8000000.ethernet eth0: BR_MCAST_FLOOD: 0 port 1

Regards
Vignesh