[U-Boot] [PATCH 00/12] cmd_sf: Add support for read and write instructions

Simon Glass sjg at chromium.org
Sat Mar 9 00:55:20 CET 2013


Hi,

On Sat, Mar 2, 2013 at 12:29 AM, Jagan Teki <jagannadh.teki at gmail.com>wrote:

> Hi All,
>
> On Fri, Jan 11, 2013 at 7:46 AM, Simon Glass <sjg at chromium.org> wrote:
> > Hi Jagannadha,
> >
> > On Mon, Dec 31, 2012 at 3:13 AM, Jagannadha Sutradharudu Teki
> > <jagannadh.teki at gmail.com> wrote:
> >> All these patches are added a support for read and write instruction
> >> for programming/reading SPI flash.
> >>
> >
> > I think this is all great and very useful - since no one else has
> > commented I will have a try.
> >
> >> Read and Write instruction are implemented as a command line
> >> arguments for 'sf write' , 'sf read' and 'sf update' commands.
> >>
> >> Currently I have added below instructions those are commonly available
> >> on all flash types.
> >
> > Maybe you could use flags like -d for dual, -q for quad, -p for page,
> > -s for slow, -o for output only. So maybe:
> >
> > -p > pp - Page Program (existing one)
> > -qp > qpp - Quad-input Page Program
> > <empty> > afr - Array Fast Read (existing one)
> > -s > asr - Array Slow Read
> > -do > dofr - Dual Output Fast Read
> > -qo > qofr - Quad Output Fast Read
> > -d > diofr - Dual IO Fast Read
> > -q > qiofr - Quad IO Fast Read
> >
> > I worry that your scheme would be hard to remember.
> >
> >
> >>
> >> I have tested mostly of the instruction on real h/w.
> >>
> >> This entire implementation will change the current sf framework little
> bit but
> >> I thought these changes are worth to add.
> >
> > Yes very much so.
> >
> >>
> >> Request for all your comment, so-that I can move forward.
> >> Please let me know for any issue regarding this new implementation.
> >
> > Regards,
> > Simon
> >
> >>
> >> Thanks,
> >> Jagan.
> >>
> >> Jagannadha Sutradharudu Teki (12):
> >>   cmd_sf: Add wr_inst argument to 'sf write' command
> >>   cmd_sf: Add rd_inst argument to 'sf read' command
> >>   cmd_sf: Add wr_inst argument to 'sf update' command
> >>   cmd_sf: Add rd_inst argument to 'sf update' command
> >>   cmd_sf: Define a functions for parsing read and write instructions
> >>   cmd_sf: Add QPP(Quad-input Page Program) write instruction support
> >>   cmd_sf: Add ASR(Array Slow Read) read instruction support
> >>   cmd_sf: Add DOFR(Dual Output Fast Read) read instruction support
> >>   cmd_sf: Add QOFR(Quad Output Fast Read) read instruction support
> >>   cmd_sf: Add DIOFR(Dual IO Fast Read) read instruction support
> >>   cmd_sf: Add QIOFR(Quad IO Fast Read) read instruction support
> >>   sf: Pass rd_qeb_req variable as 0 for status and config reg reads
> >>
> >>  common/cmd_sf.c                      |  198
> +++++++++++++++++++++++++++++-----
> >>  drivers/mtd/spi/spi_flash.c          |   40 +++++--
> >>  drivers/mtd/spi/spi_flash_internal.h |   10 +-
> >>  include/spi_flash.h                  |   22 ++--
> >>  include/spi_flash_inst.h             |   39 +++++++
> >>  5 files changed, 257 insertions(+), 52 deletions(-)
> >>  create mode 100644 include/spi_flash_inst.h
> >>
>
> Since these changes I have sent long back, I am just re-modified the
> framework to
> add new features at the same time with backward comparability for
> current commands.
>
> Current command setup:
> sf write
> sf read
> sf update
>
> Changed command set: [no changes in the argument count]
> sf write     ---  current command
> sf write.pp --  same as sf write
> sf write.qp -- quad program
>
> sf read   -- current read
> sf read.af --- array flast read, same as sf read
> sf read.as -- array slow read
> sf read.do --- dual out
> sf read.qo -- quad out
> sf read.dio -- dual io
> sf read.qio -- quad io
>
> sf update  -- current update
> sf update.pp.af -- write page program, read array fast, same as sf update
> sf update.pp.as - write page program, read array slow
> sf update.pp.do - write page program, read dual out
> sf update.pp.qo - write page program, read quad out
> sf update.pp.dio - write page program, read dual io
> sf update.pp.qio - write page program, read quad io
> sf update.qp.af - write quad program, read array fast
> sf update.qp.as - write quad program, read array slow
> sf update.qp.do - write quad program, read dual out
> sf update.qp.qo - write quad program, read quad out
> sf update.qp.dio - write quad program, read dual io
> sf update.qp.qio - write quad program, read quad io
>
> Though it seems to be lengthy, but may useful with lot of combinations
> from user.
> My intention is to use the existing argument count with changes in the
> command set.
>
> Request for your inputs.
>


I think your new scheme sounds reasonable. Regarding the capability of
drivers to support these commands, I suppose you are going to need to add
new spi_slave flags which drivers can set, to indicate that each mode is
available? Still, the question is whether these modes are selected at 'sf
probe' time, or at 'sf read/write' time?

The latter is more flexible and makes it easier for cases where you must
use one more for read and another for write (no need to probe again in
between). But you will then need to add flags to spi_setup_slave() for
these modes, right?

Regards,
Simon


>
> Thanks,
> Jagan.
>
> >> _______________________________________________
> >> U-Boot mailing list
> >> U-Boot at lists.denx.de
> >> http://lists.denx.de/mailman/listinfo/u-boot
>


More information about the U-Boot mailing list