Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/netbsd-8]: src/sys/dev/usb Pull up following revision(s) (r...



details:   https://anonhg.NetBSD.org/src/rev/de7b5447414c
branches:  netbsd-8
changeset: 318860:de7b5447414c
user:      martin <martin%NetBSD.org@localhost>
date:      Mon May 07 13:26:03 2018 +0000
description:
Pull up following revision(s) (requested by nonaka in ticket #782):

        sys/dev/usb/if_axe.c: revision 1.85-1.89

propagate pullup-782 for NetBSD-8 to HEAD (gcc uninitialized)

It was not gcc's fault for correctly detecting an uninitialized variable.

Fix the uninitialized variable issues by error checking things.
downgrade error to debug.

merge duplicated code, back to logging error.

use the proper station nodeid read command.

diffstat:

 sys/dev/usb/if_axe.c |  101 +++++++++++++++++++++++++++++++-------------------
 1 files changed, 63 insertions(+), 38 deletions(-)

diffs (213 lines):

diff -r 5087bb7e7b55 -r de7b5447414c sys/dev/usb/if_axe.c
--- a/sys/dev/usb/if_axe.c      Mon May 07 05:09:40 2018 +0000
+++ b/sys/dev/usb/if_axe.c      Mon May 07 13:26:03 2018 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: if_axe.c,v 1.82.6.2 2018/01/31 18:01:55 martin Exp $   */
+/*     $NetBSD: if_axe.c,v 1.82.6.3 2018/05/07 13:26:03 martin Exp $   */
 /*     $OpenBSD: if_axe.c,v 1.137 2016/04/13 11:03:37 mpi Exp $ */
 
 /*
@@ -87,7 +87,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_axe.c,v 1.82.6.2 2018/01/31 18:01:55 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_axe.c,v 1.82.6.3 2018/05/07 13:26:03 martin Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -303,7 +303,7 @@
        KASSERT(mutex_owned(&sc->axe_mii_lock));
 
        if (sc->axe_dying)
-               return 0;
+               return -1;
 
        DPRINTFN(20, "cmd %#jx index %#jx val %#jx", cmd, index, val, 0);
 
@@ -337,7 +337,7 @@
 
        axe_cmd(sc, AXE_CMD_MII_OPMODE_SW, 0, 0, NULL);
 
-       err = axe_cmd(sc, AXE_CMD_MII_READ_REG, reg, phy, (void *)&val);
+       err = axe_cmd(sc, AXE_CMD_MII_READ_REG, reg, phy, &val);
        axe_cmd(sc, AXE_CMD_MII_OPMODE_HW, 0, 0, NULL);
        if (err) {
                aprint_error_dev(sc->axe_dev, "read PHY failed\n");
@@ -389,7 +389,7 @@
        val = htole16(aval);
 
        axe_cmd(sc, AXE_CMD_MII_OPMODE_SW, 0, 0, NULL);
-       err = axe_cmd(sc, AXE_CMD_MII_WRITE_REG, reg, phy, (void *)&val);
+       err = axe_cmd(sc, AXE_CMD_MII_WRITE_REG, reg, phy, &val);
        axe_cmd(sc, AXE_CMD_MII_OPMODE_HW, 0, 0, NULL);
 
        if (err) {
@@ -477,7 +477,11 @@
                return;
 
        axe_lock_mii(sc);
-       axe_cmd(sc, AXE_CMD_RXCTL_READ, 0, 0, (void *)&rxmode);
+       if (axe_cmd(sc, AXE_CMD_RXCTL_READ, 0, 0, &rxmode)) {
+               axe_unlock_mii(sc);
+               aprint_error_dev(sc->axe_dev, "can't read rxmode");
+               return;
+       }
        rxmode = le16toh(rxmode);
 
        rxmode &=
@@ -507,7 +511,7 @@
        ifp->if_flags &= ~IFF_ALLMULTI;
        rxmode |= AXE_RXCMD_MULTICAST;
 
-       axe_cmd(sc, AXE_CMD_WRITE_MCAST, 0, 0, (void *)&hashtbl);
+       axe_cmd(sc, AXE_CMD_WRITE_MCAST, 0, 0, hashtbl);
        axe_cmd(sc, AXE_CMD_RXCTL_WRITE, 0, rxmode, NULL);
        axe_unlock_mii(sc);
        return;
@@ -519,6 +523,30 @@
        axe_unlock_mii(sc);
 }
 
+static void
+axe_ax_init(struct axe_softc *sc)
+{
+       int cmd = AXE_178_CMD_READ_NODEID;
+
+       if (sc->axe_flags & AX178) {
+               axe_ax88178_init(sc);
+       } else if (sc->axe_flags & AX772) {
+               axe_ax88772_init(sc);
+       } else if (sc->axe_flags & AX772A) {
+               axe_ax88772a_init(sc);
+       } else if (sc->axe_flags & AX772B) {
+               axe_ax88772b_init(sc);
+               return;
+       } else {
+               cmd = AXE_172_CMD_READ_NODEID;
+       }
+
+       if (axe_cmd(sc, cmd, 0, 0, sc->axe_enaddr)) {
+               aprint_error_dev(sc->axe_dev,
+                   "failed to read ethernet address\n");
+       }
+}
+
 
 static void
 axe_reset(struct axe_softc *sc)
@@ -542,15 +570,8 @@
 #else
        axe_lock_mii(sc);
 
-       if (sc->axe_flags & AX178) {
-               axe_ax88178_init(sc);
-       } else if (sc->axe_flags & AX772) {
-               axe_ax88772_init(sc);
-       } else if (sc->axe_flags & AX772A) {
-               axe_ax88772a_init(sc);
-       } else if (sc->axe_flags & AX772B) {
-               axe_ax88772b_init(sc);
-       }
+       axe_ax_init(sc);
+
        axe_unlock_mii(sc);
 #endif
 }
@@ -594,7 +615,8 @@
 
        axe_cmd(sc, AXE_CMD_SROM_WR_ENABLE, 0, 0, NULL);
        /* XXX magic */
-       axe_cmd(sc, AXE_CMD_SROM_READ, 0, 0x0017, &eeprom);
+       if (axe_cmd(sc, AXE_CMD_SROM_READ, 0, 0x0017, &eeprom) != 0)
+               eeprom = 0xffff;
        axe_cmd(sc, AXE_CMD_SROM_WR_DISABLE, 0, 0, NULL);
 
        eeprom = le16toh(eeprom);
@@ -752,8 +774,7 @@
        if (sc->axe_phyno == AXE_772_PHY_NO_EPHY) {
                /* Manually select internal(embedded) PHY - MAC mode. */
                axe_cmd(sc, AXE_CMD_SW_PHY_SELECT, 0,
-                   AXE_SW_PHY_SELECT_EMBEDDED,
-                   NULL);
+                   AXE_SW_PHY_SELECT_EMBEDDED, NULL);
                usbd_delay_ms(sc->axe_udev, hztoms(hz / 32));
        } else {
                /*
@@ -815,7 +836,12 @@
         * Save PHY power saving configuration(high byte) and
         * clear EEPROM checksum value(low byte).
         */
-       axe_cmd(sc, AXE_CMD_SROM_READ, 0, AXE_EEPROM_772B_PHY_PWRCFG, &eeprom);
+       if (axe_cmd(sc, AXE_CMD_SROM_READ, 0, AXE_EEPROM_772B_PHY_PWRCFG,
+           &eeprom)) {
+               aprint_error_dev(sc->axe_dev, "failed to read eeprom\n");
+               return;
+       }
+
        sc->sc_pwrcfg = le16toh(eeprom) & 0xFF00;
 
        /*
@@ -825,8 +851,12 @@
         */
        uint8_t *eaddr = sc->axe_enaddr;
        for (i = 0; i < ETHER_ADDR_LEN / 2; i++) {
-               axe_cmd(sc, AXE_CMD_SROM_READ, 0, AXE_EEPROM_772B_NODE_ID + i,
-                   &eeprom);
+               if (axe_cmd(sc, AXE_CMD_SROM_READ, 0,
+                   AXE_EEPROM_772B_NODE_ID + i, &eeprom)) {
+                       aprint_error_dev(sc->axe_dev,
+                           "failed to read eeprom\n");
+                   eeprom = 0;
+               }
                eeprom = le16toh(eeprom);
                *eaddr++ = (uint8_t)(eeprom & 0xFF);
                *eaddr++ = (uint8_t)((eeprom >> 8) & 0xFF);
@@ -940,7 +970,10 @@
 
        /* We need the PHYID for init dance in some cases */
        axe_lock_mii(sc);
-       axe_cmd(sc, AXE_CMD_READ_PHYID, 0, 0, (void *)&sc->axe_phyaddrs);
+       if (axe_cmd(sc, AXE_CMD_READ_PHYID, 0, 0, &sc->axe_phyaddrs)) {
+               aprint_error_dev(self, "failed to read phyaddrs\n");
+               return;
+       }
 
        DPRINTF(" phyaddrs[0]: %jx phyaddrs[1]: %jx",
            sc->axe_phyaddrs[0], sc->axe_phyaddrs[1], 0, 0);
@@ -955,19 +988,7 @@
 
        /* Initialize controller and get station address. */
 
-       if (sc->axe_flags & AX178) {
-               axe_ax88178_init(sc);
-               axe_cmd(sc, AXE_178_CMD_READ_NODEID, 0, 0, sc->axe_enaddr);
-       } else if (sc->axe_flags & AX772) {
-               axe_ax88772_init(sc);
-               axe_cmd(sc, AXE_178_CMD_READ_NODEID, 0, 0, sc->axe_enaddr);
-       } else if (sc->axe_flags & AX772A) {
-               axe_ax88772a_init(sc);
-               axe_cmd(sc, AXE_178_CMD_READ_NODEID, 0, 0, sc->axe_enaddr);
-       } else if (sc->axe_flags & AX772B) {
-               axe_ax88772b_init(sc);
-       } else
-               axe_cmd(sc, AXE_172_CMD_READ_NODEID, 0, 0, sc->axe_enaddr);
+       axe_ax_init(sc);
 
        /*
         * Fetch IPG values.
@@ -977,8 +998,12 @@
                sc->axe_ipgs[0] = AXE_IPG0_DEFAULT;
                sc->axe_ipgs[1] = AXE_IPG1_DEFAULT;
                sc->axe_ipgs[2] = AXE_IPG2_DEFAULT;
-       } else
-               axe_cmd(sc, AXE_CMD_READ_IPG012, 0, 0, sc->axe_ipgs);
+       } else {
+               if (axe_cmd(sc, AXE_CMD_READ_IPG012, 0, 0, sc->axe_ipgs)) {
+                       aprint_error_dev(self, "failed to read ipg\n");
+                       return;
+               }
+       }
 
        axe_unlock_mii(sc);
 



Home | Main Index | Thread Index | Old Index