# Show flash in human readable form
# This is an example of a human readable form of a low level fn
-proc flash_banks {} {
- set i 0
+proc flash_banks {} {
+ set i 0
set result ""
foreach {a} [ocd_flash_banks] {
if {$i > 0} {
set result "$result\n"
}
set result [format "$result#%d: %s at 0x%08x, size 0x%08x, buswidth %d, chipwidth %d" $i $a(name) $a(base) $a(size) $a(bus_width) $a(chip_width)]
- set i [expr $i+1]
- }
+ set i [expr $i+1]
+ }
return $result
}
set n 0
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]]
set next_a [expr $lastpos+$n+1]
}
}
-
-
+
+
puts [format "%-25s %s" $cmdname [string range $h $n [expr $next_a-1]] ]
set cmdname ""
set n [expr $next_a]
set in_process_reset 0
return -code error "'reset' can not be invoked recursively"
}
-
+
set in_process_reset 1
- set success [expr [catch {ocd_process_reset_inner $MODE} result]==0]
+ set success [expr [catch {ocd_process_reset_inner $MODE} result]==0]
set in_process_reset 0
-
+
if {$success} {
return $result
} else {
}
# Assert SRST, and report the pre/post events.
- #
- # REVISIT this presumes a single-target config, since SRST
- # applies to the whole device-under-test. When two targets
- # both need special setup before SRST, it's only done for
- # the first one...
+ # Note: no target sees SRST before "pre" or after "post".
foreach t $targets {
$t invoke-event reset-assert-pre
+ }
+ foreach t $targets {
# C code needs to know if we expect to 'halt'
if {[jtag tapisenabled [$t cget -chain-position]]} {
$t arp_reset assert $halt
}
+ }
+ foreach t $targets {
$t invoke-event reset-assert-post
}
# Now de-assert SRST, and report the pre/post events.
+ # Note: no target sees !SRST before "pre" or after "post".
foreach t $targets {
$t invoke-event reset-deassert-pre
- # Again, de-assert code needs to know..
+ }
+ foreach t $targets {
+ # Again, de-assert code needs to know if we 'halt'
if {[jtag tapisenabled [$t cget -chain-position]]} {
$t arp_reset deassert $halt
}
+ }
+ foreach t $targets {
$t invoke-event reset-deassert-post
}
# the JTAG tap reset signal might be hooked to a slow
# resistor/capacitor circuit - and it might take a while
# to charge
-
+
# Catch, but ignore any errors.
catch { $t arp_waitstate halted 1000 }
-
+
# Did we succeed?
set s [$t curstate]
-
+
if { 0 != [string compare $s "halted" ] } {
return -error [format "TARGET: %s - Not halted" $t]
}
set err [catch "$t arp_waitstate halted 5000"]
# Did it halt?
if { $err == 0 } {
- $t invoke-event reset-init
+ $t invoke-event reset-init
}
}
}
# A list of names of CPU and options required
set ocd_cpu_list {
{
- name IXP42x
- options {xscale -variant IXP42x}
+ name IXP42x
+ options {xscale -variant IXP42x}
comment {IXP42x cpu}
}
{
- name arm7
- options {arm7tdmi -variant arm7tdmi}
+ name arm7
+ options {arm7tdmi -variant arm7tdmi}
comment {vanilla ARM7}
}
}
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
+ lappend result $a
}
}
return $result
catch {
capture {uplevel $a}
} result
- return $result
+ return $result
}