]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
octeontx2: convert to ndo_hwtstamp API
authorVadim Fedorenko <vadim.fedorenko@linux.dev>
Thu, 23 Oct 2025 22:04:52 +0000 (22:04 +0000)
committerJakub Kicinski <kuba@kernel.org>
Tue, 28 Oct 2025 01:04:36 +0000 (18:04 -0700)
Convert driver to use .ndo_hwtstamp_get()/.ndo_hwtstamp_set() callbacks.
otx2_ioctl() becomes empty, remove it.

Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Signed-off-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
Link: https://patch.msgid.link/20251023220457.3201122-2-vadim.fedorenko@linux.dev
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h
drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c
drivers/net/ethernet/marvell/octeontx2/nic/otx2_vf.c

index 1c8a3c078a647db5b1f99dd8437c1e18bb8abcb9..ec26d1b6c789ffe3a64dba5907ea080f1e964d44 100644 (file)
@@ -527,7 +527,7 @@ struct otx2_nic {
        u32                     nix_lmt_size;
 
        struct otx2_ptp         *ptp;
-       struct hwtstamp_config  tstamp;
+       struct kernel_hwtstamp_config tstamp;
 
        unsigned long           rq_bmap;
 
@@ -1098,8 +1098,11 @@ int otx2_open(struct net_device *netdev);
 int otx2_stop(struct net_device *netdev);
 int otx2_set_real_num_queues(struct net_device *netdev,
                             int tx_queues, int rx_queues);
-int otx2_ioctl(struct net_device *netdev, struct ifreq *req, int cmd);
-int otx2_config_hwtstamp(struct net_device *netdev, struct ifreq *ifr);
+int otx2_config_hwtstamp_get(struct net_device *netdev,
+                            struct kernel_hwtstamp_config *config);
+int otx2_config_hwtstamp_set(struct net_device *netdev,
+                            struct kernel_hwtstamp_config *config,
+                            struct netlink_ext_ack *extack);
 
 /* MCAM filter related APIs */
 int otx2_mcam_flow_init(struct otx2_nic *pf);
index e808995703cfd0714a133e61bdda3e9c512d5560..a7feb4c392b367dc3a1146c3417ef07183d304e8 100644 (file)
@@ -2445,18 +2445,26 @@ static int otx2_config_hw_tx_tstamp(struct otx2_nic *pfvf, bool enable)
        return 0;
 }
 
-int otx2_config_hwtstamp(struct net_device *netdev, struct ifreq *ifr)
+int otx2_config_hwtstamp_get(struct net_device *netdev,
+                            struct kernel_hwtstamp_config *config)
+{
+       struct otx2_nic *pfvf = netdev_priv(netdev);
+
+       *config = pfvf->tstamp;
+       return 0;
+}
+EXPORT_SYMBOL(otx2_config_hwtstamp_get);
+
+int otx2_config_hwtstamp_set(struct net_device *netdev,
+                            struct kernel_hwtstamp_config *config,
+                            struct netlink_ext_ack *extack)
 {
        struct otx2_nic *pfvf = netdev_priv(netdev);
-       struct hwtstamp_config config;
 
        if (!pfvf->ptp)
                return -ENODEV;
 
-       if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
-               return -EFAULT;
-
-       switch (config.tx_type) {
+       switch (config->tx_type) {
        case HWTSTAMP_TX_OFF:
                if (pfvf->flags & OTX2_FLAG_PTP_ONESTEP_SYNC)
                        pfvf->flags &= ~OTX2_FLAG_PTP_ONESTEP_SYNC;
@@ -2465,8 +2473,11 @@ int otx2_config_hwtstamp(struct net_device *netdev, struct ifreq *ifr)
                otx2_config_hw_tx_tstamp(pfvf, false);
                break;
        case HWTSTAMP_TX_ONESTEP_SYNC:
-               if (!test_bit(CN10K_PTP_ONESTEP, &pfvf->hw.cap_flag))
+               if (!test_bit(CN10K_PTP_ONESTEP, &pfvf->hw.cap_flag)) {
+                       NL_SET_ERR_MSG_MOD(extack,
+                                          "One-step time stamping is not supported");
                        return -ERANGE;
+               }
                pfvf->flags |= OTX2_FLAG_PTP_ONESTEP_SYNC;
                schedule_delayed_work(&pfvf->ptp->synctstamp_work,
                                      msecs_to_jiffies(500));
@@ -2478,7 +2489,7 @@ int otx2_config_hwtstamp(struct net_device *netdev, struct ifreq *ifr)
                return -ERANGE;
        }
 
-       switch (config.rx_filter) {
+       switch (config->rx_filter) {
        case HWTSTAMP_FILTER_NONE:
                otx2_config_hw_rx_tstamp(pfvf, false);
                break;
@@ -2497,35 +2508,17 @@ int otx2_config_hwtstamp(struct net_device *netdev, struct ifreq *ifr)
        case HWTSTAMP_FILTER_PTP_V2_SYNC:
        case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
                otx2_config_hw_rx_tstamp(pfvf, true);
-               config.rx_filter = HWTSTAMP_FILTER_ALL;
+               config->rx_filter = HWTSTAMP_FILTER_ALL;
                break;
        default:
                return -ERANGE;
        }
 
-       memcpy(&pfvf->tstamp, &config, sizeof(config));
+       pfvf->tstamp = *config;
 
-       return copy_to_user(ifr->ifr_data, &config,
-                           sizeof(config)) ? -EFAULT : 0;
-}
-EXPORT_SYMBOL(otx2_config_hwtstamp);
-
-int otx2_ioctl(struct net_device *netdev, struct ifreq *req, int cmd)
-{
-       struct otx2_nic *pfvf = netdev_priv(netdev);
-       struct hwtstamp_config *cfg = &pfvf->tstamp;
-
-       switch (cmd) {
-       case SIOCSHWTSTAMP:
-               return otx2_config_hwtstamp(netdev, req);
-       case SIOCGHWTSTAMP:
-               return copy_to_user(req->ifr_data, cfg,
-                                   sizeof(*cfg)) ? -EFAULT : 0;
-       default:
-               return -EOPNOTSUPP;
-       }
+       return 0;
 }
-EXPORT_SYMBOL(otx2_ioctl);
+EXPORT_SYMBOL(otx2_config_hwtstamp_set);
 
 static int otx2_do_set_vf_mac(struct otx2_nic *pf, int vf, const u8 *mac)
 {
@@ -2942,7 +2935,6 @@ static const struct net_device_ops otx2_netdev_ops = {
        .ndo_set_features       = otx2_set_features,
        .ndo_tx_timeout         = otx2_tx_timeout,
        .ndo_get_stats64        = otx2_get_stats64,
-       .ndo_eth_ioctl          = otx2_ioctl,
        .ndo_set_vf_mac         = otx2_set_vf_mac,
        .ndo_set_vf_vlan        = otx2_set_vf_vlan,
        .ndo_get_vf_config      = otx2_get_vf_config,
@@ -2951,6 +2943,8 @@ static const struct net_device_ops otx2_netdev_ops = {
        .ndo_xdp_xmit           = otx2_xdp_xmit,
        .ndo_setup_tc           = otx2_setup_tc,
        .ndo_set_vf_trust       = otx2_ndo_set_vf_trust,
+       .ndo_hwtstamp_get       = otx2_config_hwtstamp_get,
+       .ndo_hwtstamp_set       = otx2_config_hwtstamp_set,
 };
 
 int otx2_wq_init(struct otx2_nic *pf)
index 25381f079b97d6cbd183791b4998ee302a143f1b..f4fdbfba866764477d7c72f4f71da9beb0f61f5c 100644 (file)
@@ -534,8 +534,9 @@ static const struct net_device_ops otx2vf_netdev_ops = {
        .ndo_set_features = otx2vf_set_features,
        .ndo_get_stats64 = otx2_get_stats64,
        .ndo_tx_timeout = otx2_tx_timeout,
-       .ndo_eth_ioctl  = otx2_ioctl,
        .ndo_setup_tc = otx2_setup_tc,
+       .ndo_hwtstamp_get = otx2_config_hwtstamp_get,
+       .ndo_hwtstamp_set = otx2_config_hwtstamp_set,
 };
 
 static int otx2_vf_wq_init(struct otx2_nic *vf)