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>__archive__
parent
aebe7596f6
commit
9060ae7de5
|
@ -122,6 +122,7 @@ struct stm32x_flash_bank {
|
||||||
bool has_dual_banks;
|
bool has_dual_banks;
|
||||||
/* used to access dual flash bank stm32xl */
|
/* used to access dual flash bank stm32xl */
|
||||||
uint32_t register_base;
|
uint32_t register_base;
|
||||||
|
uint16_t default_rdp;
|
||||||
int user_data_offset;
|
int user_data_offset;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -291,7 +292,7 @@ static int stm32x_erase_options(struct flash_bank *bank)
|
||||||
|
|
||||||
/* clear readout protection and complementary option bytes
|
/* clear readout protection and complementary option bytes
|
||||||
* this will also force a device unlock if set */
|
* 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;
|
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->register_base = FLASH_REG_BASE_B0;
|
||||||
stm32x_info->user_data_offset = 10;
|
stm32x_info->user_data_offset = 10;
|
||||||
|
|
||||||
|
/* default factory protection level */
|
||||||
|
stm32x_info->default_rdp = 0x5AA5;
|
||||||
|
|
||||||
/* read stm32 device id register */
|
/* read stm32 device id register */
|
||||||
int retval = stm32x_get_device_id(bank, &device_id);
|
int retval = stm32x_get_device_id(bank, &device_id);
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
|
@ -896,6 +900,7 @@ static int stm32x_probe(struct flash_bank *bank)
|
||||||
stm32x_info->ppage_size = 2;
|
stm32x_info->ppage_size = 2;
|
||||||
max_flash_size_in_kb = 256;
|
max_flash_size_in_kb = 256;
|
||||||
stm32x_info->user_data_offset = 16;
|
stm32x_info->user_data_offset = 16;
|
||||||
|
stm32x_info->default_rdp = 0x55AA;
|
||||||
break;
|
break;
|
||||||
case 0x428: /* value line High density */
|
case 0x428: /* value line High density */
|
||||||
page_size = 2048;
|
page_size = 2048;
|
||||||
|
@ -913,12 +918,14 @@ static int stm32x_probe(struct flash_bank *bank)
|
||||||
stm32x_info->ppage_size = 2;
|
stm32x_info->ppage_size = 2;
|
||||||
max_flash_size_in_kb = 256;
|
max_flash_size_in_kb = 256;
|
||||||
stm32x_info->user_data_offset = 16;
|
stm32x_info->user_data_offset = 16;
|
||||||
|
stm32x_info->default_rdp = 0x55AA;
|
||||||
break;
|
break;
|
||||||
case 0x440: /* stm32f0x */
|
case 0x440: /* stm32f0x */
|
||||||
page_size = 1024;
|
page_size = 1024;
|
||||||
stm32x_info->ppage_size = 4;
|
stm32x_info->ppage_size = 4;
|
||||||
max_flash_size_in_kb = 64;
|
max_flash_size_in_kb = 64;
|
||||||
stm32x_info->user_data_offset = 16;
|
stm32x_info->user_data_offset = 16;
|
||||||
|
stm32x_info->default_rdp = 0x55AA;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
LOG_WARNING("Cannot identify target as a STM32 family.");
|
LOG_WARNING("Cannot identify target as a STM32 family.");
|
||||||
|
|
Loading…
Reference in New Issue