From c882cb089477050eb46f5f9fba90ff52179acd71 Mon Sep 17 00:00:00 2001 From: mifi Date: Sun, 27 Jan 2008 14:05:59 +0000 Subject: - added autoprobe functionality - corrected blocksize handling from GDB "info mem" command (thanks to Øyvind and Spen for these patches) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: svn://svn.berlios.de/openocd/trunk@278 b42882b7-edfa-0310-969c-e2dbd0fdcd60 --- src/flash/cfi.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src/flash/cfi.c') diff --git a/src/flash/cfi.c b/src/flash/cfi.c index 395cf8af..c5293385 100644 --- a/src/flash/cfi.c +++ b/src/flash/cfi.c @@ -43,6 +43,7 @@ int cfi_erase(struct flash_bank_s *bank, int first, int last); int cfi_protect(struct flash_bank_s *bank, int set, int first, int last); int cfi_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 count); int cfi_probe(struct flash_bank_s *bank); +int cfi_auto_probe(struct flash_bank_s *bank); int cfi_erase_check(struct flash_bank_s *bank); int cfi_protect_check(struct flash_bank_s *bank); int cfi_info(struct flash_bank_s *bank, char *buf, int buf_size); @@ -64,6 +65,7 @@ flash_driver_t cfi_flash = .protect = cfi_protect, .write = cfi_write, .probe = cfi_probe, + .auto_probe = cfi_auto_probe, .erase_check = cfi_erase_check, .protect_check = cfi_protect_check, .info = cfi_info @@ -617,6 +619,7 @@ int cfi_flash_bank_command(struct command_context_s *cmd_ctx, char *cmd, char ** } cfi_info = malloc(sizeof(cfi_flash_bank_t)); + cfi_info->probed = 0; bank->driver_priv = cfi_info; cfi_info->write_algorithm = NULL; @@ -1864,6 +1867,8 @@ int cfi_probe(struct flash_bank_s *bank) u32 unlock1 = 0x555; u32 unlock2 = 0x2aa; + cfi_info->probed = 0; + /* JEDEC standard JESD21C uses 0x5555 and 0x2aaa as unlock addresses, * while CFI compatible AMD/Spansion flashes use 0x555 and 0x2aa */ @@ -2071,10 +2076,20 @@ int cfi_probe(struct flash_bank_s *bank) } } } + + cfi_info->probed = 1; return ERROR_OK; } +int cfi_auto_probe(struct flash_bank_s *bank) +{ + cfi_flash_bank_t *cfi_info = bank->driver_priv; + if (cfi_info->probed) + return ERROR_OK; + return cfi_probe(bank); +} + int cfi_erase_check(struct flash_bank_s *bank) { cfi_flash_bank_t *cfi_info = bank->driver_priv; -- cgit v1.2.3