diff options
author | Spencer Oliver <spen@spen-soft.co.uk> | 2012-11-19 12:46:33 +0000 |
---|---|---|
committer | Andreas Fritiofson <andreas.fritiofson@gmail.com> | 2012-12-31 19:08:10 +0000 |
commit | 9060ae7de5967b76f7dfa69939a00c56830f74a7 (patch) | |
tree | f3db8177392f8a7b5d8ab190cdc69bcd660d5674 /src | |
parent | aebe7596f647d1d5a37cf5668063b74376d7c253 (diff) |
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.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/flash/nor/stm32f1x.c b/src/flash/nor/stm32f1x.c index ab6cca9c..2d86e566 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."); |