cfi_flash_intel: support 1024b buffer write
PATCH 1/1 cfi_flash_intel: support 1024b buffer write
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.
--- 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(-)
drivers/nor/cfi_flash.c +11 -0
@@ -886,6 +886,17 @@ void flash_write_cmd (struct flash_info *info, flash_sect_t sect, uint offset, uflash_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;
drivers/nor/cfi_flash.h +1 -0
@@ -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);
drivers/nor/cfi_flash_intel.c +4 -1
@@ -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++;
Signature · 7 lines
1.6.3.3 _______________________________________________ barebox mailing list [email protected] http://lists.infradead.org/mailman/listinfo/barebox
Quoted 3 lines · Eric Bénard
newer Numonyx Strataflash P3x have 1024b buffer, thus, it's possible to write a buffer size of
0x200which the actualflash_write_cmddoesn'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
Quoted 62 lines
Signed-off-by Eric Bénard <[email protected]>--- 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(-)drivers/nor/cfi_flash.c +11
-0@@ -886,6 +886,17 @@ void flash_write_cmd (struct flash_info *info, flash_sect_t sect, uint offset, uflash_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;drivers/nor/cfi_flash.h +1
-0@@ -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);drivers/nor/cfi_flash_intel.c +4
-1@@ -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++;Signature · 1 line
1.6.3.3
Signature · 9 lines
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 [email protected] http://lists.infradead.org/mailman/listinfo/barebox
Hi Sascha,
Quoted 7 lines · Sascha Hauer
Quoted 3 lines · Eric Bénard
newer Numonyx Strataflash P3x have 1024b buffer, thus, it's possible to write a buffer size of
0x200which the actualflash_write_cmddoesn't permit as it's limited to a uchar parameter.So I guess these chips have 16 data lines?
actual flash_write_cmd is also used on chips with 16 data lines (like P30 or P33 Numonyx).
Quoted 4 lines
Unfortunately this won't work when two of these are parallel. You'd have to duplicate the command for the upper 16 bit.
Does actual flash_write_cmd works when 2 chips are parallel ?
Eric
Quoted 52 lines
Sascha
Quoted 50 lines
Signed-off-by Eric Bénard<[email protected]>--- 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(-)drivers/nor/cfi_flash.c +11
-0@@ -886,6 +886,17 @@ void flash_write_cmd (struct flash_info *info, flash_sect_t sect, uint offset, uflash_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;drivers/nor/cfi_flash.h +1
-0@@ -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);drivers/nor/cfi_flash_intel.c +0
-0@@ -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 );
Quoted 13 lines
Quoted 9 lines
drivers/nor/cfi_flash_intel.c +4
-2-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++; --Quoted 3 lines
1.6.3.3
_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox
Quoted 4 lines · Eric Bénard
Hi Sascha,
Quoted 1 line · Sascha Hauer
On Fri, Jul 30, 2010 at 11:49:55AM +0200, Eric Bénard wrote:
Quoted 8 lines
Quoted 6 lines
Quoted 3 lines
newer Numonyx Strataflash P3x have 1024b buffer, thus, it's possible to write a buffer size of
0x200which the actualflash_write_cmddoesn't permit as it's limited to a uchar parameter.So I guess these chips have 16 data lines?
actual
flash_write_cmdis also used on chips with 16 data lines (like P30 or P33 Numonyx).
Yes. I meant that 8 wouldn't be enough because the command gets wider than 8bit.
Quoted 6 lines
Quoted 5 lines
Unfortunately this won't work when two of these are parallel. You'd have to duplicate the command for the upper 16 bit.
Does actual
flash_write_cmdworks when 2 chips are parallel ?
At least it's supposed to ;)
See flash_make_cmd, it iterates over all bytes in info->portwidth and writes cmd or 0 into the buffer depending on info->chipwidth.
Sascha
Signature · 9 lines
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 [email protected] http://lists.infradead.org/mailman/listinfo/barebox