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

Mike Frysinger vapier at gentoo.org
Wed Aug 11 19:01:08 CEST 2010


2010/8/11 Marc-André Hébert :
> 2010/8/10 Mike Frysinger:
>> 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;
>
> 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);

and this just reinforces my point.  you're basically saying the
stmicro flash code has a broken debug() statement now.
-mike


More information about the U-Boot mailing list