]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
phy: add hwtstamp_get callback to phy drivers
authorVadim Fedorenko <vadim.fedorenko@linux.dev>
Mon, 24 Nov 2025 18:11:46 +0000 (18:11 +0000)
committerJakub Kicinski <kuba@kernel.org>
Thu, 27 Nov 2025 00:56:33 +0000 (16:56 -0800)
PHY devices had lack of hwtstamp_get callback even though most of them
are tracking configuration info. Introduce new call back to
mii_timestamper.

Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Reviewed-by: Kory Maincent <kory.maincent@bootlin.com>
Signed-off-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
Link: https://patch.msgid.link/20251124181151.277256-3-vadim.fedorenko@linux.dev
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/phy/phy.c
include/linux/mii_timestamper.h
net/core/dev_ioctl.c

index 350bc23c1fdbe53d861097d884a869ceb3b772e1..13dd1691886d9dfd195fbbcf74a90eb303b16a24 100644 (file)
@@ -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;
 }
 
index 08863c0e9ea331e5323531c89a0f1d3ce8d65d93..3102c425c8e05c836824a9c87d8f2084d8dc638f 100644 (file)
@@ -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);
 
index 0720ccc14df90d35a4a631482f0219f0d4804604..53a53357cfef5b48ae89156d65ed5798084d1539 100644 (file)
@@ -249,10 +249,11 @@ int net_hwtstamp_validate(const struct kernel_hwtstamp_config *cfg)
  *
  * Helper for calling the default hardware provider timestamping.
  *
- * Note: phy_mii_ioctl() only handles SIOCSHWTSTAMP (not SIOCGHWTSTAMP), and
- * there only exists a phydev->mii_ts->hwtstamp() method. So this will return
- * -EOPNOTSUPP for phylib for now, which is still more accurate than letting
- * the netdev handle the GET request.
+ * Note: phy_mii_ioctl() only handles SIOCSHWTSTAMP (not SIOCGHWTSTAMP), but
+ * phydev->mii_ts has both hwtstamp_get() and hwtstamp_set() methods. So this
+ * will return -EOPNOTSUPP for phylib only if hwtstamp_get() is not
+ * implemented for now, which is still more accurate than letting the netdev
+ * handle the GET request.
  */
 int dev_get_hwtstamp_phylib(struct net_device *dev,
                            struct kernel_hwtstamp_config *cfg)