u16 vid_begin, u16 vid_end, bool init)
 {
        struct net_device *dev = mlxsw_sp_port->dev;
-       u16 vid, vid_e;
+       u16 vid, vid_e, pvid;
        int err;
 
        /* In case this is invoked with BRIDGE_FLAGS_SELF and port is
                err = mlxsw_sp_port_vlan_set(mlxsw_sp_port, vid, vid_e, false,
                                             false);
                if (err) {
-                       netdev_err(mlxsw_sp_port->dev, "Unable to del VIDs %d-%d\n",
-                                  vid, vid_e);
+                       netdev_err(dev, "Unable to del VIDs %d-%d\n", vid,
+                                  vid_e);
                        return err;
                }
        }
 
-       if ((mlxsw_sp_port->pvid >= vid_begin) &&
-           (mlxsw_sp_port->pvid <= vid_end)) {
+       pvid = mlxsw_sp_port->pvid;
+       if (pvid >= vid_begin && pvid <= vid_end && pvid != 1) {
                /* Default VLAN is always 1 */
-               mlxsw_sp_port->pvid = 1;
-               err = mlxsw_sp_port_pvid_set(mlxsw_sp_port,
-                                            mlxsw_sp_port->pvid);
+               err = mlxsw_sp_port_pvid_set(mlxsw_sp_port, 1);
                if (err) {
-                       netdev_err(mlxsw_sp_port->dev, "Unable to del PVID %d\n",
-                                  vid);
+                       netdev_err(dev, "Unable to del PVID %d\n", pvid);
                        return err;
                }
+               mlxsw_sp_port->pvid = 1;
        }
 
        if (init)