diff options
author | Paul Fertser <fercerpav@gmail.com> | 2014-03-22 16:47:37 +0400 |
---|---|---|
committer | Paul Fertser <fercerpav@gmail.com> | 2014-03-29 08:40:03 +0000 |
commit | 207237b92005d604b75ff5280042a6c286a685f8 (patch) | |
tree | dbe5dbb408ac7470a8b6f1c06f57defef8d79a5a /src | |
parent | de9ebc5ce6432830d473aba769c34ae38794c947 (diff) |
tcl: introduce init_target_events and use it for gdb flashing events
This introduces a new global Tcl procedure that is run just after
init_targets and before init_boards.
Its default behaviour is to assign gdb-flash-erase-start and
gdb-flash-write-end to reasonable defaults.
The rationale for doing "reset init" before gdb erases and flashes
memory is that all flash drivers are written in assumption that they
can safely be used only after chip reset (plus chip-specific
configuration in the init handler if any). The need to use "reset
halt" after flashing is because a user expects running firmware after
loading to be the same as running it from power-on-reset.
Change-Id: I9ddc4047611904ca4ca779b73376d2739611948a
Signed-off-by: Paul Fertser <fercerpav@gmail.com>
Reviewed-on: http://openocd.zylin.com/2062
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
Diffstat (limited to 'src')
-rw-r--r-- | src/target/startup.tcl | 15 | ||||
-rw-r--r-- | src/target/target.c | 4 |
2 files changed, 19 insertions, 0 deletions
diff --git a/src/target/startup.tcl b/src/target/startup.tcl index 56fcbaa7..033e9c9c 100644 --- a/src/target/startup.tcl +++ b/src/target/startup.tcl @@ -164,6 +164,21 @@ proc armv4_5 params { proc init_targets {} { } +proc set_default_target_event {t e s} { + if {[$t cget -event $e] == ""} { + $t configure -event $e $s + } +} + +proc init_target_events {} { + set targets [target names] + + foreach t $targets { + set_default_target_event $t gdb-flash-erase-start "reset init" + set_default_target_event $t gdb-flash-write-end "reset halt" + } +} + # Additionally board config scripts can define a procedure init_board that will be executed after init and init_targets proc init_board {} { } diff --git a/src/target/target.c b/src/target/target.c index f5a8666b..98201554 100644 --- a/src/target/target.c +++ b/src/target/target.c @@ -1274,6 +1274,10 @@ COMMAND_HANDLER(handle_target_init_command) if (ERROR_OK != retval) return retval; + retval = command_run_line(CMD_CTX, "init_target_events"); + if (ERROR_OK != retval) + return retval; + retval = command_run_line(CMD_CTX, "init_board"); if (ERROR_OK != retval) return retval; |