From ad0847ca38e4c9d7ea0051ac7718afd3aa61868e Mon Sep 17 00:00:00 2001 From: Spencer Oliver Date: Mon, 9 Jan 2012 12:42:31 +0000 Subject: [PATCH] flash: use correct device_id mask The stm32 drivers have been using 0x7ff as the DEV_ID mask, this should have been 0xfff. Change-Id: I232469620969d6dd1b9a2a2aa15ec18b947dbb05 Signed-off-by: Spencer Oliver Reviewed-on: http://openocd.zylin.com/352 Tested-by: jenkins Reviewed-by: Andreas Fritiofson --- src/flash/nor/stm32f1x.c | 55 ++++++++++------------------------------ src/flash/nor/stm32f2x.c | 8 +++--- src/flash/nor/stm32lx.c | 6 ++--- 3 files changed, 20 insertions(+), 49 deletions(-) diff --git a/src/flash/nor/stm32f1x.c b/src/flash/nor/stm32f1x.c index 5d9da9035..738c2dac7 100644 --- a/src/flash/nor/stm32f1x.c +++ b/src/flash/nor/stm32f1x.c @@ -977,8 +977,7 @@ static int stm32x_probe(struct flash_bank *bank) flash_size_in_kb = 0xffff; } - if ((device_id & 0x7ff) == 0x410) - { + if ((device_id & 0xfff) == 0x410) { /* medium density - we have 1k pages * 4 pages for a protection area */ page_size = 1024; @@ -991,9 +990,7 @@ static int stm32x_probe(struct flash_bank *bank) LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 128k flash"); flash_size_in_kb = 128; } - } - else if ((device_id & 0x7ff) == 0x412) - { + } else if ((device_id & 0xfff) == 0x412) { /* low density - we have 1k pages * 4 pages for a protection area */ page_size = 1024; @@ -1006,9 +1003,7 @@ static int stm32x_probe(struct flash_bank *bank) LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 32k flash"); flash_size_in_kb = 32; } - } - else if ((device_id & 0x7ff) == 0x414) - { + } else if ((device_id & 0xfff) == 0x414) { /* high density - we have 2k pages * 2 pages for a protection area */ page_size = 2048; @@ -1021,9 +1016,7 @@ static int stm32x_probe(struct flash_bank *bank) LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 512k flash"); flash_size_in_kb = 512; } - } - else if ((device_id & 0x7ff) == 0x418) - { + } else if ((device_id & 0xfff) == 0x418) { /* connectivity line density - we have 2k pages * 2 pages for a protection area */ page_size = 2048; @@ -1036,9 +1029,7 @@ static int stm32x_probe(struct flash_bank *bank) LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 256k flash"); flash_size_in_kb = 256; } - } - else if ((device_id & 0x7ff) == 0x420) - { + } else if ((device_id & 0xfff) == 0x420) { /* value line density - we have 1k pages * 4 pages for a protection area */ page_size = 1024; @@ -1051,9 +1042,7 @@ static int stm32x_probe(struct flash_bank *bank) LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 128k flash"); flash_size_in_kb = 128; } - } - else if ((device_id & 0x7ff) == 0x428) - { + } else if ((device_id & 0xfff) == 0x428) { /* value line High density - we have 2k pages * 4 pages for a protection area */ page_size = 2048; @@ -1066,10 +1055,7 @@ static int stm32x_probe(struct flash_bank *bank) LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 128k flash"); flash_size_in_kb = 128; } - } - - else if ((device_id & 0x7ff) == 0x430) - { + } else if ((device_id & 0xfff) == 0x430) { /* xl line density - we have 2k pages * 2 pages for a protection area */ page_size = 2048; @@ -1165,8 +1151,7 @@ static int get_stm32x_info(struct flash_bank *bank, char *buf, int buf_size) if (retval != ERROR_OK) return retval; - if ((device_id & 0x7ff) == 0x410) - { + if ((device_id & 0xfff) == 0x410) { printed = snprintf(buf, buf_size, "stm32x (Medium Density) - Rev: "); buf += printed; buf_size -= printed; @@ -1193,9 +1178,7 @@ static int get_stm32x_info(struct flash_bank *bank, char *buf, int buf_size) snprintf(buf, buf_size, "unknown"); break; } - } - else if ((device_id & 0x7ff) == 0x412) - { + } else if ((device_id & 0xfff) == 0x412) { printed = snprintf(buf, buf_size, "stm32x (Low Density) - Rev: "); buf += printed; buf_size -= printed; @@ -1210,9 +1193,7 @@ static int get_stm32x_info(struct flash_bank *bank, char *buf, int buf_size) snprintf(buf, buf_size, "unknown"); break; } - } - else if ((device_id & 0x7ff) == 0x414) - { + } else if ((device_id & 0xfff) == 0x414) { printed = snprintf(buf, buf_size, "stm32x (High Density) - Rev: "); buf += printed; buf_size -= printed; @@ -1231,9 +1212,7 @@ static int get_stm32x_info(struct flash_bank *bank, char *buf, int buf_size) snprintf(buf, buf_size, "unknown"); break; } - } - else if ((device_id & 0x7ff) == 0x418) - { + } else if ((device_id & 0xfff) == 0x418) { printed = snprintf(buf, buf_size, "stm32x (Connectivity) - Rev: "); buf += printed; buf_size -= printed; @@ -1252,9 +1231,7 @@ static int get_stm32x_info(struct flash_bank *bank, char *buf, int buf_size) snprintf(buf, buf_size, "unknown"); break; } - } - else if ((device_id & 0x7ff) == 0x420) - { + } else if ((device_id & 0xfff) == 0x420) { printed = snprintf(buf, buf_size, "stm32x (Value) - Rev: "); buf += printed; buf_size -= printed; @@ -1273,9 +1250,7 @@ static int get_stm32x_info(struct flash_bank *bank, char *buf, int buf_size) snprintf(buf, buf_size, "unknown"); break; } - } - else if ((device_id & 0x7ff) == 0x428) - { + } else if ((device_id & 0xfff) == 0x428) { printed = snprintf(buf, buf_size, "stm32x (Value HD) - Rev: "); buf += printed; buf_size -= printed; @@ -1294,9 +1269,7 @@ static int get_stm32x_info(struct flash_bank *bank, char *buf, int buf_size) snprintf(buf, buf_size, "unknown"); break; } - } - else if ((device_id & 0x7ff) == 0x430) - { + } else if ((device_id & 0xfff) == 0x430) { printed = snprintf(buf, buf_size, "stm32x (XL) - Rev: "); buf += printed; buf_size -= printed; diff --git a/src/flash/nor/stm32f2x.c b/src/flash/nor/stm32f2x.c index 591b326b5..b7e100960 100644 --- a/src/flash/nor/stm32f2x.c +++ b/src/flash/nor/stm32f2x.c @@ -605,14 +605,14 @@ static int stm32x_probe(struct flash_bank *bank) flash_size_in_kb = 0xffff; } - if ((device_id & 0x7ff) == 0x411) { + if ((device_id & 0xfff) == 0x411) { /* check for early silicon */ if (flash_size_in_kb == 0xffff) { /* number of sectors may be incorrrect on early silicon */ LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 512k flash"); flash_size_in_kb = 512; } - } else if ((device_id & 0x7ff) == 0x413) { + } else if ((device_id & 0xfff) == 0x413) { /* check for early silicon */ if (flash_size_in_kb == 0xffff) { /* number of sectors may be incorrrect on early silicon */ @@ -681,7 +681,7 @@ static int get_stm32x_info(struct flash_bank *bank, char *buf, int buf_size) if (retval != ERROR_OK) return retval; - if ((device_id & 0x7ff) == 0x411) { + if ((device_id & 0xfff) == 0x411) { printed = snprintf(buf, buf_size, "stm32f2x - Rev: "); buf += printed; buf_size -= printed; @@ -707,7 +707,7 @@ static int get_stm32x_info(struct flash_bank *bank, char *buf, int buf_size) snprintf(buf, buf_size, "unknown"); break; } - } else if ((device_id & 0x7ff) == 0x413) { + } else if ((device_id & 0xfff) == 0x413) { printed = snprintf(buf, buf_size, "stm32f4x - Rev: "); buf += printed; buf_size -= printed; diff --git a/src/flash/nor/stm32lx.c b/src/flash/nor/stm32lx.c index 29a7aac9f..2cd16d6f9 100644 --- a/src/flash/nor/stm32lx.c +++ b/src/flash/nor/stm32lx.c @@ -503,8 +503,7 @@ static int stm32lx_probe(struct flash_bank *bank) LOG_DEBUG("device id = 0x%08" PRIx32 "", device_id); - if ((device_id & 0x7ff) != 0x416) - { + if ((device_id & 0xfff) != 0x416) { LOG_WARNING("Cannot identify target as a STM32L family."); return ERROR_FAIL; } @@ -702,8 +701,7 @@ static int stm32lx_get_info(struct flash_bank *bank, char *buf, int buf_size) if (retval != ERROR_OK) return retval; - if ((device_id & 0x7ff) == 0x416) - { + if ((device_id & 0xfff) == 0x416) { printed = snprintf(buf, buf_size, "stm32lx - Rev: "); buf += printed; buf_size -= printed;