Commit 67ac72a5 authored by Rahul Rameshbabu's avatar Rahul Rameshbabu Committed by David S. Miller
Browse files

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: default avatarRahul Rameshbabu <rrameshbabu@nvidia.com>
Acked-by: default avatarRichard Cochran <richardcochran@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent c3b60ab7
Loading
Loading
Loading
Loading
+15 −16
Original line number Diff line number Diff line
@@ -93,17 +93,23 @@ static bool mlx5_modify_mtutc_allowed(struct mlx5_core_dev *mdev)
	return MLX5_CAP_MCAM_FEATURE(mdev, ptpcyc2realtime_modify);
}

static bool mlx5_is_mtutc_time_adj_cap(struct mlx5_core_dev *mdev, s64 delta)
static s32 mlx5_ptp_getmaxphase(struct ptp_clock_info *ptp)
{
	s64 min = MLX5_MTUTC_OPERATION_ADJUST_TIME_MIN;
	s64 max = MLX5_MTUTC_OPERATION_ADJUST_TIME_MAX;
	struct mlx5_clock *clock = container_of(ptp, struct mlx5_clock, ptp_info);
	struct mlx5_core_dev *mdev;

	if (MLX5_CAP_MCAM_FEATURE(mdev, mtutc_time_adjustment_extended_range)) {
		min = MLX5_MTUTC_OPERATION_ADJUST_TIME_EXTENDED_MIN;
		max = MLX5_MTUTC_OPERATION_ADJUST_TIME_EXTENDED_MAX;
	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;
}

	if (delta < min || delta > max)
static bool mlx5_is_mtutc_time_adj_cap(struct mlx5_core_dev *mdev, s64 delta)
{
	s64 max = mlx5_ptp_getmaxphase(&mdev->clock.ptp_info);

	if (delta < -max || delta > max)
		return false;

	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)
{
	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);
}

@@ -734,6 +732,7 @@ static const struct ptp_clock_info mlx5_ptp_clock_info = {
	.pps		= 0,
	.adjfine	= mlx5_ptp_adjfine,
	.adjphase	= mlx5_ptp_adjphase,
	.getmaxphase    = mlx5_ptp_getmaxphase,
	.adjtime	= mlx5_ptp_adjtime,
	.gettimex64	= mlx5_ptp_gettimex,
	.settime64	= mlx5_ptp_settime,