global ocd_helptext
set cmd $args
foreach a [lsort $ocd_helptext] {
- if {[string length $cmd]==0||[string first $cmd $a]!=-1||[string first $cmd [lindex $a 1]]!=-1} {
+ if {[string length $cmd] == 0 || \
+ [string first $cmd $a] != -1 || \
+ [string first $cmd [lindex $a 1]] != -1} \
+ {
set w 50
set cmdname [lindex $a 0]
set h [lindex $a 1]
while 1 {
if {$n > [string length $h]} {break}
- set next_a [expr $n+$w]
- if {[string length $h]>$n+$w} {
- set xxxx [string range $h $n [expr $n+$w]]
- for {set lastpos [expr [string length $xxxx]-1]} {$lastpos>=0&&[string compare [string range $xxxx $lastpos $lastpos] " "]!=0} {set lastpos [expr $lastpos-1]} {
+ set next_a [expr $n + $w]
+ if {[string length $h] > $n + $w} \
+ {
+ set xxxx [string range $h $n [expr $n + $w]]
+ for {set lastpos [expr [string length $xxxx] - 1]} \
+ {$lastpos >= 0 && [string compare \
+ [string range $xxxx $lastpos $lastpos] " "] != 0} \
+ {set lastpos [expr $lastpos - 1]} \
+ {
}
#set next_a -1
- if {$lastpos!=-1} {
- set next_a [expr $lastpos+$n+1]
+ if {$lastpos != -1} {
+ set next_a [expr $lastpos + $n + 1]
}
}
-
- puts [format "%-25s %s" $cmdname [string range $h $n [expr $next_a-1]] ]
+ puts [format "%-25s %s" $cmdname \
+ [string range $h $n [expr $next_a-1]] ]
set cmdname ""
set n [expr $next_a]
}
reset halt
}
+
+# 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
+}
+
+
global in_process_reset
set in_process_reset 0
# Use TRST or TMS/TCK operations to reset all the tap controllers.
# TAP reset events get reported; they might enable some taps.
- #
- # REVISIT arp_init-reset pulses SRST (if it can) with TRST active;
- # but SRST events aren't reported (unlike "jtag arp_reset", below)
- jtag arp_init-reset
+ init_reset $MODE
# Examine all targets on enabled taps.
foreach t $targets {
}
}
-# stubs for targets scripts that do not have production procedure
-proc production_info {} {
- return "Imagine an explanation here..."
-}
-add_help_text production_info "Displays information on production procedure for target script. Implement this procedure in target script."
-
-proc production {firmwarefile serialnumber} {
- puts "Imagine production procedure running successfully. Programmed $firmwarefile with serial number $serialnumber"
-}
-
-add_help_text production "<serialnumber> - Runs production procedure. Throws exception if procedure failed. Prints progress messages. Implement this procedure in the target script."
-
-proc production_test {} {
- puts "Imagine nifty test procedure having run to completion here."
-}
-add_help_text production_test "Runs test procedure. Throws exception if procedure failed. Prints progress messages. Implement in target script."
-
-add_help_text cpu "<name> - prints out target options and a comment on CPU which matches name"
-
-# A list of names of CPU and options required
-set ocd_cpu_list {
- {
- name IXP42x
- options {xscale -variant IXP42x}
- comment {IXP42x cpu}
- }
- {
- name arm7
- options {arm7tdmi -variant arm7tdmi}
- comment {vanilla ARM7}
- }
-}
-
-# Invoked from Tcl code
-proc ocd_cpu {args} {
- set name $args
- set result ""
- global ocd_cpu_list
- foreach a [lsort $ocd_cpu_list] {
- if {[string length $args]==0||[string first [string toupper $name] [string toupper "$a(name)$a(options)$a(comment)"]]!=-1} {
- lappend result $a
- }
- }
- return $result
-}
+#########
-proc cpu {args} {
- # 0123456789012345678901234567890123456789012345678901234567890123456789
- puts "CPU Options Comment"
- foreach a [lsort [ocd_cpu $args]] {
- puts [format "%-20s%-40s%s" $a(name) $a(options) $a(comment)]
- }
-}
+# REVISIT power_restore, power_dropout, srst_deasserted, srst_asserted
+# are currently neither documented nor supported except on ZY1000.
proc power_restore {} {
puts "Sensed power restore."
puts "Sensed nSRST asserted."
}
+#########
+
# catch any exceptions, capture output and return output
proc capture_catch {a} {
catch {
} result
return $result
}
+
+
+# Executed during "init". Can be overridden
+# by board/target/... scripts
+proc jtag_init {} {
+ if {[catch {jtag arp_init} err]!=0} {
+ # try resetting additionally
+ init_reset startup
+ }
+}