Hello community,

here is the log from the commit of package ethtool for openSUSE:Factory checked 
in at 2019-03-19 11:07:28
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ethtool (Old)
 and      /work/SRC/openSUSE:Factory/.ethtool.new.28833 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "ethtool"

Tue Mar 19 11:07:28 2019 rev:56 rq:685010 version:5.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/ethtool/ethtool.changes  2018-11-12 
09:49:02.812498784 +0100
+++ /work/SRC/openSUSE:Factory/.ethtool.new.28833/ethtool.changes       
2019-03-19 11:07:34.534105643 +0100
@@ -1,0 +2,14 @@
+Thu Mar 14 10:25:14 UTC 2019 - Michal Kubecek <mkube...@suse.cz>
+
+- Hide some innocuous build warnings to make relevant ones more
+  visible.
+
+-------------------------------------------------------------------
+Thu Mar 14 09:57:36 UTC 2019 - Michal Kubecek <mkube...@suse.cz>
+
+- Update to new upstream release 5.0
+  * Feature: add pretty print for dsa/mv88e6xxx
+  * Feature: don't report UFO on kernels >= 4.14
+  * Fix (potential): zero initalize coalesce struct
+
+-------------------------------------------------------------------

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

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

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

Other differences:
------------------
++++++ ethtool.spec ++++++
--- /var/tmp/diff_new_pack.rdVO9C/_old  2019-03-19 11:07:36.202105260 +0100
+++ /var/tmp/diff_new_pack.rdVO9C/_new  2019-03-19 11:07:36.202105260 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package ethtool
 #
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 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:        4.19
+Version:        5.0
 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"
+export CFLAGS="%optflags -W -Wall -Wstrict-prototypes -Wformat-security 
-Wpointer-arith -Wno-unused-parameter -Wno-missing-field-initializers"
 %configure
 make %{?_smp_mflags}
 

++++++ ethtool-4.19.tar.xz -> ethtool-5.0.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-4.19/Makefile.am new/ethtool-5.0/Makefile.am
--- old/ethtool-4.19/Makefile.am        2018-04-16 19:53:04.000000000 +0200
+++ new/ethtool-5.0/Makefile.am 2019-01-18 19:31:08.000000000 +0100
@@ -9,7 +9,7 @@
                  rxclass.c
 if ETHTOOL_ENABLE_PRETTY_DUMP
 ethtool_SOURCES += \
-                 amd8111e.c de2104x.c e100.c e1000.c et131x.c igb.c    \
+                 amd8111e.c de2104x.c dsa.c e100.c e1000.c et131x.c igb.c      
\
                  fec_8xx.c ibm_emac.c ixgb.c ixgbe.c natsemi.c \
                  pcnet32.c realtek.c tg3.c marvell.c vioc.c    \
                  smsc911x.c at76c50x-usb.c sfc.c stmmac.c      \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-4.19/Makefile.in new/ethtool-5.0/Makefile.in
--- old/ethtool-4.19/Makefile.in        2018-11-02 15:59:15.000000000 +0100
+++ new/ethtool-5.0/Makefile.in 2019-03-13 19:11:06.000000000 +0100
@@ -88,7 +88,7 @@
 POST_UNINSTALL = :
 sbin_PROGRAMS = ethtool$(EXEEXT)
 @ETHTOOL_ENABLE_PRETTY_DUMP_TRUE@am__append_1 = \
-@ETHTOOL_ENABLE_PRETTY_DUMP_TRUE@                amd8111e.c de2104x.c e100.c 
e1000.c et131x.c igb.c    \
+@ETHTOOL_ENABLE_PRETTY_DUMP_TRUE@                amd8111e.c de2104x.c dsa.c 
e100.c e1000.c et131x.c igb.c      \
 @ETHTOOL_ENABLE_PRETTY_DUMP_TRUE@                fec_8xx.c ibm_emac.c ixgb.c 
ixgbe.c natsemi.c \
 @ETHTOOL_ENABLE_PRETTY_DUMP_TRUE@                pcnet32.c realtek.c tg3.c 
marvell.c vioc.c    \
 @ETHTOOL_ENABLE_PRETTY_DUMP_TRUE@                smsc911x.c at76c50x-usb.c 
sfc.c stmmac.c      \
@@ -113,7 +113,7 @@
 am__installdirs = "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man8dir)"
 PROGRAMS = $(sbin_PROGRAMS)
 am__ethtool_SOURCES_DIST = ethtool.c ethtool-copy.h internal.h \
-       net_tstamp-copy.h rxclass.c amd8111e.c de2104x.c e100.c \
+       net_tstamp-copy.h rxclass.c amd8111e.c de2104x.c dsa.c e100.c \
        e1000.c et131x.c igb.c fec_8xx.c ibm_emac.c ixgb.c ixgbe.c \
        natsemi.c pcnet32.c realtek.c tg3.c marvell.c vioc.c \
        smsc911x.c at76c50x-usb.c sfc.c stmmac.c sff-common.c \
@@ -121,7 +121,7 @@
        qsfp.c qsfp.h fjes.c lan78xx.c
 @ETHTOOL_ENABLE_PRETTY_DUMP_TRUE@am__objects_1 = amd8111e.$(OBJEXT) \
 @ETHTOOL_ENABLE_PRETTY_DUMP_TRUE@      de2104x.$(OBJEXT) \
-@ETHTOOL_ENABLE_PRETTY_DUMP_TRUE@      e100.$(OBJEXT) \
+@ETHTOOL_ENABLE_PRETTY_DUMP_TRUE@      dsa.$(OBJEXT) e100.$(OBJEXT) \
 @ETHTOOL_ENABLE_PRETTY_DUMP_TRUE@      e1000.$(OBJEXT) \
 @ETHTOOL_ENABLE_PRETTY_DUMP_TRUE@      et131x.$(OBJEXT) \
 @ETHTOOL_ENABLE_PRETTY_DUMP_TRUE@      igb.$(OBJEXT) \
@@ -154,13 +154,14 @@
 ethtool_DEPENDENCIES =
 am__test_cmdline_SOURCES_DIST = test-cmdline.c test-common.c ethtool.c \
        ethtool-copy.h internal.h net_tstamp-copy.h rxclass.c \
-       amd8111e.c de2104x.c e100.c e1000.c et131x.c igb.c fec_8xx.c \
-       ibm_emac.c ixgb.c ixgbe.c natsemi.c pcnet32.c realtek.c tg3.c \
-       marvell.c vioc.c smsc911x.c at76c50x-usb.c sfc.c stmmac.c \
-       sff-common.c sff-common.h sfpid.c sfpdiag.c ixgbevf.c tse.c \
-       vmxnet3.c qsfp.c qsfp.h fjes.c lan78xx.c
+       amd8111e.c de2104x.c dsa.c e100.c e1000.c et131x.c igb.c \
+       fec_8xx.c ibm_emac.c ixgb.c ixgbe.c natsemi.c pcnet32.c \
+       realtek.c tg3.c marvell.c vioc.c smsc911x.c at76c50x-usb.c \
+       sfc.c stmmac.c sff-common.c sff-common.h sfpid.c sfpdiag.c \
+       ixgbevf.c tse.c vmxnet3.c qsfp.c qsfp.h fjes.c lan78xx.c
 @ETHTOOL_ENABLE_PRETTY_DUMP_TRUE@am__objects_2 = 
test_cmdline-amd8111e.$(OBJEXT) \
 @ETHTOOL_ENABLE_PRETTY_DUMP_TRUE@      test_cmdline-de2104x.$(OBJEXT) \
+@ETHTOOL_ENABLE_PRETTY_DUMP_TRUE@      test_cmdline-dsa.$(OBJEXT) \
 @ETHTOOL_ENABLE_PRETTY_DUMP_TRUE@      test_cmdline-e100.$(OBJEXT) \
 @ETHTOOL_ENABLE_PRETTY_DUMP_TRUE@      test_cmdline-e1000.$(OBJEXT) \
 @ETHTOOL_ENABLE_PRETTY_DUMP_TRUE@      test_cmdline-et131x.$(OBJEXT) \
@@ -199,13 +200,14 @@
        $(AM_LDFLAGS) $(LDFLAGS) -o $@
 am__test_features_SOURCES_DIST = test-features.c test-common.c \
        ethtool.c ethtool-copy.h internal.h net_tstamp-copy.h \
-       rxclass.c amd8111e.c de2104x.c e100.c e1000.c et131x.c igb.c \
-       fec_8xx.c ibm_emac.c ixgb.c ixgbe.c natsemi.c pcnet32.c \
+       rxclass.c amd8111e.c de2104x.c dsa.c e100.c e1000.c et131x.c \
+       igb.c fec_8xx.c ibm_emac.c ixgb.c ixgbe.c natsemi.c pcnet32.c \
        realtek.c tg3.c marvell.c vioc.c smsc911x.c at76c50x-usb.c \
        sfc.c stmmac.c sff-common.c sff-common.h sfpid.c sfpdiag.c \
        ixgbevf.c tse.c vmxnet3.c qsfp.c qsfp.h fjes.c lan78xx.c
 @ETHTOOL_ENABLE_PRETTY_DUMP_TRUE@am__objects_4 = 
test_features-amd8111e.$(OBJEXT) \
 @ETHTOOL_ENABLE_PRETTY_DUMP_TRUE@      test_features-de2104x.$(OBJEXT) \
+@ETHTOOL_ENABLE_PRETTY_DUMP_TRUE@      test_features-dsa.$(OBJEXT) \
 @ETHTOOL_ENABLE_PRETTY_DUMP_TRUE@      test_features-e100.$(OBJEXT) \
 @ETHTOOL_ENABLE_PRETTY_DUMP_TRUE@      test_features-e1000.$(OBJEXT) \
 @ETHTOOL_ENABLE_PRETTY_DUMP_TRUE@      test_features-et131x.$(OBJEXT) \
@@ -755,6 +757,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amd8111e.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/at76c50x-usb.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/de2104x.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dsa.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e100.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e1000.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/et131x.Po@am__quote@
@@ -782,6 +785,7 @@
 @AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/test_cmdline-amd8111e.Po@am__quote@
 @AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/test_cmdline-at76c50x-usb.Po@am__quote@
 @AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/test_cmdline-de2104x.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_cmdline-dsa.Po@am__quote@
 @AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/test_cmdline-e100.Po@am__quote@
 @AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/test_cmdline-e1000.Po@am__quote@
 @AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/test_cmdline-et131x.Po@am__quote@
@@ -815,6 +819,7 @@
 @AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/test_features-amd8111e.Po@am__quote@
 @AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/test_features-at76c50x-usb.Po@am__quote@
 @AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/test_features-de2104x.Po@am__quote@
+@AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/test_features-dsa.Po@am__quote@
 @AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/test_features-e100.Po@am__quote@
 @AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/test_features-e1000.Po@am__quote@
 @AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/test_features-et131x.Po@am__quote@
@@ -948,6 +953,20 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) 
$(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) 
$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_cmdline_CFLAGS) $(CFLAGS) -c -o 
test_cmdline-de2104x.obj `if test -f 'de2104x.c'; then $(CYGPATH_W) 
'de2104x.c'; else $(CYGPATH_W) '$(srcdir)/de2104x.c'; fi`
 
+test_cmdline-dsa.o: dsa.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) 
$(AM_CPPFLAGS) $(CPPFLAGS) $(test_cmdline_CFLAGS) $(CFLAGS) -MT 
test_cmdline-dsa.o -MD -MP -MF $(DEPDIR)/test_cmdline-dsa.Tpo -c -o 
test_cmdline-dsa.o `test -f 'dsa.c' || echo '$(srcdir)/'`dsa.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/test_cmdline-dsa.Tpo 
$(DEPDIR)/test_cmdline-dsa.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='dsa.c' 
object='test_cmdline-dsa.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) 
$(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) 
$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_cmdline_CFLAGS) $(CFLAGS) -c -o 
test_cmdline-dsa.o `test -f 'dsa.c' || echo '$(srcdir)/'`dsa.c
+
+test_cmdline-dsa.obj: dsa.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) 
$(AM_CPPFLAGS) $(CPPFLAGS) $(test_cmdline_CFLAGS) $(CFLAGS) -MT 
test_cmdline-dsa.obj -MD -MP -MF $(DEPDIR)/test_cmdline-dsa.Tpo -c -o 
test_cmdline-dsa.obj `if test -f 'dsa.c'; then $(CYGPATH_W) 'dsa.c'; else 
$(CYGPATH_W) '$(srcdir)/dsa.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/test_cmdline-dsa.Tpo 
$(DEPDIR)/test_cmdline-dsa.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='dsa.c' 
object='test_cmdline-dsa.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) 
$(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) 
$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_cmdline_CFLAGS) $(CFLAGS) -c -o 
test_cmdline-dsa.obj `if test -f 'dsa.c'; then $(CYGPATH_W) 'dsa.c'; else 
$(CYGPATH_W) '$(srcdir)/dsa.c'; fi`
+
 test_cmdline-e100.o: e100.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) 
$(AM_CPPFLAGS) $(CPPFLAGS) $(test_cmdline_CFLAGS) $(CFLAGS) -MT 
test_cmdline-e100.o -MD -MP -MF $(DEPDIR)/test_cmdline-e100.Tpo -c -o 
test_cmdline-e100.o `test -f 'e100.c' || echo '$(srcdir)/'`e100.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/test_cmdline-e100.Tpo 
$(DEPDIR)/test_cmdline-e100.Po
@@ -1410,6 +1429,20 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) 
$(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) 
$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_features_CFLAGS) $(CFLAGS) -c -o 
test_features-de2104x.obj `if test -f 'de2104x.c'; then $(CYGPATH_W) 
'de2104x.c'; else $(CYGPATH_W) '$(srcdir)/de2104x.c'; fi`
 
+test_features-dsa.o: dsa.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) 
$(AM_CPPFLAGS) $(CPPFLAGS) $(test_features_CFLAGS) $(CFLAGS) -MT 
test_features-dsa.o -MD -MP -MF $(DEPDIR)/test_features-dsa.Tpo -c -o 
test_features-dsa.o `test -f 'dsa.c' || echo '$(srcdir)/'`dsa.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/test_features-dsa.Tpo 
$(DEPDIR)/test_features-dsa.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='dsa.c' 
object='test_features-dsa.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) 
$(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) 
$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_features_CFLAGS) $(CFLAGS) -c -o 
test_features-dsa.o `test -f 'dsa.c' || echo '$(srcdir)/'`dsa.c
+
+test_features-dsa.obj: dsa.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) 
$(AM_CPPFLAGS) $(CPPFLAGS) $(test_features_CFLAGS) $(CFLAGS) -MT 
test_features-dsa.obj -MD -MP -MF $(DEPDIR)/test_features-dsa.Tpo -c -o 
test_features-dsa.obj `if test -f 'dsa.c'; then $(CYGPATH_W) 'dsa.c'; else 
$(CYGPATH_W) '$(srcdir)/dsa.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/test_features-dsa.Tpo 
$(DEPDIR)/test_features-dsa.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='dsa.c' 
object='test_features-dsa.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) 
$(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) 
$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_features_CFLAGS) $(CFLAGS) -c -o 
test_features-dsa.obj `if test -f 'dsa.c'; then $(CYGPATH_W) 'dsa.c'; else 
$(CYGPATH_W) '$(srcdir)/dsa.c'; fi`
+
 test_features-e100.o: e100.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) 
$(AM_CPPFLAGS) $(CPPFLAGS) $(test_features_CFLAGS) $(CFLAGS) -MT 
test_features-e100.o -MD -MP -MF $(DEPDIR)/test_features-e100.Tpo -c -o 
test_features-e100.o `test -f 'e100.c' || echo '$(srcdir)/'`e100.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/test_features-e100.Tpo 
$(DEPDIR)/test_features-e100.Po
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-4.19/NEWS new/ethtool-5.0/NEWS
--- old/ethtool-4.19/NEWS       2018-11-02 15:57:18.000000000 +0100
+++ new/ethtool-5.0/NEWS        2019-03-13 19:04:51.000000000 +0100
@@ -1,3 +1,14 @@
+Version 5.0 - March 13, 2019
+       * Feature: don't report UFO on kernels v4.14 and above
+       * Fix: zero initialize coalesce struct
+       * Feature: dsa: add pretty dump
+       * Feature: dsa: mv88e6xxx: add pretty dump
+       * Feature: dsa: mv88e6xxx: add pretty dump for 88E6185
+       * Feature: dsa: mv88e6xxx: add pretty dump for 88E6161
+       * Feature: dsa: mv88e6xxx: add pretty dump for 88E6352
+       * Feature: dsa: mv88e6xxx: add pretty dump for 88E6390
+       * Feature: dsa: mv88e6xxx: add pretty dump for others
+
 Version 4.19 - November 2, 2018
        * Feature: support combinations of FEC modes
        * Feature: better syntax for combinations of FEC modes
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-4.19/configure new/ethtool-5.0/configure
--- old/ethtool-4.19/configure  2018-11-02 15:59:15.000000000 +0100
+++ new/ethtool-5.0/configure   2019-03-13 19:07:42.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 4.19.
+# Generated by GNU Autoconf 2.69 for ethtool 5.0.
 #
 # Report bugs to <net...@vger.kernel.org>.
 #
@@ -580,8 +580,8 @@
 # Identity of this package.
 PACKAGE_NAME='ethtool'
 PACKAGE_TARNAME='ethtool'
-PACKAGE_VERSION='4.19'
-PACKAGE_STRING='ethtool 4.19'
+PACKAGE_VERSION='5.0'
+PACKAGE_STRING='ethtool 5.0'
 PACKAGE_BUGREPORT='net...@vger.kernel.org'
 PACKAGE_URL=''
 
@@ -1237,7 +1237,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 4.19 to adapt to many kinds of systems.
+\`configure' configures ethtool 5.0 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1303,7 +1303,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of ethtool 4.19:";;
+     short | recursive ) echo "Configuration of ethtool 5.0:";;
    esac
   cat <<\_ACEOF
 
@@ -1398,7 +1398,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-ethtool configure 4.19
+ethtool configure 5.0
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1645,7 +1645,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 4.19, which was
+It was created by ethtool $as_me 5.0, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2510,7 +2510,7 @@
 
 # Define the identity of the package.
  PACKAGE='ethtool'
- VERSION='4.19'
+ VERSION='5.0'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -4695,7 +4695,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 4.19, which was
+This file was extended by ethtool $as_me 5.0, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -4761,7 +4761,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 4.19
+ethtool config.status 5.0
 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-4.19/configure.ac 
new/ethtool-5.0/configure.ac
--- old/ethtool-4.19/configure.ac       2018-11-02 15:54:36.000000000 +0100
+++ new/ethtool-5.0/configure.ac        2019-03-13 18:59:18.000000000 +0100
@@ -1,5 +1,5 @@
 dnl Process this file with autoconf to produce a configure script.
-AC_INIT(ethtool, 4.19, net...@vger.kernel.org)
+AC_INIT(ethtool, 5.0, 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-4.19/dsa.c new/ethtool-5.0/dsa.c
--- old/ethtool-4.19/dsa.c      1970-01-01 01:00:00.000000000 +0100
+++ new/ethtool-5.0/dsa.c       2019-01-18 19:31:08.000000000 +0100
@@ -0,0 +1,685 @@
+#include <stdio.h>
+#include <string.h>
+
+#include "internal.h"
+
+/* Macros and dump functions for the 16-bit mv88e6xxx per-port registers */
+
+#define REG(_reg, _name, _val) \
+       printf("%.02u: %-38.38s 0x%.4x\n", _reg, _name, _val)
+
+#define FIELD(_name, _fmt, ...) \
+       printf("      %-36.36s " _fmt "\n", _name, ##__VA_ARGS__)
+
+#define FIELD_BITMAP(_name, _val) \
+       FIELD(_name, "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", \
+             ((_val) & 0x0001) ? "0 " : "", \
+             ((_val) & 0x0002) ? "1 " : "", \
+             ((_val) & 0x0004) ? "2 " : "", \
+             ((_val) & 0x0008) ? "3 " : "", \
+             ((_val) & 0x0010) ? "4 " : "", \
+             ((_val) & 0x0020) ? "5 " : "", \
+             ((_val) & 0x0040) ? "6 " : "", \
+             ((_val) & 0x0080) ? "7 " : "", \
+             ((_val) & 0x0100) ? "8 " : "", \
+             ((_val) & 0x0200) ? "9 " : "", \
+             ((_val) & 0x0400) ? "10 " : "", \
+             ((_val) & 0x0800) ? "11 " : "", \
+             ((_val) & 0x1000) ? "12 " : "", \
+             ((_val) & 0x2000) ? "13 " : "", \
+             ((_val) & 0x4000) ? "14 " : "", \
+             ((_val) & 0x8000) ? "15 " : "")
+
+static void dsa_mv88e6161(int reg, u16 val)
+{
+       switch (reg) {
+       case 0:
+               REG(reg, "Port Status", val);
+               FIELD("Pause Enabled", "%u", !!(val & 0x8000));
+               FIELD("My Pause", "%u", !!(val & 0x4000));
+               FIELD("Half-duplex Flow Control", "%u", !!(val & 0x2000));
+               FIELD("802.3 PHY Detected", "%u", !!(val & 0x1000));
+               FIELD("Link Status", "%s", val & 0x0800 ? "Up" : "Down");
+               FIELD("Duplex", "%s", val & 0x0400 ? "Full" : "Half");
+               FIELD("Speed", "%s",
+                     (val & 0x0300) == 0x0000 ? "10 Mbps" :
+                     (val & 0x0300) == 0x0100 ? "100 Mbps" :
+                     (val & 0x0300) == 0x0200 ? "1000 Mbps" :
+                     (val & 0x0300) == 0x0300 ? "Reserved" : "?");
+               FIELD("Auto-Media Detect Disable", "%u", !!(val & 0x0040));
+               FIELD("Transmitter Paused", "%u", !!(val & 0x0020));
+               FIELD("Flow Control", "%u", !!(val & 0x0010));
+               FIELD("Config Duplex", "%s", val & 0x0008 ? "Full" : "Half");
+               FIELD("Config Mode", "0x%x", val & 0x0007);
+               break;
+       case 1:
+               REG(reg, "PCS Control", val);
+               FIELD("Flow Control's Forced value", "%u", !!(val & 0x0080));
+               FIELD("Force Flow Control", "%u", !!(val & 0x0040));
+               FIELD("Link's Forced value", "%s", val & 0x0020 ? "Up" : 
"Down");
+               FIELD("Force Link", "%u", !!(val & 0x0010));
+               FIELD("Duplex's Forced value", "%s", val & 0x0008 ? "Full" : 
"Half");
+               FIELD("Force Duplex", "%u", !!(val & 0x0004));
+               FIELD("Force Speed", "%s",
+                     (val & 0x0003) == 0x0000 ? "10 Mbps" :
+                     (val & 0x0003) == 0x0001 ? "100 Mbps" :
+                     (val & 0x0003) == 0x0002 ? "1000 Mbps" :
+                     (val & 0x0003) == 0x0003 ? "Not forced" : "?");
+               break;
+       case 2:
+               REG(reg, "Jamming Control", val);
+               break;
+       case 3:
+               REG(reg, "Switch Identifier", val);
+               break;
+       case 4:
+               REG(reg, "Port Control", val);
+               FIELD("Source Address Filtering controls", "%s",
+                     (val & 0xc000) == 0x0000 ? "Disabled" :
+                     (val & 0xc000) == 0x4000 ? "Drop On Lock" :
+                     (val & 0xc000) == 0x8000 ? "Drop On Unlock" :
+                     (val & 0xc000) == 0xc000 ? "Drop to CPU" : "?");
+               FIELD("Egress Mode", "%s",
+                     (val & 0x3000) == 0x0000 ? "Unmodified" :
+                     (val & 0x3000) == 0x1000 ? "Untagged" :
+                     (val & 0x3000) == 0x2000 ? "Tagged" :
+                     (val & 0x3000) == 0x3000 ? "Reserved" : "?");
+               FIELD("Ingress & Egress Header Mode", "%u", !!(val & 0x0800));
+               FIELD("IGMP and MLD Snooping", "%u", !!(val & 0x0400));
+               FIELD("Frame Mode", "%s",
+                     (val & 0x0300) == 0x0000 ? "Normal" :
+                     (val & 0x0300) == 0x0100 ? "DSA" :
+                     (val & 0x0300) == 0x0200 ? "Provider" :
+                     (val & 0x0300) == 0x0300 ? "Ether Type DSA" : "?");
+               FIELD("VLAN Tunnel", "%u", !!(val & 0x0080));
+               FIELD("TagIfBoth", "%u", !!(val & 0x0040));
+               FIELD("Initial Priority assignment", "%s",
+                     (val & 0x0030) == 0x0000 ? "Defaults" :
+                     (val & 0x0030) == 0x0010 ? "Tag Priority" :
+                     (val & 0x0030) == 0x0020 ? "IP Priority" :
+                     (val & 0x0030) == 0x0030 ? "Tag & IP Priority" : "?");
+               FIELD("Egress Flooding mode", "%s",
+                     (val & 0x000c) == 0x0000 ? "No unknown DA" :
+                     (val & 0x000c) == 0x0004 ? "No unknown multicast DA" :
+                     (val & 0x000c) == 0x0008 ? "No unknown unicast DA" :
+                     (val & 0x000c) == 0x000c ? "Allow unknown DA" : "?");
+               FIELD("Port State", "%s",
+                     (val & 0x0003) == 0x0000 ? "Disabled" :
+                     (val & 0x0003) == 0x0001 ? "Blocking/Listening" :
+                     (val & 0x0003) == 0x0002 ? "Learning" :
+                     (val & 0x0003) == 0x0003 ? "Forwarding" : "?");
+               break;
+       case 5:
+               REG(reg, "Port Control 1", val);
+               FIELD("Message Port", "%u", !!(val & 0x8000));
+               FIELD("Trunk Port", "%u", !!(val & 0x4000));
+               FIELD("Trunk ID", "%u", (val & 0x0f00) >> 8);
+               FIELD("FID[5:4]", "0x%.2x", (val & 0x0003) << 4);
+               break;
+       case 6:
+               REG(reg, "Port Base VLAN Map (Header)", val);
+               FIELD("FID[3:0]", "0x%.2x", (val & 0xf000) >> 12);
+               FIELD_BITMAP("VLANTable", val & 0x003f);
+               break;
+       case 7:
+               REG(reg, "Default VLAN ID & Priority", val);
+               FIELD("Default Priority", "0x%x", (val & 0xe000) >> 13);
+               FIELD("Force to use Default VID", "%u", !!(val & 0x1000));
+               FIELD("Default VLAN Identifier", "%u", val & 0x0fff);
+               break;
+       case 8:
+               REG(reg, "Port Control 2", val);
+               FIELD("Force good FCS in the frame", "%u", !!(val & 0x8000));
+               FIELD("Jumbo Mode", "%s",
+                     (val & 0x3000) == 0x0000 ? "1522" :
+                     (val & 0x3000) == 0x1000 ? "2048" :
+                     (val & 0x3000) == 0x2000 ? "10240" :
+                     (val & 0x3000) == 0x3000 ? "Reserved" : "?");
+               FIELD("802.1QMode", "%s",
+                     (val & 0x0c00) == 0x0000 ? "Disabled" :
+                     (val & 0x0c00) == 0x0400 ? "Fallback" :
+                     (val & 0x0c00) == 0x0800 ? "Check" :
+                     (val & 0x0c00) == 0x0c00 ? "Secure" : "?");
+               FIELD("Discard Tagged Frames", "%u", !!(val & 0x0200));
+               FIELD("Discard Untagged Frames", "%u", !!(val & 0x0100));
+               FIELD("Map using DA hits", "%u", !!(val & 0x0080));
+               FIELD("ARP Mirror enable", "%u", !!(val & 0x0040));
+               FIELD("Egress Monitor Source Port", "%u", !!(val & 0x0020));
+               FIELD("Ingress Monitor Source Port", "%u", !!(val & 0x0010));
+               break;
+       case 9:
+               REG(reg, "Egress Rate Control", val);
+               break;
+       case 10:
+               REG(reg, "Egress Rate Control 2", val);
+               break;
+       case 11:
+               REG(reg, "Port Association Vector", val);
+               break;
+       case 12:
+               REG(reg, "Port ATU Control", val);
+               break;
+       case 13:
+               REG(reg, "Priority Override", val);
+               break;
+       case 15:
+               REG(reg, "PortEType", val);
+               break;
+       case 16:
+               REG(reg, "InDiscardsLo Frame Counter", val);
+               break;
+       case 17:
+               REG(reg, "InDiscardsHi Frame Counter", val);
+               break;
+       case 18:
+               REG(reg, "InFiltered Frame Counter", val);
+               break;
+       case 19:
+               REG(reg, "OutFiltered Frame Counter", val);
+               break;
+       case 24:
+               REG(reg, "Tag Remap 0-3", val);
+               break;
+       case 25:
+               REG(reg, "Tag Remap 4-7", val);
+               break;
+       case 27:
+               REG(reg, "Queue Counters", val);
+               break;
+       default:
+               REG(reg, "Reserved", val);
+               break;
+       }
+}
+
+static void dsa_mv88e6185(int reg, u16 val)
+{
+       switch (reg) {
+       case 0:
+               REG(reg, "Port Status", val);
+               break;
+       case 1:
+               REG(reg, "PCS Control", val);
+               break;
+       case 3:
+               REG(reg, "Switch Identifier", val);
+               break;
+       case 4:
+               REG(reg, "Port Control", val);
+               break;
+       case 5:
+               REG(reg, "Port Control 1", val);
+               break;
+       case 6:
+               REG(reg, "Port Base VLAN Map (Header)", val);
+               break;
+       case 7:
+               REG(reg, "Default VLAN ID & Priority", val);
+               break;
+       case 8:
+               REG(reg, "Port Control 2", val);
+               break;
+       case 9:
+               REG(reg, "Rate Control", val);
+               break;
+       case 10:
+               REG(reg, "Rate Control 2", val);
+               break;
+       case 11:
+               REG(reg, "Port Association Vector", val);
+               break;
+       case 16:
+               REG(reg, "InDiscardsLo Frame Counter", val);
+               break;
+       case 17:
+               REG(reg, "InDiscardsHi Frame Counter", val);
+               break;
+       case 18:
+               REG(reg, "InFiltered Frame Counter", val);
+               break;
+       case 19:
+               REG(reg, "OutFiltered Frame Counter", val);
+               break;
+       case 24:
+               REG(reg, "Tag Remap 0-3", val);
+               break;
+       case 25:
+               REG(reg, "Tag Remap 4-7", val);
+               break;
+       default:
+               REG(reg, "Reserved", val);
+               break;
+       }
+};
+
+static void dsa_mv88e6352(int reg, u16 val)
+{
+       switch (reg) {
+       case 0:
+               REG(reg, "Port Status", val);
+               FIELD("Pause Enabled", "%u", !!(val & 0x8000));
+               FIELD("My Pause", "%u", !!(val & 0x4000));
+               FIELD("802.3 PHY Detected", "%u", !!(val & 0x1000));
+               FIELD("Link Status", "%s", val & 0x0800 ? "Up" : "Down");
+               FIELD("Duplex", "%s", val & 0x0400 ? "Full" : "Half");
+               FIELD("Speed", "%s",
+                     (val & 0x0300) == 0x0000 ? "10 Mbps" :
+                     (val & 0x0300) == 0x0100 ? "100 or 200 Mbps" :
+                     (val & 0x0300) == 0x0200 ? "1000 Mbps" :
+                     (val & 0x0300) == 0x0300 ? "Reserved" : "?");
+               FIELD("EEE Enabled", "%u", !!(val & 0x0040));
+               FIELD("Transmitter Paused", "%u", !!(val & 0x0020));
+               FIELD("Flow Control", "%u", !!(val & 0x0010));
+               FIELD("Config Mode", "0x%x", val & 0x000f);
+               break;
+       case 1:
+               REG(reg, "Physical Control", val);
+               FIELD("RGMII Receive Timing Control", "%s", val & 0x8000 ? 
"Delay" : "Default");
+               FIELD("RGMII Transmit Timing Control", "%s", val & 0x4000 ? 
"Delay" : "Default");
+               FIELD("200 BASE Mode", "%s", val & 0x1000 ? "200" : "100");
+               FIELD("Flow Control's Forced value", "%u", !!(val & 0x0080));
+               FIELD("Force Flow Control", "%u", !!(val & 0x0040));
+               FIELD("Link's Forced value", "%s", val & 0x0020 ? "Up" : 
"Down");
+               FIELD("Force Link", "%u", !!(val & 0x0010));
+               FIELD("Duplex's Forced value", "%s", val & 0x0008 ? "Full" : 
"Half");
+               FIELD("Force Duplex", "%u", !!(val & 0x0004));
+               FIELD("Force Speed", "%s",
+                     (val & 0x0003) == 0x0000 ? "10 Mbps" :
+                     (val & 0x0003) == 0x0001 ? "100 or 200 Mbps" :
+                     (val & 0x0003) == 0x0002 ? "1000 Mbps" :
+                     (val & 0x0003) == 0x0003 ? "Not forced" : "?");
+               break;
+       case 2:
+               REG(reg, "Jamming Control", val);
+               break;
+       case 3:
+               REG(reg, "Switch Identifier", val);
+               break;
+       case 4:
+               REG(reg, "Port Control", val);
+               FIELD("Source Address Filtering controls", "%s",
+                     (val & 0xc000) == 0x0000 ? "Disabled" :
+                     (val & 0xc000) == 0x4000 ? "Drop On Lock" :
+                     (val & 0xc000) == 0x8000 ? "Drop On Unlock" :
+                     (val & 0xc000) == 0xc000 ? "Drop to CPU" : "?");
+               FIELD("Egress Mode", "%s",
+                     (val & 0x3000) == 0x0000 ? "Unmodified" :
+                     (val & 0x3000) == 0x1000 ? "Untagged" :
+                     (val & 0x3000) == 0x2000 ? "Tagged" :
+                     (val & 0x3000) == 0x3000 ? "Reserved" : "?");
+               FIELD("Ingress & Egress Header Mode", "%u", !!(val & 0x0800));
+               FIELD("IGMP and MLD Snooping", "%u", !!(val & 0x0400));
+               FIELD("Frame Mode", "%s",
+                     (val & 0x0300) == 0x0000 ? "Normal" :
+                     (val & 0x0300) == 0x0100 ? "DSA" :
+                     (val & 0x0300) == 0x0200 ? "Provider" :
+                     (val & 0x0300) == 0x0300 ? "Ether Type DSA" : "?");
+               FIELD("VLAN Tunnel", "%u", !!(val & 0x0080));
+               FIELD("TagIfBoth", "%u", !!(val & 0x0040));
+               FIELD("Initial Priority assignment", "%s",
+                     (val & 0x0030) == 0x0000 ? "Defaults" :
+                     (val & 0x0030) == 0x0010 ? "Tag Priority" :
+                     (val & 0x0030) == 0x0020 ? "IP Priority" :
+                     (val & 0x0030) == 0x0030 ? "Tag & IP Priority" : "?");
+               FIELD("Egress Flooding mode", "%s",
+                     (val & 0x000c) == 0x0000 ? "No unknown DA" :
+                     (val & 0x000c) == 0x0004 ? "No unknown multicast DA" :
+                     (val & 0x000c) == 0x0008 ? "No unknown unicast DA" :
+                     (val & 0x000c) == 0x000c ? "Allow unknown DA" : "?");
+               FIELD("Port State", "%s",
+                     (val & 0x0003) == 0x0000 ? "Disabled" :
+                     (val & 0x0003) == 0x0001 ? "Blocking/Listening" :
+                     (val & 0x0003) == 0x0002 ? "Learning" :
+                     (val & 0x0003) == 0x0003 ? "Forwarding" : "?");
+               break;
+       case 5:
+               REG(reg, "Port Control 1", val);
+               FIELD("Message Port", "%u", !!(val & 0x8000));
+               FIELD("Trunk Port", "%u", !!(val & 0x4000));
+               FIELD("Trunk ID", "%u", (val & 0x0f00) >> 8);
+               FIELD("FID[11:4]", "0x%.3x", (val & 0x00ff) << 4);
+               break;
+       case 6:
+               REG(reg, "Port Base VLAN Map (Header)", val);
+               FIELD("FID[3:0]", "0x%.3x", (val & 0xf000) >> 12);
+               FIELD_BITMAP("VLANTable", val & 0x007f);
+               break;
+       case 7:
+               REG(reg, "Default VLAN ID & Priority", val);
+               FIELD("Default Priority", "0x%x", (val & 0xe000) >> 13);
+               FIELD("Force to use Default VID", "%u", !!(val & 0x1000));
+               FIELD("Default VLAN Identifier", "%u", val & 0x0fff);
+               break;
+       case 8:
+               REG(reg, "Port Control 2", val);
+               FIELD("Force good FCS in the frame", "%u", !!(val & 0x8000));
+               FIELD("Jumbo Mode", "%s",
+                     (val & 0x3000) == 0x0000 ? "1522" :
+                     (val & 0x3000) == 0x1000 ? "2048" :
+                     (val & 0x3000) == 0x2000 ? "10240" :
+                     (val & 0x3000) == 0x3000 ? "Reserved" : "?");
+               FIELD("802.1QMode", "%s",
+                     (val & 0x0c00) == 0x0000 ? "Disabled" :
+                     (val & 0x0c00) == 0x0400 ? "Fallback" :
+                     (val & 0x0c00) == 0x0800 ? "Check" :
+                     (val & 0x0c00) == 0x0c00 ? "Secure" : "?");
+               FIELD("Discard Tagged Frames", "%u", !!(val & 0x0200));
+               FIELD("Discard Untagged Frames", "%u", !!(val & 0x0100));
+               FIELD("Map using DA hits", "%u", !!(val & 0x0080));
+               FIELD("ARP Mirror enable", "%u", !!(val & 0x0040));
+               FIELD("Egress Monitor Source Port", "%u", !!(val & 0x0020));
+               FIELD("Ingress Monitor Source Port", "%u", !!(val & 0x0010));
+               FIELD("Use Default Queue Priority", "%u", !!(val & 0x0008));
+               FIELD("Default Queue Priority", "0x%x", (val & 0x0006) >> 1);
+               break;
+       case 9:
+               REG(reg, "Egress Rate Control", val);
+               break;
+       case 10:
+               REG(reg, "Egress Rate Control 2", val);
+               break;
+       case 11:
+               REG(reg, "Port Association Vector", val);
+               break;
+       case 12:
+               REG(reg, "Port ATU Control", val);
+               break;
+       case 13:
+               REG(reg, "Override", val);
+               break;
+       case 14:
+               REG(reg, "Policy Control", val);
+               break;
+       case 15:
+               REG(reg, "Port Ether Type", val);
+               break;
+       case 16:
+               REG(reg, "InDiscardsLo Frame Counter", val);
+               break;
+       case 17:
+               REG(reg, "InDiscardsHi Frame Counter", val);
+               break;
+       case 18:
+               REG(reg, "InFiltered/TcamCtr Frame Counter", val);
+               break;
+       case 19:
+               REG(reg, "Rx Frame Counter", val);
+               break;
+       case 22:
+               REG(reg, "LED Control", val);
+               break;
+       case 24:
+               REG(reg, "Tag Remap 0-3", val);
+               break;
+       case 25:
+               REG(reg, "Tag Remap 4-7", val);
+               break;
+       case 27:
+               REG(reg, "Queue Counters", val);
+               break;
+       default:
+               REG(reg, "Reserved", val);
+               break;
+       }
+};
+
+static void dsa_mv88e6390(int reg, u16 val)
+{
+       switch (reg) {
+       case 0:
+               REG(reg, "Port Status", val);
+               FIELD("Transmit Pause Enable bit", "%u", !!(val & 0x8000));
+               FIELD("Receive Pause Enable bit", "%u", !!(val & 0x4000));
+               FIELD("802.3 PHY Detected", "%u", !!(val & 0x1000));
+               FIELD("Link Status", "%s", val & 0x0800 ? "Up" : "Down");
+               FIELD("Duplex", "%s", val & 0x0400 ? "Full" : "Half");
+               FIELD("Speed", "%s",
+                     (val & 0x0300) == 0x0000 ? "10 Mbps" :
+                     (val & 0x0300) == 0x0100 ? "100 or 200 Mbps" :
+                     (val & 0x0300) == 0x0200 ? "1000 Mbps" :
+                     (val & 0x0300) == 0x0300 ? "10 Gb or 2500 Mbps" : "?");
+               FIELD("Duplex Fixed", "%u", !!(val & 0x0080));
+               FIELD("EEE Enabled", "%u", !!(val & 0x0040));
+               FIELD("Transmitter Paused", "%u", !!(val & 0x0020));
+               FIELD("Flow Control", "%u", !!(val & 0x0010));
+               FIELD("Config Mode", "0x%x", val & 0x000f);
+               break;
+       case 1:
+               REG(reg, "Physical Control", val);
+               FIELD("RGMII Receive Timing Control", "%s", val & 0x8000 ? 
"Delay" : "Default");
+               FIELD("RGMII Transmit Timing Control", "%s", val & 0x4000 ? 
"Delay" : "Default");
+               FIELD("Force Speed", "%u", !!(val & 0x2000));
+               FIELD("Alternate Speed Mode", "%s", val & 0x1000 ? "Alternate" 
: "Normal");
+               FIELD("MII PHY Mode", "%s", val & 0x0800 ? "PHY" : "MAC");
+               FIELD("EEE force value", "%u", !!(val & 0x0200));
+               FIELD("Force EEE", "%u", !!(val & 0x0100));
+               FIELD("Link's Forced value", "%s", val & 0x0020 ? "Up" : 
"Down");
+               FIELD("Force Link", "%u", !!(val & 0x0010));
+               FIELD("Duplex's Forced value", "%s", val & 0x0008 ? "Full" : 
"Half");
+               FIELD("Force Duplex", "%u", !!(val & 0x0004));
+               FIELD("Force Speed", "%s",
+                     (val & 0x0003) == 0x0000 ? "10 Mbps" :
+                     (val & 0x0003) == 0x0001 ? "100 or 200 Mbps" :
+                     (val & 0x0003) == 0x0002 ? "1000 Mbps" :
+                     (val & 0x0003) == 0x0003 ? "10 Gb or 2500 Mbps" : "?");
+               break;
+       case 2:
+               REG(reg, "Flow Control", val);
+               break;
+       case 3:
+               REG(reg, "Switch Identifier", val);
+               break;
+       case 4:
+               REG(reg, "Port Control", val);
+               FIELD("Source Address Filtering controls", "%s",
+                     (val & 0xc000) == 0x0000 ? "Disabled" :
+                     (val & 0xc000) == 0x4000 ? "Drop On Lock" :
+                     (val & 0xc000) == 0x8000 ? "Drop On Unlock" :
+                     (val & 0xc000) == 0xc000 ? "Drop to CPU" : "?");
+               FIELD("Egress Mode", "%s",
+                     (val & 0x3000) == 0x0000 ? "Unmodified" :
+                     (val & 0x3000) == 0x1000 ? "Untagged" :
+                     (val & 0x3000) == 0x2000 ? "Tagged" :
+                     (val & 0x3000) == 0x3000 ? "Reserved" : "?");
+               FIELD("Ingress & Egress Header Mode", "%u", !!(val & 0x0800));
+               FIELD("IGMP and MLD Snooping", "%u", !!(val & 0x0400));
+               FIELD("Frame Mode", "%s",
+                     (val & 0x0300) == 0x0000 ? "Normal" :
+                     (val & 0x0300) == 0x0100 ? "DSA" :
+                     (val & 0x0300) == 0x0200 ? "Provider" :
+                     (val & 0x0300) == 0x0300 ? "Ether Type DSA" : "?");
+               FIELD("VLAN Tunnel", "%u", !!(val & 0x0080));
+               FIELD("TagIfBoth", "%u", !!(val & 0x0040));
+               FIELD("Initial Priority assignment", "%s",
+                     (val & 0x0030) == 0x0000 ? "Defaults" :
+                     (val & 0x0030) == 0x0010 ? "Tag Priority" :
+                     (val & 0x0030) == 0x0020 ? "IP Priority" :
+                     (val & 0x0030) == 0x0030 ? "Tag & IP Priority" : "?");
+               FIELD("Egress Flooding mode", "%s",
+                     (val & 0x000c) == 0x0000 ? "No unknown DA" :
+                     (val & 0x000c) == 0x0004 ? "No unknown multicast DA" :
+                     (val & 0x000c) == 0x0008 ? "No unknown unicast DA" :
+                     (val & 0x000c) == 0x000c ? "Allow unknown DA" : "?");
+               FIELD("Port State", "%s",
+                     (val & 0x0003) == 0x0000 ? "Disabled" :
+                     (val & 0x0003) == 0x0001 ? "Blocking/Listening" :
+                     (val & 0x0003) == 0x0002 ? "Learning" :
+                     (val & 0x0003) == 0x0003 ? "Forwarding" : "?");
+               break;
+       case 5:
+               REG(reg, "Port Control 1", val);
+               FIELD("Message Port", "%u", !!(val & 0x8000));
+               FIELD("LAG Port", "%u", !!(val & 0x4000));
+               FIELD("VTU Page", "%u", !!(val & 0x2000));
+               FIELD("LAG ID", "%u", (val & 0x0f00) >> 8);
+               FIELD("FID[11:4]", "0x%.3x", (val & 0x00ff) << 4);
+               break;
+       case 6:
+               REG(reg, "Port Base VLAN Map (Header)", val);
+               FIELD("FID[3:0]", "0x%.3x", (val & 0xf000) >> 12);
+               FIELD("Force Mapping", "%u", !!(val & 0x0800));
+               FIELD_BITMAP("VLANTable", val & 0x007ff);
+               break;
+       case 7:
+               REG(reg, "Default VLAN ID & Priority", val);
+               FIELD("Default Priority", "0x%x", (val & 0xe000) >> 13);
+               FIELD("Force to use Default VID", "%u", !!(val & 0x1000));
+               FIELD("Default VLAN Identifier", "%u", val & 0x0fff);
+               break;
+       case 8:
+               REG(reg, "Port Control 2", val);
+               FIELD("Force good FCS in the frame", "%u", !!(val & 0x8000));
+               FIELD("Allow bad FCS", "%u", !!(val & 0x4000));
+               FIELD("Jumbo Mode", "%s",
+                     (val & 0x3000) == 0x0000 ? "1522" :
+                     (val & 0x3000) == 0x1000 ? "2048" :
+                     (val & 0x3000) == 0x2000 ? "10240" :
+                     (val & 0x3000) == 0x3000 ? "Reserved" : "?");
+               FIELD("802.1QMode", "%s",
+                     (val & 0x0c00) == 0x0000 ? "Disabled" :
+                     (val & 0x0c00) == 0x0400 ? "Fallback" :
+                     (val & 0x0c00) == 0x0800 ? "Check" :
+                     (val & 0x0c00) == 0x0c00 ? "Secure" : "?");
+               FIELD("Discard Tagged Frames", "%u", !!(val & 0x0200));
+               FIELD("Discard Untagged Frames", "%u", !!(val & 0x0100));
+               FIELD("Map using DA hits", "%u", !!(val & 0x0080));
+               FIELD("ARP Mirror enable", "%u", !!(val & 0x0040));
+               FIELD("Egress Monitor Source Port", "%u", !!(val & 0x0020));
+               FIELD("Ingress Monitor Source Port", "%u", !!(val & 0x0010));
+               FIELD("Allow VID of Zero", "%u", !!(val & 0x0008));
+               FIELD("Default Queue Priority", "0x%x", val & 0x0007);
+               break;
+       case 9:
+               REG(reg, "Egress Rate Control", val);
+               break;
+       case 10:
+               REG(reg, "Egress Rate Control 2", val);
+               break;
+       case 11:
+               REG(reg, "Port Association Vector", val);
+               break;
+       case 12:
+               REG(reg, "Port ATU Control", val);
+               break;
+       case 13:
+               REG(reg, "Override", val);
+               break;
+       case 14:
+               REG(reg, "Policy Control", val);
+               break;
+       case 15:
+               REG(reg, "Port Ether Type", val);
+               break;
+       case 22:
+               REG(reg, "LED Control", val);
+               break;
+       case 23:
+               REG(reg, "IP Priority Mapping Table", val);
+               break;
+       case 24:
+               REG(reg, "IEEE Priority Mapping Table", val);
+               break;
+       case 25:
+               REG(reg, "Port Control 3", val);
+               break;
+       case 27:
+               REG(reg, "Queue Counters", val);
+               break;
+       case 28:
+               REG(reg, "Queue Control", val);
+               break;
+       case 30:
+               REG(reg, "Cut Through Control", val);
+               break;
+       case 31:
+               REG(reg, "Debug Counters", val);
+               break;
+       default:
+               REG(reg, "Reserved", val);
+               break;
+       }
+};
+
+struct dsa_mv88e6xxx_switch {
+       void (*dump)(int reg, u16 val);
+       const char *name;
+       u16 id;
+};
+
+static const struct dsa_mv88e6xxx_switch dsa_mv88e6xxx_switches[] = {
+       { .id = 0x04a0, .name = "88E6085 ", .dump = NULL },
+       { .id = 0x0950, .name = "88E6095 ", .dump = NULL },
+       { .id = 0x0990, .name = "88E6097 ", .dump = NULL },
+       { .id = 0x0a00, .name = "88E6190X", .dump = dsa_mv88e6390 },
+       { .id = 0x0a10, .name = "88E6390X", .dump = dsa_mv88e6390 },
+       { .id = 0x1060, .name = "88E6131 ", .dump = NULL },
+       { .id = 0x1150, .name = "88E6320 ", .dump = NULL },
+       { .id = 0x1210, .name = "88E6123 ", .dump = dsa_mv88e6161 },
+       { .id = 0x1610, .name = "88E6161 ", .dump = dsa_mv88e6161 },
+       { .id = 0x1650, .name = "88E6165 ", .dump = NULL },
+       { .id = 0x1710, .name = "88E6171 ", .dump = NULL },
+       { .id = 0x1720, .name = "88E6172 ", .dump = dsa_mv88e6352 },
+       { .id = 0x1750, .name = "88E6175 ", .dump = NULL },
+       { .id = 0x1760, .name = "88E6176 ", .dump = dsa_mv88e6352 },
+       { .id = 0x1900, .name = "88E6190 ", .dump = dsa_mv88e6390 },
+       { .id = 0x1910, .name = "88E6191 ", .dump = NULL },
+       { .id = 0x1a70, .name = "88E6185 ", .dump = dsa_mv88e6185 },
+       { .id = 0x2400, .name = "88E6240 ", .dump = dsa_mv88e6352 },
+       { .id = 0x2900, .name = "88E6290 ", .dump = dsa_mv88e6390 },
+       { .id = 0x3100, .name = "88E6321 ", .dump = NULL },
+       { .id = 0x3400, .name = "88E6141 ", .dump = NULL },
+       { .id = 0x3410, .name = "88E6341 ", .dump = NULL },
+       { .id = 0x3520, .name = "88E6352 ", .dump = dsa_mv88e6352 },
+       { .id = 0x3710, .name = "88E6350 ", .dump = NULL },
+       { .id = 0x3750, .name = "88E6351 ", .dump = NULL },
+       { .id = 0x3900, .name = "88E6390 ", .dump = dsa_mv88e6390 },
+};
+
+static int dsa_mv88e6xxx_dump_regs(struct ethtool_regs *regs)
+{
+       const struct dsa_mv88e6xxx_switch *sw = NULL;
+       const u16 *data = (u16 *)regs->data;
+       u16 id;
+       int i;
+
+       /* Marvell chips have 32 per-port 16-bit registers */
+       if (regs->len < 32 * 2)
+               return 1;
+
+       id = regs->version & 0xfff0;
+
+       for (i = 0; i < ARRAY_SIZE(dsa_mv88e6xxx_switches); i++) {
+               if (id == dsa_mv88e6xxx_switches[i].id) {
+                       sw = &dsa_mv88e6xxx_switches[i];
+                       break;
+               }
+       }
+
+       if (!sw)
+               return 1;
+
+       printf("%s Switch Port Registers\n", sw->name);
+       printf("------------------------------\n");
+
+       for (i = 0; i < 32; i++)
+               if (sw->dump)
+                       sw->dump(i, data[i]);
+               else
+                       REG(i, "", data[i]);
+
+       return 0;
+}
+
+#undef FIELD_BITMAP
+#undef FIELD
+#undef REG
+
+int dsa_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs)
+{
+       /* DSA per-driver register dump */
+       if (!dsa_mv88e6xxx_dump_regs(regs))
+               return 0;
+
+       /* Fallback to hexdump */
+       return 1;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-4.19/ethtool.8 new/ethtool-5.0/ethtool.8
--- old/ethtool-4.19/ethtool.8  2018-11-02 15:59:17.000000000 +0100
+++ new/ethtool-5.0/ethtool.8   2019-03-13 19:11:08.000000000 +0100
@@ -113,7 +113,7 @@
 .  hy \\n(HY
 ..
 .
-.TH ETHTOOL 8 "November 2018" "Ethtool version 4.19"
+.TH ETHTOOL 8 "March 2019" "Ethtool version 5.0"
 .SH NAME
 ethtool \- query or control network driver and hardware settings
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-4.19/ethtool.8.in 
new/ethtool-5.0/ethtool.8.in
--- old/ethtool-4.19/ethtool.8.in       2018-11-02 15:55:21.000000000 +0100
+++ new/ethtool-5.0/ethtool.8.in        2019-03-13 18:59:41.000000000 +0100
@@ -113,7 +113,7 @@
 .  hy \\n(HY
 ..
 .
-.TH ETHTOOL 8 "November 2018" "Ethtool version @VERSION@"
+.TH ETHTOOL 8 "March 2019" "Ethtool version @VERSION@"
 .SH NAME
 ethtool \- query or control network driver and hardware settings
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-4.19/ethtool.c new/ethtool-5.0/ethtool.c
--- old/ethtool-4.19/ethtool.c  2018-10-04 21:02:21.000000000 +0200
+++ new/ethtool-5.0/ethtool.c   2019-03-13 18:41:35.000000000 +0100
@@ -1166,6 +1166,7 @@
        { "vmxnet3", vmxnet3_dump_regs },
        { "fjes", fjes_dump_regs },
        { "lan78xx", lan78xx_dump_regs },
+       { "dsa", dsa_dump_regs },
 #endif
 };
 
@@ -1465,8 +1466,10 @@
                 * kernel version
                 */
                if (defs->off_flag_matched[i] == 0 &&
-                   off_flag_def[i].get_cmd == 0 &&
-                   kernel_ver < off_flag_def[i].min_kernel_ver)
+                   ((off_flag_def[i].get_cmd == 0 &&
+                     kernel_ver < off_flag_def[i].min_kernel_ver) ||
+                    (off_flag_def[i].get_cmd == ETHTOOL_GUFO &&
+                     kernel_ver >= KERNEL_VERSION(4, 14, 0))))
                        continue;
 
                value = off_flag_def[i].value;
@@ -2076,7 +2079,7 @@
 
 static int do_gcoalesce(struct cmd_context *ctx)
 {
-       struct ethtool_coalesce ecoal;
+       struct ethtool_coalesce ecoal = {};
        int err;
 
        if (ctx->argc != 0)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-4.19/ethtool.spec 
new/ethtool-5.0/ethtool.spec
--- old/ethtool-4.19/ethtool.spec       2018-11-02 15:59:17.000000000 +0100
+++ new/ethtool-5.0/ethtool.spec        2019-03-13 19:11:08.000000000 +0100
@@ -1,5 +1,5 @@
 Name           : ethtool
-Version                : 4.19
+Version                : 5.0
 Release                : 1
 Group          : Utilities
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ethtool-4.19/internal.h new/ethtool-5.0/internal.h
--- old/ethtool-4.19/internal.h 2018-04-16 19:53:04.000000000 +0200
+++ new/ethtool-5.0/internal.h  2019-01-18 19:31:08.000000000 +0100
@@ -354,4 +354,7 @@
 /* MICROCHIP LAN78XX USB ETHERNET Controller */
 int lan78xx_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
 
+/* Distributed Switch Architecture */
+int dsa_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
+
 #endif /* ETHTOOL_INTERNAL_H__ */



Reply via email to