flash: nor: mdr: do not mass erase when clearing INFO memory 53/3853/2
authorPaul Fertser <fercerpav@gmail.com>
Thu, 3 Nov 2016 14:31:33 +0000 (17:31 +0300)
committerFreddie Chopin <freddie.chopin@gmail.com>
Fri, 4 Nov 2016 22:04:58 +0000 (22:04 +0000)
The MDR parts have two kinds of memory: main (regular memory-mapped
memory for code and data) and "info" (not memory-mapped). When OpenOCD
is requested to erase the info memory block, it should do just that,
instead of erasing everything including main memory.

Change-Id: I498142ca50d4a7b669b7776180b0dbcea63a5328
Reported-by: Eldar Khayrullin <eldar.khayrullin@mail.ru>
Signed-off-by: Paul Fertser <fercerpav@gmail.com>
Reviewed-on: http://openocd.zylin.com/3853
Tested-by: jenkins
Reviewed-by: Eldar Khayrullin <eldar.khayrullin@mail.ru>
Reviewed-by: Freddie Chopin <freddie.chopin@gmail.com>
src/flash/nor/mdr.c

index 374cb6f..8ceb1bf 100644 (file)
@@ -171,7 +171,8 @@ static int mdr_erase(struct flash_bank *bank, int first, int last)
        if (retval != ERROR_OK)
                goto reset_pg_and_lock;
 
-       if ((first == 0) && (last == (bank->num_sectors - 1))) {
+       if ((first == 0) && (last == (bank->num_sectors - 1)) &&
+               !mdr_info->mem_type) {
                retval = mdr_mass_erase(bank);
                goto reset_pg_and_lock;
        }