]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
igc: Add support for ethtool GET_TS_INFO command
authorVinicius Costa Gomes <vinicius.gomes@intel.com>
Mon, 2 Dec 2019 23:19:52 +0000 (15:19 -0800)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Mon, 6 Jan 2020 22:59:48 +0000 (14:59 -0800)
This command allows igc to report what types of timestamping are
supported. ptp4l uses this to detect if the hardware supports
timestamping.

Signed-off-by: Vinicius Costa Gomes <vinicius.gomes@intel.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/igc/igc_ethtool.c

index 455c1cdceb6e2b51e30a8ab04d1aaa65177a0d88..ee07011e13e9b8e948cb3552a51b46ca3d3035a1 100644 (file)
@@ -1600,6 +1600,39 @@ static int igc_set_channels(struct net_device *netdev,
        return 0;
 }
 
+static int igc_get_ts_info(struct net_device *dev,
+                          struct ethtool_ts_info *info)
+{
+       struct igc_adapter *adapter = netdev_priv(dev);
+
+       if (adapter->ptp_clock)
+               info->phc_index = ptp_clock_index(adapter->ptp_clock);
+       else
+               info->phc_index = -1;
+
+       switch (adapter->hw.mac.type) {
+       case igc_i225:
+               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;
+
+               info->tx_types =
+                       BIT(HWTSTAMP_TX_OFF) |
+                       BIT(HWTSTAMP_TX_ON);
+
+               info->rx_filters = BIT(HWTSTAMP_FILTER_NONE);
+               info->rx_filters |= BIT(HWTSTAMP_FILTER_ALL);
+
+               return 0;
+       default:
+               return -EOPNOTSUPP;
+       }
+}
+
 static u32 igc_get_priv_flags(struct net_device *netdev)
 {
        struct igc_adapter *adapter = netdev_priv(netdev);
@@ -1847,6 +1880,7 @@ static const struct ethtool_ops igc_ethtool_ops = {
        .get_rxfh_indir_size    = igc_get_rxfh_indir_size,
        .get_rxfh               = igc_get_rxfh,
        .set_rxfh               = igc_set_rxfh,
+       .get_ts_info            = igc_get_ts_info,
        .get_channels           = igc_get_channels,
        .set_channels           = igc_set_channels,
        .get_priv_flags         = igc_get_priv_flags,