Add support for 16bit legacy AMD flash
PATCH 1/1 Add support for 16bit legacy AMD flash
Add entry for 512Kx16 AMD flash to jedec_table.
Read out 16bit device id if chipwidth is 16bit
--- drivers/mtd/cfi_flash.c | 44 +++++++++++++++++++++++++++++++++++--------- drivers/mtd/jedec_flash.c | 19 +++++++++++++++++++ 2 files changed, 54 insertions(+), 9 deletions(-)
drivers/mtd/cfi_flash.c +35 -9
@@ -365,6 +365,20 @@ static inline uchar flash_read_uchar (flash_info_t * info, uint offset) }/*----------------------------------------------------------------------- +* read a word at a port width address, assume 16bit bus +*/ +static inline ushort flash_read_word (flash_info_t * info,uint offset) +{ +ushort *addr, retval; + + addr =flash_map (info,0 , offset); + retval =flash_read16 (addr); +flash_unmap (info,0 , offset, addr); +return retval; +} + + +/*----------------------------------------------------------------------- * read a long word by picking the least significant byte of each maximum * port size word. Swap for ppc format. */
@@ -1449,17 +1463,29 @@ static void cmdset_amd_read_jedec_ids(flash_info_t *info)flash_unlock_seq (info,0 );flash_write_cmd (info,0 , info->addr_unlock1,FLASH_CMD_READ_ID );udelay (1000 );/* some flash are slow to respond */ + info->manufacturer_id =flash_read_uchar (info,FLASH_OFFSET_MANUFACTURER_ID ); - info->device_id =flash_read_uchar (info, -FLASH_OFFSET_DEVICE_ID ); -if (info->device_id ==0x7E ) { -/* AMD 3-byte (expanded) device ids */ - info->device_id2 =flash_read_uchar (info, -FLASH_OFFSET_DEVICE_ID2 ); - info->device_id2 <<=8 ; - info->device_id2 |=flash_read_uchar (info, -FLASH_OFFSET_DEVICE_ID3 ); + +switch (info->chipwidth){ +case FLASH_CFI_8BIT : + info->device_id =flash_read_uchar (info, +FLASH_OFFSET_DEVICE_ID ); +if (info->device_id ==0x7E ) { +/* AMD 3-byte (expanded) device ids */ + info->device_id2 =flash_read_uchar (info, +FLASH_OFFSET_DEVICE_ID2 ); + info->device_id2 <<=8 ; + info->device_id2 |=flash_read_uchar (info, +FLASH_OFFSET_DEVICE_ID3 ); + } +break ; +case FLASH_CFI_16BIT : + info->device_id =flash_read_word (info, +FLASH_OFFSET_DEVICE_ID ); +break ; +default : +break ; }flash_write_cmd (info,0 ,0 ,AMD_CMD_RESET ); }
drivers/mtd/jedec_flash.c +19 -0
@@ -216,6 +216,25 @@ static const struct amd_flash_info jedec_table[] = { } },#endif +#ifdef CFG_FLASH_LEGACY_512Kx16 + { + .mfr_id = MANUFACTURER_AMD, + .dev_id = AM29LV400BB, + .name = "AMD AM29LV400BB", + .uaddr = { + [1] = MTD_UADDR_0x0555_0x02AA /* x16 */ + }, + .DevSize = SIZE_512KiB, + .CmdSet = CFI_CMDSET_AMD_LEGACY, + .NumEraseRegions= 4, + .regions = { + ERASEINFO(0x04000,1), + ERASEINFO(0x02000,2), + ERASEINFO(0x08000,1), + ERASEINFO(0x10000,7), + } + }, +#endif }; static inline void fill_info(flash_info_t *info, const struct amd_flash_info *jedec_entry, ulong base)
Signature · 1 line
1.5.4.4
PATCH 1/1 Add support for 16bit legacy AMD flash
Quoted 4 lines · Tor Krill
Add entry for 512Kx16 AMD flash to
jedec_table.
Read out 16bit device id if chipwidth is 16bitSigned-off-by Tor Krill <[email protected]>
Looks good. Just some nitpicking comments below.
Quoted 12 lines
--- drivers/mtd/cfi_flash.c | 44 +++++++++++++++++++++++++++++++++++--------- drivers/mtd/jedec_flash.c | 19 +++++++++++++++++++ 2 files changed, 54 insertions(+), 9 deletions(-)drivers/mtd/cfi_flash.c +0
-0@@ -365,6 +365,20 @@ static inline uchar flash_read_uchar (flash_info_t * info, uint offset) }
drivers/mtd/cfi_flash.c static inline uchar flash_read_uchar (flash_info_t * · line 375
Quoted 10 lines
drivers/mtd/cfi_flash.c +8
-0/*----------------------------------------------------------------------- +* read a word at a port width address, assume 16bit bus +*/ +static inline ushort flash_read_word (flash_info_t * info,uint offset) +{ +ushort *addr, retval; + + addr =flash_map (info,0 , offset); + retval =flash_read16 (addr);
No space before '(' here...
drivers/mtd/cfi_flash.c static inline uchar flash_read_uchar (flash_info_t * info, uint offset) · line 376
Quoted 1 line
drivers/mtd/cfi_flash.c +1
-0+flash_unmap (info,0 , offset, addr);
... and space before '(' here. Please stick to one coding style in one file. Since this file uses the space before the '(' you should use it on all calls.
Quoted 16 lines
drivers/mtd/cfi_flash.c +6
-1+return retval; +} + + +/*----------------------------------------------------------------------- * read a long word by picking the least significant byte of each maximum * port size word. Swap for ppc format. */ @@ -1449,17 +1463,29 @@ static void cmdset_amd_read_jedec_ids(flash_info_t *info) flash_unlock_seq(info, 0);flash_write_cmd (info,0 , info->addr_unlock1,FLASH_CMD_READ_ID );udelay (1000 );/* some flash are slow to respond */ + info->manufacturer_id =flash_read_uchar (info,FLASH_OFFSET_MANUFACTURER_ID ); - info->device_id = flash_read_uchar (info,
drivers/mtd/cfi_flash.c static void cmdset_amd_read_jedec_ids(flash_info_t · line 1470
Quoted 10 lines
drivers/mtd/cfi_flash.c +2
-8- FLASH_OFFSET_DEVICE_ID); -if (info->device_id ==0x7E ) { -/* AMD 3-byte (expanded) device ids */ - info->device_id2 =flash_read_uchar (info, -FLASH_OFFSET_DEVICE_ID2 ); - info->device_id2 <<=8 ; - info->device_id2 |=flash_read_uchar (info, -FLASH_OFFSET_DEVICE_ID3 ); + +switch (info->chipwidth){
switch (info->chipwidth) {Quoted 51 lines
drivers/mtd/cfi_flash.c +18
-0+case FLASH_CFI_8BIT : + info->device_id =flash_read_uchar (info, +FLASH_OFFSET_DEVICE_ID ); +if (info->device_id ==0x7E ) { +/* AMD 3-byte (expanded) device ids */ + info->device_id2 =flash_read_uchar (info, +FLASH_OFFSET_DEVICE_ID2 ); + info->device_id2 <<=8 ; + info->device_id2 |=flash_read_uchar (info, +FLASH_OFFSET_DEVICE_ID3 ); + } +break ; +case FLASH_CFI_16BIT : + info->device_id =flash_read_word (info, +FLASH_OFFSET_DEVICE_ID ); +break ; +default : +break ; }flash_write_cmd (info,0 ,0 ,AMD_CMD_RESET ); }drivers/mtd/jedec_flash.c +19
-0@@ -216,6 +216,25 @@ static const struct amd_flash_info jedec_table[] = { } },#endif +#ifdef CFG_FLASH_LEGACY_512Kx16 + { + .mfr_id = MANUFACTURER_AMD, + .dev_id = AM29LV400BB, + .name = "AMD AM29LV400BB", + .uaddr = { + [1] = MTD_UADDR_0x0555_0x02AA /* x16 */ + }, + .DevSize = SIZE_512KiB, + .CmdSet = CFI_CMDSET_AMD_LEGACY, + .NumEraseRegions= 4, + .regions = { + ERASEINFO(0x04000,1), + ERASEINFO(0x02000,2), + ERASEINFO(0x08000,1), + ERASEINFO(0x10000,7), + } + }, +#endif }; static inline void fill_info(flash_info_t *info, const struct
Quoted 1 line
amd_flash_info*jedec_entry, ulong base)
Please fix and resubmit. Thanks.
Best regards,
Stefan
=====================================================================
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office at denx.de
=====================================================================
PATCH 1/1 Add support for 16bit legacy AMD flash, V2
Add entry for 512Kx16 AMD flash to jedec_table.
Read out 16bit device id if chipwidth is 16bit.
Fixed coding style after Stefans feedback
--- drivers/mtd/cfi_flash.c | 44 +++++++++++++++++++++++++++++++++++--------- drivers/mtd/jedec_flash.c | 19 +++++++++++++++++++ 2 files changed, 54 insertions(+), 9 deletions(-)
drivers/mtd/cfi_flash.c +35 -9
@@ -365,6 +365,20 @@ static inline uchar flash_read_uchar (flash_info_t * info, uint offset) }/*----------------------------------------------------------------------- +* read a word at a port width address, assume 16bit bus +*/ +static inline ushort flash_read_word (flash_info_t * info,uint offset) +{ +ushort *addr, retval; + + addr =flash_map (info,0 , offset); + retval =flash_read16 (addr); +flash_unmap (info,0 , offset, addr); +return retval; +} + + +/*----------------------------------------------------------------------- * read a long word by picking the least significant byte of each maximum * port size word. Swap for ppc format. */
@@ -1449,17 +1463,29 @@ static void cmdset_amd_read_jedec_ids(flash_info_t *info)flash_unlock_seq (info,0 );flash_write_cmd (info,0 , info->addr_unlock1,FLASH_CMD_READ_ID );udelay (1000 );/* some flash are slow to respond */ + info->manufacturer_id =flash_read_uchar (info,FLASH_OFFSET_MANUFACTURER_ID ); - info->device_id =flash_read_uchar (info, -FLASH_OFFSET_DEVICE_ID ); -if (info->device_id ==0x7E ) { -/* AMD 3-byte (expanded) device ids */ - info->device_id2 =flash_read_uchar (info, -FLASH_OFFSET_DEVICE_ID2 ); - info->device_id2 <<=8 ; - info->device_id2 |=flash_read_uchar (info, -FLASH_OFFSET_DEVICE_ID3 ); + +switch (info->chipwidth){ +case FLASH_CFI_8BIT : + info->device_id =flash_read_uchar (info, +FLASH_OFFSET_DEVICE_ID ); +if (info->device_id ==0x7E ) { +/* AMD 3-byte (expanded) device ids */ + info->device_id2 =flash_read_uchar (info, +FLASH_OFFSET_DEVICE_ID2 ); + info->device_id2 <<=8 ; + info->device_id2 |=flash_read_uchar (info, +FLASH_OFFSET_DEVICE_ID3 ); + } +break ; +case FLASH_CFI_16BIT : + info->device_id =flash_read_word (info, +FLASH_OFFSET_DEVICE_ID ); +break ; +default : +break ; }flash_write_cmd (info,0 ,0 ,AMD_CMD_RESET ); }
drivers/mtd/jedec_flash.c +19 -0
@@ -216,6 +216,25 @@ static const struct amd_flash_info jedec_table[] = { } },#endif +#ifdef CFG_FLASH_LEGACY_512Kx16 + { + .mfr_id = MANUFACTURER_AMD, + .dev_id = AM29LV400BB, + .name = "AMD AM29LV400BB", + .uaddr = { + [1] = MTD_UADDR_0x0555_0x02AA /* x16 */ + }, + .DevSize = SIZE_512KiB, + .CmdSet = CFI_CMDSET_AMD_LEGACY, + .NumEraseRegions= 4, + .regions = { + ERASEINFO(0x04000,1), + ERASEINFO(0x02000,2), + ERASEINFO(0x08000,1), + ERASEINFO(0x10000,7), + } + }, +#endif }; static inline void fill_info(flash_info_t *info, const struct amd_flash_info *jedec_entry, ulong base)
Signature · 1 line
1.5.4.4
PATCH 1/1 Add support for 16bit legacy AMD flash, V2
Quoted 3 lines · Tor Krill
Add entry for 512Kx16 AMD flash to
jedec_table.
Read out 16bit device id if chipwidth is 16bit.
Fixed coding style after Stefans feedback
Added to cfi-flash repository. Thanks.
Best regards,
Stefan
=====================================================================
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office at denx.de
=====================================================================