[U-Boot] [PATCH V5 1/2] MTD/SPI: introduce table driven probing

Reinhard Meyer u-boot at emk-elektronik.de
Mon Oct 11 09:56:26 CEST 2010


Dear Mike Frysinger,
> On Tuesday, October 05, 2010 10:56:39 Reinhard Meyer wrote:
>> +	/*
>> +	 * count the number of continuation bytes, but
>> +	 * leave at least 3 bytes to the end of the buffer untouched
>> +	 */
>> +	for (shift = 0, idp = idbuf;
>> +		shift < (sizeof(idbuf) - 3) && *idp == 0x7f;
>> +			shift++, idp++)
>> +		;
>> +
>> +	/* search the table for matches in shift and id */
>> +	for (i = 0; i < ARRAY_SIZE(flashes); i++) {
>> +		if (flashes[i].shift == shift && flashes[i].idcode == *idp) {
>> +			/* we have a match, call probe */
>> +			flash = flashes[i].probe(spi, idp);
>> +			if (flash)
>> +				break;
>> +		}
>>  	}
> 
> thinking about this some more, i see two problems.  (1) we've been providing 4 
> bytes to probe funcs (like the spansion), so 3 is too small.  (2) all of the 
> probe devices today expect to get the whole idcode buffer.  so if we're going 
> to change this API, we need to fix all the probe funcs too.  but that is a lot 
> of changes to roll into one commit, so let's first focus on converting to a 
> table without changing any probe semantics.

NONE of the existing functions work with expansion, so they all get the unshifted,
full ID buffer.

If you provide the unshifted buffer to the function, the function should get the
shift amount as well. Otherwise the function will again have look how many 0x7e's
to skip....

Reinhard



More information about the U-Boot mailing list