svn commit: r184045 - in stable/7/sys: . dev/jme

Pyun YongHyeon yongari at FreeBSD.org
Sun Oct 19 06:38:34 UTC 2008


Author: yongari
Date: Sun Oct 19 06:38:34 2008
New Revision: 184045
URL: http://svn.freebsd.org/changeset/base/184045

Log:
  MFC r183814:
    Read PCI device id instead of PCI revision id. Also checks the read
    device id is JMC260 family. Previously it just verified the deivce
    is JMC260 Rev A0. This will make it easy for newer JMC2xx support.
  
    Pointed out by:	bouyer at NetBSD
  
  MFC r183859:
    Make sure to read the last byte of EEPROM descriptor. Previously
    the last byte of the ethernet address was not read which in turn
    resulted in getting 5 out of the 6 bytes of ethernet address and
    always returned ENOENT. I did not notice the bug on FPGA version
    because of additional configuration data in EEPROM.
  
    Pointed out by:	bouyer at NetBSD
  
  Approved by:	re (gnn)

Modified:
  stable/7/sys/   (props changed)
  stable/7/sys/dev/jme/if_jme.c
  stable/7/sys/dev/jme/if_jmereg.h

Modified: stable/7/sys/dev/jme/if_jme.c
==============================================================================
--- stable/7/sys/dev/jme/if_jme.c	Sun Oct 19 06:12:47 2008	(r184044)
+++ stable/7/sys/dev/jme/if_jme.c	Sun Oct 19 06:38:34 2008	(r184045)
@@ -415,11 +415,8 @@ jme_eeprom_macaddr(struct jme_softc *sc)
 	do {
 		if (jme_eeprom_read_byte(sc, offset, &fup) != 0)
 			break;
-		/* Check for the end of EEPROM descriptor. */
-		if ((fup & JME_EEPROM_DESC_END) == JME_EEPROM_DESC_END)
-			break;
-		if ((uint8_t)JME_EEPROM_MKDESC(JME_EEPROM_FUNC0,
-		    JME_EEPROM_PAGE_BAR1) == fup) {
+		if (JME_EEPROM_MKDESC(JME_EEPROM_FUNC0, JME_EEPROM_PAGE_BAR1) ==
+		    (fup & (JME_EEPROM_FUNC_MASK | JME_EEPROM_PAGE_MASK))) {
 			if (jme_eeprom_read_byte(sc, offset + 1, &reg) != 0)
 				break;
 			if (reg >= JME_PAR0 &&
@@ -431,6 +428,9 @@ jme_eeprom_macaddr(struct jme_softc *sc)
 				match++;
 			}
 		}
+		/* Check for the end of EEPROM descriptor. */
+		if ((fup & JME_EEPROM_DESC_END) == JME_EEPROM_DESC_END)
+			break;
 		/* Try next eeprom descriptor. */
 		offset += JME_EEPROM_DESC_BYTES;
 	} while (match != ETHER_ADDR_LEN && offset < JME_EEPROM_END);
@@ -624,8 +624,8 @@ jme_attach(device_t dev)
 		goto fail;
 	}
 
-	sc->jme_rev = pci_get_revid(dev);
-	if (sc->jme_rev == DEVICEID_JMC260) {
+	sc->jme_rev = pci_get_device(dev);
+	if ((sc->jme_rev & DEVICEID_JMC2XX_MASK) == DEVICEID_JMC260) {
 		sc->jme_flags |= JME_FLAG_FASTETH;
 		sc->jme_flags |= JME_FLAG_NOJUMBO;
 	}

Modified: stable/7/sys/dev/jme/if_jmereg.h
==============================================================================
--- stable/7/sys/dev/jme/if_jmereg.h	Sun Oct 19 06:12:47 2008	(r184044)
+++ stable/7/sys/dev/jme/if_jmereg.h	Sun Oct 19 06:38:34 2008	(r184045)
@@ -48,6 +48,8 @@
 #define	DEVICEID_JMC260		0x0260
 #define	DEVICEREVID_JMC260_A0	0x00
 
+#define	DEVICEID_JMC2XX_MASK	0x0FF0
+
 /* JMC250 PCI configuration register. */
 #define	JME_PCI_BAR0		0x10	/* 16KB memory window. */
 


More information about the svn-src-all mailing list