All of lore.kernel.org
 help / color / mirror / Atom feed
* [net-next v2 0/9] ptp: convert drivers to .adjfine
@ 2022-09-30 20:48 Jacob Keller
  2022-09-30 20:48 ` [net-next v2 1/9] ptp: add missing documentation for parameters Jacob Keller
                   ` (10 more replies)
  0 siblings, 11 replies; 15+ messages in thread
From: Jacob Keller @ 2022-09-30 20:48 UTC (permalink / raw)
  To: netdev
  Cc: Jacob Keller, K. Y. Srinivasan, Haiyang Zhang, Stephen Hemminger,
	Wei Liu, Dexuan Cui, Tom Lendacky, Shyam Sundar S K,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Siva Reddy Kallam, Prashant Sreedharan, Michael Chan,
	Yisen Zhuang, Salil Mehta, Jesse Brandeburg, Tony Nguyen,
	Tariq Toukan, Saeed Mahameed, Leon Romanovsky, Bryan Whitehead,
	Sergey Shtylyov, Giuseppe Cavallaro, Alexandre Torgue,
	Jose Abreu, Maxime Coquelin, Richard Cochran, Vivek Thampi,
	VMware PV-Drivers Reviewers, Jie Wang, Guangbin Huang,
	Eran Ben Elisha, Aya Levin, Cai Huoqing, Biju Das, Lad Prabhakar,
	Phil Edworthy, Jiasheng Jiang, Gustavo A. R. Silva,
	Linus Walleij, Wan Jiabing, Lv Ruyi, Arnd Bergmann

Many drivers implementing PTP have not yet migrated to the new .adjfine
frequency adjustment implementation.

A handful of these drivers use hardware with a simple increment value which
is adjusted by multiplying by the adjustment factor and then dividing by
1 billion. This calculation is very easy to convert to .adjfine, by simply
updating the divisor.

Introduce new helper functions, diff_by_scaled_ppm and adjust_by_scaled_ppm
which perform the most common calculations used by drivers for this purpose.

The adjust_by_scaled_ppm takes the base increment and scaled PPM value, and
calculates the new increment to use.

A few drivers need the difference and direction rather than a raw increment
value. The diff_by_scaled_ppm calculates the difference and returns true if
it should be a subtraction, false otherwise. This most closely aligns with
existing driver implementations.

I previously submitted v1 of this series at [1], and got some feedback only
on a handful of drivers. In the interest of merging the changes which have
received feedback, I've dropped the following drivers out of this send:

 * ptp_phc
 * ptp_ipx46x
 * tg3
 * hclge
 * stmac
 * cpts

I plan to submit those drivers changes again at a later date. As before,
there are some drivers which are not trivial to convert to the new helper
functions. While they may be able to work, their implementation is different
and I lack the hardware or datasheets to determine what the correct
implementation would be.


* drivers/net/ethernet/broadcom/bnx2x
* drivers/net/ethernet/broadcom/bnxt
* drivers/net/ethernet/cavium/liquidio
* drivers/net/ethernet/chelsio/cxgb4
* drivers/net/ethernet/freescale
* drivers/net/ethernet/qlogic/qed
* drivers/net/ethernet/qlogic/qede
* drivers/net/ethernet/sfc
* drivers/net/ethernet/sfc/siena
* drivers/net/ethernet/ti/am65-cpts.c
* drivers/ptp/ptp_dte.c

My end goal is to drop the .adjfreq implementation entirely, and to that end
I plan on modifying these drivers in the future to directly use
scaled_ppm_to_ppb as the simplest method to convert them.

Cc: "K. Y. Srinivasan" <kys@microsoft.com>
Cc: Haiyang Zhang <haiyangz@microsoft.com>
Cc: Stephen Hemminger <sthemmin@microsoft.com>
Cc: Wei Liu <wei.liu@kernel.org>
Cc: Dexuan Cui <decui@microsoft.com>
Cc: Tom Lendacky <thomas.lendacky@amd.com>
Cc: Shyam Sundar S K <Shyam-sundar.S-k@amd.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Eric Dumazet <edumazet@google.com>
Cc: Jakub Kicinski <kuba@kernel.org>
Cc: Paolo Abeni <pabeni@redhat.com>
Cc: Siva Reddy Kallam <siva.kallam@broadcom.com>
Cc: Prashant Sreedharan <prashant@broadcom.com>
Cc: Michael Chan <mchan@broadcom.com>
Cc: Yisen Zhuang <yisen.zhuang@huawei.com>
Cc: Salil Mehta <salil.mehta@huawei.com>
Cc: Jesse Brandeburg <jesse.brandeburg@intel.com>
Cc: Tony Nguyen <anthony.l.nguyen@intel.com>
Cc: Tariq Toukan <tariqt@nvidia.com>
Cc: Saeed Mahameed <saeedm@nvidia.com>
Cc: Leon Romanovsky <leon@kernel.org>
Cc: Bryan Whitehead <bryan.whitehead@microchip.com>
Cc: Sergey Shtylyov <s.shtylyov@omp.ru>
Cc: Giuseppe Cavallaro <peppe.cavallaro@st.com>
Cc: Alexandre Torgue <alexandre.torgue@foss.st.com>
Cc: Jose Abreu <joabreu@synopsys.com>
Cc: Maxime Coquelin <mcoquelin.stm32@gmail.com>
Cc: Richard Cochran <richardcochran@gmail.com>
Cc: Vivek Thampi <vithampi@vmware.com>
Cc: VMware PV-Drivers Reviewers <pv-drivers@vmware.com>
Cc: Jie Wang <wangjie125@huawei.com>
Cc: Jacob Keller <jacob.e.keller@intel.com>
Cc: Guangbin Huang <huangguangbin2@huawei.com>
Cc: Eran Ben Elisha <eranbe@nvidia.com>
Cc: Aya Levin <ayal@nvidia.com>
Cc: Cai Huoqing <cai.huoqing@linux.dev>
Cc: Biju Das <biju.das.jz@bp.renesas.com>
Cc: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Cc: Phil Edworthy <phil.edworthy@renesas.com>
Cc: Jiasheng Jiang <jiasheng@iscas.ac.cn>
Cc: "Gustavo A. R. Silva" <gustavoars@kernel.org>
Cc: Linus Walleij <linus.walleij@linaro.org>
Cc: Wan Jiabing <wanjiabing@vivo.com>
Cc: Lv Ruyi <lv.ruyi@zte.com.cn>
Cc: Arnd Bergmann <arnd@arndb.de>

Jacob Keller (9):
  ptp: add missing documentation for parameters
  ptp: introduce helpers to adjust by scaled parts per million
  drivers: convert unsupported .adjfreq to .adjfine
  ptp: mlx4: convert to .adjfine and adjust_by_scaled_ppm
  ptp: mlx5: convert to .adjfine and adjust_by_scaled_ppm
  ptp: lan743x: remove .adjfreq implementation
  ptp: lan743x: use diff_by_scaled_ppm in .adjfine implementation
  ptp: ravb: convert to .adjfine and adjust_by_scaled_ppm
  ptp: xgbe: convert to .adjfine and adjust_by_scaled_ppm

 drivers/hv/hv_util.c                          |  4 +-
 drivers/net/ethernet/amd/xgbe/xgbe-ptp.c      | 20 ++-----
 drivers/net/ethernet/intel/e1000e/ptp.c       | 16 ++----
 drivers/net/ethernet/intel/i40e/i40e_ptp.c    | 17 ++----
 drivers/net/ethernet/intel/ice/ice_ptp.c      | 18 +------
 drivers/net/ethernet/intel/igb/igb_ptp.c      | 18 +------
 drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c  | 24 ++-------
 drivers/net/ethernet/mellanox/mlx4/en_clock.c | 29 ++++------
 .../ethernet/mellanox/mlx5/core/lib/clock.c   | 22 +++-----
 drivers/net/ethernet/microchip/lan743x_ptp.c  | 54 +++----------------
 drivers/net/ethernet/renesas/ravb_ptp.c       | 17 ++----
 drivers/ptp/ptp_kvm_common.c                  |  4 +-
 drivers/ptp/ptp_vmw.c                         |  4 +-
 include/linux/ptp_clock_kernel.h              | 53 ++++++++++++++++++
 14 files changed, 105 insertions(+), 195 deletions(-)


base-commit: 915b96c52763e2988e6368b538b487a7138b8fa4
-- 
2.37.1.394.gc50926e1f488


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [net-next v2 1/9] ptp: add missing documentation for parameters
  2022-09-30 20:48 [net-next v2 0/9] ptp: convert drivers to .adjfine Jacob Keller
@ 2022-09-30 20:48 ` Jacob Keller
  2022-09-30 20:48 ` [net-next v2 2/9] ptp: introduce helpers to adjust by scaled parts per million Jacob Keller
                   ` (9 subsequent siblings)
  10 siblings, 0 replies; 15+ messages in thread
From: Jacob Keller @ 2022-09-30 20:48 UTC (permalink / raw)
  To: netdev
  Cc: Jacob Keller, K. Y. Srinivasan, Haiyang Zhang, Stephen Hemminger,
	Wei Liu, Dexuan Cui, Tom Lendacky, Shyam Sundar S K,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Siva Reddy Kallam, Prashant Sreedharan, Michael Chan,
	Yisen Zhuang, Salil Mehta, Jesse Brandeburg, Tony Nguyen,
	Tariq Toukan, Saeed Mahameed, Leon Romanovsky, Bryan Whitehead,
	Sergey Shtylyov, Giuseppe Cavallaro, Alexandre Torgue,
	Jose Abreu, Maxime Coquelin, Richard Cochran, Vivek Thampi,
	VMware PV-Drivers Reviewers, Jie Wang, Guangbin Huang,
	Eran Ben Elisha, Aya Levin, Cai Huoqing, Biju Das, Lad Prabhakar,
	Phil Edworthy, Jiasheng Jiang, Gustavo A. R. Silva,
	Linus Walleij, Wan Jiabing, Lv Ruyi, Arnd Bergmann

The ptp_find_pin_unlocked function and the ptp_system_timestamp structure
didn't document their parameters and fields. Fix this.

Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Cc: Richard Cochran <richardcochran@gmail.com>
---
 include/linux/ptp_clock_kernel.h | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/include/linux/ptp_clock_kernel.h b/include/linux/ptp_clock_kernel.h
index 92b44161408e..ad4aaadc2f7a 100644
--- a/include/linux/ptp_clock_kernel.h
+++ b/include/linux/ptp_clock_kernel.h
@@ -45,6 +45,8 @@ struct system_device_crosststamp;
 
 /**
  * struct ptp_system_timestamp - system time corresponding to a PHC timestamp
+ * @pre_ts: system timestamp before capturing PHC
+ * @post_ts: system timestamp after capturing PHC
  */
 struct ptp_system_timestamp {
 	struct timespec64 pre_ts;
@@ -316,6 +318,11 @@ int ptp_find_pin(struct ptp_clock *ptp,
  * should most likely call ptp_find_pin() directly from their
  * ptp_clock_info::enable() method.
  *
+* @ptp:    The clock obtained from ptp_clock_register().
+* @func:   One of the ptp_pin_function enumerated values.
+* @chan:   The particular functional channel to find.
+* Return:  Pin index in the range of zero to ptp_clock_caps.n_pins - 1,
+*          or -1 if the auxiliary function cannot be found.
  */
 
 int ptp_find_pin_unlocked(struct ptp_clock *ptp,
-- 
2.37.1.394.gc50926e1f488


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [net-next v2 2/9] ptp: introduce helpers to adjust by scaled parts per million
  2022-09-30 20:48 [net-next v2 0/9] ptp: convert drivers to .adjfine Jacob Keller
  2022-09-30 20:48 ` [net-next v2 1/9] ptp: add missing documentation for parameters Jacob Keller
@ 2022-09-30 20:48 ` Jacob Keller
  2022-09-30 20:48 ` [net-next v2 3/9] drivers: convert unsupported .adjfreq to .adjfine Jacob Keller
                   ` (8 subsequent siblings)
  10 siblings, 0 replies; 15+ messages in thread
From: Jacob Keller @ 2022-09-30 20:48 UTC (permalink / raw)
  To: netdev
  Cc: Jacob Keller, K. Y. Srinivasan, Haiyang Zhang, Stephen Hemminger,
	Wei Liu, Dexuan Cui, Tom Lendacky, Shyam Sundar S K,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Siva Reddy Kallam, Prashant Sreedharan, Michael Chan,
	Yisen Zhuang, Salil Mehta, Jesse Brandeburg, Tony Nguyen,
	Tariq Toukan, Saeed Mahameed, Leon Romanovsky, Bryan Whitehead,
	Sergey Shtylyov, Giuseppe Cavallaro, Alexandre Torgue,
	Jose Abreu, Maxime Coquelin, Richard Cochran, Vivek Thampi,
	VMware PV-Drivers Reviewers, Jie Wang, Guangbin Huang,
	Eran Ben Elisha, Aya Levin, Cai Huoqing, Biju Das, Lad Prabhakar,
	Phil Edworthy, Jiasheng Jiang, Gustavo A. R. Silva,
	Linus Walleij, Wan Jiabing, Lv Ruyi, Arnd Bergmann

Many drivers implement the .adjfreq or .adjfine PTP op function with the
same basic logic:

  1. Determine a base frequency value
  2. Multiply this by the abs() of the requested adjustment, then divide by
     the appropriate divisor (1 billion, or 65,536 billion).
  3. Add or subtract this difference from the base frequency to calculate a
     new adjustment.

A few drivers need the difference and direction rather than the combined
new increment value.

I recently converted the Intel drivers to .adjfine and the scaled parts per
million (65.536 parts per billion) logic. To avoid overflow with minimal
loss of precision, mul_u64_u64_div_u64 was used.

The basic logic used by all of these drivers is very similar, and leads to
a lot of duplicate code to perform the same task.

Rather than keep this duplicate code, introduce diff_by_scaled_ppm and
adjust_by_scaled_ppm. These helper functions calculate the difference or
adjustment necessary based on the scaled parts per million input.

The diff_by_scaled_ppm function returns true if the difference should be
subtracted, and false otherwise.

Update the Intel drivers to use the new helper functions. Other vendor
drivers will be converted to .adjfine and this helper function in the
following changes.

Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Cc: Richard Cochran <richardcochran@gmail.com>
---
 drivers/net/ethernet/intel/e1000e/ptp.c      | 16 ++-----
 drivers/net/ethernet/intel/i40e/i40e_ptp.c   | 17 ++------
 drivers/net/ethernet/intel/ice/ice_ptp.c     | 18 +-------
 drivers/net/ethernet/intel/igb/igb_ptp.c     | 18 +-------
 drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c | 24 ++--------
 include/linux/ptp_clock_kernel.h             | 46 ++++++++++++++++++++
 6 files changed, 60 insertions(+), 79 deletions(-)

diff --git a/drivers/net/ethernet/intel/e1000e/ptp.c b/drivers/net/ethernet/intel/e1000e/ptp.c
index 0e488e4fa5c1..6e5a1720e6cd 100644
--- a/drivers/net/ethernet/intel/e1000e/ptp.c
+++ b/drivers/net/ethernet/intel/e1000e/ptp.c
@@ -29,17 +29,11 @@ static int e1000e_phc_adjfine(struct ptp_clock_info *ptp, long delta)
 	struct e1000_adapter *adapter = container_of(ptp, struct e1000_adapter,
 						     ptp_clock_info);
 	struct e1000_hw *hw = &adapter->hw;
-	bool neg_adj = false;
 	unsigned long flags;
-	u64 adjustment;
-	u32 timinca, incvalue;
+	u64 incvalue;
+	u32 timinca;
 	s32 ret_val;
 
-	if (delta < 0) {
-		neg_adj = true;
-		delta = -delta;
-	}
-
 	/* Get the System Time Register SYSTIM base frequency */
 	ret_val = e1000e_get_base_timinca(adapter, &timinca);
 	if (ret_val)
@@ -48,11 +42,7 @@ static int e1000e_phc_adjfine(struct ptp_clock_info *ptp, long delta)
 	spin_lock_irqsave(&adapter->systim_lock, flags);
 
 	incvalue = timinca & E1000_TIMINCA_INCVALUE_MASK;
-
-	adjustment = mul_u64_u64_div_u64(incvalue, (u64)delta,
-					 1000000ULL << 16);
-
-	incvalue = neg_adj ? (incvalue - adjustment) : (incvalue + adjustment);
+	incvalue = adjust_by_scaled_ppm(incvalue, delta);
 
 	timinca &= ~E1000_TIMINCA_INCVALUE_MASK;
 	timinca |= incvalue;
diff --git a/drivers/net/ethernet/intel/i40e/i40e_ptp.c b/drivers/net/ethernet/intel/i40e/i40e_ptp.c
index ffea0c9c82f1..c37abbb3cd06 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_ptp.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_ptp.c
@@ -347,23 +347,12 @@ static int i40e_ptp_adjfine(struct ptp_clock_info *ptp, long scaled_ppm)
 {
 	struct i40e_pf *pf = container_of(ptp, struct i40e_pf, ptp_caps);
 	struct i40e_hw *hw = &pf->hw;
-	u64 adj, freq, diff;
-	int neg_adj = 0;
-
-	if (scaled_ppm < 0) {
-		neg_adj = 1;
-		scaled_ppm = -scaled_ppm;
-	}
+	u64 adj, base_adj;
 
 	smp_mb(); /* Force any pending update before accessing. */
-	freq = I40E_PTP_40GB_INCVAL * READ_ONCE(pf->ptp_adj_mult);
-	diff = mul_u64_u64_div_u64(freq, (u64)scaled_ppm,
-				   1000000ULL << 16);
+	base_adj = I40E_PTP_40GB_INCVAL * READ_ONCE(pf->ptp_adj_mult);
 
-	if (neg_adj)
-		adj = I40E_PTP_40GB_INCVAL - diff;
-	else
-		adj = I40E_PTP_40GB_INCVAL + diff;
+	adj = adjust_by_scaled_ppm(base_adj, scaled_ppm);
 
 	wr32(hw, I40E_PRTTSYN_INC_L, adj & 0xFFFFFFFF);
 	wr32(hw, I40E_PRTTSYN_INC_H, adj >> 32);
diff --git a/drivers/net/ethernet/intel/ice/ice_ptp.c b/drivers/net/ethernet/intel/ice/ice_ptp.c
index 011b727ab190..5cf198a33e26 100644
--- a/drivers/net/ethernet/intel/ice/ice_ptp.c
+++ b/drivers/net/ethernet/intel/ice/ice_ptp.c
@@ -1444,24 +1444,10 @@ static int ice_ptp_adjfine(struct ptp_clock_info *info, long scaled_ppm)
 {
 	struct ice_pf *pf = ptp_info_to_pf(info);
 	struct ice_hw *hw = &pf->hw;
-	u64 incval, diff;
-	int neg_adj = 0;
+	u64 incval;
 	int err;
 
-	incval = ice_base_incval(pf);
-
-	if (scaled_ppm < 0) {
-		neg_adj = 1;
-		scaled_ppm = -scaled_ppm;
-	}
-
-	diff = mul_u64_u64_div_u64(incval, (u64)scaled_ppm,
-				   1000000ULL << 16);
-	if (neg_adj)
-		incval -= diff;
-	else
-		incval += diff;
-
+	incval = adjust_by_scaled_ppm(ice_base_incval(pf), scaled_ppm);
 	err = ice_ptp_write_incval_locked(hw, incval);
 	if (err) {
 		dev_err(ice_pf_to_dev(pf), "PTP failed to set incval, err %d\n",
diff --git a/drivers/net/ethernet/intel/igb/igb_ptp.c b/drivers/net/ethernet/intel/igb/igb_ptp.c
index 15e57460e19e..6f471b91f562 100644
--- a/drivers/net/ethernet/intel/igb/igb_ptp.c
+++ b/drivers/net/ethernet/intel/igb/igb_ptp.c
@@ -195,23 +195,9 @@ static int igb_ptp_adjfine_82576(struct ptp_clock_info *ptp, long scaled_ppm)
 	struct igb_adapter *igb = container_of(ptp, struct igb_adapter,
 					       ptp_caps);
 	struct e1000_hw *hw = &igb->hw;
-	int neg_adj = 0;
-	u64 rate;
-	u32 incvalue;
+	u64 incvalue;
 
-	if (scaled_ppm < 0) {
-		neg_adj = 1;
-		scaled_ppm = -scaled_ppm;
-	}
-
-	incvalue = INCVALUE_82576;
-	rate = mul_u64_u64_div_u64(incvalue, (u64)scaled_ppm,
-				   1000000ULL << 16);
-
-	if (neg_adj)
-		incvalue -= rate;
-	else
-		incvalue += rate;
+	incvalue = adjust_by_scaled_ppm(INCVALUE_82576, scaled_ppm);
 
 	wr32(E1000_TIMINCA, INCPERIOD_82576 | (incvalue & INCVALUE_82576_MASK));
 
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c
index f8605f57bd06..fd3f77a9e28d 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c
@@ -451,21 +451,11 @@ static int ixgbe_ptp_adjfine_82599(struct ptp_clock_info *ptp, long scaled_ppm)
 	struct ixgbe_adapter *adapter =
 		container_of(ptp, struct ixgbe_adapter, ptp_caps);
 	struct ixgbe_hw *hw = &adapter->hw;
-	u64 incval, diff;
-	int neg_adj = 0;
-
-	if (scaled_ppm < 0) {
-		neg_adj = 1;
-		scaled_ppm = -scaled_ppm;
-	}
+	u64 incval;
 
 	smp_mb();
 	incval = READ_ONCE(adapter->base_incval);
-
-	diff = mul_u64_u64_div_u64(incval, scaled_ppm,
-				   1000000ULL << 16);
-
-	incval = neg_adj ? (incval - diff) : (incval + diff);
+	incval = adjust_by_scaled_ppm(incval, scaled_ppm);
 
 	switch (hw->mac.type) {
 	case ixgbe_mac_X540:
@@ -502,17 +492,11 @@ static int ixgbe_ptp_adjfine_X550(struct ptp_clock_info *ptp, long scaled_ppm)
 	struct ixgbe_adapter *adapter =
 			container_of(ptp, struct ixgbe_adapter, ptp_caps);
 	struct ixgbe_hw *hw = &adapter->hw;
-	int neg_adj = 0;
+	bool neg_adj;
 	u64 rate;
 	u32 inca;
 
-	if (scaled_ppm < 0) {
-		neg_adj = 1;
-		scaled_ppm = -scaled_ppm;
-	}
-
-	rate = mul_u64_u64_div_u64(IXGBE_X550_BASE_PERIOD, scaled_ppm,
-				   1000000ULL << 16);
+	neg_adj = diff_by_scaled_ppm(IXGBE_X550_BASE_PERIOD, scaled_ppm, &rate);
 
 	/* warn if rate is too large */
 	if (rate >= INCVALUE_MASK)
diff --git a/include/linux/ptp_clock_kernel.h b/include/linux/ptp_clock_kernel.h
index ad4aaadc2f7a..f4781c5766d6 100644
--- a/include/linux/ptp_clock_kernel.h
+++ b/include/linux/ptp_clock_kernel.h
@@ -248,6 +248,52 @@ static inline long scaled_ppm_to_ppb(long ppm)
 	return (long)ppb;
 }
 
+/**
+ * diff_by_scaled_ppm - Calculate difference using scaled ppm
+ * @base: the base increment value to adjust
+ * @scaled_ppm: scaled parts per million to adjust by
+ * @diff: on return, the absolute value of calculated diff
+ *
+ * Calculate the difference to adjust the base increment using scaled parts
+ * per million.
+ *
+ * Use mul_u64_u64_div_u64 to perform the difference calculation in avoid
+ * possible overflow.
+ *
+ * Returns: true if scaled_ppm is negative, false otherwise
+ */
+static inline bool diff_by_scaled_ppm(u64 base, long scaled_ppm, u64 *diff)
+{
+	bool negative = false;
+
+	if (scaled_ppm < 0) {
+		negative = true;
+		scaled_ppm = -scaled_ppm;
+	}
+
+	*diff = mul_u64_u64_div_u64(base, (u64)scaled_ppm, 1000000ULL << 16);
+
+	return negative;
+}
+
+/**
+ * adjust_by_scaled_ppm - Adjust a base increment by scaled parts per million
+ * @base: the base increment value to adjust
+ * @scaled_ppm: scaled parts per million frequency adjustment
+ *
+ * Helper function which calculates a new increment value based on the
+ * requested scaled parts per million adjustment.
+ */
+static inline u64 adjust_by_scaled_ppm(u64 base, long scaled_ppm)
+{
+	u64 diff;
+
+	if (diff_by_scaled_ppm(base, scaled_ppm, &diff))
+		return base - diff;
+
+	return base + diff;
+}
+
 #if IS_ENABLED(CONFIG_PTP_1588_CLOCK)
 
 /**
-- 
2.37.1.394.gc50926e1f488


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [net-next v2 3/9] drivers: convert unsupported .adjfreq to .adjfine
  2022-09-30 20:48 [net-next v2 0/9] ptp: convert drivers to .adjfine Jacob Keller
  2022-09-30 20:48 ` [net-next v2 1/9] ptp: add missing documentation for parameters Jacob Keller
  2022-09-30 20:48 ` [net-next v2 2/9] ptp: introduce helpers to adjust by scaled parts per million Jacob Keller
@ 2022-09-30 20:48 ` Jacob Keller
  2022-09-30 20:48 ` [net-next v2 4/9] ptp: mlx4: convert to .adjfine and adjust_by_scaled_ppm Jacob Keller
                   ` (7 subsequent siblings)
  10 siblings, 0 replies; 15+ messages in thread
From: Jacob Keller @ 2022-09-30 20:48 UTC (permalink / raw)
  To: netdev
  Cc: Jacob Keller, K. Y. Srinivasan, Haiyang Zhang, Stephen Hemminger,
	Wei Liu, Dexuan Cui, Tom Lendacky, Shyam Sundar S K,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Siva Reddy Kallam, Prashant Sreedharan, Michael Chan,
	Yisen Zhuang, Salil Mehta, Jesse Brandeburg, Tony Nguyen,
	Tariq Toukan, Saeed Mahameed, Leon Romanovsky, Bryan Whitehead,
	Sergey Shtylyov, Giuseppe Cavallaro, Alexandre Torgue,
	Jose Abreu, Maxime Coquelin, Richard Cochran, Vivek Thampi,
	VMware PV-Drivers Reviewers, Jie Wang, Guangbin Huang,
	Eran Ben Elisha, Aya Levin, Cai Huoqing, Biju Das, Lad Prabhakar,
	Phil Edworthy, Jiasheng Jiang, Gustavo A. R. Silva,
	Linus Walleij, Wan Jiabing, Lv Ruyi, Arnd Bergmann

A few PTP drivers implement a .adjfreq handler which indicates the
operation is not supported. Convert all of these to .adjfine.

Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Cc: "K. Y. Srinivasan" <kys@microsoft.com>
Cc: Haiyang Zhang <haiyangz@microsoft.com>
Cc: Stephen Hemminger <sthemmin@microsoft.com>
Cc: Wei Liu <wei.liu@kernel.org>
Cc: Dexuan Cui <decui@microsoft.com>
Cc: Richard Cochran <richardcochran@gmail.com>
Cc: Vivek Thampi <vithampi@vmware.com>
---
 drivers/hv/hv_util.c         | 4 ++--
 drivers/ptp/ptp_kvm_common.c | 4 ++--
 drivers/ptp/ptp_vmw.c        | 4 ++--
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/hv/hv_util.c b/drivers/hv/hv_util.c
index 835e6039c186..d776074b49cb 100644
--- a/drivers/hv/hv_util.c
+++ b/drivers/hv/hv_util.c
@@ -706,7 +706,7 @@ static int hv_ptp_settime(struct ptp_clock_info *p, const struct timespec64 *ts)
 	return -EOPNOTSUPP;
 }
 
-static int hv_ptp_adjfreq(struct ptp_clock_info *ptp, s32 delta)
+static int hv_ptp_adjfine(struct ptp_clock_info *ptp, long delta)
 {
 	return -EOPNOTSUPP;
 }
@@ -724,7 +724,7 @@ static struct ptp_clock_info ptp_hyperv_info = {
 	.name		= "hyperv",
 	.enable         = hv_ptp_enable,
 	.adjtime        = hv_ptp_adjtime,
-	.adjfreq        = hv_ptp_adjfreq,
+	.adjfine        = hv_ptp_adjfine,
 	.gettime64      = hv_ptp_gettime,
 	.settime64      = hv_ptp_settime,
 	.owner		= THIS_MODULE,
diff --git a/drivers/ptp/ptp_kvm_common.c b/drivers/ptp/ptp_kvm_common.c
index fcae32f56f25..9141162c4237 100644
--- a/drivers/ptp/ptp_kvm_common.c
+++ b/drivers/ptp/ptp_kvm_common.c
@@ -66,7 +66,7 @@ static int ptp_kvm_getcrosststamp(struct ptp_clock_info *ptp,
  * PTP clock operations
  */
 
-static int ptp_kvm_adjfreq(struct ptp_clock_info *ptp, s32 ppb)
+static int ptp_kvm_adjfine(struct ptp_clock_info *ptp, long delta)
 {
 	return -EOPNOTSUPP;
 }
@@ -115,7 +115,7 @@ static const struct ptp_clock_info ptp_kvm_caps = {
 	.n_ext_ts	= 0,
 	.n_pins		= 0,
 	.pps		= 0,
-	.adjfreq	= ptp_kvm_adjfreq,
+	.adjfine	= ptp_kvm_adjfine,
 	.adjtime	= ptp_kvm_adjtime,
 	.gettime64	= ptp_kvm_gettime,
 	.settime64	= ptp_kvm_settime,
diff --git a/drivers/ptp/ptp_vmw.c b/drivers/ptp/ptp_vmw.c
index 5dca26e14bdc..d64eec5b1788 100644
--- a/drivers/ptp/ptp_vmw.c
+++ b/drivers/ptp/ptp_vmw.c
@@ -47,7 +47,7 @@ static int ptp_vmw_adjtime(struct ptp_clock_info *info, s64 delta)
 	return -EOPNOTSUPP;
 }
 
-static int ptp_vmw_adjfreq(struct ptp_clock_info *info, s32 delta)
+static int ptp_vmw_adjfine(struct ptp_clock_info *info, long delta)
 {
 	return -EOPNOTSUPP;
 }
@@ -79,7 +79,7 @@ static struct ptp_clock_info ptp_vmw_clock_info = {
 	.name		= "ptp_vmw",
 	.max_adj	= 0,
 	.adjtime	= ptp_vmw_adjtime,
-	.adjfreq	= ptp_vmw_adjfreq,
+	.adjfine	= ptp_vmw_adjfine,
 	.gettime64	= ptp_vmw_gettime,
 	.settime64	= ptp_vmw_settime,
 	.enable		= ptp_vmw_enable,
-- 
2.37.1.394.gc50926e1f488


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [net-next v2 4/9] ptp: mlx4: convert to .adjfine and adjust_by_scaled_ppm
  2022-09-30 20:48 [net-next v2 0/9] ptp: convert drivers to .adjfine Jacob Keller
                   ` (2 preceding siblings ...)
  2022-09-30 20:48 ` [net-next v2 3/9] drivers: convert unsupported .adjfreq to .adjfine Jacob Keller
@ 2022-09-30 20:48 ` Jacob Keller
  2022-09-30 20:48 ` [net-next v2 5/9] ptp: mlx5: " Jacob Keller
                   ` (6 subsequent siblings)
  10 siblings, 0 replies; 15+ messages in thread
From: Jacob Keller @ 2022-09-30 20:48 UTC (permalink / raw)
  To: netdev
  Cc: Jacob Keller, K. Y. Srinivasan, Haiyang Zhang, Stephen Hemminger,
	Wei Liu, Dexuan Cui, Tom Lendacky, Shyam Sundar S K,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Siva Reddy Kallam, Prashant Sreedharan, Michael Chan,
	Yisen Zhuang, Salil Mehta, Jesse Brandeburg, Tony Nguyen,
	Tariq Toukan, Saeed Mahameed, Leon Romanovsky, Bryan Whitehead,
	Sergey Shtylyov, Giuseppe Cavallaro, Alexandre Torgue,
	Jose Abreu, Maxime Coquelin, Richard Cochran, Vivek Thampi,
	VMware PV-Drivers Reviewers, Jie Wang, Guangbin Huang,
	Eran Ben Elisha, Aya Levin, Cai Huoqing, Biju Das, Lad Prabhakar,
	Phil Edworthy, Jiasheng Jiang, Gustavo A. R. Silva,
	Linus Walleij, Wan Jiabing, Lv Ruyi, Arnd Bergmann

The mlx4 implementation of .adjfreq is implemented in terms of a
straight forward "base * ppb / 1 billion" calculation.

Convert this driver to .adjfine and use adjust_by_scaled_ppm to perform the
calculation.

Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Cc: Tariq Toukan <tariqt@nvidia.com>
---
 drivers/net/ethernet/mellanox/mlx4/en_clock.c | 29 +++++++------------
 1 file changed, 11 insertions(+), 18 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx4/en_clock.c b/drivers/net/ethernet/mellanox/mlx4/en_clock.c
index 024788549c25..98b5ffb4d729 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_clock.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_clock.c
@@ -111,34 +111,27 @@ void mlx4_en_ptp_overflow_check(struct mlx4_en_dev *mdev)
 }
 
 /**
- * mlx4_en_phc_adjfreq - adjust the frequency of the hardware clock
+ * mlx4_en_phc_adjfine - adjust the frequency of the hardware clock
  * @ptp: ptp clock structure
- * @delta: Desired frequency change in parts per billion
+ * @scaled_ppm: Desired frequency change in scaled parts per million
  *
- * Adjust the frequency of the PHC cycle counter by the indicated delta from
- * the base frequency.
+ * Adjust the frequency of the PHC cycle counter by the indicated scaled_ppm
+ * from the base frequency.
+ *
+ * Scaled parts per million is ppm with a 16-bit binary fractional field.
  **/
-static int mlx4_en_phc_adjfreq(struct ptp_clock_info *ptp, s32 delta)
+static int mlx4_en_phc_adjfine(struct ptp_clock_info *ptp, long scaled_ppm)
 {
-	u64 adj;
-	u32 diff, mult;
-	int neg_adj = 0;
+	u32 mult;
 	unsigned long flags;
 	struct mlx4_en_dev *mdev = container_of(ptp, struct mlx4_en_dev,
 						ptp_clock_info);
 
-	if (delta < 0) {
-		neg_adj = 1;
-		delta = -delta;
-	}
-	mult = mdev->nominal_c_mult;
-	adj = mult;
-	adj *= delta;
-	diff = div_u64(adj, 1000000000ULL);
+	mult = (u32)adjust_by_scaled_ppm(mdev->nominal_c_mult, scaled_ppm);
 
 	write_seqlock_irqsave(&mdev->clock_lock, flags);
 	timecounter_read(&mdev->clock);
-	mdev->cycles.mult = neg_adj ? mult - diff : mult + diff;
+	mdev->cycles.mult = mult;
 	write_sequnlock_irqrestore(&mdev->clock_lock, flags);
 
 	return 0;
@@ -237,7 +230,7 @@ static const struct ptp_clock_info mlx4_en_ptp_clock_info = {
 	.n_per_out	= 0,
 	.n_pins		= 0,
 	.pps		= 0,
-	.adjfreq	= mlx4_en_phc_adjfreq,
+	.adjfine	= mlx4_en_phc_adjfine,
 	.adjtime	= mlx4_en_phc_adjtime,
 	.gettime64	= mlx4_en_phc_gettime,
 	.settime64	= mlx4_en_phc_settime,
-- 
2.37.1.394.gc50926e1f488


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [net-next v2 5/9] ptp: mlx5: convert to .adjfine and adjust_by_scaled_ppm
  2022-09-30 20:48 [net-next v2 0/9] ptp: convert drivers to .adjfine Jacob Keller
                   ` (3 preceding siblings ...)
  2022-09-30 20:48 ` [net-next v2 4/9] ptp: mlx4: convert to .adjfine and adjust_by_scaled_ppm Jacob Keller
@ 2022-09-30 20:48 ` Jacob Keller
  2022-10-02 11:15   ` Gal Pressman
  2022-09-30 20:48 ` [net-next v2 6/9] ptp: lan743x: remove .adjfreq implementation Jacob Keller
                   ` (5 subsequent siblings)
  10 siblings, 1 reply; 15+ messages in thread
From: Jacob Keller @ 2022-09-30 20:48 UTC (permalink / raw)
  To: netdev
  Cc: Jacob Keller, K. Y. Srinivasan, Haiyang Zhang, Stephen Hemminger,
	Wei Liu, Dexuan Cui, Tom Lendacky, Shyam Sundar S K,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Siva Reddy Kallam, Prashant Sreedharan, Michael Chan,
	Yisen Zhuang, Salil Mehta, Jesse Brandeburg, Tony Nguyen,
	Tariq Toukan, Saeed Mahameed, Leon Romanovsky, Bryan Whitehead,
	Sergey Shtylyov, Giuseppe Cavallaro, Alexandre Torgue,
	Jose Abreu, Maxime Coquelin, Richard Cochran, Vivek Thampi,
	VMware PV-Drivers Reviewers, Jie Wang, Guangbin Huang,
	Eran Ben Elisha, Aya Levin, Cai Huoqing, Biju Das, Lad Prabhakar,
	Phil Edworthy, Jiasheng Jiang, Gustavo A. R. Silva,
	Linus Walleij, Wan Jiabing, Lv Ruyi, Arnd Bergmann,
	Shirly Ohnona, Gal Pressman

The mlx5 implementation of .adjfreq is implemented in terms of a
straight forward "base * ppb / 1 billion" calculation.

Convert this to the .adjfine interface and use adjust_by_scaled_ppm for the
calculation  of the new mult value.

Note that the mlx5_ptp_adjfreq_real_time function expects input in terms of
ppb, so use the scaled_ppm_to_ppb to convert before passing to this
function.

Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Tested-by: Shirly Ohnona <shirlyo@nvidia.com>
Cc: Gal Pressman <gal@nvidia.com>
Cc: Saeed Mahameed <saeedm@nvidia.com>
Cc: Leon Romanovsky <leon@kernel.org>
Cc: Aya Levin <ayal@nvidia.com>
---
 .../ethernet/mellanox/mlx5/core/lib/clock.c   | 22 +++++--------------
 1 file changed, 6 insertions(+), 16 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c b/drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c
index d3a9ae80fd30..69cfe60c558a 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c
@@ -339,35 +339,25 @@ static int mlx5_ptp_adjfreq_real_time(struct mlx5_core_dev *mdev, s32 freq)
 	return mlx5_set_mtutc(mdev, in, sizeof(in));
 }
 
-static int mlx5_ptp_adjfreq(struct ptp_clock_info *ptp, s32 delta)
+static int mlx5_ptp_adjfine(struct ptp_clock_info *ptp, long scaled_ppm)
 {
 	struct mlx5_clock *clock = container_of(ptp, struct mlx5_clock, ptp_info);
 	struct mlx5_timer *timer = &clock->timer;
 	struct mlx5_core_dev *mdev;
 	unsigned long flags;
-	int neg_adj = 0;
-	u32 diff;
-	u64 adj;
+	u32 mult;
 	int err;
 
 	mdev = container_of(clock, struct mlx5_core_dev, clock);
-	err = mlx5_ptp_adjfreq_real_time(mdev, delta);
+	err = mlx5_ptp_adjfreq_real_time(mdev, scaled_ppm_to_ppb(scaled_ppm));
 	if (err)
 		return err;
 
-	if (delta < 0) {
-		neg_adj = 1;
-		delta = -delta;
-	}
-
-	adj = timer->nominal_c_mult;
-	adj *= delta;
-	diff = div_u64(adj, 1000000000ULL);
+	mult = (u32)adjust_by_scaled_ppm(timer->nominal_c_mult, scaled_ppm);
 
 	write_seqlock_irqsave(&clock->lock, flags);
 	timecounter_read(&timer->tc);
-	timer->cycles.mult = neg_adj ? timer->nominal_c_mult - diff :
-				       timer->nominal_c_mult + diff;
+	timer->cycles.mult = mult;
 	mlx5_update_clock_info_page(mdev);
 	write_sequnlock_irqrestore(&clock->lock, flags);
 
@@ -697,7 +687,7 @@ static const struct ptp_clock_info mlx5_ptp_clock_info = {
 	.n_per_out	= 0,
 	.n_pins		= 0,
 	.pps		= 0,
-	.adjfreq	= mlx5_ptp_adjfreq,
+	.adjfine	= mlx5_ptp_adjfine,
 	.adjtime	= mlx5_ptp_adjtime,
 	.gettimex64	= mlx5_ptp_gettimex,
 	.settime64	= mlx5_ptp_settime,
-- 
2.37.1.394.gc50926e1f488


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [net-next v2 6/9] ptp: lan743x: remove .adjfreq implementation
  2022-09-30 20:48 [net-next v2 0/9] ptp: convert drivers to .adjfine Jacob Keller
                   ` (4 preceding siblings ...)
  2022-09-30 20:48 ` [net-next v2 5/9] ptp: mlx5: " Jacob Keller
@ 2022-09-30 20:48 ` Jacob Keller
  2022-09-30 20:48 ` [net-next v2 7/9] ptp: lan743x: use diff_by_scaled_ppm in .adjfine implementation Jacob Keller
                   ` (4 subsequent siblings)
  10 siblings, 0 replies; 15+ messages in thread
From: Jacob Keller @ 2022-09-30 20:48 UTC (permalink / raw)
  To: netdev
  Cc: Jacob Keller, K. Y. Srinivasan, Haiyang Zhang, Stephen Hemminger,
	Wei Liu, Dexuan Cui, Tom Lendacky, Shyam Sundar S K,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Siva Reddy Kallam, Prashant Sreedharan, Michael Chan,
	Yisen Zhuang, Salil Mehta, Jesse Brandeburg, Tony Nguyen,
	Tariq Toukan, Saeed Mahameed, Leon Romanovsky, Bryan Whitehead,
	Sergey Shtylyov, Giuseppe Cavallaro, Alexandre Torgue,
	Jose Abreu, Maxime Coquelin, Richard Cochran, Vivek Thampi,
	VMware PV-Drivers Reviewers, Jie Wang, Guangbin Huang,
	Eran Ben Elisha, Aya Levin, Cai Huoqing, Biju Das, Lad Prabhakar,
	Phil Edworthy, Jiasheng Jiang, Gustavo A. R. Silva,
	Linus Walleij, Wan Jiabing, Lv Ruyi, Arnd Bergmann,
	UNGLinuxDriver

The lan743x driver implements both .adjfreq and .adjfine, but the core PTP
subsystem prefers .adjfine if implemented. There is no reason to carry a
.adjfreq implementation, so we can remove it.

Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Cc: Bryan Whitehead <bryan.whitehead@microchip.com>
Cc: UNGLinuxDriver@microchip.com
---
 drivers/net/ethernet/microchip/lan743x_ptp.c | 35 --------------------
 1 file changed, 35 deletions(-)

diff --git a/drivers/net/ethernet/microchip/lan743x_ptp.c b/drivers/net/ethernet/microchip/lan743x_ptp.c
index 6a11e2ceb013..130f88b77cfe 100644
--- a/drivers/net/ethernet/microchip/lan743x_ptp.c
+++ b/drivers/net/ethernet/microchip/lan743x_ptp.c
@@ -365,40 +365,6 @@ static int lan743x_ptpci_adjfine(struct ptp_clock_info *ptpci, long scaled_ppm)
 	return 0;
 }
 
-static int lan743x_ptpci_adjfreq(struct ptp_clock_info *ptpci, s32 delta_ppb)
-{
-	struct lan743x_ptp *ptp =
-		container_of(ptpci, struct lan743x_ptp, ptp_clock_info);
-	struct lan743x_adapter *adapter =
-		container_of(ptp, struct lan743x_adapter, ptp);
-	u32 lan743x_rate_adj = 0;
-	bool positive = true;
-	u32 u32_delta = 0;
-	u64 u64_delta = 0;
-
-	if ((delta_ppb < (-LAN743X_PTP_MAX_FREQ_ADJ_IN_PPB)) ||
-	    delta_ppb > LAN743X_PTP_MAX_FREQ_ADJ_IN_PPB) {
-		return -EINVAL;
-	}
-	if (delta_ppb > 0) {
-		u32_delta = (u32)delta_ppb;
-		positive = true;
-	} else {
-		u32_delta = (u32)(-delta_ppb);
-		positive = false;
-	}
-	u64_delta = (((u64)u32_delta) << 35);
-	lan743x_rate_adj = div_u64(u64_delta, 1000000000);
-
-	if (positive)
-		lan743x_rate_adj |= PTP_CLOCK_RATE_ADJ_DIR_;
-
-	lan743x_csr_write(adapter, PTP_CLOCK_RATE_ADJ,
-			  lan743x_rate_adj);
-
-	return 0;
-}
-
 static int lan743x_ptpci_adjtime(struct ptp_clock_info *ptpci, s64 delta)
 {
 	struct lan743x_ptp *ptp =
@@ -1576,7 +1542,6 @@ int lan743x_ptp_open(struct lan743x_adapter *adapter)
 	ptp->ptp_clock_info.pps = LAN743X_PTP_N_PPS;
 	ptp->ptp_clock_info.pin_config = ptp->pin_config;
 	ptp->ptp_clock_info.adjfine = lan743x_ptpci_adjfine;
-	ptp->ptp_clock_info.adjfreq = lan743x_ptpci_adjfreq;
 	ptp->ptp_clock_info.adjtime = lan743x_ptpci_adjtime;
 	ptp->ptp_clock_info.gettime64 = lan743x_ptpci_gettime64;
 	ptp->ptp_clock_info.getcrosststamp = NULL;
-- 
2.37.1.394.gc50926e1f488


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [net-next v2 7/9] ptp: lan743x: use diff_by_scaled_ppm in .adjfine implementation
  2022-09-30 20:48 [net-next v2 0/9] ptp: convert drivers to .adjfine Jacob Keller
                   ` (5 preceding siblings ...)
  2022-09-30 20:48 ` [net-next v2 6/9] ptp: lan743x: remove .adjfreq implementation Jacob Keller
@ 2022-09-30 20:48 ` Jacob Keller
  2022-09-30 20:48 ` [net-next v2 8/9] ptp: ravb: convert to .adjfine and adjust_by_scaled_ppm Jacob Keller
                   ` (3 subsequent siblings)
  10 siblings, 0 replies; 15+ messages in thread
From: Jacob Keller @ 2022-09-30 20:48 UTC (permalink / raw)
  To: netdev
  Cc: Jacob Keller, K. Y. Srinivasan, Haiyang Zhang, Stephen Hemminger,
	Wei Liu, Dexuan Cui, Tom Lendacky, Shyam Sundar S K,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Siva Reddy Kallam, Prashant Sreedharan, Michael Chan,
	Yisen Zhuang, Salil Mehta, Jesse Brandeburg, Tony Nguyen,
	Tariq Toukan, Saeed Mahameed, Leon Romanovsky, Bryan Whitehead,
	Sergey Shtylyov, Giuseppe Cavallaro, Alexandre Torgue,
	Jose Abreu, Maxime Coquelin, Richard Cochran, Vivek Thampi,
	VMware PV-Drivers Reviewers, Jie Wang, Guangbin Huang,
	Eran Ben Elisha, Aya Levin, Cai Huoqing, Biju Das, Lad Prabhakar,
	Phil Edworthy, Jiasheng Jiang, Gustavo A. R. Silva,
	Linus Walleij, Wan Jiabing, Lv Ruyi, Arnd Bergmann,
	UNGLinuxDriver

Update the lan743x driver to use the recently added diff_by_scaled_ppm
helper function. This reduces the amount of code required in lan743x_ptp.c
driver file.

Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Cc: Bryan Whitehead <bryan.whitehead@microchip.com>
Cc: UNGLinuxDriver@microchip.com
---
 drivers/net/ethernet/microchip/lan743x_ptp.c | 19 ++++++-------------
 1 file changed, 6 insertions(+), 13 deletions(-)

diff --git a/drivers/net/ethernet/microchip/lan743x_ptp.c b/drivers/net/ethernet/microchip/lan743x_ptp.c
index 130f88b77cfe..c232af22ff02 100644
--- a/drivers/net/ethernet/microchip/lan743x_ptp.c
+++ b/drivers/net/ethernet/microchip/lan743x_ptp.c
@@ -339,25 +339,18 @@ static int lan743x_ptpci_adjfine(struct ptp_clock_info *ptpci, long scaled_ppm)
 	struct lan743x_adapter *adapter =
 		container_of(ptp, struct lan743x_adapter, ptp);
 	u32 lan743x_rate_adj = 0;
-	bool positive = true;
-	u64 u64_delta = 0;
+	u64 u64_delta;
 
 	if ((scaled_ppm < (-LAN743X_PTP_MAX_FINE_ADJ_IN_SCALED_PPM)) ||
 	    scaled_ppm > LAN743X_PTP_MAX_FINE_ADJ_IN_SCALED_PPM) {
 		return -EINVAL;
 	}
-	if (scaled_ppm > 0) {
-		u64_delta = (u64)scaled_ppm;
-		positive = true;
-	} else {
-		u64_delta = (u64)(-scaled_ppm);
-		positive = false;
-	}
-	u64_delta = (u64_delta << 19);
-	lan743x_rate_adj = div_u64(u64_delta, 1000000);
 
-	if (positive)
-		lan743x_rate_adj |= PTP_CLOCK_RATE_ADJ_DIR_;
+	/* diff_by_scaled_ppm returns true if the difference is negative */
+	if (diff_by_scaled_ppm(1ULL << 35, scaled_ppm, &u64_delta))
+		lan743x_rate_adj = (u32)u64_delta;
+	else
+		lan743x_rate_adj = (u32)u64_delta | PTP_CLOCK_RATE_ADJ_DIR_;
 
 	lan743x_csr_write(adapter, PTP_CLOCK_RATE_ADJ,
 			  lan743x_rate_adj);
-- 
2.37.1.394.gc50926e1f488


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [net-next v2 8/9] ptp: ravb: convert to .adjfine and adjust_by_scaled_ppm
  2022-09-30 20:48 [net-next v2 0/9] ptp: convert drivers to .adjfine Jacob Keller
                   ` (6 preceding siblings ...)
  2022-09-30 20:48 ` [net-next v2 7/9] ptp: lan743x: use diff_by_scaled_ppm in .adjfine implementation Jacob Keller
@ 2022-09-30 20:48 ` Jacob Keller
  2022-10-03 10:55   ` Sergey Shtylyov
  2022-09-30 20:48 ` [net-next v2 9/9] ptp: xgbe: " Jacob Keller
                   ` (2 subsequent siblings)
  10 siblings, 1 reply; 15+ messages in thread
From: Jacob Keller @ 2022-09-30 20:48 UTC (permalink / raw)
  To: netdev
  Cc: Jacob Keller, K. Y. Srinivasan, Haiyang Zhang, Stephen Hemminger,
	Wei Liu, Dexuan Cui, Tom Lendacky, Shyam Sundar S K,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Siva Reddy Kallam, Prashant Sreedharan, Michael Chan,
	Yisen Zhuang, Salil Mehta, Jesse Brandeburg, Tony Nguyen,
	Tariq Toukan, Saeed Mahameed, Leon Romanovsky, Bryan Whitehead,
	Sergey Shtylyov, Giuseppe Cavallaro, Alexandre Torgue,
	Jose Abreu, Maxime Coquelin, Richard Cochran, Vivek Thampi,
	VMware PV-Drivers Reviewers, Jie Wang, Guangbin Huang,
	Eran Ben Elisha, Aya Levin, Cai Huoqing, Biju Das, Lad Prabhakar,
	Phil Edworthy, Jiasheng Jiang, Gustavo A. R. Silva,
	Linus Walleij, Wan Jiabing, Lv Ruyi, Arnd Bergmann,
	linux-renesas-soc

The ravb implementation of .adjfreq is implemented in terms of a
straight forward "base * ppb / 1 billion" calculation.

Convert this driver to .adjfine and use the adjust_by_scaled_ppm helper
function to calculate the new addend.

Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Cc: Sergey Shtylyov <s.shtylyov@omp.ru>
Cc: Biju Das <biju.das.jz@bp.renesas.com>
Cc: Phil Edworthy <phil.edworthy@renesas.com>
Cc: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Cc: linux-renesas-soc@vger.kernel.org
---
 drivers/net/ethernet/renesas/ravb_ptp.c | 17 +++++------------
 1 file changed, 5 insertions(+), 12 deletions(-)

diff --git a/drivers/net/ethernet/renesas/ravb_ptp.c b/drivers/net/ethernet/renesas/ravb_ptp.c
index 87c4306d66ec..6e4ef7af27bf 100644
--- a/drivers/net/ethernet/renesas/ravb_ptp.c
+++ b/drivers/net/ethernet/renesas/ravb_ptp.c
@@ -88,24 +88,17 @@ static int ravb_ptp_update_compare(struct ravb_private *priv, u32 ns)
 }
 
 /* PTP clock operations */
-static int ravb_ptp_adjfreq(struct ptp_clock_info *ptp, s32 ppb)
+static int ravb_ptp_adjfine(struct ptp_clock_info *ptp, long scaled_ppm)
 {
 	struct ravb_private *priv = container_of(ptp, struct ravb_private,
 						 ptp.info);
 	struct net_device *ndev = priv->ndev;
 	unsigned long flags;
-	u32 diff, addend;
-	bool neg_adj = false;
+	u32 addend;
 	u32 gccr;
 
-	if (ppb < 0) {
-		neg_adj = true;
-		ppb = -ppb;
-	}
-	addend = priv->ptp.default_addend;
-	diff = div_u64((u64)addend * ppb, NSEC_PER_SEC);
-
-	addend = neg_adj ? addend - diff : addend + diff;
+	addend = (u32)adjust_by_scaled_ppm(priv->ptp.default_addend,
+					   scaled_ppm);
 
 	spin_lock_irqsave(&priv->lock, flags);
 
@@ -295,7 +288,7 @@ static const struct ptp_clock_info ravb_ptp_info = {
 	.max_adj	= 50000000,
 	.n_ext_ts	= N_EXT_TS,
 	.n_per_out	= N_PER_OUT,
-	.adjfreq	= ravb_ptp_adjfreq,
+	.adjfine	= ravb_ptp_adjfine,
 	.adjtime	= ravb_ptp_adjtime,
 	.gettime64	= ravb_ptp_gettime64,
 	.settime64	= ravb_ptp_settime64,
-- 
2.37.1.394.gc50926e1f488


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [net-next v2 9/9] ptp: xgbe: convert to .adjfine and adjust_by_scaled_ppm
  2022-09-30 20:48 [net-next v2 0/9] ptp: convert drivers to .adjfine Jacob Keller
                   ` (7 preceding siblings ...)
  2022-09-30 20:48 ` [net-next v2 8/9] ptp: ravb: convert to .adjfine and adjust_by_scaled_ppm Jacob Keller
@ 2022-09-30 20:48 ` Jacob Keller
  2022-10-03 16:54 ` [net-next v2 0/9] ptp: convert drivers to .adjfine Jakub Kicinski
  2022-10-03 17:37 ` Richard Cochran
  10 siblings, 0 replies; 15+ messages in thread
From: Jacob Keller @ 2022-09-30 20:48 UTC (permalink / raw)
  To: netdev
  Cc: Jacob Keller, K. Y. Srinivasan, Haiyang Zhang, Stephen Hemminger,
	Wei Liu, Dexuan Cui, Tom Lendacky, Shyam Sundar S K,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Siva Reddy Kallam, Prashant Sreedharan, Michael Chan,
	Yisen Zhuang, Salil Mehta, Jesse Brandeburg, Tony Nguyen,
	Tariq Toukan, Saeed Mahameed, Leon Romanovsky, Bryan Whitehead,
	Sergey Shtylyov, Giuseppe Cavallaro, Alexandre Torgue,
	Jose Abreu, Maxime Coquelin, Richard Cochran, Vivek Thampi,
	VMware PV-Drivers Reviewers, Jie Wang, Guangbin Huang,
	Eran Ben Elisha, Aya Levin, Cai Huoqing, Biju Das, Lad Prabhakar,
	Phil Edworthy, Jiasheng Jiang, Gustavo A. R. Silva,
	Linus Walleij, Wan Jiabing, Lv Ruyi, Arnd Bergmann

The xgbe implementation of .adjfreq is implemented in terms of a
straight forward "base * ppb / 1 billion" calculation.

Convert this driver to .adjfine and use adjust_by_scaled_ppm to calculate
the new addend value.

Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Acked-by: Tom Lendacky <thomas.lendacky@amd.com>
Cc: Shyam Sundar S K <Shyam-sundar.S-k@amd.com>
---
 drivers/net/ethernet/amd/xgbe/xgbe-ptp.c | 20 ++++----------------
 1 file changed, 4 insertions(+), 16 deletions(-)

diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-ptp.c b/drivers/net/ethernet/amd/xgbe/xgbe-ptp.c
index d06d260cf1e2..7051bd7cf6dc 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-ptp.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-ptp.c
@@ -134,27 +134,15 @@ static u64 xgbe_cc_read(const struct cyclecounter *cc)
 	return nsec;
 }
 
-static int xgbe_adjfreq(struct ptp_clock_info *info, s32 delta)
+static int xgbe_adjfine(struct ptp_clock_info *info, long scaled_ppm)
 {
 	struct xgbe_prv_data *pdata = container_of(info,
 						   struct xgbe_prv_data,
 						   ptp_clock_info);
 	unsigned long flags;
-	u64 adjust;
-	u32 addend, diff;
-	unsigned int neg_adjust = 0;
+	u64 addend;
 
-	if (delta < 0) {
-		neg_adjust = 1;
-		delta = -delta;
-	}
-
-	adjust = pdata->tstamp_addend;
-	adjust *= delta;
-	diff = div_u64(adjust, 1000000000UL);
-
-	addend = (neg_adjust) ? pdata->tstamp_addend - diff :
-				pdata->tstamp_addend + diff;
+	addend = adjust_by_scaled_ppm(pdata->tstamp_addend, scaled_ppm);
 
 	spin_lock_irqsave(&pdata->tstamp_lock, flags);
 
@@ -235,7 +223,7 @@ void xgbe_ptp_register(struct xgbe_prv_data *pdata)
 		 netdev_name(pdata->netdev));
 	info->owner = THIS_MODULE;
 	info->max_adj = pdata->ptpclk_rate;
-	info->adjfreq = xgbe_adjfreq;
+	info->adjfine = xgbe_adjfine;
 	info->adjtime = xgbe_adjtime;
 	info->gettime64 = xgbe_gettime;
 	info->settime64 = xgbe_settime;
-- 
2.37.1.394.gc50926e1f488


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* Re: [net-next v2 5/9] ptp: mlx5: convert to .adjfine and adjust_by_scaled_ppm
  2022-09-30 20:48 ` [net-next v2 5/9] ptp: mlx5: " Jacob Keller
@ 2022-10-02 11:15   ` Gal Pressman
  0 siblings, 0 replies; 15+ messages in thread
From: Gal Pressman @ 2022-10-02 11:15 UTC (permalink / raw)
  To: Jacob Keller, netdev
  Cc: K. Y. Srinivasan, Haiyang Zhang, Stephen Hemminger, Wei Liu,
	Dexuan Cui, Tom Lendacky, Shyam Sundar S K, David S. Miller,
	Eric Dumazet, Jakub Kicinski, Paolo Abeni, Siva Reddy Kallam,
	Prashant Sreedharan, Michael Chan, Yisen Zhuang, Salil Mehta,
	Jesse Brandeburg, Tony Nguyen, Tariq Toukan, Saeed Mahameed,
	Leon Romanovsky, Bryan Whitehead, Sergey Shtylyov,
	Giuseppe Cavallaro, Alexandre Torgue, Jose Abreu,
	Maxime Coquelin, Richard Cochran, Vivek Thampi,
	VMware PV-Drivers Reviewers, Jie Wang, Guangbin Huang,
	Eran Ben Elisha, Aya Levin, Cai Huoqing, Biju Das, Lad Prabhakar,
	Phil Edworthy, Jiasheng Jiang, Gustavo A. R. Silva,
	Linus Walleij, Wan Jiabing, Lv Ruyi, Arnd Bergmann,
	Shirly Ohnona

On 30/09/2022 23:48, Jacob Keller wrote:
> The mlx5 implementation of .adjfreq is implemented in terms of a
> straight forward "base * ppb / 1 billion" calculation.
>
> Convert this to the .adjfine interface and use adjust_by_scaled_ppm for the
> calculation  of the new mult value.
>
> Note that the mlx5_ptp_adjfreq_real_time function expects input in terms of
> ppb, so use the scaled_ppm_to_ppb to convert before passing to this
> function.
>
> Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
> Tested-by: Shirly Ohnona <shirlyo@nvidia.com>
> Cc: Gal Pressman <gal@nvidia.com>
> Cc: Saeed Mahameed <saeedm@nvidia.com>
> Cc: Leon Romanovsky <leon@kernel.org>
> Cc: Aya Levin <ayal@nvidia.com>

Looks great, thanks for the patch Jacob!

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [net-next v2 8/9] ptp: ravb: convert to .adjfine and adjust_by_scaled_ppm
  2022-09-30 20:48 ` [net-next v2 8/9] ptp: ravb: convert to .adjfine and adjust_by_scaled_ppm Jacob Keller
@ 2022-10-03 10:55   ` Sergey Shtylyov
  0 siblings, 0 replies; 15+ messages in thread
From: Sergey Shtylyov @ 2022-10-03 10:55 UTC (permalink / raw)
  To: Jacob Keller, netdev
  Cc: K. Y. Srinivasan, Haiyang Zhang, Stephen Hemminger, Wei Liu,
	Dexuan Cui, Tom Lendacky, Shyam Sundar S K, David S. Miller,
	Eric Dumazet, Jakub Kicinski, Paolo Abeni, Siva Reddy Kallam,
	Prashant Sreedharan, Michael Chan, Yisen Zhuang, Salil Mehta,
	Jesse Brandeburg, Tony Nguyen, Tariq Toukan, Saeed Mahameed,
	Leon Romanovsky, Bryan Whitehead, Giuseppe Cavallaro,
	Alexandre Torgue, Jose Abreu, Maxime Coquelin, Richard Cochran,
	Vivek Thampi, VMware PV-Drivers Reviewers, Jie Wang,
	Guangbin Huang, Eran Ben Elisha, Aya Levin, Cai Huoqing,
	Biju Das, Lad Prabhakar, Phil Edworthy, Jiasheng Jiang,
	Gustavo A. R. Silva, Linus Walleij, Wan Jiabing, Lv Ruyi,
	Arnd Bergmann, linux-renesas-soc

Hello!

On 9/30/22 11:48 PM, Jacob Keller wrote:

> The ravb implementation of .adjfreq is implemented in terms of a
> straight forward "base * ppb / 1 billion" calculation.
> 
> Convert this driver to .adjfine and use the adjust_by_scaled_ppm helper
> function to calculate the new addend.
> 
> Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
> Cc: Sergey Shtylyov <s.shtylyov@omp.ru>
> Cc: Biju Das <biju.das.jz@bp.renesas.com>
> Cc: Phil Edworthy <phil.edworthy@renesas.com>
> Cc: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
> Cc: linux-renesas-soc@vger.kernel.org

Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>

[...]

MBR, Sergey

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [net-next v2 0/9] ptp: convert drivers to .adjfine
  2022-09-30 20:48 [net-next v2 0/9] ptp: convert drivers to .adjfine Jacob Keller
                   ` (8 preceding siblings ...)
  2022-09-30 20:48 ` [net-next v2 9/9] ptp: xgbe: " Jacob Keller
@ 2022-10-03 16:54 ` Jakub Kicinski
  2022-10-03 18:04   ` Keller, Jacob E
  2022-10-03 17:37 ` Richard Cochran
  10 siblings, 1 reply; 15+ messages in thread
From: Jakub Kicinski @ 2022-10-03 16:54 UTC (permalink / raw)
  To: Jacob Keller
  Cc: netdev, K. Y. Srinivasan, Haiyang Zhang, Stephen Hemminger,
	Wei Liu, Dexuan Cui, Tom Lendacky, Shyam Sundar S K,
	David S. Miller, Eric Dumazet, Paolo Abeni, Siva Reddy Kallam,
	Prashant Sreedharan, Michael Chan, Yisen Zhuang, Salil Mehta,
	Jesse Brandeburg, Tony Nguyen, Tariq Toukan, Saeed Mahameed,
	Leon Romanovsky, Bryan Whitehead, Sergey Shtylyov,
	Giuseppe Cavallaro, Alexandre Torgue, Jose Abreu,
	Maxime Coquelin, Richard Cochran, Vivek Thampi,
	VMware PV-Drivers Reviewers, Jie Wang, Guangbin Huang,
	Eran Ben Elisha, Aya Levin, Cai Huoqing, Biju Das, Lad Prabhakar,
	Phil Edworthy, Jiasheng Jiang, Gustavo A. R. Silva,
	Linus Walleij, Wan Jiabing, Lv Ruyi, Arnd Bergmann

On Fri, 30 Sep 2022 13:48:42 -0700 Jacob Keller wrote:
> Many drivers implementing PTP have not yet migrated to the new .adjfine
> frequency adjustment implementation.

On a scale of 1 to 10 - how much do you care about this being in v6.1?

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [net-next v2 0/9] ptp: convert drivers to .adjfine
  2022-09-30 20:48 [net-next v2 0/9] ptp: convert drivers to .adjfine Jacob Keller
                   ` (9 preceding siblings ...)
  2022-10-03 16:54 ` [net-next v2 0/9] ptp: convert drivers to .adjfine Jakub Kicinski
@ 2022-10-03 17:37 ` Richard Cochran
  10 siblings, 0 replies; 15+ messages in thread
From: Richard Cochran @ 2022-10-03 17:37 UTC (permalink / raw)
  To: Jacob Keller
  Cc: netdev, K. Y. Srinivasan, Haiyang Zhang, Stephen Hemminger,
	Wei Liu, Dexuan Cui, Tom Lendacky, Shyam Sundar S K,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Siva Reddy Kallam, Prashant Sreedharan, Michael Chan,
	Yisen Zhuang, Salil Mehta, Jesse Brandeburg, Tony Nguyen,
	Tariq Toukan, Saeed Mahameed, Leon Romanovsky, Bryan Whitehead,
	Sergey Shtylyov, Giuseppe Cavallaro, Alexandre Torgue,
	Jose Abreu, Maxime Coquelin, Vivek Thampi,
	VMware PV-Drivers Reviewers, Jie Wang, Guangbin Huang,
	Eran Ben Elisha, Aya Levin, Cai Huoqing, Biju Das, Lad Prabhakar,
	Phil Edworthy, Jiasheng Jiang, Gustavo A. R. Silva,
	Linus Walleij, Wan Jiabing, Lv Ruyi, Arnd Bergmann

On Fri, Sep 30, 2022 at 01:48:42PM -0700, Jacob Keller wrote:
> Many drivers implementing PTP have not yet migrated to the new .adjfine
> frequency adjustment implementation.
> 
> A handful of these drivers use hardware with a simple increment value which
> is adjusted by multiplying by the adjustment factor and then dividing by
> 1 billion. This calculation is very easy to convert to .adjfine, by simply
> updating the divisor.
> 
> Introduce new helper functions, diff_by_scaled_ppm and adjust_by_scaled_ppm
> which perform the most common calculations used by drivers for this purpose.

For the series:

Acked-by: Richard Cochran <richardcochran@gmail.com>

^ permalink raw reply	[flat|nested] 15+ messages in thread

* RE: [net-next v2 0/9] ptp: convert drivers to .adjfine
  2022-10-03 16:54 ` [net-next v2 0/9] ptp: convert drivers to .adjfine Jakub Kicinski
@ 2022-10-03 18:04   ` Keller, Jacob E
  0 siblings, 0 replies; 15+ messages in thread
From: Keller, Jacob E @ 2022-10-03 18:04 UTC (permalink / raw)
  To: Jakub Kicinski
  Cc: netdev, K. Y. Srinivasan, Haiyang Zhang, Stephen Hemminger,
	Wei Liu, Cui, Dexuan, Tom Lendacky, Shyam Sundar S K,
	David S. Miller, Eric Dumazet, Paolo Abeni, Siva Reddy Kallam,
	Prashant Sreedharan, Michael Chan, Yisen Zhuang, Salil Mehta,
	Brandeburg, Jesse, Nguyen, Anthony L, Tariq Toukan,
	Saeed Mahameed, Leon Romanovsky, Bryan Whitehead,
	Sergey Shtylyov, Giuseppe Cavallaro, Alexandre Torgue,
	Jose Abreu, Maxime Coquelin, Richard Cochran, Thampi, Vivek,
	VMware PV-Drivers Reviewers, Jie Wang, Guangbin Huang,
	Eran Ben Elisha, Aya Levin, Cai Huoqing, Biju Das, Lad Prabhakar,
	Phil Edworthy, Jiasheng Jiang, Gustavo A. R. Silva,
	Linus Walleij, Wan Jiabing, Lv Ruyi, Arnd Bergmann



> -----Original Message-----
> From: Jakub Kicinski <kuba@kernel.org>
> Sent: Monday, October 03, 2022 9:55 AM
> To: Keller, Jacob E <jacob.e.keller@intel.com>
> Cc: netdev@vger.kernel.org; K. Y. Srinivasan <kys@microsoft.com>; Haiyang
> Zhang <haiyangz@microsoft.com>; Stephen Hemminger
> <sthemmin@microsoft.com>; Wei Liu <wei.liu@kernel.org>; Cui, Dexuan
> <decui@microsoft.com>; Tom Lendacky <thomas.lendacky@amd.com>; Shyam
> Sundar S K <Shyam-sundar.S-k@amd.com>; David S. Miller
> <davem@davemloft.net>; Eric Dumazet <edumazet@google.com>; Paolo Abeni
> <pabeni@redhat.com>; Siva Reddy Kallam <siva.kallam@broadcom.com>;
> Prashant Sreedharan <prashant@broadcom.com>; Michael Chan
> <mchan@broadcom.com>; Yisen Zhuang <yisen.zhuang@huawei.com>; Salil
> Mehta <salil.mehta@huawei.com>; Brandeburg, Jesse
> <jesse.brandeburg@intel.com>; Nguyen, Anthony L
> <anthony.l.nguyen@intel.com>; Tariq Toukan <tariqt@nvidia.com>; Saeed
> Mahameed <saeedm@nvidia.com>; Leon Romanovsky <leon@kernel.org>;
> Bryan Whitehead <bryan.whitehead@microchip.com>; Sergey Shtylyov
> <s.shtylyov@omp.ru>; Giuseppe Cavallaro <peppe.cavallaro@st.com>;
> Alexandre Torgue <alexandre.torgue@foss.st.com>; Jose Abreu
> <joabreu@synopsys.com>; Maxime Coquelin <mcoquelin.stm32@gmail.com>;
> Richard Cochran <richardcochran@gmail.com>; Thampi, Vivek
> <vithampi@vmware.com>; VMware PV-Drivers Reviewers <pv-
> drivers@vmware.com>; Jie Wang <wangjie125@huawei.com>; Guangbin Huang
> <huangguangbin2@huawei.com>; Eran Ben Elisha <eranbe@nvidia.com>; Aya
> Levin <ayal@nvidia.com>; Cai Huoqing <cai.huoqing@linux.dev>; Biju Das
> <biju.das.jz@bp.renesas.com>; Lad Prabhakar <prabhakar.mahadev-
> lad.rj@bp.renesas.com>; Phil Edworthy <phil.edworthy@renesas.com>; Jiasheng
> Jiang <jiasheng@iscas.ac.cn>; Gustavo A. R. Silva <gustavoars@kernel.org>; Linus
> Walleij <linus.walleij@linaro.org>; Wan Jiabing <wanjiabing@vivo.com>; Lv Ruyi
> <lv.ruyi@zte.com.cn>; Arnd Bergmann <arnd@arndb.de>
> Subject: Re: [net-next v2 0/9] ptp: convert drivers to .adjfine
> 
> On Fri, 30 Sep 2022 13:48:42 -0700 Jacob Keller wrote:
> > Many drivers implementing PTP have not yet migrated to the new .adjfine
> > frequency adjustment implementation.
> 
> On a scale of 1 to 10 - how much do you care about this being in v6.1?

Eh, this can probably wait till after 6.1 merge closes and we can queue it into 6.2 instead. That would give everyone a bit longer for catching any issues and more time to include fixes that won't need to be ported back to net.

I guess I'd say like a 2 or 3 then.

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2022-10-03 18:05 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-30 20:48 [net-next v2 0/9] ptp: convert drivers to .adjfine Jacob Keller
2022-09-30 20:48 ` [net-next v2 1/9] ptp: add missing documentation for parameters Jacob Keller
2022-09-30 20:48 ` [net-next v2 2/9] ptp: introduce helpers to adjust by scaled parts per million Jacob Keller
2022-09-30 20:48 ` [net-next v2 3/9] drivers: convert unsupported .adjfreq to .adjfine Jacob Keller
2022-09-30 20:48 ` [net-next v2 4/9] ptp: mlx4: convert to .adjfine and adjust_by_scaled_ppm Jacob Keller
2022-09-30 20:48 ` [net-next v2 5/9] ptp: mlx5: " Jacob Keller
2022-10-02 11:15   ` Gal Pressman
2022-09-30 20:48 ` [net-next v2 6/9] ptp: lan743x: remove .adjfreq implementation Jacob Keller
2022-09-30 20:48 ` [net-next v2 7/9] ptp: lan743x: use diff_by_scaled_ppm in .adjfine implementation Jacob Keller
2022-09-30 20:48 ` [net-next v2 8/9] ptp: ravb: convert to .adjfine and adjust_by_scaled_ppm Jacob Keller
2022-10-03 10:55   ` Sergey Shtylyov
2022-09-30 20:48 ` [net-next v2 9/9] ptp: xgbe: " Jacob Keller
2022-10-03 16:54 ` [net-next v2 0/9] ptp: convert drivers to .adjfine Jakub Kicinski
2022-10-03 18:04   ` Keller, Jacob E
2022-10-03 17:37 ` Richard Cochran

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.