* [PATCH net v2] phy: mscc: Fix when PTP clock is register and unregister
@ 2025-08-25 6:55 Horatiu Vultur
2025-08-25 13:02 ` Vadim Fedorenko
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Horatiu Vultur @ 2025-08-25 6:55 UTC (permalink / raw)
To: andrew, hkallweit1, linux, davem, edumazet, kuba, pabeni,
richardcochran, vladimir.oltean, rmk+kernel, vadim.fedorenko,
christophe.jaillet, rosenp, viro, atenart, quentin.schulz
Cc: netdev, linux-kernel, Horatiu Vultur
It looks like that every time when the interface was set down and up the
driver was creating a new ptp clock. On top of this the function
ptp_clock_unregister was never called.
Therefore fix this by calling ptp_clock_register and initialize the
mii_ts struct inside the probe function and call ptp_clock_unregister when
driver is removed.
Fixes: 7d272e63e0979d ("net: phy: mscc: timestamping and PHC support")
Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
---
v1->v2:
- move implementation of __vsc8584_deinit_ptp into vsc8584_ptp_deinit
- drop the PHY matching and check if ptp_clock is valid.
---
drivers/net/phy/mscc/mscc.h | 4 ++++
drivers/net/phy/mscc/mscc_main.c | 4 +---
drivers/net/phy/mscc/mscc_ptp.c | 34 ++++++++++++++++++++------------
3 files changed, 26 insertions(+), 16 deletions(-)
diff --git a/drivers/net/phy/mscc/mscc.h b/drivers/net/phy/mscc/mscc.h
index b8c6ba7c7834e..2d8eca54c40a2 100644
--- a/drivers/net/phy/mscc/mscc.h
+++ b/drivers/net/phy/mscc/mscc.h
@@ -484,6 +484,7 @@ static inline void vsc8584_config_macsec_intr(struct phy_device *phydev)
void vsc85xx_link_change_notify(struct phy_device *phydev);
void vsc8584_config_ts_intr(struct phy_device *phydev);
int vsc8584_ptp_init(struct phy_device *phydev);
+void vsc8584_ptp_deinit(struct phy_device *phydev);
int vsc8584_ptp_probe_once(struct phy_device *phydev);
int vsc8584_ptp_probe(struct phy_device *phydev);
irqreturn_t vsc8584_handle_ts_interrupt(struct phy_device *phydev);
@@ -498,6 +499,9 @@ static inline int vsc8584_ptp_init(struct phy_device *phydev)
{
return 0;
}
+static inline void vsc8584_ptp_deinit(struct phy_device *phydev)
+{
+}
static inline int vsc8584_ptp_probe_once(struct phy_device *phydev)
{
return 0;
diff --git a/drivers/net/phy/mscc/mscc_main.c b/drivers/net/phy/mscc/mscc_main.c
index 800da302ae632..a034a8a8dde51 100644
--- a/drivers/net/phy/mscc/mscc_main.c
+++ b/drivers/net/phy/mscc/mscc_main.c
@@ -2370,9 +2370,7 @@ static int vsc85xx_probe(struct phy_device *phydev)
static void vsc85xx_remove(struct phy_device *phydev)
{
- struct vsc8531_private *priv = phydev->priv;
-
- skb_queue_purge(&priv->rx_skbs_list);
+ vsc8584_ptp_deinit(phydev);
}
/* Microsemi VSC85xx PHYs */
diff --git a/drivers/net/phy/mscc/mscc_ptp.c b/drivers/net/phy/mscc/mscc_ptp.c
index de6c7312e8f29..72847320cb652 100644
--- a/drivers/net/phy/mscc/mscc_ptp.c
+++ b/drivers/net/phy/mscc/mscc_ptp.c
@@ -1298,7 +1298,6 @@ static void vsc8584_set_input_clk_configured(struct phy_device *phydev)
static int __vsc8584_init_ptp(struct phy_device *phydev)
{
- struct vsc8531_private *vsc8531 = phydev->priv;
static const u32 ltc_seq_e[] = { 0, 400000, 0, 0, 0 };
static const u8 ltc_seq_a[] = { 8, 6, 5, 4, 2 };
u32 val;
@@ -1515,17 +1514,7 @@ static int __vsc8584_init_ptp(struct phy_device *phydev)
vsc85xx_ts_eth_cmp1_sig(phydev);
- vsc8531->mii_ts.rxtstamp = vsc85xx_rxtstamp;
- vsc8531->mii_ts.txtstamp = vsc85xx_txtstamp;
- vsc8531->mii_ts.hwtstamp = vsc85xx_hwtstamp;
- vsc8531->mii_ts.ts_info = vsc85xx_ts_info;
- phydev->mii_ts = &vsc8531->mii_ts;
-
- memcpy(&vsc8531->ptp->caps, &vsc85xx_clk_caps, sizeof(vsc85xx_clk_caps));
-
- vsc8531->ptp->ptp_clock = ptp_clock_register(&vsc8531->ptp->caps,
- &phydev->mdio.dev);
- return PTR_ERR_OR_ZERO(vsc8531->ptp->ptp_clock);
+ return 0;
}
void vsc8584_config_ts_intr(struct phy_device *phydev)
@@ -1552,6 +1541,16 @@ int vsc8584_ptp_init(struct phy_device *phydev)
return 0;
}
+void vsc8584_ptp_deinit(struct phy_device *phydev)
+{
+ struct vsc8531_private *vsc8531 = phydev->priv;
+
+ if (vsc8531->ptp->ptp_clock) {
+ ptp_clock_unregister(vsc8531->ptp->ptp_clock);
+ skb_queue_purge(&vsc8531->rx_skbs_list);
+ }
+}
+
irqreturn_t vsc8584_handle_ts_interrupt(struct phy_device *phydev)
{
struct vsc8531_private *priv = phydev->priv;
@@ -1612,7 +1611,16 @@ int vsc8584_ptp_probe(struct phy_device *phydev)
vsc8531->ptp->phydev = phydev;
- return 0;
+ vsc8531->mii_ts.rxtstamp = vsc85xx_rxtstamp;
+ vsc8531->mii_ts.txtstamp = vsc85xx_txtstamp;
+ vsc8531->mii_ts.hwtstamp = vsc85xx_hwtstamp;
+ vsc8531->mii_ts.ts_info = vsc85xx_ts_info;
+ phydev->mii_ts = &vsc8531->mii_ts;
+
+ memcpy(&vsc8531->ptp->caps, &vsc85xx_clk_caps, sizeof(vsc85xx_clk_caps));
+ vsc8531->ptp->ptp_clock = ptp_clock_register(&vsc8531->ptp->caps,
+ &phydev->mdio.dev);
+ return PTR_ERR_OR_ZERO(vsc8531->ptp->ptp_clock);
}
int vsc8584_ptp_probe_once(struct phy_device *phydev)
--
2.34.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH net v2] phy: mscc: Fix when PTP clock is register and unregister
2025-08-25 6:55 [PATCH net v2] phy: mscc: Fix when PTP clock is register and unregister Horatiu Vultur
@ 2025-08-25 13:02 ` Vadim Fedorenko
2025-08-25 13:47 ` Vladimir Oltean
2025-08-27 0:20 ` patchwork-bot+netdevbpf
2 siblings, 0 replies; 4+ messages in thread
From: Vadim Fedorenko @ 2025-08-25 13:02 UTC (permalink / raw)
To: Horatiu Vultur, andrew, hkallweit1, linux, davem, edumazet, kuba,
pabeni, richardcochran, vladimir.oltean, rmk+kernel,
christophe.jaillet, rosenp, viro, atenart, quentin.schulz
Cc: netdev, linux-kernel
On 25/08/2025 07:55, Horatiu Vultur wrote:
> It looks like that every time when the interface was set down and up the
> driver was creating a new ptp clock. On top of this the function
> ptp_clock_unregister was never called.
> Therefore fix this by calling ptp_clock_register and initialize the
> mii_ts struct inside the probe function and call ptp_clock_unregister when
> driver is removed.
>
> Fixes: 7d272e63e0979d ("net: phy: mscc: timestamping and PHC support")
> Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
>
LGTM,
Reviewed-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH net v2] phy: mscc: Fix when PTP clock is register and unregister
2025-08-25 6:55 [PATCH net v2] phy: mscc: Fix when PTP clock is register and unregister Horatiu Vultur
2025-08-25 13:02 ` Vadim Fedorenko
@ 2025-08-25 13:47 ` Vladimir Oltean
2025-08-27 0:20 ` patchwork-bot+netdevbpf
2 siblings, 0 replies; 4+ messages in thread
From: Vladimir Oltean @ 2025-08-25 13:47 UTC (permalink / raw)
To: Horatiu Vultur
Cc: andrew, hkallweit1, linux, davem, edumazet, kuba, pabeni,
richardcochran, rmk+kernel, vadim.fedorenko, christophe.jaillet,
rosenp, viro, atenart, quentin.schulz, netdev, linux-kernel
On Mon, Aug 25, 2025 at 08:55:43AM +0200, Horatiu Vultur wrote:
> It looks like that every time when the interface was set down and up the
> driver was creating a new ptp clock. On top of this the function
> ptp_clock_unregister was never called.
> Therefore fix this by calling ptp_clock_register and initialize the
> mii_ts struct inside the probe function and call ptp_clock_unregister when
> driver is removed.
>
> Fixes: 7d272e63e0979d ("net: phy: mscc: timestamping and PHC support")
> Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
>
> ---
> v1->v2:
> - move implementation of __vsc8584_deinit_ptp into vsc8584_ptp_deinit
> - drop the PHY matching and check if ptp_clock is valid.
> ---
Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH net v2] phy: mscc: Fix when PTP clock is register and unregister
2025-08-25 6:55 [PATCH net v2] phy: mscc: Fix when PTP clock is register and unregister Horatiu Vultur
2025-08-25 13:02 ` Vadim Fedorenko
2025-08-25 13:47 ` Vladimir Oltean
@ 2025-08-27 0:20 ` patchwork-bot+netdevbpf
2 siblings, 0 replies; 4+ messages in thread
From: patchwork-bot+netdevbpf @ 2025-08-27 0:20 UTC (permalink / raw)
To: Horatiu Vultur
Cc: andrew, hkallweit1, linux, davem, edumazet, kuba, pabeni,
richardcochran, vladimir.oltean, rmk+kernel, vadim.fedorenko,
christophe.jaillet, rosenp, viro, atenart, quentin.schulz, netdev,
linux-kernel
Hello:
This patch was applied to netdev/net.git (main)
by Jakub Kicinski <kuba@kernel.org>:
On Mon, 25 Aug 2025 08:55:43 +0200 you wrote:
> It looks like that every time when the interface was set down and up the
> driver was creating a new ptp clock. On top of this the function
> ptp_clock_unregister was never called.
> Therefore fix this by calling ptp_clock_register and initialize the
> mii_ts struct inside the probe function and call ptp_clock_unregister when
> driver is removed.
>
> [...]
Here is the summary with links:
- [net,v2] phy: mscc: Fix when PTP clock is register and unregister
https://git.kernel.org/netdev/net/c/882e57cbc720
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] 4+ messages in thread
end of thread, other threads:[~2025-08-27 0:20 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-25 6:55 [PATCH net v2] phy: mscc: Fix when PTP clock is register and unregister Horatiu Vultur
2025-08-25 13:02 ` Vadim Fedorenko
2025-08-25 13:47 ` Vladimir Oltean
2025-08-27 0:20 ` patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox