X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Ftarget%2Fstartup.tcl;h=9bbc6e32c92358fc054750e3f9158403aa456661;hp=02cefb09b23a1b83413083a39979b89393395d5b;hb=53a936afc0092f4a65975d35bab0e10944fad3db;hpb=4db24acb931304355f59560789c5d92b99fb2962 diff --git a/src/target/startup.tcl b/src/target/startup.tcl index 02cefb09b2..9bbc6e32c9 100644 --- a/src/target/startup.tcl +++ b/src/target/startup.tcl @@ -63,8 +63,12 @@ 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 + if {![using_jtag] || [jtag tapisenabled [$t cget -chain-position]]} { + $t invoke-event examine-start + set err [catch "$t arp_examine allow-defer"] + if { $err == 0 } { + $t invoke-event examine-end + } } } @@ -75,7 +79,7 @@ proc ocd_process_reset_inner { MODE } { } foreach t $targets { # C code needs to know if we expect to 'halt' - if {[jtag tapisenabled [$t cget -chain-position]]} { + if {![using_jtag] || [jtag tapisenabled [$t cget -chain-position]]} { $t arp_reset assert $halt } } @@ -90,7 +94,7 @@ proc ocd_process_reset_inner { MODE } { } foreach t $targets { # Again, de-assert code needs to know if we 'halt' - if {[jtag tapisenabled [$t cget -chain-position]]} { + if {![using_jtag] || [jtag tapisenabled [$t cget -chain-position]]} { $t arp_reset deassert $halt } } @@ -103,7 +107,13 @@ proc ocd_process_reset_inner { MODE } { # first executing any instructions. if { $halt } { foreach t $targets { - if {[jtag tapisenabled [$t cget -chain-position]] == 0} { + if {[using_jtag] && ![jtag tapisenabled [$t cget -chain-position]]} { + continue + } + + # don't wait for targets where examination is deferred + # they can not be halted anyway at this point + if { ![$t was_examined] && [$t examine_deferred] } { continue } @@ -127,7 +137,13 @@ proc ocd_process_reset_inner { MODE } { #Pass 2 - if needed "init" if { 0 == [string compare init $MODE] } { foreach t $targets { - if {[jtag tapisenabled [$t cget -chain-position]] == 0} { + if {[using_jtag] && ![jtag tapisenabled [$t cget -chain-position]]} { + continue + } + + # don't wait for targets where examination is deferred + # they can not be halted anyway at this point + if { ![$t was_examined] && [$t examine_deferred] } { continue } @@ -144,6 +160,21 @@ proc ocd_process_reset_inner { MODE } { } } +proc using_jtag {} { + set _TRANSPORT [ transport select ] + expr { [ string first "jtag" $_TRANSPORT ] != -1 } +} + +proc using_swd {} { + set _TRANSPORT [ transport select ] + expr { [ string first "swd" $_TRANSPORT ] != -1 } +} + +proc using_hla {} { + set _TRANSPORT [ transport select ] + expr { [ string first "hla" $_TRANSPORT ] != -1 } +} + ######### # Temporary migration aid. May be removed starting in January 2011. @@ -152,14 +183,40 @@ 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 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 {} { } + +# deprecated target name cmds +proc cortex_m3 args { + echo "DEPRECATED! use 'cortex_m' not 'cortex_m3'" + eval cortex_m $args +} + +proc cortex_a8 args { + echo "DEPRECATED! use 'cortex_a' not 'cortex_a8'" + eval cortex_a $args +}