net:mlx5e: Add PTP-TIR and PTP-RQT
Add PTP-TIR and initiate its RQT to allow PTP-RQ to integrate into the safe-reopen flow on configuration change. Add rx_ptp_support flag on a profile and turn it on for ETH driver. With this flag set, create a redirect-RQT for PTP-RQ. Signed-off-by: Aya Levin <ayal@nvidia.com> Reviewed-by: Tariq Toukan <tariqt@nvidia.com> Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
This commit is contained in:
parent
a28359e922
commit
3adb60b6a3
@ -837,6 +837,7 @@ struct mlx5e_priv {
|
||||
struct mlx5e_tir inner_indir_tir[MLX5E_NUM_INDIR_TIRS];
|
||||
struct mlx5e_tir direct_tir[MLX5E_MAX_NUM_CHANNELS];
|
||||
struct mlx5e_tir xsk_tir[MLX5E_MAX_NUM_CHANNELS];
|
||||
struct mlx5e_tir ptp_tir;
|
||||
struct mlx5e_rss_params rss_params;
|
||||
u32 tx_rates[MLX5E_MAX_NUM_SQS];
|
||||
|
||||
@ -916,6 +917,7 @@ struct mlx5e_profile {
|
||||
const struct mlx5e_rx_handlers *rx_handlers;
|
||||
int max_tc;
|
||||
u8 rq_groups;
|
||||
bool rx_ptp_support;
|
||||
};
|
||||
|
||||
void mlx5e_build_ptys2ethtool_map(void);
|
||||
|
@ -663,3 +663,12 @@ void mlx5e_ptp_deactivate_channel(struct mlx5e_ptp *c)
|
||||
|
||||
napi_disable(&c->napi);
|
||||
}
|
||||
|
||||
int mlx5e_ptp_get_rqn(struct mlx5e_ptp *c, u32 *rqn)
|
||||
{
|
||||
if (!c || !test_bit(MLX5E_PTP_STATE_RX, c->state))
|
||||
return -EINVAL;
|
||||
|
||||
*rqn = c->rq.rqn;
|
||||
return 0;
|
||||
}
|
||||
|
@ -48,6 +48,7 @@ int mlx5e_ptp_open(struct mlx5e_priv *priv, struct mlx5e_params *params,
|
||||
void mlx5e_ptp_close(struct mlx5e_ptp *c);
|
||||
void mlx5e_ptp_activate_channel(struct mlx5e_ptp *c);
|
||||
void mlx5e_ptp_deactivate_channel(struct mlx5e_ptp *c);
|
||||
int mlx5e_ptp_get_rqn(struct mlx5e_ptp *c, u32 *rqn);
|
||||
|
||||
enum {
|
||||
MLX5E_SKB_CB_CQE_HWTSTAMP = BIT(0),
|
||||
|
@ -2329,7 +2329,8 @@ static u32 mlx5e_get_direct_rqn(struct mlx5e_priv *priv, int ix,
|
||||
}
|
||||
|
||||
static void mlx5e_redirect_rqts(struct mlx5e_priv *priv,
|
||||
struct mlx5e_redirect_rqt_param rrp)
|
||||
struct mlx5e_redirect_rqt_param rrp,
|
||||
struct mlx5e_redirect_rqt_param *ptp_rrp)
|
||||
{
|
||||
u32 rqtn;
|
||||
int ix;
|
||||
@ -2355,11 +2356,17 @@ static void mlx5e_redirect_rqts(struct mlx5e_priv *priv,
|
||||
rqtn = priv->direct_tir[ix].rqt.rqtn;
|
||||
mlx5e_redirect_rqt(priv, rqtn, 1, direct_rrp);
|
||||
}
|
||||
if (ptp_rrp) {
|
||||
rqtn = priv->ptp_tir.rqt.rqtn;
|
||||
mlx5e_redirect_rqt(priv, rqtn, 1, *ptp_rrp);
|
||||
}
|
||||
}
|
||||
|
||||
static void mlx5e_redirect_rqts_to_channels(struct mlx5e_priv *priv,
|
||||
struct mlx5e_channels *chs)
|
||||
{
|
||||
bool rx_ptp_support = priv->profile->rx_ptp_support;
|
||||
struct mlx5e_redirect_rqt_param *ptp_rrp_p = NULL;
|
||||
struct mlx5e_redirect_rqt_param rrp = {
|
||||
.is_rss = true,
|
||||
{
|
||||
@ -2369,12 +2376,22 @@ static void mlx5e_redirect_rqts_to_channels(struct mlx5e_priv *priv,
|
||||
}
|
||||
},
|
||||
};
|
||||
struct mlx5e_redirect_rqt_param ptp_rrp;
|
||||
|
||||
mlx5e_redirect_rqts(priv, rrp);
|
||||
if (rx_ptp_support) {
|
||||
u32 ptp_rqn;
|
||||
|
||||
ptp_rrp.is_rss = false;
|
||||
ptp_rrp.rqn = mlx5e_ptp_get_rqn(priv->channels.ptp, &ptp_rqn) ?
|
||||
priv->drop_rq.rqn : ptp_rqn;
|
||||
ptp_rrp_p = &ptp_rrp;
|
||||
}
|
||||
mlx5e_redirect_rqts(priv, rrp, ptp_rrp_p);
|
||||
}
|
||||
|
||||
static void mlx5e_redirect_rqts_to_drop(struct mlx5e_priv *priv)
|
||||
{
|
||||
bool rx_ptp_support = priv->profile->rx_ptp_support;
|
||||
struct mlx5e_redirect_rqt_param drop_rrp = {
|
||||
.is_rss = false,
|
||||
{
|
||||
@ -2382,7 +2399,7 @@ static void mlx5e_redirect_rqts_to_drop(struct mlx5e_priv *priv)
|
||||
},
|
||||
};
|
||||
|
||||
mlx5e_redirect_rqts(priv, drop_rrp);
|
||||
mlx5e_redirect_rqts(priv, drop_rrp, rx_ptp_support ? &drop_rrp : NULL);
|
||||
}
|
||||
|
||||
static const struct mlx5e_tirc_config tirc_default_config[MLX5E_NUM_INDIR_TIRS] = {
|
||||
@ -4944,10 +4961,18 @@ static int mlx5e_init_nic_rx(struct mlx5e_priv *priv)
|
||||
if (unlikely(err))
|
||||
goto err_destroy_xsk_rqts;
|
||||
|
||||
err = mlx5e_create_direct_rqts(priv, &priv->ptp_tir, 1);
|
||||
if (err)
|
||||
goto err_destroy_xsk_tirs;
|
||||
|
||||
err = mlx5e_create_direct_tirs(priv, &priv->ptp_tir, 1);
|
||||
if (err)
|
||||
goto err_destroy_ptp_rqt;
|
||||
|
||||
err = mlx5e_create_flow_steering(priv);
|
||||
if (err) {
|
||||
mlx5_core_warn(mdev, "create flow steering failed, %d\n", err);
|
||||
goto err_destroy_xsk_tirs;
|
||||
goto err_destroy_ptp_direct_tir;
|
||||
}
|
||||
|
||||
err = mlx5e_tc_nic_init(priv);
|
||||
@ -4968,6 +4993,10 @@ err_tc_nic_cleanup:
|
||||
mlx5e_tc_nic_cleanup(priv);
|
||||
err_destroy_flow_steering:
|
||||
mlx5e_destroy_flow_steering(priv);
|
||||
err_destroy_ptp_direct_tir:
|
||||
mlx5e_destroy_direct_tirs(priv, &priv->ptp_tir, 1);
|
||||
err_destroy_ptp_rqt:
|
||||
mlx5e_destroy_direct_rqts(priv, &priv->ptp_tir, 1);
|
||||
err_destroy_xsk_tirs:
|
||||
mlx5e_destroy_direct_tirs(priv, priv->xsk_tir, max_nch);
|
||||
err_destroy_xsk_rqts:
|
||||
@ -4994,6 +5023,8 @@ static void mlx5e_cleanup_nic_rx(struct mlx5e_priv *priv)
|
||||
mlx5e_accel_cleanup_rx(priv);
|
||||
mlx5e_tc_nic_cleanup(priv);
|
||||
mlx5e_destroy_flow_steering(priv);
|
||||
mlx5e_destroy_direct_tirs(priv, &priv->ptp_tir, 1);
|
||||
mlx5e_destroy_direct_rqts(priv, &priv->ptp_tir, 1);
|
||||
mlx5e_destroy_direct_tirs(priv, priv->xsk_tir, max_nch);
|
||||
mlx5e_destroy_direct_rqts(priv, priv->xsk_tir, max_nch);
|
||||
mlx5e_destroy_direct_tirs(priv, priv->direct_tir, max_nch);
|
||||
@ -5106,6 +5137,7 @@ static const struct mlx5e_profile mlx5e_nic_profile = {
|
||||
.rq_groups = MLX5E_NUM_RQ_GROUPS(XSK),
|
||||
.stats_grps = mlx5e_nic_stats_grps,
|
||||
.stats_grps_num = mlx5e_nic_stats_grps_num,
|
||||
.rx_ptp_support = true,
|
||||
};
|
||||
|
||||
/* mlx5e generic netdev management API (move to en_common.c) */
|
||||
|
@ -1062,6 +1062,7 @@ static const struct mlx5e_profile mlx5e_rep_profile = {
|
||||
.rq_groups = MLX5E_NUM_RQ_GROUPS(REGULAR),
|
||||
.stats_grps = mlx5e_rep_stats_grps,
|
||||
.stats_grps_num = mlx5e_rep_stats_grps_num,
|
||||
.rx_ptp_support = false,
|
||||
};
|
||||
|
||||
static const struct mlx5e_profile mlx5e_uplink_rep_profile = {
|
||||
@ -1082,6 +1083,7 @@ static const struct mlx5e_profile mlx5e_uplink_rep_profile = {
|
||||
.rq_groups = MLX5E_NUM_RQ_GROUPS(XSK),
|
||||
.stats_grps = mlx5e_ul_rep_stats_grps,
|
||||
.stats_grps_num = mlx5e_ul_rep_stats_grps_num,
|
||||
.rx_ptp_support = false,
|
||||
};
|
||||
|
||||
/* e-Switch vport representors */
|
||||
|
@ -473,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 */
|
||||
|
@ -350,6 +350,7 @@ static const struct mlx5e_profile mlx5i_pkey_nic_profile = {
|
||||
.rx_handlers = &mlx5i_rx_handlers,
|
||||
.max_tc = MLX5I_MAX_NUM_TC,
|
||||
.rq_groups = MLX5E_NUM_RQ_GROUPS(REGULAR),
|
||||
.rx_ptp_support = false,
|
||||
};
|
||||
|
||||
const struct mlx5e_profile *mlx5i_pkey_get_profile(void)
|
||||
|
Loading…
Reference in New Issue
Block a user