1 # SPDX-License-Identifier: GPL-2.0-or-later
3 # Quirks to bypass missing SRST on JTAG connector
4 # EVALSPEAr310 Rev. 2.0
5 # http://www.st.com/spear
8 # Author: Antonio Borneo <borneo.antonio@gmail.com>
10 # For boards that have JTAG SRST not connected.
11 # We use "arm9 vector_catch reset" to catch button reset event.
14 $_TARGETNAME configure -event reset-assert sp_reset_assert
15 $_TARGETNAME configure -event reset-deassert-post sp_reset_deassert_post
17 # keeps the name of the SPEAr target
19 set sp_target_name $_TARGETNAME
21 # Keeps the argument of "reset" command (run, init, halt).
25 # Helper procedure. Returns 0 is target is halted.
26 proc sp_is_halted {} {
29 return [expr {[string compare [$sp_target_name curstate] "halted" ] == 0}]
32 # wait for reset button to be pressed, causing CPU to get halted
33 proc sp_reset_deassert_post {} {
42 echo "====> Press reset button on the board <===="
43 for {set i 0} { [sp_is_halted] == 0 } { set i [expr {$i + 1}]} {
44 echo -n "$bar([expr {$i & 3}])\r"
48 # Remove catch reset event
49 arm9 vector_catch none
51 # CPU is halted, but we typed "reset run" ...
52 if { [string compare $sp_reset_mode "run"] == 0 } {
57 # Override reset-assert, since no SRST available
59 proc sp_reset_assert {} {
60 arm9 vector_catch reset
63 # Override default init_reset{mode} to catch parameter "mode"
64 proc init_reset {mode} {
67 set sp_reset_mode $mode
69 # We need to detect CPU get halted, so exit from halt
70 if { [sp_is_halted] } {
71 echo "Resuming CPU to detect reset"
75 # Execute default init_reset{mode}