[U-Boot] [PATCH] MTD/SPI/FLASH: add support for Ramtron FRAMs using SPI

Reinhard Meyer u-boot at emk-elektronik.de
Sun Aug 29 01:45:57 CEST 2010


On 29.08.2010 01:17, Mike Frysinger wrote:
> On Saturday, August 28, 2010 17:48:39 Mike Frysinger wrote:
>> +			/* Make sure the ID was jedec extended */
>> +			j = flashes[i].shift - 1;
>> +			while (j>= 0&&  idcode[j] == 0x7f)
>> +				continue;
>
> thinko ... this loops forever.  the tested fix:
> 	j = flashes[i].shift;
> 	while (--j>= 0)
> 		if (idcode[j] != 0x7f)
> 			break;
>
> this whole change increases code size a bit (20 - 60 bytes on Blackfin
> depending on how many flashes are supported), but it makes management easier
> and allows for arbitrarily long manufacturers ids.  so i think it's worth it.
> -mike

arbitrarily long ids unfortunately require an arbitrarily long id_buffer :)

In that case I think its easier to right after READ_ID count the 0x7f's
and search the table with count and the id:

(n is either a compile time constant or determined by examining the table
for largest 'shift'+3)

read-id (n bytes)
shift=count 7f's (max n-3)
id=id_buffer[shift]
search table for shift and id, call function.
if function returns NULL, continue search in table.

That will allow several shift=0, id=0xff entries in the table, which should
be ordered such that least likely to false detect probes come first:
stmicro first since that probe actually has a way to really figure out
the device, the FM25H20-ramtron has no other way except for a ram size
test which certainly is not a good idea to do here...

It is disputable whether the function gets id_buffer or id_buffer+shift
as parameter. I'd prefer the latter.

I am willing to code and test and submit a patch for that method.

Reinhard


More information about the U-Boot mailing list