netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next v4 0/3] net: stmmac: allow generation of flexible PPS relative to MAC time
@ 2025-09-01  9:16 Gatien Chevallier
  2025-09-01  9:16 ` [PATCH net-next v4 1/3] time: export timespec64_add_safe() symbol Gatien Chevallier
                   ` (4 more replies)
  0 siblings, 5 replies; 7+ messages in thread
From: Gatien Chevallier @ 2025-09-01  9:16 UTC (permalink / raw)
  To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Maxime Coquelin, Alexandre Torgue, Richard Cochran,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, John Stultz,
	Thomas Gleixner, Stephen Boyd
  Cc: netdev, linux-stm32, linux-arm-kernel, linux-kernel, devicetree,
	Gatien Chevallier

When doing some testing on stm32mp2x platforms(MACv5), I noticed that
the command previously used with a MACv4 for genering a PPS signal:
echo "0 0 0 1 1" > /sys/class/ptp/ptp0/period
did not work.

This is because the arguments passed through this command must contain
the start time at which the PPS should be generated, relative to the
MAC system time. For some reason, a time set in the past seems to work
with a MACv4.

Because passing such an argument is tedious, consider that any time
set in the past is an offset regarding the MAC system time. This way,
this does not impact existing scripts and the past time use case is
handled. Edit: But maybe that's not important and we can just change
the default behavior to this.

Example to generate a flexible PPS signal that has a 1s period 3s
relative to when the command was entered:

echo "0 3 0 1 1" > /sys/class/ptp/ptp0/period

Signed-off-by: Gatien Chevallier <gatien.chevallier@foss.st.com>
---
Changes in v4:
- Export timespec64_add_safe() symbol.
- Link to v3: https://lore.kernel.org/r/20250827-relative_flex_pps-v3-0-673e77978ba2@foss.st.com

Changes in v3:
- Fix warning on braces for the switch case.
- Link to v2: https://lore.kernel.org/r/20250729-relative_flex_pps-v2-0-3e5f03525c45@foss.st.com

Changes in v2:
- Drop STMMAC_RELATIVE_FLEX_PPS config switch
- Add PTP reference clock in stm32mp13x SoCs
- Link to v1: https://lore.kernel.org/r/20250724-relative_flex_pps-v1-0-37ca65773369@foss.st.com

---
Gatien Chevallier (3):
      time: export timespec64_add_safe() symbol
      drivers: net: stmmac: handle start time set in the past for flexible PPS
      ARM: dts: stm32: add missing PTP reference clocks on stm32mp13x SoCs

 arch/arm/boot/dts/st/stm32mp131.dtsi             |  2 ++
 arch/arm/boot/dts/st/stm32mp133.dtsi             |  2 ++
 drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.c | 34 +++++++++++++++++++++++-
 kernel/time/time.c                               |  1 +
 4 files changed, 38 insertions(+), 1 deletion(-)
---
base-commit: 864ecc4a6dade82d3f70eab43dad0e277aa6fc78
change-id: 20250723-relative_flex_pps-faa2fbcaf835

Best regards,
-- 
Gatien Chevallier <gatien.chevallier@foss.st.com>


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

* [PATCH net-next v4 1/3] time: export timespec64_add_safe() symbol
  2025-09-01  9:16 [PATCH net-next v4 0/3] net: stmmac: allow generation of flexible PPS relative to MAC time Gatien Chevallier
@ 2025-09-01  9:16 ` Gatien Chevallier
  2025-09-03  9:57   ` Thomas Gleixner
  2025-09-01  9:16 ` [PATCH net-next v4 2/3] drivers: net: stmmac: handle start time set in the past for flexible PPS Gatien Chevallier
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 7+ messages in thread
From: Gatien Chevallier @ 2025-09-01  9:16 UTC (permalink / raw)
  To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Maxime Coquelin, Alexandre Torgue, Richard Cochran,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, John Stultz,
	Thomas Gleixner, Stephen Boyd
  Cc: netdev, linux-stm32, linux-arm-kernel, linux-kernel, devicetree,
	Gatien Chevallier

Export the timespec64_add_safe() symbol so that this function can be used
in modules where computation of time related is done.

Signed-off-by: Gatien Chevallier <gatien.chevallier@foss.st.com>
---
 kernel/time/time.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/kernel/time/time.c b/kernel/time/time.c
index 1b69caa87480e7615d44ef409b96c081f2d15395..0ba8e3c50d62570d7248dd02a80395cb0c51c42e 100644
--- a/kernel/time/time.c
+++ b/kernel/time/time.c
@@ -858,6 +858,7 @@ struct timespec64 timespec64_add_safe(const struct timespec64 lhs,
 
 	return res;
 }
+EXPORT_SYMBOL_GPL(timespec64_add_safe);
 
 /**
  * get_timespec64 - get user's time value into kernel space

-- 
2.25.1


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

* [PATCH net-next v4 2/3] drivers: net: stmmac: handle start time set in the past for flexible PPS
  2025-09-01  9:16 [PATCH net-next v4 0/3] net: stmmac: allow generation of flexible PPS relative to MAC time Gatien Chevallier
  2025-09-01  9:16 ` [PATCH net-next v4 1/3] time: export timespec64_add_safe() symbol Gatien Chevallier
@ 2025-09-01  9:16 ` Gatien Chevallier
  2025-09-01  9:16 ` [PATCH net-next v4 3/3] ARM: dts: stm32: add missing PTP reference clocks on stm32mp13x SoCs Gatien Chevallier
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 7+ messages in thread
From: Gatien Chevallier @ 2025-09-01  9:16 UTC (permalink / raw)
  To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Maxime Coquelin, Alexandre Torgue, Richard Cochran,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, John Stultz,
	Thomas Gleixner, Stephen Boyd
  Cc: netdev, linux-stm32, linux-arm-kernel, linux-kernel, devicetree,
	Gatien Chevallier

In case the time arguments used for flexible PPS signal generation are in
the past, consider the arguments to be a time offset relative to the MAC
system time.

This way, past time use case is handled and it avoids the tedious work
of passing an absolute time value for the flexible PPS signal generation
while not breaking existing scripts that may rely on this behavior.

Signed-off-by: Gatien Chevallier <gatien.chevallier@foss.st.com>
---
 drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.c | 34 +++++++++++++++++++++++-
 1 file changed, 33 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.c
index 3767ba495e78d210b0529ee1754e5331f2dd0a47..ecbff20771f4ecd50b34ab3f84a279ba6a7939c5 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.c
@@ -10,6 +10,8 @@
 #include "stmmac.h"
 #include "stmmac_ptp.h"
 
+#define PTP_SAFE_TIME_OFFSET_NS	500000
+
 /**
  * stmmac_adjust_freq
  *
@@ -171,7 +173,11 @@ static int stmmac_enable(struct ptp_clock_info *ptp,
 	u32 acr_value;
 
 	switch (rq->type) {
-	case PTP_CLK_REQ_PEROUT:
+	case PTP_CLK_REQ_PEROUT: {
+		struct timespec64 curr_time;
+		u64 target_ns = 0;
+		u64 ns = 0;
+
 		/* Reject requests with unsupported flags */
 		if (rq->perout.flags)
 			return -EOPNOTSUPP;
@@ -180,6 +186,31 @@ static int stmmac_enable(struct ptp_clock_info *ptp,
 
 		cfg->start.tv_sec = rq->perout.start.sec;
 		cfg->start.tv_nsec = rq->perout.start.nsec;
+
+		/* A time set in the past won't trigger the start of the flexible PPS generation for
+		 * the GMAC5. For some reason it does for the GMAC4 but setting a time in the past
+		 * should be addressed anyway. Therefore, any value set it the past is considered as
+		 * an offset compared to the current MAC system time.
+		 * Be aware that an offset too low may not trigger flexible PPS generation
+		 * if time spent in this configuration makes the targeted time already outdated.
+		 * To address this, add a safe time offset.
+		 */
+		if (!cfg->start.tv_sec && cfg->start.tv_nsec < PTP_SAFE_TIME_OFFSET_NS)
+			cfg->start.tv_nsec += PTP_SAFE_TIME_OFFSET_NS;
+
+		target_ns = cfg->start.tv_nsec + ((u64)cfg->start.tv_sec * NSEC_PER_SEC);
+
+		stmmac_get_systime(priv, priv->ptpaddr, &ns);
+		if (ns > TIME64_MAX - PTP_SAFE_TIME_OFFSET_NS)
+			return -EINVAL;
+
+		curr_time = ns_to_timespec64(ns);
+		if (target_ns < ns + PTP_SAFE_TIME_OFFSET_NS) {
+			cfg->start = timespec64_add_safe(cfg->start, curr_time);
+			if (cfg->start.tv_sec == TIME64_MAX)
+				return -EINVAL;
+		}
+
 		cfg->period.tv_sec = rq->perout.period.sec;
 		cfg->period.tv_nsec = rq->perout.period.nsec;
 
@@ -190,6 +221,7 @@ static int stmmac_enable(struct ptp_clock_info *ptp,
 					     priv->systime_flags);
 		write_unlock_irqrestore(&priv->ptp_lock, flags);
 		break;
+	}
 	case PTP_CLK_REQ_EXTTS: {
 		u8 channel;
 

-- 
2.25.1


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

* [PATCH net-next v4 3/3] ARM: dts: stm32: add missing PTP reference clocks on stm32mp13x SoCs
  2025-09-01  9:16 [PATCH net-next v4 0/3] net: stmmac: allow generation of flexible PPS relative to MAC time Gatien Chevallier
  2025-09-01  9:16 ` [PATCH net-next v4 1/3] time: export timespec64_add_safe() symbol Gatien Chevallier
  2025-09-01  9:16 ` [PATCH net-next v4 2/3] drivers: net: stmmac: handle start time set in the past for flexible PPS Gatien Chevallier
@ 2025-09-01  9:16 ` Gatien Chevallier
  2025-09-04  0:30 ` [PATCH net-next v4 0/3] net: stmmac: allow generation of flexible PPS relative to MAC time patchwork-bot+netdevbpf
  2025-09-04 11:48 ` Alexandre TORGUE
  4 siblings, 0 replies; 7+ messages in thread
From: Gatien Chevallier @ 2025-09-01  9:16 UTC (permalink / raw)
  To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Maxime Coquelin, Alexandre Torgue, Richard Cochran,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, John Stultz,
	Thomas Gleixner, Stephen Boyd
  Cc: netdev, linux-stm32, linux-arm-kernel, linux-kernel, devicetree,
	Gatien Chevallier

ETH1/2 miss their PTP reference clock in the SoC device tree. Add them
as the fallback is not correctly handled for PPS generation and it seems
there's no reason to not add them.

Signed-off-by: Gatien Chevallier <gatien.chevallier@foss.st.com>
---
 arch/arm/boot/dts/st/stm32mp131.dtsi | 2 ++
 arch/arm/boot/dts/st/stm32mp133.dtsi | 2 ++
 2 files changed, 4 insertions(+)

diff --git a/arch/arm/boot/dts/st/stm32mp131.dtsi b/arch/arm/boot/dts/st/stm32mp131.dtsi
index ace9495b9b062e9f96437681cc526fed7f9eac5e..b88953485e597dc89c48ea2e3ffd382d1de5de92 100644
--- a/arch/arm/boot/dts/st/stm32mp131.dtsi
+++ b/arch/arm/boot/dts/st/stm32mp131.dtsi
@@ -1602,11 +1602,13 @@ ethernet1: ethernet@5800a000 {
 					      "mac-clk-tx",
 					      "mac-clk-rx",
 					      "ethstp",
+					      "ptp_ref",
 					      "eth-ck";
 				clocks = <&rcc ETH1MAC>,
 					 <&rcc ETH1TX>,
 					 <&rcc ETH1RX>,
 					 <&rcc ETH1STP>,
+					 <&rcc ETH1PTP_K>,
 					 <&rcc ETH1CK_K>;
 				st,syscon = <&syscfg 0x4 0xff0000>;
 				snps,mixed-burst;
diff --git a/arch/arm/boot/dts/st/stm32mp133.dtsi b/arch/arm/boot/dts/st/stm32mp133.dtsi
index 49583137b5972572d1feaa699c0c3a822a1b6f6d..053fc669120513c7d2812a0aabe8186fe1f4fe58 100644
--- a/arch/arm/boot/dts/st/stm32mp133.dtsi
+++ b/arch/arm/boot/dts/st/stm32mp133.dtsi
@@ -81,11 +81,13 @@ ethernet2: ethernet@5800e000 {
 			      "mac-clk-tx",
 			      "mac-clk-rx",
 			      "ethstp",
+			      "ptp_ref",
 			      "eth-ck";
 		clocks = <&rcc ETH2MAC>,
 			 <&rcc ETH2TX>,
 			 <&rcc ETH2RX>,
 			 <&rcc ETH2STP>,
+			 <&rcc ETH2PTP_K>,
 			 <&rcc ETH2CK_K>;
 		st,syscon = <&syscfg 0x4 0xff000000>;
 		snps,mixed-burst;

-- 
2.25.1


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

* Re: [PATCH net-next v4 1/3] time: export timespec64_add_safe() symbol
  2025-09-01  9:16 ` [PATCH net-next v4 1/3] time: export timespec64_add_safe() symbol Gatien Chevallier
@ 2025-09-03  9:57   ` Thomas Gleixner
  0 siblings, 0 replies; 7+ messages in thread
From: Thomas Gleixner @ 2025-09-03  9:57 UTC (permalink / raw)
  To: Gatien Chevallier, Andrew Lunn, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Maxime Coquelin, Alexandre Torgue,
	Richard Cochran, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	John Stultz, Stephen Boyd
  Cc: netdev, linux-stm32, linux-arm-kernel, linux-kernel, devicetree,
	Gatien Chevallier

On Mon, Sep 01 2025 at 11:16, Gatien Chevallier wrote:

> Export the timespec64_add_safe() symbol so that this function can be used
> in modules where computation of time related is done.
>
> Signed-off-by: Gatien Chevallier <gatien.chevallier@foss.st.com>

Acked-by: Thomas Gleixner <tglx@linutronix.de>

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

* Re: [PATCH net-next v4 0/3] net: stmmac: allow generation of flexible PPS relative to MAC time
  2025-09-01  9:16 [PATCH net-next v4 0/3] net: stmmac: allow generation of flexible PPS relative to MAC time Gatien Chevallier
                   ` (2 preceding siblings ...)
  2025-09-01  9:16 ` [PATCH net-next v4 3/3] ARM: dts: stm32: add missing PTP reference clocks on stm32mp13x SoCs Gatien Chevallier
@ 2025-09-04  0:30 ` patchwork-bot+netdevbpf
  2025-09-04 11:48 ` Alexandre TORGUE
  4 siblings, 0 replies; 7+ messages in thread
From: patchwork-bot+netdevbpf @ 2025-09-04  0:30 UTC (permalink / raw)
  To: Gatien CHEVALLIER
  Cc: andrew+netdev, davem, edumazet, kuba, pabeni, mcoquelin.stm32,
	alexandre.torgue, richardcochran, robh, krzk+dt, conor+dt,
	jstultz, tglx, sboyd, netdev, linux-stm32, linux-arm-kernel,
	linux-kernel, devicetree

Hello:

This series was applied to netdev/net-next.git (main)
by Jakub Kicinski <kuba@kernel.org>:

On Mon, 1 Sep 2025 11:16:26 +0200 you wrote:
> When doing some testing on stm32mp2x platforms(MACv5), I noticed that
> the command previously used with a MACv4 for genering a PPS signal:
> echo "0 0 0 1 1" > /sys/class/ptp/ptp0/period
> did not work.
> 
> This is because the arguments passed through this command must contain
> the start time at which the PPS should be generated, relative to the
> MAC system time. For some reason, a time set in the past seems to work
> with a MACv4.
> 
> [...]

Here is the summary with links:
  - [net-next,v4,1/3] time: export timespec64_add_safe() symbol
    https://git.kernel.org/netdev/net-next/c/96c88268b79b
  - [net-next,v4,2/3] drivers: net: stmmac: handle start time set in the past for flexible PPS
    https://git.kernel.org/netdev/net-next/c/adbe2cfd8a93
  - [net-next,v4,3/3] ARM: dts: stm32: add missing PTP reference clocks on stm32mp13x SoCs
    (no matching commit)

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



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

* Re: [PATCH net-next v4 0/3] net: stmmac: allow generation of flexible PPS relative to MAC time
  2025-09-01  9:16 [PATCH net-next v4 0/3] net: stmmac: allow generation of flexible PPS relative to MAC time Gatien Chevallier
                   ` (3 preceding siblings ...)
  2025-09-04  0:30 ` [PATCH net-next v4 0/3] net: stmmac: allow generation of flexible PPS relative to MAC time patchwork-bot+netdevbpf
@ 2025-09-04 11:48 ` Alexandre TORGUE
  4 siblings, 0 replies; 7+ messages in thread
From: Alexandre TORGUE @ 2025-09-04 11:48 UTC (permalink / raw)
  To: Gatien Chevallier, Andrew Lunn, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Maxime Coquelin, Richard Cochran,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, John Stultz,
	Thomas Gleixner, Stephen Boyd
  Cc: netdev, linux-stm32, linux-arm-kernel, linux-kernel, devicetree

Hi Gatien

On 9/1/25 11:16, Gatien Chevallier wrote:
> When doing some testing on stm32mp2x platforms(MACv5), I noticed that
> the command previously used with a MACv4 for genering a PPS signal:
> echo "0 0 0 1 1" > /sys/class/ptp/ptp0/period
> did not work.
> 
> This is because the arguments passed through this command must contain
> the start time at which the PPS should be generated, relative to the
> MAC system time. For some reason, a time set in the past seems to work
> with a MACv4.
> 
> Because passing such an argument is tedious, consider that any time
> set in the past is an offset regarding the MAC system time. This way,
> this does not impact existing scripts and the past time use case is
> handled. Edit: But maybe that's not important and we can just change
> the default behavior to this.
> 
> Example to generate a flexible PPS signal that has a 1s period 3s
> relative to when the command was entered:
> 
> echo "0 3 0 1 1" > /sys/class/ptp/ptp0/period
> 
> Signed-off-by: Gatien Chevallier <gatien.chevallier@foss.st.com>
> ---
> Changes in v4:
> - Export timespec64_add_safe() symbol.
> - Link to v3: https://lore.kernel.org/r/20250827-relative_flex_pps-v3-0-673e77978ba2@foss.st.com
> 
> Changes in v3:
> - Fix warning on braces for the switch case.
> - Link to v2: https://lore.kernel.org/r/20250729-relative_flex_pps-v2-0-3e5f03525c45@foss.st.com
> 
> Changes in v2:
> - Drop STMMAC_RELATIVE_FLEX_PPS config switch
> - Add PTP reference clock in stm32mp13x SoCs
> - Link to v1: https://lore.kernel.org/r/20250724-relative_flex_pps-v1-0-37ca65773369@foss.st.com
> 
> ---
> Gatien Chevallier (3):
>        time: export timespec64_add_safe() symbol
>        drivers: net: stmmac: handle start time set in the past for flexible PPS
>        ARM: dts: stm32: add missing PTP reference clocks on stm32mp13x SoCs
> 
>   arch/arm/boot/dts/st/stm32mp131.dtsi             |  2 ++
>   arch/arm/boot/dts/st/stm32mp133.dtsi             |  2 ++
>   drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.c | 34 +++++++++++++++++++++++-
>   kernel/time/time.c                               |  1 +
>   4 files changed, 38 insertions(+), 1 deletion(-)
> ---
> base-commit: 864ecc4a6dade82d3f70eab43dad0e277aa6fc78
> change-id: 20250723-relative_flex_pps-faa2fbcaf835
> 
> Best regards,

DT patch applied on stm32-next.

Thanks!
Alex

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

end of thread, other threads:[~2025-09-04 11:49 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-09-01  9:16 [PATCH net-next v4 0/3] net: stmmac: allow generation of flexible PPS relative to MAC time Gatien Chevallier
2025-09-01  9:16 ` [PATCH net-next v4 1/3] time: export timespec64_add_safe() symbol Gatien Chevallier
2025-09-03  9:57   ` Thomas Gleixner
2025-09-01  9:16 ` [PATCH net-next v4 2/3] drivers: net: stmmac: handle start time set in the past for flexible PPS Gatien Chevallier
2025-09-01  9:16 ` [PATCH net-next v4 3/3] ARM: dts: stm32: add missing PTP reference clocks on stm32mp13x SoCs Gatien Chevallier
2025-09-04  0:30 ` [PATCH net-next v4 0/3] net: stmmac: allow generation of flexible PPS relative to MAC time patchwork-bot+netdevbpf
2025-09-04 11:48 ` Alexandre TORGUE

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