X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Fflash%2Fcfi.c;h=c52933854ebe6bd00cb14fc7f5da247cb9c54bf1;hb=c882cb089477050eb46f5f9fba90ff52179acd71;hp=395cf8af97c343eea72ad31c8725bcdfaffaefaf;hpb=8d6292d9a070e87bf49d7d2894cd933795b9e3a8;p=openocd.git diff --git a/src/flash/cfi.c b/src/flash/cfi.c index 395cf8af97..c52933854e 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;