diff options
author | Spencer Oliver <spen@spen-soft.co.uk> | 2012-05-10 22:36:23 +0100 |
---|---|---|
committer | Spencer Oliver <spen@spen-soft.co.uk> | 2012-05-21 16:20:07 +0000 |
commit | 1dd462a6d613a48d518e925738b680b124055e61 (patch) | |
tree | fc7148509bcfbd3b335d8ff952115966ba770cae | |
parent | 25b855d2d2eaa68787799c97b654167ddec04f85 (diff) |
target: enable TARGET_EVENT_EXAMINE_* events
Change-Id: I33efc0994b7bfe0faa2f4e8457fcc3c8e43d3571
Signed-off-by: Spencer Oliver <spen@spen-soft.co.uk>
Reviewed-on: http://openocd.zylin.com/635
Reviewed-by: Freddie Chopin <freddie.chopin@gmail.com>
Tested-by: jenkins
Reviewed-by: Bill Traynor <wmat@alphatroop.com>
-rw-r--r-- | doc/openocd.texi | 9 | ||||
-rw-r--r-- | src/target/startup.tcl | 10 | ||||
-rw-r--r-- | src/target/target.c | 18 |
3 files changed, 26 insertions, 11 deletions
diff --git a/doc/openocd.texi b/doc/openocd.texi index 8d0ce620..91c50f1a 100644 --- a/doc/openocd.texi +++ b/doc/openocd.texi @@ -4227,12 +4227,10 @@ The following target events are defined: @* The target has resumed (i.e.: gdb said run) @item @b{early-halted} @* Occurs early in the halt process -@ignore -@item @b{examine-end} -@* Currently not used (goal: when JTAG examine completes) @item @b{examine-start} -@* Currently not used (goal: when JTAG examine starts) -@end ignore +@* Before target examine is called. +@item @b{examine-end} +@* After target examine is called with no errors. @item @b{gdb-attach} @* When GDB connects. This is before any communication with the target, so this can be used to set up the target so it is possible to probe flash. Probing flash @@ -4318,7 +4316,6 @@ when reset disables PLLs needed to use a fast clock. @* Target has resumed @end itemize - @node Flash Commands @chapter Flash Commands diff --git a/src/target/startup.tcl b/src/target/startup.tcl index 02cefb09..90f947df 100644 --- a/src/target/startup.tcl +++ b/src/target/startup.tcl @@ -64,7 +64,11 @@ proc ocd_process_reset_inner { MODE } { # Examine all targets on enabled taps. foreach t $targets { if {[jtag tapisenabled [$t cget -chain-position]]} { - $t arp_examine + $t invoke-event examine-start + set err [catch "$t arp_examine"] + if { $err == 0 } { + $t invoke-event examine-end + } } } @@ -152,8 +156,8 @@ proc armv4_5 params { arm $params } -# Target/chain configuration scripts can either execute commands directly -# or define a procedure which is executed once all configuration +# Target/chain configuration scripts can either execute commands directly +# or define a procedure which is executed once all configuration # scripts have completed. # # By default(classic) the config scripts will set up the target configuration diff --git a/src/target/target.c b/src/target/target.c index ccaa6e39..7dae8a9f 100644 --- a/src/target/target.c +++ b/src/target/target.c @@ -611,9 +611,17 @@ static int jtag_enable_callback(enum jtag_event event, void *priv) return ERROR_OK; jtag_unregister_event_callback(jtag_enable_callback, target); - return target_examine_one(target); -} + target_call_event_callbacks(target, TARGET_EVENT_EXAMINE_START); + + int retval = target_examine_one(target); + if (retval != ERROR_OK) + return retval; + + target_call_event_callbacks(target, TARGET_EVENT_EXAMINE_END); + + return retval; +} /* Targets that correctly implement init + examine, i.e. * no communication with target during init: @@ -632,12 +640,18 @@ int target_examine(void) target); continue; } + + target_call_event_callbacks(target, TARGET_EVENT_EXAMINE_START); + retval = target_examine_one(target); if (retval != ERROR_OK) return retval; + + target_call_event_callbacks(target, TARGET_EVENT_EXAMINE_END); } return retval; } + const char *target_type_name(struct target *target) { return target->type->name; |