summaryrefslogtreecommitdiffstats
path: root/sys/dev/jme/if_jme.c
diff options
context:
space:
mode:
authoryongari <yongari@FreeBSD.org>2008-10-14 00:54:15 +0000
committeryongari <yongari@FreeBSD.org>2008-10-14 00:54:15 +0000
commit9645b4dc686f3975e85095ba85501146355bf4e0 (patch)
treeccd988b04d9ae3b42d075f20b808b20a32aedfe2 /sys/dev/jme/if_jme.c
parentc4910a53687dc0e68373e3034d54981d87edba3d (diff)
downloadFreeBSD-src-9645b4dc686f3975e85095ba85501146355bf4e0.zip
FreeBSD-src-9645b4dc686f3975e85095ba85501146355bf4e0.tar.gz
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
Diffstat (limited to 'sys/dev/jme/if_jme.c')
-rw-r--r--sys/dev/jme/if_jme.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/sys/dev/jme/if_jme.c b/sys/dev/jme/if_jme.c
index 5f431e8..b52136c 100644
--- a/sys/dev/jme/if_jme.c
+++ b/sys/dev/jme/if_jme.c
@@ -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);
OpenPOWER on IntegriCloud