|
|
@@ -56,6 +56,7 @@ struct mlx5e_sq_param {
|
|
|
u32 sqc[MLX5_ST_SZ_DW(sqc)];
|
|
|
struct mlx5_wq_param wq;
|
|
|
u16 max_inline;
|
|
|
+ u8 min_inline_mode;
|
|
|
bool icosq;
|
|
|
};
|
|
|
|
|
|
@@ -649,6 +650,9 @@ static int mlx5e_create_sq(struct mlx5e_channel *c,
|
|
|
}
|
|
|
sq->bf_buf_size = (1 << MLX5_CAP_GEN(mdev, log_bf_reg_size)) / 2;
|
|
|
sq->max_inline = param->max_inline;
|
|
|
+ sq->min_inline_mode =
|
|
|
+ MLX5_CAP_ETH(mdev, wqe_inline_mode) == MLX5E_INLINE_MODE_VPORT_CONTEXT ?
|
|
|
+ param->min_inline_mode : 0;
|
|
|
|
|
|
err = mlx5e_alloc_sq_db(sq, cpu_to_node(c->cpu));
|
|
|
if (err)
|
|
|
@@ -731,6 +735,7 @@ static int mlx5e_enable_sq(struct mlx5e_sq *sq, struct mlx5e_sq_param *param)
|
|
|
|
|
|
MLX5_SET(sqc, sqc, tis_num_0, param->icosq ? 0 : priv->tisn[sq->tc]);
|
|
|
MLX5_SET(sqc, sqc, cqn, sq->cq.mcq.cqn);
|
|
|
+ MLX5_SET(sqc, sqc, min_wqe_inline_mode, sq->min_inline_mode);
|
|
|
MLX5_SET(sqc, sqc, state, MLX5_SQC_STATE_RST);
|
|
|
MLX5_SET(sqc, sqc, tis_lst_sz, param->icosq ? 0 : 1);
|
|
|
MLX5_SET(sqc, sqc, flush_in_error_en, 1);
|
|
|
@@ -1343,6 +1348,7 @@ static void mlx5e_build_sq_param(struct mlx5e_priv *priv,
|
|
|
MLX5_SET(wq, wq, log_wq_sz, priv->params.log_sq_size);
|
|
|
|
|
|
param->max_inline = priv->params.tx_max_inline;
|
|
|
+ param->min_inline_mode = priv->params.tx_min_inline_mode;
|
|
|
}
|
|
|
|
|
|
static void mlx5e_build_common_cq_param(struct mlx5e_priv *priv,
|
|
|
@@ -2978,6 +2984,23 @@ void mlx5e_set_rx_cq_mode_params(struct mlx5e_params *params, u8 cq_period_mode)
|
|
|
MLX5E_PARAMS_DEFAULT_RX_CQ_MODERATION_USEC_FROM_CQE;
|
|
|
}
|
|
|
|
|
|
+static void mlx5e_query_min_inline(struct mlx5_core_dev *mdev,
|
|
|
+ u8 *min_inline_mode)
|
|
|
+{
|
|
|
+ switch (MLX5_CAP_ETH(mdev, wqe_inline_mode)) {
|
|
|
+ case MLX5E_INLINE_MODE_L2:
|
|
|
+ *min_inline_mode = MLX5_INLINE_MODE_L2;
|
|
|
+ break;
|
|
|
+ case MLX5E_INLINE_MODE_VPORT_CONTEXT:
|
|
|
+ mlx5_query_nic_vport_min_inline(mdev,
|
|
|
+ min_inline_mode);
|
|
|
+ break;
|
|
|
+ case MLX5_INLINE_MODE_NOT_REQUIRED:
|
|
|
+ *min_inline_mode = MLX5_INLINE_MODE_NONE;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
static void mlx5e_build_nic_netdev_priv(struct mlx5_core_dev *mdev,
|
|
|
struct net_device *netdev,
|
|
|
const struct mlx5e_profile *profile,
|
|
|
@@ -3043,6 +3066,7 @@ static void mlx5e_build_nic_netdev_priv(struct mlx5_core_dev *mdev,
|
|
|
priv->params.tx_cq_moderation.pkts =
|
|
|
MLX5E_PARAMS_DEFAULT_TX_CQ_MODERATION_PKTS;
|
|
|
priv->params.tx_max_inline = mlx5e_get_max_inline_cap(mdev);
|
|
|
+ mlx5e_query_min_inline(mdev, &priv->params.tx_min_inline_mode);
|
|
|
priv->params.num_tc = 1;
|
|
|
priv->params.rss_hfunc = ETH_RSS_HASH_XOR;
|
|
|
|