net/mlx5: Add .getmaxphase ptp_clock_info callback
authorRahul Rameshbabu <rrameshbabu@nvidia.com>
Mon, 12 Jun 2023 21:14:57 +0000 (14:14 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 20 Jun 2023 08:02:33 +0000 (09:02 +0100)
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>
drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c

index 932fbc8..973babf 100644 (file)
@@ -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;
+}
+
+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 < min || delta > max)
+       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,