netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next v3 0/9] add hwtstamp_get callback to phy drivers
@ 2025-11-19 12:47 Vadim Fedorenko
  2025-11-19 12:47 ` [PATCH net-next v3 1/9] phy: rename hwtstamp callback to hwtstamp_set Vadim Fedorenko
                   ` (8 more replies)
  0 siblings, 9 replies; 24+ messages in thread
From: Vadim Fedorenko @ 2025-11-19 12:47 UTC (permalink / raw)
  To: Andrew Lunn, Florian Fainelli, Russell King, Heiner Kallweit,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Andrei Botila, Richard Cochran, Andrew Lunn
  Cc: Simon Horman, Vladimir Oltean, Jacob Keller, Kory Maincent,
	bcm-kernel-feedback-list, netdev, Vadim Fedorenko

PHY drivers are able to configure HW time stamping and are not able to
report configuration back to user space. Add callback to report
configuration like it's done for net_device and add implementation to
the drivers.

v2 -> v3:
* remove SIOCGHWTSTAMP in phy_mii_ioctl() as we discourage usage of
  deprecated interface
v1 -> v2:
* split the first patch to rename part and add new callback part
* fix netcp driver calling mii_timestamper::hwtstamp

Vadim Fedorenko (9):
  phy: rename hwtstamp callback to hwtstamp_set
  phy: add hwtstamp_get callback to phy drivers
  net: phy: broadcom: add HW timestamp configuration reporting
  net: phy: dp83640: add HW timestamp configuration reporting
  net: phy: micrel: add HW timestamp configuration reporting
  net: phy: microchip_rds_ptp: add HW timestamp configuration reporting
  phy: mscc: add HW timestamp configuration reporting
  net: phy: nxp-c45-tja11xx: add HW timestamp configuration reporting
  ptp: ptp_ines: add HW timestamp configuration reporting

 drivers/net/ethernet/ti/netcp_ethss.c |  2 +-
 drivers/net/phy/bcm-phy-ptp.c         | 21 ++++++++++---
 drivers/net/phy/dp83640.c             | 29 +++++++++++++-----
 drivers/net/phy/micrel.c              | 43 ++++++++++++++++++++++-----
 drivers/net/phy/microchip_rds_ptp.c   | 21 ++++++++++---
 drivers/net/phy/mscc/mscc_ptp.c       | 21 ++++++++++---
 drivers/net/phy/nxp-c45-tja11xx.c     | 22 +++++++++++---
 drivers/net/phy/phy.c                 | 14 ++++++---
 drivers/ptp/ptp_ines.c                | 31 ++++++++++++++++---
 include/linux/mii_timestamper.h       | 13 +++++---
 include/linux/phy.h                   |  4 +--
 11 files changed, 174 insertions(+), 47 deletions(-)

-- 
2.47.3


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

* [PATCH net-next v3 1/9] phy: rename hwtstamp callback to hwtstamp_set
  2025-11-19 12:47 [PATCH net-next v3 0/9] add hwtstamp_get callback to phy drivers Vadim Fedorenko
@ 2025-11-19 12:47 ` Vadim Fedorenko
  2025-11-19 13:23   ` Russell King (Oracle)
  2025-11-19 13:50   ` Kory Maincent
  2025-11-19 12:47 ` [PATCH net-next v3 2/9] phy: add hwtstamp_get callback to phy drivers Vadim Fedorenko
                   ` (7 subsequent siblings)
  8 siblings, 2 replies; 24+ messages in thread
From: Vadim Fedorenko @ 2025-11-19 12:47 UTC (permalink / raw)
  To: Andrew Lunn, Florian Fainelli, Russell King, Heiner Kallweit,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Andrei Botila, Richard Cochran, Andrew Lunn
  Cc: Simon Horman, Vladimir Oltean, Jacob Keller, Kory Maincent,
	bcm-kernel-feedback-list, netdev, Vadim Fedorenko

PHY devices has hwtstamp callback which actually performs set operation.
Rename it to better reflect the action.

Signed-off-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
---
 drivers/net/ethernet/ti/netcp_ethss.c |  2 +-
 drivers/net/phy/bcm-phy-ptp.c         |  8 ++++----
 drivers/net/phy/dp83640.c             |  8 ++++----
 drivers/net/phy/micrel.c              | 16 ++++++++--------
 drivers/net/phy/microchip_rds_ptp.c   |  8 ++++----
 drivers/net/phy/mscc/mscc_ptp.c       |  8 ++++----
 drivers/net/phy/nxp-c45-tja11xx.c     |  8 ++++----
 drivers/net/phy/phy.c                 | 11 +++++++----
 drivers/ptp/ptp_ines.c                |  8 ++++----
 include/linux/mii_timestamper.h       |  8 ++++----
 include/linux/phy.h                   |  4 ++--
 11 files changed, 46 insertions(+), 43 deletions(-)

diff --git a/drivers/net/ethernet/ti/netcp_ethss.c b/drivers/net/ethernet/ti/netcp_ethss.c
index 4f6cc6cd1f03..8f46e9be76b1 100644
--- a/drivers/net/ethernet/ti/netcp_ethss.c
+++ b/drivers/net/ethernet/ti/netcp_ethss.c
@@ -2657,7 +2657,7 @@ static int gbe_hwtstamp_set(void *intf_priv, struct kernel_hwtstamp_config *cfg,
 
 	phy = gbe_intf->slave->phy;
 	if (phy_has_hwtstamp(phy))
-		return phy->mii_ts->hwtstamp(phy->mii_ts, cfg, extack);
+		return phy->mii_ts->hwtstamp_set(phy->mii_ts, cfg, extack);
 
 	switch (cfg->tx_type) {
 	case HWTSTAMP_TX_OFF:
diff --git a/drivers/net/phy/bcm-phy-ptp.c b/drivers/net/phy/bcm-phy-ptp.c
index d3501f8487d9..6815e844a62e 100644
--- a/drivers/net/phy/bcm-phy-ptp.c
+++ b/drivers/net/phy/bcm-phy-ptp.c
@@ -780,9 +780,9 @@ static void bcm_ptp_txtstamp(struct mii_timestamper *mii_ts,
 	kfree_skb(skb);
 }
 
-static int bcm_ptp_hwtstamp(struct mii_timestamper *mii_ts,
-			    struct kernel_hwtstamp_config *cfg,
-			    struct netlink_ext_ack *extack)
+static int bcm_ptp_hwtstamp_set(struct mii_timestamper *mii_ts,
+				struct kernel_hwtstamp_config *cfg,
+				struct netlink_ext_ack *extack)
 {
 	struct bcm_ptp_private *priv = mii2priv(mii_ts);
 	u16 mode, ctrl;
@@ -898,7 +898,7 @@ static void bcm_ptp_init(struct bcm_ptp_private *priv)
 
 	priv->mii_ts.rxtstamp = bcm_ptp_rxtstamp;
 	priv->mii_ts.txtstamp = bcm_ptp_txtstamp;
-	priv->mii_ts.hwtstamp = bcm_ptp_hwtstamp;
+	priv->mii_ts.hwtstamp_set = bcm_ptp_hwtstamp_set;
 	priv->mii_ts.ts_info = bcm_ptp_ts_info;
 
 	priv->phydev->mii_ts = &priv->mii_ts;
diff --git a/drivers/net/phy/dp83640.c b/drivers/net/phy/dp83640.c
index 74396453f5bb..f733a8b72d40 100644
--- a/drivers/net/phy/dp83640.c
+++ b/drivers/net/phy/dp83640.c
@@ -1176,9 +1176,9 @@ static irqreturn_t dp83640_handle_interrupt(struct phy_device *phydev)
 	return IRQ_HANDLED;
 }
 
-static int dp83640_hwtstamp(struct mii_timestamper *mii_ts,
-			    struct kernel_hwtstamp_config *cfg,
-			    struct netlink_ext_ack *extack)
+static int dp83640_hwtstamp_set(struct mii_timestamper *mii_ts,
+				struct kernel_hwtstamp_config *cfg,
+				struct netlink_ext_ack *extack)
 {
 	struct dp83640_private *dp83640 =
 		container_of(mii_ts, struct dp83640_private, mii_ts);
@@ -1407,7 +1407,7 @@ static int dp83640_probe(struct phy_device *phydev)
 	dp83640->phydev = phydev;
 	dp83640->mii_ts.rxtstamp = dp83640_rxtstamp;
 	dp83640->mii_ts.txtstamp = dp83640_txtstamp;
-	dp83640->mii_ts.hwtstamp = dp83640_hwtstamp;
+	dp83640->mii_ts.hwtstamp_set = dp83640_hwtstamp_set;
 	dp83640->mii_ts.ts_info  = dp83640_ts_info;
 
 	INIT_DELAYED_WORK(&dp83640->ts_work, rx_timestamp_work);
diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c
index 5d90ccc20df7..05de68b9f719 100644
--- a/drivers/net/phy/micrel.c
+++ b/drivers/net/phy/micrel.c
@@ -3147,9 +3147,9 @@ static void lan8814_flush_fifo(struct phy_device *phydev, bool egress)
 	lanphy_read_page_reg(phydev, LAN8814_PAGE_PORT_REGS, PTP_TSU_INT_STS);
 }
 
-static int lan8814_hwtstamp(struct mii_timestamper *mii_ts,
-			    struct kernel_hwtstamp_config *config,
-			    struct netlink_ext_ack *extack)
+static int lan8814_hwtstamp_set(struct mii_timestamper *mii_ts,
+				struct kernel_hwtstamp_config *config,
+				struct netlink_ext_ack *extack)
 {
 	struct kszphy_ptp_priv *ptp_priv =
 			  container_of(mii_ts, struct kszphy_ptp_priv, mii_ts);
@@ -4389,7 +4389,7 @@ static void lan8814_ptp_init(struct phy_device *phydev)
 
 	ptp_priv->mii_ts.rxtstamp = lan8814_rxtstamp;
 	ptp_priv->mii_ts.txtstamp = lan8814_txtstamp;
-	ptp_priv->mii_ts.hwtstamp = lan8814_hwtstamp;
+	ptp_priv->mii_ts.hwtstamp_set = lan8814_hwtstamp_set;
 	ptp_priv->mii_ts.ts_info  = lan8814_ts_info;
 
 	phydev->mii_ts = &ptp_priv->mii_ts;
@@ -5042,9 +5042,9 @@ static void lan8841_ptp_enable_processing(struct kszphy_ptp_priv *ptp_priv,
 #define LAN8841_PTP_TX_TIMESTAMP_EN		443
 #define LAN8841_PTP_TX_MOD			445
 
-static int lan8841_hwtstamp(struct mii_timestamper *mii_ts,
-			    struct kernel_hwtstamp_config *config,
-			    struct netlink_ext_ack *extack)
+static int lan8841_hwtstamp_set(struct mii_timestamper *mii_ts,
+				struct kernel_hwtstamp_config *config,
+				struct netlink_ext_ack *extack)
 {
 	struct kszphy_ptp_priv *ptp_priv = container_of(mii_ts, struct kszphy_ptp_priv, mii_ts);
 	struct phy_device *phydev = ptp_priv->phydev;
@@ -5924,7 +5924,7 @@ static int lan8841_probe(struct phy_device *phydev)
 
 	ptp_priv->mii_ts.rxtstamp = lan8841_rxtstamp;
 	ptp_priv->mii_ts.txtstamp = lan8814_txtstamp;
-	ptp_priv->mii_ts.hwtstamp = lan8841_hwtstamp;
+	ptp_priv->mii_ts.hwtstamp_set = lan8841_hwtstamp_set;
 	ptp_priv->mii_ts.ts_info = lan8841_ts_info;
 
 	phydev->mii_ts = &ptp_priv->mii_ts;
diff --git a/drivers/net/phy/microchip_rds_ptp.c b/drivers/net/phy/microchip_rds_ptp.c
index e6514ce04c29..4c6326b0ceaf 100644
--- a/drivers/net/phy/microchip_rds_ptp.c
+++ b/drivers/net/phy/microchip_rds_ptp.c
@@ -476,9 +476,9 @@ static bool mchp_rds_ptp_rxtstamp(struct mii_timestamper *mii_ts,
 	return true;
 }
 
-static int mchp_rds_ptp_hwtstamp(struct mii_timestamper *mii_ts,
-				 struct kernel_hwtstamp_config *config,
-				 struct netlink_ext_ack *extack)
+static int mchp_rds_ptp_hwtstamp_set(struct mii_timestamper *mii_ts,
+				     struct kernel_hwtstamp_config *config,
+				     struct netlink_ext_ack *extack)
 {
 	struct mchp_rds_ptp_clock *clock =
 				container_of(mii_ts, struct mchp_rds_ptp_clock,
@@ -1281,7 +1281,7 @@ struct mchp_rds_ptp_clock *mchp_rds_ptp_probe(struct phy_device *phydev, u8 mmd,
 
 	clock->mii_ts.rxtstamp = mchp_rds_ptp_rxtstamp;
 	clock->mii_ts.txtstamp = mchp_rds_ptp_txtstamp;
-	clock->mii_ts.hwtstamp = mchp_rds_ptp_hwtstamp;
+	clock->mii_ts.hwtstamp_set = mchp_rds_ptp_hwtstamp_set;
 	clock->mii_ts.ts_info = mchp_rds_ptp_ts_info;
 
 	phydev->mii_ts = &clock->mii_ts;
diff --git a/drivers/net/phy/mscc/mscc_ptp.c b/drivers/net/phy/mscc/mscc_ptp.c
index d692df7d975c..dc06614222f6 100644
--- a/drivers/net/phy/mscc/mscc_ptp.c
+++ b/drivers/net/phy/mscc/mscc_ptp.c
@@ -1051,9 +1051,9 @@ static void vsc85xx_ts_reset_fifo(struct phy_device *phydev)
 			     val);
 }
 
-static int vsc85xx_hwtstamp(struct mii_timestamper *mii_ts,
-			    struct kernel_hwtstamp_config *cfg,
-			    struct netlink_ext_ack *extack)
+static int vsc85xx_hwtstamp_set(struct mii_timestamper *mii_ts,
+				struct kernel_hwtstamp_config *cfg,
+				struct netlink_ext_ack *extack)
 {
 	struct vsc8531_private *vsc8531 =
 		container_of(mii_ts, struct vsc8531_private, mii_ts);
@@ -1611,7 +1611,7 @@ int vsc8584_ptp_probe(struct phy_device *phydev)
 
 	vsc8531->mii_ts.rxtstamp = vsc85xx_rxtstamp;
 	vsc8531->mii_ts.txtstamp = vsc85xx_txtstamp;
-	vsc8531->mii_ts.hwtstamp = vsc85xx_hwtstamp;
+	vsc8531->mii_ts.hwtstamp_set = vsc85xx_hwtstamp_set;
 	vsc8531->mii_ts.ts_info  = vsc85xx_ts_info;
 	phydev->mii_ts = &vsc8531->mii_ts;
 
diff --git a/drivers/net/phy/nxp-c45-tja11xx.c b/drivers/net/phy/nxp-c45-tja11xx.c
index 87adb6508017..13a8fac223a9 100644
--- a/drivers/net/phy/nxp-c45-tja11xx.c
+++ b/drivers/net/phy/nxp-c45-tja11xx.c
@@ -1012,9 +1012,9 @@ static bool nxp_c45_rxtstamp(struct mii_timestamper *mii_ts,
 	return true;
 }
 
-static int nxp_c45_hwtstamp(struct mii_timestamper *mii_ts,
-			    struct kernel_hwtstamp_config *cfg,
-			    struct netlink_ext_ack *extack)
+static int nxp_c45_hwtstamp_set(struct mii_timestamper *mii_ts,
+				struct kernel_hwtstamp_config *cfg,
+				struct netlink_ext_ack *extack)
 {
 	struct nxp_c45_phy *priv = container_of(mii_ts, struct nxp_c45_phy,
 						mii_ts);
@@ -1749,7 +1749,7 @@ static int nxp_c45_probe(struct phy_device *phydev)
 	    IS_ENABLED(CONFIG_NETWORK_PHY_TIMESTAMPING)) {
 		priv->mii_ts.rxtstamp = nxp_c45_rxtstamp;
 		priv->mii_ts.txtstamp = nxp_c45_txtstamp;
-		priv->mii_ts.hwtstamp = nxp_c45_hwtstamp;
+		priv->mii_ts.hwtstamp_set = nxp_c45_hwtstamp_set;
 		priv->mii_ts.ts_info = nxp_c45_ts_info;
 		phydev->mii_ts = &priv->mii_ts;
 		ret = nxp_c45_init_ptp_clock(priv);
diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
index 02da4a203ddd..350bc23c1fdb 100644
--- a/drivers/net/phy/phy.c
+++ b/drivers/net/phy/phy.c
@@ -405,12 +405,14 @@ int phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int cmd)
 		return 0;
 
 	case SIOCSHWTSTAMP:
-		if (phydev->mii_ts && phydev->mii_ts->hwtstamp) {
+		if (phydev->mii_ts && phydev->mii_ts->hwtstamp_set) {
 			if (copy_from_user(&cfg, ifr->ifr_data, sizeof(cfg)))
 				return -EFAULT;
 
 			hwtstamp_config_to_kernel(&kernel_cfg, &cfg);
-			ret = phydev->mii_ts->hwtstamp(phydev->mii_ts, &kernel_cfg, &extack);
+			ret = phydev->mii_ts->hwtstamp_set(phydev->mii_ts,
+							   &kernel_cfg,
+							   &extack);
 			if (ret)
 				return ret;
 
@@ -493,8 +495,9 @@ int __phy_hwtstamp_set(struct phy_device *phydev,
 	if (!phydev)
 		return -ENODEV;
 
-	if (phydev->mii_ts && phydev->mii_ts->hwtstamp)
-		return phydev->mii_ts->hwtstamp(phydev->mii_ts, config, extack);
+	if (phydev->mii_ts && phydev->mii_ts->hwtstamp_set)
+		return phydev->mii_ts->hwtstamp_set(phydev->mii_ts, config,
+						    extack);
 
 	return -EOPNOTSUPP;
 }
diff --git a/drivers/ptp/ptp_ines.c b/drivers/ptp/ptp_ines.c
index 68f1f7fdaa9d..56c798e77f20 100644
--- a/drivers/ptp/ptp_ines.c
+++ b/drivers/ptp/ptp_ines.c
@@ -328,9 +328,9 @@ static u64 ines_find_txts(struct ines_port *port, struct sk_buff *skb)
 	return ns;
 }
 
-static int ines_hwtstamp(struct mii_timestamper *mii_ts,
-			 struct kernel_hwtstamp_config *cfg,
-			 struct netlink_ext_ack *extack)
+static int ines_hwtstamp_set(struct mii_timestamper *mii_ts,
+			     struct kernel_hwtstamp_config *cfg,
+			     struct netlink_ext_ack *extack)
 {
 	struct ines_port *port = container_of(mii_ts, struct ines_port, mii_ts);
 	u32 cm_one_step = 0, port_conf, ts_stat_rx, ts_stat_tx;
@@ -709,7 +709,7 @@ static struct mii_timestamper *ines_ptp_probe_channel(struct device *device,
 	}
 	port->mii_ts.rxtstamp = ines_rxtstamp;
 	port->mii_ts.txtstamp = ines_txtstamp;
-	port->mii_ts.hwtstamp = ines_hwtstamp;
+	port->mii_ts.hwtstamp_set = ines_hwtstamp_set;
 	port->mii_ts.link_state = ines_link_state;
 	port->mii_ts.ts_info = ines_ts_info;
 
diff --git a/include/linux/mii_timestamper.h b/include/linux/mii_timestamper.h
index 995db62570f9..08863c0e9ea3 100644
--- a/include/linux/mii_timestamper.h
+++ b/include/linux/mii_timestamper.h
@@ -27,7 +27,7 @@ struct phy_device;
  *		as soon as a timestamp becomes available. One of the PTP_CLASS_
  *		values is passed in 'type'.
  *
- * @hwtstamp:	Handles SIOCSHWTSTAMP ioctl for hardware time stamping.
+ * @hwtstamp_set: Handles SIOCSHWTSTAMP ioctl for hardware time stamping.
  *
  * @link_state: Allows the device to respond to changes in the link
  *		state.  The caller invokes this function while holding
@@ -51,9 +51,9 @@ struct mii_timestamper {
 	void (*txtstamp)(struct mii_timestamper *mii_ts,
 			 struct sk_buff *skb, int type);
 
-	int  (*hwtstamp)(struct mii_timestamper *mii_ts,
-			 struct kernel_hwtstamp_config *kernel_config,
-			 struct netlink_ext_ack *extack);
+	int  (*hwtstamp_set)(struct mii_timestamper *mii_ts,
+			     struct kernel_hwtstamp_config *kernel_config,
+			     struct netlink_ext_ack *extack);
 
 	void (*link_state)(struct mii_timestamper *mii_ts,
 			   struct phy_device *phydev);
diff --git a/include/linux/phy.h b/include/linux/phy.h
index 65b0c3ca6a2b..059a104223c4 100644
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
@@ -1915,7 +1915,7 @@ static inline bool phy_polling_mode(struct phy_device *phydev)
  */
 static inline bool phy_has_hwtstamp(struct phy_device *phydev)
 {
-	return phydev && phydev->mii_ts && phydev->mii_ts->hwtstamp;
+	return phydev && phydev->mii_ts && phydev->mii_ts->hwtstamp_set;
 }
 
 /**
@@ -1950,7 +1950,7 @@ static inline int phy_hwtstamp(struct phy_device *phydev,
 			       struct kernel_hwtstamp_config *cfg,
 			       struct netlink_ext_ack *extack)
 {
-	return phydev->mii_ts->hwtstamp(phydev->mii_ts, cfg, extack);
+	return phydev->mii_ts->hwtstamp_set(phydev->mii_ts, cfg, extack);
 }
 
 static inline bool phy_rxtstamp(struct phy_device *phydev, struct sk_buff *skb,
-- 
2.47.3


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

* [PATCH net-next v3 2/9] phy: add hwtstamp_get callback to phy drivers
  2025-11-19 12:47 [PATCH net-next v3 0/9] add hwtstamp_get callback to phy drivers Vadim Fedorenko
  2025-11-19 12:47 ` [PATCH net-next v3 1/9] phy: rename hwtstamp callback to hwtstamp_set Vadim Fedorenko
@ 2025-11-19 12:47 ` Vadim Fedorenko
  2025-11-19 13:24   ` Russell King (Oracle)
  2025-11-19 14:09   ` Kory Maincent
  2025-11-19 12:47 ` [PATCH net-next v3 3/9] net: phy: broadcom: add HW timestamp configuration reporting Vadim Fedorenko
                   ` (6 subsequent siblings)
  8 siblings, 2 replies; 24+ messages in thread
From: Vadim Fedorenko @ 2025-11-19 12:47 UTC (permalink / raw)
  To: Andrew Lunn, Florian Fainelli, Russell King, Heiner Kallweit,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Andrei Botila, Richard Cochran, Andrew Lunn
  Cc: Simon Horman, Vladimir Oltean, Jacob Keller, Kory Maincent,
	bcm-kernel-feedback-list, netdev, Vadim Fedorenko

PHY devices had lack of hwtstamp_get callback even though most of them
are tracking configuration info. Introduce new call back to
mii_timestamper.

Signed-off-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
---
 drivers/net/phy/phy.c           | 3 +++
 include/linux/mii_timestamper.h | 5 +++++
 2 files changed, 8 insertions(+)

diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
index 350bc23c1fdb..13dd1691886d 100644
--- a/drivers/net/phy/phy.c
+++ b/drivers/net/phy/phy.c
@@ -478,6 +478,9 @@ int __phy_hwtstamp_get(struct phy_device *phydev,
 	if (!phydev)
 		return -ENODEV;
 
+	if (phydev->mii_ts && phydev->mii_ts->hwtstamp_get)
+		return phydev->mii_ts->hwtstamp_get(phydev->mii_ts, config);
+
 	return -EOPNOTSUPP;
 }
 
diff --git a/include/linux/mii_timestamper.h b/include/linux/mii_timestamper.h
index 08863c0e9ea3..3102c425c8e0 100644
--- a/include/linux/mii_timestamper.h
+++ b/include/linux/mii_timestamper.h
@@ -29,6 +29,8 @@ struct phy_device;
  *
  * @hwtstamp_set: Handles SIOCSHWTSTAMP ioctl for hardware time stamping.
  *
+ * @hwtstamp_get: Handles SIOCGHWTSTAMP ioctl for hardware time stamping.
+ *
  * @link_state: Allows the device to respond to changes in the link
  *		state.  The caller invokes this function while holding
  *		the phy_device mutex.
@@ -55,6 +57,9 @@ struct mii_timestamper {
 			     struct kernel_hwtstamp_config *kernel_config,
 			     struct netlink_ext_ack *extack);
 
+	int  (*hwtstamp_get)(struct mii_timestamper *mii_ts,
+			     struct kernel_hwtstamp_config *kernel_config);
+
 	void (*link_state)(struct mii_timestamper *mii_ts,
 			   struct phy_device *phydev);
 
-- 
2.47.3


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

* [PATCH net-next v3 3/9] net: phy: broadcom: add HW timestamp configuration reporting
  2025-11-19 12:47 [PATCH net-next v3 0/9] add hwtstamp_get callback to phy drivers Vadim Fedorenko
  2025-11-19 12:47 ` [PATCH net-next v3 1/9] phy: rename hwtstamp callback to hwtstamp_set Vadim Fedorenko
  2025-11-19 12:47 ` [PATCH net-next v3 2/9] phy: add hwtstamp_get callback to phy drivers Vadim Fedorenko
@ 2025-11-19 12:47 ` Vadim Fedorenko
  2025-11-19 14:12   ` Kory Maincent
  2025-11-19 12:47 ` [PATCH net-next v3 4/9] net: phy: dp83640: " Vadim Fedorenko
                   ` (5 subsequent siblings)
  8 siblings, 1 reply; 24+ messages in thread
From: Vadim Fedorenko @ 2025-11-19 12:47 UTC (permalink / raw)
  To: Andrew Lunn, Florian Fainelli, Russell King, Heiner Kallweit,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Andrei Botila, Richard Cochran, Andrew Lunn
  Cc: Simon Horman, Vladimir Oltean, Jacob Keller, Kory Maincent,
	bcm-kernel-feedback-list, netdev, Vadim Fedorenko

The driver stores configuration information and can technically report
it. Implement hwtstamp_get callback to report the configuration.

Signed-off-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
---
 drivers/net/phy/bcm-phy-ptp.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/drivers/net/phy/bcm-phy-ptp.c b/drivers/net/phy/bcm-phy-ptp.c
index 6815e844a62e..65d609ed69fb 100644
--- a/drivers/net/phy/bcm-phy-ptp.c
+++ b/drivers/net/phy/bcm-phy-ptp.c
@@ -780,6 +780,18 @@ static void bcm_ptp_txtstamp(struct mii_timestamper *mii_ts,
 	kfree_skb(skb);
 }
 
+static int bcm_ptp_hwtstamp_get(struct mii_timestamper *mii_ts,
+				struct kernel_hwtstamp_config *cfg)
+{
+	struct bcm_ptp_private *priv = mii2priv(mii_ts);
+
+	cfg->rx_filter = priv->hwts_rx ? HWTSTAMP_FILTER_PTP_V2_EVENT
+				       : HWTSTAMP_FILTER_NONE;
+	cfg->tx_type = priv->tx_type;
+
+	return 0;
+}
+
 static int bcm_ptp_hwtstamp_set(struct mii_timestamper *mii_ts,
 				struct kernel_hwtstamp_config *cfg,
 				struct netlink_ext_ack *extack)
@@ -899,6 +911,7 @@ static void bcm_ptp_init(struct bcm_ptp_private *priv)
 	priv->mii_ts.rxtstamp = bcm_ptp_rxtstamp;
 	priv->mii_ts.txtstamp = bcm_ptp_txtstamp;
 	priv->mii_ts.hwtstamp_set = bcm_ptp_hwtstamp_set;
+	priv->mii_ts.hwtstamp_get = bcm_ptp_hwtstamp_get;
 	priv->mii_ts.ts_info = bcm_ptp_ts_info;
 
 	priv->phydev->mii_ts = &priv->mii_ts;
-- 
2.47.3


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

* [PATCH net-next v3 4/9] net: phy: dp83640: add HW timestamp configuration reporting
  2025-11-19 12:47 [PATCH net-next v3 0/9] add hwtstamp_get callback to phy drivers Vadim Fedorenko
                   ` (2 preceding siblings ...)
  2025-11-19 12:47 ` [PATCH net-next v3 3/9] net: phy: broadcom: add HW timestamp configuration reporting Vadim Fedorenko
@ 2025-11-19 12:47 ` Vadim Fedorenko
  2025-11-19 14:13   ` Kory Maincent
  2025-11-19 12:47 ` [PATCH net-next v3 5/9] net: phy: micrel: " Vadim Fedorenko
                   ` (4 subsequent siblings)
  8 siblings, 1 reply; 24+ messages in thread
From: Vadim Fedorenko @ 2025-11-19 12:47 UTC (permalink / raw)
  To: Andrew Lunn, Florian Fainelli, Russell King, Heiner Kallweit,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Andrei Botila, Richard Cochran, Andrew Lunn
  Cc: Simon Horman, Vladimir Oltean, Jacob Keller, Kory Maincent,
	bcm-kernel-feedback-list, netdev, Vadim Fedorenko

The driver stores configuration of TX timestamping and can technically
report it. Patch RX timestamp configuration storage to be more precise
on reporting and add callback to actually report it.

Signed-off-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
---
 drivers/net/phy/dp83640.c | 21 +++++++++++++++++----
 1 file changed, 17 insertions(+), 4 deletions(-)

diff --git a/drivers/net/phy/dp83640.c b/drivers/net/phy/dp83640.c
index f733a8b72d40..b950acc9c49b 100644
--- a/drivers/net/phy/dp83640.c
+++ b/drivers/net/phy/dp83640.c
@@ -1176,6 +1176,18 @@ static irqreturn_t dp83640_handle_interrupt(struct phy_device *phydev)
 	return IRQ_HANDLED;
 }
 
+static int dp83640_hwtstamp_get(struct mii_timestamper *mii_ts,
+				struct kernel_hwtstamp_config *cfg)
+{
+	struct dp83640_private *dp83640 =
+		container_of(mii_ts, struct dp83640_private, mii_ts);
+
+	cfg->rx_filter = dp83640->hwts_rx_en;
+	cfg->tx_type = dp83640->hwts_tx_en;
+
+	return 0;
+}
+
 static int dp83640_hwtstamp_set(struct mii_timestamper *mii_ts,
 				struct kernel_hwtstamp_config *cfg,
 				struct netlink_ext_ack *extack)
@@ -1198,7 +1210,7 @@ static int dp83640_hwtstamp_set(struct mii_timestamper *mii_ts,
 	case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
 	case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
 	case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
-		dp83640->hwts_rx_en = 1;
+		dp83640->hwts_rx_en = HWTSTAMP_FILTER_PTP_V1_L4_EVENT;
 		dp83640->layer = PTP_CLASS_L4;
 		dp83640->version = PTP_CLASS_V1;
 		cfg->rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT;
@@ -1206,7 +1218,7 @@ static int dp83640_hwtstamp_set(struct mii_timestamper *mii_ts,
 	case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
 	case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
 	case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
-		dp83640->hwts_rx_en = 1;
+		dp83640->hwts_rx_en = HWTSTAMP_FILTER_PTP_V2_L4_EVENT;
 		dp83640->layer = PTP_CLASS_L4;
 		dp83640->version = PTP_CLASS_V2;
 		cfg->rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_EVENT;
@@ -1214,7 +1226,7 @@ static int dp83640_hwtstamp_set(struct mii_timestamper *mii_ts,
 	case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
 	case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
 	case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ:
-		dp83640->hwts_rx_en = 1;
+		dp83640->hwts_rx_en = HWTSTAMP_FILTER_PTP_V2_L2_EVENT;
 		dp83640->layer = PTP_CLASS_L2;
 		dp83640->version = PTP_CLASS_V2;
 		cfg->rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_EVENT;
@@ -1222,7 +1234,7 @@ static int dp83640_hwtstamp_set(struct mii_timestamper *mii_ts,
 	case HWTSTAMP_FILTER_PTP_V2_EVENT:
 	case HWTSTAMP_FILTER_PTP_V2_SYNC:
 	case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
-		dp83640->hwts_rx_en = 1;
+		dp83640->hwts_rx_en = HWTSTAMP_FILTER_PTP_V2_EVENT;
 		dp83640->layer = PTP_CLASS_L4 | PTP_CLASS_L2;
 		dp83640->version = PTP_CLASS_V2;
 		cfg->rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT;
@@ -1408,6 +1420,7 @@ static int dp83640_probe(struct phy_device *phydev)
 	dp83640->mii_ts.rxtstamp = dp83640_rxtstamp;
 	dp83640->mii_ts.txtstamp = dp83640_txtstamp;
 	dp83640->mii_ts.hwtstamp_set = dp83640_hwtstamp_set;
+	dp83640->mii_ts.hwtstamp_get = dp83640_hwtstamp_get;
 	dp83640->mii_ts.ts_info  = dp83640_ts_info;
 
 	INIT_DELAYED_WORK(&dp83640->ts_work, rx_timestamp_work);
-- 
2.47.3


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

* [PATCH net-next v3 5/9] net: phy: micrel: add HW timestamp configuration reporting
  2025-11-19 12:47 [PATCH net-next v3 0/9] add hwtstamp_get callback to phy drivers Vadim Fedorenko
                   ` (3 preceding siblings ...)
  2025-11-19 12:47 ` [PATCH net-next v3 4/9] net: phy: dp83640: " Vadim Fedorenko
@ 2025-11-19 12:47 ` Vadim Fedorenko
  2025-11-19 14:44   ` Kory Maincent
  2025-11-19 12:47 ` [PATCH net-next v3 6/9] net: phy: microchip_rds_ptp: " Vadim Fedorenko
                   ` (3 subsequent siblings)
  8 siblings, 1 reply; 24+ messages in thread
From: Vadim Fedorenko @ 2025-11-19 12:47 UTC (permalink / raw)
  To: Andrew Lunn, Florian Fainelli, Russell King, Heiner Kallweit,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Andrei Botila, Richard Cochran, Andrew Lunn
  Cc: Simon Horman, Vladimir Oltean, Jacob Keller, Kory Maincent,
	bcm-kernel-feedback-list, netdev, Vadim Fedorenko

The driver stores HW timestamping configuration and can technically
report it. Add callback to do it.

Signed-off-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
---
 drivers/net/phy/micrel.c | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c
index 05de68b9f719..b149d539aec3 100644
--- a/drivers/net/phy/micrel.c
+++ b/drivers/net/phy/micrel.c
@@ -3147,6 +3147,18 @@ static void lan8814_flush_fifo(struct phy_device *phydev, bool egress)
 	lanphy_read_page_reg(phydev, LAN8814_PAGE_PORT_REGS, PTP_TSU_INT_STS);
 }
 
+static int lan8814_hwtstamp_get(struct mii_timestamper *mii_ts,
+				struct kernel_hwtstamp_config *config)
+{
+	struct kszphy_ptp_priv *ptp_priv =
+			  container_of(mii_ts, struct kszphy_ptp_priv, mii_ts);
+
+	config->tx_type = ptp_priv->hwts_tx_type;
+	config->rx_filter = ptp_priv->rx_filter;
+
+	return 0;
+}
+
 static int lan8814_hwtstamp_set(struct mii_timestamper *mii_ts,
 				struct kernel_hwtstamp_config *config,
 				struct netlink_ext_ack *extack)
@@ -4390,6 +4402,7 @@ static void lan8814_ptp_init(struct phy_device *phydev)
 	ptp_priv->mii_ts.rxtstamp = lan8814_rxtstamp;
 	ptp_priv->mii_ts.txtstamp = lan8814_txtstamp;
 	ptp_priv->mii_ts.hwtstamp_set = lan8814_hwtstamp_set;
+	ptp_priv->mii_ts.hwtstamp_get = lan8814_hwtstamp_get;
 	ptp_priv->mii_ts.ts_info  = lan8814_ts_info;
 
 	phydev->mii_ts = &ptp_priv->mii_ts;
@@ -5042,6 +5055,19 @@ static void lan8841_ptp_enable_processing(struct kszphy_ptp_priv *ptp_priv,
 #define LAN8841_PTP_TX_TIMESTAMP_EN		443
 #define LAN8841_PTP_TX_MOD			445
 
+static int lan8841_hwtstamp_get(struct mii_timestamper *mii_ts,
+				struct kernel_hwtstamp_config *config)
+{
+	struct kszphy_ptp_priv *ptp_priv;
+
+	ptp_priv = container_of(mii_ts, struct kszphy_ptp_priv, mii_ts);
+
+	config->tx_type = ptp_priv->hwts_tx_type;
+	config->rx_filter = ptp_priv->rx_filter;
+
+	return 0;
+}
+
 static int lan8841_hwtstamp_set(struct mii_timestamper *mii_ts,
 				struct kernel_hwtstamp_config *config,
 				struct netlink_ext_ack *extack)
@@ -5925,6 +5951,7 @@ static int lan8841_probe(struct phy_device *phydev)
 	ptp_priv->mii_ts.rxtstamp = lan8841_rxtstamp;
 	ptp_priv->mii_ts.txtstamp = lan8814_txtstamp;
 	ptp_priv->mii_ts.hwtstamp_set = lan8841_hwtstamp_set;
+	ptp_priv->mii_ts.hwtstamp_get = lan8841_hwtstamp_get;
 	ptp_priv->mii_ts.ts_info = lan8841_ts_info;
 
 	phydev->mii_ts = &ptp_priv->mii_ts;
-- 
2.47.3


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

* [PATCH net-next v3 6/9] net: phy: microchip_rds_ptp: add HW timestamp configuration reporting
  2025-11-19 12:47 [PATCH net-next v3 0/9] add hwtstamp_get callback to phy drivers Vadim Fedorenko
                   ` (4 preceding siblings ...)
  2025-11-19 12:47 ` [PATCH net-next v3 5/9] net: phy: micrel: " Vadim Fedorenko
@ 2025-11-19 12:47 ` Vadim Fedorenko
  2025-11-19 14:46   ` Kory Maincent
  2025-11-19 12:47 ` [PATCH net-next v3 7/9] phy: mscc: " Vadim Fedorenko
                   ` (2 subsequent siblings)
  8 siblings, 1 reply; 24+ messages in thread
From: Vadim Fedorenko @ 2025-11-19 12:47 UTC (permalink / raw)
  To: Andrew Lunn, Florian Fainelli, Russell King, Heiner Kallweit,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Andrei Botila, Richard Cochran, Andrew Lunn
  Cc: Simon Horman, Vladimir Oltean, Jacob Keller, Kory Maincent,
	bcm-kernel-feedback-list, netdev, Vadim Fedorenko

The driver stores HW timestamping configuration and can technically
report it. Add callback to do it.

Signed-off-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
---
 drivers/net/phy/microchip_rds_ptp.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/drivers/net/phy/microchip_rds_ptp.c b/drivers/net/phy/microchip_rds_ptp.c
index 4c6326b0ceaf..d2beb3a2e6c3 100644
--- a/drivers/net/phy/microchip_rds_ptp.c
+++ b/drivers/net/phy/microchip_rds_ptp.c
@@ -476,6 +476,18 @@ static bool mchp_rds_ptp_rxtstamp(struct mii_timestamper *mii_ts,
 	return true;
 }
 
+static int mchp_rds_ptp_hwtstamp_get(struct mii_timestamper *mii_ts,
+				     struct kernel_hwtstamp_config *config)
+{
+	struct mchp_rds_ptp_clock *clock =
+				container_of(mii_ts, struct mchp_rds_ptp_clock,
+					     mii_ts);
+	config->tx_type = clock->hwts_tx_type;
+	config->rx_filter = clock->rx_filter;
+
+	return 0;
+}
+
 static int mchp_rds_ptp_hwtstamp_set(struct mii_timestamper *mii_ts,
 				     struct kernel_hwtstamp_config *config,
 				     struct netlink_ext_ack *extack)
@@ -1282,6 +1294,7 @@ struct mchp_rds_ptp_clock *mchp_rds_ptp_probe(struct phy_device *phydev, u8 mmd,
 	clock->mii_ts.rxtstamp = mchp_rds_ptp_rxtstamp;
 	clock->mii_ts.txtstamp = mchp_rds_ptp_txtstamp;
 	clock->mii_ts.hwtstamp_set = mchp_rds_ptp_hwtstamp_set;
+	clock->mii_ts.hwtstamp_get = mchp_rds_ptp_hwtstamp_get;
 	clock->mii_ts.ts_info = mchp_rds_ptp_ts_info;
 
 	phydev->mii_ts = &clock->mii_ts;
-- 
2.47.3


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

* [PATCH net-next v3 7/9] phy: mscc: add HW timestamp configuration reporting
  2025-11-19 12:47 [PATCH net-next v3 0/9] add hwtstamp_get callback to phy drivers Vadim Fedorenko
                   ` (5 preceding siblings ...)
  2025-11-19 12:47 ` [PATCH net-next v3 6/9] net: phy: microchip_rds_ptp: " Vadim Fedorenko
@ 2025-11-19 12:47 ` Vadim Fedorenko
  2025-11-19 14:48   ` Kory Maincent
  2025-11-19 12:47 ` [PATCH net-next v3 8/9] net: phy: nxp-c45-tja11xx: " Vadim Fedorenko
  2025-11-19 12:47 ` [PATCH net-next v3 9/9] ptp: ptp_ines: " Vadim Fedorenko
  8 siblings, 1 reply; 24+ messages in thread
From: Vadim Fedorenko @ 2025-11-19 12:47 UTC (permalink / raw)
  To: Andrew Lunn, Florian Fainelli, Russell King, Heiner Kallweit,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Andrei Botila, Richard Cochran, Andrew Lunn
  Cc: Simon Horman, Vladimir Oltean, Jacob Keller, Kory Maincent,
	bcm-kernel-feedback-list, netdev, Vadim Fedorenko

The driver stores HW configuration and can technically report it.
Add callback to do it.

Signed-off-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
---
 drivers/net/phy/mscc/mscc_ptp.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/drivers/net/phy/mscc/mscc_ptp.c b/drivers/net/phy/mscc/mscc_ptp.c
index dc06614222f6..4865eac74b0e 100644
--- a/drivers/net/phy/mscc/mscc_ptp.c
+++ b/drivers/net/phy/mscc/mscc_ptp.c
@@ -1051,6 +1051,18 @@ static void vsc85xx_ts_reset_fifo(struct phy_device *phydev)
 			     val);
 }
 
+static int vsc85xx_hwtstamp_get(struct mii_timestamper *mii_ts,
+				struct kernel_hwtstamp_config *cfg)
+{
+	struct vsc8531_private *vsc8531 =
+		container_of(mii_ts, struct vsc8531_private, mii_ts);
+
+	cfg->tx_type = vsc8531->ptp->tx_type;
+	cfg->rx_filter = vsc8531->ptp->rx_filter;
+
+	return 0;
+}
+
 static int vsc85xx_hwtstamp_set(struct mii_timestamper *mii_ts,
 				struct kernel_hwtstamp_config *cfg,
 				struct netlink_ext_ack *extack)
@@ -1612,6 +1624,7 @@ int vsc8584_ptp_probe(struct phy_device *phydev)
 	vsc8531->mii_ts.rxtstamp = vsc85xx_rxtstamp;
 	vsc8531->mii_ts.txtstamp = vsc85xx_txtstamp;
 	vsc8531->mii_ts.hwtstamp_set = vsc85xx_hwtstamp_set;
+	vsc8531->mii_ts.hwtstamp_get = vsc85xx_hwtstamp_get;
 	vsc8531->mii_ts.ts_info  = vsc85xx_ts_info;
 	phydev->mii_ts = &vsc8531->mii_ts;
 
-- 
2.47.3


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

* [PATCH net-next v3 8/9] net: phy: nxp-c45-tja11xx: add HW timestamp configuration reporting
  2025-11-19 12:47 [PATCH net-next v3 0/9] add hwtstamp_get callback to phy drivers Vadim Fedorenko
                   ` (6 preceding siblings ...)
  2025-11-19 12:47 ` [PATCH net-next v3 7/9] phy: mscc: " Vadim Fedorenko
@ 2025-11-19 12:47 ` Vadim Fedorenko
  2025-11-19 14:50   ` Kory Maincent
  2025-11-19 12:47 ` [PATCH net-next v3 9/9] ptp: ptp_ines: " Vadim Fedorenko
  8 siblings, 1 reply; 24+ messages in thread
From: Vadim Fedorenko @ 2025-11-19 12:47 UTC (permalink / raw)
  To: Andrew Lunn, Florian Fainelli, Russell King, Heiner Kallweit,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Andrei Botila, Richard Cochran, Andrew Lunn
  Cc: Simon Horman, Vladimir Oltean, Jacob Keller, Kory Maincent,
	bcm-kernel-feedback-list, netdev, Vadim Fedorenko

The driver stores HW timestamping configuration and can technically
report it. Add callback to do it.

Signed-off-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
---
 drivers/net/phy/nxp-c45-tja11xx.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/drivers/net/phy/nxp-c45-tja11xx.c b/drivers/net/phy/nxp-c45-tja11xx.c
index 13a8fac223a9..f526528d2e32 100644
--- a/drivers/net/phy/nxp-c45-tja11xx.c
+++ b/drivers/net/phy/nxp-c45-tja11xx.c
@@ -1012,6 +1012,19 @@ static bool nxp_c45_rxtstamp(struct mii_timestamper *mii_ts,
 	return true;
 }
 
+static int nxp_c45_hwtstamp_get(struct mii_timestamper *mii_ts,
+				struct kernel_hwtstamp_config *cfg)
+{
+	struct nxp_c45_phy *priv = container_of(mii_ts, struct nxp_c45_phy,
+						mii_ts);
+
+	cfg->tx_type = priv->hwts_tx;
+	cfg->rx_filter = priv->hwts_rx ? HWTSTAMP_FILTER_PTP_V2_L2_EVENT
+				       : HWTSTAMP_FILTER_NONE;
+
+	return 0;
+}
+
 static int nxp_c45_hwtstamp_set(struct mii_timestamper *mii_ts,
 				struct kernel_hwtstamp_config *cfg,
 				struct netlink_ext_ack *extack)
@@ -1750,6 +1763,7 @@ static int nxp_c45_probe(struct phy_device *phydev)
 		priv->mii_ts.rxtstamp = nxp_c45_rxtstamp;
 		priv->mii_ts.txtstamp = nxp_c45_txtstamp;
 		priv->mii_ts.hwtstamp_set = nxp_c45_hwtstamp_set;
+		priv->mii_ts.hwtstamp_get = nxp_c45_hwtstamp_get;
 		priv->mii_ts.ts_info = nxp_c45_ts_info;
 		phydev->mii_ts = &priv->mii_ts;
 		ret = nxp_c45_init_ptp_clock(priv);
-- 
2.47.3


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

* [PATCH net-next v3 9/9] ptp: ptp_ines: add HW timestamp configuration reporting
  2025-11-19 12:47 [PATCH net-next v3 0/9] add hwtstamp_get callback to phy drivers Vadim Fedorenko
                   ` (7 preceding siblings ...)
  2025-11-19 12:47 ` [PATCH net-next v3 8/9] net: phy: nxp-c45-tja11xx: " Vadim Fedorenko
@ 2025-11-19 12:47 ` Vadim Fedorenko
  2025-11-19 14:59   ` Kory Maincent
  8 siblings, 1 reply; 24+ messages in thread
From: Vadim Fedorenko @ 2025-11-19 12:47 UTC (permalink / raw)
  To: Andrew Lunn, Florian Fainelli, Russell King, Heiner Kallweit,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Andrei Botila, Richard Cochran, Andrew Lunn
  Cc: Simon Horman, Vladimir Oltean, Jacob Keller, Kory Maincent,
	bcm-kernel-feedback-list, netdev, Vadim Fedorenko

The driver partially stores HW timestamping configuration, but missing
pieces can be read from HW. Add callback to report configuration.

Signed-off-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
---
 drivers/ptp/ptp_ines.c | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/drivers/ptp/ptp_ines.c b/drivers/ptp/ptp_ines.c
index 56c798e77f20..790eb42b78db 100644
--- a/drivers/ptp/ptp_ines.c
+++ b/drivers/ptp/ptp_ines.c
@@ -328,6 +328,28 @@ static u64 ines_find_txts(struct ines_port *port, struct sk_buff *skb)
 	return ns;
 }
 
+static int ines_hwtstamp_get(struct mii_timestamper *mii_ts,
+			     struct kernel_hwtstamp_config *cfg)
+{
+	struct ines_port *port = container_of(mii_ts, struct ines_port, mii_ts);
+	unsigned long flags;
+	u32 port_conf;
+
+	cfg->rx_filter = port->rxts_enabled ? HWTSTAMP_FILTER_PTP_V2_EVENT
+					    : HWTSTAMP_FILTER_NONE;
+	if (port->txts_enabled) {
+		spin_lock_irqsave(&port->lock, flags);
+		port_conf = ines_read32(port, port_conf);
+		spin_unlock_irqrestore(&port->lock, flags);
+		cfg->tx_type = (port_conf & CM_ONE_STEP) ? HWTSTAMP_TX_ONESTEP_P2P
+							 : HWTSTAMP_TX_OFF;
+	} else {
+		cfg->tx_type = HWTSTAMP_TX_OFF;
+	}
+
+	return 0;
+}
+
 static int ines_hwtstamp_set(struct mii_timestamper *mii_ts,
 			     struct kernel_hwtstamp_config *cfg,
 			     struct netlink_ext_ack *extack)
@@ -710,6 +732,7 @@ static struct mii_timestamper *ines_ptp_probe_channel(struct device *device,
 	port->mii_ts.rxtstamp = ines_rxtstamp;
 	port->mii_ts.txtstamp = ines_txtstamp;
 	port->mii_ts.hwtstamp_set = ines_hwtstamp_set;
+	port->mii_ts.hwtstamp_get = ines_hwtstamp_get;
 	port->mii_ts.link_state = ines_link_state;
 	port->mii_ts.ts_info = ines_ts_info;
 
-- 
2.47.3


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

* Re: [PATCH net-next v3 1/9] phy: rename hwtstamp callback to hwtstamp_set
  2025-11-19 12:47 ` [PATCH net-next v3 1/9] phy: rename hwtstamp callback to hwtstamp_set Vadim Fedorenko
@ 2025-11-19 13:23   ` Russell King (Oracle)
  2025-11-19 13:50   ` Kory Maincent
  1 sibling, 0 replies; 24+ messages in thread
From: Russell King (Oracle) @ 2025-11-19 13:23 UTC (permalink / raw)
  To: Vadim Fedorenko
  Cc: Andrew Lunn, Florian Fainelli, Heiner Kallweit, David S. Miller,
	Eric Dumazet, Jakub Kicinski, Paolo Abeni, Andrei Botila,
	Richard Cochran, Andrew Lunn, Simon Horman, Vladimir Oltean,
	Jacob Keller, Kory Maincent, bcm-kernel-feedback-list, netdev

On Wed, Nov 19, 2025 at 12:47:17PM +0000, Vadim Fedorenko wrote:
> PHY devices has hwtstamp callback which actually performs set operation.
> Rename it to better reflect the action.
> 
> Signed-off-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
> Reviewed-by: Andrew Lunn <andrew@lunn.ch>

Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>

Thanks!

-- 
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!

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

* Re: [PATCH net-next v3 2/9] phy: add hwtstamp_get callback to phy drivers
  2025-11-19 12:47 ` [PATCH net-next v3 2/9] phy: add hwtstamp_get callback to phy drivers Vadim Fedorenko
@ 2025-11-19 13:24   ` Russell King (Oracle)
  2025-11-19 14:09   ` Kory Maincent
  1 sibling, 0 replies; 24+ messages in thread
From: Russell King (Oracle) @ 2025-11-19 13:24 UTC (permalink / raw)
  To: Vadim Fedorenko
  Cc: Andrew Lunn, Florian Fainelli, Heiner Kallweit, David S. Miller,
	Eric Dumazet, Jakub Kicinski, Paolo Abeni, Andrei Botila,
	Richard Cochran, Andrew Lunn, Simon Horman, Vladimir Oltean,
	Jacob Keller, Kory Maincent, bcm-kernel-feedback-list, netdev

On Wed, Nov 19, 2025 at 12:47:18PM +0000, Vadim Fedorenko wrote:
> PHY devices had lack of hwtstamp_get callback even though most of them
> are tracking configuration info. Introduce new call back to
> mii_timestamper.
> 
> Signed-off-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>

Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>

Thanks!

-- 
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!

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

* Re: [PATCH net-next v3 1/9] phy: rename hwtstamp callback to hwtstamp_set
  2025-11-19 12:47 ` [PATCH net-next v3 1/9] phy: rename hwtstamp callback to hwtstamp_set Vadim Fedorenko
  2025-11-19 13:23   ` Russell King (Oracle)
@ 2025-11-19 13:50   ` Kory Maincent
  1 sibling, 0 replies; 24+ messages in thread
From: Kory Maincent @ 2025-11-19 13:50 UTC (permalink / raw)
  To: Vadim Fedorenko
  Cc: Andrew Lunn, Florian Fainelli, Russell King, Heiner Kallweit,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Andrei Botila, Richard Cochran, Andrew Lunn, Simon Horman,
	Vladimir Oltean, Jacob Keller, bcm-kernel-feedback-list, netdev

On Wed, 19 Nov 2025 12:47:17 +0000
Vadim Fedorenko <vadim.fedorenko@linux.dev> wrote:

> PHY devices has hwtstamp callback which actually performs set operation.
> Rename it to better reflect the action.

Reviewed-by: Kory Maincent <kory.maincent@bootlin.com>

Thank you! 
-- 
Köry Maincent, Bootlin
Embedded Linux and kernel engineering
https://bootlin.com

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

* Re: [PATCH net-next v3 2/9] phy: add hwtstamp_get callback to phy drivers
  2025-11-19 12:47 ` [PATCH net-next v3 2/9] phy: add hwtstamp_get callback to phy drivers Vadim Fedorenko
  2025-11-19 13:24   ` Russell King (Oracle)
@ 2025-11-19 14:09   ` Kory Maincent
  1 sibling, 0 replies; 24+ messages in thread
From: Kory Maincent @ 2025-11-19 14:09 UTC (permalink / raw)
  To: Vadim Fedorenko
  Cc: Andrew Lunn, Florian Fainelli, Russell King, Heiner Kallweit,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Andrei Botila, Richard Cochran, Andrew Lunn, Simon Horman,
	Vladimir Oltean, Jacob Keller, bcm-kernel-feedback-list, netdev

On Wed, 19 Nov 2025 12:47:18 +0000
Vadim Fedorenko <vadim.fedorenko@linux.dev> wrote:

> PHY devices had lack of hwtstamp_get callback even though most of them
> are tracking configuration info. Introduce new call back to
> mii_timestamper.

It would be nice to update this kdoc note:
https://elixir.bootlin.com/linux/v6.18-rc6/source/net/core/dev_ioctl.c#L252

Else:
Reviewed-by: Kory Maincent <kory.maincent@bootlin.com>

Thank you!
-- 
Köry Maincent, Bootlin
Embedded Linux and kernel engineering
https://bootlin.com

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

* Re: [PATCH net-next v3 3/9] net: phy: broadcom: add HW timestamp configuration reporting
  2025-11-19 12:47 ` [PATCH net-next v3 3/9] net: phy: broadcom: add HW timestamp configuration reporting Vadim Fedorenko
@ 2025-11-19 14:12   ` Kory Maincent
  0 siblings, 0 replies; 24+ messages in thread
From: Kory Maincent @ 2025-11-19 14:12 UTC (permalink / raw)
  To: Vadim Fedorenko
  Cc: Andrew Lunn, Florian Fainelli, Russell King, Heiner Kallweit,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Andrei Botila, Richard Cochran, Andrew Lunn, Simon Horman,
	Vladimir Oltean, Jacob Keller, bcm-kernel-feedback-list, netdev

On Wed, 19 Nov 2025 12:47:19 +0000
Vadim Fedorenko <vadim.fedorenko@linux.dev> wrote:

> The driver stores configuration information and can technically report
> it. Implement hwtstamp_get callback to report the configuration.

Reviewed-by: Kory Maincent <kory.maincent@bootlin.com>

Thank you!
-- 
Köry Maincent, Bootlin
Embedded Linux and kernel engineering
https://bootlin.com

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

* Re: [PATCH net-next v3 4/9] net: phy: dp83640: add HW timestamp configuration reporting
  2025-11-19 12:47 ` [PATCH net-next v3 4/9] net: phy: dp83640: " Vadim Fedorenko
@ 2025-11-19 14:13   ` Kory Maincent
  0 siblings, 0 replies; 24+ messages in thread
From: Kory Maincent @ 2025-11-19 14:13 UTC (permalink / raw)
  To: Vadim Fedorenko
  Cc: Andrew Lunn, Florian Fainelli, Russell King, Heiner Kallweit,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Andrei Botila, Richard Cochran, Andrew Lunn, Simon Horman,
	Vladimir Oltean, Jacob Keller, bcm-kernel-feedback-list, netdev

On Wed, 19 Nov 2025 12:47:20 +0000
Vadim Fedorenko <vadim.fedorenko@linux.dev> wrote:

> The driver stores configuration of TX timestamping and can technically
> report it. Patch RX timestamp configuration storage to be more precise
> on reporting and add callback to actually report it.

Reviewed-by: Kory Maincent <kory.maincent@bootlin.com>

Thank you!
-- 
Köry Maincent, Bootlin
Embedded Linux and kernel engineering
https://bootlin.com

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

* Re: [PATCH net-next v3 5/9] net: phy: micrel: add HW timestamp configuration reporting
  2025-11-19 12:47 ` [PATCH net-next v3 5/9] net: phy: micrel: " Vadim Fedorenko
@ 2025-11-19 14:44   ` Kory Maincent
  2025-11-19 15:10     ` Vadim Fedorenko
  0 siblings, 1 reply; 24+ messages in thread
From: Kory Maincent @ 2025-11-19 14:44 UTC (permalink / raw)
  To: Vadim Fedorenko
  Cc: Andrew Lunn, Florian Fainelli, Russell King, Heiner Kallweit,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Andrei Botila, Richard Cochran, Andrew Lunn, Simon Horman,
	Vladimir Oltean, Jacob Keller, bcm-kernel-feedback-list, netdev

On Wed, 19 Nov 2025 12:47:21 +0000
Vadim Fedorenko <vadim.fedorenko@linux.dev> wrote:

> The driver stores HW timestamping configuration and can technically
> report it. Add callback to do it.
> 
> Signed-off-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
> ---
>  drivers/net/phy/micrel.c | 27 +++++++++++++++++++++++++++
>  1 file changed, 27 insertions(+)
> 
> diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c
> index 05de68b9f719..b149d539aec3 100644
> --- a/drivers/net/phy/micrel.c
> +++ b/drivers/net/phy/micrel.c
> @@ -3147,6 +3147,18 @@ static void lan8814_flush_fifo(struct phy_device
> *phydev, bool egress) lanphy_read_page_reg(phydev, LAN8814_PAGE_PORT_REGS,
> PTP_TSU_INT_STS); }
>  
> +static int lan8814_hwtstamp_get(struct mii_timestamper *mii_ts,
> +				struct kernel_hwtstamp_config *config)
> +{
> +	struct kszphy_ptp_priv *ptp_priv =
> +			  container_of(mii_ts, struct kszphy_ptp_priv,
> mii_ts); +
> +	config->tx_type = ptp_priv->hwts_tx_type;
> +	config->rx_filter = ptp_priv->rx_filter;
> +
> +	return 0;
> +}
> +
>  static int lan8814_hwtstamp_set(struct mii_timestamper *mii_ts,
>  				struct kernel_hwtstamp_config *config,
>  				struct netlink_ext_ack *extack)
> @@ -4390,6 +4402,7 @@ static void lan8814_ptp_init(struct phy_device *phydev)
>  	ptp_priv->mii_ts.rxtstamp = lan8814_rxtstamp;
>  	ptp_priv->mii_ts.txtstamp = lan8814_txtstamp;
>  	ptp_priv->mii_ts.hwtstamp_set = lan8814_hwtstamp_set;
> +	ptp_priv->mii_ts.hwtstamp_get = lan8814_hwtstamp_get;
>  	ptp_priv->mii_ts.ts_info  = lan8814_ts_info;
>  
>  	phydev->mii_ts = &ptp_priv->mii_ts;
> @@ -5042,6 +5055,19 @@ static void lan8841_ptp_enable_processing(struct
> kszphy_ptp_priv *ptp_priv, #define LAN8841_PTP_TX_TIMESTAMP_EN
> 443 #define LAN8841_PTP_TX_MOD			445
>  
> +static int lan8841_hwtstamp_get(struct mii_timestamper *mii_ts,
> +				struct kernel_hwtstamp_config *config)
> +{
> +	struct kszphy_ptp_priv *ptp_priv;
> +
> +	ptp_priv = container_of(mii_ts, struct kszphy_ptp_priv, mii_ts);
> +
> +	config->tx_type = ptp_priv->hwts_tx_type;
> +	config->rx_filter = ptp_priv->rx_filter;

Something related to this patch, it seems there is an issue in the set
callback:
https://elixir.bootlin.com/linux/v6.18-rc6/source/drivers/net/phy/micrel.c#L3056

The priv->rx_filter and priv->hwts_tx_type are set before the switch condition.
The hwtstamp_get can then report something that is not supported.
Also HWTSTAMP_TX_ONESTEP_P2P is not managed by the driver but not returning
-ERANGE either so if we set this config the hwtstamp_get will report something
wrong as not supported.
I think you will need to add a new patch here to fix the hwtstamp_set ops.

Maybe we should update net_hwtstamp_validate to check on the capabilities
reported by ts_info but that is a bigger change.

> +
> +	return 0;
> +}
> +
>  static int lan8841_hwtstamp_set(struct mii_timestamper *mii_ts,
>  				struct kernel_hwtstamp_config *config,
>  				struct netlink_ext_ack *extack)
> @@ -5925,6 +5951,7 @@ static int lan8841_probe(struct phy_device *phydev)
>  	ptp_priv->mii_ts.rxtstamp = lan8841_rxtstamp;
>  	ptp_priv->mii_ts.txtstamp = lan8814_txtstamp;
>  	ptp_priv->mii_ts.hwtstamp_set = lan8841_hwtstamp_set;
> +	ptp_priv->mii_ts.hwtstamp_get = lan8841_hwtstamp_get;
>  	ptp_priv->mii_ts.ts_info = lan8841_ts_info;
>  
>  	phydev->mii_ts = &ptp_priv->mii_ts;



-- 
Köry Maincent, Bootlin
Embedded Linux and kernel engineering
https://bootlin.com

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

* Re: [PATCH net-next v3 6/9] net: phy: microchip_rds_ptp: add HW timestamp configuration reporting
  2025-11-19 12:47 ` [PATCH net-next v3 6/9] net: phy: microchip_rds_ptp: " Vadim Fedorenko
@ 2025-11-19 14:46   ` Kory Maincent
  0 siblings, 0 replies; 24+ messages in thread
From: Kory Maincent @ 2025-11-19 14:46 UTC (permalink / raw)
  To: Vadim Fedorenko
  Cc: Andrew Lunn, Florian Fainelli, Russell King, Heiner Kallweit,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Andrei Botila, Richard Cochran, Andrew Lunn, Simon Horman,
	Vladimir Oltean, Jacob Keller, bcm-kernel-feedback-list, netdev

On Wed, 19 Nov 2025 12:47:22 +0000
Vadim Fedorenko <vadim.fedorenko@linux.dev> wrote:

> The driver stores HW timestamping configuration and can technically
> report it. Add callback to do it.
> 
> Signed-off-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
> ---
>  drivers/net/phy/microchip_rds_ptp.c | 13 +++++++++++++
>  1 file changed, 13 insertions(+)
> 
> diff --git a/drivers/net/phy/microchip_rds_ptp.c
> b/drivers/net/phy/microchip_rds_ptp.c index 4c6326b0ceaf..d2beb3a2e6c3 100644
> --- a/drivers/net/phy/microchip_rds_ptp.c
> +++ b/drivers/net/phy/microchip_rds_ptp.c
> @@ -476,6 +476,18 @@ static bool mchp_rds_ptp_rxtstamp(struct mii_timestamper
> *mii_ts, return true;
>  }
>  
> +static int mchp_rds_ptp_hwtstamp_get(struct mii_timestamper *mii_ts,
> +				     struct kernel_hwtstamp_config *config)
> +{
> +	struct mchp_rds_ptp_clock *clock =
> +				container_of(mii_ts, struct
> mchp_rds_ptp_clock,
> +					     mii_ts);
> +	config->tx_type = clock->hwts_tx_type;
> +	config->rx_filter = clock->rx_filter;

Same issue as patch 5.

> +
> +	return 0;
> +}
> +
>  static int mchp_rds_ptp_hwtstamp_set(struct mii_timestamper *mii_ts,
>  				     struct kernel_hwtstamp_config *config,
>  				     struct netlink_ext_ack *extack)
> @@ -1282,6 +1294,7 @@ struct mchp_rds_ptp_clock *mchp_rds_ptp_probe(struct
> phy_device *phydev, u8 mmd, clock->mii_ts.rxtstamp = mchp_rds_ptp_rxtstamp;
>  	clock->mii_ts.txtstamp = mchp_rds_ptp_txtstamp;
>  	clock->mii_ts.hwtstamp_set = mchp_rds_ptp_hwtstamp_set;
> +	clock->mii_ts.hwtstamp_get = mchp_rds_ptp_hwtstamp_get;
>  	clock->mii_ts.ts_info = mchp_rds_ptp_ts_info;
>  
>  	phydev->mii_ts = &clock->mii_ts;



-- 
Köry Maincent, Bootlin
Embedded Linux and kernel engineering
https://bootlin.com

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

* Re: [PATCH net-next v3 7/9] phy: mscc: add HW timestamp configuration reporting
  2025-11-19 12:47 ` [PATCH net-next v3 7/9] phy: mscc: " Vadim Fedorenko
@ 2025-11-19 14:48   ` Kory Maincent
  0 siblings, 0 replies; 24+ messages in thread
From: Kory Maincent @ 2025-11-19 14:48 UTC (permalink / raw)
  To: Vadim Fedorenko
  Cc: Andrew Lunn, Florian Fainelli, Russell King, Heiner Kallweit,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Andrei Botila, Richard Cochran, Andrew Lunn, Simon Horman,
	Vladimir Oltean, Jacob Keller, bcm-kernel-feedback-list, netdev

On Wed, 19 Nov 2025 12:47:23 +0000
Vadim Fedorenko <vadim.fedorenko@linux.dev> wrote:

> The driver stores HW configuration and can technically report it.
> Add callback to do it.

The hwtstamp_set ops of this driver is well written!
Setting vsc8531->ptp->tx_type and vsc8531->ptp->rx_filter after the switch
condition.

Reviewed-by: Kory Maincent <kory.maincent@bootlin.com>

Thank you!

> 
> Signed-off-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
> ---
>  drivers/net/phy/mscc/mscc_ptp.c | 13 +++++++++++++
>  1 file changed, 13 insertions(+)
> 
> diff --git a/drivers/net/phy/mscc/mscc_ptp.c b/drivers/net/phy/mscc/mscc_ptp.c
> index dc06614222f6..4865eac74b0e 100644
> --- a/drivers/net/phy/mscc/mscc_ptp.c
> +++ b/drivers/net/phy/mscc/mscc_ptp.c
> @@ -1051,6 +1051,18 @@ static void vsc85xx_ts_reset_fifo(struct phy_device
> *phydev) val);
>  }
>  
> +static int vsc85xx_hwtstamp_get(struct mii_timestamper *mii_ts,
> +				struct kernel_hwtstamp_config *cfg)
> +{
> +	struct vsc8531_private *vsc8531 =
> +		container_of(mii_ts, struct vsc8531_private, mii_ts);
> +
> +	cfg->tx_type = vsc8531->ptp->tx_type;
> +	cfg->rx_filter = vsc8531->ptp->rx_filter;
> +
> +	return 0;
> +}
> +
>  static int vsc85xx_hwtstamp_set(struct mii_timestamper *mii_ts,
>  				struct kernel_hwtstamp_config *cfg,
>  				struct netlink_ext_ack *extack)
> @@ -1612,6 +1624,7 @@ int vsc8584_ptp_probe(struct phy_device *phydev)
>  	vsc8531->mii_ts.rxtstamp = vsc85xx_rxtstamp;
>  	vsc8531->mii_ts.txtstamp = vsc85xx_txtstamp;
>  	vsc8531->mii_ts.hwtstamp_set = vsc85xx_hwtstamp_set;
> +	vsc8531->mii_ts.hwtstamp_get = vsc85xx_hwtstamp_get;
>  	vsc8531->mii_ts.ts_info  = vsc85xx_ts_info;
>  	phydev->mii_ts = &vsc8531->mii_ts;
>  



-- 
Köry Maincent, Bootlin
Embedded Linux and kernel engineering
https://bootlin.com

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

* Re: [PATCH net-next v3 8/9] net: phy: nxp-c45-tja11xx: add HW timestamp configuration reporting
  2025-11-19 12:47 ` [PATCH net-next v3 8/9] net: phy: nxp-c45-tja11xx: " Vadim Fedorenko
@ 2025-11-19 14:50   ` Kory Maincent
  0 siblings, 0 replies; 24+ messages in thread
From: Kory Maincent @ 2025-11-19 14:50 UTC (permalink / raw)
  To: Vadim Fedorenko
  Cc: Andrew Lunn, Florian Fainelli, Russell King, Heiner Kallweit,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Andrei Botila, Richard Cochran, Andrew Lunn, Simon Horman,
	Vladimir Oltean, Jacob Keller, bcm-kernel-feedback-list, netdev

On Wed, 19 Nov 2025 12:47:24 +0000
Vadim Fedorenko <vadim.fedorenko@linux.dev> wrote:

> The driver stores HW timestamping configuration and can technically
> report it. Add callback to do it.

Reviewed-by: Kory Maincent <kory.maincent@bootlin.com>

Thank you!
-- 
Köry Maincent, Bootlin
Embedded Linux and kernel engineering
https://bootlin.com

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

* Re: [PATCH net-next v3 9/9] ptp: ptp_ines: add HW timestamp configuration reporting
  2025-11-19 12:47 ` [PATCH net-next v3 9/9] ptp: ptp_ines: " Vadim Fedorenko
@ 2025-11-19 14:59   ` Kory Maincent
  2025-11-19 15:14     ` Vadim Fedorenko
  0 siblings, 1 reply; 24+ messages in thread
From: Kory Maincent @ 2025-11-19 14:59 UTC (permalink / raw)
  To: Vadim Fedorenko
  Cc: Andrew Lunn, Florian Fainelli, Russell King, Heiner Kallweit,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Andrei Botila, Richard Cochran, Andrew Lunn, Simon Horman,
	Vladimir Oltean, Jacob Keller, bcm-kernel-feedback-list, netdev

On Wed, 19 Nov 2025 12:47:25 +0000
Vadim Fedorenko <vadim.fedorenko@linux.dev> wrote:

> The driver partially stores HW timestamping configuration, but missing
> pieces can be read from HW. Add callback to report configuration.
> 
> Signed-off-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
> ---
>  drivers/ptp/ptp_ines.c | 23 +++++++++++++++++++++++
>  1 file changed, 23 insertions(+)
> 
> diff --git a/drivers/ptp/ptp_ines.c b/drivers/ptp/ptp_ines.c
> index 56c798e77f20..790eb42b78db 100644
> --- a/drivers/ptp/ptp_ines.c
> +++ b/drivers/ptp/ptp_ines.c
> @@ -328,6 +328,28 @@ static u64 ines_find_txts(struct ines_port *port, struct
> sk_buff *skb) return ns;
>  }
>  
> +static int ines_hwtstamp_get(struct mii_timestamper *mii_ts,
> +			     struct kernel_hwtstamp_config *cfg)
> +{
> +	struct ines_port *port = container_of(mii_ts, struct ines_port,
> mii_ts);
> +	unsigned long flags;
> +	u32 port_conf;
> +
> +	cfg->rx_filter = port->rxts_enabled ? HWTSTAMP_FILTER_PTP_V2_EVENT
> +					    : HWTSTAMP_FILTER_NONE;
> +	if (port->txts_enabled) {
> +		spin_lock_irqsave(&port->lock, flags);
> +		port_conf = ines_read32(port, port_conf);
> +		spin_unlock_irqrestore(&port->lock, flags);
> +		cfg->tx_type = (port_conf & CM_ONE_STEP) ?
> HWTSTAMP_TX_ONESTEP_P2P
> +							 : HWTSTAMP_TX_OFF;

You could also update txts_enabled to int and save the tx type as you did in
other patches. I don't know what the best approach is, but in either way, this
is ok to me.

Reviewed-by: Kory Maincent <kory.maincent@bootlin.com>

Thank you!
-- 
Köry Maincent, Bootlin
Embedded Linux and kernel engineering
https://bootlin.com

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

* Re: [PATCH net-next v3 5/9] net: phy: micrel: add HW timestamp configuration reporting
  2025-11-19 14:44   ` Kory Maincent
@ 2025-11-19 15:10     ` Vadim Fedorenko
  2025-11-19 15:26       ` Kory Maincent
  0 siblings, 1 reply; 24+ messages in thread
From: Vadim Fedorenko @ 2025-11-19 15:10 UTC (permalink / raw)
  To: Kory Maincent
  Cc: Andrew Lunn, Florian Fainelli, Russell King, Heiner Kallweit,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Andrei Botila, Richard Cochran, Andrew Lunn, Simon Horman,
	Vladimir Oltean, Jacob Keller, bcm-kernel-feedback-list, netdev

On 19/11/2025 14:44, Kory Maincent wrote:
> On Wed, 19 Nov 2025 12:47:21 +0000
> Vadim Fedorenko <vadim.fedorenko@linux.dev> wrote:
> 
>> The driver stores HW timestamping configuration and can technically
>> report it. Add callback to do it.
>>
>> Signed-off-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
>> ---
>>   drivers/net/phy/micrel.c | 27 +++++++++++++++++++++++++++
>>   1 file changed, 27 insertions(+)
>>
>> diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c
>> index 05de68b9f719..b149d539aec3 100644
>> --- a/drivers/net/phy/micrel.c
>> +++ b/drivers/net/phy/micrel.c
>> @@ -3147,6 +3147,18 @@ static void lan8814_flush_fifo(struct phy_device
>> *phydev, bool egress) lanphy_read_page_reg(phydev, LAN8814_PAGE_PORT_REGS,
>> PTP_TSU_INT_STS); }
>>   
>> +static int lan8814_hwtstamp_get(struct mii_timestamper *mii_ts,
>> +				struct kernel_hwtstamp_config *config)
>> +{
>> +	struct kszphy_ptp_priv *ptp_priv =
>> +			  container_of(mii_ts, struct kszphy_ptp_priv,
>> mii_ts); +
>> +	config->tx_type = ptp_priv->hwts_tx_type;
>> +	config->rx_filter = ptp_priv->rx_filter;
>> +
>> +	return 0;
>> +}
>> +
>>   static int lan8814_hwtstamp_set(struct mii_timestamper *mii_ts,
>>   				struct kernel_hwtstamp_config *config,
>>   				struct netlink_ext_ack *extack)
>> @@ -4390,6 +4402,7 @@ static void lan8814_ptp_init(struct phy_device *phydev)
>>   	ptp_priv->mii_ts.rxtstamp = lan8814_rxtstamp;
>>   	ptp_priv->mii_ts.txtstamp = lan8814_txtstamp;
>>   	ptp_priv->mii_ts.hwtstamp_set = lan8814_hwtstamp_set;
>> +	ptp_priv->mii_ts.hwtstamp_get = lan8814_hwtstamp_get;
>>   	ptp_priv->mii_ts.ts_info  = lan8814_ts_info;
>>   
>>   	phydev->mii_ts = &ptp_priv->mii_ts;
>> @@ -5042,6 +5055,19 @@ static void lan8841_ptp_enable_processing(struct
>> kszphy_ptp_priv *ptp_priv, #define LAN8841_PTP_TX_TIMESTAMP_EN
>> 443 #define LAN8841_PTP_TX_MOD			445
>>   
>> +static int lan8841_hwtstamp_get(struct mii_timestamper *mii_ts,
>> +				struct kernel_hwtstamp_config *config)
>> +{
>> +	struct kszphy_ptp_priv *ptp_priv;
>> +
>> +	ptp_priv = container_of(mii_ts, struct kszphy_ptp_priv, mii_ts);
>> +
>> +	config->tx_type = ptp_priv->hwts_tx_type;
>> +	config->rx_filter = ptp_priv->rx_filter;
> 
> Something related to this patch, it seems there is an issue in the set
> callback:
> https://elixir.bootlin.com/linux/v6.18-rc6/source/drivers/net/phy/micrel.c#L3056
> 
> The priv->rx_filter and priv->hwts_tx_type are set before the switch condition.
> The hwtstamp_get can then report something that is not supported.
> Also HWTSTAMP_TX_ONESTEP_P2P is not managed by the driver but not returning
> -ERANGE either so if we set this config the hwtstamp_get will report something
> wrong as not supported.
> I think you will need to add a new patch here to fix the hwtstamp_set ops.

I agree, that there is a problem in the flow, but such change is out of
scope of this patch set. I'm going to provide some logic improvements on
per-driver basis as follow up work.

> Maybe we should update net_hwtstamp_validate to check on the capabilities
> reported by ts_info but that is a bigger change.

In this case we have to introduce validation callback and implement it
in drivers. Some drivers do downgrade filter values if provided value is
not in the list of what was provided in ethtool::ts_info. And we have to
keep this logic as otherwise it may be considered as API breakage.

> 
>> +
>> +	return 0;
>> +}
>> +
>>   static int lan8841_hwtstamp_set(struct mii_timestamper *mii_ts,
>>   				struct kernel_hwtstamp_config *config,
>>   				struct netlink_ext_ack *extack)
>> @@ -5925,6 +5951,7 @@ static int lan8841_probe(struct phy_device *phydev)
>>   	ptp_priv->mii_ts.rxtstamp = lan8841_rxtstamp;
>>   	ptp_priv->mii_ts.txtstamp = lan8814_txtstamp;
>>   	ptp_priv->mii_ts.hwtstamp_set = lan8841_hwtstamp_set;
>> +	ptp_priv->mii_ts.hwtstamp_get = lan8841_hwtstamp_get;
>>   	ptp_priv->mii_ts.ts_info = lan8841_ts_info;
>>   
>>   	phydev->mii_ts = &ptp_priv->mii_ts;
> 
> 
> 


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

* Re: [PATCH net-next v3 9/9] ptp: ptp_ines: add HW timestamp configuration reporting
  2025-11-19 14:59   ` Kory Maincent
@ 2025-11-19 15:14     ` Vadim Fedorenko
  0 siblings, 0 replies; 24+ messages in thread
From: Vadim Fedorenko @ 2025-11-19 15:14 UTC (permalink / raw)
  To: Kory Maincent
  Cc: Andrew Lunn, Florian Fainelli, Russell King, Heiner Kallweit,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Andrei Botila, Richard Cochran, Andrew Lunn, Simon Horman,
	Vladimir Oltean, Jacob Keller, bcm-kernel-feedback-list, netdev

On 19/11/2025 14:59, Kory Maincent wrote:
> On Wed, 19 Nov 2025 12:47:25 +0000
> Vadim Fedorenko <vadim.fedorenko@linux.dev> wrote:
> 
>> The driver partially stores HW timestamping configuration, but missing
>> pieces can be read from HW. Add callback to report configuration.
>>
>> Signed-off-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
>> ---
>>   drivers/ptp/ptp_ines.c | 23 +++++++++++++++++++++++
>>   1 file changed, 23 insertions(+)
>>
>> diff --git a/drivers/ptp/ptp_ines.c b/drivers/ptp/ptp_ines.c
>> index 56c798e77f20..790eb42b78db 100644
>> --- a/drivers/ptp/ptp_ines.c
>> +++ b/drivers/ptp/ptp_ines.c
>> @@ -328,6 +328,28 @@ static u64 ines_find_txts(struct ines_port *port, struct
>> sk_buff *skb) return ns;
>>   }
>>   
>> +static int ines_hwtstamp_get(struct mii_timestamper *mii_ts,
>> +			     struct kernel_hwtstamp_config *cfg)
>> +{
>> +	struct ines_port *port = container_of(mii_ts, struct ines_port,
>> mii_ts);
>> +	unsigned long flags;
>> +	u32 port_conf;
>> +
>> +	cfg->rx_filter = port->rxts_enabled ? HWTSTAMP_FILTER_PTP_V2_EVENT
>> +					    : HWTSTAMP_FILTER_NONE;
>> +	if (port->txts_enabled) {
>> +		spin_lock_irqsave(&port->lock, flags);
>> +		port_conf = ines_read32(port, port_conf);
>> +		spin_unlock_irqrestore(&port->lock, flags);
>> +		cfg->tx_type = (port_conf & CM_ONE_STEP) ?
>> HWTSTAMP_TX_ONESTEP_P2P
>> +							 : HWTSTAMP_TX_OFF;
> 
> You could also update txts_enabled to int and save the tx type as you did in
> other patches. I don't know what the best approach is, but in either way, this
> is ok to me.

I was thinking of this, but it can be treated as logic change, which I
would like to avoid in this series. But I totally agree, there is no
real need to read register each time if we can store the config. Unless 
the value can be changed by some event outside of kernel configuration
flow.

> 
> Reviewed-by: Kory Maincent <kory.maincent@bootlin.com>
> 
> Thank you!


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

* Re: [PATCH net-next v3 5/9] net: phy: micrel: add HW timestamp configuration reporting
  2025-11-19 15:10     ` Vadim Fedorenko
@ 2025-11-19 15:26       ` Kory Maincent
  0 siblings, 0 replies; 24+ messages in thread
From: Kory Maincent @ 2025-11-19 15:26 UTC (permalink / raw)
  To: Vadim Fedorenko
  Cc: Andrew Lunn, Florian Fainelli, Russell King, Heiner Kallweit,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Andrei Botila, Richard Cochran, Andrew Lunn, Simon Horman,
	Vladimir Oltean, Jacob Keller, bcm-kernel-feedback-list, netdev

On Wed, 19 Nov 2025 15:10:27 +0000
Vadim Fedorenko <vadim.fedorenko@linux.dev> wrote:

> On 19/11/2025 14:44, Kory Maincent wrote:
> > On Wed, 19 Nov 2025 12:47:21 +0000
> > Vadim Fedorenko <vadim.fedorenko@linux.dev> wrote:
> >   
> >> The driver stores HW timestamping configuration and can technically
> >> report it. Add callback to do it.
> >>
> >> Signed-off-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
> >> ---
> >>   drivers/net/phy/micrel.c | 27 +++++++++++++++++++++++++++
> >>   1 file changed, 27 insertions(+)
> >>
> >> diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c
> >> index 05de68b9f719..b149d539aec3 100644
> >> --- a/drivers/net/phy/micrel.c
> >> +++ b/drivers/net/phy/micrel.c
> >> @@ -3147,6 +3147,18 @@ static void lan8814_flush_fifo(struct phy_device
> >> *phydev, bool egress) lanphy_read_page_reg(phydev, LAN8814_PAGE_PORT_REGS,
> >> PTP_TSU_INT_STS); }
> >>   
> >> +static int lan8814_hwtstamp_get(struct mii_timestamper *mii_ts,
> >> +				struct kernel_hwtstamp_config *config)
> >> +{
> >> +	struct kszphy_ptp_priv *ptp_priv =
> >> +			  container_of(mii_ts, struct kszphy_ptp_priv,
> >> mii_ts); +
> >> +	config->tx_type = ptp_priv->hwts_tx_type;
> >> +	config->rx_filter = ptp_priv->rx_filter;
> >> +
> >> +	return 0;
> >> +}
> >> +
> >>   static int lan8814_hwtstamp_set(struct mii_timestamper *mii_ts,
> >>   				struct kernel_hwtstamp_config *config,
> >>   				struct netlink_ext_ack *extack)
> >> @@ -4390,6 +4402,7 @@ static void lan8814_ptp_init(struct phy_device
> >> *phydev) ptp_priv->mii_ts.rxtstamp = lan8814_rxtstamp;
> >>   	ptp_priv->mii_ts.txtstamp = lan8814_txtstamp;
> >>   	ptp_priv->mii_ts.hwtstamp_set = lan8814_hwtstamp_set;
> >> +	ptp_priv->mii_ts.hwtstamp_get = lan8814_hwtstamp_get;
> >>   	ptp_priv->mii_ts.ts_info  = lan8814_ts_info;
> >>   
> >>   	phydev->mii_ts = &ptp_priv->mii_ts;
> >> @@ -5042,6 +5055,19 @@ static void lan8841_ptp_enable_processing(struct
> >> kszphy_ptp_priv *ptp_priv, #define LAN8841_PTP_TX_TIMESTAMP_EN
> >> 443 #define LAN8841_PTP_TX_MOD			445
> >>   
> >> +static int lan8841_hwtstamp_get(struct mii_timestamper *mii_ts,
> >> +				struct kernel_hwtstamp_config *config)
> >> +{
> >> +	struct kszphy_ptp_priv *ptp_priv;
> >> +
> >> +	ptp_priv = container_of(mii_ts, struct kszphy_ptp_priv, mii_ts);
> >> +
> >> +	config->tx_type = ptp_priv->hwts_tx_type;
> >> +	config->rx_filter = ptp_priv->rx_filter;  
> > 
> > Something related to this patch, it seems there is an issue in the set
> > callback:
> > https://elixir.bootlin.com/linux/v6.18-rc6/source/drivers/net/phy/micrel.c#L3056
> > 
> > The priv->rx_filter and priv->hwts_tx_type are set before the switch
> > condition. The hwtstamp_get can then report something that is not supported.
> > Also HWTSTAMP_TX_ONESTEP_P2P is not managed by the driver but not returning
> > -ERANGE either so if we set this config the hwtstamp_get will report
> > something wrong as not supported.
> > I think you will need to add a new patch here to fix the hwtstamp_set ops.  
> 
> I agree, that there is a problem in the flow, but such change is out of
> scope of this patch set. I'm going to provide some logic improvements on
> per-driver basis as follow up work.

As you want but patch 5 and 6 won't be accepted without these change.

> > Maybe we should update net_hwtstamp_validate to check on the capabilities
> > reported by ts_info but that is a bigger change.  
> 
> In this case we have to introduce validation callback and implement it
> in drivers. Some drivers do downgrade filter values if provided value is
> not in the list of what was provided in ethtool::ts_info. And we have to
> keep this logic as otherwise it may be considered as API breakage.

Indeed so lets keep the current design.
-- 
Köry Maincent, Bootlin
Embedded Linux and kernel engineering
https://bootlin.com

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

end of thread, other threads:[~2025-11-19 15:26 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-19 12:47 [PATCH net-next v3 0/9] add hwtstamp_get callback to phy drivers Vadim Fedorenko
2025-11-19 12:47 ` [PATCH net-next v3 1/9] phy: rename hwtstamp callback to hwtstamp_set Vadim Fedorenko
2025-11-19 13:23   ` Russell King (Oracle)
2025-11-19 13:50   ` Kory Maincent
2025-11-19 12:47 ` [PATCH net-next v3 2/9] phy: add hwtstamp_get callback to phy drivers Vadim Fedorenko
2025-11-19 13:24   ` Russell King (Oracle)
2025-11-19 14:09   ` Kory Maincent
2025-11-19 12:47 ` [PATCH net-next v3 3/9] net: phy: broadcom: add HW timestamp configuration reporting Vadim Fedorenko
2025-11-19 14:12   ` Kory Maincent
2025-11-19 12:47 ` [PATCH net-next v3 4/9] net: phy: dp83640: " Vadim Fedorenko
2025-11-19 14:13   ` Kory Maincent
2025-11-19 12:47 ` [PATCH net-next v3 5/9] net: phy: micrel: " Vadim Fedorenko
2025-11-19 14:44   ` Kory Maincent
2025-11-19 15:10     ` Vadim Fedorenko
2025-11-19 15:26       ` Kory Maincent
2025-11-19 12:47 ` [PATCH net-next v3 6/9] net: phy: microchip_rds_ptp: " Vadim Fedorenko
2025-11-19 14:46   ` Kory Maincent
2025-11-19 12:47 ` [PATCH net-next v3 7/9] phy: mscc: " Vadim Fedorenko
2025-11-19 14:48   ` Kory Maincent
2025-11-19 12:47 ` [PATCH net-next v3 8/9] net: phy: nxp-c45-tja11xx: " Vadim Fedorenko
2025-11-19 14:50   ` Kory Maincent
2025-11-19 12:47 ` [PATCH net-next v3 9/9] ptp: ptp_ines: " Vadim Fedorenko
2025-11-19 14:59   ` Kory Maincent
2025-11-19 15:14     ` Vadim Fedorenko

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