[U-Boot] [U-boot] sf: API for spi_flash_get_sector_size

Richard Retanubun RichardRetanubun at ruggedcom.com
Tue Feb 8 16:33:04 CET 2011


On 02/08/11 10:19, Wolfgang Denk wrote:
> Dear Richard Retanubun,
>
> In message<4D515D06.7020209 at RuggedCom.com>  you wrote:
>>
>> If by "how NOR flash in handled" you mean cmd_flash.c::flash_sect_roundb() then yes, I do want to do this
>> but I need to know what number to round it to, no?
>
> The code needs to know that, you don't ;-)
>
>> In the context of cmd_flash, it has access to flash_info_t
>> which contains the sector_size information. Also cfi_flash.c also provides a function called flash_sector_size()
>> that is called by other components that needs to know. If I have misunderstood what you mean, sorry, please clarify.
>
> You are right.

<sensing a wavering in your resolve> ;-)

Thus we come to my original question, in the same way that cfi_flash.c provides flash_sector_size();

I propose we add spi_flash.c::spi_flash_sector_size() which returns the same information so that other code
can validate (or round up if requested) the length of the operation to the nearest sector size.

right now (unless I misunderstood), there is no easy way to get the spi flash sector_size, no?

would this be acceptable?

>
>> To have SPI flash do this, for example; stmicro.c::stmicro_erase() function will auto round up to the nearest sector_size.
>> Which is indeed the simpler way. Right now, most drivers/mtd/spi/*.c just does this check:
>>
>> <quoted_code>
>> sector_size = stm->params->page_size * stm->params->pages_per_sector;
>>
>> if (offset % sector_size || len % sector_size) {
>> 	debug("SF: Erase offset/length not multiple of sector size\n");
>> 	return -1;
>> }
>> </quoted_code>
>
> This is ok if an explicit size is given - you will see the same
> behaviour on NOR flash when trying something like
>
> 	erase 40000000 40002345

Understood. So the spi flash driver erase function itself should only validate the args and not auto round up.
This means that the decision of [warn or auto-round-up] should be handled by other code that parses the user's commands
that is operating on spi flash.

To do this, they need a way to ask the spi flash driver what the sector size to round up to is.

>
>> I am worried about unintentionally erasing more than what the caller requested.
>> Would it be better to round up manually and then calls the erase?
>
> No.  If the caller uses the "+<size>" notation he explictly requests
> to round up.  He is supposed to know what he is doing.
>
> Being able to use "+${filesize}" allows for many powerful solutions
> to standard tasks that without this would result in cumbersome
> manipulation of the size - which would then probably break if you
> issue a new revision of your hardware with different flash chips fit.

This is a cool convention. Should we add this to "sf erase command?" if it is not there already.
if so, what command (or better yet, git commit) shows how to add handling of "+N"

Thanks!

- Richard



More information about the U-Boot mailing list