[PATCH net-next] net: enetc: convert to ndo_hwtstamp_get() and ndo_hwtstamp_set()

Vladimir Oltean posted 1 patch 7 months, 1 week ago
There is a newer version of this series
drivers/net/ethernet/freescale/enetc/enetc.c  | 45 ++++++++-----------
drivers/net/ethernet/freescale/enetc/enetc.h  | 15 +++++++
.../net/ethernet/freescale/enetc/enetc_pf.c   |  2 +
.../net/ethernet/freescale/enetc/enetc_vf.c   |  2 +
4 files changed, 37 insertions(+), 27 deletions(-)
[PATCH net-next] net: enetc: convert to ndo_hwtstamp_get() and ndo_hwtstamp_set()
Posted by Vladimir Oltean 7 months, 1 week ago
New timestamping API was introduced in commit 66f7223039c0 ("net: add
NDOs for configuring hardware timestamping") from kernel v6.6. It is
time to convert the ENETC driver to the new API, so that the
ndo_eth_ioctl() path can be removed completely.

Move the enetc_hwtstamp_get() and enetc_hwtstamp_set() calls away from
enetc_ioctl() to dedicated net_device_ops for the LS1028A PF and VF
(NETC v4 does not yet implement enetc_ioctl()), adapt the prototypes and
export these symbols (enetc_ioctl() is also exported).

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
---
 drivers/net/ethernet/freescale/enetc/enetc.c  | 45 ++++++++-----------
 drivers/net/ethernet/freescale/enetc/enetc.h  | 15 +++++++
 .../net/ethernet/freescale/enetc/enetc_pf.c   |  2 +
 .../net/ethernet/freescale/enetc/enetc_vf.c   |  2 +
 4 files changed, 37 insertions(+), 27 deletions(-)

diff --git a/drivers/net/ethernet/freescale/enetc/enetc.c b/drivers/net/ethernet/freescale/enetc/enetc.c
index 3ee52f4b1166..0eb87964f292 100644
--- a/drivers/net/ethernet/freescale/enetc/enetc.c
+++ b/drivers/net/ethernet/freescale/enetc/enetc.c
@@ -3262,16 +3262,14 @@ void enetc_set_features(struct net_device *ndev, netdev_features_t features)
 }
 EXPORT_SYMBOL_GPL(enetc_set_features);
 
-static int enetc_hwtstamp_set(struct net_device *ndev, struct ifreq *ifr)
+int enetc_hwtstamp_set(struct net_device *ndev,
+		       struct kernel_hwtstamp_config *config,
+		       struct netlink_ext_ack *extack)
 {
 	struct enetc_ndev_priv *priv = netdev_priv(ndev);
 	int err, new_offloads = priv->active_offloads;
-	struct hwtstamp_config config;
 
-	if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
-		return -EFAULT;
-
-	switch (config.tx_type) {
+	switch (config->tx_type) {
 	case HWTSTAMP_TX_OFF:
 		new_offloads &= ~ENETC_F_TX_TSTAMP_MASK;
 		break;
@@ -3290,13 +3288,13 @@ static int enetc_hwtstamp_set(struct net_device *ndev, struct ifreq *ifr)
 		return -ERANGE;
 	}
 
-	switch (config.rx_filter) {
+	switch (config->rx_filter) {
 	case HWTSTAMP_FILTER_NONE:
 		new_offloads &= ~ENETC_F_RX_TSTAMP;
 		break;
 	default:
 		new_offloads |= ENETC_F_RX_TSTAMP;
-		config.rx_filter = HWTSTAMP_FILTER_ALL;
+		config->rx_filter = HWTSTAMP_FILTER_ALL;
 	}
 
 	if ((new_offloads ^ priv->active_offloads) & ENETC_F_RX_TSTAMP) {
@@ -3309,42 +3307,35 @@ static int enetc_hwtstamp_set(struct net_device *ndev, struct ifreq *ifr)
 
 	priv->active_offloads = new_offloads;
 
-	return copy_to_user(ifr->ifr_data, &config, sizeof(config)) ?
-	       -EFAULT : 0;
+	return 0;
 }
+EXPORT_SYMBOL_GPL(enetc_hwtstamp_set);
 
-static int enetc_hwtstamp_get(struct net_device *ndev, struct ifreq *ifr)
+int enetc_hwtstamp_get(struct net_device *ndev,
+		       struct kernel_hwtstamp_config *config)
 {
 	struct enetc_ndev_priv *priv = netdev_priv(ndev);
-	struct hwtstamp_config config;
 
-	config.flags = 0;
+	config->flags = 0;
 
 	if (priv->active_offloads & ENETC_F_TX_ONESTEP_SYNC_TSTAMP)
-		config.tx_type = HWTSTAMP_TX_ONESTEP_SYNC;
+		config->tx_type = HWTSTAMP_TX_ONESTEP_SYNC;
 	else if (priv->active_offloads & ENETC_F_TX_TSTAMP)
-		config.tx_type = HWTSTAMP_TX_ON;
+		config->tx_type = HWTSTAMP_TX_ON;
 	else
-		config.tx_type = HWTSTAMP_TX_OFF;
+		config->tx_type = HWTSTAMP_TX_OFF;
 
-	config.rx_filter = (priv->active_offloads & ENETC_F_RX_TSTAMP) ?
-			    HWTSTAMP_FILTER_ALL : HWTSTAMP_FILTER_NONE;
+	config->rx_filter = (priv->active_offloads & ENETC_F_RX_TSTAMP) ?
+			     HWTSTAMP_FILTER_ALL : HWTSTAMP_FILTER_NONE;
 
-	return copy_to_user(ifr->ifr_data, &config, sizeof(config)) ?
-	       -EFAULT : 0;
+	return 0;
 }
+EXPORT_SYMBOL_GPL(enetc_hwtstamp_get);
 
 int enetc_ioctl(struct net_device *ndev, struct ifreq *rq, int cmd)
 {
 	struct enetc_ndev_priv *priv = netdev_priv(ndev);
 
-	if (IS_ENABLED(CONFIG_FSL_ENETC_PTP_CLOCK)) {
-		if (cmd == SIOCSHWTSTAMP)
-			return enetc_hwtstamp_set(ndev, rq);
-		if (cmd == SIOCGHWTSTAMP)
-			return enetc_hwtstamp_get(ndev, rq);
-	}
-
 	if (!priv->phylink)
 		return -EOPNOTSUPP;
 
diff --git a/drivers/net/ethernet/freescale/enetc/enetc.h b/drivers/net/ethernet/freescale/enetc/enetc.h
index 4ad4eb5c5a74..5c2f4e9f68fa 100644
--- a/drivers/net/ethernet/freescale/enetc/enetc.h
+++ b/drivers/net/ethernet/freescale/enetc/enetc.h
@@ -481,6 +481,21 @@ int enetc_setup_bpf(struct net_device *ndev, struct netdev_bpf *bpf);
 int enetc_xdp_xmit(struct net_device *ndev, int num_frames,
 		   struct xdp_frame **frames, u32 flags);
 
+#if IS_ENABLED(CONFIG_FSL_ENETC_PTP_CLOCK)
+
+int enetc_hwtstamp_get(struct net_device *ndev,
+		       struct kernel_hwtstamp_config *config);
+int enetc_hwtstamp_set(struct net_device *ndev,
+		       struct kernel_hwtstamp_config *config,
+		       struct netlink_ext_ack *extack);
+
+#else
+
+#define enetc_hwtstamp_get(ndev, config)		NULL
+#define enetc_hwtstamp_set(ndev, config, extack)	NULL
+
+#endif
+
 /* ethtool */
 extern const struct ethtool_ops enetc_pf_ethtool_ops;
 extern const struct ethtool_ops enetc4_pf_ethtool_ops;
diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf.c b/drivers/net/ethernet/freescale/enetc/enetc_pf.c
index 203862ec1114..e3bbe6916a29 100644
--- a/drivers/net/ethernet/freescale/enetc/enetc_pf.c
+++ b/drivers/net/ethernet/freescale/enetc/enetc_pf.c
@@ -728,6 +728,8 @@ static const struct net_device_ops enetc_ndev_ops = {
 	.ndo_setup_tc		= enetc_pf_setup_tc,
 	.ndo_bpf		= enetc_setup_bpf,
 	.ndo_xdp_xmit		= enetc_xdp_xmit,
+	.ndo_hwtstamp_get	= enetc_hwtstamp_get,
+	.ndo_hwtstamp_set	= enetc_hwtstamp_set,
 };
 
 static struct phylink_pcs *
diff --git a/drivers/net/ethernet/freescale/enetc/enetc_vf.c b/drivers/net/ethernet/freescale/enetc/enetc_vf.c
index 3768752b6008..16f311567e47 100644
--- a/drivers/net/ethernet/freescale/enetc/enetc_vf.c
+++ b/drivers/net/ethernet/freescale/enetc/enetc_vf.c
@@ -121,6 +121,8 @@ static const struct net_device_ops enetc_ndev_ops = {
 	.ndo_set_features	= enetc_vf_set_features,
 	.ndo_eth_ioctl		= enetc_ioctl,
 	.ndo_setup_tc		= enetc_vf_setup_tc,
+	.ndo_hwtstamp_get	= enetc_hwtstamp_get,
+	.ndo_hwtstamp_set	= enetc_hwtstamp_set,
 };
 
 static void enetc_vf_netdev_setup(struct enetc_si *si, struct net_device *ndev,
-- 
2.43.0
Re: [PATCH net-next] net: enetc: convert to ndo_hwtstamp_get() and ndo_hwtstamp_set()
Posted by kernel test robot 7 months, 1 week ago
Hi Vladimir,

kernel test robot noticed the following build errors:

[auto build test ERROR on net-next/main]

url:    https://github.com/intel-lab-lkp/linux/commits/Vladimir-Oltean/net-enetc-convert-to-ndo_hwtstamp_get-and-ndo_hwtstamp_set/20250508-194458
base:   net-next/main
patch link:    https://lore.kernel.org/r/20250508114310.1258162-1-vladimir.oltean%40nxp.com
patch subject: [PATCH net-next] net: enetc: convert to ndo_hwtstamp_get() and ndo_hwtstamp_set()
config: arm64-randconfig-002-20250509 (https://download.01.org/0day-ci/archive/20250510/202505100217.0jMyMEHN-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 8.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250510/202505100217.0jMyMEHN-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202505100217.0jMyMEHN-lkp@intel.com/

All errors (new ones prefixed by >>):

   In file included from include/uapi/linux/posix_types.h:5,
                    from include/uapi/linux/types.h:14,
                    from include/linux/types.h:6,
                    from include/linux/kasan-checks.h:5,
                    from include/asm-generic/rwonce.h:26,
                    from arch/arm64/include/asm/rwonce.h:71,
                    from include/linux/compiler.h:390,
                    from include/linux/build_bug.h:5,
                    from include/linux/container_of.h:5,
                    from include/linux/list.h:5,
                    from include/linux/timer.h:5,
                    from drivers/net/ethernet/freescale/enetc/enetc.h:4,
                    from drivers/net/ethernet/freescale/enetc/enetc.c:4:
>> include/linux/stddef.h:8:16: error: expected identifier or '(' before 'void'
    #define NULL ((void *)0)
                   ^~~~
   drivers/net/ethernet/freescale/enetc/enetc.h:495:50: note: in expansion of macro 'NULL'
    #define enetc_hwtstamp_set(ndev, config, extack) NULL
                                                     ^~~~
   drivers/net/ethernet/freescale/enetc/enetc.c:3265:5: note: in expansion of macro 'enetc_hwtstamp_set'
    int enetc_hwtstamp_set(struct net_device *ndev,
        ^~~~~~~~~~~~~~~~~~
>> include/linux/stddef.h:8:23: error: expected ')' before numeric constant
    #define NULL ((void *)0)
                          ^
   drivers/net/ethernet/freescale/enetc/enetc.h:495:50: note: in expansion of macro 'NULL'
    #define enetc_hwtstamp_set(ndev, config, extack) NULL
                                                     ^~~~
   drivers/net/ethernet/freescale/enetc/enetc.c:3265:5: note: in expansion of macro 'enetc_hwtstamp_set'
    int enetc_hwtstamp_set(struct net_device *ndev,
        ^~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/printk.h:8,
                    from include/asm-generic/bug.h:22,
                    from arch/arm64/include/asm/bug.h:26,
                    from include/linux/ktime.h:24,
                    from include/linux/timer.h:6,
                    from drivers/net/ethernet/freescale/enetc/enetc.h:4,
                    from drivers/net/ethernet/freescale/enetc/enetc.c:4:
>> drivers/net/ethernet/freescale/enetc/enetc.c:3312:19: error: 'enetc_hwtstamp_set' undeclared here (not in a function); did you mean 'enetc_tstamp_tx'?
    EXPORT_SYMBOL_GPL(enetc_hwtstamp_set);
                      ^~~~~~~~~~~~~~~~~~
   include/linux/export.h:70:16: note: in definition of macro '__EXPORT_SYMBOL'
     extern typeof(sym) sym;     \
                   ^~~
   include/linux/export.h:84:33: note: in expansion of macro '_EXPORT_SYMBOL'
    #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "GPL")
                                    ^~~~~~~~~~~~~~
   drivers/net/ethernet/freescale/enetc/enetc.c:3312:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    EXPORT_SYMBOL_GPL(enetc_hwtstamp_set);
    ^~~~~~~~~~~~~~~~~
   In file included from include/uapi/linux/posix_types.h:5,
                    from include/uapi/linux/types.h:14,
                    from include/linux/types.h:6,
                    from include/linux/kasan-checks.h:5,
                    from include/asm-generic/rwonce.h:26,
                    from arch/arm64/include/asm/rwonce.h:71,
                    from include/linux/compiler.h:390,
                    from include/linux/build_bug.h:5,
                    from include/linux/container_of.h:5,
                    from include/linux/list.h:5,
                    from include/linux/timer.h:5,
                    from drivers/net/ethernet/freescale/enetc/enetc.h:4,
                    from drivers/net/ethernet/freescale/enetc/enetc.c:4:
>> include/linux/stddef.h:8:16: error: expected identifier or '(' before 'void'
    #define NULL ((void *)0)
                   ^~~~
   drivers/net/ethernet/freescale/enetc/enetc.h:494:43: note: in expansion of macro 'NULL'
    #define enetc_hwtstamp_get(ndev, config)  NULL
                                              ^~~~
   drivers/net/ethernet/freescale/enetc/enetc.c:3314:5: note: in expansion of macro 'enetc_hwtstamp_get'
    int enetc_hwtstamp_get(struct net_device *ndev,
        ^~~~~~~~~~~~~~~~~~
>> include/linux/stddef.h:8:23: error: expected ')' before numeric constant
    #define NULL ((void *)0)
                          ^
   drivers/net/ethernet/freescale/enetc/enetc.h:494:43: note: in expansion of macro 'NULL'
    #define enetc_hwtstamp_get(ndev, config)  NULL
                                              ^~~~
   drivers/net/ethernet/freescale/enetc/enetc.c:3314:5: note: in expansion of macro 'enetc_hwtstamp_get'
    int enetc_hwtstamp_get(struct net_device *ndev,
        ^~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/printk.h:8,
                    from include/asm-generic/bug.h:22,
                    from arch/arm64/include/asm/bug.h:26,
                    from include/linux/ktime.h:24,
                    from include/linux/timer.h:6,
                    from drivers/net/ethernet/freescale/enetc/enetc.h:4,
                    from drivers/net/ethernet/freescale/enetc/enetc.c:4:
>> drivers/net/ethernet/freescale/enetc/enetc.c:3333:19: error: 'enetc_hwtstamp_get' undeclared here (not in a function); did you mean 'enetc_hwtstamp_set'?
    EXPORT_SYMBOL_GPL(enetc_hwtstamp_get);
                      ^~~~~~~~~~~~~~~~~~
   include/linux/export.h:70:16: note: in definition of macro '__EXPORT_SYMBOL'
     extern typeof(sym) sym;     \
                   ^~~
   include/linux/export.h:84:33: note: in expansion of macro '_EXPORT_SYMBOL'
    #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "GPL")
                                    ^~~~~~~~~~~~~~
   drivers/net/ethernet/freescale/enetc/enetc.c:3333:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    EXPORT_SYMBOL_GPL(enetc_hwtstamp_get);
    ^~~~~~~~~~~~~~~~~
--
   In file included from include/uapi/linux/posix_types.h:5,
                    from include/uapi/linux/types.h:14,
                    from include/linux/types.h:6,
                    from include/linux/kasan-checks.h:5,
                    from include/asm-generic/rwonce.h:26,
                    from arch/arm64/include/asm/rwonce.h:71,
                    from include/linux/compiler.h:390,
                    from include/linux/build_bug.h:5,
                    from include/linux/container_of.h:5,
                    from include/linux/list.h:5,
                    from include/linux/timer.h:5,
                    from enetc.h:4,
                    from enetc.c:4:
>> include/linux/stddef.h:8:16: error: expected identifier or '(' before 'void'
    #define NULL ((void *)0)
                   ^~~~
   enetc.h:495:50: note: in expansion of macro 'NULL'
    #define enetc_hwtstamp_set(ndev, config, extack) NULL
                                                     ^~~~
   enetc.c:3265:5: note: in expansion of macro 'enetc_hwtstamp_set'
    int enetc_hwtstamp_set(struct net_device *ndev,
        ^~~~~~~~~~~~~~~~~~
>> include/linux/stddef.h:8:23: error: expected ')' before numeric constant
    #define NULL ((void *)0)
                          ^
   enetc.h:495:50: note: in expansion of macro 'NULL'
    #define enetc_hwtstamp_set(ndev, config, extack) NULL
                                                     ^~~~
   enetc.c:3265:5: note: in expansion of macro 'enetc_hwtstamp_set'
    int enetc_hwtstamp_set(struct net_device *ndev,
        ^~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/printk.h:8,
                    from include/asm-generic/bug.h:22,
                    from arch/arm64/include/asm/bug.h:26,
                    from include/linux/ktime.h:24,
                    from include/linux/timer.h:6,
                    from enetc.h:4,
                    from enetc.c:4:
   enetc.c:3312:19: error: 'enetc_hwtstamp_set' undeclared here (not in a function); did you mean 'enetc_tstamp_tx'?
    EXPORT_SYMBOL_GPL(enetc_hwtstamp_set);
                      ^~~~~~~~~~~~~~~~~~
   include/linux/export.h:70:16: note: in definition of macro '__EXPORT_SYMBOL'
     extern typeof(sym) sym;     \
                   ^~~
   include/linux/export.h:84:33: note: in expansion of macro '_EXPORT_SYMBOL'
    #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "GPL")
                                    ^~~~~~~~~~~~~~
   enetc.c:3312:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    EXPORT_SYMBOL_GPL(enetc_hwtstamp_set);
    ^~~~~~~~~~~~~~~~~
   In file included from include/uapi/linux/posix_types.h:5,
                    from include/uapi/linux/types.h:14,
                    from include/linux/types.h:6,
                    from include/linux/kasan-checks.h:5,
                    from include/asm-generic/rwonce.h:26,
                    from arch/arm64/include/asm/rwonce.h:71,
                    from include/linux/compiler.h:390,
                    from include/linux/build_bug.h:5,
                    from include/linux/container_of.h:5,
                    from include/linux/list.h:5,
                    from include/linux/timer.h:5,
                    from enetc.h:4,
                    from enetc.c:4:
>> include/linux/stddef.h:8:16: error: expected identifier or '(' before 'void'
    #define NULL ((void *)0)
                   ^~~~
   enetc.h:494:43: note: in expansion of macro 'NULL'
    #define enetc_hwtstamp_get(ndev, config)  NULL
                                              ^~~~
   enetc.c:3314:5: note: in expansion of macro 'enetc_hwtstamp_get'
    int enetc_hwtstamp_get(struct net_device *ndev,
        ^~~~~~~~~~~~~~~~~~
>> include/linux/stddef.h:8:23: error: expected ')' before numeric constant
    #define NULL ((void *)0)
                          ^
   enetc.h:494:43: note: in expansion of macro 'NULL'
    #define enetc_hwtstamp_get(ndev, config)  NULL
                                              ^~~~
   enetc.c:3314:5: note: in expansion of macro 'enetc_hwtstamp_get'
    int enetc_hwtstamp_get(struct net_device *ndev,
        ^~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/printk.h:8,
                    from include/asm-generic/bug.h:22,
                    from arch/arm64/include/asm/bug.h:26,
                    from include/linux/ktime.h:24,
                    from include/linux/timer.h:6,
                    from enetc.h:4,
                    from enetc.c:4:
   enetc.c:3333:19: error: 'enetc_hwtstamp_get' undeclared here (not in a function); did you mean 'enetc_hwtstamp_set'?
    EXPORT_SYMBOL_GPL(enetc_hwtstamp_get);
                      ^~~~~~~~~~~~~~~~~~
   include/linux/export.h:70:16: note: in definition of macro '__EXPORT_SYMBOL'
     extern typeof(sym) sym;     \
                   ^~~
   include/linux/export.h:84:33: note: in expansion of macro '_EXPORT_SYMBOL'
    #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "GPL")
                                    ^~~~~~~~~~~~~~
   enetc.c:3333:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    EXPORT_SYMBOL_GPL(enetc_hwtstamp_get);
    ^~~~~~~~~~~~~~~~~


vim +3312 drivers/net/ethernet/freescale/enetc/enetc.c

  3264	
  3265	int enetc_hwtstamp_set(struct net_device *ndev,
  3266			       struct kernel_hwtstamp_config *config,
  3267			       struct netlink_ext_ack *extack)
  3268	{
  3269		struct enetc_ndev_priv *priv = netdev_priv(ndev);
  3270		int err, new_offloads = priv->active_offloads;
  3271	
  3272		switch (config->tx_type) {
  3273		case HWTSTAMP_TX_OFF:
  3274			new_offloads &= ~ENETC_F_TX_TSTAMP_MASK;
  3275			break;
  3276		case HWTSTAMP_TX_ON:
  3277			new_offloads &= ~ENETC_F_TX_TSTAMP_MASK;
  3278			new_offloads |= ENETC_F_TX_TSTAMP;
  3279			break;
  3280		case HWTSTAMP_TX_ONESTEP_SYNC:
  3281			if (!enetc_si_is_pf(priv->si))
  3282				return -EOPNOTSUPP;
  3283	
  3284			new_offloads &= ~ENETC_F_TX_TSTAMP_MASK;
  3285			new_offloads |= ENETC_F_TX_ONESTEP_SYNC_TSTAMP;
  3286			break;
  3287		default:
  3288			return -ERANGE;
  3289		}
  3290	
  3291		switch (config->rx_filter) {
  3292		case HWTSTAMP_FILTER_NONE:
  3293			new_offloads &= ~ENETC_F_RX_TSTAMP;
  3294			break;
  3295		default:
  3296			new_offloads |= ENETC_F_RX_TSTAMP;
  3297			config->rx_filter = HWTSTAMP_FILTER_ALL;
  3298		}
  3299	
  3300		if ((new_offloads ^ priv->active_offloads) & ENETC_F_RX_TSTAMP) {
  3301			bool extended = !!(new_offloads & ENETC_F_RX_TSTAMP);
  3302	
  3303			err = enetc_reconfigure(priv, extended, NULL, NULL);
  3304			if (err)
  3305				return err;
  3306		}
  3307	
  3308		priv->active_offloads = new_offloads;
  3309	
  3310		return 0;
  3311	}
> 3312	EXPORT_SYMBOL_GPL(enetc_hwtstamp_set);
  3313	
  3314	int enetc_hwtstamp_get(struct net_device *ndev,
  3315			       struct kernel_hwtstamp_config *config)
  3316	{
  3317		struct enetc_ndev_priv *priv = netdev_priv(ndev);
  3318	
  3319		config->flags = 0;
  3320	
  3321		if (priv->active_offloads & ENETC_F_TX_ONESTEP_SYNC_TSTAMP)
  3322			config->tx_type = HWTSTAMP_TX_ONESTEP_SYNC;
  3323		else if (priv->active_offloads & ENETC_F_TX_TSTAMP)
  3324			config->tx_type = HWTSTAMP_TX_ON;
  3325		else
  3326			config->tx_type = HWTSTAMP_TX_OFF;
  3327	
  3328		config->rx_filter = (priv->active_offloads & ENETC_F_RX_TSTAMP) ?
  3329				     HWTSTAMP_FILTER_ALL : HWTSTAMP_FILTER_NONE;
  3330	
  3331		return 0;
  3332	}
> 3333	EXPORT_SYMBOL_GPL(enetc_hwtstamp_get);
  3334	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Re: [PATCH net-next] net: enetc: convert to ndo_hwtstamp_get() and ndo_hwtstamp_set()
Posted by Vadim Fedorenko 7 months, 1 week ago
On 08/05/2025 12:43, Vladimir Oltean wrote:
> New timestamping API was introduced in commit 66f7223039c0 ("net: add
> NDOs for configuring hardware timestamping") from kernel v6.6. It is
> time to convert the ENETC driver to the new API, so that the
> ndo_eth_ioctl() path can be removed completely.
> 
> Move the enetc_hwtstamp_get() and enetc_hwtstamp_set() calls away from
> enetc_ioctl() to dedicated net_device_ops for the LS1028A PF and VF
> (NETC v4 does not yet implement enetc_ioctl()), adapt the prototypes and
> export these symbols (enetc_ioctl() is also exported).
> 
> Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>

Again, extack can be potentially used to provide some info in case of
enetc_hwtstamp_set() fail, but in this case it's more obvious.

Reviewed-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>