net/mlx5: Add .getmaxphase ptp_clock_info callback

Implement .getmaxphase callback of ptp_clock_info in mlx5 driver. No longer
do a range check in .adjphase callback implementation. Handled by the ptp
stack.

Cc: Saeed Mahameed <saeedm@nvidia.com>
Signed-off-by: Rahul Rameshbabu <rrameshbabu@nvidia.com>
Acked-by: Richard Cochran <richardcochran@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Rahul Rameshbabu 2023-06-12 14:14:57 -07:00 committed by David S. Miller
parent c3b60ab7a4
commit 67ac72a599

View File

@ -93,17 +93,23 @@ static bool mlx5_modify_mtutc_allowed(struct mlx5_core_dev *mdev)
return MLX5_CAP_MCAM_FEATURE(mdev, ptpcyc2realtime_modify); return MLX5_CAP_MCAM_FEATURE(mdev, ptpcyc2realtime_modify);
} }
static s32 mlx5_ptp_getmaxphase(struct ptp_clock_info *ptp)
{
struct mlx5_clock *clock = container_of(ptp, struct mlx5_clock, ptp_info);
struct mlx5_core_dev *mdev;
mdev = container_of(clock, struct mlx5_core_dev, clock);
return MLX5_CAP_MCAM_FEATURE(mdev, mtutc_time_adjustment_extended_range) ?
MLX5_MTUTC_OPERATION_ADJUST_TIME_EXTENDED_MAX :
MLX5_MTUTC_OPERATION_ADJUST_TIME_MAX;
}
static bool mlx5_is_mtutc_time_adj_cap(struct mlx5_core_dev *mdev, s64 delta) static bool mlx5_is_mtutc_time_adj_cap(struct mlx5_core_dev *mdev, s64 delta)
{ {
s64 min = MLX5_MTUTC_OPERATION_ADJUST_TIME_MIN; s64 max = mlx5_ptp_getmaxphase(&mdev->clock.ptp_info);
s64 max = MLX5_MTUTC_OPERATION_ADJUST_TIME_MAX;
if (MLX5_CAP_MCAM_FEATURE(mdev, mtutc_time_adjustment_extended_range)) { if (delta < -max || delta > max)
min = MLX5_MTUTC_OPERATION_ADJUST_TIME_EXTENDED_MIN;
max = MLX5_MTUTC_OPERATION_ADJUST_TIME_EXTENDED_MAX;
}
if (delta < min || delta > max)
return false; return false;
return true; return true;
@ -351,14 +357,6 @@ static int mlx5_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta)
static int mlx5_ptp_adjphase(struct ptp_clock_info *ptp, s32 delta) static int mlx5_ptp_adjphase(struct ptp_clock_info *ptp, s32 delta)
{ {
struct mlx5_clock *clock = container_of(ptp, struct mlx5_clock, ptp_info);
struct mlx5_core_dev *mdev;
mdev = container_of(clock, struct mlx5_core_dev, clock);
if (!mlx5_is_mtutc_time_adj_cap(mdev, delta))
return -ERANGE;
return mlx5_ptp_adjtime(ptp, delta); return mlx5_ptp_adjtime(ptp, delta);
} }
@ -734,6 +732,7 @@ static const struct ptp_clock_info mlx5_ptp_clock_info = {
.pps = 0, .pps = 0,
.adjfine = mlx5_ptp_adjfine, .adjfine = mlx5_ptp_adjfine,
.adjphase = mlx5_ptp_adjphase, .adjphase = mlx5_ptp_adjphase,
.getmaxphase = mlx5_ptp_getmaxphase,
.adjtime = mlx5_ptp_adjtime, .adjtime = mlx5_ptp_adjtime,
.gettimex64 = mlx5_ptp_gettimex, .gettimex64 = mlx5_ptp_gettimex,
.settime64 = mlx5_ptp_settime, .settime64 = mlx5_ptp_settime,