flash/nor/stm32lx: use 0 base to autodetect second bank location

Change-Id: I3c296b3e276fcd4d92e4180fc0d2133eebfcc240
Signed-off-by: Paul Fertser <fercerpav@gmail.com>
Reviewed-on: http://openocd.zylin.com/2503
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
This commit is contained in:
Paul Fertser 2015-01-24 13:57:58 +03:00 committed by Spencer Oliver
parent 97c96ac13f
commit 873774992d
3 changed files with 8 additions and 6 deletions

View File

@ -5551,16 +5551,18 @@ The @var{num} parameter is a value shown by @command{flash banks}.
@deffn {Flash Driver} stm32lx @deffn {Flash Driver} stm32lx
All members of the STM32L microcontroller families from ST Microelectronics All members of the STM32L microcontroller families from ST Microelectronics
include internal flash and use ARM Cortex-M3 cores. include internal flash and use ARM Cortex-M3 and Cortex-M0+ cores.
The driver automatically recognizes a number of these chips using The driver automatically recognizes a number of these chips using
the chip identification register, and autoconfigures itself. the chip identification register, and autoconfigures itself.
Note that some devices have been found that have a flash size register that contains Note that some devices have been found that have a flash size register that contains
an invalid value, to workaround this issue you can override the probed value used by an invalid value, to workaround this issue you can override the probed value used by
the flash driver. the flash driver. If you use 0 as the bank base address, it tells the
driver to autodetect the bank location assuming you're configuring the
second bank.
@example @example
flash bank $_FLASHNAME stm32lx 0 0x20000 0 0 $_TARGETNAME flash bank $_FLASHNAME stm32lx 0x08000000 0x20000 0 0 $_TARGETNAME
@end example @end example
Some stm32lx-specific commands are defined: Some stm32lx-specific commands are defined:

View File

@ -715,12 +715,12 @@ static int stm32lx_probe(struct flash_bank *bank)
*/ */
second_bank_base = base_address + second_bank_base = base_address +
stm32lx_info->part_info->first_bank_size_kb * 1024; stm32lx_info->part_info->first_bank_size_kb * 1024;
if (bank->base == second_bank_base) { if (bank->base == second_bank_base || !bank->base) {
/* This is the second bank */ /* This is the second bank */
base_address = second_bank_base; base_address = second_bank_base;
flash_size_in_kb = flash_size_in_kb - flash_size_in_kb = flash_size_in_kb -
stm32lx_info->part_info->first_bank_size_kb; stm32lx_info->part_info->first_bank_size_kb;
} else if (bank->base == 0 || bank->base == base_address) { } else if (bank->base == base_address) {
/* This is the first bank */ /* This is the first bank */
flash_size_in_kb = stm32lx_info->part_info->first_bank_size_kb; flash_size_in_kb = stm32lx_info->part_info->first_bank_size_kb;
} else { } else {

View File

@ -5,4 +5,4 @@ source [find target/stm32l1.cfg]
# Add the second flash bank. # Add the second flash bank.
set _FLASHNAME $_CHIPNAME.flash1 set _FLASHNAME $_CHIPNAME.flash1
flash bank $_FLASHNAME stm32lx 0x8030000 0 0 0 $_TARGETNAME flash bank $_FLASHNAME stm32lx 0 0 0 0 $_TARGETNAME