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/at91sam7.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/at91sam7.c')
-rw-r--r-- | src/flash/at91sam7.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/flash/at91sam7.c b/src/flash/at91sam7.c index cf354794..03477423 100644 --- a/src/flash/at91sam7.c +++ b/src/flash/at91sam7.c @@ -57,6 +57,7 @@ int at91sam7_erase(struct flash_bank_s *bank, int first, int last); int at91sam7_protect(struct flash_bank_s *bank, int set, int first, int last); int at91sam7_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 count); int at91sam7_probe(struct flash_bank_s *bank); +int at91sam7_auto_probe(struct flash_bank_s *bank); int at91sam7_erase_check(struct flash_bank_s *bank); int at91sam7_protect_check(struct flash_bank_s *bank); int at91sam7_info(struct flash_bank_s *bank, char *buf, int buf_size); @@ -76,6 +77,7 @@ flash_driver_t at91sam7_flash = .protect = at91sam7_protect, .write = at91sam7_write, .probe = at91sam7_probe, + .auto_probe = at91sam7_auto_probe, .erase_check = at91sam7_erase_check, .protect_check = at91sam7_protect_check, .info = at91sam7_info @@ -617,6 +619,7 @@ int at91sam7_flash_bank_command(struct command_context_s *cmd_ctx, char *cmd, ch at91sam7_info = malloc(sizeof(at91sam7_flash_bank_t)); bank->driver_priv = at91sam7_info; + at91sam7_info->probed = 0; /* part wasn't probed for info yet */ at91sam7_info->cidr = 0; @@ -806,6 +809,7 @@ int at91sam7_probe(struct flash_bank_s *bank) * if this is an at91sam7, it has the configured flash */ at91sam7_flash_bank_t *at91sam7_info = bank->driver_priv; + at91sam7_info->probed = 0; if (at91sam7_info->cidr == 0) { @@ -818,9 +822,20 @@ int at91sam7_probe(struct flash_bank_s *bank) return ERROR_FLASH_OPERATION_FAILED; } + at91sam7_info->probed = 1; + return ERROR_OK; } + +int at91sam7_auto_probe(struct flash_bank_s *bank) +{ + at91sam7_flash_bank_t *at91sam7_info = bank->driver_priv; + if (at91sam7_info->probed) + return ERROR_OK; + return at91sam7_probe(bank); +} + int at91sam7_info(struct flash_bank_s *bank, char *buf, int buf_size) { int printed, flashplane; |