Module Name: src Committed By: msaitoh Date: Thu Jan 24 04:50:04 UTC 2019
Modified Files: src/sys/dev/pci: if_wm.c Log Message: No functional change intended: - Use "do {} while (/*CONSTCOND*/false)" for null DPRINTF(). - Reduce indent level of wm_linkintr_gmii(). To generate a diff of this commit: cvs rdiff -u -r1.617 -r1.618 src/sys/dev/pci/if_wm.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_wm.c diff -u src/sys/dev/pci/if_wm.c:1.617 src/sys/dev/pci/if_wm.c:1.618 --- src/sys/dev/pci/if_wm.c:1.617 Tue Jan 22 03:42:27 2019 +++ src/sys/dev/pci/if_wm.c Thu Jan 24 04:50:04 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: if_wm.c,v 1.617 2019/01/22 03:42:27 msaitoh Exp $ */ +/* $NetBSD: if_wm.c,v 1.618 2019/01/24 04:50:04 msaitoh Exp $ */ /* * Copyright (c) 2001, 2002, 2003, 2004 Wasabi Systems, Inc. @@ -83,7 +83,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_wm.c,v 1.617 2019/01/22 03:42:27 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_wm.c,v 1.618 2019/01/24 04:50:04 msaitoh Exp $"); #ifdef _KERNEL_OPT #include "opt_net_mpsafe.h" @@ -160,7 +160,7 @@ int wm_debug = WM_DEBUG_TX | WM_DEBUG_RX #define DPRINTF(x, y) if (wm_debug & (x)) printf y #else -#define DPRINTF(x, y) /* nothing */ +#define DPRINTF(x, y) do { } while (/*CONSTCOND*/false) #endif /* WM_DEBUG */ #ifdef NET_MPSAFE @@ -3975,10 +3975,9 @@ wm_get_cfg_done(struct wm_softc *sc) break; delay(1000); } - if (i >= WM_PHY_CFG_TIMEOUT) { + if (i >= WM_PHY_CFG_TIMEOUT) DPRINTF(WM_DEBUG_GMII, ("%s: %s failed\n", device_xname(sc->sc_dev), __func__)); - } break; case WM_T_ICH8: case WM_T_ICH9: @@ -4091,11 +4090,10 @@ wm_write_smbus_addr(struct wm_softc *sc) HV_SMB_ADDR_FREQ_LOW); phy_data |= __SHIFTIN((freq & 0x02) != 0, HV_SMB_ADDR_FREQ_HIGH); - } else { + } else DPRINTF(WM_DEBUG_INIT, ("%s: %s Unsupported SMB frequency in PHY\n", device_xname(sc->sc_dev), __func__)); - } } return wm_gmii_hv_writereg_locked(sc->sc_dev, 2, HV_SMB_ADDR, @@ -8955,142 +8953,142 @@ wm_rxeof(struct wm_rxqueue *rxq, u_int l static void wm_linkintr_gmii(struct wm_softc *sc, uint32_t icr) { + uint32_t status, reg; + bool link; KASSERT(WM_CORE_LOCKED(sc)); DPRINTF(WM_DEBUG_LINK, ("%s: %s:\n", device_xname(sc->sc_dev), __func__)); - if (icr & ICR_LSC) { - uint32_t status = CSR_READ(sc, WMREG_STATUS); - uint32_t reg; - bool link; - - link = status & STATUS_LU; - if (link) { - DPRINTF(WM_DEBUG_LINK, ("%s: LINK: LSC -> up %s\n", - device_xname(sc->sc_dev), - (status & STATUS_FD) ? "FDX" : "HDX")); - } else { - DPRINTF(WM_DEBUG_LINK, ("%s: LINK: LSC -> down\n", + if ((icr & ICR_LSC) == 0) { + if (icr & ICR_RXSEQ) + DPRINTF(WM_DEBUG_LINK, + ("%s: LINK Receive sequence error\n", device_xname(sc->sc_dev))); - } - if ((sc->sc_type == WM_T_ICH8) && (link == false)) - wm_gig_downshift_workaround_ich8lan(sc); + return; + } - if ((sc->sc_type == WM_T_ICH8) - && (sc->sc_phytype == WMPHY_IGP_3)) { - wm_kmrn_lock_loss_workaround_ich8lan(sc); - } - DPRINTF(WM_DEBUG_LINK, ("%s: LINK: LSC -> mii_pollstat\n", + /* Link status changed */ + status = CSR_READ(sc, WMREG_STATUS); + link = status & STATUS_LU; + if (link) + DPRINTF(WM_DEBUG_LINK, ("%s: LINK: LSC -> up %s\n", + device_xname(sc->sc_dev), + (status & STATUS_FD) ? "FDX" : "HDX")); + else + DPRINTF(WM_DEBUG_LINK, ("%s: LINK: LSC -> down\n", device_xname(sc->sc_dev))); - mii_pollstat(&sc->sc_mii); - if (sc->sc_type == WM_T_82543) { - int miistatus, active; - - /* - * With 82543, we need to force speed and - * duplex on the MAC equal to what the PHY - * speed and duplex configuration is. - */ - miistatus = sc->sc_mii.mii_media_status; + if ((sc->sc_type == WM_T_ICH8) && (link == false)) + wm_gig_downshift_workaround_ich8lan(sc); - if (miistatus & IFM_ACTIVE) { - active = sc->sc_mii.mii_media_active; - sc->sc_ctrl &= ~(CTRL_SPEED_MASK | CTRL_FD); - switch (IFM_SUBTYPE(active)) { - case IFM_10_T: - sc->sc_ctrl |= CTRL_SPEED_10; - break; - case IFM_100_TX: - sc->sc_ctrl |= CTRL_SPEED_100; - break; - case IFM_1000_T: - sc->sc_ctrl |= CTRL_SPEED_1000; - break; - default: - /* - * fiber? - * Shoud not enter here. - */ - printf("unknown media (%x)\n", active); - break; - } - if (active & IFM_FDX) - sc->sc_ctrl |= CTRL_FD; - CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl); - } - } else if (sc->sc_type == WM_T_PCH) { - wm_k1_gig_workaround_hv(sc, - ((sc->sc_mii.mii_media_status & IFM_ACTIVE) != 0)); - } + if ((sc->sc_type == WM_T_ICH8) + && (sc->sc_phytype == WMPHY_IGP_3)) { + wm_kmrn_lock_loss_workaround_ich8lan(sc); + } + DPRINTF(WM_DEBUG_LINK, ("%s: LINK: LSC -> mii_pollstat\n", + device_xname(sc->sc_dev))); + mii_pollstat(&sc->sc_mii); + if (sc->sc_type == WM_T_82543) { + int miistatus, active; /* - * I217 Packet Loss issue: - * ensure that FEXTNVM4 Beacon Duration is set correctly - * on power up. - * Set the Beacon Duration for I217 to 8 usec + * With 82543, we need to force speed and + * duplex on the MAC equal to what the PHY + * speed and duplex configuration is. */ - if (sc->sc_type >= WM_T_PCH_LPT) { - reg = CSR_READ(sc, WMREG_FEXTNVM4); - reg &= ~FEXTNVM4_BEACON_DURATION; - reg |= FEXTNVM4_BEACON_DURATION_8US; - CSR_WRITE(sc, WMREG_FEXTNVM4, reg); - } - - /* Work-around I218 hang issue */ - if ((sc->sc_pcidevid == PCI_PRODUCT_INTEL_I218_LM) || - (sc->sc_pcidevid == PCI_PRODUCT_INTEL_I218_V) || - (sc->sc_pcidevid == PCI_PRODUCT_INTEL_I218_LM3) || - (sc->sc_pcidevid == PCI_PRODUCT_INTEL_I218_V3)) - wm_k1_workaround_lpt_lp(sc, link); + miistatus = sc->sc_mii.mii_media_status; - if (sc->sc_type >= WM_T_PCH_LPT) { - /* - * Set platform power management values for Latency - * Tolerance Reporting (LTR) - */ - wm_platform_pm_pch_lpt(sc, - ((sc->sc_mii.mii_media_status & IFM_ACTIVE) != 0)); + if (miistatus & IFM_ACTIVE) { + active = sc->sc_mii.mii_media_active; + sc->sc_ctrl &= ~(CTRL_SPEED_MASK | CTRL_FD); + switch (IFM_SUBTYPE(active)) { + case IFM_10_T: + sc->sc_ctrl |= CTRL_SPEED_10; + break; + case IFM_100_TX: + sc->sc_ctrl |= CTRL_SPEED_100; + break; + case IFM_1000_T: + sc->sc_ctrl |= CTRL_SPEED_1000; + break; + default: + /* + * fiber? + * Shoud not enter here. + */ + printf("unknown media (%x)\n", active); + break; + } + if (active & IFM_FDX) + sc->sc_ctrl |= CTRL_FD; + CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl); } + } else if (sc->sc_type == WM_T_PCH) { + wm_k1_gig_workaround_hv(sc, + ((sc->sc_mii.mii_media_status & IFM_ACTIVE) != 0)); + } - /* Clear link partner's EEE ability */ - sc->eee_lp_ability = 0; + /* + * I217 Packet Loss issue: + * ensure that FEXTNVM4 Beacon Duration is set correctly + * on power up. + * Set the Beacon Duration for I217 to 8 usec + */ + if (sc->sc_type >= WM_T_PCH_LPT) { + reg = CSR_READ(sc, WMREG_FEXTNVM4); + reg &= ~FEXTNVM4_BEACON_DURATION; + reg |= FEXTNVM4_BEACON_DURATION_8US; + CSR_WRITE(sc, WMREG_FEXTNVM4, reg); + } - /* FEXTNVM6 K1-off workaround */ - if (sc->sc_type == WM_T_PCH_SPT) { - reg = CSR_READ(sc, WMREG_FEXTNVM6); - if (CSR_READ(sc, WMREG_PCIEANACFG) - & FEXTNVM6_K1_OFF_ENABLE) - reg |= FEXTNVM6_K1_OFF_ENABLE; - else - reg &= ~FEXTNVM6_K1_OFF_ENABLE; - CSR_WRITE(sc, WMREG_FEXTNVM6, reg); - } + /* Work-around I218 hang issue */ + if ((sc->sc_pcidevid == PCI_PRODUCT_INTEL_I218_LM) || + (sc->sc_pcidevid == PCI_PRODUCT_INTEL_I218_V) || + (sc->sc_pcidevid == PCI_PRODUCT_INTEL_I218_LM3) || + (sc->sc_pcidevid == PCI_PRODUCT_INTEL_I218_V3)) + wm_k1_workaround_lpt_lp(sc, link); - if (!link) - return; + if (sc->sc_type >= WM_T_PCH_LPT) { + /* + * Set platform power management values for Latency + * Tolerance Reporting (LTR) + */ + wm_platform_pm_pch_lpt(sc, + ((sc->sc_mii.mii_media_status & IFM_ACTIVE) != 0)); + } - switch (sc->sc_type) { - case WM_T_PCH2: - wm_k1_workaround_lv(sc); - /* FALLTHROUGH */ - case WM_T_PCH: - if (sc->sc_phytype == WMPHY_82578) - wm_link_stall_workaround_hv(sc); - break; - default: - break; - } + /* Clear link partner's EEE ability */ + sc->eee_lp_ability = 0; - /* Enable/Disable EEE after link up */ - if (sc->sc_phytype > WMPHY_82579) - wm_set_eee_pchlan(sc); + /* FEXTNVM6 K1-off workaround */ + if (sc->sc_type == WM_T_PCH_SPT) { + reg = CSR_READ(sc, WMREG_FEXTNVM6); + if (CSR_READ(sc, WMREG_PCIEANACFG) & FEXTNVM6_K1_OFF_ENABLE) + reg |= FEXTNVM6_K1_OFF_ENABLE; + else + reg &= ~FEXTNVM6_K1_OFF_ENABLE; + CSR_WRITE(sc, WMREG_FEXTNVM6, reg); + } - } else if (icr & ICR_RXSEQ) { - DPRINTF(WM_DEBUG_LINK, ("%s: LINK Receive sequence error\n", - device_xname(sc->sc_dev))); + if (!link) + return; + + switch (sc->sc_type) { + case WM_T_PCH2: + wm_k1_workaround_lv(sc); + /* FALLTHROUGH */ + case WM_T_PCH: + if (sc->sc_phytype == WMPHY_82578) + wm_link_stall_workaround_hv(sc); + break; + default: + break; } + + /* Enable/Disable EEE after link up */ + if (sc->sc_phytype > WMPHY_82579) + wm_set_eee_pchlan(sc); } /* @@ -9143,10 +9141,9 @@ wm_linkintr_tbi(struct wm_softc *sc, uin } /* Update LED */ wm_tbi_serdes_set_linkled(sc); - } else if (icr & ICR_RXSEQ) { + } else if (icr & ICR_RXSEQ) DPRINTF(WM_DEBUG_LINK, ("%s: LINK: Receive sequence error\n", device_xname(sc->sc_dev))); - } } /* @@ -9219,10 +9216,9 @@ wm_linkintr_serdes(struct wm_softc *sc, } /* Update LED */ wm_tbi_serdes_set_linkled(sc); - } else { + } else DPRINTF(WM_DEBUG_LINK, ("%s: LINK: Receive sequence error\n", device_xname(sc->sc_dev))); - } } /* @@ -9264,10 +9260,9 @@ wm_intr_legacy(void *arg) icr = CSR_READ(sc, WMREG_ICR); if ((icr & sc->sc_icr) == 0) break; - if (handled == 0) { + if (handled == 0) DPRINTF(WM_DEBUG_TX, ("%s: INTx: got intr\n",device_xname(sc->sc_dev))); - } if (rndval == 0) rndval = icr; @@ -11888,14 +11883,13 @@ wm_check_for_link(struct wm_softc *sc) __func__)); CSR_WRITE(sc, WMREG_TXCW, sc->sc_txcw); CSR_WRITE(sc, WMREG_CTRL, (ctrl & ~CTRL_SLU)); - } else if (signal && ((rxcw & RXCW_C) != 0)) { + } else if (signal && ((rxcw & RXCW_C) != 0)) DPRINTF(WM_DEBUG_LINK, ("%s: %s: /C/", device_xname(sc->sc_dev), __func__)); - } else { + else DPRINTF(WM_DEBUG_LINK, ("%s: %s: linkup %08x,%08x,%08x\n", device_xname(sc->sc_dev), __func__, rxcw, ctrl, status)); - } return 0; } @@ -13275,12 +13269,11 @@ wm_nvm_validate_checksum(struct wm_softc || (sc->sc_type == WM_T_PCH2) || (sc->sc_type == WM_T_PCH_LPT)) { /* XXX PCH_SPT? */ wm_nvm_read(sc, csum_wordaddr, 1, &eeprom_data); - if ((eeprom_data & valid_checksum) == 0) { + if ((eeprom_data & valid_checksum) == 0) DPRINTF(WM_DEBUG_NVM, ("%s: NVM need to be updated (%04x != %04x)\n", device_xname(sc->sc_dev), eeprom_data, valid_checksum)); - } } if ((wm_debug & WM_DEBUG_NVM) != 0) {