From: Saeed Mahameed <saeed@kernel.org>
To: "David S. Miller" <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Eric Dumazet <edumazet@google.com>
Cc: Saeed Mahameed <saeedm@nvidia.com>,
netdev@vger.kernel.org, Tariq Toukan <tariqt@nvidia.com>,
Rahul Rameshbabu <rrameshbabu@nvidia.com>
Subject: [net-next V2 11/13] net/mlx5: Query maximum frequency adjustment of the PTP hardware clock
Date: Wed, 15 Nov 2023 11:36:47 -0800 [thread overview]
Message-ID: <20231115193649.8756-12-saeed@kernel.org> (raw)
In-Reply-To: <20231115193649.8756-1-saeed@kernel.org>
From: Rahul Rameshbabu <rrameshbabu@nvidia.com>
Some mlx5 devices do not support the default advertised maximum frequency
adjustment value for the PTP hardware clock that is set by the driver.
These devices need to be queried when initializing the clock functionality
in order to get the maximum supported frequency adjustment value. This
value can be greater than the minimum supported frequency adjustment across
mlx5 devices (50 million ppb).
Signed-off-by: Rahul Rameshbabu <rrameshbabu@nvidia.com>
Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
---
.../ethernet/mellanox/mlx5/core/lib/clock.c | 22 +++++++++++++++++++
include/linux/mlx5/mlx5_ifc.h | 5 ++++-
2 files changed, 26 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c b/drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c
index 1daa4b019513..cac60a841e1d 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c
@@ -1000,6 +1000,25 @@ static void mlx5_init_clock_info(struct mlx5_core_dev *mdev)
info->frac = timer->tc.frac;
}
+static void mlx5_init_timer_max_freq_adjustment(struct mlx5_core_dev *mdev)
+{
+ struct mlx5_clock *clock = &mdev->clock;
+ u32 out[MLX5_ST_SZ_DW(mtutc_reg)] = {};
+ u32 in[MLX5_ST_SZ_DW(mtutc_reg)] = {};
+ u8 log_max_freq_adjustment = 0;
+ int err;
+
+ err = mlx5_core_access_reg(mdev, in, sizeof(in), out, sizeof(out),
+ MLX5_REG_MTUTC, 0, 0);
+ if (!err)
+ log_max_freq_adjustment =
+ MLX5_GET(mtutc_reg, out, log_max_freq_adjustment);
+
+ if (log_max_freq_adjustment)
+ clock->ptp_info.max_adj =
+ min(S32_MAX, 1 << log_max_freq_adjustment);
+}
+
static void mlx5_init_timer_clock(struct mlx5_core_dev *mdev)
{
struct mlx5_clock *clock = &mdev->clock;
@@ -1007,6 +1026,9 @@ static void mlx5_init_timer_clock(struct mlx5_core_dev *mdev)
/* Configure the PHC */
clock->ptp_info = mlx5_ptp_clock_info;
+ if (MLX5_CAP_MCAM_REG(mdev, mtutc))
+ mlx5_init_timer_max_freq_adjustment(mdev);
+
mlx5_timecounter_init(mdev);
mlx5_init_clock_info(mdev);
mlx5_init_overflow_period(clock);
diff --git a/include/linux/mlx5/mlx5_ifc.h b/include/linux/mlx5/mlx5_ifc.h
index 6f3631425f38..ce2e71cd6d2a 100644
--- a/include/linux/mlx5/mlx5_ifc.h
+++ b/include/linux/mlx5/mlx5_ifc.h
@@ -10103,7 +10103,10 @@ enum {
struct mlx5_ifc_mtutc_reg_bits {
u8 reserved_at_0[0x5];
u8 freq_adj_units[0x3];
- u8 reserved_at_8[0x14];
+ u8 reserved_at_8[0x3];
+ u8 log_max_freq_adjustment[0x5];
+
+ u8 reserved_at_10[0xc];
u8 operation[0x4];
u8 freq_adjustment[0x20];
--
2.41.0
next prev parent reply other threads:[~2023-11-15 19:37 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-15 19:36 [pull request][net-next V2 00/13] mlx5 updates 2023-11-13 Saeed Mahameed
2023-11-15 19:36 ` [net-next V2 01/13] net/mlx5: print change on SW reset semaphore returns busy Saeed Mahameed
2023-11-18 17:50 ` patchwork-bot+netdevbpf
2023-11-15 19:36 ` [net-next V2 02/13] net/mlx5: Allow sync reset flow when BF MGT interface device is present Saeed Mahameed
2023-11-15 19:36 ` [net-next V2 03/13] net/mlx5e: Some cleanup in mlx5e_tc_stats_matchall() Saeed Mahameed
2023-11-15 19:36 ` [net-next V2 04/13] net/mlx5: Annotate struct mlx5_fc_bulk with __counted_by Saeed Mahameed
2023-11-15 19:36 ` [net-next V2 05/13] net/mlx5: Annotate struct mlx5_flow_handle " Saeed Mahameed
2023-11-15 19:36 ` [net-next V2 06/13] net/mlx5: simplify mlx5_set_driver_version string assignments Saeed Mahameed
2023-11-15 19:36 ` [net-next V2 07/13] net/mlx5e: Access array with enum values instead of magic numbers Saeed Mahameed
2023-11-15 19:36 ` [net-next V2 08/13] net/mlx5: Refactor real time clock operation checks for PHC Saeed Mahameed
2023-11-15 19:36 ` [net-next V2 09/13] net/mlx5: Initialize clock->ptp_info inside mlx5_init_timer_clock Saeed Mahameed
2023-11-15 19:36 ` [net-next V2 10/13] net/mlx5: Convert scaled ppm values outside the s32 range for PHC frequency adjustments Saeed Mahameed
2023-11-15 19:36 ` Saeed Mahameed [this message]
2023-11-15 19:36 ` [net-next V2 12/13] net/mlx5e: Add local loopback counter to vport rep stats Saeed Mahameed
2023-11-15 19:36 ` [net-next V2 13/13] net/mlx5e: Remove early assignment to netdev->features Saeed Mahameed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231115193649.8756-12-saeed@kernel.org \
--to=saeed@kernel.org \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=rrameshbabu@nvidia.com \
--cc=saeedm@nvidia.com \
--cc=tariqt@nvidia.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).