strlcpy(info->bus_info, dev_name(&ndev->dev), sizeof(info->bus_info));
 }
 
+static int fec_enet_get_ts_info(struct net_device *ndev,
+                               struct ethtool_ts_info *info)
+{
+       struct fec_enet_private *fep = netdev_priv(ndev);
+
+       if (fep->bufdesc_ex) {
+
+               info->so_timestamping = SOF_TIMESTAMPING_TX_SOFTWARE |
+                                       SOF_TIMESTAMPING_RX_SOFTWARE |
+                                       SOF_TIMESTAMPING_SOFTWARE |
+                                       SOF_TIMESTAMPING_TX_HARDWARE |
+                                       SOF_TIMESTAMPING_RX_HARDWARE |
+                                       SOF_TIMESTAMPING_RAW_HARDWARE;
+               if (fep->ptp_clock)
+                       info->phc_index = ptp_clock_index(fep->ptp_clock);
+               else
+                       info->phc_index = -1;
+
+               info->tx_types = (1 << HWTSTAMP_TX_OFF) |
+                                (1 << HWTSTAMP_TX_ON);
+
+               info->rx_filters = (1 << HWTSTAMP_FILTER_NONE) |
+                                  (1 << HWTSTAMP_FILTER_ALL);
+               return 0;
+       } else {
+               return ethtool_op_get_ts_info(ndev, info);
+       }
+}
+
 static const struct ethtool_ops fec_enet_ethtool_ops = {
        .get_settings           = fec_enet_get_settings,
        .set_settings           = fec_enet_set_settings,
        .get_drvinfo            = fec_enet_get_drvinfo,
        .get_link               = ethtool_op_get_link,
-       .get_ts_info            = ethtool_op_get_ts_info,
+       .get_ts_info            = fec_enet_get_ts_info,
 };
 
 static int fec_enet_ioctl(struct net_device *ndev, struct ifreq *rq, int cmd)