stm32l4x: Fix stm32l4x dual bank support

The dual bank option was being incorrectly read and the
bank b base incorrectly set. This is tested with 512kB
dual bank configuration but needs checking with other
configurations (e.g. 256kb).

This fix should remove the need to use a mass_erase command
prior to programming with OpenOCD

Change-Id: I6e920f11b794c4c1fd34c0e44fb8fa01e7fe8f85
Signed-off-by: Alex J Lennon <alex.lennon@s19.tech>
Signed-off-by: Tomas Vanek <vanekt@fbl.cz>
Reviewed-on: http://openocd.zylin.com/4641
Tested-by: jenkins
Reviewed-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
Reviewed-by: Thomas Søhus <soehus@gmail.com>
log_output
Alex J Lennon 2018-08-02 17:59:24 +01:00 committed by Tomas Vanek
parent 1b864d6e49
commit 20113201df
1 changed files with 7 additions and 7 deletions

View File

@ -93,7 +93,7 @@
/* STM32_FLASH_OBR bit definitions (reading) */
#define OPT_DUALBANK 21 /* dual flash bank only */
#define OPT_DUALBANK (1 << 21) /* dual flash bank only */
/* register unlock keys */
@ -631,12 +631,6 @@ static int stm32l4_probe(struct flash_bank *bank)
if (retval != ERROR_OK)
return retval;
/* only devices with < 1024 kiB may be set to single bank dual banks */
if ((flash_size_in_kb == 1024) || !(options & OPT_DUALBANK))
stm32l4_info->bank2_start = 256;
else
stm32l4_info->bank2_start = flash_size_in_kb << 9;
/* did we assign flash size? */
assert((flash_size_in_kb != 0xffff) && flash_size_in_kb);
@ -646,6 +640,12 @@ static int stm32l4_probe(struct flash_bank *bank)
/* check that calculation result makes sense */
assert(num_pages > 0);
/* only devices with < 1024 kiB may be set to single bank dual banks */
if ((flash_size_in_kb == 1024) || !(options & OPT_DUALBANK))
stm32l4_info->bank2_start = 256;
else
stm32l4_info->bank2_start = num_pages / 2;
if (bank->sectors) {
free(bank->sectors);
bank->sectors = NULL;