summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Roese <sr@denx.de>2008-06-16 10:40:02 +0200
committerStefan Roese <sr@denx.de>2008-06-19 15:08:17 +0200
commitfb8c061ea05fc68d37e2a8b9f8c949d76c8d71a8 (patch)
tree774181d048622d693b0ec16ead3293ecd602eb0b
parenta94f22f08f280905926219e568568964cb9eeb9d (diff)
downloadu-boot-imx-fb8c061ea05fc68d37e2a8b9f8c949d76c8d71a8.zip
u-boot-imx-fb8c061ea05fc68d37e2a8b9f8c949d76c8d71a8.tar.gz
u-boot-imx-fb8c061ea05fc68d37e2a8b9f8c949d76c8d71a8.tar.bz2
cfi-flash: Fix problem in flash_toggle(), busy was not detected reliably
This patch simplifies flash_toggle() (AMD commandset), which is used to detect if a FLASH device is still busy with erase/program operations. On 800MHz Canyonlands/Glacier boards (460EX/GT) the current implementation did not detect the busy state reliably, resulting in non erased sectors etc. This patch now simplifies this function by "just" comparing the complete data-word instead of ANDing it with the command-word (0x40) before the compatison. It is done the same way in the Linux implementation chip_ready() in cfi_cmdset_0002.c. Signed-off-by: Stefan Roese <sr@denx.de>
-rw-r--r--drivers/mtd/cfi_flash.c12
1 files changed, 4 insertions, 8 deletions
diff --git a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c
index d505bc8..c0ea97b 100644
--- a/drivers/mtd/cfi_flash.c
+++ b/drivers/mtd/cfi_flash.c
@@ -581,20 +581,16 @@ static int flash_toggle (flash_info_t * info, flash_sect_t sect,
flash_make_cmd (info, cmd, &cword);
switch (info->portwidth) {
case FLASH_CFI_8BIT:
- retval = ((flash_read8(addr) & cword.c) !=
- (flash_read8(addr) & cword.c));
+ retval = flash_read8(addr) != flash_read8(addr);
break;
case FLASH_CFI_16BIT:
- retval = ((flash_read16(addr) & cword.w) !=
- (flash_read16(addr) & cword.w));
+ retval = flash_read16(addr) != flash_read16(addr);
break;
case FLASH_CFI_32BIT:
- retval = ((flash_read32(addr) & cword.l) !=
- (flash_read32(addr) & cword.l));
+ retval = flash_read32(addr) != flash_read32(addr);
break;
case FLASH_CFI_64BIT:
- retval = ((flash_read64(addr) & cword.ll) !=
- (flash_read64(addr) & cword.ll));
+ retval = flash_read64(addr) != flash_read64(addr);
break;
default:
retval = 0;