From: <oh...@ma...> - 2009-04-15 17:17:47
|
Author: oharboe Date: 2009-04-15 17:17:44 +0200 (Wed, 15 Apr 2009) New Revision: 1459 Modified: trunk/src/flash/cfi.c Log: Nico Coesel <nc...@de...> Chip width / bus width bug in cfi driver Modified: trunk/src/flash/cfi.c =================================================================== --- trunk/src/flash/cfi.c 2009-04-15 15:13:36 UTC (rev 1458) +++ trunk/src/flash/cfi.c 2009-04-15 15:17:44 UTC (rev 1459) @@ -1589,7 +1589,7 @@ 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 @@ return ERROR_FLASH_OPERATION_FAILED; } + bufferwsize/=(bank->bus_width / bank->chip_width); + + /* Check for valid size */ if (wordcount > bufferwsize) { @@ -1725,7 +1728,7 @@ 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 @@ return ERROR_FLASH_OPERATION_FAILED; } + bufferwsize/=(bank->bus_width / bank->chip_width); + /* Check for valid size */ if (wordcount > bufferwsize) { @@ -1946,7 +1951,8 @@ { 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 @@ 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) |