In preparation for getting rid of switchdev_port_attr_get(), have mlxsw
check for the bridge flags being set through switchdev_port_attr_set()
when the SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS attribute identifier is
used.

Signed-off-by: Florian Fainelli <f.faine...@gmail.com>
---
 .../mellanox/mlxsw/spectrum_switchdev.c       | 22 ++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c 
b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
index 1f492b7dbea8..8cdc0fe17a2e 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
@@ -595,10 +595,25 @@ mlxsw_sp_bridge_port_learning_set(struct mlxsw_sp_port 
*mlxsw_sp_port,
        return err;
 }
 
+static int mlxsw_sp_port_attr_br_pre_flags_set(struct mlxsw_sp_port
+                                              *mlxsw_sp_port,
+                                              struct switchdev_trans *trans,
+                                              unsigned long brport_flags)
+{
+       if (switchdev_trans_ph_prepare(trans))
+               return 0;
+
+       if (brport_flags & ~(BR_LEARNING | BR_FLOOD | BR_MCAST_FLOOD))
+               return -EINVAL;
+
+       return 0;
+}
+
 static int mlxsw_sp_port_attr_br_flags_set(struct mlxsw_sp_port *mlxsw_sp_port,
                                           struct switchdev_trans *trans,
                                           struct net_device *orig_dev,
-                                          unsigned long brport_flags)
+                                          unsigned long brport_flags,
+                                          bool pre_set)
 {
        struct mlxsw_sp_bridge_port *bridge_port;
        int err;
@@ -841,6 +856,11 @@ static int mlxsw_sp_port_attr_set(struct net_device *dev,
                                                       attr->orig_dev,
                                                       attr->u.stp_state);
                break;
+       case SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS:
+               err = mlxsw_sp_port_attr_br_pre_flags_set(mlxsw_sp_port,
+                                                         trans,
+                                                         attr->u.brport_flags);
+               break;
        case SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS:
                err = mlxsw_sp_port_attr_br_flags_set(mlxsw_sp_port, trans,
                                                      attr->orig_dev,
-- 
2.17.1

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to