Module Name: src Committed By: msaitoh Date: Mon Jul 6 07:51:09 UTC 2020
Modified Files: src/sys/dev/pci: if_wm.c Log Message: Fix a bug that the WMREG_EEARBC_I210 register is incorrectly set if the system uses iNVM. To generate a diff of this commit: cvs rdiff -u -r1.679 -r1.680 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.679 src/sys/dev/pci/if_wm.c:1.680 --- src/sys/dev/pci/if_wm.c:1.679 Sat Jun 27 13:32:00 2020 +++ src/sys/dev/pci/if_wm.c Mon Jul 6 07:51:09 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: if_wm.c,v 1.679 2020/06/27 13:32:00 jmcneill Exp $ */ +/* $NetBSD: if_wm.c,v 1.680 2020/07/06 07:51:09 msaitoh Exp $ */ /* * Copyright (c) 2001, 2002, 2003, 2004 Wasabi Systems, Inc. @@ -82,7 +82,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_wm.c,v 1.679 2020/06/27 13:32:00 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_wm.c,v 1.680 2020/07/06 07:51:09 msaitoh Exp $"); #ifdef _KERNEL_OPT #include "opt_net_mpsafe.h" @@ -13582,6 +13582,13 @@ wm_nvm_read_invm(struct wm_softc *sc, in rv = -1; } break; + case NVM_OFF_CFG1: /* == INVM_AUTOLOAD */ + rv = wm_nvm_read_word_invm(sc, offset, data); + if (rv != 0) { + *data = INVM_DEFAULT_AL; + rv = 0; + } + break; case NVM_OFF_CFG2: rv = wm_nvm_read_word_invm(sc, offset, data); if (rv != 0) { @@ -16442,6 +16449,8 @@ wm_platform_pm_pch_lpt(struct wm_softc * /* * I210 Errata 25 and I211 Errata 10 * Slow System Clock. + * + * Note that this function is called on both FLASH and iNVM case on NetBSD. */ static int wm_pll_workaround_i210(struct wm_softc *sc) @@ -16467,8 +16476,13 @@ wm_pll_workaround_i210(struct wm_softc * reg = mdicnfg & ~MDICNFG_DEST; CSR_WRITE(sc, WMREG_MDICNFG, reg); - if (wm_nvm_read(sc, INVM_AUTOLOAD, 1, &nvmword) != 0) + if (wm_nvm_read(sc, INVM_AUTOLOAD, 1, &nvmword) != 0) { + /* + * The default value of the Initialization Control Word 1 + * is the same on both I210's FLASH_HW and I21[01]'s iNVM. + */ nvmword = INVM_DEFAULT_AL; + } tmp_nvmword = nvmword | INVM_PLL_WO_VAL; for (i = 0; i < WM_MAX_PLL_TRIES; i++) {