Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma
[platform/kernel/linux-starfive.git] / drivers / net / ethernet / mellanox / mlx5 / core / ipoib / ipoib.c
index 2585c68..7d7ed02 100644 (file)
@@ -33,6 +33,7 @@
 #include <rdma/ib_verbs.h>
 #include <linux/mlx5/fs.h>
 #include "en.h"
+#include "en/params.h"
 #include "ipoib.h"
 
 #define IB_DEFAULT_Q_KEY   0xb1b
@@ -233,6 +234,7 @@ int mlx5i_create_underlay_qp(struct mlx5e_priv *priv)
        }
 
        qpc = MLX5_ADDR_OF(create_qp_in, in, qpc);
+       MLX5_SET(qpc, qpc, ts_format, mlx5_get_qp_default_ts(priv->mdev));
        MLX5_SET(qpc, qpc, st, MLX5_QP_ST_UD);
        MLX5_SET(qpc, qpc, pm_state, MLX5_QP_PM_MIGRATED);
        MLX5_SET(qpc, qpc, ulp_stateless_offload_mode,
@@ -371,6 +373,7 @@ static void mlx5i_destroy_flow_steering(struct mlx5e_priv *priv)
 static int mlx5i_init_rx(struct mlx5e_priv *priv)
 {
        struct mlx5_core_dev *mdev = priv->mdev;
+       u16 max_nch = priv->max_nch;
        int err;
 
        mlx5e_create_q_counters(priv);
@@ -385,7 +388,7 @@ static int mlx5i_init_rx(struct mlx5e_priv *priv)
        if (err)
                goto err_close_drop_rq;
 
-       err = mlx5e_create_direct_rqts(priv, priv->direct_tir);
+       err = mlx5e_create_direct_rqts(priv, priv->direct_tir, max_nch);
        if (err)
                goto err_destroy_indirect_rqts;
 
@@ -393,7 +396,7 @@ static int mlx5i_init_rx(struct mlx5e_priv *priv)
        if (err)
                goto err_destroy_direct_rqts;
 
-       err = mlx5e_create_direct_tirs(priv, priv->direct_tir);
+       err = mlx5e_create_direct_tirs(priv, priv->direct_tir, max_nch);
        if (err)
                goto err_destroy_indirect_tirs;
 
@@ -404,11 +407,11 @@ static int mlx5i_init_rx(struct mlx5e_priv *priv)
        return 0;
 
 err_destroy_direct_tirs:
-       mlx5e_destroy_direct_tirs(priv, priv->direct_tir);
+       mlx5e_destroy_direct_tirs(priv, priv->direct_tir, max_nch);
 err_destroy_indirect_tirs:
        mlx5e_destroy_indirect_tirs(priv);
 err_destroy_direct_rqts:
-       mlx5e_destroy_direct_rqts(priv, priv->direct_tir);
+       mlx5e_destroy_direct_rqts(priv, priv->direct_tir, max_nch);
 err_destroy_indirect_rqts:
        mlx5e_destroy_rqt(priv, &priv->indir_rqt);
 err_close_drop_rq:
@@ -420,10 +423,12 @@ err_destroy_q_counters:
 
 static void mlx5i_cleanup_rx(struct mlx5e_priv *priv)
 {
+       u16 max_nch = priv->max_nch;
+
        mlx5i_destroy_flow_steering(priv);
-       mlx5e_destroy_direct_tirs(priv, priv->direct_tir);
+       mlx5e_destroy_direct_tirs(priv, priv->direct_tir, max_nch);
        mlx5e_destroy_indirect_tirs(priv);
-       mlx5e_destroy_direct_rqts(priv, priv->direct_tir);
+       mlx5e_destroy_direct_rqts(priv, priv->direct_tir, max_nch);
        mlx5e_destroy_rqt(priv, &priv->indir_rqt);
        mlx5e_close_drop_rq(&priv->drop_rq);
        mlx5e_destroy_q_counters(priv);
@@ -468,6 +473,7 @@ static const struct mlx5e_profile mlx5i_nic_profile = {
        .rq_groups         = MLX5E_NUM_RQ_GROUPS(REGULAR),
        .stats_grps        = mlx5i_stats_grps,
        .stats_grps_num    = mlx5i_stats_grps_num,
+       .rx_ptp_support    = false,
 };
 
 /* mlx5i netdev NDos */
@@ -475,28 +481,19 @@ static const struct mlx5e_profile mlx5i_nic_profile = {
 static int mlx5i_change_mtu(struct net_device *netdev, int new_mtu)
 {
        struct mlx5e_priv *priv = mlx5i_epriv(netdev);
-       struct mlx5e_channels new_channels = {};
-       struct mlx5e_params *params;
+       struct mlx5e_params new_params;
        int err = 0;
 
        mutex_lock(&priv->state_lock);
 
-       params = &priv->channels.params;
-
-       if (!test_bit(MLX5E_STATE_OPENED, &priv->state)) {
-               params->sw_mtu = new_mtu;
-               netdev->mtu = params->sw_mtu;
-               goto out;
-       }
-
-       new_channels.params = *params;
-       new_channels.params.sw_mtu = new_mtu;
+       new_params = priv->channels.params;
+       new_params.sw_mtu = new_mtu;
 
-       err = mlx5e_safe_switch_channels(priv, &new_channels, NULL, NULL);
+       err = mlx5e_safe_switch_params(priv, &new_params, NULL, NULL, true);
        if (err)
                goto out;
 
-       netdev->mtu = new_channels.params.sw_mtu;
+       netdev->mtu = new_params.sw_mtu;
 
 out:
        mutex_unlock(&priv->state_lock);
@@ -694,6 +691,7 @@ static int mlx5i_check_required_hca_cap(struct mlx5_core_dev *mdev)
 static void mlx5_rdma_netdev_free(struct net_device *netdev)
 {
        struct mlx5e_priv *priv = mlx5i_epriv(netdev);
+       struct mlx5_core_dev *mdev = priv->mdev;
        struct mlx5i_priv *ipriv = priv->ppriv;
        const struct mlx5e_profile *profile = priv->profile;
 
@@ -702,13 +700,13 @@ static void mlx5_rdma_netdev_free(struct net_device *netdev)
 
        if (!ipriv->sub_interface) {
                mlx5i_pkey_qpn_ht_cleanup(netdev);
-               mlx5e_destroy_mdev_resources(priv->mdev);
+               mlx5e_destroy_mdev_resources(mdev);
        }
 }
 
 static bool mlx5_is_sub_interface(struct mlx5_core_dev *mdev)
 {
-       return mdev->mlx5e_res.pdn != 0;
+       return mdev->mlx5e_res.hw_objs.pdn != 0;
 }
 
 static const struct mlx5e_profile *mlx5_get_profile(struct mlx5_core_dev *mdev)