[U-Boot] [PATCH v3 1/9] sf: Update SST flash params

Jagan Teki jagannadh.teki at gmail.com
Fri Apr 17 10:48:17 CEST 2015


Hi Bin,

On 17 April 2015 at 07:14, Bin Meng <bmeng.cn at gmail.com> wrote:
> Hi Jagan,
>
> On Fri, Apr 17, 2015 at 2:09 AM, Jagan Teki <jagannadh.teki at gmail.com> wrote:
>> Hi Bin,
>>
>> I think you have a different interpretation of sector size here-
>>
>> /* The size listed here is what works with SPINOR_OP_SE, which isn't
>>  * necessarily called a "sector" by the vendor.
>>  */
>> Say for example SST25VF040B has 8 sectors of which each sector size is
>> 64 * 1024 out of this we can use 4K sector erase or 32K sector erase or
>> 64K sector erase through flags.
>>
>> Linux does follow the same-
>>         /* SST -- large erase sizes are "overlays", "sectors" are 4K */
>>         { "sst25vf040b", INFO(0xbf258d, 0, 64 * 1024,  8, SECT_4K |
>> SST_WRITE) },
>>         { "sst25vf080b", INFO(0xbf258e, 0, 64 * 1024, 16, SECT_4K |
>> SST_WRITE) },
>>         { "sst25vf016b", INFO(0xbf2541, 0, 64 * 1024, 32, SECT_4K |
>> SST_WRITE) },
>>         { "sst25vf032b", INFO(0xbf254a, 0, 64 * 1024, 64, SECT_4K |
>> SST_WRITE) },
>>
>> Please check it.
>
>
> Yes, I know this pretty well. And I want to change this behavior, as
> my cover letter says.
>
> Currently the 'sf erase' command operates on a 64KB granularity, while
> the actual erase command is 4KB granularity, which is inconsistent and
> causes confusion.

It never related to 'sf erase' instead based on the 'params->flags'
sf_probe will decide which erase_cmd with erase_size will use.
        /* Compute erase sector and command */
        if (params->flags & SECT_4K) {
                flash->erase_cmd = CMD_ERASE_4K;
                flash->erase_size = 4096 << flash->shift;
        } else if (params->flags & SECT_32K) {
                flash->erase_cmd = CMD_ERASE_32K;
                flash->erase_size = 32768 << flash->shift;
        } else {
                flash->erase_cmd = CMD_ERASE_64K;
                flash->erase_size = flash->sector_size;
        }

And to be honest, these flashes were tested with lowest ie 4KB so even if they
do support 64KB, we mentioned on 4KB on 'params->flags' as we tested
well with that
and it works consistently.

>
>> On 10 December 2014 at 18:21, Bin Meng <bmeng.cn at gmail.com> wrote:
>>> Update SST25VF064C read command to RD_EXTN per datasheet.
>>> Also change flash sector size to 4KiB to match SECT_4K.
>>>
>>> Signed-off-by: Bin Meng <bmeng.cn at gmail.com>
>>> ---
>>>
>>>  drivers/mtd/spi/sf_params.c | 20 ++++++++++----------
>>>  1 file changed, 10 insertions(+), 10 deletions(-)
>>>
>>> diff --git a/drivers/mtd/spi/sf_params.c b/drivers/mtd/spi/sf_params.c
>>> index 30875b3..5482700 100644
>>> --- a/drivers/mtd/spi/sf_params.c
>>> +++ b/drivers/mtd/spi/sf_params.c
>>> @@ -89,16 +89,16 @@ const struct spi_flash_params spi_flash_params_table[] = {
>>>         {"N25Q1024A",      0x20bb21, 0x0,       64 * 1024,  2048, RD_FULL, WR_QPP | E_FSR | SECT_4K},
>>>  #endif
>>>  #ifdef CONFIG_SPI_FLASH_SST            /* SST */
>>> -       {"SST25VF040B",    0xbf258d, 0x0,       64 * 1024,     8, RD_NORM,          SECT_4K | SST_WR},
>>> -       {"SST25VF080B",    0xbf258e, 0x0,       64 * 1024,    16, RD_NORM,          SECT_4K | SST_WR},
>>> -       {"SST25VF016B",    0xbf2541, 0x0,       64 * 1024,    32, RD_NORM,          SECT_4K | SST_WR},
>>> -       {"SST25VF032B",    0xbf254a, 0x0,       64 * 1024,    64, RD_NORM,          SECT_4K | SST_WR},
>>> -       {"SST25VF064C",    0xbf254b, 0x0,       64 * 1024,   128, RD_NORM,                   SECT_4K},
>>> -       {"SST25WF512",     0xbf2501, 0x0,       64 * 1024,     1, RD_NORM,          SECT_4K | SST_WR},
>>> -       {"SST25WF010",     0xbf2502, 0x0,       64 * 1024,     2, RD_NORM,          SECT_4K | SST_WR},
>>> -       {"SST25WF020",     0xbf2503, 0x0,       64 * 1024,     4, RD_NORM,          SECT_4K | SST_WR},
>>> -       {"SST25WF040",     0xbf2504, 0x0,       64 * 1024,     8, RD_NORM,          SECT_4K | SST_WR},
>>> -       {"SST25WF080",     0xbf2505, 0x0,       64 * 1024,    16, RD_NORM,          SECT_4K | SST_WR},
>>> +       {"SST25VF040B",    0xbf258d, 0x0,        4 * 1024,   128, RD_NORM,          SECT_4K | SST_WR},
>>> +       {"SST25VF080B",    0xbf258e, 0x0,        4 * 1024,   256, RD_NORM,          SECT_4K | SST_WR},
>>> +       {"SST25VF016B",    0xbf2541, 0x0,        4 * 1024,   512, RD_NORM,          SECT_4K | SST_WR},
>>> +       {"SST25VF032B",    0xbf254a, 0x0,        4 * 1024,  1024, RD_NORM,          SECT_4K | SST_WR},
>>> +       {"SST25VF064C",    0xbf254b, 0x0,        4 * 1024,  2048, RD_EXTN,                   SECT_4K},
>>> +       {"SST25WF512",     0xbf2501, 0x0,        4 * 1024,    16, RD_NORM,          SECT_4K | SST_WR},
>>> +       {"SST25WF010",     0xbf2502, 0x0,        4 * 1024,    32, RD_NORM,          SECT_4K | SST_WR},
>>> +       {"SST25WF020",     0xbf2503, 0x0,        4 * 1024,    64, RD_NORM,          SECT_4K | SST_WR},
>>> +       {"SST25WF040",     0xbf2504, 0x0,        4 * 1024,   128, RD_NORM,          SECT_4K | SST_WR},
>>> +       {"SST25WF080",     0xbf2505, 0x0,        4 * 1024,   256, RD_NORM,          SECT_4K | SST_WR},
>>>  #endif
>>>  #ifdef CONFIG_SPI_FLASH_WINBOND                /* WINBOND */
>>>         {"W25P80",         0xef2014, 0x0,       64 * 1024,    16, RD_NORM,                         0},
>>> --


thanks!
-- 
Jagan.


More information about the U-Boot mailing list