]> git.sur5r.net Git - openocd/blobdiff - src/target/startup.tcl
jtag: drivers: buspirate: fix abuse of "char" type
[openocd] / src / target / startup.tcl
index 02cefb09b23a1b83413083a39979b89393395d5b..cf844e1f64c3734a0f5b76978688c52048e52b1b 100644 (file)
@@ -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,41 @@ 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"
+               set_default_target_event $t gdb-attach "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
+}