netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next 0/2] ptp: add control over HW timestamp latch point
@ 2024-10-21 14:19 Arkadiusz Kubalewski
  2024-10-21 14:19 ` [PATCH net-next 1/2] " Arkadiusz Kubalewski
  2024-10-21 14:19 ` [PATCH net-next 2/2] ice: " Arkadiusz Kubalewski
  0 siblings, 2 replies; 13+ messages in thread
From: Arkadiusz Kubalewski @ 2024-10-21 14:19 UTC (permalink / raw)
  To: netdev, linux-kernel, intel-wired-lan
  Cc: anthony.l.nguyen, przemyslaw.kitszel, davem, edumazet, kuba,
	pabeni, richardcochran, Arkadiusz Kubalewski

HW support of PTP/timesync solutions in network PHY chips can be
achieved with two different approaches, the timestamp maybe latched
either in the beginning or after the Start of Frame Delimiter (SFD) [1].

Allow ptp device drivers to provide user with control over the timestamp
latch point.

[1] https://www.ieee802.org/3/cx/public/april20/tse_3cx_01_0420.pdf

Arkadiusz Kubalewski (2):
  ptp: add control over HW timestamp latch point
  ice: ptp: add control over HW timestamp latch point

 Documentation/ABI/testing/sysfs-ptp         | 12 +++++
 drivers/net/ethernet/intel/ice/ice_ptp.c    | 46 +++++++++++++++++
 drivers/net/ethernet/intel/ice/ice_ptp_hw.c | 57 +++++++++++++++++++++
 drivers/net/ethernet/intel/ice/ice_ptp_hw.h |  2 +
 drivers/ptp/ptp_sysfs.c                     | 44 ++++++++++++++++
 include/linux/ptp_clock_kernel.h            | 29 +++++++++++
 6 files changed, 190 insertions(+)

-- 
2.38.1


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

* [PATCH net-next 1/2] ptp: add control over HW timestamp latch point
  2024-10-21 14:19 [PATCH net-next 0/2] ptp: add control over HW timestamp latch point Arkadiusz Kubalewski
@ 2024-10-21 14:19 ` Arkadiusz Kubalewski
  2024-10-21 15:20   ` [Intel-wired-lan] " Paul Menzel
                     ` (2 more replies)
  2024-10-21 14:19 ` [PATCH net-next 2/2] ice: " Arkadiusz Kubalewski
  1 sibling, 3 replies; 13+ messages in thread
From: Arkadiusz Kubalewski @ 2024-10-21 14:19 UTC (permalink / raw)
  To: netdev, linux-kernel, intel-wired-lan
  Cc: anthony.l.nguyen, przemyslaw.kitszel, davem, edumazet, kuba,
	pabeni, richardcochran, Arkadiusz Kubalewski, Aleksandr Loktionov

Currently HW support of PTP/timesync solutions in network PHY chips can be
implemented with two different approaches, the timestamp maybe latched
either at the beginning or after the Start of Frame Delimiter (SFD) [1].

Allow ptp device drivers to provide user with control over the HW
timestamp latch point with ptp sysfs ABI.

[1] https://www.ieee802.org/3/cx/public/april20/tse_3cx_01_0420.pdf

Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
Signed-off-by: Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>
---
 Documentation/ABI/testing/sysfs-ptp | 12 ++++++++
 drivers/ptp/ptp_sysfs.c             | 44 +++++++++++++++++++++++++++++
 include/linux/ptp_clock_kernel.h    | 29 +++++++++++++++++++
 3 files changed, 85 insertions(+)

diff --git a/Documentation/ABI/testing/sysfs-ptp b/Documentation/ABI/testing/sysfs-ptp
index 9c317ac7c47a..a0d89e0fd72e 100644
--- a/Documentation/ABI/testing/sysfs-ptp
+++ b/Documentation/ABI/testing/sysfs-ptp
@@ -140,3 +140,15 @@ Description:
 		PPS events to the Linux PPS subsystem. To enable PPS
 		events, write a "1" into the file. To disable events,
 		write a "0" into the file.
+
+What:		/sys/class/ptp/ptp<N>/ts_point
+Date:		October 2024
+Contact:	Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>
+Description:
+		This file provides control over the point in time in
+		which the HW timestamp is latched. As specified in IEEE
+		802.3cx, the latch point can be either at the beginning
+		or after the end of Start of Frame Delimiter (SFD).
+		Value "0" means the timestamp is latched at the
+		beginning of the SFD. Value "1" means that timestamp is
+		latched after the end of SFD.
diff --git a/drivers/ptp/ptp_sysfs.c b/drivers/ptp/ptp_sysfs.c
index 6b1b8f57cd95..7e9f6ef368b6 100644
--- a/drivers/ptp/ptp_sysfs.c
+++ b/drivers/ptp/ptp_sysfs.c
@@ -28,6 +28,46 @@ static ssize_t max_phase_adjustment_show(struct device *dev,
 }
 static DEVICE_ATTR_RO(max_phase_adjustment);
 
+static ssize_t ts_point_show(struct device *dev, struct device_attribute *attr,
+			     char *page)
+{
+	struct ptp_clock *ptp = dev_get_drvdata(dev);
+	enum ptp_ts_point point;
+	int err;
+
+	if (!ptp->info->get_ts_point)
+		return -EOPNOTSUPP;
+	err = ptp->info->get_ts_point(ptp->info, &point);
+	if (err)
+		return err;
+
+	return sysfs_emit(page, "%d\n", point);
+}
+
+static ssize_t ts_point_store(struct device *dev, struct device_attribute *attr,
+			      const char *buf, size_t count)
+{
+	struct ptp_clock *ptp = dev_get_drvdata(dev);
+	enum ptp_ts_point point;
+	int err;
+	u8 val;
+
+	if (!ptp->info->set_ts_point)
+		return -EOPNOTSUPP;
+	if (kstrtou8(buf, 0, &val))
+		return -EINVAL;
+	if (val > PTP_TS_POINT_MAX)
+		return -EINVAL;
+	point = val;
+
+	err = ptp->info->set_ts_point(ptp->info, point);
+	if (err)
+		return err;
+
+	return count;
+}
+static DEVICE_ATTR_RW(ts_point);
+
 #define PTP_SHOW_INT(name, var)						\
 static ssize_t var##_show(struct device *dev,				\
 			   struct device_attribute *attr, char *page)	\
@@ -335,6 +375,7 @@ static struct attribute *ptp_attrs[] = {
 	&dev_attr_pps_enable.attr,
 	&dev_attr_n_vclocks.attr,
 	&dev_attr_max_vclocks.attr,
+	&dev_attr_ts_point.attr,
 	NULL
 };
 
@@ -363,6 +404,9 @@ static umode_t ptp_is_attribute_visible(struct kobject *kobj,
 	} else if (attr == &dev_attr_max_phase_adjustment.attr) {
 		if (!info->adjphase || !info->getmaxphase)
 			mode = 0;
+	} else if (attr == &dev_attr_ts_point.attr) {
+		if (!info->get_ts_point && !info->set_ts_point)
+			mode = 0;
 	}
 
 	return mode;
diff --git a/include/linux/ptp_clock_kernel.h b/include/linux/ptp_clock_kernel.h
index c892d22ce0a7..921d6615bd39 100644
--- a/include/linux/ptp_clock_kernel.h
+++ b/include/linux/ptp_clock_kernel.h
@@ -55,6 +55,23 @@ struct ptp_system_timestamp {
 	clockid_t clockid;
 };
 
+/**
+ * enum ptp_ts_point - possible timestamp latch points (IEEE 802.3cx)
+ * @PTP_TS_POINT_SFD:      timestamp latched at the beginning of sending Start
+ *			   of Frame Delimiter (SFD)
+ * @PTP_TS_POINT_POST_SFD: timestamp latched after the end of sending Start
+ *			   of Frame Delimiter (SFD)
+ */
+enum ptp_ts_point {
+	PTP_TS_POINT_SFD,
+	PTP_TS_POINT_POST_SFD,
+
+	/* private: */
+	__PTP_TS_POINT_MAX
+};
+
+#define PTP_TS_POINT_MAX (__PTP_TS_POINT_MAX - 1)
+
 /**
  * struct ptp_clock_info - describes a PTP hardware clock
  *
@@ -159,6 +176,14 @@ struct ptp_system_timestamp {
  *                scheduling time (>=0) or negative value in case further
  *                scheduling is not required.
  *
+ * @set_ts_point: Request change of timestamp latch point, as the timestamp
+ *                could be latched at the beginning or after the end of start
+ *                frame delimiter (SFD), as described in IEEE 802.3cx
+ *                specification.
+ *
+ * @get_ts_point: Obtain the timestamp measurement latch point, counterpart of
+ *                .set_ts_point() for getting currently configured value.
+ *
  * Drivers should embed their ptp_clock_info within a private
  * structure, obtaining a reference to it using container_of().
  *
@@ -195,6 +220,10 @@ struct ptp_clock_info {
 	int (*verify)(struct ptp_clock_info *ptp, unsigned int pin,
 		      enum ptp_pin_function func, unsigned int chan);
 	long (*do_aux_work)(struct ptp_clock_info *ptp);
+	int (*set_ts_point)(struct ptp_clock_info *ptp,
+			    enum ptp_ts_point point);
+	int (*get_ts_point)(struct ptp_clock_info *ptp,
+			    enum ptp_ts_point *point);
 };
 
 struct ptp_clock;
-- 
2.38.1


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

* [PATCH net-next 2/2] ice: ptp: add control over HW timestamp latch point
  2024-10-21 14:19 [PATCH net-next 0/2] ptp: add control over HW timestamp latch point Arkadiusz Kubalewski
  2024-10-21 14:19 ` [PATCH net-next 1/2] " Arkadiusz Kubalewski
@ 2024-10-21 14:19 ` Arkadiusz Kubalewski
  2024-10-21 15:34   ` [Intel-wired-lan] " Paul Menzel
  2024-10-22 13:40   ` Simon Horman
  1 sibling, 2 replies; 13+ messages in thread
From: Arkadiusz Kubalewski @ 2024-10-21 14:19 UTC (permalink / raw)
  To: netdev, linux-kernel, intel-wired-lan
  Cc: anthony.l.nguyen, przemyslaw.kitszel, davem, edumazet, kuba,
	pabeni, richardcochran, Arkadiusz Kubalewski, Aleksandr Loktionov

Allow user to control the latch point of ptp HW timestamps in E825
devices.

Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
Signed-off-by: Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>
---
 drivers/net/ethernet/intel/ice/ice_ptp.c    | 46 +++++++++++++++++
 drivers/net/ethernet/intel/ice/ice_ptp_hw.c | 57 +++++++++++++++++++++
 drivers/net/ethernet/intel/ice/ice_ptp_hw.h |  2 +
 3 files changed, 105 insertions(+)

diff --git a/drivers/net/ethernet/intel/ice/ice_ptp.c b/drivers/net/ethernet/intel/ice/ice_ptp.c
index a999fface272..47444412ed9a 100644
--- a/drivers/net/ethernet/intel/ice/ice_ptp.c
+++ b/drivers/net/ethernet/intel/ice/ice_ptp.c
@@ -2509,6 +2509,50 @@ static int ice_ptp_parse_sdp_entries(struct ice_pf *pf, __le16 *entries,
 	return 0;
 }
 
+/**
+ * ice_get_ts_point - get the tx timestamp latch point
+ * @info: the driver's PTP info structure
+ * @point: return the configured tx timestamp latch point
+ *
+ * Return: 0 on success, negative on failure.
+ */
+static int
+ice_get_ts_point(struct ptp_clock_info *info, enum ptp_ts_point *point)
+{
+	struct ice_pf *pf = ptp_info_to_pf(info);
+	struct ice_hw *hw = &pf->hw;
+	bool sfd_ena;
+	int ret;
+
+	ice_ptp_lock(hw);
+	ret = ice_ptp_hw_ts_point_get(hw, &sfd_ena);
+	ice_ptp_unlock(hw);
+	if (!ret)
+		*point = sfd_ena ? PTP_TS_POINT_SFD : PTP_TS_POINT_POST_SFD;
+
+	return ret;
+}
+
+/**
+ * ice_set_ts_point - set the tx timestamp latch point
+ * @info: the driver's PTP info structure
+ * @point: requested tx timestamp latch point
+ */
+static int
+ice_set_ts_point(struct ptp_clock_info *info, enum ptp_ts_point point)
+{
+	bool sfd_ena = point == PTP_TS_POINT_SFD ? true : false;
+	struct ice_pf *pf = ptp_info_to_pf(info);
+	struct ice_hw *hw = &pf->hw;
+	int ret;
+
+	ice_ptp_lock(hw);
+	ret = ice_ptp_hw_ts_point_set(hw, sfd_ena);
+	ice_ptp_unlock(hw);
+
+	return ret;
+}
+
 /**
  * ice_ptp_set_funcs_e82x - Set specialized functions for E82X support
  * @pf: Board private structure
@@ -2529,6 +2573,8 @@ static void ice_ptp_set_funcs_e82x(struct ice_pf *pf)
 	if (ice_is_e825c(&pf->hw)) {
 		pf->ptp.ice_pin_desc = ice_pin_desc_e825c;
 		pf->ptp.info.n_pins = ICE_PIN_DESC_ARR_LEN(ice_pin_desc_e825c);
+		pf->ptp.info.set_ts_point = ice_set_ts_point;
+		pf->ptp.info.get_ts_point = ice_get_ts_point;
 	} else {
 		pf->ptp.ice_pin_desc = ice_pin_desc_e82x;
 		pf->ptp.info.n_pins = ICE_PIN_DESC_ARR_LEN(ice_pin_desc_e82x);
diff --git a/drivers/net/ethernet/intel/ice/ice_ptp_hw.c b/drivers/net/ethernet/intel/ice/ice_ptp_hw.c
index da88c6ccfaeb..d81525bc8a16 100644
--- a/drivers/net/ethernet/intel/ice/ice_ptp_hw.c
+++ b/drivers/net/ethernet/intel/ice/ice_ptp_hw.c
@@ -6303,3 +6303,60 @@ int ice_cgu_get_output_pin_state_caps(struct ice_hw *hw, u8 pin_id,
 
 	return 0;
 }
+
+/**
+ * ice_ptp_hw_ts_point_get - check if tx timestamping is latched on/post SFD
+ * @hw: pointer to the HW struct
+ * @sfd_ena: on success true if tx timestamping latched at beginning of SFD,
+ *	false if post sfd
+ *
+ * Verify if HW timestamping point is configured to measure at the beginning or
+ * post of SFD (Start of Frame Delimiter)
+ *
+ * Return: 0 on success, negative on error
+ */
+int ice_ptp_hw_ts_point_get(struct ice_hw *hw, bool *sfd_ena)
+{
+	u8 port = hw->port_info->lport;
+	u32 val;
+	int err;
+
+	err = ice_read_mac_reg_eth56g(hw, port, PHY_MAC_XIF_MODE, &val);
+	if (err)
+		return err;
+	if (val | PHY_MAC_XIF_TS_SFD_ENA_M)
+		*sfd_ena = true;
+	else
+		*sfd_ena = false;
+
+	return err;
+}
+
+/**
+ * ice_ptp_hw_ts_point_set - configure timestamping on/post SFD
+ * @hw: pointer to the HW struct
+ * @sfd_ena: true to enable timestamping at beginning of SFD, false post sfd
+ *
+ * Configure timestamping to measure at the beginning/post SFD (Start of Frame
+ * Delimiter)
+ *
+ * Return: 0 on success, negative on error
+ */
+int ice_ptp_hw_ts_point_set(struct ice_hw *hw, bool sfd_ena)
+{
+	u8 port = hw->port_info->lport;
+	int err, val;
+
+	err = ice_read_mac_reg_eth56g(hw, port, PHY_MAC_XIF_MODE, &val);
+	if (err)
+		return err;
+	if ((val | PHY_MAC_XIF_TS_SFD_ENA_M && sfd_ena) ||
+	    (!(val | PHY_MAC_XIF_TS_SFD_ENA_M) && !sfd_ena))
+		return -EINVAL;
+	if (sfd_ena)
+		val |= PHY_MAC_XIF_TS_SFD_ENA_M;
+	else
+		val &= ~PHY_MAC_XIF_TS_SFD_ENA_M;
+
+	return ice_write_mac_reg_eth56g(hw, port, PHY_MAC_XIF_MODE, val);
+}
diff --git a/drivers/net/ethernet/intel/ice/ice_ptp_hw.h b/drivers/net/ethernet/intel/ice/ice_ptp_hw.h
index 656daff3447e..cefedd01479a 100644
--- a/drivers/net/ethernet/intel/ice/ice_ptp_hw.h
+++ b/drivers/net/ethernet/intel/ice/ice_ptp_hw.h
@@ -348,6 +348,8 @@ void ice_ptp_init_hw(struct ice_hw *hw);
 int ice_get_phy_tx_tstamp_ready(struct ice_hw *hw, u8 block, u64 *tstamp_ready);
 int ice_ptp_one_port_cmd(struct ice_hw *hw, u8 configured_port,
 			 enum ice_ptp_tmr_cmd configured_cmd);
+int ice_ptp_hw_ts_point_get(struct ice_hw *hw, bool *sfd_ena);
+int ice_ptp_hw_ts_point_set(struct ice_hw *hw, bool sfd_ena);
 
 /* E822 family functions */
 int ice_read_quad_reg_e82x(struct ice_hw *hw, u8 quad, u16 offset, u32 *val);
-- 
2.38.1


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

* Re: [Intel-wired-lan] [PATCH net-next 1/2] ptp: add control over HW timestamp latch point
  2024-10-21 14:19 ` [PATCH net-next 1/2] " Arkadiusz Kubalewski
@ 2024-10-21 15:20   ` Paul Menzel
  2024-10-22 13:24     ` Kubalewski, Arkadiusz
  2024-10-21 22:31   ` Jacob Keller
  2024-10-23  2:12   ` Richard Cochran
  2 siblings, 1 reply; 13+ messages in thread
From: Paul Menzel @ 2024-10-21 15:20 UTC (permalink / raw)
  To: Arkadiusz Kubalewski
  Cc: netdev, linux-kernel, intel-wired-lan, anthony.l.nguyen,
	przemyslaw.kitszel, davem, edumazet, kuba, pabeni, richardcochran,
	Aleksandr Loktionov

Dear Arkadiusz,


Thank you for your patch.

Am 21.10.24 um 16:19 schrieb Arkadiusz Kubalewski:
> Currently HW support of PTP/timesync solutions in network PHY chips can be
> implemented with two different approaches, the timestamp maybe latched
> either at the beginning or after the Start of Frame Delimiter (SFD) [1].
> 
> Allow ptp device drivers to provide user with control over the HW
> timestamp latch point with ptp sysfs ABI.

Please describe, that it’s done using `/sys` filesystem.

How can this be tested?

> [1] https://www.ieee802.org/3/cx/public/april20/tse_3cx_01_0420.pdf
> 
> Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
> Signed-off-by: Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>
> ---
>   Documentation/ABI/testing/sysfs-ptp | 12 ++++++++
>   drivers/ptp/ptp_sysfs.c             | 44 +++++++++++++++++++++++++++++
>   include/linux/ptp_clock_kernel.h    | 29 +++++++++++++++++++
>   3 files changed, 85 insertions(+)
> 
> diff --git a/Documentation/ABI/testing/sysfs-ptp b/Documentation/ABI/testing/sysfs-ptp
> index 9c317ac7c47a..a0d89e0fd72e 100644
> --- a/Documentation/ABI/testing/sysfs-ptp
> +++ b/Documentation/ABI/testing/sysfs-ptp
> @@ -140,3 +140,15 @@ Description:
>   		PPS events to the Linux PPS subsystem. To enable PPS
>   		events, write a "1" into the file. To disable events,
>   		write a "0" into the file.
> +
> +What:		/sys/class/ptp/ptp<N>/ts_point
> +Date:		October 2024
> +Contact:	Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>
> +Description:
> +		This file provides control over the point in time in
> +		which the HW timestamp is latched. As specified in IEEE
> +		802.3cx, the latch point can be either at the beginning
> +		or after the end of Start of Frame Delimiter (SFD).
> +		Value "0" means the timestamp is latched at the
> +		beginning of the SFD. Value "1" means that timestamp is
> +		latched after the end of SFD.

Would it make sense to let it be configured by strings, so it’s clear, 
what the values mean?

1.  beginning_of_sfd
2.  end_of_sfd

> diff --git a/drivers/ptp/ptp_sysfs.c b/drivers/ptp/ptp_sysfs.c
> index 6b1b8f57cd95..7e9f6ef368b6 100644
> --- a/drivers/ptp/ptp_sysfs.c
> +++ b/drivers/ptp/ptp_sysfs.c
> @@ -28,6 +28,46 @@ static ssize_t max_phase_adjustment_show(struct device *dev,
>   }
>   static DEVICE_ATTR_RO(max_phase_adjustment);
>   
> +static ssize_t ts_point_show(struct device *dev, struct device_attribute *attr,
> +			     char *page)
> +{
> +	struct ptp_clock *ptp = dev_get_drvdata(dev);
> +	enum ptp_ts_point point;
> +	int err;
> +
> +	if (!ptp->info->get_ts_point)
> +		return -EOPNOTSUPP;
> +	err = ptp->info->get_ts_point(ptp->info, &point);
> +	if (err)
> +		return err;
> +
> +	return sysfs_emit(page, "%d\n", point);
> +}
> +
> +static ssize_t ts_point_store(struct device *dev, struct device_attribute *attr,
> +			      const char *buf, size_t count)
> +{
> +	struct ptp_clock *ptp = dev_get_drvdata(dev);
> +	enum ptp_ts_point point;
> +	int err;
> +	u8 val;
> +
> +	if (!ptp->info->set_ts_point)
> +		return -EOPNOTSUPP;
> +	if (kstrtou8(buf, 0, &val))
> +		return -EINVAL;
> +	if (val > PTP_TS_POINT_MAX)
> +		return -EINVAL;
> +	point = val;
> +
> +	err = ptp->info->set_ts_point(ptp->info, point);
> +	if (err)
> +		return err;
> +
> +	return count;
> +}
> +static DEVICE_ATTR_RW(ts_point);
> +
>   #define PTP_SHOW_INT(name, var)						\
>   static ssize_t var##_show(struct device *dev,				\
>   			   struct device_attribute *attr, char *page)	\
> @@ -335,6 +375,7 @@ static struct attribute *ptp_attrs[] = {
>   	&dev_attr_pps_enable.attr,
>   	&dev_attr_n_vclocks.attr,
>   	&dev_attr_max_vclocks.attr,
> +	&dev_attr_ts_point.attr,
>   	NULL
>   };
>   
> @@ -363,6 +404,9 @@ static umode_t ptp_is_attribute_visible(struct kobject *kobj,
>   	} else if (attr == &dev_attr_max_phase_adjustment.attr) {
>   		if (!info->adjphase || !info->getmaxphase)
>   			mode = 0;
> +	} else if (attr == &dev_attr_ts_point.attr) {
> +		if (!info->get_ts_point && !info->set_ts_point)
> +			mode = 0;
>   	}
>   
>   	return mode;
> diff --git a/include/linux/ptp_clock_kernel.h b/include/linux/ptp_clock_kernel.h
> index c892d22ce0a7..921d6615bd39 100644
> --- a/include/linux/ptp_clock_kernel.h
> +++ b/include/linux/ptp_clock_kernel.h
> @@ -55,6 +55,23 @@ struct ptp_system_timestamp {
>   	clockid_t clockid;
>   };
>   
> +/**
> + * enum ptp_ts_point - possible timestamp latch points (IEEE 802.3cx)
> + * @PTP_TS_POINT_SFD:      timestamp latched at the beginning of sending Start

The alignment of the start of the description looks strange with the 
second line being further right.

> + *			   of Frame Delimiter (SFD)
> + * @PTP_TS_POINT_POST_SFD: timestamp latched after the end of sending Start
> + *			   of Frame Delimiter (SFD)
> + */
> +enum ptp_ts_point {
> +	PTP_TS_POINT_SFD,
> +	PTP_TS_POINT_POST_SFD,
> +
> +	/* private: */
> +	__PTP_TS_POINT_MAX
> +};
> +
> +#define PTP_TS_POINT_MAX (__PTP_TS_POINT_MAX - 1)
> +
>   /**
>    * struct ptp_clock_info - describes a PTP hardware clock
>    *
> @@ -159,6 +176,14 @@ struct ptp_system_timestamp {
>    *                scheduling time (>=0) or negative value in case further
>    *                scheduling is not required.
>    *
> + * @set_ts_point: Request change of timestamp latch point, as the timestamp
> + *                could be latched at the beginning or after the end of start
> + *                frame delimiter (SFD), as described in IEEE 802.3cx
> + *                specification.
> + *
> + * @get_ts_point: Obtain the timestamp measurement latch point, counterpart of
> + *                .set_ts_point() for getting currently configured value.
> + *
>    * Drivers should embed their ptp_clock_info within a private
>    * structure, obtaining a reference to it using container_of().
>    *
> @@ -195,6 +220,10 @@ struct ptp_clock_info {
>   	int (*verify)(struct ptp_clock_info *ptp, unsigned int pin,
>   		      enum ptp_pin_function func, unsigned int chan);
>   	long (*do_aux_work)(struct ptp_clock_info *ptp);
> +	int (*set_ts_point)(struct ptp_clock_info *ptp,
> +			    enum ptp_ts_point point);
> +	int (*get_ts_point)(struct ptp_clock_info *ptp,
> +			    enum ptp_ts_point *point);
>   };
>   
>   struct ptp_clock;


Kind regards,

Paul

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

* Re: [Intel-wired-lan] [PATCH net-next 2/2] ice: ptp: add control over HW timestamp latch point
  2024-10-21 14:19 ` [PATCH net-next 2/2] ice: " Arkadiusz Kubalewski
@ 2024-10-21 15:34   ` Paul Menzel
  2024-10-22 13:24     ` Kubalewski, Arkadiusz
  2024-10-22 13:40   ` Simon Horman
  1 sibling, 1 reply; 13+ messages in thread
From: Paul Menzel @ 2024-10-21 15:34 UTC (permalink / raw)
  To: Arkadiusz Kubalewski
  Cc: netdev, linux-kernel, intel-wired-lan, anthony.l.nguyen,
	przemyslaw.kitszel, davem, edumazet, kuba, pabeni, richardcochran,
	Aleksandr Loktionov

Dear Arkadiusz,


Thank you for the patch.

Am 21.10.24 um 16:19 schrieb Arkadiusz Kubalewski:
> Allow user to control the latch point of ptp HW timestamps in E825
> devices.

Please give an example how to configure it.

> Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
> Signed-off-by: Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>
> ---
>   drivers/net/ethernet/intel/ice/ice_ptp.c    | 46 +++++++++++++++++
>   drivers/net/ethernet/intel/ice/ice_ptp_hw.c | 57 +++++++++++++++++++++
>   drivers/net/ethernet/intel/ice/ice_ptp_hw.h |  2 +
>   3 files changed, 105 insertions(+)
> 
> diff --git a/drivers/net/ethernet/intel/ice/ice_ptp.c b/drivers/net/ethernet/intel/ice/ice_ptp.c
> index a999fface272..47444412ed9a 100644
> --- a/drivers/net/ethernet/intel/ice/ice_ptp.c
> +++ b/drivers/net/ethernet/intel/ice/ice_ptp.c
> @@ -2509,6 +2509,50 @@ static int ice_ptp_parse_sdp_entries(struct ice_pf *pf, __le16 *entries,
>   	return 0;
>   }
>   
> +/**
> + * ice_get_ts_point - get the tx timestamp latch point
> + * @info: the driver's PTP info structure
> + * @point: return the configured tx timestamp latch point
> + *
> + * Return: 0 on success, negative on failure.
> + */
> +static int
> +ice_get_ts_point(struct ptp_clock_info *info, enum ptp_ts_point *point)
> +{
> +	struct ice_pf *pf = ptp_info_to_pf(info);
> +	struct ice_hw *hw = &pf->hw;
> +	bool sfd_ena;
> +	int ret;
> +
> +	ice_ptp_lock(hw);
> +	ret = ice_ptp_hw_ts_point_get(hw, &sfd_ena);
> +	ice_ptp_unlock(hw);
> +	if (!ret)
> +		*point = sfd_ena ? PTP_TS_POINT_SFD : PTP_TS_POINT_POST_SFD;
> +
> +	return ret;
> +}
> +
> +/**
> + * ice_set_ts_point - set the tx timestamp latch point
> + * @info: the driver's PTP info structure
> + * @point: requested tx timestamp latch point
> + */
> +static int
> +ice_set_ts_point(struct ptp_clock_info *info, enum ptp_ts_point point)
> +{
> +	bool sfd_ena = point == PTP_TS_POINT_SFD ? true : false;
> +	struct ice_pf *pf = ptp_info_to_pf(info);
> +	struct ice_hw *hw = &pf->hw;
> +	int ret;
> +
> +	ice_ptp_lock(hw);
> +	ret = ice_ptp_hw_ts_point_set(hw, sfd_ena);
> +	ice_ptp_unlock(hw);
> +
> +	return ret;
> +}
> +
>   /**
>    * ice_ptp_set_funcs_e82x - Set specialized functions for E82X support
>    * @pf: Board private structure
> @@ -2529,6 +2573,8 @@ static void ice_ptp_set_funcs_e82x(struct ice_pf *pf)
>   	if (ice_is_e825c(&pf->hw)) {
>   		pf->ptp.ice_pin_desc = ice_pin_desc_e825c;
>   		pf->ptp.info.n_pins = ICE_PIN_DESC_ARR_LEN(ice_pin_desc_e825c);
> +		pf->ptp.info.set_ts_point = ice_set_ts_point;
> +		pf->ptp.info.get_ts_point = ice_get_ts_point;
>   	} else {
>   		pf->ptp.ice_pin_desc = ice_pin_desc_e82x;
>   		pf->ptp.info.n_pins = ICE_PIN_DESC_ARR_LEN(ice_pin_desc_e82x);
> diff --git a/drivers/net/ethernet/intel/ice/ice_ptp_hw.c b/drivers/net/ethernet/intel/ice/ice_ptp_hw.c
> index da88c6ccfaeb..d81525bc8a16 100644
> --- a/drivers/net/ethernet/intel/ice/ice_ptp_hw.c
> +++ b/drivers/net/ethernet/intel/ice/ice_ptp_hw.c
> @@ -6303,3 +6303,60 @@ int ice_cgu_get_output_pin_state_caps(struct ice_hw *hw, u8 pin_id,
>   
>   	return 0;
>   }
> +
> +/**
> + * ice_ptp_hw_ts_point_get - check if tx timestamping is latched on/post SFD
> + * @hw: pointer to the HW struct
> + * @sfd_ena: on success true if tx timestamping latched at beginning of SFD,
> + *	false if post sfd
> + *
> + * Verify if HW timestamping point is configured to measure at the beginning or
> + * post of SFD (Start of Frame Delimiter)
> + *
> + * Return: 0 on success, negative on error
> + */
> +int ice_ptp_hw_ts_point_get(struct ice_hw *hw, bool *sfd_ena)
> +{
> +	u8 port = hw->port_info->lport;
> +	u32 val;
> +	int err;
> +
> +	err = ice_read_mac_reg_eth56g(hw, port, PHY_MAC_XIF_MODE, &val);
> +	if (err)
> +		return err;
> +	if (val | PHY_MAC_XIF_TS_SFD_ENA_M)
> +		*sfd_ena = true;
> +	else
> +		*sfd_ena = false;

Use ternary operator?

> +
> +	return err;

As the function returns `int`, use integers (macros) instead of boolean?

> +}
> +
> +/**
> + * ice_ptp_hw_ts_point_set - configure timestamping on/post SFD
> + * @hw: pointer to the HW struct
> + * @sfd_ena: true to enable timestamping at beginning of SFD, false post sfd
> + *
> + * Configure timestamping to measure at the beginning/post SFD (Start of Frame
> + * Delimiter)
> + *
> + * Return: 0 on success, negative on error
> + */
> +int ice_ptp_hw_ts_point_set(struct ice_hw *hw, bool sfd_ena)
> +{
> +	u8 port = hw->port_info->lport;
> +	int err, val;
> +
> +	err = ice_read_mac_reg_eth56g(hw, port, PHY_MAC_XIF_MODE, &val);
> +	if (err)
> +		return err;
> +	if ((val | PHY_MAC_XIF_TS_SFD_ENA_M && sfd_ena) ||
> +	    (!(val | PHY_MAC_XIF_TS_SFD_ENA_M) && !sfd_ena))
> +		return -EINVAL;
> +	if (sfd_ena)
> +		val |= PHY_MAC_XIF_TS_SFD_ENA_M;
> +	else
> +		val &= ~PHY_MAC_XIF_TS_SFD_ENA_M;
> +
> +	return ice_write_mac_reg_eth56g(hw, port, PHY_MAC_XIF_MODE, val);
> +}
> diff --git a/drivers/net/ethernet/intel/ice/ice_ptp_hw.h b/drivers/net/ethernet/intel/ice/ice_ptp_hw.h
> index 656daff3447e..cefedd01479a 100644
> --- a/drivers/net/ethernet/intel/ice/ice_ptp_hw.h
> +++ b/drivers/net/ethernet/intel/ice/ice_ptp_hw.h
> @@ -348,6 +348,8 @@ void ice_ptp_init_hw(struct ice_hw *hw);
>   int ice_get_phy_tx_tstamp_ready(struct ice_hw *hw, u8 block, u64 *tstamp_ready);
>   int ice_ptp_one_port_cmd(struct ice_hw *hw, u8 configured_port,
>   			 enum ice_ptp_tmr_cmd configured_cmd);
> +int ice_ptp_hw_ts_point_get(struct ice_hw *hw, bool *sfd_ena);
> +int ice_ptp_hw_ts_point_set(struct ice_hw *hw, bool sfd_ena);
>   
>   /* E822 family functions */
>   int ice_read_quad_reg_e82x(struct ice_hw *hw, u8 quad, u16 offset, u32 *val);


Kind regards,

Paul

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

* Re: [Intel-wired-lan] [PATCH net-next 1/2] ptp: add control over HW timestamp latch point
  2024-10-21 14:19 ` [PATCH net-next 1/2] " Arkadiusz Kubalewski
  2024-10-21 15:20   ` [Intel-wired-lan] " Paul Menzel
@ 2024-10-21 22:31   ` Jacob Keller
  2024-10-22 14:51     ` Kubalewski, Arkadiusz
  2024-10-23  2:12   ` Richard Cochran
  2 siblings, 1 reply; 13+ messages in thread
From: Jacob Keller @ 2024-10-21 22:31 UTC (permalink / raw)
  To: Arkadiusz Kubalewski, netdev, linux-kernel, intel-wired-lan
  Cc: anthony.l.nguyen, przemyslaw.kitszel, davem, edumazet, kuba,
	pabeni, richardcochran, Aleksandr Loktionov



On 10/21/2024 7:19 AM, Arkadiusz Kubalewski wrote:
> Currently HW support of PTP/timesync solutions in network PHY chips can be
> implemented with two different approaches, the timestamp maybe latched
> either at the beginning or after the Start of Frame Delimiter (SFD) [1].
> 
> Allow ptp device drivers to provide user with control over the HW
> timestamp latch point with ptp sysfs ABI.
> 
> [1] https://www.ieee802.org/3/cx/public/april20/tse_3cx_01_0420.pdf
> 
> Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
> Signed-off-by: Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>
> ---
>  Documentation/ABI/testing/sysfs-ptp | 12 ++++++++
>  drivers/ptp/ptp_sysfs.c             | 44 +++++++++++++++++++++++++++++
>  include/linux/ptp_clock_kernel.h    | 29 +++++++++++++++++++
>  3 files changed, 85 insertions(+)
> 
> diff --git a/Documentation/ABI/testing/sysfs-ptp b/Documentation/ABI/testing/sysfs-ptp
> index 9c317ac7c47a..a0d89e0fd72e 100644
> --- a/Documentation/ABI/testing/sysfs-ptp
> +++ b/Documentation/ABI/testing/sysfs-ptp
> @@ -140,3 +140,15 @@ Description:
>  		PPS events to the Linux PPS subsystem. To enable PPS
>  		events, write a "1" into the file. To disable events,
>  		write a "0" into the file.
> +
> +What:		/sys/class/ptp/ptp<N>/ts_point
> +Date:		October 2024
> +Contact:	Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>
> +Description:
> +		This file provides control over the point in time in
> +		which the HW timestamp is latched. As specified in IEEE
> +		802.3cx, the latch point can be either at the beginning
> +		or after the end of Start of Frame Delimiter (SFD).
> +		Value "0" means the timestamp is latched at the
> +		beginning of the SFD. Value "1" means that timestamp is
> +		latched after the end of SFD.
> diff --git a/drivers/ptp/ptp_sysfs.c b/drivers/ptp/ptp_sysfs.c
> index 6b1b8f57cd95..7e9f6ef368b6 100644
> --- a/drivers/ptp/ptp_sysfs.c
> +++ b/drivers/ptp/ptp_sysfs.c
> @@ -28,6 +28,46 @@ static ssize_t max_phase_adjustment_show(struct device *dev,
>  }
>  static DEVICE_ATTR_RO(max_phase_adjustment);
>  
> +static ssize_t ts_point_show(struct device *dev, struct device_attribute *attr,
> +			     char *page)
> +{
> +	struct ptp_clock *ptp = dev_get_drvdata(dev);
> +	enum ptp_ts_point point;
> +	int err;
> +
> +	if (!ptp->info->get_ts_point)
> +		return -EOPNOTSUPP;
> +	err = ptp->info->get_ts_point(ptp->info, &point);
> +	if (err)
> +		return err;
> +
> +	return sysfs_emit(page, "%d\n", point);
> +}
> +

Ok, so if the driver doesn't support this API, we just return EOPNOTSUPP
and don't support the API then.

Presumably hardware which doesn't timestamp according to this standard
would then simply not support the API?


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

* RE: [Intel-wired-lan] [PATCH net-next 1/2] ptp: add control over HW timestamp latch point
  2024-10-21 15:20   ` [Intel-wired-lan] " Paul Menzel
@ 2024-10-22 13:24     ` Kubalewski, Arkadiusz
  0 siblings, 0 replies; 13+ messages in thread
From: Kubalewski, Arkadiusz @ 2024-10-22 13:24 UTC (permalink / raw)
  To: Paul Menzel
  Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
	intel-wired-lan@lists.osuosl.org, Nguyen, Anthony L,
	Kitszel, Przemyslaw, davem@davemloft.net, edumazet@google.com,
	kuba@kernel.org, pabeni@redhat.com, richardcochran@gmail.com,
	Loktionov, Aleksandr

>From: Paul Menzel <pmenzel@molgen.mpg.de>
>Sent: Monday, October 21, 2024 5:21 PM
>
>Dear Arkadiusz,
>
>
>Thank you for your patch.

Thank you for the review!

>
>Am 21.10.24 um 16:19 schrieb Arkadiusz Kubalewski:
>> Currently HW support of PTP/timesync solutions in network PHY chips can
>> be
>> implemented with two different approaches, the timestamp maybe latched
>> either at the beginning or after the Start of Frame Delimiter (SFD) [1].
>>
>> Allow ptp device drivers to provide user with control over the HW
>> timestamp latch point with ptp sysfs ABI.
>
>Please describe, that it’s done using `/sys` filesystem.
>
>How can this be tested?

Sure, will add some example/description.

>
>> [1] https://www.ieee802.org/3/cx/public/april20/tse_3cx_01_0420.pdf
>>
>> Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
>> Signed-off-by: Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>
>> ---
>>   Documentation/ABI/testing/sysfs-ptp | 12 ++++++++
>>   drivers/ptp/ptp_sysfs.c             | 44 +++++++++++++++++++++++++++++
>>   include/linux/ptp_clock_kernel.h    | 29 +++++++++++++++++++
>>   3 files changed, 85 insertions(+)
>>
>> diff --git a/Documentation/ABI/testing/sysfs-ptp
>> b/Documentation/ABI/testing/sysfs-ptp
>> index 9c317ac7c47a..a0d89e0fd72e 100644
>> --- a/Documentation/ABI/testing/sysfs-ptp
>> +++ b/Documentation/ABI/testing/sysfs-ptp
>> @@ -140,3 +140,15 @@ Description:
>>   		PPS events to the Linux PPS subsystem. To enable PPS
>>   		events, write a "1" into the file. To disable events,
>>   		write a "0" into the file.
>> +
>> +What:		/sys/class/ptp/ptp<N>/ts_point
>> +Date:		October 2024
>> +Contact:	Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>
>> +Description:
>> +		This file provides control over the point in time in
>> +		which the HW timestamp is latched. As specified in IEEE
>> +		802.3cx, the latch point can be either at the beginning
>> +		or after the end of Start of Frame Delimiter (SFD).
>> +		Value "0" means the timestamp is latched at the
>> +		beginning of the SFD. Value "1" means that timestamp is
>> +		latched after the end of SFD.
>
>Would it make sense to let it be configured by strings, so it’s clear,
>what the values mean?
>
>1.  beginning_of_sfd
>2.  end_of_sfd

Actually I don't have strong opinion here. I don't know much sysfs files which
take strings as arguments, thus started with numeric values. And from
'consistency' perspective it is much more common to use numeric enum values.

But, as I said, I could change it, just not sure if that is actually better.

Any other opinions?

>
>> diff --git a/drivers/ptp/ptp_sysfs.c b/drivers/ptp/ptp_sysfs.c
>> index 6b1b8f57cd95..7e9f6ef368b6 100644
>> --- a/drivers/ptp/ptp_sysfs.c
>> +++ b/drivers/ptp/ptp_sysfs.c
>> @@ -28,6 +28,46 @@ static ssize_t max_phase_adjustment_show(struct device
>> *dev,
>>   }
>>   static DEVICE_ATTR_RO(max_phase_adjustment);
>>
>> +static ssize_t ts_point_show(struct device *dev, struct device_attribute
>> *attr,
>> +			     char *page)
>> +{
>> +	struct ptp_clock *ptp = dev_get_drvdata(dev);
>> +	enum ptp_ts_point point;
>> +	int err;
>> +
>> +	if (!ptp->info->get_ts_point)
>> +		return -EOPNOTSUPP;
>> +	err = ptp->info->get_ts_point(ptp->info, &point);
>> +	if (err)
>> +		return err;
>> +
>> +	return sysfs_emit(page, "%d\n", point);
>> +}
>> +
>> +static ssize_t ts_point_store(struct device *dev, struct
>> device_attribute *attr,
>> +			      const char *buf, size_t count)
>> +{
>> +	struct ptp_clock *ptp = dev_get_drvdata(dev);
>> +	enum ptp_ts_point point;
>> +	int err;
>> +	u8 val;
>> +
>> +	if (!ptp->info->set_ts_point)
>> +		return -EOPNOTSUPP;
>> +	if (kstrtou8(buf, 0, &val))
>> +		return -EINVAL;
>> +	if (val > PTP_TS_POINT_MAX)
>> +		return -EINVAL;
>> +	point = val;
>> +
>> +	err = ptp->info->set_ts_point(ptp->info, point);
>> +	if (err)
>> +		return err;
>> +
>> +	return count;
>> +}
>> +static DEVICE_ATTR_RW(ts_point);
>> +
>>   #define PTP_SHOW_INT(name, var)						\
>>   static ssize_t var##_show(struct device *dev,				\
>>   			   struct device_attribute *attr, char *page)	\
>> @@ -335,6 +375,7 @@ static struct attribute *ptp_attrs[] = {
>>   	&dev_attr_pps_enable.attr,
>>   	&dev_attr_n_vclocks.attr,
>>   	&dev_attr_max_vclocks.attr,
>> +	&dev_attr_ts_point.attr,
>>   	NULL
>>   };
>>
>> @@ -363,6 +404,9 @@ static umode_t ptp_is_attribute_visible(struct
>> kobject *kobj,
>>   	} else if (attr == &dev_attr_max_phase_adjustment.attr) {
>>   		if (!info->adjphase || !info->getmaxphase)
>>   			mode = 0;
>> +	} else if (attr == &dev_attr_ts_point.attr) {
>> +		if (!info->get_ts_point && !info->set_ts_point)
>> +			mode = 0;
>>   	}
>>
>>   	return mode;
>> diff --git a/include/linux/ptp_clock_kernel.h
>> b/include/linux/ptp_clock_kernel.h
>> index c892d22ce0a7..921d6615bd39 100644
>> --- a/include/linux/ptp_clock_kernel.h
>> +++ b/include/linux/ptp_clock_kernel.h
>> @@ -55,6 +55,23 @@ struct ptp_system_timestamp {
>>   	clockid_t clockid;
>>   };
>>
>> +/**
>> + * enum ptp_ts_point - possible timestamp latch points (IEEE 802.3cx)
>> + * @PTP_TS_POINT_SFD:      timestamp latched at the beginning of sending
>> Start
>
>The alignment of the start of the description looks strange with the
>second line being further right.
>

True, will try to fix it.

>> + *			   of Frame Delimiter (SFD)
>> + * @PTP_TS_POINT_POST_SFD: timestamp latched after the end of sending
>> Start
>> + *			   of Frame Delimiter (SFD)
>> + */
>> +enum ptp_ts_point {
>> +	PTP_TS_POINT_SFD,
>> +	PTP_TS_POINT_POST_SFD,
>> +
>> +	/* private: */
>> +	__PTP_TS_POINT_MAX
>> +};
>> +
>> +#define PTP_TS_POINT_MAX (__PTP_TS_POINT_MAX - 1)
>> +
>>   /**
>>    * struct ptp_clock_info - describes a PTP hardware clock
>>    *
>> @@ -159,6 +176,14 @@ struct ptp_system_timestamp {
>>    *                scheduling time (>=0) or negative value in case
>> further
>>    *                scheduling is not required.
>>    *
>> + * @set_ts_point: Request change of timestamp latch point, as the
>> timestamp
>> + *                could be latched at the beginning or after the end of
>> start
>> + *                frame delimiter (SFD), as described in IEEE 802.3cx
>> + *                specification.
>> + *
>> + * @get_ts_point: Obtain the timestamp measurement latch point,
>> counterpart of
>> + *                .set_ts_point() for getting currently configured
>> value.
>> + *
>>    * Drivers should embed their ptp_clock_info within a private
>>    * structure, obtaining a reference to it using container_of().
>>    *
>> @@ -195,6 +220,10 @@ struct ptp_clock_info {
>>   	int (*verify)(struct ptp_clock_info *ptp, unsigned int pin,
>>   		      enum ptp_pin_function func, unsigned int chan);
>>   	long (*do_aux_work)(struct ptp_clock_info *ptp);
>> +	int (*set_ts_point)(struct ptp_clock_info *ptp,
>> +			    enum ptp_ts_point point);
>> +	int (*get_ts_point)(struct ptp_clock_info *ptp,
>> +			    enum ptp_ts_point *point);
>>   };
>>
>>   struct ptp_clock;
>
>
>Kind regards,
>
>Paul

Thank you!
Arkadiusz

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

* RE: [Intel-wired-lan] [PATCH net-next 2/2] ice: ptp: add control over HW timestamp latch point
  2024-10-21 15:34   ` [Intel-wired-lan] " Paul Menzel
@ 2024-10-22 13:24     ` Kubalewski, Arkadiusz
  0 siblings, 0 replies; 13+ messages in thread
From: Kubalewski, Arkadiusz @ 2024-10-22 13:24 UTC (permalink / raw)
  To: Paul Menzel
  Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
	intel-wired-lan@lists.osuosl.org, Nguyen, Anthony L,
	Kitszel, Przemyslaw, davem@davemloft.net, edumazet@google.com,
	kuba@kernel.org, pabeni@redhat.com, richardcochran@gmail.com,
	Loktionov, Aleksandr

>From: Paul Menzel <pmenzel@molgen.mpg.de>
>Sent: Monday, October 21, 2024 5:34 PM
>
>Dear Arkadiusz,
>
>
>Thank you for the patch.

Thank you for the review!

>
>Am 21.10.24 um 16:19 schrieb Arkadiusz Kubalewski:
>> Allow user to control the latch point of ptp HW timestamps in E825
>> devices.
>
>Please give an example how to configure it.

Sure will do.

>
>> Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
>> Signed-off-by: Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>
>> ---
>>   drivers/net/ethernet/intel/ice/ice_ptp.c    | 46 +++++++++++++++++
>>   drivers/net/ethernet/intel/ice/ice_ptp_hw.c | 57 +++++++++++++++++++++
>>   drivers/net/ethernet/intel/ice/ice_ptp_hw.h |  2 +
>>   3 files changed, 105 insertions(+)
>>
>> diff --git a/drivers/net/ethernet/intel/ice/ice_ptp.c
>> b/drivers/net/ethernet/intel/ice/ice_ptp.c
>> index a999fface272..47444412ed9a 100644
>> --- a/drivers/net/ethernet/intel/ice/ice_ptp.c
>> +++ b/drivers/net/ethernet/intel/ice/ice_ptp.c
>> @@ -2509,6 +2509,50 @@ static int ice_ptp_parse_sdp_entries(struct ice_pf
>> *pf, __le16 *entries,
>>   	return 0;
>>   }
>>
>> +/**
>> + * ice_get_ts_point - get the tx timestamp latch point
>> + * @info: the driver's PTP info structure
>> + * @point: return the configured tx timestamp latch point
>> + *
>> + * Return: 0 on success, negative on failure.
>> + */
>> +static int
>> +ice_get_ts_point(struct ptp_clock_info *info, enum ptp_ts_point *point)
>> +{
>> +	struct ice_pf *pf = ptp_info_to_pf(info);
>> +	struct ice_hw *hw = &pf->hw;
>> +	bool sfd_ena;
>> +	int ret;
>> +
>> +	ice_ptp_lock(hw);
>> +	ret = ice_ptp_hw_ts_point_get(hw, &sfd_ena);
>> +	ice_ptp_unlock(hw);
>> +	if (!ret)
>> +		*point = sfd_ena ? PTP_TS_POINT_SFD : PTP_TS_POINT_POST_SFD;
>> +
>> +	return ret;
>> +}
>> +
>> +/**
>> + * ice_set_ts_point - set the tx timestamp latch point
>> + * @info: the driver's PTP info structure
>> + * @point: requested tx timestamp latch point
>> + */
>> +static int
>> +ice_set_ts_point(struct ptp_clock_info *info, enum ptp_ts_point point)
>> +{
>> +	bool sfd_ena = point == PTP_TS_POINT_SFD ? true : false;
>> +	struct ice_pf *pf = ptp_info_to_pf(info);
>> +	struct ice_hw *hw = &pf->hw;
>> +	int ret;
>> +
>> +	ice_ptp_lock(hw);
>> +	ret = ice_ptp_hw_ts_point_set(hw, sfd_ena);
>> +	ice_ptp_unlock(hw);
>> +
>> +	return ret;
>> +}
>> +
>>   /**
>>    * ice_ptp_set_funcs_e82x - Set specialized functions for E82X support
>>    * @pf: Board private structure
>> @@ -2529,6 +2573,8 @@ static void ice_ptp_set_funcs_e82x(struct ice_pf
>> *pf)
>>   	if (ice_is_e825c(&pf->hw)) {
>>   		pf->ptp.ice_pin_desc = ice_pin_desc_e825c;
>>   		pf->ptp.info.n_pins = ICE_PIN_DESC_ARR_LEN(ice_pin_desc_e825c);
>> +		pf->ptp.info.set_ts_point = ice_set_ts_point;
>> +		pf->ptp.info.get_ts_point = ice_get_ts_point;
>>   	} else {
>>   		pf->ptp.ice_pin_desc = ice_pin_desc_e82x;
>>   		pf->ptp.info.n_pins = ICE_PIN_DESC_ARR_LEN(ice_pin_desc_e82x);
>> diff --git a/drivers/net/ethernet/intel/ice/ice_ptp_hw.c
>> b/drivers/net/ethernet/intel/ice/ice_ptp_hw.c
>> index da88c6ccfaeb..d81525bc8a16 100644
>> --- a/drivers/net/ethernet/intel/ice/ice_ptp_hw.c
>> +++ b/drivers/net/ethernet/intel/ice/ice_ptp_hw.c
>> @@ -6303,3 +6303,60 @@ int ice_cgu_get_output_pin_state_caps(struct
>> ice_hw *hw, u8 pin_id,
>>
>>   	return 0;
>>   }
>> +
>> +/**
>> + * ice_ptp_hw_ts_point_get - check if tx timestamping is latched on/post
>> SFD
>> + * @hw: pointer to the HW struct
>> + * @sfd_ena: on success true if tx timestamping latched at beginning of
>> SFD,
>> + *	false if post sfd
>> + *
>> + * Verify if HW timestamping point is configured to measure at the
>> beginning or
>> + * post of SFD (Start of Frame Delimiter)
>> + *
>> + * Return: 0 on success, negative on error
>> + */
>> +int ice_ptp_hw_ts_point_get(struct ice_hw *hw, bool *sfd_ena)
>> +{
>> +	u8 port = hw->port_info->lport;
>> +	u32 val;
>> +	int err;
>> +
>> +	err = ice_read_mac_reg_eth56g(hw, port, PHY_MAC_XIF_MODE, &val);
>> +	if (err)
>> +		return err;
>> +	if (val | PHY_MAC_XIF_TS_SFD_ENA_M)
>> +		*sfd_ena = true;
>> +	else
>> +		*sfd_ena = false;
>
>Use ternary operator?
>

Ok, will do.

>> +
>> +	return err;
>
>As the function returns `int`, use integers (macros) instead of boolean?
>

Sure, will fix in next version.

>> +}
>> +
>> +/**
>> + * ice_ptp_hw_ts_point_set - configure timestamping on/post SFD
>> + * @hw: pointer to the HW struct
>> + * @sfd_ena: true to enable timestamping at beginning of SFD, false post
>> sfd
>> + *
>> + * Configure timestamping to measure at the beginning/post SFD (Start of
>> Frame
>> + * Delimiter)
>> + *
>> + * Return: 0 on success, negative on error
>> + */
>> +int ice_ptp_hw_ts_point_set(struct ice_hw *hw, bool sfd_ena)
>> +{
>> +	u8 port = hw->port_info->lport;
>> +	int err, val;
>> +
>> +	err = ice_read_mac_reg_eth56g(hw, port, PHY_MAC_XIF_MODE, &val);
>> +	if (err)
>> +		return err;
>> +	if ((val | PHY_MAC_XIF_TS_SFD_ENA_M && sfd_ena) ||
>> +	    (!(val | PHY_MAC_XIF_TS_SFD_ENA_M) && !sfd_ena))
>> +		return -EINVAL;
>> +	if (sfd_ena)
>> +		val |= PHY_MAC_XIF_TS_SFD_ENA_M;
>> +	else
>> +		val &= ~PHY_MAC_XIF_TS_SFD_ENA_M;
>> +
>> +	return ice_write_mac_reg_eth56g(hw, port, PHY_MAC_XIF_MODE, val);
>> +}
>> diff --git a/drivers/net/ethernet/intel/ice/ice_ptp_hw.h
>> b/drivers/net/ethernet/intel/ice/ice_ptp_hw.h
>> index 656daff3447e..cefedd01479a 100644
>> --- a/drivers/net/ethernet/intel/ice/ice_ptp_hw.h
>> +++ b/drivers/net/ethernet/intel/ice/ice_ptp_hw.h
>> @@ -348,6 +348,8 @@ void ice_ptp_init_hw(struct ice_hw *hw);
>>   int ice_get_phy_tx_tstamp_ready(struct ice_hw *hw, u8 block, u64
>> *tstamp_ready);
>>   int ice_ptp_one_port_cmd(struct ice_hw *hw, u8 configured_port,
>>   			 enum ice_ptp_tmr_cmd configured_cmd);
>> +int ice_ptp_hw_ts_point_get(struct ice_hw *hw, bool *sfd_ena);
>> +int ice_ptp_hw_ts_point_set(struct ice_hw *hw, bool sfd_ena);
>>
>>   /* E822 family functions */
>>   int ice_read_quad_reg_e82x(struct ice_hw *hw, u8 quad, u16 offset, u32
>> *val);
>
>
>Kind regards,
>
>Paul

Thank you!
Arkadiusz

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

* Re: [PATCH net-next 2/2] ice: ptp: add control over HW timestamp latch point
  2024-10-21 14:19 ` [PATCH net-next 2/2] ice: " Arkadiusz Kubalewski
  2024-10-21 15:34   ` [Intel-wired-lan] " Paul Menzel
@ 2024-10-22 13:40   ` Simon Horman
  2024-10-22 14:52     ` Kubalewski, Arkadiusz
  1 sibling, 1 reply; 13+ messages in thread
From: Simon Horman @ 2024-10-22 13:40 UTC (permalink / raw)
  To: Arkadiusz Kubalewski
  Cc: netdev, linux-kernel, intel-wired-lan, anthony.l.nguyen,
	przemyslaw.kitszel, davem, edumazet, kuba, pabeni, richardcochran,
	Aleksandr Loktionov

On Mon, Oct 21, 2024 at 04:19:55PM +0200, Arkadiusz Kubalewski wrote:
> Allow user to control the latch point of ptp HW timestamps in E825
> devices.
> 
> Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
> Signed-off-by: Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>
> ---
>  drivers/net/ethernet/intel/ice/ice_ptp.c    | 46 +++++++++++++++++
>  drivers/net/ethernet/intel/ice/ice_ptp_hw.c | 57 +++++++++++++++++++++
>  drivers/net/ethernet/intel/ice/ice_ptp_hw.h |  2 +
>  3 files changed, 105 insertions(+)
> 
> diff --git a/drivers/net/ethernet/intel/ice/ice_ptp.c b/drivers/net/ethernet/intel/ice/ice_ptp.c
> index a999fface272..47444412ed9a 100644
> --- a/drivers/net/ethernet/intel/ice/ice_ptp.c
> +++ b/drivers/net/ethernet/intel/ice/ice_ptp.c
> @@ -2509,6 +2509,50 @@ static int ice_ptp_parse_sdp_entries(struct ice_pf *pf, __le16 *entries,
>  	return 0;
>  }
>  
> +/**
> + * ice_get_ts_point - get the tx timestamp latch point
> + * @info: the driver's PTP info structure
> + * @point: return the configured tx timestamp latch point
> + *
> + * Return: 0 on success, negative on failure.
> + */
> +static int
> +ice_get_ts_point(struct ptp_clock_info *info, enum ptp_ts_point *point)
> +{
> +	struct ice_pf *pf = ptp_info_to_pf(info);
> +	struct ice_hw *hw = &pf->hw;
> +	bool sfd_ena;
> +	int ret;
> +
> +	ice_ptp_lock(hw);
> +	ret = ice_ptp_hw_ts_point_get(hw, &sfd_ena);
> +	ice_ptp_unlock(hw);
> +	if (!ret)
> +		*point = sfd_ena ? PTP_TS_POINT_SFD : PTP_TS_POINT_POST_SFD;
> +
> +	return ret;
> +}
> +
> +/**
> + * ice_set_ts_point - set the tx timestamp latch point
> + * @info: the driver's PTP info structure
> + * @point: requested tx timestamp latch point

nit: Please include documentation of the return value,
     as was done for ice_get_ts_point.

     Flagged by ./scripts/kernel-doc -none -Warn

> + */
> +static int
> +ice_set_ts_point(struct ptp_clock_info *info, enum ptp_ts_point point)
> +{
> +	bool sfd_ena = point == PTP_TS_POINT_SFD ? true : false;
> +	struct ice_pf *pf = ptp_info_to_pf(info);
> +	struct ice_hw *hw = &pf->hw;
> +	int ret;
> +
> +	ice_ptp_lock(hw);
> +	ret = ice_ptp_hw_ts_point_set(hw, sfd_ena);
> +	ice_ptp_unlock(hw);
> +
> +	return ret;
> +}
> +
>  /**
>   * ice_ptp_set_funcs_e82x - Set specialized functions for E82X support
>   * @pf: Board private structure

...

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

* RE: [Intel-wired-lan] [PATCH net-next 1/2] ptp: add control over HW timestamp latch point
  2024-10-21 22:31   ` Jacob Keller
@ 2024-10-22 14:51     ` Kubalewski, Arkadiusz
  0 siblings, 0 replies; 13+ messages in thread
From: Kubalewski, Arkadiusz @ 2024-10-22 14:51 UTC (permalink / raw)
  To: Keller, Jacob E, netdev@vger.kernel.org,
	linux-kernel@vger.kernel.org, intel-wired-lan@lists.osuosl.org
  Cc: Nguyen, Anthony L, Kitszel, Przemyslaw, davem@davemloft.net,
	edumazet@google.com, kuba@kernel.org, pabeni@redhat.com,
	richardcochran@gmail.com, Loktionov, Aleksandr

>From: Keller, Jacob E <jacob.e.keller@intel.com>
>Sent: Tuesday, October 22, 2024 12:31 AM
>
>
>On 10/21/2024 7:19 AM, Arkadiusz Kubalewski wrote:
>> Currently HW support of PTP/timesync solutions in network PHY chips can
>> be
>> implemented with two different approaches, the timestamp maybe latched
>> either at the beginning or after the Start of Frame Delimiter (SFD) [1].
>>
>> Allow ptp device drivers to provide user with control over the HW
>> timestamp latch point with ptp sysfs ABI.
>>
>> [1] https://www.ieee802.org/3/cx/public/april20/tse_3cx_01_0420.pdf
>>
>> Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
>> Signed-off-by: Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>
>> ---
>>  Documentation/ABI/testing/sysfs-ptp | 12 ++++++++
>>  drivers/ptp/ptp_sysfs.c             | 44 +++++++++++++++++++++++++++++
>>  include/linux/ptp_clock_kernel.h    | 29 +++++++++++++++++++
>>  3 files changed, 85 insertions(+)
>>
>> diff --git a/Documentation/ABI/testing/sysfs-ptp
>> b/Documentation/ABI/testing/sysfs-ptp
>> index 9c317ac7c47a..a0d89e0fd72e 100644
>> --- a/Documentation/ABI/testing/sysfs-ptp
>> +++ b/Documentation/ABI/testing/sysfs-ptp
>> @@ -140,3 +140,15 @@ Description:
>>  		PPS events to the Linux PPS subsystem. To enable PPS
>>  		events, write a "1" into the file. To disable events,
>>  		write a "0" into the file.
>> +
>> +What:		/sys/class/ptp/ptp<N>/ts_point
>> +Date:		October 2024
>> +Contact:	Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>
>> +Description:
>> +		This file provides control over the point in time in
>> +		which the HW timestamp is latched. As specified in IEEE
>> +		802.3cx, the latch point can be either at the beginning
>> +		or after the end of Start of Frame Delimiter (SFD).
>> +		Value "0" means the timestamp is latched at the
>> +		beginning of the SFD. Value "1" means that timestamp is
>> +		latched after the end of SFD.
>> diff --git a/drivers/ptp/ptp_sysfs.c b/drivers/ptp/ptp_sysfs.c
>> index 6b1b8f57cd95..7e9f6ef368b6 100644
>> --- a/drivers/ptp/ptp_sysfs.c
>> +++ b/drivers/ptp/ptp_sysfs.c
>> @@ -28,6 +28,46 @@ static ssize_t max_phase_adjustment_show(struct device
>> *dev,
>>  }
>>  static DEVICE_ATTR_RO(max_phase_adjustment);
>>
>> +static ssize_t ts_point_show(struct device *dev, struct device_attribute
>> *attr,
>> +			     char *page)
>> +{
>> +	struct ptp_clock *ptp = dev_get_drvdata(dev);
>> +	enum ptp_ts_point point;
>> +	int err;
>> +
>> +	if (!ptp->info->get_ts_point)
>> +		return -EOPNOTSUPP;
>> +	err = ptp->info->get_ts_point(ptp->info, &point);
>> +	if (err)
>> +		return err;
>> +
>> +	return sysfs_emit(page, "%d\n", point);
>> +}
>> +
>
>Ok, so if the driver doesn't support this API, we just return EOPNOTSUPP
>and don't support the API then.
>
>Presumably hardware which doesn't timestamp according to this standard
>would then simply not support the API?

This is tricky, I did it this way, since the driver can implement only
get_ts_point for any given HW - just to give user idea what it shall expect
(the timestamp is always latched at some point).
Setting this, on the other hand depends on the PHY, which needs to allow
control over it.
If none of the callbacks are implemented then sysfs doesn't appear, if one of
the callbacks is implemented then the sysfs will appear, but the check if
callback is present is still required.

Thank you!
Arkadiusz


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

* RE: [PATCH net-next 2/2] ice: ptp: add control over HW timestamp latch point
  2024-10-22 13:40   ` Simon Horman
@ 2024-10-22 14:52     ` Kubalewski, Arkadiusz
  0 siblings, 0 replies; 13+ messages in thread
From: Kubalewski, Arkadiusz @ 2024-10-22 14:52 UTC (permalink / raw)
  To: Simon Horman
  Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
	intel-wired-lan@lists.osuosl.org, Nguyen, Anthony L,
	Kitszel, Przemyslaw, davem@davemloft.net, edumazet@google.com,
	kuba@kernel.org, pabeni@redhat.com, richardcochran@gmail.com,
	Loktionov, Aleksandr

>From: Simon Horman <horms@kernel.org>
>Sent: Tuesday, October 22, 2024 3:40 PM
>
>On Mon, Oct 21, 2024 at 04:19:55PM +0200, Arkadiusz Kubalewski wrote:
>> Allow user to control the latch point of ptp HW timestamps in E825
>> devices.
>>
>> Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
>> Signed-off-by: Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>
>> ---
>>  drivers/net/ethernet/intel/ice/ice_ptp.c    | 46 +++++++++++++++++
>>  drivers/net/ethernet/intel/ice/ice_ptp_hw.c | 57
>> +++++++++++++++++++++  drivers/net/ethernet/intel/ice/ice_ptp_hw.h |
>> 2 +
>>  3 files changed, 105 insertions(+)
>>
>> diff --git a/drivers/net/ethernet/intel/ice/ice_ptp.c
>> b/drivers/net/ethernet/intel/ice/ice_ptp.c
>> index a999fface272..47444412ed9a 100644
>> --- a/drivers/net/ethernet/intel/ice/ice_ptp.c
>> +++ b/drivers/net/ethernet/intel/ice/ice_ptp.c
>> @@ -2509,6 +2509,50 @@ static int ice_ptp_parse_sdp_entries(struct ice_pf
>> *pf, __le16 *entries,
>>  	return 0;
>>  }
>>
>> +/**
>> + * ice_get_ts_point - get the tx timestamp latch point
>> + * @info: the driver's PTP info structure
>> + * @point: return the configured tx timestamp latch point
>> + *
>> + * Return: 0 on success, negative on failure.
>> + */
>> +static int
>> +ice_get_ts_point(struct ptp_clock_info *info, enum ptp_ts_point
>> +*point) {
>> +	struct ice_pf *pf = ptp_info_to_pf(info);
>> +	struct ice_hw *hw = &pf->hw;
>> +	bool sfd_ena;
>> +	int ret;
>> +
>> +	ice_ptp_lock(hw);
>> +	ret = ice_ptp_hw_ts_point_get(hw, &sfd_ena);
>> +	ice_ptp_unlock(hw);
>> +	if (!ret)
>> +		*point = sfd_ena ? PTP_TS_POINT_SFD : PTP_TS_POINT_POST_SFD;
>> +
>> +	return ret;
>> +}
>> +
>> +/**
>> + * ice_set_ts_point - set the tx timestamp latch point
>> + * @info: the driver's PTP info structure
>> + * @point: requested tx timestamp latch point
>
>nit: Please include documentation of the return value,
>     as was done for ice_get_ts_point.
>
>     Flagged by ./scripts/kernel-doc -none -Warn
>

Sure, will do.

Thank you!
Arkadiusz

>> + */
>> +static int
>> +ice_set_ts_point(struct ptp_clock_info *info, enum ptp_ts_point
>> +point) {
>> +	bool sfd_ena = point == PTP_TS_POINT_SFD ? true : false;
>> +	struct ice_pf *pf = ptp_info_to_pf(info);
>> +	struct ice_hw *hw = &pf->hw;
>> +	int ret;
>> +
>> +	ice_ptp_lock(hw);
>> +	ret = ice_ptp_hw_ts_point_set(hw, sfd_ena);
>> +	ice_ptp_unlock(hw);
>> +
>> +	return ret;
>> +}
>> +
>>  /**
>>   * ice_ptp_set_funcs_e82x - Set specialized functions for E82X support
>>   * @pf: Board private structure
>
>...

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

* Re: [PATCH net-next 1/2] ptp: add control over HW timestamp latch point
  2024-10-21 14:19 ` [PATCH net-next 1/2] " Arkadiusz Kubalewski
  2024-10-21 15:20   ` [Intel-wired-lan] " Paul Menzel
  2024-10-21 22:31   ` Jacob Keller
@ 2024-10-23  2:12   ` Richard Cochran
  2024-10-23  7:37     ` Kubalewski, Arkadiusz
  2 siblings, 1 reply; 13+ messages in thread
From: Richard Cochran @ 2024-10-23  2:12 UTC (permalink / raw)
  To: Arkadiusz Kubalewski
  Cc: netdev, linux-kernel, intel-wired-lan, anthony.l.nguyen,
	przemyslaw.kitszel, davem, edumazet, kuba, pabeni,
	Aleksandr Loktionov

On Mon, Oct 21, 2024 at 04:19:54PM +0200, Arkadiusz Kubalewski wrote:
> Currently HW support of PTP/timesync solutions in network PHY chips can be
> implemented with two different approaches, the timestamp maybe latched
> either at the beginning or after the Start of Frame Delimiter (SFD) [1].

Why did 802.3-2012 change the definition of the time stamp position?

Thanks,
Richard

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

* RE: [PATCH net-next 1/2] ptp: add control over HW timestamp latch point
  2024-10-23  2:12   ` Richard Cochran
@ 2024-10-23  7:37     ` Kubalewski, Arkadiusz
  0 siblings, 0 replies; 13+ messages in thread
From: Kubalewski, Arkadiusz @ 2024-10-23  7:37 UTC (permalink / raw)
  To: Richard Cochran
  Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
	intel-wired-lan@lists.osuosl.org, Nguyen, Anthony L,
	Kitszel, Przemyslaw, davem@davemloft.net, edumazet@google.com,
	kuba@kernel.org, pabeni@redhat.com, Loktionov, Aleksandr

>From: Richard Cochran <richardcochran@gmail.com>
>Sent: Wednesday, October 23, 2024 4:13 AM
>
>On Mon, Oct 21, 2024 at 04:19:54PM +0200, Arkadiusz Kubalewski wrote:
>> Currently HW support of PTP/timesync solutions in network PHY chips
>> can be implemented with two different approaches, the timestamp maybe
>> latched either at the beginning or after the Start of Frame Delimiter
>(SFD) [1].
>
>Why did 802.3-2012 change the definition of the time stamp position?
>
>Thanks,
>Richard

Good question!
Although, I don't feel like I a right person to answer this, I believe
This was the other way around and they just tried to react on the PHY
chip vendors inconsistencies.

Thank you!
Arkadiusz

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

end of thread, other threads:[~2024-10-23  7:37 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-21 14:19 [PATCH net-next 0/2] ptp: add control over HW timestamp latch point Arkadiusz Kubalewski
2024-10-21 14:19 ` [PATCH net-next 1/2] " Arkadiusz Kubalewski
2024-10-21 15:20   ` [Intel-wired-lan] " Paul Menzel
2024-10-22 13:24     ` Kubalewski, Arkadiusz
2024-10-21 22:31   ` Jacob Keller
2024-10-22 14:51     ` Kubalewski, Arkadiusz
2024-10-23  2:12   ` Richard Cochran
2024-10-23  7:37     ` Kubalewski, Arkadiusz
2024-10-21 14:19 ` [PATCH net-next 2/2] ice: " Arkadiusz Kubalewski
2024-10-21 15:34   ` [Intel-wired-lan] " Paul Menzel
2024-10-22 13:24     ` Kubalewski, Arkadiusz
2024-10-22 13:40   ` Simon Horman
2024-10-22 14:52     ` Kubalewski, Arkadiusz

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).