[U-Boot] [PATCH v2] Fixing spi erase for S25FL128P_256K

Marc-André Hébert hebert.marcandre at gmail.com
Wed Aug 11 13:23:03 CEST 2010


2010/8/10 Mike Frysinger <vapier at gentoo.org>:
> 2010/8/10 Marc-André Hébert:
>> The spansion_erase currently only works when the sector size is 64KB.
>> cmd[1] should contain the higher 8 bit of the 24 bit address of the
>> sector to be erased. Currently it is holding the sector index to be
>> erased which happens to be the same thing when the sector size is
>> 64KB.
>
> ugh, this is why the current sf framework annoys me.  so much
> duplication across drivers including bugs.
>
>> --- a/drivers/mtd/spi/spansion.c
>> +++ b/drivers/mtd/spi/spansion.c
>> @@ -274,8 +273,8 @@ int spansion_erase(struct spi_flash *flash, u32
>> offset, size_t len)
>>        }
>>
>>        ret = 0;
>> -       for (actual = 0; actual < len; actual++) {
>> -               cmd[1] = (offset / sector_size) + actual;
>> +       for (actual = 0; actual < len; actual += sector_size) {
>> +               cmd[1] = (offset + actual) >> 16;
>
> how about the bug fix that went into stmicro:
> -       cmd[1] = (offset / sector_size) + actual;
> +       cmd[1] = offset >> 16;
> +       offset += sector_size;
> -mike
>
Yeah I saw how stmicro did it, but I didn't do it that way simply
because modifying the offset invalidates the debug statement
afterwards:

debug("SF: SPANSION: Successfully erased %u bytes @ 0x%x\n",
	      len, offset);
Marc


More information about the U-Boot mailing list