build: cleanup src/flash/nor directory
[openocd.git] / src / flash / nor / stm32f1x.c
blobb3f78ca405e13534684994dcf986d12548e499e5
1 /***************************************************************************
2 * Copyright (C) 2005 by Dominic Rath *
3 * Dominic.Rath@gmx.de *
4 * *
5 * Copyright (C) 2008 by Spencer Oliver *
6 * spen@spen-soft.co.uk *
7 * *
8 * Copyright (C) 2011 by Andreas Fritiofson *
9 * andreas.fritiofson@gmail.com *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 * This program is distributed in the hope that it will be useful, *
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
19 * GNU General Public License for more details. *
20 * *
21 * You should have received a copy of the GNU General Public License *
22 * along with this program; if not, write to the *
23 * Free Software Foundation, Inc., *
24 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
25 ***************************************************************************/
27 #ifdef HAVE_CONFIG_H
28 #include "config.h"
29 #endif
31 #include "imp.h"
32 #include <helper/binarybuffer.h>
33 #include <target/algorithm.h>
34 #include <target/armv7m.h>
36 /* stm32x register locations */
38 #define FLASH_REG_BASE_B0 0x40022000
39 #define FLASH_REG_BASE_B1 0x40022040
41 #define STM32_FLASH_ACR 0x00
42 #define STM32_FLASH_KEYR 0x04
43 #define STM32_FLASH_OPTKEYR 0x08
44 #define STM32_FLASH_SR 0x0C
45 #define STM32_FLASH_CR 0x10
46 #define STM32_FLASH_AR 0x14
47 #define STM32_FLASH_OBR 0x1C
48 #define STM32_FLASH_WRPR 0x20
50 /* TODO: Check if code using these really should be hard coded to bank 0.
51 * There are valid cases, on dual flash devices the protection of the
52 * second bank is done on the bank0 reg's. */
53 #define STM32_FLASH_ACR_B0 0x40022000
54 #define STM32_FLASH_KEYR_B0 0x40022004
55 #define STM32_FLASH_OPTKEYR_B0 0x40022008
56 #define STM32_FLASH_SR_B0 0x4002200C
57 #define STM32_FLASH_CR_B0 0x40022010
58 #define STM32_FLASH_AR_B0 0x40022014
59 #define STM32_FLASH_OBR_B0 0x4002201C
60 #define STM32_FLASH_WRPR_B0 0x40022020
62 /* option byte location */
64 #define STM32_OB_RDP 0x1FFFF800
65 #define STM32_OB_USER 0x1FFFF802
66 #define STM32_OB_DATA0 0x1FFFF804
67 #define STM32_OB_DATA1 0x1FFFF806
68 #define STM32_OB_WRP0 0x1FFFF808
69 #define STM32_OB_WRP1 0x1FFFF80A
70 #define STM32_OB_WRP2 0x1FFFF80C
71 #define STM32_OB_WRP3 0x1FFFF80E
73 /* FLASH_CR register bits */
75 #define FLASH_PG (1 << 0)
76 #define FLASH_PER (1 << 1)
77 #define FLASH_MER (1 << 2)
78 #define FLASH_OPTPG (1 << 4)
79 #define FLASH_OPTER (1 << 5)
80 #define FLASH_STRT (1 << 6)
81 #define FLASH_LOCK (1 << 7)
82 #define FLASH_OPTWRE (1 << 9)
84 /* FLASH_SR register bits */
86 #define FLASH_BSY (1 << 0)
87 #define FLASH_PGERR (1 << 2)
88 #define FLASH_WRPRTERR (1 << 4)
89 #define FLASH_EOP (1 << 5)
91 /* STM32_FLASH_OBR bit definitions (reading) */
93 #define OPT_ERROR 0
94 #define OPT_READOUT 1
95 #define OPT_RDWDGSW 2
96 #define OPT_RDRSTSTOP 3
97 #define OPT_RDRSTSTDBY 4
98 #define OPT_BFB2 5 /* dual flash bank only */
100 /* register unlock keys */
102 #define KEY1 0x45670123
103 #define KEY2 0xCDEF89AB
105 struct stm32x_options {
106 uint16_t RDP;
107 uint16_t user_options;
108 uint16_t protection[4];
111 struct stm32x_flash_bank {
112 struct stm32x_options option_bytes;
113 struct working_area *write_algorithm;
114 int ppage_size;
115 int probed;
117 bool has_dual_banks;
118 /* used to access dual flash bank stm32xl */
119 uint32_t register_base;
122 static int stm32x_mass_erase(struct flash_bank *bank);
124 /* flash bank stm32x <base> <size> 0 0 <target#>
126 FLASH_BANK_COMMAND_HANDLER(stm32x_flash_bank_command)
128 struct stm32x_flash_bank *stm32x_info;
130 if (CMD_ARGC < 6)
131 return ERROR_COMMAND_SYNTAX_ERROR;
133 stm32x_info = malloc(sizeof(struct stm32x_flash_bank));
134 bank->driver_priv = stm32x_info;
136 stm32x_info->write_algorithm = NULL;
137 stm32x_info->probed = 0;
138 stm32x_info->has_dual_banks = false;
139 stm32x_info->register_base = FLASH_REG_BASE_B0;
141 return ERROR_OK;
144 static inline int stm32x_get_flash_reg(struct flash_bank *bank, uint32_t reg)
146 struct stm32x_flash_bank *stm32x_info = bank->driver_priv;
147 return reg + stm32x_info->register_base;
150 static inline int stm32x_get_flash_status(struct flash_bank *bank, uint32_t *status)
152 struct target *target = bank->target;
153 return target_read_u32(target, stm32x_get_flash_reg(bank, STM32_FLASH_SR), status);
156 static int stm32x_wait_status_busy(struct flash_bank *bank, int timeout)
158 struct target *target = bank->target;
159 uint32_t status;
160 int retval = ERROR_OK;
162 /* wait for busy to clear */
163 for (;;) {
164 retval = stm32x_get_flash_status(bank, &status);
165 if (retval != ERROR_OK)
166 return retval;
167 LOG_DEBUG("status: 0x%" PRIx32 "", status);
168 if ((status & FLASH_BSY) == 0)
169 break;
170 if (timeout-- <= 0) {
171 LOG_ERROR("timed out waiting for flash");
172 return ERROR_FAIL;
174 alive_sleep(1);
177 if (status & FLASH_WRPRTERR) {
178 LOG_ERROR("stm32x device protected");
179 retval = ERROR_FAIL;
182 if (status & FLASH_PGERR) {
183 LOG_ERROR("stm32x device programming failed");
184 retval = ERROR_FAIL;
187 /* Clear but report errors */
188 if (status & (FLASH_WRPRTERR | FLASH_PGERR)) {
189 /* If this operation fails, we ignore it and report the original
190 * retval
192 target_write_u32(target, stm32x_get_flash_reg(bank, STM32_FLASH_SR),
193 FLASH_WRPRTERR | FLASH_PGERR);
195 return retval;
198 int stm32x_check_operation_supported(struct flash_bank *bank)
200 struct stm32x_flash_bank *stm32x_info = bank->driver_priv;
202 /* if we have a dual flash bank device then
203 * we need to perform option byte stuff on bank0 only */
204 if (stm32x_info->register_base != FLASH_REG_BASE_B0) {
205 LOG_ERROR("Option Byte Operation's must use bank0");
206 return ERROR_FLASH_OPERATION_FAILED;
209 return ERROR_OK;
212 static int stm32x_read_options(struct flash_bank *bank)
214 uint32_t optiondata;
215 struct stm32x_flash_bank *stm32x_info = NULL;
216 struct target *target = bank->target;
218 stm32x_info = bank->driver_priv;
220 /* read current option bytes */
221 int retval = target_read_u32(target, STM32_FLASH_OBR_B0, &optiondata);
222 if (retval != ERROR_OK)
223 return retval;
225 stm32x_info->option_bytes.user_options = (uint16_t)0xFFF8 | ((optiondata >> 2) & 0x07);
226 stm32x_info->option_bytes.RDP = (optiondata & (1 << OPT_READOUT)) ? 0xFFFF : 0x5AA5;
228 if (optiondata & (1 << OPT_READOUT))
229 LOG_INFO("Device Security Bit Set");
231 /* each bit refers to a 4bank protection */
232 retval = target_read_u32(target, STM32_FLASH_WRPR_B0, &optiondata);
233 if (retval != ERROR_OK)
234 return retval;
236 stm32x_info->option_bytes.protection[0] = (uint16_t)optiondata;
237 stm32x_info->option_bytes.protection[1] = (uint16_t)(optiondata >> 8);
238 stm32x_info->option_bytes.protection[2] = (uint16_t)(optiondata >> 16);
239 stm32x_info->option_bytes.protection[3] = (uint16_t)(optiondata >> 24);
241 return ERROR_OK;
244 static int stm32x_erase_options(struct flash_bank *bank)
246 struct stm32x_flash_bank *stm32x_info = NULL;
247 struct target *target = bank->target;
249 stm32x_info = bank->driver_priv;
251 /* read current options */
252 stm32x_read_options(bank);
254 /* unlock flash registers */
255 int retval = target_write_u32(target, STM32_FLASH_KEYR_B0, KEY1);
256 if (retval != ERROR_OK)
257 return retval;
259 retval = target_write_u32(target, STM32_FLASH_KEYR_B0, KEY2);
260 if (retval != ERROR_OK)
261 return retval;
263 /* unlock option flash registers */
264 retval = target_write_u32(target, STM32_FLASH_OPTKEYR_B0, KEY1);
265 if (retval != ERROR_OK)
266 return retval;
267 retval = target_write_u32(target, STM32_FLASH_OPTKEYR_B0, KEY2);
268 if (retval != ERROR_OK)
269 return retval;
271 /* erase option bytes */
272 retval = target_write_u32(target, STM32_FLASH_CR_B0, FLASH_OPTER | FLASH_OPTWRE);
273 if (retval != ERROR_OK)
274 return retval;
275 retval = target_write_u32(target, STM32_FLASH_CR_B0, FLASH_OPTER | FLASH_STRT | FLASH_OPTWRE);
276 if (retval != ERROR_OK)
277 return retval;
279 retval = stm32x_wait_status_busy(bank, 10);
280 if (retval != ERROR_OK)
281 return retval;
283 /* clear readout protection and complementary option bytes
284 * this will also force a device unlock if set */
285 stm32x_info->option_bytes.RDP = 0x5AA5;
287 return ERROR_OK;
290 static int stm32x_write_options(struct flash_bank *bank)
292 struct stm32x_flash_bank *stm32x_info = NULL;
293 struct target *target = bank->target;
295 stm32x_info = bank->driver_priv;
297 /* unlock flash registers */
298 int retval = target_write_u32(target, STM32_FLASH_KEYR_B0, KEY1);
299 if (retval != ERROR_OK)
300 return retval;
301 retval = target_write_u32(target, STM32_FLASH_KEYR_B0, KEY2);
302 if (retval != ERROR_OK)
303 return retval;
305 /* unlock option flash registers */
306 retval = target_write_u32(target, STM32_FLASH_OPTKEYR_B0, KEY1);
307 if (retval != ERROR_OK)
308 return retval;
309 retval = target_write_u32(target, STM32_FLASH_OPTKEYR_B0, KEY2);
310 if (retval != ERROR_OK)
311 return retval;
313 /* program option bytes */
314 retval = target_write_u32(target, STM32_FLASH_CR_B0, FLASH_OPTPG | FLASH_OPTWRE);
315 if (retval != ERROR_OK)
316 return retval;
318 /* write user option byte */
319 retval = target_write_u16(target, STM32_OB_USER, stm32x_info->option_bytes.user_options);
320 if (retval != ERROR_OK)
321 return retval;
323 retval = stm32x_wait_status_busy(bank, 10);
324 if (retval != ERROR_OK)
325 return retval;
327 /* write protection byte 1 */
328 retval = target_write_u16(target, STM32_OB_WRP0, stm32x_info->option_bytes.protection[0]);
329 if (retval != ERROR_OK)
330 return retval;
332 retval = stm32x_wait_status_busy(bank, 10);
333 if (retval != ERROR_OK)
334 return retval;
336 /* write protection byte 2 */
337 retval = target_write_u16(target, STM32_OB_WRP1, stm32x_info->option_bytes.protection[1]);
338 if (retval != ERROR_OK)
339 return retval;
341 retval = stm32x_wait_status_busy(bank, 10);
342 if (retval != ERROR_OK)
343 return retval;
345 /* write protection byte 3 */
346 retval = target_write_u16(target, STM32_OB_WRP2, stm32x_info->option_bytes.protection[2]);
347 if (retval != ERROR_OK)
348 return retval;
350 retval = stm32x_wait_status_busy(bank, 10);
351 if (retval != ERROR_OK)
352 return retval;
354 /* write protection byte 4 */
355 retval = target_write_u16(target, STM32_OB_WRP3, stm32x_info->option_bytes.protection[3]);
356 if (retval != ERROR_OK)
357 return retval;
359 retval = stm32x_wait_status_busy(bank, 10);
360 if (retval != ERROR_OK)
361 return retval;
363 /* write readout protection bit */
364 retval = target_write_u16(target, STM32_OB_RDP, stm32x_info->option_bytes.RDP);
365 if (retval != ERROR_OK)
366 return retval;
368 retval = stm32x_wait_status_busy(bank, 10);
369 if (retval != ERROR_OK)
370 return retval;
372 retval = target_write_u32(target, STM32_FLASH_CR_B0, FLASH_LOCK);
373 if (retval != ERROR_OK)
374 return retval;
376 return ERROR_OK;
379 static int stm32x_protect_check(struct flash_bank *bank)
381 struct target *target = bank->target;
382 struct stm32x_flash_bank *stm32x_info = bank->driver_priv;
384 uint32_t protection;
385 int i, s;
386 int num_bits;
387 int set;
389 if (target->state != TARGET_HALTED) {
390 LOG_ERROR("Target not halted");
391 return ERROR_TARGET_NOT_HALTED;
394 int retval = stm32x_check_operation_supported(bank);
395 if (ERROR_OK != retval)
396 return retval;
398 /* medium density - each bit refers to a 4bank protection
399 * high density - each bit refers to a 2bank protection */
400 retval = target_read_u32(target, STM32_FLASH_WRPR_B0, &protection);
401 if (retval != ERROR_OK)
402 return retval;
404 /* medium density - each protection bit is for 4 * 1K pages
405 * high density - each protection bit is for 2 * 2K pages */
406 num_bits = (bank->num_sectors / stm32x_info->ppage_size);
408 if (stm32x_info->ppage_size == 2) {
409 /* high density flash/connectivity line protection */
411 set = 1;
413 if (protection & (1 << 31))
414 set = 0;
416 /* bit 31 controls sector 62 - 255 protection for high density
417 * bit 31 controls sector 62 - 127 protection for connectivity line */
418 for (s = 62; s < bank->num_sectors; s++)
419 bank->sectors[s].is_protected = set;
421 if (bank->num_sectors > 61)
422 num_bits = 31;
424 for (i = 0; i < num_bits; i++) {
425 set = 1;
427 if (protection & (1 << i))
428 set = 0;
430 for (s = 0; s < stm32x_info->ppage_size; s++)
431 bank->sectors[(i * stm32x_info->ppage_size) + s].is_protected = set;
433 } else {
434 /* low/medium density flash protection */
435 for (i = 0; i < num_bits; i++) {
436 set = 1;
438 if (protection & (1 << i))
439 set = 0;
441 for (s = 0; s < stm32x_info->ppage_size; s++)
442 bank->sectors[(i * stm32x_info->ppage_size) + s].is_protected = set;
446 return ERROR_OK;
449 static int stm32x_erase(struct flash_bank *bank, int first, int last)
451 struct target *target = bank->target;
452 int i;
454 if (bank->target->state != TARGET_HALTED) {
455 LOG_ERROR("Target not halted");
456 return ERROR_TARGET_NOT_HALTED;
459 if ((first == 0) && (last == (bank->num_sectors - 1)))
460 return stm32x_mass_erase(bank);
462 /* unlock flash registers */
463 int retval = target_write_u32(target, stm32x_get_flash_reg(bank, STM32_FLASH_KEYR), KEY1);
464 if (retval != ERROR_OK)
465 return retval;
466 retval = target_write_u32(target, stm32x_get_flash_reg(bank, STM32_FLASH_KEYR), KEY2);
467 if (retval != ERROR_OK)
468 return retval;
470 for (i = first; i <= last; i++) {
471 retval = target_write_u32(target, stm32x_get_flash_reg(bank, STM32_FLASH_CR), FLASH_PER);
472 if (retval != ERROR_OK)
473 return retval;
474 retval = target_write_u32(target, stm32x_get_flash_reg(bank, STM32_FLASH_AR),
475 bank->base + bank->sectors[i].offset);
476 if (retval != ERROR_OK)
477 return retval;
478 retval = target_write_u32(target,
479 stm32x_get_flash_reg(bank, STM32_FLASH_CR), FLASH_PER | FLASH_STRT);
480 if (retval != ERROR_OK)
481 return retval;
483 retval = stm32x_wait_status_busy(bank, 100);
484 if (retval != ERROR_OK)
485 return retval;
487 bank->sectors[i].is_erased = 1;
490 retval = target_write_u32(target, stm32x_get_flash_reg(bank, STM32_FLASH_CR), FLASH_LOCK);
491 if (retval != ERROR_OK)
492 return retval;
494 return ERROR_OK;
497 static int stm32x_protect(struct flash_bank *bank, int set, int first, int last)
499 struct stm32x_flash_bank *stm32x_info = NULL;
500 struct target *target = bank->target;
501 uint16_t prot_reg[4] = {0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF};
502 int i, reg, bit;
503 int status;
504 uint32_t protection;
506 stm32x_info = bank->driver_priv;
508 if (target->state != TARGET_HALTED) {
509 LOG_ERROR("Target not halted");
510 return ERROR_TARGET_NOT_HALTED;
513 int retval = stm32x_check_operation_supported(bank);
514 if (ERROR_OK != retval)
515 return retval;
517 if ((first % stm32x_info->ppage_size) != 0) {
518 LOG_WARNING("aligned start protect sector to a %d sector boundary",
519 stm32x_info->ppage_size);
520 first = first - (first % stm32x_info->ppage_size);
522 if (((last + 1) % stm32x_info->ppage_size) != 0) {
523 LOG_WARNING("aligned end protect sector to a %d sector boundary",
524 stm32x_info->ppage_size);
525 last++;
526 last = last - (last % stm32x_info->ppage_size);
527 last--;
530 /* medium density - each bit refers to a 4bank protection
531 * high density - each bit refers to a 2bank protection */
532 retval = target_read_u32(target, STM32_FLASH_WRPR_B0, &protection);
533 if (retval != ERROR_OK)
534 return retval;
536 prot_reg[0] = (uint16_t)protection;
537 prot_reg[1] = (uint16_t)(protection >> 8);
538 prot_reg[2] = (uint16_t)(protection >> 16);
539 prot_reg[3] = (uint16_t)(protection >> 24);
541 if (stm32x_info->ppage_size == 2) {
542 /* high density flash */
544 /* bit 7 controls sector 62 - 255 protection */
545 if (last > 61) {
546 if (set)
547 prot_reg[3] &= ~(1 << 7);
548 else
549 prot_reg[3] |= (1 << 7);
552 if (first > 61)
553 first = 62;
554 if (last > 61)
555 last = 61;
557 for (i = first; i <= last; i++) {
558 reg = (i / stm32x_info->ppage_size) / 8;
559 bit = (i / stm32x_info->ppage_size) - (reg * 8);
561 if (set)
562 prot_reg[reg] &= ~(1 << bit);
563 else
564 prot_reg[reg] |= (1 << bit);
566 } else {
567 /* medium density flash */
568 for (i = first; i <= last; i++) {
569 reg = (i / stm32x_info->ppage_size) / 8;
570 bit = (i / stm32x_info->ppage_size) - (reg * 8);
572 if (set)
573 prot_reg[reg] &= ~(1 << bit);
574 else
575 prot_reg[reg] |= (1 << bit);
579 status = stm32x_erase_options(bank);
580 if (status != ERROR_OK)
581 return status;
583 stm32x_info->option_bytes.protection[0] = prot_reg[0];
584 stm32x_info->option_bytes.protection[1] = prot_reg[1];
585 stm32x_info->option_bytes.protection[2] = prot_reg[2];
586 stm32x_info->option_bytes.protection[3] = prot_reg[3];
588 return stm32x_write_options(bank);
591 static int stm32x_write_block(struct flash_bank *bank, uint8_t *buffer,
592 uint32_t offset, uint32_t count)
594 struct stm32x_flash_bank *stm32x_info = bank->driver_priv;
595 struct target *target = bank->target;
596 uint32_t buffer_size = 16384;
597 struct working_area *source;
598 uint32_t address = bank->base + offset;
599 struct reg_param reg_params[5];
600 struct armv7m_algorithm armv7m_info;
601 int retval = ERROR_OK;
603 /* see contrib/loaders/flash/stm32f1x.S for src */
605 static const uint8_t stm32x_flash_write_code[] = {
606 /* #define STM32_FLASH_CR_OFFSET 0x10 */
607 /* #define STM32_FLASH_SR_OFFSET 0x0C */
608 /* wait_fifo: */
609 0x16, 0x68, /* ldr r6, [r2, #0] */
610 0x00, 0x2e, /* cmp r6, #0 */
611 0x1a, 0xd0, /* beq exit */
612 0x55, 0x68, /* ldr r5, [r2, #4] */
613 0xb5, 0x42, /* cmp r5, r6 */
614 0xf9, 0xd0, /* beq wait_fifo */
615 0x01, 0x26, /* movs r6, #1 */
616 0x06, 0x61, /* str r6, [r0, #STM32_FLASH_CR_OFFSET] */
617 0x2e, 0x88, /* ldrh r6, [r5, #0] */
618 0x26, 0x80, /* strh r6, [r4, #0] */
619 0x02, 0x35, /* adds r5, #2 */
620 0x02, 0x34, /* adds r4, #2 */
621 /* busy: */
622 0xc6, 0x68, /* ldr r6, [r0, #STM32_FLASH_SR_OFFSET] */
623 0x01, 0x27, /* movs r7, #1 */
624 0x3e, 0x42, /* tst r6, r7 */
625 0xfb, 0xd1, /* bne busy */
626 0x14, 0x27, /* movs r7, #0x14 */
627 0x3e, 0x42, /* tst r6, r7 */
628 0x08, 0xd1, /* bne error */
629 0x9d, 0x42, /* cmp r5, r3 */
630 0x01, 0xd3, /* bcc no_wrap */
631 0x15, 0x46, /* mov r5, r2 */
632 0x08, 0x35, /* adds r5, #8 */
633 /* no_wrap: */
634 0x55, 0x60, /* str r5, [r2, #4] */
635 0x01, 0x39, /* subs r1, r1, #1 */
636 0x00, 0x29, /* cmp r1, #0 */
637 0x02, 0xd0, /* beq exit */
638 0xe3, 0xe7, /* b wait_fifo */
639 /* error: */
640 0x00, 0x20, /* movs r0, #0 */
641 0x50, 0x60, /* str r0, [r2, #4] */
642 /* exit: */
643 0x30, 0x46, /* mov r0, r6 */
644 0x00, 0xbe, /* bkpt #0 */
647 /* flash write code */
648 if (target_alloc_working_area(target, sizeof(stm32x_flash_write_code),
649 &stm32x_info->write_algorithm) != ERROR_OK) {
650 LOG_WARNING("no working area available, can't do block memory writes");
651 return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
654 retval = target_write_buffer(target, stm32x_info->write_algorithm->address,
655 sizeof(stm32x_flash_write_code), (uint8_t *)stm32x_flash_write_code);
656 if (retval != ERROR_OK)
657 return retval;
659 /* memory buffer */
660 while (target_alloc_working_area_try(target, buffer_size, &source) != ERROR_OK) {
661 buffer_size /= 2;
662 buffer_size &= ~3UL; /* Make sure it's 4 byte aligned */
663 if (buffer_size <= 256) {
664 /* if we already allocated the writing code, but failed to get a
665 * buffer, free the algorithm */
666 if (stm32x_info->write_algorithm)
667 target_free_working_area(target, stm32x_info->write_algorithm);
669 LOG_WARNING("no large enough working area available, can't do block memory writes");
670 return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
674 /* Set up working area. First word is write pointer, second word is read pointer,
675 * rest is fifo data area. */
676 uint32_t wp_addr = source->address;
677 uint32_t rp_addr = source->address + 4;
678 uint32_t fifo_start_addr = source->address + 8;
679 uint32_t fifo_end_addr = source->address + source->size;
681 uint32_t wp = fifo_start_addr;
682 uint32_t rp = fifo_start_addr;
684 retval = target_write_u32(target, wp_addr, wp);
685 if (retval != ERROR_OK)
686 return retval;
687 retval = target_write_u32(target, rp_addr, rp);
688 if (retval != ERROR_OK)
689 return retval;
691 init_reg_param(&reg_params[0], "r0", 32, PARAM_IN_OUT); /* flash base (in), status (out) */
692 init_reg_param(&reg_params[1], "r1", 32, PARAM_OUT); /* count (halfword-16bit) */
693 init_reg_param(&reg_params[2], "r2", 32, PARAM_OUT); /* buffer start */
694 init_reg_param(&reg_params[3], "r3", 32, PARAM_OUT); /* buffer end */
695 init_reg_param(&reg_params[4], "r4", 32, PARAM_IN_OUT); /* target address */
697 buf_set_u32(reg_params[0].value, 0, 32, stm32x_info->register_base);
698 buf_set_u32(reg_params[1].value, 0, 32, count);
699 buf_set_u32(reg_params[2].value, 0, 32, source->address);
700 buf_set_u32(reg_params[3].value, 0, 32, source->address + source->size);
701 buf_set_u32(reg_params[4].value, 0, 32, address);
703 armv7m_info.common_magic = ARMV7M_COMMON_MAGIC;
704 armv7m_info.core_mode = ARMV7M_MODE_ANY;
706 /* Start up algorithm on target and let it idle while writing the first chunk */
707 retval = target_start_algorithm(target, 0, NULL, 5, reg_params,
708 stm32x_info->write_algorithm->address,
710 &armv7m_info);
711 if (retval != ERROR_OK) {
712 LOG_ERROR("error starting stm32x flash write algorithm");
713 goto cleanup;
716 while (count > 0) {
717 retval = target_read_u32(target, rp_addr, &rp);
718 if (retval != ERROR_OK) {
719 LOG_ERROR("failed to get read pointer");
720 break;
723 LOG_DEBUG("count 0x%"PRIx32" wp 0x%"PRIx32" rp 0x%"PRIx32, count, wp, rp);
725 if (rp == 0) {
726 LOG_ERROR("flash write algorithm aborted by target");
727 retval = ERROR_FLASH_OPERATION_FAILED;
728 break;
731 if ((rp & 1) || rp < fifo_start_addr || rp >= fifo_end_addr) {
732 LOG_ERROR("corrupted fifo read pointer 0x%"PRIx32, rp);
733 break;
736 /* Count the number of bytes available in the fifo without
737 * crossing the wrap around. Make sure to not fill it completely,
738 * because that would make wp == rp and that's the empty condition. */
739 uint32_t thisrun_bytes;
740 if (rp > wp)
741 thisrun_bytes = rp - wp - 2;
742 else if (rp > fifo_start_addr)
743 thisrun_bytes = fifo_end_addr - wp;
744 else
745 thisrun_bytes = fifo_end_addr - wp - 2;
747 if (thisrun_bytes == 0) {
748 /* Throttle polling a bit if transfer is (much) faster than flash
749 * programming. The exact delay shouldn't matter as long as it's
750 * less than buffer size / flash speed. This is very unlikely to
751 * run when using high latency connections such as USB. */
752 alive_sleep(10);
753 continue;
756 /* Limit to the amount of data we actually want to write */
757 if (thisrun_bytes > count * 2)
758 thisrun_bytes = count * 2;
760 /* Write data to fifo */
761 retval = target_write_buffer(target, wp, thisrun_bytes, buffer);
762 if (retval != ERROR_OK)
763 break;
765 /* Update counters and wrap write pointer */
766 buffer += thisrun_bytes;
767 count -= thisrun_bytes / 2;
768 wp += thisrun_bytes;
769 if (wp >= fifo_end_addr)
770 wp = fifo_start_addr;
772 /* Store updated write pointer to target */
773 retval = target_write_u32(target, wp_addr, wp);
774 if (retval != ERROR_OK)
775 break;
778 if (retval != ERROR_OK) {
779 /* abort flash write algorithm on target */
780 target_write_u32(target, wp_addr, 0);
783 int retval2 = target_wait_algorithm(target, 0, NULL, 5, reg_params,
784 0, 10000, &armv7m_info);
785 if (retval2 != ERROR_OK) {
786 LOG_ERROR("error waiting for stm32x flash write algorithm");
787 retval = retval2;
790 if (retval == ERROR_FLASH_OPERATION_FAILED) {
791 LOG_ERROR("flash write failed at address 0x%"PRIx32,
792 buf_get_u32(reg_params[4].value, 0, 32));
794 if (buf_get_u32(reg_params[0].value, 0, 32) & FLASH_PGERR) {
795 LOG_ERROR("flash memory not erased before writing");
796 /* Clear but report errors */
797 target_write_u32(target, STM32_FLASH_SR_B0, FLASH_PGERR);
800 if (buf_get_u32(reg_params[0].value, 0, 32) & FLASH_WRPRTERR) {
801 LOG_ERROR("flash memory write protected");
802 /* Clear but report errors */
803 target_write_u32(target, STM32_FLASH_SR_B0, FLASH_WRPRTERR);
807 cleanup:
808 target_free_working_area(target, source);
809 target_free_working_area(target, stm32x_info->write_algorithm);
811 destroy_reg_param(&reg_params[0]);
812 destroy_reg_param(&reg_params[1]);
813 destroy_reg_param(&reg_params[2]);
814 destroy_reg_param(&reg_params[3]);
815 destroy_reg_param(&reg_params[4]);
817 return retval;
820 static int stm32x_write(struct flash_bank *bank, uint8_t *buffer,
821 uint32_t offset, uint32_t count)
823 struct target *target = bank->target;
824 uint32_t words_remaining = (count / 2);
825 uint32_t bytes_remaining = (count & 0x00000001);
826 uint32_t address = bank->base + offset;
827 uint32_t bytes_written = 0;
828 int retval;
830 if (bank->target->state != TARGET_HALTED) {
831 LOG_ERROR("Target not halted");
832 return ERROR_TARGET_NOT_HALTED;
835 if (offset & 0x1) {
836 LOG_WARNING("offset 0x%" PRIx32 " breaks required 2-byte alignment", offset);
837 return ERROR_FLASH_DST_BREAKS_ALIGNMENT;
840 /* unlock flash registers */
841 retval = target_write_u32(target, stm32x_get_flash_reg(bank, STM32_FLASH_KEYR), KEY1);
842 if (retval != ERROR_OK)
843 return retval;
844 retval = target_write_u32(target, stm32x_get_flash_reg(bank, STM32_FLASH_KEYR), KEY2);
845 if (retval != ERROR_OK)
846 return retval;
848 /* multiple half words (2-byte) to be programmed? */
849 if (words_remaining > 0) {
850 /* try using a block write */
851 retval = stm32x_write_block(bank, buffer, offset, words_remaining);
852 if (retval != ERROR_OK) {
853 if (retval == ERROR_TARGET_RESOURCE_NOT_AVAILABLE) {
854 /* if block write failed (no sufficient working area),
855 * we use normal (slow) single dword accesses */
856 LOG_WARNING("couldn't use block writes, falling back to single memory accesses");
858 } else {
859 buffer += words_remaining * 2;
860 address += words_remaining * 2;
861 words_remaining = 0;
865 if ((retval != ERROR_OK) && (retval != ERROR_TARGET_RESOURCE_NOT_AVAILABLE))
866 return retval;
868 while (words_remaining > 0) {
869 uint16_t value;
870 memcpy(&value, buffer + bytes_written, sizeof(uint16_t));
872 retval = target_write_u32(target, stm32x_get_flash_reg(bank, STM32_FLASH_CR), FLASH_PG);
873 if (retval != ERROR_OK)
874 return retval;
875 retval = target_write_u16(target, address, value);
876 if (retval != ERROR_OK)
877 return retval;
879 retval = stm32x_wait_status_busy(bank, 5);
880 if (retval != ERROR_OK)
881 return retval;
883 bytes_written += 2;
884 words_remaining--;
885 address += 2;
888 if (bytes_remaining) {
889 uint16_t value = 0xffff;
890 memcpy(&value, buffer + bytes_written, bytes_remaining);
892 retval = target_write_u32(target, stm32x_get_flash_reg(bank, STM32_FLASH_CR), FLASH_PG);
893 if (retval != ERROR_OK)
894 return retval;
895 retval = target_write_u16(target, address, value);
896 if (retval != ERROR_OK)
897 return retval;
899 retval = stm32x_wait_status_busy(bank, 5);
900 if (retval != ERROR_OK)
901 return retval;
904 return target_write_u32(target, STM32_FLASH_CR_B0, FLASH_LOCK);
907 static int stm32x_probe(struct flash_bank *bank)
909 struct target *target = bank->target;
910 struct stm32x_flash_bank *stm32x_info = bank->driver_priv;
911 int i;
912 uint16_t flash_size_in_kb;
913 uint32_t device_id;
914 int page_size;
915 uint32_t base_address = 0x08000000;
917 stm32x_info->probed = 0;
918 stm32x_info->register_base = FLASH_REG_BASE_B0;
920 /* read stm32 device id register */
921 int retval = target_read_u32(target, 0xE0042000, &device_id);
922 if (retval != ERROR_OK)
923 return retval;
924 LOG_INFO("device id = 0x%08" PRIx32 "", device_id);
926 /* get flash size from target. */
927 retval = target_read_u16(target, 0x1FFFF7E0, &flash_size_in_kb);
928 if (retval != ERROR_OK) {
929 LOG_WARNING("failed reading flash size, default to max target family");
930 /* failed reading flash size, default to max target family */
931 flash_size_in_kb = 0xffff;
934 if ((device_id & 0xfff) == 0x410) {
935 /* medium density - we have 1k pages
936 * 4 pages for a protection area */
937 page_size = 1024;
938 stm32x_info->ppage_size = 4;
940 /* check for early silicon */
941 if (flash_size_in_kb == 0xffff) {
942 /* number of sectors incorrect on revA */
943 LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 128k flash");
944 flash_size_in_kb = 128;
946 } else if ((device_id & 0xfff) == 0x412) {
947 /* low density - we have 1k pages
948 * 4 pages for a protection area */
949 page_size = 1024;
950 stm32x_info->ppage_size = 4;
952 /* check for early silicon */
953 if (flash_size_in_kb == 0xffff) {
954 /* number of sectors incorrect on revA */
955 LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 32k flash");
956 flash_size_in_kb = 32;
958 } else if ((device_id & 0xfff) == 0x414) {
959 /* high density - we have 2k pages
960 * 2 pages for a protection area */
961 page_size = 2048;
962 stm32x_info->ppage_size = 2;
964 /* check for early silicon */
965 if (flash_size_in_kb == 0xffff) {
966 /* number of sectors incorrect on revZ */
967 LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 512k flash");
968 flash_size_in_kb = 512;
970 } else if ((device_id & 0xfff) == 0x418) {
971 /* connectivity line density - we have 2k pages
972 * 2 pages for a protection area */
973 page_size = 2048;
974 stm32x_info->ppage_size = 2;
976 /* check for early silicon */
977 if (flash_size_in_kb == 0xffff) {
978 /* number of sectors incorrect on revZ */
979 LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 256k flash");
980 flash_size_in_kb = 256;
982 } else if ((device_id & 0xfff) == 0x420) {
983 /* value line density - we have 1k pages
984 * 4 pages for a protection area */
985 page_size = 1024;
986 stm32x_info->ppage_size = 4;
988 /* check for early silicon */
989 if (flash_size_in_kb == 0xffff) {
990 /* number of sectors may be incorrrect on early silicon */
991 LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 128k flash");
992 flash_size_in_kb = 128;
994 } else if ((device_id & 0xfff) == 0x428) {
995 /* value line High density - we have 2k pages
996 * 4 pages for a protection area */
997 page_size = 2048;
998 stm32x_info->ppage_size = 4;
1000 /* check for early silicon */
1001 if (flash_size_in_kb == 0xffff) {
1002 /* number of sectors may be incorrrect on early silicon */
1003 LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 128k flash");
1004 flash_size_in_kb = 128;
1006 } else if ((device_id & 0xfff) == 0x430) {
1007 /* xl line density - we have 2k pages
1008 * 2 pages for a protection area */
1009 page_size = 2048;
1010 stm32x_info->ppage_size = 2;
1011 stm32x_info->has_dual_banks = true;
1013 /* check for early silicon */
1014 if (flash_size_in_kb == 0xffff) {
1015 /* number of sectors may be incorrrect on early silicon */
1016 LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 1024k flash");
1017 flash_size_in_kb = 1024;
1020 /* split reported size into matching bank */
1021 if (bank->base != 0x08080000) {
1022 /* bank 0 will be fixed 512k */
1023 flash_size_in_kb = 512;
1024 } else {
1025 flash_size_in_kb -= 512;
1026 /* bank1 also uses a register offset */
1027 stm32x_info->register_base = FLASH_REG_BASE_B1;
1028 base_address = 0x08080000;
1030 } else {
1031 LOG_WARNING("Cannot identify target as a STM32 family.");
1032 return ERROR_FAIL;
1035 LOG_INFO("flash size = %dkbytes", flash_size_in_kb);
1037 /* did we assign flash size? */
1038 assert(flash_size_in_kb != 0xffff);
1040 /* calculate numbers of pages */
1041 int num_pages = flash_size_in_kb * 1024 / page_size;
1043 /* check that calculation result makes sense */
1044 assert(num_pages > 0);
1046 if (bank->sectors) {
1047 free(bank->sectors);
1048 bank->sectors = NULL;
1051 bank->base = base_address;
1052 bank->size = (num_pages * page_size);
1053 bank->num_sectors = num_pages;
1054 bank->sectors = malloc(sizeof(struct flash_sector) * num_pages);
1056 for (i = 0; i < num_pages; i++) {
1057 bank->sectors[i].offset = i * page_size;
1058 bank->sectors[i].size = page_size;
1059 bank->sectors[i].is_erased = -1;
1060 bank->sectors[i].is_protected = 1;
1063 stm32x_info->probed = 1;
1065 return ERROR_OK;
1068 static int stm32x_auto_probe(struct flash_bank *bank)
1070 struct stm32x_flash_bank *stm32x_info = bank->driver_priv;
1071 if (stm32x_info->probed)
1072 return ERROR_OK;
1073 return stm32x_probe(bank);
1076 #if 0
1077 COMMAND_HANDLER(stm32x_handle_part_id_command)
1079 return ERROR_OK;
1081 #endif
1083 static int get_stm32x_info(struct flash_bank *bank, char *buf, int buf_size)
1085 struct target *target = bank->target;
1086 uint32_t device_id;
1087 int printed;
1089 /* read stm32 device id register */
1090 int retval = target_read_u32(target, 0xE0042000, &device_id);
1091 if (retval != ERROR_OK)
1092 return retval;
1094 if ((device_id & 0xfff) == 0x410) {
1095 printed = snprintf(buf, buf_size, "stm32x (Medium Density) - Rev: ");
1096 buf += printed;
1097 buf_size -= printed;
1099 switch (device_id >> 16) {
1100 case 0x0000:
1101 snprintf(buf, buf_size, "A");
1102 break;
1104 case 0x2000:
1105 snprintf(buf, buf_size, "B");
1106 break;
1108 case 0x2001:
1109 snprintf(buf, buf_size, "Z");
1110 break;
1112 case 0x2003:
1113 snprintf(buf, buf_size, "Y");
1114 break;
1116 default:
1117 snprintf(buf, buf_size, "unknown");
1118 break;
1120 } else if ((device_id & 0xfff) == 0x412) {
1121 printed = snprintf(buf, buf_size, "stm32x (Low Density) - Rev: ");
1122 buf += printed;
1123 buf_size -= printed;
1125 switch (device_id >> 16) {
1126 case 0x1000:
1127 snprintf(buf, buf_size, "A");
1128 break;
1130 default:
1131 snprintf(buf, buf_size, "unknown");
1132 break;
1134 } else if ((device_id & 0xfff) == 0x414) {
1135 printed = snprintf(buf, buf_size, "stm32x (High Density) - Rev: ");
1136 buf += printed;
1137 buf_size -= printed;
1139 switch (device_id >> 16) {
1140 case 0x1000:
1141 snprintf(buf, buf_size, "A");
1142 break;
1144 case 0x1001:
1145 snprintf(buf, buf_size, "Z");
1146 break;
1148 default:
1149 snprintf(buf, buf_size, "unknown");
1150 break;
1152 } else if ((device_id & 0xfff) == 0x418) {
1153 printed = snprintf(buf, buf_size, "stm32x (Connectivity) - Rev: ");
1154 buf += printed;
1155 buf_size -= printed;
1157 switch (device_id >> 16) {
1158 case 0x1000:
1159 snprintf(buf, buf_size, "A");
1160 break;
1162 case 0x1001:
1163 snprintf(buf, buf_size, "Z");
1164 break;
1166 default:
1167 snprintf(buf, buf_size, "unknown");
1168 break;
1170 } else if ((device_id & 0xfff) == 0x420) {
1171 printed = snprintf(buf, buf_size, "stm32x (Value) - Rev: ");
1172 buf += printed;
1173 buf_size -= printed;
1175 switch (device_id >> 16) {
1176 case 0x1000:
1177 snprintf(buf, buf_size, "A");
1178 break;
1180 case 0x1001:
1181 snprintf(buf, buf_size, "Z");
1182 break;
1184 default:
1185 snprintf(buf, buf_size, "unknown");
1186 break;
1188 } else if ((device_id & 0xfff) == 0x428) {
1189 printed = snprintf(buf, buf_size, "stm32x (Value HD) - Rev: ");
1190 buf += printed;
1191 buf_size -= printed;
1193 switch (device_id >> 16) {
1194 case 0x1000:
1195 snprintf(buf, buf_size, "A");
1196 break;
1198 case 0x1001:
1199 snprintf(buf, buf_size, "Z");
1200 break;
1202 default:
1203 snprintf(buf, buf_size, "unknown");
1204 break;
1206 } else if ((device_id & 0xfff) == 0x430) {
1207 printed = snprintf(buf, buf_size, "stm32x (XL) - Rev: ");
1208 buf += printed;
1209 buf_size -= printed;
1211 switch (device_id >> 16) {
1212 case 0x1000:
1213 snprintf(buf, buf_size, "A");
1214 break;
1216 default:
1217 snprintf(buf, buf_size, "unknown");
1218 break;
1220 } else {
1221 snprintf(buf, buf_size, "Cannot identify target as a stm32x\n");
1222 return ERROR_FAIL;
1225 return ERROR_OK;
1228 COMMAND_HANDLER(stm32x_handle_lock_command)
1230 struct target *target = NULL;
1231 struct stm32x_flash_bank *stm32x_info = NULL;
1233 if (CMD_ARGC < 1)
1234 return ERROR_COMMAND_SYNTAX_ERROR;
1236 struct flash_bank *bank;
1237 int retval = CALL_COMMAND_HANDLER(flash_command_get_bank, 0, &bank);
1238 if (ERROR_OK != retval)
1239 return retval;
1241 stm32x_info = bank->driver_priv;
1243 target = bank->target;
1245 if (target->state != TARGET_HALTED) {
1246 LOG_ERROR("Target not halted");
1247 return ERROR_TARGET_NOT_HALTED;
1250 retval = stm32x_check_operation_supported(bank);
1251 if (ERROR_OK != retval)
1252 return retval;
1254 if (stm32x_erase_options(bank) != ERROR_OK) {
1255 command_print(CMD_CTX, "stm32x failed to erase options");
1256 return ERROR_OK;
1259 /* set readout protection */
1260 stm32x_info->option_bytes.RDP = 0;
1262 if (stm32x_write_options(bank) != ERROR_OK) {
1263 command_print(CMD_CTX, "stm32x failed to lock device");
1264 return ERROR_OK;
1267 command_print(CMD_CTX, "stm32x locked");
1269 return ERROR_OK;
1272 COMMAND_HANDLER(stm32x_handle_unlock_command)
1274 struct target *target = NULL;
1276 if (CMD_ARGC < 1)
1277 return ERROR_COMMAND_SYNTAX_ERROR;
1279 struct flash_bank *bank;
1280 int retval = CALL_COMMAND_HANDLER(flash_command_get_bank, 0, &bank);
1281 if (ERROR_OK != retval)
1282 return retval;
1284 target = bank->target;
1286 if (target->state != TARGET_HALTED) {
1287 LOG_ERROR("Target not halted");
1288 return ERROR_TARGET_NOT_HALTED;
1291 retval = stm32x_check_operation_supported(bank);
1292 if (ERROR_OK != retval)
1293 return retval;
1295 if (stm32x_erase_options(bank) != ERROR_OK) {
1296 command_print(CMD_CTX, "stm32x failed to unlock device");
1297 return ERROR_OK;
1300 if (stm32x_write_options(bank) != ERROR_OK) {
1301 command_print(CMD_CTX, "stm32x failed to lock device");
1302 return ERROR_OK;
1305 command_print(CMD_CTX, "stm32x unlocked.\n"
1306 "INFO: a reset or power cycle is required "
1307 "for the new settings to take effect.");
1309 return ERROR_OK;
1312 COMMAND_HANDLER(stm32x_handle_options_read_command)
1314 uint32_t optionbyte;
1315 struct target *target = NULL;
1316 struct stm32x_flash_bank *stm32x_info = NULL;
1318 if (CMD_ARGC < 1)
1319 return ERROR_COMMAND_SYNTAX_ERROR;
1321 struct flash_bank *bank;
1322 int retval = CALL_COMMAND_HANDLER(flash_command_get_bank, 0, &bank);
1323 if (ERROR_OK != retval)
1324 return retval;
1326 stm32x_info = bank->driver_priv;
1328 target = bank->target;
1330 if (target->state != TARGET_HALTED) {
1331 LOG_ERROR("Target not halted");
1332 return ERROR_TARGET_NOT_HALTED;
1335 retval = stm32x_check_operation_supported(bank);
1336 if (ERROR_OK != retval)
1337 return retval;
1339 retval = target_read_u32(target, STM32_FLASH_OBR_B0, &optionbyte);
1340 if (retval != ERROR_OK)
1341 return retval;
1342 command_print(CMD_CTX, "Option Byte: 0x%" PRIx32 "", optionbyte);
1344 if (buf_get_u32((uint8_t *)&optionbyte, OPT_ERROR, 1))
1345 command_print(CMD_CTX, "Option Byte Complement Error");
1347 if (buf_get_u32((uint8_t *)&optionbyte, OPT_READOUT, 1))
1348 command_print(CMD_CTX, "Readout Protection On");
1349 else
1350 command_print(CMD_CTX, "Readout Protection Off");
1352 if (buf_get_u32((uint8_t *)&optionbyte, OPT_RDWDGSW, 1))
1353 command_print(CMD_CTX, "Software Watchdog");
1354 else
1355 command_print(CMD_CTX, "Hardware Watchdog");
1357 if (buf_get_u32((uint8_t *)&optionbyte, OPT_RDRSTSTOP, 1))
1358 command_print(CMD_CTX, "Stop: No reset generated");
1359 else
1360 command_print(CMD_CTX, "Stop: Reset generated");
1362 if (buf_get_u32((uint8_t *)&optionbyte, OPT_RDRSTSTDBY, 1))
1363 command_print(CMD_CTX, "Standby: No reset generated");
1364 else
1365 command_print(CMD_CTX, "Standby: Reset generated");
1367 if (stm32x_info->has_dual_banks) {
1368 if (buf_get_u32((uint8_t *)&optionbyte, OPT_BFB2, 1))
1369 command_print(CMD_CTX, "Boot: Bank 0");
1370 else
1371 command_print(CMD_CTX, "Boot: Bank 1");
1374 return ERROR_OK;
1377 COMMAND_HANDLER(stm32x_handle_options_write_command)
1379 struct target *target = NULL;
1380 struct stm32x_flash_bank *stm32x_info = NULL;
1381 uint16_t optionbyte = 0xF8;
1383 if (CMD_ARGC < 4)
1384 return ERROR_COMMAND_SYNTAX_ERROR;
1386 struct flash_bank *bank;
1387 int retval = CALL_COMMAND_HANDLER(flash_command_get_bank, 0, &bank);
1388 if (ERROR_OK != retval)
1389 return retval;
1391 stm32x_info = bank->driver_priv;
1393 target = bank->target;
1395 if (target->state != TARGET_HALTED) {
1396 LOG_ERROR("Target not halted");
1397 return ERROR_TARGET_NOT_HALTED;
1400 retval = stm32x_check_operation_supported(bank);
1401 if (ERROR_OK != retval)
1402 return retval;
1404 /* REVISIT: ignores some options which we will display...
1405 * and doesn't insist on the specified syntax.
1408 /* OPT_RDWDGSW */
1409 if (strcmp(CMD_ARGV[1], "SWWDG") == 0)
1410 optionbyte |= (1 << 0);
1411 else /* REVISIT must be "HWWDG" then ... */
1412 optionbyte &= ~(1 << 0);
1414 /* OPT_RDRSTSTOP */
1415 if (strcmp(CMD_ARGV[2], "NORSTSTOP") == 0)
1416 optionbyte |= (1 << 1);
1417 else /* REVISIT must be "RSTSTNDBY" then ... */
1418 optionbyte &= ~(1 << 1);
1420 /* OPT_RDRSTSTDBY */
1421 if (strcmp(CMD_ARGV[3], "NORSTSTNDBY") == 0)
1422 optionbyte |= (1 << 2);
1423 else /* REVISIT must be "RSTSTOP" then ... */
1424 optionbyte &= ~(1 << 2);
1426 if (CMD_ARGC > 4 && stm32x_info->has_dual_banks) {
1427 /* OPT_BFB2 */
1428 if (strcmp(CMD_ARGV[4], "BOOT0") == 0)
1429 optionbyte |= (1 << 3);
1430 else
1431 optionbyte &= ~(1 << 3);
1434 if (stm32x_erase_options(bank) != ERROR_OK) {
1435 command_print(CMD_CTX, "stm32x failed to erase options");
1436 return ERROR_OK;
1439 stm32x_info->option_bytes.user_options = optionbyte;
1441 if (stm32x_write_options(bank) != ERROR_OK) {
1442 command_print(CMD_CTX, "stm32x failed to write options");
1443 return ERROR_OK;
1446 command_print(CMD_CTX, "stm32x write options complete.\n"
1447 "INFO: a reset or power cycle is required "
1448 "for the new settings to take effect.");
1450 return ERROR_OK;
1453 static int stm32x_mass_erase(struct flash_bank *bank)
1455 struct target *target = bank->target;
1457 if (target->state != TARGET_HALTED) {
1458 LOG_ERROR("Target not halted");
1459 return ERROR_TARGET_NOT_HALTED;
1462 /* unlock option flash registers */
1463 int retval = target_write_u32(target, stm32x_get_flash_reg(bank, STM32_FLASH_KEYR), KEY1);
1464 if (retval != ERROR_OK)
1465 return retval;
1466 retval = target_write_u32(target, stm32x_get_flash_reg(bank, STM32_FLASH_KEYR), KEY2);
1467 if (retval != ERROR_OK)
1468 return retval;
1470 /* mass erase flash memory */
1471 retval = target_write_u32(target, stm32x_get_flash_reg(bank, STM32_FLASH_CR), FLASH_MER);
1472 if (retval != ERROR_OK)
1473 return retval;
1474 retval = target_write_u32(target, stm32x_get_flash_reg(bank, STM32_FLASH_CR),
1475 FLASH_MER | FLASH_STRT);
1476 if (retval != ERROR_OK)
1477 return retval;
1479 retval = stm32x_wait_status_busy(bank, 100);
1480 if (retval != ERROR_OK)
1481 return retval;
1483 retval = target_write_u32(target, stm32x_get_flash_reg(bank, STM32_FLASH_CR), FLASH_LOCK);
1484 if (retval != ERROR_OK)
1485 return retval;
1487 return ERROR_OK;
1490 COMMAND_HANDLER(stm32x_handle_mass_erase_command)
1492 int i;
1494 if (CMD_ARGC < 1)
1495 return ERROR_COMMAND_SYNTAX_ERROR;
1497 struct flash_bank *bank;
1498 int retval = CALL_COMMAND_HANDLER(flash_command_get_bank, 0, &bank);
1499 if (ERROR_OK != retval)
1500 return retval;
1502 retval = stm32x_mass_erase(bank);
1503 if (retval == ERROR_OK) {
1504 /* set all sectors as erased */
1505 for (i = 0; i < bank->num_sectors; i++)
1506 bank->sectors[i].is_erased = 1;
1508 command_print(CMD_CTX, "stm32x mass erase complete");
1509 } else
1510 command_print(CMD_CTX, "stm32x mass erase failed");
1512 return retval;
1515 static const struct command_registration stm32x_exec_command_handlers[] = {
1517 .name = "lock",
1518 .handler = stm32x_handle_lock_command,
1519 .mode = COMMAND_EXEC,
1520 .usage = "bank_id",
1521 .help = "Lock entire flash device.",
1524 .name = "unlock",
1525 .handler = stm32x_handle_unlock_command,
1526 .mode = COMMAND_EXEC,
1527 .usage = "bank_id",
1528 .help = "Unlock entire protected flash device.",
1531 .name = "mass_erase",
1532 .handler = stm32x_handle_mass_erase_command,
1533 .mode = COMMAND_EXEC,
1534 .usage = "bank_id",
1535 .help = "Erase entire flash device.",
1538 .name = "options_read",
1539 .handler = stm32x_handle_options_read_command,
1540 .mode = COMMAND_EXEC,
1541 .usage = "bank_id",
1542 .help = "Read and display device option byte.",
1545 .name = "options_write",
1546 .handler = stm32x_handle_options_write_command,
1547 .mode = COMMAND_EXEC,
1548 .usage = "bank_id ('SWWDG'|'HWWDG') "
1549 "('RSTSTNDBY'|'NORSTSTNDBY') "
1550 "('RSTSTOP'|'NORSTSTOP')",
1551 .help = "Replace bits in device option byte.",
1553 COMMAND_REGISTRATION_DONE
1556 static const struct command_registration stm32x_command_handlers[] = {
1558 .name = "stm32f1x",
1559 .mode = COMMAND_ANY,
1560 .help = "stm32f1x flash command group",
1561 .usage = "",
1562 .chain = stm32x_exec_command_handlers,
1564 COMMAND_REGISTRATION_DONE
1567 struct flash_driver stm32f1x_flash = {
1568 .name = "stm32f1x",
1569 .commands = stm32x_command_handlers,
1570 .flash_bank_command = stm32x_flash_bank_command,
1571 .erase = stm32x_erase,
1572 .protect = stm32x_protect,
1573 .write = stm32x_write,
1574 .read = default_flash_read,
1575 .probe = stm32x_probe,
1576 .auto_probe = stm32x_auto_probe,
1577 .erase_check = default_flash_mem_blank_check,
1578 .protect_check = stm32x_protect_check,
1579 .info = get_stm32x_info,