From 873774992d8739cf08095a03d55fec49cd4b5987 Mon Sep 17 00:00:00 2001 From: Paul Fertser Date: Sat, 24 Jan 2015 13:57:58 +0300 Subject: [PATCH] flash/nor/stm32lx: use 0 base to autodetect second bank location Change-Id: I3c296b3e276fcd4d92e4180fc0d2133eebfcc240 Signed-off-by: Paul Fertser Reviewed-on: http://openocd.zylin.com/2503 Tested-by: jenkins Reviewed-by: Spencer Oliver --- doc/openocd.texi | 8 +++++--- src/flash/nor/stm32lx.c | 4 ++-- tcl/target/stm32l1x_dual_bank.cfg | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/doc/openocd.texi b/doc/openocd.texi index a97ad8567..18e18b983 100644 --- a/doc/openocd.texi +++ b/doc/openocd.texi @@ -5551,16 +5551,18 @@ The @var{num} parameter is a value shown by @command{flash banks}. @deffn {Flash Driver} stm32lx 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 chip identification register, and autoconfigures itself. 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 -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 -flash bank $_FLASHNAME stm32lx 0 0x20000 0 0 $_TARGETNAME +flash bank $_FLASHNAME stm32lx 0x08000000 0x20000 0 0 $_TARGETNAME @end example Some stm32lx-specific commands are defined: diff --git a/src/flash/nor/stm32lx.c b/src/flash/nor/stm32lx.c index 6858d5afa..db3897ba6 100644 --- a/src/flash/nor/stm32lx.c +++ b/src/flash/nor/stm32lx.c @@ -715,12 +715,12 @@ static int stm32lx_probe(struct flash_bank *bank) */ second_bank_base = base_address + 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 */ base_address = second_bank_base; flash_size_in_kb = flash_size_in_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 */ flash_size_in_kb = stm32lx_info->part_info->first_bank_size_kb; } else { diff --git a/tcl/target/stm32l1x_dual_bank.cfg b/tcl/target/stm32l1x_dual_bank.cfg index 7420b315e..a3f7413a0 100644 --- a/tcl/target/stm32l1x_dual_bank.cfg +++ b/tcl/target/stm32l1x_dual_bank.cfg @@ -5,4 +5,4 @@ source [find target/stm32l1.cfg] # Add the second flash bank. set _FLASHNAME $_CHIPNAME.flash1 -flash bank $_FLASHNAME stm32lx 0x8030000 0 0 0 $_TARGETNAME +flash bank $_FLASHNAME stm32lx 0 0 0 0 $_TARGETNAME