Commit 6d0ba493 authored by Moshe Tal's avatar Moshe Tal Committed by Saeed Mahameed

net/mlx5e: Correct the calculation of max channels for rep

Correct the calculation of maximum channels of rep to better utilize
the hardware resources and allow a larger scale of reps.

This will allow creation of all virtual ports configured.

Fixes: 473baf2e ("net/mlx5e: Allow profile-specific limitation on max num of channels")
Signed-off-by: default avatarMoshe Tal <moshet@nvidia.com>
Reviewed-by: default avatarTariq Toukan <tariqt@nvidia.com>
Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
parent 77422a8f
...@@ -1220,6 +1220,7 @@ mlx5e_tx_mpwqe_supported(struct mlx5_core_dev *mdev) ...@@ -1220,6 +1220,7 @@ mlx5e_tx_mpwqe_supported(struct mlx5_core_dev *mdev)
MLX5_CAP_ETH(mdev, enhanced_multi_pkt_send_wqe); MLX5_CAP_ETH(mdev, enhanced_multi_pkt_send_wqe);
} }
int mlx5e_get_pf_num_tirs(struct mlx5_core_dev *mdev);
int mlx5e_priv_init(struct mlx5e_priv *priv, int mlx5e_priv_init(struct mlx5e_priv *priv,
const struct mlx5e_profile *profile, const struct mlx5e_profile *profile,
struct net_device *netdev, struct net_device *netdev,
......
...@@ -5221,6 +5221,15 @@ mlx5e_calc_max_nch(struct mlx5_core_dev *mdev, struct net_device *netdev, ...@@ -5221,6 +5221,15 @@ mlx5e_calc_max_nch(struct mlx5_core_dev *mdev, struct net_device *netdev,
return max_nch; return max_nch;
} }
int mlx5e_get_pf_num_tirs(struct mlx5_core_dev *mdev)
{
/* Indirect TIRS: 2 sets of TTCs (inner + outer steering)
* and 1 set of direct TIRS
*/
return 2 * MLX5E_NUM_INDIR_TIRS
+ mlx5e_profile_max_num_channels(mdev, &mlx5e_nic_profile);
}
/* mlx5e generic netdev management API (move to en_common.c) */ /* mlx5e generic netdev management API (move to en_common.c) */
int mlx5e_priv_init(struct mlx5e_priv *priv, int mlx5e_priv_init(struct mlx5e_priv *priv,
const struct mlx5e_profile *profile, const struct mlx5e_profile *profile,
......
...@@ -604,10 +604,16 @@ bool mlx5e_eswitch_vf_rep(const struct net_device *netdev) ...@@ -604,10 +604,16 @@ bool mlx5e_eswitch_vf_rep(const struct net_device *netdev)
return netdev->netdev_ops == &mlx5e_netdev_ops_rep; return netdev->netdev_ops == &mlx5e_netdev_ops_rep;
} }
/* One indirect TIR set for outer. Inner not supported in reps. */
#define REP_NUM_INDIR_TIRS MLX5E_NUM_INDIR_TIRS
static int mlx5e_rep_max_nch_limit(struct mlx5_core_dev *mdev) static int mlx5e_rep_max_nch_limit(struct mlx5_core_dev *mdev)
{ {
return (1 << MLX5_CAP_GEN(mdev, log_max_tir)) / int max_tir_num = 1 << MLX5_CAP_GEN(mdev, log_max_tir);
mlx5_eswitch_get_total_vports(mdev); int num_vports = mlx5_eswitch_get_total_vports(mdev);
return (max_tir_num - mlx5e_get_pf_num_tirs(mdev)
- (num_vports * REP_NUM_INDIR_TIRS)) / num_vports;
} }
static void mlx5e_build_rep_params(struct net_device *netdev) static void mlx5e_build_rep_params(struct net_device *netdev)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment