Hello community,

here is the log from the commit of package ethtool for openSUSE:Factory checked 
in at 2020-01-23 16:09:06
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ethtool (Old)
 and      /work/SRC/openSUSE:Factory/.ethtool.new.26092 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "ethtool"

Thu Jan 23 16:09:06 2020 rev:60 rq:765772 version:5.4

Changes:
--------
--- /work/SRC/openSUSE:Factory/ethtool/ethtool.changes  2019-11-07 
23:09:13.836044249 +0100
+++ /work/SRC/openSUSE:Factory/.ethtool.new.26092/ethtool.changes       
2020-01-23 16:10:11.603610216 +0100
@@ -1,0 +2,10 @@
+Mon Jan 13 11:46:41 UTC 2020 - Michal Kubecek <mkube...@suse.cz>
+
+- Update to new upstream release 5.4
+  * support Energy Detect Power Down
+  * Solarflare SFF-8079/8472 eeprom interpretation fixes
+  * fix compiler warnings with new gcc
+- drop "-Wno-unused-parameter" from CFLAGS, these warnings should
+  be gone now
+
+-------------------------------------------------------------------

Old:
----
  ethtool-5.3.tar.sign
  ethtool-5.3.tar.xz

New:
----
  ethtool-5.4.tar.sign
  ethtool-5.4.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ ethtool.spec ++++++
--- /var/tmp/diff_new_pack.t4ABmG/_old  2020-01-23 16:10:14.027611653 +0100
+++ /var/tmp/diff_new_pack.t4ABmG/_new  2020-01-23 16:10:14.031611656 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package ethtool
 #
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
 
 
 Name:           ethtool
-Version:        5.3
+Version:        5.4
 Release:        0
 Summary:        Utility for examining and tuning Ethernet-based network 
interfaces
 License:        GPL-2.0-only
@@ -39,7 +39,7 @@
 %setup -q
 
 %build
-export CFLAGS="%optflags -W -Wall -Wstrict-prototypes -Wformat-security 
-Wpointer-arith -Wno-unused-parameter -Wno-missing-field-initializers"
+export CFLAGS="%optflags -W -Wall -Wstrict-prototypes -Wformat-security 
-Wpointer-arith -Wno-missing-field-initializers"
 %configure
 make %{?_smp_mflags}
 

++++++ ethtool-5.3.tar.xz -> ethtool-5.4.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/NEWS new/ethtool-5.4/NEWS
--- old/ethtool-5.3/NEWS        2019-09-23 20:12:13.000000000 +0200
+++ new/ethtool-5.4/NEWS        2020-01-10 19:32:58.000000000 +0100
@@ -1,3 +1,43 @@
+Version 5.4 - January 10, 2020
+
+       * Feature: ethtool: implement support for Energy Detect Power Down
+       * Fix: fix arithmetic on pointer to void is a GNU extension warning
+       * Fix: fix unused parameter warnings in do_version() and show_usage()
+       * Fix: fix unused parameter warning in find_option()
+       * Fix: fix unused parameter warning in dump_eeprom()
+       * Fix: fix unused parameter warning in altera_tse_dump_regs()
+       * Fix: fix unused parameter warning in sfc_dump_regs()
+       * Fix: fix unused parameter warning in print_simple_table()
+       * Fix: fix unused parameter warning in natsemi_dump_regs()
+       * Fix: fix unused parameter warning in netsemi_dump_eeprom()
+       * Fix: fix unused parameter warning in ixgbe_dump_regs()
+       * Fix: fix unused parameter warning in realtek_dump_regs()
+       * Fix: fix unused parameter warning in lan78xx_dump_regs()
+       * Fix: fix unused parameter warning in {skge, sky2}_dump_regs()
+       * Fix: fix unused parameter warning in dsa_dump_regs()
+       * Fix: fix unused parameter warning in vmxnet3_dump_regs()
+       * Fix: fix unused parameter warning in st_{mac100, gmac}_dump_regs()
+       * Fix: fix unused parameter warning in ixgbevf_dump_regs()
+       * Fix: fix unused parameter warning in fec_8xx_dump_regs()
+       * Fix: fix unused parameter warning in tg3_dump_{eeprom, regs}()
+       * Fix: fix unused parameter warning in vioc_dump_regs()
+       * Fix: fix unused parameter warning in e100_dump_regs()
+       * Fix: fix unused parameter warning in de2104[01]_dump_regs()
+       * Fix: fix unused parameter warning in igb_dump_regs()
+       * Fix: fix unused parameter warning in e1000_dump_regs()
+       * Fix: fix unused parameter warning in smsc911x_dump_regs()
+       * Fix: fix unused parameter warning in at76c50x_usb_dump_regs()
+       * Fix: fix unused parameter warning in fec_dump_regs()
+       * Fix: fix unused parameter warning in amd8111e_dump_regs()
+       * Fix: fix unused parameter warning in et131x_dump_regs()
+       * Fix: fix unused parameter warning in ibm_emac_dump_regs()
+       * Fix: fix unused parameter warning in ixgb_dump_regs()
+       * Fix: fix unused parameter warning in fjes_dump_regs()
+       * Fix: fix unused parameter warning in e1000_get_mac_type()
+       * Fix: ethtool: correctly interpret bitrate of 255
+       * Fix: ethtool: mark 10G Base-ER as SFF-8472 revision 10.4 onwards
+       * Fix: ethtool: add 0x16 and 0x1c extended compliance codes
+
 Version 5.3 - September 23, 2019
        * Feature: igb: dump RR2DCDELAY register
        * Feature: dump nested registers
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/amd8111e.c new/ethtool-5.4/amd8111e.c
--- old/ethtool-5.3/amd8111e.c  2016-08-24 21:47:26.000000000 +0200
+++ new/ethtool-5.4/amd8111e.c  2019-10-29 18:51:21.000000000 +0100
@@ -152,7 +152,8 @@
 #define PHY_SPEED_100          0x3
 
 
-int amd8111e_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs)
+int amd8111e_dump_regs(struct ethtool_drvinfo *info maybe_unused,
+                      struct ethtool_regs *regs)
 {
 
        u32 *reg_buff = (u32 *)regs->data;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/at76c50x-usb.c 
new/ethtool-5.4/at76c50x-usb.c
--- old/ethtool-5.3/at76c50x-usb.c      2016-08-24 21:47:26.000000000 +0200
+++ new/ethtool-5.4/at76c50x-usb.c      2019-10-29 18:51:21.000000000 +0100
@@ -12,8 +12,8 @@
         "     505AMX",
 };
 
-int
-at76c50x_usb_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs)
+int at76c50x_usb_dump_regs(struct ethtool_drvinfo *info maybe_unused,
+                          struct ethtool_regs *regs)
 {
        u8 version = (u8)(regs->version >> 24);
        u8 rev_id = (u8)(regs->version);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/configure new/ethtool-5.4/configure
--- old/ethtool-5.3/configure   2019-09-23 20:14:31.000000000 +0200
+++ new/ethtool-5.4/configure   2020-01-10 19:37:04.000000000 +0100
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for ethtool 5.3.
+# Generated by GNU Autoconf 2.69 for ethtool 5.4.
 #
 # Report bugs to <net...@vger.kernel.org>.
 #
@@ -580,8 +580,8 @@
 # Identity of this package.
 PACKAGE_NAME='ethtool'
 PACKAGE_TARNAME='ethtool'
-PACKAGE_VERSION='5.3'
-PACKAGE_STRING='ethtool 5.3'
+PACKAGE_VERSION='5.4'
+PACKAGE_STRING='ethtool 5.4'
 PACKAGE_BUGREPORT='net...@vger.kernel.org'
 PACKAGE_URL=''
 
@@ -1247,7 +1247,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures ethtool 5.3 to adapt to many kinds of systems.
+\`configure' configures ethtool 5.4 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1313,7 +1313,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of ethtool 5.3:";;
+     short | recursive ) echo "Configuration of ethtool 5.4:";;
    esac
   cat <<\_ACEOF
 
@@ -1420,7 +1420,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-ethtool configure 5.3
+ethtool configure 5.4
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1667,7 +1667,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by ethtool $as_me 5.3, which was
+It was created by ethtool $as_me 5.4, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2532,7 +2532,7 @@
 
 # Define the identity of the package.
  PACKAGE='ethtool'
- VERSION='5.3'
+ VERSION='5.4'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -4876,7 +4876,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by ethtool $as_me 5.3, which was
+This file was extended by ethtool $as_me 5.4, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -4942,7 +4942,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; 
s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-ethtool config.status 5.3
+ethtool config.status 5.4
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/configure.ac new/ethtool-5.4/configure.ac
--- old/ethtool-5.3/configure.ac        2019-09-23 20:08:18.000000000 +0200
+++ new/ethtool-5.4/configure.ac        2020-01-10 19:27:19.000000000 +0100
@@ -1,5 +1,5 @@
 dnl Process this file with autoconf to produce a configure script.
-AC_INIT(ethtool, 5.3, net...@vger.kernel.org)
+AC_INIT(ethtool, 5.4, net...@vger.kernel.org)
 AC_PREREQ(2.52)
 AC_CONFIG_SRCDIR([ethtool.c])
 AM_INIT_AUTOMAKE([gnu])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/de2104x.c new/ethtool-5.4/de2104x.c
--- old/ethtool-5.3/de2104x.c   2016-08-24 21:47:26.000000000 +0200
+++ new/ethtool-5.4/de2104x.c   2019-10-29 18:51:21.000000000 +0100
@@ -111,8 +111,8 @@
        }
 }
 
-static void
-de21040_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs)
+static void de21040_dump_regs(struct ethtool_drvinfo *info maybe_unused,
+                             struct ethtool_regs *regs)
 {
        u32 tmp, v, *data = (u32 *)regs->data;
 
@@ -417,8 +417,8 @@
                v & (1<<0) ? "      Jabber disable\n" : "");
 }
 
-static void
-de21041_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs)
+static void de21041_dump_regs(struct ethtool_drvinfo *info maybe_unused,
+                             struct ethtool_regs *regs)
 {
        u32 tmp, v, *data = (u32 *)regs->data;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/dsa.c new/ethtool-5.4/dsa.c
--- old/ethtool-5.3/dsa.c       2019-01-18 19:31:08.000000000 +0100
+++ new/ethtool-5.4/dsa.c       2019-10-29 18:51:21.000000000 +0100
@@ -674,7 +674,8 @@
 #undef FIELD
 #undef REG
 
-int dsa_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs)
+int dsa_dump_regs(struct ethtool_drvinfo *info maybe_unused,
+                 struct ethtool_regs *regs)
 {
        /* DSA per-driver register dump */
        if (!dsa_mv88e6xxx_dump_regs(regs))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/e100.c new/ethtool-5.4/e100.c
--- old/ethtool-5.3/e100.c      2016-08-24 21:47:26.000000000 +0200
+++ new/ethtool-5.4/e100.c      2019-10-29 18:51:21.000000000 +0100
@@ -36,8 +36,8 @@
 #define CU_CMD                 0x00F0
 #define RU_CMD                 0x0007
 
-int
-e100_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs)
+int e100_dump_regs(struct ethtool_drvinfo *info maybe_unused,
+                  struct ethtool_regs *regs)
 {
        u32 *regs_buff = (u32 *)regs->data;
        u8 version = (u8)(regs->version >> 24);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/e1000.c new/ethtool-5.4/e1000.c
--- old/ethtool-5.3/e1000.c     2016-08-24 21:47:26.000000000 +0200
+++ new/ethtool-5.4/e1000.c     2019-10-29 18:51:21.000000000 +0100
@@ -254,8 +254,7 @@
        e1000_num_macs
 };
 
-static enum e1000_mac_type
-e1000_get_mac_type(u16 device_id, u8 revision_id)
+static enum e1000_mac_type e1000_get_mac_type(u16 device_id)
 {
        enum e1000_mac_type mac_type = e1000_undefined;
 
@@ -364,12 +363,12 @@
        return mac_type;
 }
 
-int
-e1000_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs)
+int e1000_dump_regs(struct ethtool_drvinfo *info maybe_unused,
+                   struct ethtool_regs *regs)
 {
        u32 *regs_buff = (u32 *)regs->data;
        u16 hw_device_id = (u16)regs->version;
-       u8 hw_revision_id = (u8)(regs->version >> 16);
+       /* u8 hw_revision_id = (u8)(regs->version >> 16); */
        u8 version = (u8)(regs->version >> 24);
        enum e1000_mac_type mac_type;
        u32 reg;
@@ -377,7 +376,7 @@
        if (version != 1)
                return -1;
 
-       mac_type = e1000_get_mac_type(hw_device_id, hw_revision_id);
+       mac_type = e1000_get_mac_type(hw_device_id);
 
        if(mac_type == e1000_undefined)
                return -1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/et131x.c new/ethtool-5.4/et131x.c
--- old/ethtool-5.3/et131x.c    2016-08-24 21:47:26.000000000 +0200
+++ new/ethtool-5.4/et131x.c    2019-10-29 18:51:21.000000000 +0100
@@ -2,7 +2,8 @@
 #include <string.h>
 #include "internal.h"
 
-int et131x_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs)
+int et131x_dump_regs(struct ethtool_drvinfo *info maybe_unused,
+                    struct ethtool_regs *regs)
 {
        u8 version = (u8)(regs->version >> 24);
        u32 *reg = (u32 *)regs->data;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/ethtool-copy.h 
new/ethtool-5.4/ethtool-copy.h
--- old/ethtool-5.3/ethtool-copy.h      2019-06-14 20:29:16.000000000 +0200
+++ new/ethtool-5.4/ethtool-copy.h      2019-09-24 21:16:06.000000000 +0200
@@ -257,10 +257,32 @@
 #define ETHTOOL_PHY_FAST_LINK_DOWN_ON  0
 #define ETHTOOL_PHY_FAST_LINK_DOWN_OFF 0xff
 
+/* Energy Detect Power Down (EDPD) is a feature supported by some PHYs, where
+ * the PHY's RX & TX blocks are put into a low-power mode when there is no
+ * link detected (typically cable is un-plugged). For RX, only a minimal
+ * link-detection is available, and for TX the PHY wakes up to send link pulses
+ * to avoid any lock-ups in case the peer PHY may also be running in EDPD mode.
+ *
+ * Some PHYs may support configuration of the wake-up interval for TX pulses,
+ * and some PHYs may support only disabling TX pulses entirely. For the latter
+ * a special value is required (ETHTOOL_PHY_EDPD_NO_TX) so that this can be
+ * configured from userspace (should the user want it).
+ *
+ * The interval units for TX wake-up are in milliseconds, since this should
+ * cover a reasonable range of intervals:
+ *  - from 1 millisecond, which does not sound like much of a power-saver
+ *  - to ~65 seconds which is quite a lot to wait for a link to come up when
+ *    plugging a cable
+ */
+#define ETHTOOL_PHY_EDPD_DFLT_TX_MSECS         0xffff
+#define ETHTOOL_PHY_EDPD_NO_TX                 0xfffe
+#define ETHTOOL_PHY_EDPD_DISABLE               0
+
 enum phy_tunable_id {
        ETHTOOL_PHY_ID_UNSPEC,
        ETHTOOL_PHY_DOWNSHIFT,
        ETHTOOL_PHY_FAST_LINK_DOWN,
+       ETHTOOL_PHY_EDPD,
        /*
         * Add your fresh new phy tunable attribute above and remember to update
         * phy_tunable_strings[] in net/core/ethtool.c
@@ -1481,8 +1503,8 @@
        ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT = 64,
        ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT         = 65,
        ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT         = 66,
-       ETHTOOL_LINK_MODE_100baseT1_Full_BIT             = 67,
-       ETHTOOL_LINK_MODE_1000baseT1_Full_BIT            = 68,
+       ETHTOOL_LINK_MODE_100baseT1_Full_BIT             = 67,
+       ETHTOOL_LINK_MODE_1000baseT1_Full_BIT            = 68,
 
        /* must be last entry */
        __ETHTOOL_LINK_MODE_MASK_NBITS
@@ -1712,8 +1734,8 @@
 #define ETH_MODULE_SFF_8436            0x4
 #define ETH_MODULE_SFF_8436_LEN                256
 
-#define ETH_MODULE_SFF_8636_MAX_LEN    640
-#define ETH_MODULE_SFF_8436_MAX_LEN    640
+#define ETH_MODULE_SFF_8636_MAX_LEN     640
+#define ETH_MODULE_SFF_8436_MAX_LEN     640
 
 /* Reset flags */
 /* The reset() operation must clear the flags for the components which
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/ethtool.8 new/ethtool-5.4/ethtool.8
--- old/ethtool-5.3/ethtool.8   2019-09-23 20:14:33.000000000 +0200
+++ new/ethtool-5.4/ethtool.8   2020-01-10 19:37:06.000000000 +0100
@@ -113,7 +113,7 @@
 .  hy \\n(HY
 ..
 .
-.TH ETHTOOL 8 "September 2019" "Ethtool version 5.3"
+.TH ETHTOOL 8 "January 2020" "Ethtool version 5.4"
 .SH NAME
 ethtool \- query or control network driver and hardware settings
 .
@@ -362,11 +362,17 @@
 .A1 on off
 .BN msecs
 .RB ]
+.RB [
+.B energy\-detect\-power\-down
+.A1 on off
+.BN msecs
+.RB ]
 .HP
 .B ethtool \-\-get\-phy\-tunable
 .I devname
 .RB [ downshift ]
 .RB [ fast-link-down ]
+.RB [ energy-detect-power-down ]
 .HP
 .B ethtool \-\-reset
 .I devname
@@ -1100,6 +1106,24 @@
        Sets the period after which the link is reported as down. Note that the 
PHY may choose
        the closest supported value. Only on reading back the tunable do you 
get the actual value.
 .TE
+.TP
+.A2 energy-detect-power-down on off
+Specifies whether Energy Detect Power Down (EDPD) should be enabled (if 
supported).
+This will put the RX and TX circuit blocks into a low power mode, and the PHY 
will
+wake up periodically to send link pulses to avoid any lock-up situation with a 
peer
+PHY that may also have EDPD enabled. By default, this setting will also enable 
the
+periodic transmission of TX pulses.
+.TS
+nokeep;
+lB     l.
+.BI msecs \ N
+       Some PHYs support configuration of the wake-up interval to send TX 
pulses.
+       This setting allows the control of this interval, and 0 disables TX 
pulses
+       if the PHY supports this. Disabling TX pulses can create a lock-up 
situation
+       where neither of the PHYs wakes the other one. If unspecified the 
default
+       value (in milliseconds) will be used by the PHY.
+.TE
+.TP
 .PD
 .RE
 .TP
@@ -1122,6 +1146,10 @@
 before a broken link is reported as being down.
 
 Gets the PHY Fast Link Down status / period.
+.TP
+.B energy\-detect\-power\-down
+Gets the current configured setting for Energy Detect Power Down (if 
supported).
+
 .RE
 .TP
 .B \-\-reset
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/ethtool.8.in new/ethtool-5.4/ethtool.8.in
--- old/ethtool-5.3/ethtool.8.in        2019-09-23 20:09:04.000000000 +0200
+++ new/ethtool-5.4/ethtool.8.in        2020-01-10 19:27:46.000000000 +0100
@@ -113,7 +113,7 @@
 .  hy \\n(HY
 ..
 .
-.TH ETHTOOL 8 "September 2019" "Ethtool version @VERSION@"
+.TH ETHTOOL 8 "January 2020" "Ethtool version @VERSION@"
 .SH NAME
 ethtool \- query or control network driver and hardware settings
 .
@@ -362,11 +362,17 @@
 .A1 on off
 .BN msecs
 .RB ]
+.RB [
+.B energy\-detect\-power\-down
+.A1 on off
+.BN msecs
+.RB ]
 .HP
 .B ethtool \-\-get\-phy\-tunable
 .I devname
 .RB [ downshift ]
 .RB [ fast-link-down ]
+.RB [ energy-detect-power-down ]
 .HP
 .B ethtool \-\-reset
 .I devname
@@ -1100,6 +1106,24 @@
        Sets the period after which the link is reported as down. Note that the 
PHY may choose
        the closest supported value. Only on reading back the tunable do you 
get the actual value.
 .TE
+.TP
+.A2 energy-detect-power-down on off
+Specifies whether Energy Detect Power Down (EDPD) should be enabled (if 
supported).
+This will put the RX and TX circuit blocks into a low power mode, and the PHY 
will
+wake up periodically to send link pulses to avoid any lock-up situation with a 
peer
+PHY that may also have EDPD enabled. By default, this setting will also enable 
the
+periodic transmission of TX pulses.
+.TS
+nokeep;
+lB     l.
+.BI msecs \ N
+       Some PHYs support configuration of the wake-up interval to send TX 
pulses.
+       This setting allows the control of this interval, and 0 disables TX 
pulses
+       if the PHY supports this. Disabling TX pulses can create a lock-up 
situation
+       where neither of the PHYs wakes the other one. If unspecified the 
default
+       value (in milliseconds) will be used by the PHY.
+.TE
+.TP
 .PD
 .RE
 .TP
@@ -1122,6 +1146,10 @@
 before a broken link is reported as being down.
 
 Gets the PHY Fast Link Down status / period.
+.TP
+.B energy\-detect\-power\-down
+Gets the current configured setting for Energy Detect Power Down (if 
supported).
+
 .RE
 .TP
 .B \-\-reset
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/ethtool.c new/ethtool-5.4/ethtool.c
--- old/ethtool-5.3/ethtool.c   2019-08-09 18:16:25.000000000 +0200
+++ new/ethtool-5.4/ethtool.c   2019-10-29 18:51:21.000000000 +0100
@@ -470,7 +470,7 @@
        return flow_type;
 }
 
-static int do_version(struct cmd_context *ctx)
+static int do_version(struct cmd_context *ctx maybe_unused)
 {
        fprintf(stdout,
                PACKAGE " version " VERSION
@@ -1275,7 +1275,8 @@
        return 0;
 }
 
-static int dump_eeprom(int geeprom_dump_raw, struct ethtool_drvinfo *info,
+static int dump_eeprom(int geeprom_dump_raw,
+                      struct ethtool_drvinfo *info maybe_unused,
                       struct ethtool_eeprom *ee)
 {
        if (geeprom_dump_raw) {
@@ -4897,6 +4898,30 @@
                else
                        fprintf(stdout, "Fast Link Down enabled, %d msecs\n",
                                cont.msecs);
+       } else if (!strcmp(argp[0], "energy-detect-power-down")) {
+               struct {
+                       struct ethtool_tunable ds;
+                       u16 msecs;
+               } cont;
+
+               cont.ds.cmd = ETHTOOL_PHY_GTUNABLE;
+               cont.ds.id = ETHTOOL_PHY_EDPD;
+               cont.ds.type_id = ETHTOOL_TUNABLE_U16;
+               cont.ds.len = 2;
+               if (send_ioctl(ctx, &cont.ds) < 0) {
+                       perror("Cannot Get PHY Energy Detect Power Down value");
+                       return 87;
+               }
+
+               if (cont.msecs == ETHTOOL_PHY_EDPD_DISABLE)
+                       fprintf(stdout, "Energy Detect Power Down: disabled\n");
+               else if (cont.msecs == ETHTOOL_PHY_EDPD_NO_TX)
+                       fprintf(stdout,
+                               "Energy Detect Power Down: enabled, TX 
disabled\n");
+               else
+                       fprintf(stdout,
+                               "Energy Detect Power Down: enabled, TX %u 
msecs\n",
+                               cont.msecs);
        } else {
                exit_bad_args();
        }
@@ -5018,7 +5043,10 @@
        return 1;
 }
 
-static int parse_named_u8(struct cmd_context *ctx, const char *name, u8 *val)
+static int parse_named_uint(struct cmd_context *ctx,
+                           const char *name,
+                           unsigned long long *val,
+                           unsigned long long max)
 {
        if (ctx->argc < 2)
                return 0;
@@ -5026,7 +5054,7 @@
        if (strcmp(*ctx->argp, name))
                return 0;
 
-       *val = get_uint_range(*(ctx->argp + 1), 0, 0xff);
+       *val = get_uint_range(*(ctx->argp + 1), 0, max);
 
        ctx->argc -= 2;
        ctx->argp += 2;
@@ -5034,6 +5062,30 @@
        return 1;
 }
 
+static int parse_named_u8(struct cmd_context *ctx, const char *name, u8 *val)
+{
+       unsigned long long val1;
+       int ret;
+
+       ret = parse_named_uint(ctx, name, &val1, 0xff);
+       if (ret)
+               *val = val1;
+
+       return ret;
+}
+
+static int parse_named_u16(struct cmd_context *ctx, const char *name, u16 *val)
+{
+       unsigned long long val1;
+       int ret;
+
+       ret = parse_named_uint(ctx, name, &val1, 0xffff);
+       if (ret)
+               *val = val1;
+
+       return ret;
+}
+
 static int do_set_phy_tunable(struct cmd_context *ctx)
 {
        int err = 0;
@@ -5041,6 +5093,8 @@
        u8 ds_changed = 0, ds_has_cnt = 0, ds_enable = 0;
        u8 fld_changed = 0, fld_enable = 0;
        u8 fld_msecs = ETHTOOL_PHY_FAST_LINK_DOWN_ON;
+       u8 edpd_changed = 0, edpd_enable = 0;
+       u16 edpd_tx_interval = ETHTOOL_PHY_EDPD_DFLT_TX_MSECS;
 
        /* Parse arguments */
        if (parse_named_bool(ctx, "downshift", &ds_enable)) {
@@ -5050,6 +5104,11 @@
                fld_changed = 1;
                if (fld_enable)
                        parse_named_u8(ctx, "msecs", &fld_msecs);
+       } else if (parse_named_bool(ctx, "energy-detect-power-down",
+                                   &edpd_enable)) {
+               edpd_changed = 1;
+               if (edpd_enable)
+                       parse_named_u16(ctx, "msecs", &edpd_tx_interval);
        } else {
                exit_bad_args();
        }
@@ -5074,6 +5133,16 @@
                        fld_msecs = ETHTOOL_PHY_FAST_LINK_DOWN_OFF;
                else if (fld_msecs == ETHTOOL_PHY_FAST_LINK_DOWN_OFF)
                        exit_bad_args();
+       } else if (edpd_changed) {
+               if (!edpd_enable)
+                       edpd_tx_interval = ETHTOOL_PHY_EDPD_DISABLE;
+               else if (edpd_tx_interval == 0)
+                       edpd_tx_interval = ETHTOOL_PHY_EDPD_NO_TX;
+               else if (edpd_tx_interval > ETHTOOL_PHY_EDPD_NO_TX) {
+                       fprintf(stderr, "'msecs' max value is %d.\n",
+                               (ETHTOOL_PHY_EDPD_NO_TX - 1));
+                       exit_bad_args();
+               }
        }
 
        /* Do it */
@@ -5109,6 +5178,22 @@
                        perror("Cannot Set PHY Fast Link Down value");
                        err = 87;
                }
+       } else if (edpd_changed) {
+               struct {
+                       struct ethtool_tunable fld;
+                       u16 msecs;
+               } cont;
+
+               cont.fld.cmd = ETHTOOL_PHY_STUNABLE;
+               cont.fld.id = ETHTOOL_PHY_EDPD;
+               cont.fld.type_id = ETHTOOL_TUNABLE_U16;
+               cont.fld.len = 2;
+               cont.msecs = edpd_tx_interval;
+               err = send_ioctl(ctx, &cont.fld);
+               if (err < 0) {
+                       perror("Cannot Set PHY Energy Detect Power Down");
+                       err = 87;
+               }
        }
 
        return err;
@@ -5361,10 +5446,12 @@
          "             [ tx-timer %d ]\n"},
        { "--set-phy-tunable", 1, do_set_phy_tunable, "Set PHY tunable",
          "             [ downshift on|off [count N] ]\n"
-         "             [ fast-link-down on|off [msecs N] ]\n"},
+         "             [ fast-link-down on|off [msecs N] ]\n"
+         "             [ energy-detect-power-down on|off [msecs N] ]\n"},
        { "--get-phy-tunable", 1, do_get_phy_tunable, "Get PHY tunable",
          "             [ downshift ]\n"
-         "             [ fast-link-down ]\n"},
+         "             [ fast-link-down ]\n"
+         "             [ energy-detect-power-down ]\n"},
        { "--reset", 1, do_reset, "Reset components",
          "             [ flags %x ]\n"
          "             [ mgmt ]\n"
@@ -5398,7 +5485,7 @@
        {}
 };
 
-static int show_usage(struct cmd_context *ctx)
+static int show_usage(struct cmd_context *ctx maybe_unused)
 {
        int i;
 
@@ -5421,7 +5508,7 @@
        return 0;
 }
 
-static int find_option(int argc, char **argp)
+static int find_option(char *arg)
 {
        const char *opt;
        size_t len;
@@ -5431,8 +5518,7 @@
                opt = args[k].opts;
                for (;;) {
                        len = strcspn(opt, "|");
-                       if (strncmp(*argp, opt, len) == 0 &&
-                           (*argp)[len] == 0)
+                       if (strncmp(arg, opt, len) == 0 && arg[len] == 0)
                                return k;
 
                        if (opt[len] == 0)
@@ -5581,7 +5667,7 @@
                ctx->argp++;
        }
 
-       i = find_option(ctx->argc, ctx->argp);
+       i = find_option(ctx->argp[0]);
        if (i < 0)
                exit_bad_args();
 
@@ -5633,7 +5719,7 @@
        if (argc == 0)
                exit_bad_args();
 
-       k = find_option(argc, argp);
+       k = find_option(*argp);
        if (k >= 0) {
                argp++;
                argc--;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/ethtool.spec new/ethtool-5.4/ethtool.spec
--- old/ethtool-5.3/ethtool.spec        2019-09-23 20:14:34.000000000 +0200
+++ new/ethtool-5.4/ethtool.spec        2020-01-10 19:37:06.000000000 +0100
@@ -1,5 +1,5 @@
 Name           : ethtool
-Version                : 5.3
+Version                : 5.4
 Release                : 1
 Group          : Utilities
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/fec.c new/ethtool-5.4/fec.c
--- old/ethtool-5.3/fec.c       2019-03-14 19:34:43.000000000 +0100
+++ new/ethtool-5.4/fec.c       2019-10-29 18:51:21.000000000 +0100
@@ -194,7 +194,8 @@
 #undef FIELD
 #undef REG
 
-int fec_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs)
+int fec_dump_regs(struct ethtool_drvinfo *info maybe_unused,
+                 struct ethtool_regs *regs)
 {
        const u32 *data = (u32 *)regs->data;
        int offset;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/fec_8xx.c new/ethtool-5.4/fec_8xx.c
--- old/ethtool-5.3/fec_8xx.c   2016-08-24 21:47:26.000000000 +0200
+++ new/ethtool-5.4/fec_8xx.c   2019-10-29 18:51:21.000000000 +0100
@@ -47,7 +47,8 @@
                                (unsigned long)(offsetof(struct fec, x)), \
                                #x, f->x)
 
-int fec_8xx_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs)
+int fec_8xx_dump_regs(struct ethtool_drvinfo *info maybe_unused,
+                     struct ethtool_regs *regs)
 {
        struct fec *f = (struct fec *)regs->data;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/fjes.c new/ethtool-5.4/fjes.c
--- old/ethtool-5.3/fjes.c      2017-06-02 19:27:13.000000000 +0200
+++ new/ethtool-5.4/fjes.c      2019-10-29 18:51:21.000000000 +0100
@@ -2,7 +2,8 @@
 #include <stdio.h>
 #include "internal.h"
 
-int fjes_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs)
+int fjes_dump_regs(struct ethtool_drvinfo *info maybe_unused,
+                  struct ethtool_regs *regs)
 {
        u32 *regs_buff = (u32 *)regs->data;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/ibm_emac.c new/ethtool-5.4/ibm_emac.c
--- old/ethtool-5.3/ibm_emac.c  2016-08-24 21:47:26.000000000 +0200
+++ new/ethtool-5.4/ibm_emac.c  2019-10-29 18:51:21.000000000 +0100
@@ -314,7 +314,8 @@
        return p + 1;
 }
 
-int ibm_emac_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs)
+int ibm_emac_dump_regs(struct ethtool_drvinfo *info maybe_unused,
+                      struct ethtool_regs *regs)
 {
        struct emac_ethtool_regs_hdr *hdr =
            (struct emac_ethtool_regs_hdr *)regs->data;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/igb.c new/ethtool-5.4/igb.c
--- old/ethtool-5.3/igb.c       2019-07-26 17:15:54.000000000 +0200
+++ new/ethtool-5.4/igb.c       2019-10-29 18:51:21.000000000 +0100
@@ -88,8 +88,8 @@
 #define E1000_TCTL_RTLC   0x01000000    /* Re-transmit on late collision */
 #define E1000_TCTL_NRTU   0x02000000    /* No Re-transmit on underrun */
 
-int
-igb_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs)
+int igb_dump_regs(struct ethtool_drvinfo *info maybe_unused,
+                 struct ethtool_regs *regs)
 {
        u32 *regs_buff = (u32 *)regs->data;
        u32 reg;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/internal.h new/ethtool-5.4/internal.h
--- old/ethtool-5.3/internal.h  2019-03-14 19:34:43.000000000 +0100
+++ new/ethtool-5.4/internal.h  2019-10-29 18:51:21.000000000 +0100
@@ -23,6 +23,8 @@
 #include <sys/ioctl.h>
 #include <net/if.h>
 
+#define maybe_unused __attribute__((__unused__))
+
 /* ethtool.h expects these to be defined by <linux/types.h> */
 #ifndef HAVE_BE_TYPES
 typedef uint16_t __be16;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/ixgb.c new/ethtool-5.4/ixgb.c
--- old/ethtool-5.3/ixgb.c      2016-08-24 21:47:26.000000000 +0200
+++ new/ethtool-5.4/ixgb.c      2019-10-29 18:51:21.000000000 +0100
@@ -38,8 +38,8 @@
 #define IXGB_RAH_ASEL_SRC         0x00010000
 #define IXGB_RAH_AV               0x80000000
 
-int
-ixgb_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs)
+int ixgb_dump_regs(struct ethtool_drvinfo *info maybe_unused,
+                  struct ethtool_regs *regs)
 {
        u32 *regs_buff = (u32 *)regs->data;
        u8 version = (u8)(regs->version >> 24);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/ixgbe.c new/ethtool-5.4/ixgbe.c
--- old/ethtool-5.3/ixgbe.c     2018-08-10 20:43:21.000000000 +0200
+++ new/ethtool-5.4/ixgbe.c     2019-10-29 18:51:21.000000000 +0100
@@ -168,7 +168,8 @@
 }
 
 int
-ixgbe_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs)
+ixgbe_dump_regs(struct ethtool_drvinfo *info maybe_unused,
+               struct ethtool_regs *regs)
 {
        u32 *regs_buff = (u32 *)regs->data;
        u32 regs_buff_len = regs->len / sizeof(*regs_buff);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/ixgbevf.c new/ethtool-5.4/ixgbevf.c
--- old/ethtool-5.3/ixgbevf.c   2016-08-24 21:47:26.000000000 +0200
+++ new/ethtool-5.4/ixgbevf.c   2019-10-29 18:51:21.000000000 +0100
@@ -3,7 +3,8 @@
 #include "internal.h"
 
 int
-ixgbevf_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs)
+ixgbevf_dump_regs(struct ethtool_drvinfo *info maybe_unused,
+                 struct ethtool_regs *regs)
 {
        u32 *regs_buff = (u32 *)regs->data;
        u8 version = (u8)(regs->version >> 24);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/lan78xx.c new/ethtool-5.4/lan78xx.c
--- old/ethtool-5.3/lan78xx.c   2018-04-16 19:53:04.000000000 +0200
+++ new/ethtool-5.4/lan78xx.c   2019-10-29 18:51:21.000000000 +0100
@@ -2,7 +2,8 @@
 #include <string.h>
 #include "internal.h"
 
-int lan78xx_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs)
+int lan78xx_dump_regs(struct ethtool_drvinfo *info maybe_unused,
+                     struct ethtool_regs *regs)
 {
        unsigned int *lan78xx_reg = (unsigned int *)regs->data;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/marvell.c new/ethtool-5.4/marvell.c
--- old/ethtool-5.3/marvell.c   2016-08-24 21:47:26.000000000 +0200
+++ new/ethtool-5.4/marvell.c   2019-10-29 18:51:21.000000000 +0100
@@ -118,13 +118,13 @@
        printf("\n%s\n", name);
        printf("---------------\n");
        printf("End Address                      0x%08X\n", r[0]);
-       printf("Write Pointer                    0x%08X\n", r[1]);
-       printf("Read Pointer                     0x%08X\n", r[2]);
-       printf("Packet Counter                   0x%08X\n", r[3]);
-       printf("Level                            0x%08X\n", r[4]);
-       printf("Control                          0x%08X\n", r[5]);
-       printf("Control/Test                     0x%08X\n", r[6]);
-       dump_timer("LED", p + 0x20);
+       printf("Write Pointer                    0x%08X\n", r[1]);
+       printf("Read Pointer                     0x%08X\n", r[2]);
+       printf("Packet Counter                   0x%08X\n", r[3]);
+       printf("Level                            0x%08X\n", r[4]);
+       printf("Control                          0x%08X\n", r[5]);
+       printf("Control/Test                     0x%08X\n", r[6]);
+       dump_timer("LED", r + 8);
 }
 
 static void dump_gmac_fifo(const char *name, const void *p)
@@ -259,7 +259,8 @@
        printf("General Purpose  I/O             0x%08X\n", *(u32 *) (r + 
0x15c));
 }
 
-int skge_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs)
+int skge_dump_regs(struct ethtool_drvinfo *info maybe_unused,
+                  struct ethtool_regs *regs)
 {
        const u32 *r = (const u32 *) regs->data;
        int dual = !(regs->data[0x11a] & 1);
@@ -379,7 +380,8 @@
        }
 }
 
-int sky2_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs)
+int sky2_dump_regs(struct ethtool_drvinfo *info maybe_unused,
+                  struct ethtool_regs *regs)
 {
        const u16 *r16 = (const u16 *) regs->data;
        const u32 *r32 = (const u32 *) regs->data;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/natsemi.c new/ethtool-5.4/natsemi.c
--- old/ethtool-5.3/natsemi.c   2016-08-24 21:47:26.000000000 +0200
+++ new/ethtool-5.4/natsemi.c   2019-10-29 18:51:21.000000000 +0100
@@ -323,7 +323,8 @@
 } while (0)
 
 int
-natsemi_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs)
+natsemi_dump_regs(struct ethtool_drvinfo *info maybe_unused,
+                 struct ethtool_regs *regs)
 {
        u32 *data = (u32 *)regs->data;
        u32 tmp;
@@ -963,7 +964,8 @@
 }
 
 int
-natsemi_dump_eeprom(struct ethtool_drvinfo *info, struct ethtool_eeprom *ee)
+natsemi_dump_eeprom(struct ethtool_drvinfo *info maybe_unused,
+                   struct ethtool_eeprom *ee)
 {
        int i;
        u16 *eebuf = (u16 *)ee->data;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/realtek.c new/ethtool-5.4/realtek.c
--- old/ethtool-5.3/realtek.c   2016-08-24 21:47:26.000000000 +0200
+++ new/ethtool-5.4/realtek.c   2019-10-29 18:51:21.000000000 +0100
@@ -241,7 +241,8 @@
 }
 
 int
-realtek_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs)
+realtek_dump_regs(struct ethtool_drvinfo *info maybe_unused,
+                 struct ethtool_regs *regs)
 {
        u32 *data = (u32 *) regs->data;
        u8 *data8 = (u8 *) regs->data;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/sfc.c new/ethtool-5.4/sfc.c
--- old/ethtool-5.3/sfc.c       2018-06-13 20:23:09.000000000 +0200
+++ new/ethtool-5.4/sfc.c       2019-10-29 18:51:21.000000000 +0100
@@ -3808,8 +3808,7 @@
 }
 
 static const void *
-print_simple_table(unsigned revision, const struct efx_nic_reg_table *table,
-                  const void *buf)
+print_simple_table(const struct efx_nic_reg_table *table, const void *buf)
 {
        const struct efx_nic_reg_field *field = &table->fields[0];
        size_t value_width = (field->width + 3) >> 2;
@@ -3891,7 +3890,7 @@
 }
 
 int
-sfc_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs)
+sfc_dump_regs(struct ethtool_drvinfo *info maybe_unused, struct ethtool_regs 
*regs)
 {
        const struct efx_nic_reg *reg;
        const struct efx_nic_reg_table *table;
@@ -3918,7 +3917,7 @@
                    revision <= table->max_revision) {
                        printf("\n%s:\n", table->name);
                        if (table->field_count == 1)
-                               buf = print_simple_table(revision, table, buf);
+                               buf = print_simple_table(table, buf);
                        else
                                buf = print_complex_table(revision, table, buf);
                }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/sfpid.c new/ethtool-5.4/sfpid.c
--- old/ethtool-5.3/sfpid.c     2017-12-06 16:40:27.000000000 +0100
+++ new/ethtool-5.4/sfpid.c     2019-10-29 18:51:21.000000000 +0100
@@ -47,7 +47,7 @@
        /* 10G Ethernet Compliance Codes */
        if (id[3] & (1 << 7))
                printf("%s 10G Ethernet: 10G Base-ER" \
-                      " [SFF-8472 rev10.4 only]\n", pfx);
+                      " [SFF-8472 rev10.4 onwards]\n", pfx);
        if (id[3] & (1 << 6))
                printf("%s 10G Ethernet: 10G Base-LRM\n", pfx);
        if (id[3] & (1 << 5))
@@ -185,10 +185,14 @@
                printf("%s Extended: 25G Base-CR CA-S\n", pfx);
        if (id[36] == 0xd)
                printf("%s Extended: 25G Base-CR CA-N\n", pfx);
+       if (id[36] == 0x16)
+               printf("%s Extended: 10Gbase-T with SFI electrical 
interface\n", pfx);
        if (id[36] == 0x18)
                printf("%s Extended: 100G AOC or 25GAUI C2M AOC with worst BER 
of 10^(-12)\n", pfx);
        if (id[36] == 0x19)
                printf("%s Extended: 100G ACC or 25GAUI C2M ACC with worst BER 
of 10^(-12)\n", pfx);
+       if (id[36] == 0x1c)
+               printf("%s Extended: 10Gbase-T Short Reach\n", pfx);
 }
 
 static void sff8079_show_encoding(const __u8 *id)
@@ -328,11 +332,24 @@
 {
        sff8079_show_identifier(id);
        if (((id[0] == 0x02) || (id[0] == 0x03)) && (id[1] == 0x04)) {
+               unsigned int br_nom, br_min, br_max;
+
+               if (id[12] == 0) {
+                       br_nom = br_min = br_max = 0;
+               } else if (id[12] == 255) {
+                       br_nom = id[66] * 250;
+                       br_max = id[67];
+                       br_min = id[67];
+               } else {
+                       br_nom = id[12] * 100;
+                       br_max = id[66];
+                       br_min = id[67];
+               }
                sff8079_show_ext_identifier(id);
                sff8079_show_connector(id);
                sff8079_show_transceiver(id);
                sff8079_show_encoding(id);
-               sff8079_show_value_with_unit(id, 12, "BR, Nominal", 100, "MBd");
+               printf("\t%-41s : %u%s\n", "BR, Nominal", br_nom, "MBd");
                sff8079_show_rate_identifier(id);
                sff8079_show_value_with_unit(id, 14,
                                             "Length (SMF,km)", 1, "km");
@@ -348,8 +365,8 @@
                sff8079_show_ascii(id, 40, 55, "Vendor PN");
                sff8079_show_ascii(id, 56, 59, "Vendor rev");
                sff8079_show_options(id);
-               sff8079_show_value_with_unit(id, 66, "BR margin, max", 1, "%");
-               sff8079_show_value_with_unit(id, 67, "BR margin, min", 1, "%");
+               printf("\t%-41s : %u%s\n", "BR margin, max", br_max, "%");
+               printf("\t%-41s : %u%s\n", "BR margin, min", br_min, "%");
                sff8079_show_ascii(id, 68, 83, "Vendor SN");
                sff8079_show_ascii(id, 84, 91, "Date code");
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/smsc911x.c new/ethtool-5.4/smsc911x.c
--- old/ethtool-5.3/smsc911x.c  2016-08-24 21:47:26.000000000 +0200
+++ new/ethtool-5.4/smsc911x.c  2019-10-29 18:51:21.000000000 +0100
@@ -2,7 +2,8 @@
 #include <string.h>
 #include "internal.h"
 
-int smsc911x_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs)
+int smsc911x_dump_regs(struct ethtool_drvinfo *info maybe_unused,
+                      struct ethtool_regs *regs)
 {
        unsigned int *smsc_reg = (unsigned int *)regs->data;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/stmmac.c new/ethtool-5.4/stmmac.c
--- old/ethtool-5.3/stmmac.c    2017-10-26 20:02:15.000000000 +0200
+++ new/ethtool-5.4/stmmac.c    2019-10-29 18:51:21.000000000 +0100
@@ -18,7 +18,7 @@
 #define GMAC_REG_NUM           55
 #define GMAC_DMA_REG_NUM       23
 
-int st_mac100_dump_regs(struct ethtool_drvinfo *info,
+int st_mac100_dump_regs(struct ethtool_drvinfo *info maybe_unused,
                        struct ethtool_regs *regs)
 {
        int i;
@@ -51,7 +51,8 @@
        return 0;
 }
 
-int st_gmac_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs)
+int st_gmac_dump_regs(struct ethtool_drvinfo *info maybe_unused,
+                     struct ethtool_regs *regs)
 {
        int i;
        unsigned int *stmmac_reg = (unsigned int *)regs->data;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/tg3.c new/ethtool-5.4/tg3.c
--- old/ethtool-5.3/tg3.c       2016-08-24 21:47:26.000000000 +0200
+++ new/ethtool-5.4/tg3.c       2019-10-29 18:51:21.000000000 +0100
@@ -4,8 +4,8 @@
 
 #define TG3_MAGIC 0x669955aa
 
-int
-tg3_dump_eeprom(struct ethtool_drvinfo *info, struct ethtool_eeprom *ee)
+int tg3_dump_eeprom(struct ethtool_drvinfo *info maybe_unused,
+                   struct ethtool_eeprom *ee)
 {
        int i;
 
@@ -23,8 +23,8 @@
        return 0;
 }
 
-int
-tg3_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs)
+int tg3_dump_regs(struct ethtool_drvinfo *info maybe_unused,
+                 struct ethtool_regs *regs)
 {
        int i;
        u32 reg;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/tse.c new/ethtool-5.4/tse.c
--- old/ethtool-5.3/tse.c       2016-08-24 21:47:26.000000000 +0200
+++ new/ethtool-5.4/tse.c       2019-10-29 18:51:21.000000000 +0100
@@ -25,7 +25,7 @@
        return 0;
 }
 
-int altera_tse_dump_regs(struct ethtool_drvinfo *info,
+int altera_tse_dump_regs(struct ethtool_drvinfo *info maybe_unused,
                         struct ethtool_regs *regs)
 {
        int i;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/vioc.c new/ethtool-5.4/vioc.c
--- old/ethtool-5.3/vioc.c      2016-08-24 21:47:26.000000000 +0200
+++ new/ethtool-5.4/vioc.c      2019-10-29 18:51:21.000000000 +0100
@@ -11,7 +11,8 @@
 
 #define VIOC_REGS_LINE_SIZE    sizeof(struct regs_line)
 
-int vioc_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs)
+int vioc_dump_regs(struct ethtool_drvinfo *info maybe_unused,
+                  struct ethtool_regs *regs)
 {
        unsigned int    i;
        unsigned int    num_regs;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-5.3/vmxnet3.c new/ethtool-5.4/vmxnet3.c
--- old/ethtool-5.3/vmxnet3.c   2016-08-24 21:47:26.000000000 +0200
+++ new/ethtool-5.4/vmxnet3.c   2019-10-29 18:51:21.000000000 +0100
@@ -3,7 +3,8 @@
 #include "internal.h"
 
 int
-vmxnet3_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs)
+vmxnet3_dump_regs(struct ethtool_drvinfo *info maybe_unused,
+                 struct ethtool_regs *regs)
 {
        u32 *regs_buff = (u32 *)regs->data;
        u32 version = regs->version;



Reply via email to