-#########
+# Defines basic Tcl procs for OpenOCD target module
-# This reset logic may be overridden by board/target/... scripts as needed
-# to provide a reset that, if possible, is close to a power-up reset.
-#
-# Exit requirements include: (a) JTAG must be working, (b) the scan
-# chain was validated with "jtag arp_init" (or equivalent), (c) nothing
-# stays in reset. No TAP-specific scans were performed. It's OK if
-# some targets haven't been reset yet; they may need TAP-specific scans.
-#
-# The "mode" values include: halt, init, run (from "reset" command);
-# startup (at OpenOCD server startup, when JTAG may not yet work); and
-# potentially more (for reset types like cold, warm, etc)
-proc init_reset { mode } {
- jtag arp_init-reset
+proc new_target_name { } {
+ return [target number [expr [target count] - 1 ]]
}
-
global in_process_reset
set in_process_reset 0
set halt 0;
}
if { $halt < 0 } {
- return -error "Invalid mode: $MODE, must be one of: halt, init, or run";
+ return -code error "Invalid mode: $MODE, must be one of: halt, init, or run";
}
# Target event handlers *might* change which TAPs are enabled
# 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"]
+ if { $err == 0 } {
+ $t invoke-event examine-end
+ }
}
}
}
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
}
}
}
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
}
}
# 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
}
set s [$t curstate]
if { 0 != [string compare $s "halted" ] } {
- return -error [format "TARGET: %s - Not halted" $t]
+ return -code error [format "TARGET: %s - Not halted" $t]
}
}
}
#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
}
}
}
+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.
echo "DEPRECATED! use 'arm $params' not 'armv4_5 $params'"
arm $params
}
+
+# 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
+}