stm32f1x: improve variable naming and avoid potential divide-by-zero

Don't call a variable num_pages if it holds the flash size. Also rearrange
flash size to num_pages calculation to avoid divide-by-zero if there will
be a device with < 1024 byte pages someday.

Change-Id: I2febea39694a2f9750de141f52ec88ae1599c086
Signed-off-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
Reviewed-on: http://openocd.zylin.com/211
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
This commit is contained in:
Andreas Fritiofson 2011-11-17 01:26:58 +01:00 committed by Spencer Oliver
parent 7af4ec859d
commit a1f6b6612b

View File

@ -955,7 +955,7 @@ static int stm32x_probe(struct flash_bank *bank)
struct target *target = bank->target; struct target *target = bank->target;
struct stm32x_flash_bank *stm32x_info = bank->driver_priv; struct stm32x_flash_bank *stm32x_info = bank->driver_priv;
int i; int i;
uint16_t num_pages; uint16_t flash_size_in_kb;
uint32_t device_id; uint32_t device_id;
int page_size; int page_size;
uint32_t base_address = 0x08000000; uint32_t base_address = 0x08000000;
@ -970,12 +970,12 @@ static int stm32x_probe(struct flash_bank *bank)
LOG_INFO("device id = 0x%08" PRIx32 "", device_id); LOG_INFO("device id = 0x%08" PRIx32 "", device_id);
/* get flash size from target. */ /* get flash size from target. */
retval = target_read_u16(target, 0x1FFFF7E0, &num_pages); retval = target_read_u16(target, 0x1FFFF7E0, &flash_size_in_kb);
if (retval != ERROR_OK) if (retval != ERROR_OK)
{ {
LOG_WARNING("failed reading flash size, default to max target family"); LOG_WARNING("failed reading flash size, default to max target family");
/* failed reading flash size, default to max target family */ /* failed reading flash size, default to max target family */
num_pages = 0xffff; flash_size_in_kb = 0xffff;
} }
if ((device_id & 0x7ff) == 0x410) if ((device_id & 0x7ff) == 0x410)
@ -986,11 +986,11 @@ static int stm32x_probe(struct flash_bank *bank)
stm32x_info->ppage_size = 4; stm32x_info->ppage_size = 4;
/* check for early silicon */ /* check for early silicon */
if (num_pages == 0xffff) if (flash_size_in_kb == 0xffff)
{ {
/* number of sectors incorrect on revA */ /* number of sectors incorrect on revA */
LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 128k flash"); LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 128k flash");
num_pages = 128; flash_size_in_kb = 128;
} }
} }
else if ((device_id & 0x7ff) == 0x412) else if ((device_id & 0x7ff) == 0x412)
@ -1001,11 +1001,11 @@ static int stm32x_probe(struct flash_bank *bank)
stm32x_info->ppage_size = 4; stm32x_info->ppage_size = 4;
/* check for early silicon */ /* check for early silicon */
if (num_pages == 0xffff) if (flash_size_in_kb == 0xffff)
{ {
/* number of sectors incorrect on revA */ /* number of sectors incorrect on revA */
LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 32k flash"); LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 32k flash");
num_pages = 32; flash_size_in_kb = 32;
} }
} }
else if ((device_id & 0x7ff) == 0x414) else if ((device_id & 0x7ff) == 0x414)
@ -1016,11 +1016,11 @@ static int stm32x_probe(struct flash_bank *bank)
stm32x_info->ppage_size = 2; stm32x_info->ppage_size = 2;
/* check for early silicon */ /* check for early silicon */
if (num_pages == 0xffff) if (flash_size_in_kb == 0xffff)
{ {
/* number of sectors incorrect on revZ */ /* number of sectors incorrect on revZ */
LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 512k flash"); LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 512k flash");
num_pages = 512; flash_size_in_kb = 512;
} }
} }
else if ((device_id & 0x7ff) == 0x418) else if ((device_id & 0x7ff) == 0x418)
@ -1031,11 +1031,11 @@ static int stm32x_probe(struct flash_bank *bank)
stm32x_info->ppage_size = 2; stm32x_info->ppage_size = 2;
/* check for early silicon */ /* check for early silicon */
if (num_pages == 0xffff) if (flash_size_in_kb == 0xffff)
{ {
/* number of sectors incorrect on revZ */ /* number of sectors incorrect on revZ */
LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 256k flash"); LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 256k flash");
num_pages = 256; flash_size_in_kb = 256;
} }
} }
else if ((device_id & 0x7ff) == 0x420) else if ((device_id & 0x7ff) == 0x420)
@ -1046,11 +1046,11 @@ static int stm32x_probe(struct flash_bank *bank)
stm32x_info->ppage_size = 4; stm32x_info->ppage_size = 4;
/* check for early silicon */ /* check for early silicon */
if (num_pages == 0xffff) if (flash_size_in_kb == 0xffff)
{ {
/* number of sectors may be incorrrect on early silicon */ /* number of sectors may be incorrrect on early silicon */
LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 128k flash"); LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 128k flash");
num_pages = 128; flash_size_in_kb = 128;
} }
} }
else if ((device_id & 0x7ff) == 0x428) else if ((device_id & 0x7ff) == 0x428)
@ -1061,11 +1061,11 @@ static int stm32x_probe(struct flash_bank *bank)
stm32x_info->ppage_size = 4; stm32x_info->ppage_size = 4;
/* check for early silicon */ /* check for early silicon */
if (num_pages == 0xffff) if (flash_size_in_kb == 0xffff)
{ {
/* number of sectors may be incorrrect on early silicon */ /* number of sectors may be incorrrect on early silicon */
LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 128k flash"); LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 128k flash");
num_pages = 128; flash_size_in_kb = 128;
} }
} }
@ -1078,22 +1078,22 @@ static int stm32x_probe(struct flash_bank *bank)
stm32x_info->has_dual_banks = true; stm32x_info->has_dual_banks = true;
/* check for early silicon */ /* check for early silicon */
if (num_pages == 0xffff) if (flash_size_in_kb == 0xffff)
{ {
/* number of sectors may be incorrrect on early silicon */ /* number of sectors may be incorrrect on early silicon */
LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 1024k flash"); LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 1024k flash");
num_pages = 1024; flash_size_in_kb = 1024;
} }
/* split reported size into matching bank */ /* split reported size into matching bank */
if (bank->base != 0x08080000) if (bank->base != 0x08080000)
{ {
/* bank 0 will be fixed 512k */ /* bank 0 will be fixed 512k */
num_pages = 512; flash_size_in_kb = 512;
} }
else else
{ {
num_pages -= 512; flash_size_in_kb -= 512;
/* bank1 also uses a register offset */ /* bank1 also uses a register offset */
stm32x_info->register_base = FLASH_REG_BASE_B1; stm32x_info->register_base = FLASH_REG_BASE_B1;
base_address = 0x08080000; base_address = 0x08080000;
@ -1105,13 +1105,13 @@ static int stm32x_probe(struct flash_bank *bank)
return ERROR_FAIL; return ERROR_FAIL;
} }
LOG_INFO("flash size = %dkbytes", num_pages); LOG_INFO("flash size = %dkbytes", flash_size_in_kb);
/* did we assign # of pages? */ /* did we assign flash size? */
assert(num_pages != 0xffff); assert(flash_size_in_kb != 0xffff);
/* calculate numbers of pages */ /* calculate numbers of pages */
num_pages /= (page_size / 1024); int num_pages = flash_size_in_kb * 1024 / page_size;
/* check that calculation result makes sense */ /* check that calculation result makes sense */
assert(num_pages > 0); assert(num_pages > 0);