X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Fflash%2Fnor%2Fstm32f1x.c;h=037fea07b9b634ef56e8b0a995ab176c2087aaf4;hb=refs%2Fchanges%2F95%2F1495%2F2;hp=8f2e69e6858a89b13c3d0c8ca4273cd19759c21e;hpb=f14cf545ebd9de51465332dbfcbce38a45286f98;p=openocd.git diff --git a/src/flash/nor/stm32f1x.c b/src/flash/nor/stm32f1x.c index 8f2e69e685..037fea07b9 100644 --- a/src/flash/nor/stm32f1x.c +++ b/src/flash/nor/stm32f1x.c @@ -21,7 +21,7 @@ * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * ***************************************************************************/ #ifdef HAVE_CONFIG_H @@ -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; } @@ -362,11 +364,6 @@ static int stm32x_protect_check(struct flash_bank *bank) int num_bits; int set; - if (target->state != TARGET_HALTED) { - LOG_ERROR("Target not halted"); - return ERROR_TARGET_NOT_HALTED; - } - int retval = stm32x_check_operation_supported(bank); if (ERROR_OK != retval) return retval; @@ -925,6 +922,7 @@ static int stm32x_probe(struct flash_bank *bank) stm32x_info->default_rdp = 0x55AA; break; case 0x440: /* stm32f0x */ + case 0x444: page_size = 1024; stm32x_info->ppage_size = 4; max_flash_size_in_kb = 64; @@ -963,9 +961,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); @@ -1192,7 +1190,8 @@ static int get_stm32x_info(struct flash_bank *bank, char *buf, int buf_size) snprintf(buf, buf_size, "unknown"); break; } - } else if ((device_id & 0xfff) == 0x440) { + } else if (((device_id & 0xfff) == 0x440) || + ((device_id & 0xfff) == 0x444)) { printed = snprintf(buf, buf_size, "stm32f0x - Rev: "); buf += printed; buf_size -= printed;