Nico Coesel <ncoesel@dealogic.nl> Chip width / bus width bug in cfi driver
git-svn-id: svn://svn.berlios.de/openocd/trunk@1459 b42882b7-edfa-0310-969c-e2dbd0fdcd60
This commit is contained in:
parent
0bc7d2c692
commit
c257228048
|
@ -1589,7 +1589,7 @@ int cfi_intel_write_words(struct flash_bank_s *bank, u8 *word, u32 wordcount, u3
|
|||
u8 command[8];
|
||||
|
||||
/* Calculate buffer size and boundary mask */
|
||||
u32 buffersize = 1UL << cfi_info->max_buf_write_size;
|
||||
u32 buffersize = (1UL << cfi_info->max_buf_write_size) * (bank->bus_width / bank->chip_width);
|
||||
u32 buffermask = buffersize-1;
|
||||
u32 bufferwsize;
|
||||
|
||||
|
@ -1609,6 +1609,9 @@ int cfi_intel_write_words(struct flash_bank_s *bank, u8 *word, u32 wordcount, u3
|
|||
return ERROR_FLASH_OPERATION_FAILED;
|
||||
}
|
||||
|
||||
bufferwsize/=(bank->bus_width / bank->chip_width);
|
||||
|
||||
|
||||
/* Check for valid size */
|
||||
if (wordcount > bufferwsize)
|
||||
{
|
||||
|
@ -1725,7 +1728,7 @@ int cfi_spansion_write_words(struct flash_bank_s *bank, u8 *word, u32 wordcount,
|
|||
cfi_spansion_pri_ext_t *pri_ext = cfi_info->pri_ext;
|
||||
|
||||
/* Calculate buffer size and boundary mask */
|
||||
u32 buffersize = 1UL << cfi_info->max_buf_write_size;
|
||||
u32 buffersize = (1UL << cfi_info->max_buf_write_size) * (bank->bus_width / bank->chip_width);
|
||||
u32 buffermask = buffersize-1;
|
||||
u32 bufferwsize;
|
||||
|
||||
|
@ -1745,6 +1748,8 @@ int cfi_spansion_write_words(struct flash_bank_s *bank, u8 *word, u32 wordcount,
|
|||
return ERROR_FLASH_OPERATION_FAILED;
|
||||
}
|
||||
|
||||
bufferwsize/=(bank->bus_width / bank->chip_width);
|
||||
|
||||
/* Check for valid size */
|
||||
if (wordcount > bufferwsize)
|
||||
{
|
||||
|
@ -1946,7 +1951,8 @@ int cfi_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 count)
|
|||
{
|
||||
if (retval == ERROR_TARGET_RESOURCE_NOT_AVAILABLE)
|
||||
{
|
||||
u32 buffersize = 1UL << cfi_info->max_buf_write_size;
|
||||
//adjust buffersize for chip width
|
||||
u32 buffersize = (1UL << cfi_info->max_buf_write_size) * (bank->bus_width / bank->chip_width);
|
||||
u32 buffermask = buffersize-1;
|
||||
u32 bufferwsize;
|
||||
|
||||
|
@ -1959,6 +1965,8 @@ int cfi_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 count)
|
|||
LOG_ERROR("Unsupported chip width %d", bank->chip_width);
|
||||
return ERROR_FLASH_OPERATION_FAILED;
|
||||
}
|
||||
|
||||
bufferwsize/=(bank->bus_width / bank->chip_width);
|
||||
|
||||
/* fall back to memory writes */
|
||||
while (count >= bank->bus_width)
|
||||
|
|
Loading…
Reference in New Issue