1 # Quirks to bypass missing SRST on JTAG connector
2 # EVALSPEAr310 Rev. 2.0
3 # http://www.st.com/spear
6 # Author: Antonio Borneo <borneo.antonio@gmail.com>
8 # For boards that have JTAG SRST not connected.
9 # We use "arm9 vector_catch reset" to catch button reset event.
12 $_TARGETNAME configure -event reset-assert sp_reset_assert
13 $_TARGETNAME configure -event reset-deassert-post sp_reset_deassert_post
15 # keeps the name of the SPEAr target
17 set sp_target_name $_TARGETNAME
19 # Keeps the argument of "reset" command (run, init, halt).
23 # Helper procedure. Returns 0 is target is halted.
24 proc sp_is_halted {} {
27 return [expr {[string compare [$sp_target_name curstate] "halted" ] == 0}]
30 # wait for reset button to be pressed, causing CPU to get halted
31 proc sp_reset_deassert_post {} {
40 echo "====> Press reset button on the board <===="
41 for {set i 0} { [sp_is_halted] == 0 } { set i [expr {$i + 1}]} {
42 echo -n "$bar([expr {$i & 3}])\r"
46 # Remove catch reset event
47 arm9 vector_catch none
49 # CPU is halted, but we typed "reset run" ...
50 if { [string compare $sp_reset_mode "run"] == 0 } {
55 # Override reset-assert, since no SRST available
57 proc sp_reset_assert {} {
58 arm9 vector_catch reset
61 # Override default init_reset{mode} to catch parameter "mode"
62 proc init_reset {mode} {
65 set sp_reset_mode $mode
67 # We need to detect CPU get halted, so exit from halt
68 if { [sp_is_halted] } {
69 echo "Resuming CPU to detect reset"
73 # Execute default init_reset{mode}