Setup the STP state for all VLANs installed on the port. This is also
avoiding the error situation when the DEFAULT_VLAN_ID is not installed
on the port (thus the firmware complains that it cannot setup the
required STP state).

Signed-off-by: Ioana Ciornei <ioana.cior...@nxp.com>
---
 drivers/staging/fsl-dpaa2/ethsw/ethsw.c | 21 +++++++++++++--------
 1 file changed, 13 insertions(+), 8 deletions(-)

diff --git a/drivers/staging/fsl-dpaa2/ethsw/ethsw.c 
b/drivers/staging/fsl-dpaa2/ethsw/ethsw.c
index 530e4105375c..83e6bd4a803b 100644
--- a/drivers/staging/fsl-dpaa2/ethsw/ethsw.c
+++ b/drivers/staging/fsl-dpaa2/ethsw/ethsw.c
@@ -183,21 +183,26 @@ static int ethsw_port_set_flood(struct ethsw_port_priv 
*port_priv, bool enable)
 static int ethsw_port_set_stp_state(struct ethsw_port_priv *port_priv, u8 
state)
 {
        struct dpsw_stp_cfg stp_cfg = {
-               .vlan_id = DEFAULT_VLAN_ID,
                .state = state,
        };
        int err;
+       u16 vid;
 
        if (!netif_running(port_priv->netdev) || state == port_priv->stp_state)
                return 0;       /* Nothing to do */
 
-       err = dpsw_if_set_stp(port_priv->ethsw_data->mc_io, 0,
-                             port_priv->ethsw_data->dpsw_handle,
-                             port_priv->idx, &stp_cfg);
-       if (err) {
-               netdev_err(port_priv->netdev,
-                          "dpsw_if_set_stp err %d\n", err);
-               return err;
+       for (vid = 0; vid <= VLAN_VID_MASK; vid++) {
+               if (port_priv->vlans[vid] & ETHSW_VLAN_MEMBER) {
+                       stp_cfg.vlan_id = vid;
+                       err = dpsw_if_set_stp(port_priv->ethsw_data->mc_io, 0,
+                                             
port_priv->ethsw_data->dpsw_handle,
+                                             port_priv->idx, &stp_cfg);
+                       if (err) {
+                               netdev_err(port_priv->netdev,
+                                          "dpsw_if_set_stp err %d\n", err);
+                               return err;
+                       }
+               }
        }
 
        port_priv->stp_state = state;
-- 
2.25.1

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

Reply via email to