Module Name: src Committed By: msaitoh Date: Fri Mar 13 05:10:39 UTC 2020
Modified Files: src/sys/dev/pci: if_nfe.c Log Message: Improve error check: - We check PHY register read error correctly (timeout and NFE_PHY_ERROR), so don't check NFE_PHY_DATA register's value with 0xffffffff or 0. At least, some registers may have 0. - Check NFE_PHY_ERROR bit in nfe_miibus_writereg(). - Improve debug printf To generate a diff of this commit: cvs rdiff -u -r1.77 -r1.78 src/sys/dev/pci/if_nfe.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/pci/if_nfe.c diff -u src/sys/dev/pci/if_nfe.c:1.77 src/sys/dev/pci/if_nfe.c:1.78 --- src/sys/dev/pci/if_nfe.c:1.77 Sun Mar 8 14:10:24 2020 +++ src/sys/dev/pci/if_nfe.c Fri Mar 13 05:10:39 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: if_nfe.c,v 1.77 2020/03/08 14:10:24 msaitoh Exp $ */ +/* $NetBSD: if_nfe.c,v 1.78 2020/03/13 05:10:39 msaitoh Exp $ */ /* $OpenBSD: if_nfe.c,v 1.77 2008/02/05 16:52:50 brad Exp $ */ /*- @@ -21,7 +21,7 @@ /* Driver for NVIDIA nForce MCP Fast Ethernet and Gigabit Ethernet */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_nfe.c,v 1.77 2020/03/08 14:10:24 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_nfe.c,v 1.78 2020/03/13 05:10:39 msaitoh Exp $"); #include "opt_inet.h" #include "vlan.h" @@ -555,20 +555,19 @@ nfe_miibus_readreg(device_t dev, int phy break; } if (ntries == 1000) { - DPRINTFN(2, ("%s: timeout waiting for PHY\n", - device_xname(sc->sc_dev))); + DPRINTFN(2, ("%s: timeout waiting for PHY read (%d, %d)\n", + device_xname(sc->sc_dev), phy, reg)); return ETIMEDOUT; } if (NFE_READ(sc, NFE_PHY_STATUS) & NFE_PHY_ERROR) { - DPRINTFN(2, ("%s: could not read PHY\n", - device_xname(sc->sc_dev))); + DPRINTFN(2, ("%s: could not read PHY (%d, %d)\n", + device_xname(sc->sc_dev), phy, reg)); return -1; } data = NFE_READ(sc, NFE_PHY_DATA); - if (data != 0xffffffff && data != 0) - sc->mii_phyaddr = phy; + sc->mii_phyaddr = phy; DPRINTFN(2, ("%s: mii read phy %d reg 0x%x data 0x%x\n", device_xname(sc->sc_dev), phy, reg, data)); @@ -603,10 +602,16 @@ nfe_miibus_writereg(device_t dev, int ph if (ntries == 1000) { #ifdef NFE_DEBUG if (nfedebug >= 2) - printf("could not write to PHY\n"); + printf("timeout waiting for PHY write (%d, %d)\n", + phy, reg); #endif return ETIMEDOUT; } + if (NFE_READ(sc, NFE_PHY_STATUS) & NFE_PHY_ERROR) { + DPRINTFN(2, ("%s: could not write PHY (%d, %d)\n", + device_xname(sc->sc_dev), phy, reg)); + return -1; + } return 0; }