mlx5e_dcbnl_dscp_app(priv, DELETE);
 }
 
-static void mlx5e_trust_update_tx_min_inline_mode(struct mlx5e_priv *priv,
-                                                 struct mlx5e_params *params)
+static void mlx5e_params_calc_trust_tx_min_inline_mode(struct mlx5_core_dev *mdev,
+                                                      struct mlx5e_params *params,
+                                                      u8 trust_state)
 {
-       mlx5_query_min_inline(priv->mdev, ¶ms->tx_min_inline_mode);
-       if (priv->dcbx_dp.trust_state == MLX5_QPTS_TRUST_DSCP &&
+       mlx5_query_min_inline(mdev, ¶ms->tx_min_inline_mode);
+       if (trust_state == MLX5_QPTS_TRUST_DSCP &&
            params->tx_min_inline_mode == MLX5_INLINE_MODE_L2)
                params->tx_min_inline_mode = MLX5_INLINE_MODE_IP;
 }
 
-static void mlx5e_trust_update_sq_inline_mode(struct mlx5e_priv *priv)
+static int mlx5e_update_trust_state_hw(struct mlx5e_priv *priv, void *context)
+{
+       u8 *trust_state = context;
+       int err;
+
+       err = mlx5_set_trust_state(priv->mdev, *trust_state);
+       if (err)
+               return err;
+       priv->dcbx_dp.trust_state = *trust_state;
+
+       return 0;
+}
+
+static int mlx5e_set_trust_state(struct mlx5e_priv *priv, u8 trust_state)
 {
        struct mlx5e_channels new_channels = {};
+       bool reset_channels = true;
+       int err = 0;
 
        mutex_lock(&priv->state_lock);
 
        new_channels.params = priv->channels.params;
-       mlx5e_trust_update_tx_min_inline_mode(priv, &new_channels.params);
+       mlx5e_params_calc_trust_tx_min_inline_mode(priv->mdev, &new_channels.params,
+                                                  trust_state);
 
        if (!test_bit(MLX5E_STATE_OPENED, &priv->state)) {
                priv->channels.params = new_channels.params;
-               goto out;
+               reset_channels = false;
        }
 
        /* Skip if tx_min_inline is the same */
        if (new_channels.params.tx_min_inline_mode ==
            priv->channels.params.tx_min_inline_mode)
-               goto out;
+               reset_channels = false;
 
-       mlx5e_safe_switch_channels(priv, &new_channels, NULL, NULL);
+       if (reset_channels)
+               err = mlx5e_safe_switch_channels(priv, &new_channels,
+                                                mlx5e_update_trust_state_hw,
+                                                &trust_state);
+       else
+               err = mlx5e_update_trust_state_hw(priv, &trust_state);
 
-out:
        mutex_unlock(&priv->state_lock);
-}
-
-static int mlx5e_set_trust_state(struct mlx5e_priv *priv, u8 trust_state)
-{
-       int err;
-
-       err = mlx5_set_trust_state(priv->mdev, trust_state);
-       if (err)
-               return err;
-       priv->dcbx_dp.trust_state = trust_state;
-       mlx5e_trust_update_sq_inline_mode(priv);
 
        return err;
 }
        if (err)
                return err;
 
-       mlx5e_trust_update_tx_min_inline_mode(priv, &priv->channels.params);
+       mlx5e_params_calc_trust_tx_min_inline_mode(priv->mdev, &priv->channels.params,
+                                                  priv->dcbx_dp.trust_state);
 
        err = mlx5_query_dscp2prio(priv->mdev, priv->dcbx_dp.dscp2prio);
        if (err)