[LinuxBIOS] [PATCH] flashrom: Support EON EN29F002AT, JEDEC continuation IDs

Carl-Daniel Hailfinger c-d.hailfinger.devel.2006 at gmx.net
Sun Dec 30 13:15:19 CET 2007

On 30.12.2007 05:40, Corey Osgood wrote:
>> +       /* Check if it is a continuation ID, this should be a while
>> loop. */
>> +       if (id1 == 0x7F) {
>> +               largeid1 <<= 8;
>> +               id1 = *(volatile uint8_t *)(bios + 0x100);
>> +               largeid1 |= id1;
>> +       }
>> +       if (id2 == 0x7F) {
>> +               largeid2 <<= 8;
>> +               id2 = *(volatile uint8_t *)(bios + 0x101);
>> +               largeid2 |= id2;
>> +       }
> are you sure this is right? The IDs are, at most, just 0x7f7f7fXX? Just

Actually, the code above does not go further than checking for IDs of
the type 0x7fXX, but does this for vendor and product ID. The current
published JEDEC spec has a list where the largest vendor ID is 7 bytes
long, but all leading bytes are 0x7f. The list will grow in the future,
and using a 64bit variable will not be enough anymore.
Suggestion for a new encoding:
Use a two-byte data type for the ID, the lower byte contains the only
non-0x7f byte, the upper byte contains the number of 0x7f bytes used as
prefix (which is the "page" number the vendor ID appears in.

> doesn't seem quite right, but it might be (yes, I realize it means 4x
> more IDs). We also break the ability to use IMT flash chips (which
> someone may, eventually...). The other things is, if it should be a
> while loop, why isn't it?

Oh, I had not seen the IMT entry in flash.h. It is obviously wrong. With
the current code, at least EON and IMT will collide, and neither have a
real vendor ID of 0x7f. I'll dig out the real IMT vendor ID.

> You also forgot your email in the copyright header in flashchips.c.

That is intentional.

Thanks for your review!


More information about the coreboot mailing list