Module Name: src Committed By: msaitoh Date: Tue Jan 8 08:10:10 UTC 2019
Modified Files: src/sys/dev/pci: if_bnx.c Log Message: Fix a bug that bnx_miibus_read_reg() returns wrong value when BNX_PHY_INT_MODE_AUTO_POLLING_FLAG is set. This bug doesn't cause a real problem because BNX_PHY_INT_MODE_AUTO_POLLING_FLAG is not set. To generate a diff of this commit: cvs rdiff -u -r1.66 -r1.67 src/sys/dev/pci/if_bnx.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_bnx.c diff -u src/sys/dev/pci/if_bnx.c:1.66 src/sys/dev/pci/if_bnx.c:1.67 --- src/sys/dev/pci/if_bnx.c:1.66 Tue Jan 8 06:55:50 2019 +++ src/sys/dev/pci/if_bnx.c Tue Jan 8 08:10:10 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: if_bnx.c,v 1.66 2019/01/08 06:55:50 msaitoh Exp $ */ +/* $NetBSD: if_bnx.c,v 1.67 2019/01/08 08:10:10 msaitoh Exp $ */ /* $OpenBSD: if_bnx.c,v 1.85 2009/11/09 14:32:41 dlg Exp $ */ /*- @@ -35,7 +35,7 @@ #if 0 __FBSDID("$FreeBSD: src/sys/dev/bce/if_bce.c,v 1.3 2006/04/13 14:12:26 ru Exp $"); #endif -__KERNEL_RCSID(0, "$NetBSD: if_bnx.c,v 1.66 2019/01/08 06:55:50 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_bnx.c,v 1.67 2019/01/08 08:10:10 msaitoh Exp $"); /* * The following controllers are supported by this driver: @@ -1019,7 +1019,7 @@ int bnx_miibus_read_reg(device_t dev, int phy, int reg) { struct bnx_softc *sc = device_private(dev); - uint32_t val; + uint32_t val, data; int i; /* Make sure we are accessing the correct PHY address. */ @@ -1040,35 +1040,35 @@ bnx_miibus_read_reg(device_t dev, int ph } if (sc->bnx_phy_flags & BNX_PHY_INT_MODE_AUTO_POLLING_FLAG) { - val = REG_RD(sc, BNX_EMAC_MDIO_MODE); - val &= ~BNX_EMAC_MDIO_MODE_AUTO_POLL; + data = REG_RD(sc, BNX_EMAC_MDIO_MODE); + data &= ~BNX_EMAC_MDIO_MODE_AUTO_POLL; - REG_WR(sc, BNX_EMAC_MDIO_MODE, val); + REG_WR(sc, BNX_EMAC_MDIO_MODE, data); REG_RD(sc, BNX_EMAC_MDIO_MODE); DELAY(40); } - val = BNX_MIPHY(phy) | BNX_MIREG(reg) | + data = BNX_MIPHY(phy) | BNX_MIREG(reg) | BNX_EMAC_MDIO_COMM_COMMAND_READ | BNX_EMAC_MDIO_COMM_DISEXT | BNX_EMAC_MDIO_COMM_START_BUSY; - REG_WR(sc, BNX_EMAC_MDIO_COMM, val); + REG_WR(sc, BNX_EMAC_MDIO_COMM, data); for (i = 0; i < BNX_PHY_TIMEOUT; i++) { DELAY(10); - val = REG_RD(sc, BNX_EMAC_MDIO_COMM); - if (!(val & BNX_EMAC_MDIO_COMM_START_BUSY)) { + data = REG_RD(sc, BNX_EMAC_MDIO_COMM); + if (!(data & BNX_EMAC_MDIO_COMM_START_BUSY)) { DELAY(5); - val = REG_RD(sc, BNX_EMAC_MDIO_COMM); - val &= BNX_EMAC_MDIO_COMM_DATA; + data = REG_RD(sc, BNX_EMAC_MDIO_COMM); + data &= BNX_EMAC_MDIO_COMM_DATA; break; } } - if (val & BNX_EMAC_MDIO_COMM_START_BUSY) { + if (data & BNX_EMAC_MDIO_COMM_START_BUSY) { BNX_PRINTF(sc, "%s(%d): Error: PHY read timeout! phy = %d, " "reg = 0x%04X\n", __FILE__, __LINE__, phy, reg); val = 0x0; @@ -1080,10 +1080,10 @@ bnx_miibus_read_reg(device_t dev, int ph (uint16_t) reg & 0xffff, (uint16_t) val & 0xffff); if (sc->bnx_phy_flags & BNX_PHY_INT_MODE_AUTO_POLLING_FLAG) { - val = REG_RD(sc, BNX_EMAC_MDIO_MODE); - val |= BNX_EMAC_MDIO_MODE_AUTO_POLL; + data = REG_RD(sc, BNX_EMAC_MDIO_MODE); + data |= BNX_EMAC_MDIO_MODE_AUTO_POLL; - REG_WR(sc, BNX_EMAC_MDIO_MODE, val); + REG_WR(sc, BNX_EMAC_MDIO_MODE, data); REG_RD(sc, BNX_EMAC_MDIO_MODE); DELAY(40);