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
parent
1b864d6e49
commit
20113201df
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue