diff options
author | mifi <mifi@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2008-01-27 14:05:59 +0000 |
---|---|---|
committer | mifi <mifi@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2008-01-27 14:05:59 +0000 |
commit | c882cb089477050eb46f5f9fba90ff52179acd71 (patch) | |
tree | bd76561bffd5afd45beaf8a29d06ea33f688c6ab /src/flash/cfi.c | |
parent | 8d6292d9a070e87bf49d7d2894cd933795b9e3a8 (diff) |
- added autoprobe functionality
- corrected blocksize handling from GDB "info mem" command
(thanks to Øyvind and Spen for these patches)
git-svn-id: svn://svn.berlios.de/openocd/trunk@278 b42882b7-edfa-0310-969c-e2dbd0fdcd60
Diffstat (limited to 'src/flash/cfi.c')
-rw-r--r-- | src/flash/cfi.c | 15 |
1 files changed, 15 insertions, 0 deletions
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; |