Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a9188028 authored by Matthew Vick's avatar Matthew Vick Committed by Jeff Kirsher
Browse files

igb: Correct PTP support query from ethtool.



Update ethtool_get_ts_info to not report any supported functionality on
82575 and add support for V2 Sync and V2 Delay packets. In the case
where CONFIG_IGB_PTP is not defined, we should be reporting default
values.

v2: Correct the function to return EOPNOTSUPP when there is no PTP support
    or the device does not support PTP. Also fix minor whitespace issue.

Signed-off-by: default avatarMatthew Vick <matthew.vick@intel.com>
Cc: Richard Cochran <richardcochran@gmail.com>
Tested-by: default avatarJeff Pieper <jeffrey.e.pieper@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent a79f4f88
Loading
Loading
Loading
Loading
+38 −24
Original line number Diff line number Diff line
@@ -2295,12 +2295,18 @@ static void igb_get_strings(struct net_device *netdev, u32 stringset, u8 *data)
	}
}

#ifdef CONFIG_IGB_PTP
static int igb_get_ts_info(struct net_device *dev,
			   struct ethtool_ts_info *info)
{
	struct igb_adapter *adapter = netdev_priv(dev);

	switch (adapter->hw.mac.type) {
#ifdef CONFIG_IGB_PTP
	case e1000_82576:
	case e1000_82580:
	case e1000_i350:
	case e1000_i210:
	case e1000_i211:
		info->so_timestamping =
			SOF_TIMESTAMPING_TX_HARDWARE |
			SOF_TIMESTAMPING_RX_HARDWARE |
@@ -2315,17 +2321,27 @@ static int igb_get_ts_info(struct net_device *dev,
			(1 << HWTSTAMP_TX_OFF) |
			(1 << HWTSTAMP_TX_ON);

	info->rx_filters =
		(1 << HWTSTAMP_FILTER_NONE) |
		(1 << HWTSTAMP_FILTER_ALL) |
		(1 << HWTSTAMP_FILTER_SOME) |
		info->rx_filters = 1 << HWTSTAMP_FILTER_NONE;

		/* 82576 does not support timestamping all packets. */
		if (adapter->hw.mac.type >= e1000_82580)
			info->rx_filters |= 1 << HWTSTAMP_FILTER_ALL;
		else
			info->rx_filters |=
				(1 << HWTSTAMP_FILTER_PTP_V1_L4_SYNC) |
				(1 << HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ) |
				(1 << HWTSTAMP_FILTER_PTP_V2_L2_SYNC) |
				(1 << HWTSTAMP_FILTER_PTP_V2_L4_SYNC) |
				(1 << HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ) |
				(1 << HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ) |
				(1 << HWTSTAMP_FILTER_PTP_V2_EVENT);

		return 0;
}
#endif /* CONFIG_IGB_PTP */
	default:
		return -EOPNOTSUPP;
	}
}

static int igb_ethtool_begin(struct net_device *netdev)
{
@@ -2366,9 +2382,7 @@ static const struct ethtool_ops igb_ethtool_ops = {
	.get_ethtool_stats      = igb_get_ethtool_stats,
	.get_coalesce           = igb_get_coalesce,
	.set_coalesce           = igb_set_coalesce,
#ifdef CONFIG_IGB_PTP
	.get_ts_info            = igb_get_ts_info,
#endif /* CONFIG_IGB_PTP */
	.begin			= igb_ethtool_begin,
	.complete		= igb_ethtool_complete,
};