extern const struct mlx5e_rx_handlers mlx5e_rx_handlers_nic;
 
+enum mlx5e_profile_feature {
+       MLX5E_PROFILE_FEATURE_PTP_RX,
+};
+
 struct mlx5e_profile {
        int     (*init)(struct mlx5_core_dev *mdev,
                        struct net_device *netdev);
        const struct mlx5e_rx_handlers *rx_handlers;
        int     max_tc;
        u8      rq_groups;
-       bool    rx_ptp_support;
+       u32     features;
 };
 
+#define mlx5e_profile_feature_cap(profile, feature)    \
+       ((profile)->features & (MLX5E_PROFILE_FEATURE_## feature))
+
 void mlx5e_build_ptys2ethtool_map(void);
 
 bool mlx5e_check_fragmented_striding_rq_cap(struct mlx5_core_dev *mdev);
 
 {
        struct mlx5e_ptp_fs *ptp_fs;
 
-       if (!priv->profile->rx_ptp_support)
+       if (!mlx5e_profile_feature_cap(priv->profile, PTP_RX))
                return 0;
 
        ptp_fs = kzalloc(sizeof(*ptp_fs), GFP_KERNEL);
 {
        struct mlx5e_ptp_fs *ptp_fs = priv->fs.ptp_fs;
 
-       if (!priv->profile->rx_ptp_support)
+       if (!mlx5e_profile_feature_cap(priv->profile, PTP_RX))
                return;
 
        mlx5e_ptp_rx_unset_fs(priv);
 {
        struct mlx5e_ptp *c = priv->channels.ptp;
 
-       if (!priv->profile->rx_ptp_support)
+       if (!mlx5e_profile_feature_cap(priv->profile, PTP_RX))
                return 0;
 
        if (!test_bit(MLX5E_STATE_OPENED, &priv->state))
 
        if (curr_val == new_val)
                return 0;
 
-       if (new_val && !priv->profile->rx_ptp_support && rx_filter) {
+       if (new_val && !mlx5e_profile_feature_cap(priv->profile, PTP_RX) && rx_filter) {
                netdev_err(priv->netdev,
                           "Profile doesn't support enabling of CQE compression while hardware time-stamping is enabled.\n");
                return -EINVAL;
 
                goto err_unlock;
        }
 
-       if (!priv->profile->rx_ptp_support)
+       if (!mlx5e_profile_feature_cap(priv->profile, PTP_RX))
                err = mlx5e_hwstamp_config_no_ptp_rx(priv,
                                                     config.rx_filter != HWTSTAMP_FILTER_NONE);
        else
        .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,
+       .features          = BIT(MLX5E_PROFILE_FEATURE_PTP_RX),
 };
 
 static unsigned int
 
        .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 = {
        .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 */
 
        .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 */
 
        .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)