return 0;
 }
 
-static int dpaa2_eth_ts_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
+static int dpaa2_eth_hwtstamp_set(struct net_device *dev,
+                                 struct kernel_hwtstamp_config *config,
+                                 struct netlink_ext_ack *extack)
 {
        struct dpaa2_eth_priv *priv = netdev_priv(dev);
-       struct hwtstamp_config config;
 
        if (!dpaa2_ptp)
                return -EINVAL;
 
-       if (copy_from_user(&config, rq->ifr_data, sizeof(config)))
-               return -EFAULT;
-
-       switch (config.tx_type) {
+       switch (config->tx_type) {
        case HWTSTAMP_TX_OFF:
        case HWTSTAMP_TX_ON:
        case HWTSTAMP_TX_ONESTEP_SYNC:
-               priv->tx_tstamp_type = config.tx_type;
+               priv->tx_tstamp_type = config->tx_type;
                break;
        default:
                return -ERANGE;
        }
 
-       if (config.rx_filter == HWTSTAMP_FILTER_NONE) {
+       if (config->rx_filter == HWTSTAMP_FILTER_NONE) {
                priv->rx_tstamp = false;
        } else {
                priv->rx_tstamp = true;
                /* TS is set for all frame types, not only those requested */
-               config.rx_filter = HWTSTAMP_FILTER_ALL;
+               config->rx_filter = HWTSTAMP_FILTER_ALL;
        }
 
        if (priv->tx_tstamp_type == HWTSTAMP_TX_ONESTEP_SYNC)
                dpaa2_ptp_onestep_reg_update_method(priv);
 
-       return copy_to_user(rq->ifr_data, &config, sizeof(config)) ?
-                       -EFAULT : 0;
+       return 0;
 }
 
 static int dpaa2_eth_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
        struct dpaa2_eth_priv *priv = netdev_priv(dev);
        int err;
 
-       if (cmd == SIOCSHWTSTAMP)
-               return dpaa2_eth_ts_ioctl(dev, rq, cmd);
-
        mutex_lock(&priv->mac_lock);
 
        if (dpaa2_eth_is_type_phy(priv)) {
        .ndo_xsk_wakeup = dpaa2_xsk_wakeup,
        .ndo_setup_tc = dpaa2_eth_setup_tc,
        .ndo_vlan_rx_add_vid = dpaa2_eth_rx_add_vid,
-       .ndo_vlan_rx_kill_vid = dpaa2_eth_rx_kill_vid
+       .ndo_vlan_rx_kill_vid = dpaa2_eth_rx_kill_vid,
+       .ndo_hwtstamp_set = dpaa2_eth_hwtstamp_set,
 };
 
 static void dpaa2_eth_cdan_cb(struct dpaa2_io_notification_ctx *ctx)