There seems to be a problem when running the tulip
driver with 6 bit
address length:
The tulip_read_eeprom() function sets up a read command
like:
int read_cmd = location | (EE_READ_CMD << addr_len);
where location is the offset (within the eeprom) and
addr_len is
either 6 or 8 bits. However, with addr_len == 6 and
location > 0x3f,
the most significant locations bits will overlap with
the read command
itself.
Thus, with 6 bit addressing, tulip_read_eeprom() must
not be called
with location > 0x3f. Unfortunately, in tulip_core.c,
it's called with
location up to sizeof(tp->eeprom)/2, which should be
0x100 if I'm not
mistaken. In the same way de2104x.c uses locations up to
DE_EEPROM_WORDS, which is equal to 256 too.
Make sure that the location is masked corresponding to
add_len in
tulip_read_eeprom().
Logged In: YES
user_id=1249368
Sorry. I didn't realize that this tracker was deprecated.
Reposting at bugme.osdl.org.