Module Name:    src
Committed By:   msaitoh
Date:           Tue Apr  2 12:27:03 UTC 2013

Modified Files:
        src/sys/dev/pci: if_bge.c

Log Message:
Fix a bug that the NVRAM lock timeout occured on sparc64 onboard bge.
Tested by martin.
- Don't acquire NVRAM lock if no EEPROM(or NVRAM?).
- Reset NVRAM before bge_reset(). It's required to acquire NVRAM lock in
  bge_reset().


To generate a diff of this commit:
cvs rdiff -u -r1.231 -r1.232 src/sys/dev/pci/if_bge.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_bge.c
diff -u src/sys/dev/pci/if_bge.c:1.231 src/sys/dev/pci/if_bge.c:1.232
--- src/sys/dev/pci/if_bge.c:1.231	Tue Apr  2 10:12:22 2013
+++ src/sys/dev/pci/if_bge.c	Tue Apr  2 12:27:02 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_bge.c,v 1.231 2013/04/02 10:12:22 msaitoh Exp $	*/
+/*	$NetBSD: if_bge.c,v 1.232 2013/04/02 12:27:02 msaitoh Exp $	*/
 
 /*
  * Copyright (c) 2001 Wind River Systems
@@ -79,7 +79,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_bge.c,v 1.231 2013/04/02 10:12:22 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_bge.c,v 1.232 2013/04/02 12:27:02 msaitoh Exp $");
 
 #include "vlan.h"
 
@@ -3539,6 +3539,15 @@ bge_attach(device_t parent, device_t sel
 		}
 	}
 
+	/*
+	 * Reset NVRAM before bge_reset(). It's required to acquire NVRAM
+	 * lock in bge_reset().
+	 */
+	CSR_WRITE_4(sc, BGE_EE_ADDR,
+	    BGE_EEADDR_RESET | BGE_EEHALFCLK(BGE_HALFCLK_384SCL));
+	delay(1000);
+	BGE_SETBIT(sc, BGE_MISC_LOCAL_CTL, BGE_MLC_AUTO_EEPROM);
+
 	bge_stop_fw(sc);
 	bge_sig_pre_reset(sc, BGE_RESET_START);
 	if (bge_reset(sc))
@@ -3890,7 +3899,8 @@ bge_reset(struct bge_softc *sc)
 	} else
 		write_op = bge_writereg_ind;
 
-	if (BGE_ASICREV(sc->bge_chipid) != BGE_ASICREV_BCM5700 &&
+	if ((sc->bge_flags & BGE_NO_EEPROM) == 0 &&
+	    BGE_ASICREV(sc->bge_chipid) != BGE_ASICREV_BCM5700 &&
 	    BGE_ASICREV(sc->bge_chipid) != BGE_ASICREV_BCM5701) {
 		CSR_WRITE_4(sc, BGE_NVRAM_SWARB, BGE_NVRAMSWARB_SET1);
 		for (i = 0; i < 8000; i++) {

Reply via email to