diff --git a/SOURCES/0004-ethtool-Fix-SFF-8079-cable-technology-bit-parsing.patch b/SOURCES/0004-ethtool-Fix-SFF-8079-cable-technology-bit-parsing.patch
new file mode 100644
index 0000000..9c67185
--- /dev/null
+++ b/SOURCES/0004-ethtool-Fix-SFF-8079-cable-technology-bit-parsing.patch
@@ -0,0 +1,36 @@
+From 51f9fba287ff7c8b10e0d5291cd66e78d40b6b8f Mon Sep 17 00:00:00 2001
+From: Gal Pressman <galp@mellanox.com>
+Date: Sun, 19 Mar 2017 14:10:41 +0200
+Subject: [PATCH 4/7] ethtool: Fix SFF 8079 cable technology bit parsing
+
+According to the transceiver compliance code definition in the spec, bits
+2 & 3 in the 8th byte are indication of active/passive cable, and not
+specifically related to FC/copper.
+
+Fixes: 2edf56749abe ("ethtool: Addition of -m option to dump module eeprom")
+Signed-off-by: Gal Pressman <galp@mellanox.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+(cherry picked from commit e33c8841f26090031d571fddd71dab06f56ab1bf)
+---
+ sfpid.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/sfpid.c b/sfpid.c
+index fd6415c..1732e5e 100644
+--- a/sfpid.c
++++ b/sfpid.c
+@@ -137,9 +137,9 @@ static void sff8079_show_transceiver(const __u8 *id)
+ 	if (id[8] & (1 << 4))
+ 		printf("%s FC: Longwave laser (LL)\n", pfx);
+ 	if (id[8] & (1 << 3))
+-		printf("%s FC: Copper Active\n", pfx);
++		printf("%s Active Cable\n", pfx);
+ 	if (id[8] & (1 << 2))
+-		printf("%s FC: Copper Passive\n", pfx);
++		printf("%s Passive Cable\n", pfx);
+ 	if (id[8] & (1 << 1))
+ 		printf("%s FC: Copper FC-BaseT\n", pfx);
+ 	/* Fibre Channel transmission media */
+-- 
+1.8.3.1
+
diff --git a/SOURCES/0005-ethtool-Support-for-configurable-RSS-hash-function.patch b/SOURCES/0005-ethtool-Support-for-configurable-RSS-hash-function.patch
new file mode 100644
index 0000000..7020ab2
--- /dev/null
+++ b/SOURCES/0005-ethtool-Support-for-configurable-RSS-hash-function.patch
@@ -0,0 +1,188 @@
+From e89f3c656ff17741aa3ea33c57bc177afedc999b Mon Sep 17 00:00:00 2001
+From: Gal Pressman <galp@mellanox.com>
+Date: Wed, 8 Mar 2017 16:03:51 +0200
+Subject: [PATCH 5/7] ethtool: Support for configurable RSS hash function
+
+This ethtool patch adds support to set and get the current RSS hash
+function for the device through the new hfunc mask field in the
+ethtool_rxfh struct. Kernel supported hash function names are queried
+with ETHTOOL_GSTRINGS - each string is corresponding with a bit in hfunc
+mask according to its index in the string-set.
+
+(This corrects the mistaken revert from commit 126464e4da182064. -- JWL)
+
+Signed-off-by: Eyal Perry <eyalpe@mellanox.com>
+Signed-off-by: Gal Pressman <galp@mellanox.com>
+Reviewed-by: Saeed Mahameed <saeedm@mellanox.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+(cherry picked from commit b888f358763a20625a381e071ea50524a520c7c1)
+---
+ ethtool.8.in |  6 ++++++
+ ethtool.c    | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
+ 2 files changed, 69 insertions(+), 3 deletions(-)
+
+diff --git a/ethtool.8.in b/ethtool.8.in
+index 9631847..b69c5c6 100644
+--- a/ethtool.8.in
++++ b/ethtool.8.in
+@@ -301,6 +301,8 @@ ethtool \- query or control network driver and hardware settings
+ .BI weight\  W0
+ .IR W1
+ .RB ...\ | \ default \ ]
++.RB [ hfunc
++.IR FUNC ]
+ .HP
+ .B ethtool \-f|\-\-flash
+ .I devname file
+@@ -853,6 +855,10 @@ Sets RSS hash key of the specified network device. RSS hash key should be of dev
+ Hash key format must be in xx:yy:zz:aa:bb:cc format meaning both the nibbles of a byte should be mentioned
+ even if a nibble is zero.
+ .TP
++.BI hfunc
++Sets RSS hash function of the specified network device.
++List of RSS hash functions which kernel supports is shown as a part of the --show-rxfh command output.
++.TP
+ .BI equal\  N
+ Sets the receive flow hash indirection table to spread flows evenly
+ between the first \fIN\fR receive queues.
+diff --git a/ethtool.c b/ethtool.c
+index ce48639..8eba6e6 100644
+--- a/ethtool.c
++++ b/ethtool.c
+@@ -3640,6 +3640,7 @@ static int do_grxfhindir(struct cmd_context *ctx,
+ 
+ static int do_grxfh(struct cmd_context *ctx)
+ {
++	struct ethtool_gstrings *hfuncs = NULL;
+ 	struct ethtool_rxfh rss_head = {0};
+ 	struct ethtool_rxnfc ring_count;
+ 	struct ethtool_rxfh *rss;
+@@ -3697,6 +3698,26 @@ static int do_grxfh(struct cmd_context *ctx)
+ 			printf("%02x:", (u8) hkey[i]);
+ 	}
+ 
++	printf("RSS hash function:\n");
++	if (!rss->hfunc) {
++		printf("    Operation not supported\n");
++		goto out;
++	}
++
++	hfuncs = get_stringset(ctx, ETH_SS_RSS_HASH_FUNCS, 0, 1);
++	if (!hfuncs) {
++		perror("Cannot get hash functions names");
++		free(rss);
++		return 1;
++	}
++
++	for (i = 0; i < hfuncs->len; i++)
++		printf("    %s: %s\n",
++		       (const char *)hfuncs->data + i * ETH_GSTRING_LEN,
++		       (rss->hfunc & (1 << i)) ? "on" : "off");
++
++out:
++	free(hfuncs);
+ 	free(rss);
+ 	return 0;
+ }
+@@ -3800,11 +3821,16 @@ static int do_srxfh(struct cmd_context *ctx)
+ 	struct ethtool_rxfh *rss;
+ 	struct ethtool_rxnfc ring_count;
+ 	int rxfhindir_equal = 0, rxfhindir_default = 0;
++	struct ethtool_gstrings *hfuncs = NULL;
+ 	char **rxfhindir_weight = NULL;
+ 	char *rxfhindir_key = NULL;
++	char *req_hfunc_name = NULL;
++	char *hfunc_name = NULL;
+ 	char *hkey = NULL;
+ 	int err = 0;
++	int i;
+ 	u32 arg_num = 0, indir_bytes = 0;
++	u32 req_hfunc = 0;
+ 	u32 entry_size = sizeof(rss_head.rss_config[0]);
+ 	u32 num_weights = 0;
+ 
+@@ -3836,6 +3862,12 @@ static int do_srxfh(struct cmd_context *ctx)
+ 		} else if (!strcmp(ctx->argp[arg_num], "default")) {
+ 			++arg_num;
+ 			rxfhindir_default = 1;
++		} else if (!strcmp(ctx->argp[arg_num], "hfunc")) {
++			++arg_num;
++			req_hfunc_name = ctx->argp[arg_num];
++			if (!req_hfunc_name)
++				exit_bad_args();
++			++arg_num;
+ 		} else {
+ 			exit_bad_args();
+ 		}
+@@ -3868,7 +3900,8 @@ static int do_srxfh(struct cmd_context *ctx)
+ 
+ 	rss_head.cmd = ETHTOOL_GRSSH;
+ 	err = send_ioctl(ctx, &rss_head);
+-	if (err < 0 && errno == EOPNOTSUPP && !rxfhindir_key) {
++	if (err < 0 && errno == EOPNOTSUPP && !rxfhindir_key &&
++	    !req_hfunc_name) {
+ 		return do_srxfhindir(ctx, rxfhindir_default, rxfhindir_equal,
+ 				     rxfhindir_weight, num_weights);
+ 	} else if (err < 0) {
+@@ -3886,14 +3919,39 @@ static int do_srxfh(struct cmd_context *ctx)
+ 	if (rxfhindir_equal || rxfhindir_weight)
+ 		indir_bytes = rss_head.indir_size * entry_size;
+ 
++	if (rss_head.hfunc && req_hfunc_name) {
++		hfuncs = get_stringset(ctx, ETH_SS_RSS_HASH_FUNCS, 0, 1);
++		if (!hfuncs) {
++			perror("Cannot get hash functions names");
++			return 1;
++		}
++
++		for (i = 0; i < hfuncs->len && !req_hfunc ; i++) {
++			hfunc_name = (char *)(hfuncs->data +
++					      i * ETH_GSTRING_LEN);
++			if (!strncmp(hfunc_name, req_hfunc_name,
++				     ETH_GSTRING_LEN))
++				req_hfunc = (u32)1 << i;
++		}
++
++		if (!req_hfunc) {
++			fprintf(stderr,
++				"Unknown hash function: %s\n", req_hfunc_name);
++			free(hfuncs);
++			return 1;
++		}
++	}
++
+ 	rss = calloc(1, sizeof(*rss) + indir_bytes + rss_head.key_size);
+ 	if (!rss) {
+ 		perror("Cannot allocate memory for RX flow hash config");
+-		return 1;
++		err = 1;
++		goto free;
+ 	}
+ 	rss->cmd = ETHTOOL_SRSSH;
+ 	rss->indir_size = rss_head.indir_size;
+ 	rss->key_size = rss_head.key_size;
++	rss->hfunc = req_hfunc;
+ 
+ 	if (fill_indir_table(&rss->indir_size, rss->rss_config, rxfhindir_default,
+ 			     rxfhindir_equal, rxfhindir_weight, num_weights)) {
+@@ -3918,6 +3976,7 @@ free:
+ 		free(hkey);
+ 
+ 	free(rss);
++	free(hfuncs);
+ 	return err;
+ }
+ 
+@@ -4650,7 +4709,8 @@ static const struct option {
+ 	{ "-X|--set-rxfh-indir|--rxfh", 1, do_srxfh,
+ 	  "Set Rx flow hash indirection table and/or RSS hash key",
+ 	  "		[ equal N | weight W0 W1 ... | default ]\n"
+-	  "		[ hkey %x:%x:%x:%x:%x:.... ]\n" },
++	  "		[ hkey %x:%x:%x:%x:%x:.... ]\n"
++	  "		[ hfunc FUNC ]\n" },
+ 	{ "-f|--flash", 1, do_flash,
+ 	  "Flash firmware image from the specified file to a region on the device",
+ 	  "               FILENAME [ REGION-NUMBER-TO-FLASH ]\n" },
+-- 
+1.8.3.1
+
diff --git a/SOURCES/0006-net_tstamp.h-sync-with-net-next.patch b/SOURCES/0006-net_tstamp.h-sync-with-net-next.patch
new file mode 100644
index 0000000..8a3f21d
--- /dev/null
+++ b/SOURCES/0006-net_tstamp.h-sync-with-net-next.patch
@@ -0,0 +1,129 @@
+From 13e8c7b8c8537488bc7612c11c429cec274db1f9 Mon Sep 17 00:00:00 2001
+From: Miroslav Lichvar <mlichvar@redhat.com>
+Date: Tue, 23 May 2017 16:29:29 +0200
+Subject: [PATCH 6/7] net_tstamp.h: sync with net-next
+
+This covers kernel changes up to:
+
+commit b50a5c70ffa4fd6b6da324ab54c84adf48fb17d9
+Author: Miroslav Lichvar <mlichvar@redhat.com>
+Date:   Fri May 19 17:52:40 2017 +0200
+
+    net: allow simultaneous SW and HW transmit timestamping
+
+    Add SOF_TIMESTAMPING_OPT_TX_SWHW option to allow an outgoing packet to
+    be looped to the socket's error queue with a software timestamp even
+    when a hardware transmit timestamp is expected to be provided by the
+    driver.
+
+    Applications using this option will receive two separate messages from
+    the error queue, one with a software timestamp and the other with a
+    hardware timestamp. As the hardware timestamp is saved to the shared skb
+    info, which may happen before the first message with software timestamp
+    is received by the application, the hardware timestamp is copied to the
+    SCM_TIMESTAMPING control message only when the skb has no software
+    timestamp or it is an incoming packet.
+
+    While changing sw_tx_timestamp(), inline it in skb_tx_timestamp() as
+    there are no other users.
+
+    CC: Richard Cochran <richardcochran@gmail.com>
+    CC: Willem de Bruijn <willemb@google.com>
+    Signed-off-by: Miroslav Lichvar <mlichvar@redhat.com>
+    Acked-by: Willem de Bruijn <willemb@google.com>
+    Signed-off-by: David S. Miller <davem@davemloft.net>
+
+CC: Richard Cochran <richardcochran@gmail.com>
+Signed-off-by: Miroslav Lichvar <mlichvar@redhat.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+(cherry picked from commit ba800e3b4acd0692fc16013acbab2c3ac1ecfe66)
+---
+ net_tstamp-copy.h | 52 +++++++++++++++++++++++++++++++++++++++++-----------
+ 1 file changed, 41 insertions(+), 11 deletions(-)
+
+diff --git a/net_tstamp-copy.h b/net_tstamp-copy.h
+index ae5df12..3d421d9 100644
+--- a/net_tstamp-copy.h
++++ b/net_tstamp-copy.h
+@@ -9,6 +9,7 @@
+ #ifndef _NET_TIMESTAMPING_H
+ #define _NET_TIMESTAMPING_H
+ 
++#include <linux/types.h>
+ #include <linux/socket.h>   /* for SO_TIMESTAMPING */
+ 
+ /* SO_TIMESTAMPING gets an integer bit field comprised of these values */
+@@ -20,23 +21,42 @@ enum {
+ 	SOF_TIMESTAMPING_SOFTWARE = (1<<4),
+ 	SOF_TIMESTAMPING_SYS_HARDWARE = (1<<5),
+ 	SOF_TIMESTAMPING_RAW_HARDWARE = (1<<6),
+-	SOF_TIMESTAMPING_MASK =
+-	(SOF_TIMESTAMPING_RAW_HARDWARE - 1) |
+-	SOF_TIMESTAMPING_RAW_HARDWARE
++	SOF_TIMESTAMPING_OPT_ID = (1<<7),
++	SOF_TIMESTAMPING_TX_SCHED = (1<<8),
++	SOF_TIMESTAMPING_TX_ACK = (1<<9),
++	SOF_TIMESTAMPING_OPT_CMSG = (1<<10),
++	SOF_TIMESTAMPING_OPT_TSONLY = (1<<11),
++	SOF_TIMESTAMPING_OPT_STATS = (1<<12),
++	SOF_TIMESTAMPING_OPT_PKTINFO = (1<<13),
++	SOF_TIMESTAMPING_OPT_TX_SWHW = (1<<14),
++
++	SOF_TIMESTAMPING_LAST = SOF_TIMESTAMPING_OPT_TX_SWHW,
++	SOF_TIMESTAMPING_MASK = (SOF_TIMESTAMPING_LAST - 1) |
++				 SOF_TIMESTAMPING_LAST
+ };
+ 
++/*
++ * SO_TIMESTAMPING flags are either for recording a packet timestamp or for
++ * reporting the timestamp to user space.
++ * Recording flags can be set both via socket options and control messages.
++ */
++#define SOF_TIMESTAMPING_TX_RECORD_MASK	(SOF_TIMESTAMPING_TX_HARDWARE | \
++					 SOF_TIMESTAMPING_TX_SOFTWARE | \
++					 SOF_TIMESTAMPING_TX_SCHED | \
++					 SOF_TIMESTAMPING_TX_ACK)
++
+ /**
+- * struct hwtstamp_config - %SIOCSHWTSTAMP parameter
++ * struct hwtstamp_config - %SIOCGHWTSTAMP and %SIOCSHWTSTAMP parameter
+  *
+- * @flags:	no flags defined right now, must be zero
++ * @flags:	no flags defined right now, must be zero for %SIOCSHWTSTAMP
+  * @tx_type:	one of HWTSTAMP_TX_*
+- * @rx_type:	one of one of HWTSTAMP_FILTER_*
++ * @rx_filter:	one of HWTSTAMP_FILTER_*
+  *
+- * %SIOCSHWTSTAMP expects a &struct ifreq with a ifr_data pointer to
+- * this structure. dev_ifsioc() in the kernel takes care of the
+- * translation between 32 bit userspace and 64 bit kernel. The
+- * structure is intentionally chosen so that it has the same layout on
+- * 32 and 64 bit systems, don't break this!
++ * %SIOCGHWTSTAMP and %SIOCSHWTSTAMP expect a &struct ifreq with a
++ * ifr_data pointer to this structure.  For %SIOCSHWTSTAMP, if the
++ * driver or hardware does not support the requested @rx_filter value,
++ * the driver may use a more general filter mode.  In this case
++ * @rx_filter will indicate the actual mode on return.
+  */
+ struct hwtstamp_config {
+ 	int flags;
+@@ -108,6 +128,16 @@ enum hwtstamp_rx_filters {
+ 	HWTSTAMP_FILTER_PTP_V2_SYNC,
+ 	/* PTP v2/802.AS1, any layer, Delay_req packet */
+ 	HWTSTAMP_FILTER_PTP_V2_DELAY_REQ,
++
++	/* NTP, UDP, all versions and packet modes */
++	HWTSTAMP_FILTER_NTP_ALL,
++};
++
++/* SCM_TIMESTAMPING_PKTINFO control message */
++struct scm_ts_pktinfo {
++	__u32 if_index;
++	__u32 pkt_length;
++	__u32 reserved[2];
+ };
+ 
+ #endif /* _NET_TIMESTAMPING_H */
+-- 
+1.8.3.1
+
diff --git a/SOURCES/0007-ethtool-add-support-for-HWTSTAMP_FILTER_NTP_ALL.patch b/SOURCES/0007-ethtool-add-support-for-HWTSTAMP_FILTER_NTP_ALL.patch
new file mode 100644
index 0000000..3bb7ff3
--- /dev/null
+++ b/SOURCES/0007-ethtool-add-support-for-HWTSTAMP_FILTER_NTP_ALL.patch
@@ -0,0 +1,40 @@
+From ee10917f5cb60f8602deac815ec9923258fa6ab2 Mon Sep 17 00:00:00 2001
+From: Miroslav Lichvar <mlichvar@redhat.com>
+Date: Tue, 23 May 2017 16:29:30 +0200
+Subject: [PATCH 7/7] ethtool: add support for HWTSTAMP_FILTER_NTP_ALL
+
+Add HWTSTAMP_FILTER_NTP_ALL to the list of hardware receive
+filters which can be printed by ethtool -T.
+
+CC: Richard Cochran <richardcochran@gmail.com>
+Signed-off-by: Miroslav Lichvar <mlichvar@redhat.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+(cherry picked from commit d976d5dada4e58d3fdc31506943307159289493a)
+---
+ ethtool.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/ethtool.c b/ethtool.c
+index 8eba6e6..5465f59 100644
+--- a/ethtool.c
++++ b/ethtool.c
+@@ -1583,7 +1583,7 @@ static char *tx_type_labels[N_TX_TYPES] = {
+ 	"one-step-sync         (HWTSTAMP_TX_ONESTEP_SYNC)",
+ };
+ 
+-#define N_RX_FILTERS (HWTSTAMP_FILTER_PTP_V2_DELAY_REQ + 1)
++#define N_RX_FILTERS (HWTSTAMP_FILTER_NTP_ALL + 1)
+ 
+ static char *rx_filter_labels[N_RX_FILTERS] = {
+ 	"none                  (HWTSTAMP_FILTER_NONE)",
+@@ -1601,6 +1601,7 @@ static char *rx_filter_labels[N_RX_FILTERS] = {
+ 	"ptpv2-event           (HWTSTAMP_FILTER_PTP_V2_EVENT)",
+ 	"ptpv2-sync            (HWTSTAMP_FILTER_PTP_V2_SYNC)",
+ 	"ptpv2-delay-req       (HWTSTAMP_FILTER_PTP_V2_DELAY_REQ)",
++	"ntp-all               (HWTSTAMP_FILTER_NTP_ALL)",
+ };
+ 
+ static int dump_tsinfo(const struct ethtool_ts_info *info)
+-- 
+1.8.3.1
+
diff --git a/SOURCES/0008-ethtool-copy.h-sync-with-net-next.patch b/SOURCES/0008-ethtool-copy.h-sync-with-net-next.patch
new file mode 100644
index 0000000..23c6bb1
--- /dev/null
+++ b/SOURCES/0008-ethtool-copy.h-sync-with-net-next.patch
@@ -0,0 +1,96 @@
+From 1cfc4bab2c9109f8d9c58344e21da4fa0cae17ca Mon Sep 17 00:00:00 2001
+From: "Allan W. Nielsen" <allan.nielsen@microsemi.com>
+Date: Thu, 24 Nov 2016 09:56:50 +0100
+Subject: [PATCH 08/11] ethtool-copy.h:sync with net-next
+
+This covers kernel changes upto:
+
+commit 607c7029146790201e90b58c4235ddff0304d6e0
+Author: Raju Lakkaraju <Raju.Lakkaraju@microsemi.com>
+Date:   Thu Nov 17 13:07:22 2016 +0100
+
+    ethtool: (uapi) Add ETHTOOL_PHY_DOWNSHIFT to PHY tunables
+
+    For operation in cabling environments that are incompatible with
+    1000BASE-T, PHY device may provide an automatic link speed downshift
+    operation. When enabled, the device automatically changes its 1000BASE-T
+    auto-negotiation to the next slower speed after a configured number of
+    failed attempts at 1000BASE-T.  This feature is useful in setting up in
+    networks using older cable installations that include only pairs A and B,
+    and not pairs C and D.
+
+    Signed-off-by: Raju Lakkaraju <Raju.Lakkaraju@microsemi.com>
+    Signed-off-by: Allan W. Nielsen <allan.nielsen@microsemi.com>
+    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
+    Signed-off-by: David S. Miller <davem@davemloft.net>
+
+Signed-off-by: Allan W. Nielsen <allan.nielsen@microsemi.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+(cherry picked from commit af5af00a644e117c573d9afe591f8ce51348953f)
+---
+ ethtool-copy.h | 21 ++++++++++++++++++---
+ 1 file changed, 18 insertions(+), 3 deletions(-)
+
+diff --git a/ethtool-copy.h b/ethtool-copy.h
+index 70748f5..3d299e3 100644
+--- a/ethtool-copy.h
++++ b/ethtool-copy.h
+@@ -117,8 +117,7 @@ struct ethtool_cmd {
+ static __inline__ void ethtool_cmd_speed_set(struct ethtool_cmd *ep,
+ 					 __u32 speed)
+ {
+-
+-	ep->speed = (__u16)speed;
++	ep->speed = (__u16)(speed & 0xFFFF);
+ 	ep->speed_hi = (__u16)(speed >> 16);
+ }
+ 
+@@ -247,6 +246,19 @@ struct ethtool_tunable {
+ 	void	*data[0];
+ };
+ 
++#define DOWNSHIFT_DEV_DEFAULT_COUNT	0xff
++#define DOWNSHIFT_DEV_DISABLE		0
++
++enum phy_tunable_id {
++	ETHTOOL_PHY_ID_UNSPEC,
++	ETHTOOL_PHY_DOWNSHIFT,
++	/*
++	 * Add your fresh new phy tunable attribute above and remember to update
++	 * phy_tunable_strings[] in net/core/ethtool.c
++	 */
++	__ETHTOOL_PHY_TUNABLE_COUNT,
++};
++
+ /**
+  * struct ethtool_regs - hardware register dump
+  * @cmd: Command number = %ETHTOOL_GREGS
+@@ -547,6 +559,7 @@ struct ethtool_pauseparam {
+  * @ETH_SS_FEATURES: Device feature names
+  * @ETH_SS_RSS_HASH_FUNCS: RSS hush function names
+  * @ETH_SS_PHY_STATS: Statistic names, for use with %ETHTOOL_GPHYSTATS
++ * @ETH_SS_PHY_TUNABLES: PHY tunable names
+  */
+ enum ethtool_stringset {
+ 	ETH_SS_TEST		= 0,
+@@ -557,6 +570,7 @@ enum ethtool_stringset {
+ 	ETH_SS_RSS_HASH_FUNCS,
+ 	ETH_SS_TUNABLES,
+ 	ETH_SS_PHY_STATS,
++	ETH_SS_PHY_TUNABLES,
+ };
+ 
+ /**
+@@ -1312,7 +1326,8 @@ struct ethtool_per_queue_op {
+ 
+ #define ETHTOOL_GLINKSETTINGS	0x0000004c /* Get ethtool_link_settings */
+ #define ETHTOOL_SLINKSETTINGS	0x0000004d /* Set ethtool_link_settings */
+-
++#define ETHTOOL_PHY_GTUNABLE	0x0000004e /* Get PHY tunable configuration */
++#define ETHTOOL_PHY_STUNABLE	0x0000004f /* Set PHY tunable configuration */
+ 
+ /* compatibility with older code */
+ #define SPARC_ETH_GSET		ETHTOOL_GSET
+-- 
+1.8.3.1
+
diff --git a/SOURCES/0009-ethtool-Add-support-for-2500baseT-5000baseT-link-mod.patch b/SOURCES/0009-ethtool-Add-support-for-2500baseT-5000baseT-link-mod.patch
new file mode 100644
index 0000000..3ee44bc
--- /dev/null
+++ b/SOURCES/0009-ethtool-Add-support-for-2500baseT-5000baseT-link-mod.patch
@@ -0,0 +1,83 @@
+From c5c7c33cb83947523e954c7410216e6b8c0dd942 Mon Sep 17 00:00:00 2001
+From: Pavel Belous <pavel.s.belous@gmail.com>
+Date: Mon, 30 Jan 2017 20:03:30 +0300
+Subject: [PATCH 09/11] ethtool: Add support for 2500baseT/5000baseT link modes
+
+This patch introduce ethtool support for 2500BaseT and 5000BaseT link modes
+from new IEEE 802.3bz standard.
+
+ethtool-copy.h file sync with net.
+
+Signed-off-by: Pavel Belous <pavel.s.belous@gmail.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+(cherry picked from commit 64dfc5e2f0467a4f61c066165eb42c118ca744e3)
+---
+ ethtool-copy.h | 4 +++-
+ ethtool.8.in   | 4 +++-
+ ethtool.c      | 6 ++++++
+ 3 files changed, 12 insertions(+), 2 deletions(-)
+
+diff --git a/ethtool-copy.h b/ethtool-copy.h
+index 3d299e3..06fc04c 100644
+--- a/ethtool-copy.h
++++ b/ethtool-copy.h
+@@ -1382,6 +1382,8 @@ enum ethtool_link_mode_bit_indices {
+ 	ETHTOOL_LINK_MODE_10000baseLR_Full_BIT	= 44,
+ 	ETHTOOL_LINK_MODE_10000baseLRM_Full_BIT	= 45,
+ 	ETHTOOL_LINK_MODE_10000baseER_Full_BIT	= 46,
++	ETHTOOL_LINK_MODE_2500baseT_Full_BIT = 47,
++	ETHTOOL_LINK_MODE_5000baseT_Full_BIT = 48,
+ 
+ 
+ 	/* Last allowed bit for __ETHTOOL_LINK_MODE_LEGACY_MASK is bit
+@@ -1391,7 +1393,7 @@ enum ethtool_link_mode_bit_indices {
+ 	 */
+ 
+ 	__ETHTOOL_LINK_MODE_LAST
+-	  = ETHTOOL_LINK_MODE_10000baseER_Full_BIT,
++	  = ETHTOOL_LINK_MODE_5000baseT_Full_BIT,
+ };
+ 
+ #define __ETHTOOL_LINK_MODE_LEGACY_MASK(base_name)	\
+diff --git a/ethtool.8.in b/ethtool.8.in
+index b69c5c6..eb0f551 100644
+--- a/ethtool.8.in
++++ b/ethtool.8.in
+@@ -578,7 +578,9 @@ lB	l	lB.
+ 0x020	1000baseT Full
+ 0x20000	1000baseKX Full
+ 0x20000000000	1000baseX Full
+-0x8000	2500baseX Full	(not supported by IEEE standards)
++0x800000000000  2500baseT Full
++0x8000	2500baseX Full	(not supported by IEEE standards)'
++0x1000000000000  5000baseT Full
+ 0x1000	10000baseT Full
+ 0x40000	10000baseKX4 Full
+ 0x80000	10000baseKR Full
+diff --git a/ethtool.c b/ethtool.c
+index 5465f59..9650f54 100644
+--- a/ethtool.c
++++ b/ethtool.c
+@@ -529,6 +529,8 @@ static void init_global_link_mode_masks(void)
+ 		ETHTOOL_LINK_MODE_10000baseLR_Full_BIT,
+ 		ETHTOOL_LINK_MODE_10000baseLRM_Full_BIT,
+ 		ETHTOOL_LINK_MODE_10000baseER_Full_BIT,
++		ETHTOOL_LINK_MODE_2500baseT_Full_BIT,
++		ETHTOOL_LINK_MODE_5000baseT_Full_BIT,
+ 	};
+ 	static const enum ethtool_link_mode_bit_indices
+ 		additional_advertised_flags_bits[] = {
+@@ -681,6 +683,10 @@ static void dump_link_caps(const char *prefix, const char *an_prefix,
+ 		  "10000baseLRM/Full" },
+ 		{ 0, ETHTOOL_LINK_MODE_10000baseER_Full_BIT,
+ 		  "10000baseER/Full" },
++                { 0, ETHTOOL_LINK_MODE_2500baseT_Full_BIT,
++                  "2500baseT/Full" },
++                { 0, ETHTOOL_LINK_MODE_5000baseT_Full_BIT,
++                  "5000baseT/Full" },
+ 	};
+ 	int indent;
+ 	int did1, new_line_pend, i;
+-- 
+1.8.3.1
+
diff --git a/SOURCES/0010-ethtool.8-Fix-formatting-of-advertise-bitmask.patch b/SOURCES/0010-ethtool.8-Fix-formatting-of-advertise-bitmask.patch
new file mode 100644
index 0000000..1dd71ff
--- /dev/null
+++ b/SOURCES/0010-ethtool.8-Fix-formatting-of-advertise-bitmask.patch
@@ -0,0 +1,37 @@
+From f4578eaf711f3d5e15f3e5fdb98cce3ebae80a2b Mon Sep 17 00:00:00 2001
+From: Gal Pressman <galp@mellanox.com>
+Date: Thu, 28 Sep 2017 15:08:52 +0300
+Subject: [PATCH 10/11] ethtool.8: Fix formatting of advertise bitmask
+
+Fields should be separated with a tab instead of spaces.
+Also, remove an accidental ' character from 2500baseX Full mode.
+
+Fixes: 64dfc5e2f046 ("ethtool: Add support for 2500baseT/5000baseT link modes")
+Signed-off-by: Gal Pressman <galp@mellanox.com>
+Reviewed-by: Tariq Toukan <tariqt@mellanox.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+(cherry picked from commit f35a4bcd55164495deb4eef0975a1623d760ff91)
+---
+ ethtool.8.in | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/ethtool.8.in b/ethtool.8.in
+index eb0f551..c7208ab 100644
+--- a/ethtool.8.in
++++ b/ethtool.8.in
+@@ -578,9 +578,9 @@ lB	l	lB.
+ 0x020	1000baseT Full
+ 0x20000	1000baseKX Full
+ 0x20000000000	1000baseX Full
+-0x800000000000  2500baseT Full
+-0x8000	2500baseX Full	(not supported by IEEE standards)'
+-0x1000000000000  5000baseT Full
++0x800000000000	2500baseT Full
++0x8000	2500baseX Full	(not supported by IEEE standards)
++0x1000000000000	5000baseT Full
+ 0x1000	10000baseT Full
+ 0x40000	10000baseKX4 Full
+ 0x80000	10000baseKR Full
+-- 
+1.8.3.1
+
diff --git a/SOURCES/0011-ethtool.8-Document-56000-advertise-link-modes.patch b/SOURCES/0011-ethtool.8-Document-56000-advertise-link-modes.patch
new file mode 100644
index 0000000..84c540f
--- /dev/null
+++ b/SOURCES/0011-ethtool.8-Document-56000-advertise-link-modes.patch
@@ -0,0 +1,37 @@
+From 2c64f09bee9b601cb60fd0398f1e4eb1b09a3ebb Mon Sep 17 00:00:00 2001
+From: Gal Pressman <galp@mellanox.com>
+Date: Thu, 28 Sep 2017 15:08:53 +0300
+Subject: [PATCH 11/11] ethtool.8: Document 56000 advertise link modes
+
+Add the following advertise modes to the manual:
+56000baseKR4 Full
+56000baseCR4 Full
+56000baseSR4 Full
+56000baseLR4 Full
+
+Signed-off-by: Gal Pressman <galp@mellanox.com>
+Reviewed-by: Tariq Toukan <tariqt@mellanox.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+(cherry picked from commit 47c71e3c45cd6e248a25e87cbd8afa201836e59d)
+---
+ ethtool.8.in | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/ethtool.8.in b/ethtool.8.in
+index c7208ab..c176cac 100644
+--- a/ethtool.8.in
++++ b/ethtool.8.in
+@@ -601,6 +601,10 @@ lB	l	lB.
+ 0x400000000	50000baseCR2 Full
+ 0x800000000	50000baseKR2 Full
+ 0x10000000000	50000baseSR2 Full
++0x8000000	56000baseKR4 Full
++0x10000000	56000baseCR4 Full
++0x20000000	56000baseSR4 Full
++0x40000000	56000baseLR4 Full
+ 0x1000000000	100000baseKR4 Full
+ 0x2000000000	100000baseSR4 Full
+ 0x4000000000	100000baseCR4 Full
+-- 
+1.8.3.1
+
diff --git a/SOURCES/0012-ethtool-Remove-UDP-Fragmentation-Offload-error-print.patch b/SOURCES/0012-ethtool-Remove-UDP-Fragmentation-Offload-error-print.patch
new file mode 100644
index 0000000..b9a5edd
--- /dev/null
+++ b/SOURCES/0012-ethtool-Remove-UDP-Fragmentation-Offload-error-print.patch
@@ -0,0 +1,39 @@
+From b41605a9328686d45f6f4ee7791f476866bcc7a9 Mon Sep 17 00:00:00 2001
+From: Shaker Daibes <shakerd@mellanox.com>
+Date: Mon, 18 Sep 2017 10:35:38 +0300
+Subject: [PATCH 12/12] ethtool: Remove UDP Fragmentation Offload error prints
+
+UFO was removed in kernel, here we remove UFO error prints when using
+"ethtool -k" command.
+
+Fixes the following issue:
+Features for ens8:
+Cannot get device udp-fragmentation-offload settings: Operation not
+supported
+
+Signed-off-by: Shaker Daibes <shakerd@mellanox.com>
+Signed-off-by: Tariq Toukan <tariqt@mellanox.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+(cherry picked from commit d5d35d8331dee79a7453d3ea501bcc7b8b90582c)
+---
+ ethtool.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/ethtool.c b/ethtool.c
+index 9650f54..1411d62 100644
+--- a/ethtool.c
++++ b/ethtool.c
+@@ -2187,6 +2187,10 @@ get_features(struct cmd_context *ctx, const struct feature_defs *defs)
+ 		eval.cmd = off_flag_def[i].get_cmd;
+ 		err = send_ioctl(ctx, &eval);
+ 		if (err) {
++			if (errno == EOPNOTSUPP &&
++			    off_flag_def[i].get_cmd == ETHTOOL_GUFO)
++				continue;
++
+ 			fprintf(stderr,
+ 				"Cannot get device %s settings: %m\n",
+ 				off_flag_def[i].long_name);
+-- 
+1.8.3.1
+
diff --git a/SOURCES/0013-ethtool-copy.h-sync-with-net-next.patch b/SOURCES/0013-ethtool-copy.h-sync-with-net-next.patch
new file mode 100644
index 0000000..74385ac
--- /dev/null
+++ b/SOURCES/0013-ethtool-copy.h-sync-with-net-next.patch
@@ -0,0 +1,174 @@
+From 3ad39b7b490fc130b47ec248de707d3ae481c9ed Mon Sep 17 00:00:00 2001
+From: Scott Branden <scott.branden@broadcom.com>
+Date: Tue, 12 Dec 2017 12:20:02 -0800
+Subject: [PATCH 13/14] ethtool-copy.h: sync with net-next
+
+This covers kernel changes up to:
+
+commit 40e44a1e669d078946f46853808a60d29e6f0885
+Author: Scott Branden <scott.branden@broadcom.com>
+Date:   Thu Nov 30 11:35:59 2017 -0800
+
+    net: ethtool: add support for reset of AP inside NIC interface.
+
+    Add ETH_RESET_AP to reset the application processor(s) inside the NIC
+    interface.
+
+    Current ETH_RESET_MGMT supports a management processor inside this NIC.
+    This is typically used for remote NIC management purposes.
+
+    Application processors exist inside some SmartNICs to run various
+    applications inside the NIC processor - be it a simple algorithm without
+    an OS to as complex as hosting multiple VMs.
+
+    Signed-off-by: Scott Branden <scott.branden@broadcom.com>
+    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
+    Signed-off-by: David S. Miller <davem@davemloft.net>
+
+Signed-off-by: Scott Branden <scott.branden@broadcom.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+(cherry picked from commit 83634baa75b5831ed9bfd135f9747b94aacdd842)
+---
+ ethtool-copy.h | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++-----
+ 1 file changed, 61 insertions(+), 5 deletions(-)
+
+diff --git a/ethtool-copy.h b/ethtool-copy.h
+index 06fc04c..f4e7bb2 100644
+--- a/ethtool-copy.h
++++ b/ethtool-copy.h
+@@ -1,3 +1,4 @@
++/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+ /*
+  * ethtool.h: Defines for Linux ethtool.
+  *
+@@ -1236,6 +1237,47 @@ struct ethtool_per_queue_op {
+ 	char	data[];
+ };
+ 
++/**
++ * struct ethtool_fecparam - Ethernet forward error correction(fec) parameters
++ * @cmd: Command number = %ETHTOOL_GFECPARAM or %ETHTOOL_SFECPARAM
++ * @active_fec: FEC mode which is active on porte
++ * @fec: Bitmask of supported/configured FEC modes
++ * @rsvd: Reserved for future extensions. i.e FEC bypass feature.
++ *
++ * Drivers should reject a non-zero setting of @autoneg when
++ * autoneogotiation is disabled (or not supported) for the link.
++ *
++ */
++struct ethtool_fecparam {
++	__u32   cmd;
++	/* bitmask of FEC modes */
++	__u32   active_fec;
++	__u32   fec;
++	__u32   reserved;
++};
++
++/**
++ * enum ethtool_fec_config_bits - flags definition of ethtool_fec_configuration
++ * @ETHTOOL_FEC_NONE: FEC mode configuration is not supported
++ * @ETHTOOL_FEC_AUTO: Default/Best FEC mode provided by driver
++ * @ETHTOOL_FEC_OFF: No FEC Mode
++ * @ETHTOOL_FEC_RS: Reed-Solomon Forward Error Detection mode
++ * @ETHTOOL_FEC_BASER: Base-R/Reed-Solomon Forward Error Detection mode
++ */
++enum ethtool_fec_config_bits {
++	ETHTOOL_FEC_NONE_BIT,
++	ETHTOOL_FEC_AUTO_BIT,
++	ETHTOOL_FEC_OFF_BIT,
++	ETHTOOL_FEC_RS_BIT,
++	ETHTOOL_FEC_BASER_BIT,
++};
++
++#define ETHTOOL_FEC_NONE		(1 << ETHTOOL_FEC_NONE_BIT)
++#define ETHTOOL_FEC_AUTO		(1 << ETHTOOL_FEC_AUTO_BIT)
++#define ETHTOOL_FEC_OFF			(1 << ETHTOOL_FEC_OFF_BIT)
++#define ETHTOOL_FEC_RS			(1 << ETHTOOL_FEC_RS_BIT)
++#define ETHTOOL_FEC_BASER		(1 << ETHTOOL_FEC_BASER_BIT)
++
+ /* CMDs currently supported */
+ #define ETHTOOL_GSET		0x00000001 /* DEPRECATED, Get settings.
+ 					    * Please use ETHTOOL_GLINKSETTINGS
+@@ -1328,6 +1370,8 @@ struct ethtool_per_queue_op {
+ #define ETHTOOL_SLINKSETTINGS	0x0000004d /* Set ethtool_link_settings */
+ #define ETHTOOL_PHY_GTUNABLE	0x0000004e /* Get PHY tunable configuration */
+ #define ETHTOOL_PHY_STUNABLE	0x0000004f /* Set PHY tunable configuration */
++#define ETHTOOL_GFECPARAM	0x00000050 /* Get FEC settings */
++#define ETHTOOL_SFECPARAM	0x00000051 /* Set FEC settings */
+ 
+ /* compatibility with older code */
+ #define SPARC_ETH_GSET		ETHTOOL_GSET
+@@ -1382,9 +1426,12 @@ enum ethtool_link_mode_bit_indices {
+ 	ETHTOOL_LINK_MODE_10000baseLR_Full_BIT	= 44,
+ 	ETHTOOL_LINK_MODE_10000baseLRM_Full_BIT	= 45,
+ 	ETHTOOL_LINK_MODE_10000baseER_Full_BIT	= 46,
+-	ETHTOOL_LINK_MODE_2500baseT_Full_BIT = 47,
+-	ETHTOOL_LINK_MODE_5000baseT_Full_BIT = 48,
++	ETHTOOL_LINK_MODE_2500baseT_Full_BIT	= 47,
++	ETHTOOL_LINK_MODE_5000baseT_Full_BIT	= 48,
+ 
++	ETHTOOL_LINK_MODE_FEC_NONE_BIT	= 49,
++	ETHTOOL_LINK_MODE_FEC_RS_BIT	= 50,
++	ETHTOOL_LINK_MODE_FEC_BASER_BIT	= 51,
+ 
+ 	/* Last allowed bit for __ETHTOOL_LINK_MODE_LEGACY_MASK is bit
+ 	 * 31. Please do NOT define any SUPPORTED_* or ADVERTISED_*
+@@ -1393,7 +1440,7 @@ enum ethtool_link_mode_bit_indices {
+ 	 */
+ 
+ 	__ETHTOOL_LINK_MODE_LAST
+-	  = ETHTOOL_LINK_MODE_5000baseT_Full_BIT,
++	  = ETHTOOL_LINK_MODE_FEC_BASER_BIT,
+ };
+ 
+ #define __ETHTOOL_LINK_MODE_LEGACY_MASK(base_name)	\
+@@ -1484,13 +1531,17 @@ enum ethtool_link_mode_bit_indices {
+  * it was forced up into this mode or autonegotiated.
+  */
+ 
+-/* The forced speed, in units of 1Mb. All values 0 to INT_MAX are legal. */
++/* The forced speed, in units of 1Mb. All values 0 to INT_MAX are legal.
++ * Update drivers/net/phy/phy.c:phy_speed_to_str() and
++ * drivers/net/bonding/bond_3ad.c:__get_link_speed() when adding new values.
++ */
+ #define SPEED_10		10
+ #define SPEED_100		100
+ #define SPEED_1000		1000
+ #define SPEED_2500		2500
+ #define SPEED_5000		5000
+ #define SPEED_10000		10000
++#define SPEED_14000		14000
+ #define SPEED_20000		20000
+ #define SPEED_25000		25000
+ #define SPEED_40000		40000
+@@ -1633,6 +1684,7 @@ enum ethtool_reset_flags {
+ 	ETH_RESET_PHY		= 1 << 6,	/* Transceiver/PHY */
+ 	ETH_RESET_RAM		= 1 << 7,	/* RAM shared between
+ 						 * multiple components */
++	ETH_RESET_AP		= 1 << 8,	/* Application processor */
+ 
+ 	ETH_RESET_DEDICATED	= 0x0000ffff,	/* All components dedicated to
+ 						 * this interface */
+@@ -1701,6 +1753,8 @@ enum ethtool_reset_flags {
+  *	%ethtool_link_mode_bit_indices for the link modes, and other
+  *	link features that the link partner advertised through
+  *	autonegotiation; 0 if unknown or not applicable.  Read-only.
++ * @transceiver: Used to distinguish different possible PHY types,
++ *	reported consistently by PHYLIB.  Read-only.
+  *
+  * If autonegotiation is disabled, the speed and @duplex represent the
+  * fixed link mode and are writable if the driver supports multiple
+@@ -1752,7 +1806,9 @@ struct ethtool_link_settings {
+ 	__u8	eth_tp_mdix;
+ 	__u8	eth_tp_mdix_ctrl;
+ 	__s8	link_mode_masks_nwords;
+-	__u32	reserved[8];
++	__u8	transceiver;
++	__u8	reserved1[3];
++	__u32	reserved[7];
+ 	__u32	link_mode_masks[0];
+ 	/* layout of link_mode_masks fields:
+ 	 * __u32 map_supported[link_mode_masks_nwords];
+-- 
+1.8.3.1
+
diff --git a/SOURCES/0014-ethtool-Support-for-FEC-encoding-control.patch b/SOURCES/0014-ethtool-Support-for-FEC-encoding-control.patch
new file mode 100644
index 0000000..c23b8c7
--- /dev/null
+++ b/SOURCES/0014-ethtool-Support-for-FEC-encoding-control.patch
@@ -0,0 +1,298 @@
+From 6477a1f47b15c2a81a9995397942a0fc17f0b06f Mon Sep 17 00:00:00 2001
+From: Dustin Byford <dustin@cumulusnetworks.com>
+Date: Mon, 18 Dec 2017 14:57:41 -0800
+Subject: [PATCH 14/14] ethtool: Support for FEC encoding control
+
+As FEC settings and different FEC modes are mandatory
+and configurable across various interfaces of 25G/50G/100G/40G,
+the lack of FEC encoding control and reporting today is a source
+for interoperability issues for many vendors
+
+set-fec/show-fec option(s) are designed to provide control and report
+the FEC encoding on the link.
+
+$ethtool --set-fec swp1 encoding [off | RS | BaseR | auto]
+
+Encoding: Types of encoding
+Off    :  Turning off FEC
+RS     :  Force RS-FEC encoding
+BaseR  :  Force BaseR encoding
+Auto   :  Default FEC settings for drivers, and would represent
+          asking the hardware to essentially go into a best effort mode.
+
+Here are a few examples of what we would expect if encoding=auto:
+- if autoneg is on, we are  expecting FEC to be negotiated as on or off
+  as long as protocol supports it
+- if the hardware is capable of detecting the FEC encoding on it's
+  receiver it will reconfigure its encoder to match
+- in absence of the above, the configuration would be set to IEEE
+  defaults.
+
+>From our understanding, this is essentially what most hardware/driver
+combinations are doing today in the absence of a way for users to
+control the behavior.
+
+$ethtool --show-fec  swp1
+FEC parameters for swp1:
+FEC encodings:  RS
+
+ethtool devname output:
+$ethtool swp1
+Settings for swp1:
+root@hpe-7712-03:~# ethtool swp18
+Settings for swp18:
+    Supported ports: [ FIBRE ]
+    Supported link modes:   40000baseCR4/Full
+                            40000baseSR4/Full
+                            40000baseLR4/Full
+                            100000baseSR4/Full
+                            100000baseCR4/Full
+                            100000baseLR4_ER4/Full
+    Supported pause frame use: No
+    Supports auto-negotiation: Yes
+    Supported FEC modes: [RS | BaseR | None | Not reported]
+    Advertised link modes:  Not reported
+    Advertised pause frame use: No
+    Advertised auto-negotiation: No
+    Advertised FEC modes: [RS | BaseR | None | Not reported]
+    Speed: 100000Mb/s
+    Duplex: Full
+    Port: FIBRE
+    PHYAD: 106
+    Transceiver: internal
+    Auto-negotiation: off
+    Link detected: yes
+
+Signed-off-by: Vidya Sagar Ravipati <vidya.chowdary@gmail.com>
+Signed-off-by: Dustin Byford <dustin@cumulusnetworks.com>
+[code style + man page edits + commit message update]
+Signed-off-by: Dirk van der Merwe <dirk.vandermerwe@netronome.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+
+(cherry picked from commit 8db75d1e4001ac4cdfc73d5bedd0ec6d58a3d617)
+
+Conflicts:
+	ethtool.8.in
+	ethtool.c
+---
+ ethtool.8.in |  31 ++++++++++++++++
+ ethtool.c    | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 150 insertions(+)
+
+diff --git a/ethtool.8.in b/ethtool.8.in
+index c176cac..6816020 100644
+--- a/ethtool.8.in
++++ b/ethtool.8.in
+@@ -342,6 +342,13 @@ ethtool \- query or control network driver and hardware settings
+ .B2 tx-lpi on off
+ .BN tx-timer
+ .BN advertise
++.HP
++.B ethtool \-\-show\-fec
++.I devname
++.HP
++.B ethtool \-\-set\-fec
++.I devname
++.B4 encoding auto off rs baser
+ .
+ .\" Adjust lines (i.e. full justification) and hyphenate.
+ .ad
+@@ -959,6 +966,30 @@ Values are as for
+ Sets the amount of time the device should stay in idle mode prior to asserting
+ its Tx LPI (in microseconds). This has meaning only when Tx LPI is enabled.
+ .RE
++.TP
++.B \-\-show\-fec
++Queries the specified network device for its support of Forward Error Correction.
++.TP
++.B \-\-set\-fec
++Configures Forward Error Correction for the specified network device.
++
++Forward Error Correction modes selected by a user are expected to be persisted
++after any hotplug events. If a module is swapped that does not support the
++current FEC mode, the driver or firmware must take the link down
++administratively and report the problem in the system logs for users to correct.
++.RS 4
++.TP
++.A4 encoding auto off rs baser
++Sets the FEC encoding for the device.
++.TS
++nokeep;
++lB	l.
++auto	Use the driver's default encoding
++off	Turn off FEC
++RS	Force RS-FEC encoding
++BaseR	Force BaseR encoding
++.TE
++.RE
+ .SH BUGS
+ Not supported (in part or whole) on all network drivers.
+ .SH AUTHOR
+diff --git a/ethtool.c b/ethtool.c
+index 1411d62..2e9ee2c 100644
+--- a/ethtool.c
++++ b/ethtool.c
+@@ -543,6 +543,9 @@ static void init_global_link_mode_masks(void)
+ 		ETHTOOL_LINK_MODE_Pause_BIT,
+ 		ETHTOOL_LINK_MODE_Asym_Pause_BIT,
+ 		ETHTOOL_LINK_MODE_Backplane_BIT,
++		ETHTOOL_LINK_MODE_FEC_NONE_BIT,
++		ETHTOOL_LINK_MODE_FEC_RS_BIT,
++		ETHTOOL_LINK_MODE_FEC_BASER_BIT,
+ 	};
+ 	unsigned int i;
+ 
+@@ -690,6 +693,7 @@ static void dump_link_caps(const char *prefix, const char *an_prefix,
+ 	};
+ 	int indent;
+ 	int did1, new_line_pend, i;
++	int fecreported = 0;
+ 
+ 	/* Indent just like the separate functions used to */
+ 	indent = strlen(prefix) + 14;
+@@ -741,6 +745,26 @@ static void dump_link_caps(const char *prefix, const char *an_prefix,
+ 			fprintf(stdout, "Yes\n");
+ 		else
+ 			fprintf(stdout, "No\n");
++
++		fprintf(stdout, "	%s FEC modes:", prefix);
++		if (ethtool_link_mode_test_bit(ETHTOOL_LINK_MODE_FEC_NONE_BIT,
++					       mask)) {
++			fprintf(stdout, " None");
++			fecreported = 1;
++		}
++		if (ethtool_link_mode_test_bit(ETHTOOL_LINK_MODE_FEC_BASER_BIT,
++					       mask)) {
++			fprintf(stdout, " BaseR");
++			fecreported = 1;
++		}
++		if (ethtool_link_mode_test_bit(ETHTOOL_LINK_MODE_FEC_RS_BIT,
++					       mask)) {
++			fprintf(stdout, " RS");
++			fecreported = 1;
++		}
++		if (!fecreported)
++			fprintf(stdout, " Not reported");
++		fprintf(stdout, "\n");
+ 	}
+ }
+ 
+@@ -1569,6 +1593,20 @@ static void dump_eeecmd(struct ethtool_eee *ep)
+ 	dump_link_caps("Link partner advertised EEE", "", link_mode, 1);
+ }
+ 
++static void dump_fec(u32 fec)
++{
++	if (fec & ETHTOOL_FEC_NONE)
++		fprintf(stdout, " None");
++	if (fec & ETHTOOL_FEC_AUTO)
++		fprintf(stdout, " Auto");
++	if (fec & ETHTOOL_FEC_OFF)
++		fprintf(stdout, " Off");
++	if (fec & ETHTOOL_FEC_BASER)
++		fprintf(stdout, " BaseR");
++	if (fec & ETHTOOL_FEC_RS)
++		fprintf(stdout, " RS");
++}
++
+ #define N_SOTS 7
+ 
+ static char *so_timestamping_labels[N_SOTS] = {
+@@ -4592,6 +4630,84 @@ static int do_seee(struct cmd_context *ctx)
+ 	return 0;
+ }
+ 
++static int fecmode_str_to_type(const char *str)
++{
++	int fecmode = 0;
++
++	if (!str)
++		return fecmode;
++
++	if (!strcasecmp(str, "auto"))
++		fecmode |= ETHTOOL_FEC_AUTO;
++	else if (!strcasecmp(str, "off"))
++		fecmode |= ETHTOOL_FEC_OFF;
++	else if (!strcasecmp(str, "rs"))
++		fecmode |= ETHTOOL_FEC_RS;
++	else if (!strcasecmp(str, "baser"))
++		fecmode |= ETHTOOL_FEC_BASER;
++
++	return fecmode;
++}
++
++static int do_gfec(struct cmd_context *ctx)
++{
++	struct ethtool_fecparam feccmd = { 0 };
++	int rv;
++
++	if (ctx->argc != 0)
++		exit_bad_args();
++
++	feccmd.cmd = ETHTOOL_GFECPARAM;
++	rv = send_ioctl(ctx, &feccmd);
++	if (rv != 0) {
++		perror("Cannot get FEC settings");
++		return rv;
++	}
++
++	fprintf(stdout, "FEC parameters for %s:\n", ctx->devname);
++	fprintf(stdout, "Configured FEC encodings:");
++	dump_fec(feccmd.fec);
++	fprintf(stdout, "\n");
++
++	fprintf(stdout, "Active FEC encoding:");
++	dump_fec(feccmd.active_fec);
++	fprintf(stdout, "\n");
++
++	return 0;
++}
++
++static int do_sfec(struct cmd_context *ctx)
++{
++	char *fecmode_str = NULL;
++	struct ethtool_fecparam feccmd;
++	struct cmdline_info cmdline_fec[] = {
++		{ "encoding", CMDL_STR,  &fecmode_str,  &feccmd.fec},
++	};
++	int changed;
++	int fecmode;
++	int rv;
++
++	parse_generic_cmdline(ctx, &changed, cmdline_fec,
++			      ARRAY_SIZE(cmdline_fec));
++
++	if (!fecmode_str)
++		exit_bad_args();
++
++	fecmode = fecmode_str_to_type(fecmode_str);
++	if (!fecmode)
++		exit_bad_args();
++
++	feccmd.cmd = ETHTOOL_SFECPARAM;
++	feccmd.fec = fecmode;
++	rv = send_ioctl(ctx, &feccmd);
++	if (rv != 0) {
++		perror("Cannot set FEC settings");
++		return rv;
++	}
++
++	return 0;
++}
++
+ #ifndef TEST_ETHTOOL
+ int send_ioctl(struct cmd_context *ctx, void *cmd)
+ {
+@@ -4754,6 +4870,9 @@ static const struct option {
+ 	  "		[ advertise %x ]\n"
+ 	  "		[ tx-lpi on|off ]\n"
+ 	  "		[ tx-timer %d ]\n"},
++	{ "--show-fec", 1, do_gfec, "Show FEC settings"},
++	{ "--set-fec", 1, do_sfec, "Set FEC settings",
++	  "		[ encoding auto|off|rs|baser ]\n"},
+ 	{ "-h|--help", 0, show_usage, "Show this help" },
+ 	{ "--version", 0, do_version, "Show version number" },
+ 	{}
+-- 
+1.8.3.1
+
diff --git a/SPECS/ethtool.spec b/SPECS/ethtool.spec
index 3373cfd..03936c1 100644
--- a/SPECS/ethtool.spec
+++ b/SPECS/ethtool.spec
@@ -1,7 +1,7 @@
 Name:		ethtool
 Epoch:		2
 Version:	4.8
-Release:	1%{?dist}
+Release:	7%{?dist}
 Summary:	Settings tool for Ethernet NICs
 
 License:	GPLv2
@@ -24,6 +24,17 @@ Conflicts:      filesystem < 3
 Patch0:		0001-ethtool-add-register-dump-support-for-fjes-driver.patch
 Patch1:		0002-ethtool-sync-help-output-for-x-X-with-man-page.patch
 Patch2:		0003-ethtool-Fix-the-advertise-parameter-logic.patch
+Patch3:		0004-ethtool-Fix-SFF-8079-cable-technology-bit-parsing.patch
+Patch4:		0005-ethtool-Support-for-configurable-RSS-hash-function.patch
+Patch5:		0006-net_tstamp.h-sync-with-net-next.patch
+Patch6:		0007-ethtool-add-support-for-HWTSTAMP_FILTER_NTP_ALL.patch
+Patch7:		0008-ethtool-copy.h-sync-with-net-next.patch
+Patch8:		0009-ethtool-Add-support-for-2500baseT-5000baseT-link-mod.patch
+Patch9:		0010-ethtool.8-Fix-formatting-of-advertise-bitmask.patch
+Patch10:	0011-ethtool.8-Document-56000-advertise-link-modes.patch
+Patch11:	0012-ethtool-Remove-UDP-Fragmentation-Offload-error-print.patch
+Patch12:	0013-ethtool-copy.h-sync-with-net-next.patch
+Patch13:	0014-ethtool-Support-for-FEC-encoding-control.patch
 
 %description
 This utility allows querying and changing settings such as speed,
@@ -35,6 +46,17 @@ network devices, especially of Ethernet devices.
 %patch0 -p1
 %patch1 -p1
 %patch2 -p1
+%patch3 -p1
+%patch4 -p1
+%patch5 -p1
+%patch6 -p1
+%patch7 -p1
+%patch8 -p1
+%patch9 -p1
+%patch10 -p1
+%patch11 -p1
+%patch12 -p1
+%patch13 -p1
 
 # Only needed when using upstream git
 # aclocal
@@ -57,6 +79,26 @@ make DESTDIR=%{buildroot} INSTALL='install -p' install
 %{_mandir}/man8/%{name}.8*
 
 %changelog
+* Wed Jan 10 2018 Ivan Vecera <ivecera@redhat.com> - 2:4.8-7
+- Fixed synopsis in ethtool man page
+
+* Tue Jan  9 2018 Ivan Vecera <ivecera@redhat.com> - 2:4.8-6
+- Added support for setting FEC parameters
+
+* Fri Jan  5 2018 Ivan Vecera <ivecera@redhat.com> - 2:4.8-5
+- Fixed changelog
+
+* Fri Jan  5 2018 Ivan Vecera <ivecera@redhat.com> - 2:4.8-4
+- Fixed UDP fragmentation offloading error messages printed on kernel-alt >=4.14
+
+* Tue Nov 14 2017 Ivan Vecera <ivecera@redhat.com> - 2:4.8-3
+- Added support for 2500baseT/5000baseT link modes
+
+* Fri Nov  3 2017 Ivan Vecera <ivecera@redhat.com> - 2:4.8-2
+- Added support for configurable RSS hash function
+- Fixed SFF 8079 cable technology bit parsing
+- Added support for HWTSTAMP_FILTER_NTP_ALL
+
 * Wed Mar 22 2017 Ivan Vecera <ivecera@redhat.com> - 2:4.8-1
 - Rebased against upstream v4.8