From 6549d376e49a3dd4071a6cb4420bbba8f1ecf9c5 Mon Sep 17 00:00:00 2001 From: oharboe Date: Wed, 2 Apr 2008 14:40:35 +0000 Subject: fix flash info - now reports erased state properly git-svn-id: svn://svn.berlios.de/openocd/trunk@534 b42882b7-edfa-0310-969c-e2dbd0fdcd60 --- src/flash/flash.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) (limited to 'src/flash/flash.c') diff --git a/src/flash/flash.c b/src/flash/flash.c index a0c89841..d5159b97 100644 --- a/src/flash/flash.c +++ b/src/flash/flash.c @@ -334,7 +334,11 @@ int handle_flash_info_command(struct command_context_s *cmd_ctx, char *cmd, char char buf[1024]; /* attempt auto probe */ - p->driver->auto_probe(p); + if ((retval = p->driver->auto_probe(p)) != ERROR_OK) + return retval; + + if ((retval = p->driver->erase_check(p)) != ERROR_OK) + return retval; command_print(cmd_ctx, "#%i: %s at 0x%8.8x, size 0x%8.8x, buswidth %i, chipwidth %i", i, p->driver->name, p->base, p->size, p->bus_width, p->chip_width); @@ -1049,3 +1053,51 @@ int handle_flash_auto_erase_command(struct command_context_s *cmd_ctx, char *cmd return ERROR_OK; } + + +int default_flash_blank_check(struct flash_bank_s *bank) +{ + target_t *target = bank->target; + u8 buffer[1024]; + int buffer_size=sizeof(buffer); + int i; + int nBytes; + + if (bank->target->state != TARGET_HALTED) + { + return ERROR_TARGET_NOT_HALTED; + } + + + for (i = 0; i < bank->num_sectors; i++) + { + int j; + bank->sectors[i].is_erased = 1; + + for (j=0; jsectors[i].size; j+=buffer_size) + { + int chunk; + int retval; + chunk=buffer_size; + if (chunk>(j-bank->sectors[i].size)) + { + chunk=(j-bank->sectors[i].size); + } + + retval=target->type->read_memory(target, bank->base + bank->sectors[i].offset, 4, chunk/4, buffer); + if (retval!=ERROR_OK) + return retval; + + for (nBytes = 0; nBytes < chunk; nBytes++) + { + if (buffer[nBytes] != 0xFF) + { + bank->sectors[i].is_erased = 0; + break; + } + } + } + } + + return ERROR_OK; +} -- cgit v1.2.3