Module Name:    src
Committed By:   bouyer
Date:           Sun Jan 16 12:51:59 UTC 2011

Modified Files:
        src/sys/dev/pci [netbsd-5]: if_jme.c

Log Message:
Pull up following revision(s) (requested by kochi in ticket #1525):
        sys/dev/pci/if_jme.c: revision 1.16
Try reading MAC addr from register if it fails to read from EEPROM.
Copied from FreeBSD driver.
Without this my JMC261 doesn't get MAC address properly.
OK'ed by bouyer@


To generate a diff of this commit:
cvs rdiff -u -r1.4.6.2 -r1.4.6.3 src/sys/dev/pci/if_jme.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_jme.c
diff -u src/sys/dev/pci/if_jme.c:1.4.6.2 src/sys/dev/pci/if_jme.c:1.4.6.3
--- src/sys/dev/pci/if_jme.c:1.4.6.2	Mon Feb  2 20:50:11 2009
+++ src/sys/dev/pci/if_jme.c	Sun Jan 16 12:51:59 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_jme.c,v 1.4.6.2 2009/02/02 20:50:11 snj Exp $	*/
+/*	$NetBSD: if_jme.c,v 1.4.6.3 2011/01/16 12:51:59 bouyer Exp $	*/
 
 /*
  * Copyright (c) 2008 Manuel Bouyer.  All rights reserved.
@@ -63,7 +63,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_jme.c,v 1.4.6.2 2009/02/02 20:50:11 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_jme.c,v 1.4.6.3 2011/01/16 12:51:59 bouyer Exp $");
 
 
 #include <sys/param.h>
@@ -223,6 +223,7 @@
 
 static int jme_eeprom_read_byte(struct jme_softc *, uint8_t, uint8_t *);
 static int jme_eeprom_macaddr(struct jme_softc *);
+static int jme_reg_macaddr(struct jme_softc *);
 
 #define JME_TIMEOUT		1000
 #define JME_PHY_TIMEOUT		1000
@@ -392,7 +393,7 @@
 	jme_reset(sc);
 
 	/* read mac addr */
-	if (jme_eeprom_macaddr(sc)) {
+	if (jme_eeprom_macaddr(sc) && jme_reg_macaddr(sc)) {
 		aprint_error_dev(self, "error reading Ethernet address\n");
 		/* return; */
 	}
@@ -2005,6 +2006,28 @@
 	return (ENOENT);
 }
 
+static int
+jme_reg_macaddr(struct jme_softc *sc)
+{
+	uint32_t par0, par1;
+
+	par0 = bus_space_read_4(sc->jme_bt_mac, sc->jme_bh_mac, JME_PAR0);
+	par1 = bus_space_read_4(sc->jme_bt_mac, sc->jme_bh_mac, JME_PAR1);
+	par1 &= 0xffff;
+	if ((par0 == 0 && par1 == 0) ||
+	    (par0 == 0xffffffff && par1 == 0xffff)) {
+		return (ENOENT);
+	} else {
+		sc->jme_enaddr[0] = (par0 >> 0) & 0xff;
+		sc->jme_enaddr[1] = (par0 >> 8) & 0xff;
+		sc->jme_enaddr[2] = (par0 >> 16) & 0xff;
+		sc->jme_enaddr[3] = (par0 >> 24) & 0xff;
+		sc->jme_enaddr[4] = (par1 >> 0) & 0xff;
+		sc->jme_enaddr[5] = (par1 >> 8) & 0xff;
+	}
+	return (0);
+}
+
 /*
  * Set up sysctl(3) MIB, hw.jme.* - Individual controllers will be
  * set up in jme_pci_attach()

Reply via email to