aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSpencer Oliver <spen@spen-soft.co.uk>2012-11-19 12:46:33 +0000
committerAndreas Fritiofson <andreas.fritiofson@gmail.com>2012-12-31 19:08:10 +0000
commit9060ae7de5967b76f7dfa69939a00c56830f74a7 (patch)
treef3db8177392f8a7b5d8ab190cdc69bcd660d5674 /src
parentaebe7596f647d1d5a37cf5668063b74376d7c253 (diff)
downloadriscv-openocd-9060ae7de5967b76f7dfa69939a00c56830f74a7.zip
riscv-openocd-9060ae7de5967b76f7dfa69939a00c56830f74a7.tar.gz
riscv-openocd-9060ae7de5967b76f7dfa69939a00c56830f74a7.tar.bz2
stm32f1x: fix stm32f0/f3 broken unlock
The STM32F0 and F3 devices use a different default RDP to configure a unlocked device, make sure we use that. Change-Id: I170779461412c4c202c2cfc8d90baedb7e388150 Signed-off-by: Spencer Oliver <spen@spen-soft.co.uk> Reviewed-on: http://openocd.zylin.com/984 Tested-by: jenkins Reviewed-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
Diffstat (limited to 'src')
-rw-r--r--src/flash/nor/stm32f1x.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/flash/nor/stm32f1x.c b/src/flash/nor/stm32f1x.c
index ab6cca9..2d86e56 100644
--- a/src/flash/nor/stm32f1x.c
+++ b/src/flash/nor/stm32f1x.c
@@ -122,6 +122,7 @@ struct stm32x_flash_bank {
bool has_dual_banks;
/* used to access dual flash bank stm32xl */
uint32_t register_base;
+ uint16_t default_rdp;
int user_data_offset;
};
@@ -291,7 +292,7 @@ static int stm32x_erase_options(struct flash_bank *bank)
/* clear readout protection and complementary option bytes
* this will also force a device unlock if set */
- stm32x_info->option_bytes.RDP = 0x5AA5;
+ stm32x_info->option_bytes.RDP = stm32x_info->default_rdp;
return ERROR_OK;
}
@@ -857,6 +858,9 @@ static int stm32x_probe(struct flash_bank *bank)
stm32x_info->register_base = FLASH_REG_BASE_B0;
stm32x_info->user_data_offset = 10;
+ /* default factory protection level */
+ stm32x_info->default_rdp = 0x5AA5;
+
/* read stm32 device id register */
int retval = stm32x_get_device_id(bank, &device_id);
if (retval != ERROR_OK)
@@ -896,6 +900,7 @@ static int stm32x_probe(struct flash_bank *bank)
stm32x_info->ppage_size = 2;
max_flash_size_in_kb = 256;
stm32x_info->user_data_offset = 16;
+ stm32x_info->default_rdp = 0x55AA;
break;
case 0x428: /* value line High density */
page_size = 2048;
@@ -913,12 +918,14 @@ static int stm32x_probe(struct flash_bank *bank)
stm32x_info->ppage_size = 2;
max_flash_size_in_kb = 256;
stm32x_info->user_data_offset = 16;
+ stm32x_info->default_rdp = 0x55AA;
break;
case 0x440: /* stm32f0x */
page_size = 1024;
stm32x_info->ppage_size = 4;
max_flash_size_in_kb = 64;
stm32x_info->user_data_offset = 16;
+ stm32x_info->default_rdp = 0x55AA;
break;
default:
LOG_WARNING("Cannot identify target as a STM32 family.");