diff --git a/src/flash/nor/stm32f1x.c b/src/flash/nor/stm32f1x.c index 8f2e69e68..7e32098c3 100644 --- a/src/flash/nor/stm32f1x.c +++ b/src/flash/nor/stm32f1x.c @@ -125,6 +125,7 @@ struct stm32x_flash_bank { uint16_t default_rdp; int user_data_offset; int option_offset; + uint32_t user_bank_size; }; static int stm32x_mass_erase(struct flash_bank *bank); @@ -147,6 +148,7 @@ FLASH_BANK_COMMAND_HANDLER(stm32x_flash_bank_command) stm32x_info->probed = 0; stm32x_info->has_dual_banks = false; stm32x_info->register_base = FLASH_REG_BASE_B0; + stm32x_info->user_bank_size = bank->size; return ERROR_OK; } @@ -963,9 +965,9 @@ static int stm32x_probe(struct flash_bank *bank) /* if the user sets the size manually then ignore the probed value * this allows us to work around devices that have a invalid flash size register value */ - if (bank->size) { + if (stm32x_info->user_bank_size) { LOG_INFO("ignoring flash probed value, using configured bank size"); - flash_size_in_kb = bank->size / 1024; + flash_size_in_kb = stm32x_info->user_bank_size / 1024; } LOG_INFO("flash size = %dkbytes", flash_size_in_kb); diff --git a/src/flash/nor/stm32f2x.c b/src/flash/nor/stm32f2x.c index 1d59e3c02..aa749a510 100644 --- a/src/flash/nor/stm32f2x.c +++ b/src/flash/nor/stm32f2x.c @@ -158,6 +158,7 @@ struct stm32x_flash_bank { struct stm32x_options option_bytes; int probed; bool has_large_mem; /* stm32f42x/stm32f43x family */ + uint32_t user_bank_size; }; /* flash bank stm32x 0 0 @@ -173,6 +174,7 @@ FLASH_BANK_COMMAND_HANDLER(stm32x_flash_bank_command) bank->driver_priv = stm32x_info; stm32x_info->probed = 0; + stm32x_info->user_bank_size = bank->size; return ERROR_OK; } @@ -793,9 +795,9 @@ static int stm32x_probe(struct flash_bank *bank) /* if the user sets the size manually then ignore the probed value * this allows us to work around devices that have a invalid flash size register value */ - if (bank->size) { + if (stm32x_info->user_bank_size) { LOG_INFO("ignoring flash probed value, using configured bank size"); - flash_size_in_kb = bank->size / 1024; + flash_size_in_kb = stm32x_info->user_bank_size / 1024; } LOG_INFO("flash size = %dkbytes", flash_size_in_kb); diff --git a/src/flash/nor/stm32lx.c b/src/flash/nor/stm32lx.c index a475841a3..61ae57407 100644 --- a/src/flash/nor/stm32lx.c +++ b/src/flash/nor/stm32lx.c @@ -122,6 +122,7 @@ static int stm32lx_wait_until_bsy_clear(struct flash_bank *bank); struct stm32lx_flash_bank { int probed; bool has_dual_banks; + uint32_t user_bank_size; }; /* flash bank stm32lx 0 0 @@ -145,6 +146,7 @@ FLASH_BANK_COMMAND_HANDLER(stm32lx_flash_bank_command) stm32lx_info->probed = 0; stm32lx_info->has_dual_banks = false; + stm32lx_info->user_bank_size = bank->size; return ERROR_OK; } @@ -597,8 +599,8 @@ static int stm32lx_probe(struct flash_bank *bank) /* if the user sets the size manually then ignore the probed value * this allows us to work around devices that have a invalid flash size register value */ - if (bank->size) { - flash_size_in_kb = bank->size / 1024; + if (stm32lx_info->user_bank_size) { + flash_size_in_kb = stm32lx_info->user_bank_size / 1024; LOG_INFO("ignoring flash probed value, using configured bank size: %dkbytes", flash_size_in_kb); }