[U-Boot] [PATCH v4 00/21] sf: Tunning spi-flash layer

Jagan Teki jteki at openedev.com
Mon Oct 19 11:28:27 CEST 2015


Hi Simon,

On 19 October 2015 at 01:57, Simon Glass <sjg at chromium.org> wrote:
> Hi Jagan,
>
> On 12 October 2015 at 09:00, Jagan Teki <jteki at openedev.com> wrote:
>> Previous version link:
>> http://permalink.gmane.org/gmane.comp.boot-loaders.u-boot/233262
>>
>> spi-flash layer need to tune a lot for better code handling and
>> to sync with Linux spi-nor. So below areas got updated in this series.
>> - BAR handling
>> - spi_flash_cmd_wait_ready updates.
>> - Separate core spi-flash handling and spi-flash interface
>>   (interface between spi drivers vs spi-flash layer)
>>
>> Currently I'm working on spi-nor framework for u-boot which
>> is slighly same as Linux spi-nor core with addition of
>> u-boot driver model to it.
>>
>> This series will be starting point to add spi-nor functionalities.
>>
>> TODO:
>> - MTD core addition to spi-flash layer.
>> - spi-nor core addition.
>>
>> Code sizes:
>> After:
>> dm:
>>    text    data     bss     dec     hex filename
>>  354820   12016  221112  587948   8f8ac u-boot
>> non-dm
>>    text    data     bss     dec     hex filename
>>  354317   11876  221124  587317   8f635 u-boot
>>
>> Before:
>> dm
>>    text    data     bss     dec     hex filename
>>  354878   12016  221096  587990   8f8d6 u-boot
>> non-dm
>>    text    data     bss     dec     hex filename
>>  354447   11876  221124  587447   8f6b7 u-boot
>
> I don't think you should be adding new features to the
> non-driver-model SPI flash code. We are supposed to be migrating
> everything to driver model, so it would be better to move your boards
> over, and then work to deprecate and remove the old code. Adding new
> features to it sends the wrong message.

spi-flash core code doesn't require to add driver model, and cmd_sf to
spi-flash code is already supporting driver model.

OK, let me explain in-detail.

Code in sf_probe.c supports both dm and non dm-spi-flash and flash
initialization code using
spi_flash_validate_params. sf.c acts as interface between spi drivers
vs spi-flash code.
So the spi-flash initialization code(part of sf_probe) and code in
sf_ops are commonly categorized as spi-flash core code and this will
not require driver model, so-that the dm drivers will simply use this
common code for spi-flash core functionality.

This patch series will separate all the necessary existing code into
core and spi-flash vs spi drivers interface code. So at ends
- sf_probe is simply the copy of sf.c and dm and non-dm spi-flash code
so this will acts a spi-flash vs spi drivers interface. (which has dm
and non-dm as same as before)
- sf_ops is core spi-flash functionality.

On top of this I'm adding actual spi-nor core code, where sf_ops.c
will become spi-nor.c and sf_probe.c will become spi-nor-flash.c.
- spi-nor.c: Core SPI NOR
- spi-nor-flash: spi drivers vs spi-nor interface (which has dm and
non-dm as same as before)

The reason for adding this spi-nor is to move flash code from
spi-drivers, example fsl_qspi and at the end this fsl_qspi will move
from spi drivers to spi-nor that will be in driver model.

I'm simply adding new core functionality with adding new drivers as
dm-driven, I don't think this will not effect/change the driver model
growth.

 View of spi-nor framework:

    -----------------------------------------------------
                        cmd_sf
    -----------------------------------------------------
                        spi_flash
    -----------------------------------------------------
                        MTD Core
    -----------------------------------------------------
                        sf-uclass
    -----------------------------------------------------
                        SPI-NOR
    -----------------------------------------------------
        spi-nor-flash           drivers/mtd/spi/*
    -----------------------------------------------------
        spi-uclass
    -----------------------------------------------------
        drivers/spi/*
    -----------------------------------------------------

drivers/mtd/spi/spi-nor.c: spi-nor core (not require to add dm)
drivers/mtd/spi/spi-flash-nor.c: spi-nor to spi drivers interface (dm-driven)
drivers/mtd/spi/fsl-quadspi.c: spi-nor controller driver (dm-driven)

Please let me know for any more comments.

>
> Sorry if I am misunderstanding your intent here.
>
>>
>> Testing:
>> $ git clone git://git.denx.de/u-boot-spi.git
>> $ cd u-boot-spi
>> $ git checkout -b spi-nor-tune origin/next-spi-nor-tune
>>
>> thanks!
>> Jagan.
>>
>> Jagan Teki (21):
>>   spi: zynq_spi: Remove unneeded headers
>>   sf: Return bank_sel, if flash->bank_curr == bank_sel
>>   sf: Add spi_flash_read_bar
>>   sf: Optimize BAR write code
>>   sf: Make flash->flags use for generic usage
>>   sf: Update status reg check in spi_flash_cmd_wait_ready
>>   sf: Add FSR support to spi_flash_cmd_wait_ready
>>   sf: spi_flash_validate_params => spi_flash_scan
>>   sf: Move spi_flash_scan code to sf_ops
>>   sf: Move the read_id code to sf_ops
>>   sf: Move BAR defined code at once place
>>   sf: Use static for file-scope functions
>>   sf: Fix Makefile
>>   sf: Use simple name for register access functions
>>   sf: Use flash function pointers in dm_spi_flash_ops
>>   sf: Flash power up read-only based on idcode0
>>   sf: Use static for file-scope functions
>>   sf: Remove unneeded header includes
>>   sf: probe: Use spi_flash_scan in dm-spi-flash
>>   sf: Re-factorize spi_flash_probe_tail code
>>   dm-sf: Re-factorize spi_flash_std_probe code
>>
>>  drivers/mtd/spi/Makefile      |   6 +-
>>  drivers/mtd/spi/sf_internal.h |  57 ++---
>>  drivers/mtd/spi/sf_ops.c      | 488 +++++++++++++++++++++++++++++++++++-------
>>  drivers/mtd/spi/sf_probe.c    | 446 ++++++--------------------------------
>>  drivers/spi/zynq_spi.c        |   6 +-
>>  include/spi_flash.h           |  19 +-
>>  6 files changed, 494 insertions(+), 528 deletions(-)
>>
>> --
>> 1.9.1

--  Jagan.


More information about the U-Boot mailing list