On Fri, Jul 30, 2010 at 11:49:55AM +0200, Eric Bénard wrote: > newer Numonyx Strataflash P3x have 1024b buffer, thus, it's possible > to write a buffer size of 0x200 which the actual flash_write_cmd > doesn't permit as it's limited to a uchar parameter. So I guess these chips have 16 data lines? Unfortunately this won't work when two of these are parallel. You'd have to duplicate the command for the upper 16 bit. Sascha > > Signed-off-by: Eric Bénard <eric@xxxxxxxxxx> > --- > drivers/nor/cfi_flash.c | 11 +++++++++++ > drivers/nor/cfi_flash.h | 1 + > drivers/nor/cfi_flash_intel.c | 5 ++++- > 3 files changed, 16 insertions(+), 1 deletions(-) > > diff --git a/drivers/nor/cfi_flash.c b/drivers/nor/cfi_flash.c > index fa5e5ee..6f45da6 100644 > --- a/drivers/nor/cfi_flash.c > +++ b/drivers/nor/cfi_flash.c > @@ -886,6 +886,17 @@ void flash_write_cmd (struct flash_info *info, flash_sect_t sect, uint offset, u > flash_write_word(info, cword, addr); > } > > +void flash_write_cmd16 (struct flash_info *info, flash_sect_t sect, uint offset, ushort cmd) > +{ > + > + uchar *addr; > + cfiword_t cword; > + > + addr = flash_make_addr (info, sect, offset); > + cword.w = cmd; > + flash_write_word(info, cword, addr); > +} > + > int flash_isequal (struct flash_info *info, flash_sect_t sect, uint offset, uchar cmd) > { > cfiptr_t cptr; > diff --git a/drivers/nor/cfi_flash.h b/drivers/nor/cfi_flash.h > index 057e56c..d7e6ea2 100644 > --- a/drivers/nor/cfi_flash.h > +++ b/drivers/nor/cfi_flash.h > @@ -189,6 +189,7 @@ extern struct cfi_cmd_set cfi_cmd_set_amd; > > int flash_isset (struct flash_info *info, flash_sect_t sect, uint offset, uchar cmd); > void flash_write_cmd (struct flash_info *info, flash_sect_t sect, uint offset, uchar cmd); > +void flash_write_cmd16 (struct flash_info * info, flash_sect_t sect, uint offset, ushort cmd); > flash_sect_t find_sector (struct flash_info *info, ulong addr); > int flash_status_check (struct flash_info *info, flash_sect_t sector, > uint64_t tout, char *prompt); > diff --git a/drivers/nor/cfi_flash_intel.c b/drivers/nor/cfi_flash_intel.c > index 4344760..96bf33f 100644 > --- a/drivers/nor/cfi_flash_intel.c > +++ b/drivers/nor/cfi_flash_intel.c > @@ -71,7 +71,10 @@ static int intel_flash_write_cfibuffer (struct flash_info *info, ulong dest, con > /* reduce the number of loops by the width of the port */ > cnt = len >> (info->portwidth - 1); > > - flash_write_cmd (info, sector, 0, (uchar) cnt - 1); > + if (cnt >= 0x100) > + flash_write_cmd16 (info, sector, 0, (ushort) cnt - 1); > + else > + flash_write_cmd (info, sector, 0, (uchar) cnt - 1); > while (cnt-- > 0) { > if (bankwidth_is_1(info)) { > *dst.cp++ = *src.cp++; > -- > 1.6.3.3 > > -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox