1# Defines basic Tcl procs for OpenOCD JTAG module 2 3# Executed during "init". Can be overridden 4# by board/target/... scripts 5proc jtag_init {} { 6 if {[catch {jtag arp_init} err]!=0} { 7 # try resetting additionally 8 init_reset startup 9 } 10} 11 12# This reset logic may be overridden by board/target/... scripts as needed 13# to provide a reset that, if possible, is close to a power-up reset. 14# 15# Exit requirements include: (a) JTAG must be working, (b) the scan 16# chain was validated with "jtag arp_init" (or equivalent), (c) nothing 17# stays in reset. No TAP-specific scans were performed. It's OK if 18# some targets haven't been reset yet; they may need TAP-specific scans. 19# 20# The "mode" values include: halt, init, run (from "reset" command); 21# startup (at OpenOCD server startup, when JTAG may not yet work); and 22# potentially more (for reset types like cold, warm, etc) 23proc init_reset { mode } { 24 if {[using_jtag]} { 25 jtag arp_init-reset 26 } 27} 28 29######### 30 31# TODO: power_restore and power_dropout are currently neither 32# documented nor supported except on ZY1000. 33 34proc power_restore {} { 35 echo "Sensed power restore, running reset init and halting GDB." 36 reset init 37 38 # Halt GDB so user can deal with a detected power restore. 39 # 40 # After GDB is halted, then output is no longer forwarded 41 # to the GDB console. 42 set targets [target names] 43 foreach t $targets { 44 # New event script. 45 $t invoke-event arp_halt_gdb 46 } 47} 48 49add_help_text power_restore "Overridable procedure run when power restore is detected. Runs 'reset init' by default." 50 51proc power_dropout {} { 52 echo "Sensed power dropout." 53} 54 55######### 56 57# TODO: srst_deasserted and srst_asserted are currently neither 58# documented nor supported except on ZY1000. 59 60proc srst_deasserted {} { 61 echo "Sensed nSRST deasserted, running reset init and halting GDB." 62 reset init 63 64 # Halt GDB so user can deal with a detected reset. 65 # 66 # After GDB is halted, then output is no longer forwarded 67 # to the GDB console. 68 set targets [target names] 69 foreach t $targets { 70 # New event script. 71 $t invoke-event arp_halt_gdb 72 } 73} 74 75add_help_text srst_deasserted "Overridable procedure run when srst deassert is detected. Runs 'reset init' by default." 76 77proc srst_asserted {} { 78 echo "Sensed nSRST asserted." 79} 80 81# measure actual JTAG clock 82proc measure_clk {} { 83 set start_time [ms]; 84 set iterations 10000000; 85 runtest $iterations; 86 echo "Running at more than [expr $iterations.0 / ([ms]-$start_time)] kHz"; 87} 88 89add_help_text measure_clk "Runs a test to measure the JTAG clk. Useful with RCLK / RTCK." 90 91proc default_to_jtag { f args } { 92 set current_transport [transport select] 93 if {[using_jtag]} { 94 eval $f $args 95 } { 96 error "session transport is \"$current_transport\" but your config requires JTAG" 97 } 98} 99 100proc jtag args { 101 eval default_to_jtag jtag $args 102} 103 104proc jtag_rclk args { 105 eval default_to_jtag jtag_rclk $args 106} 107 108proc jtag_ntrst_delay args { 109 eval default_to_jtag jtag_ntrst_delay $args 110} 111 112proc jtag_ntrst_assert_width args { 113 eval default_to_jtag jtag_ntrst_assert_width $args 114} 115 116# BEGIN MIGRATION AIDS ... these adapter operations originally had 117# JTAG-specific names despite the fact that the operations were not 118# specific to JTAG, or otherwise had troublesome/misleading names. 119# 120# FIXME phase these aids out after about April 2011 121# 122proc jtag_khz args { 123 echo "DEPRECATED! use 'adapter speed' not 'jtag_khz'" 124 eval adapter speed $args 125} 126 127proc jtag_nsrst_delay args { 128 echo "DEPRECATED! use 'adapter srst delay' not 'jtag_nsrst_delay'" 129 eval adapter srst delay $args 130} 131 132proc jtag_nsrst_assert_width args { 133 echo "DEPRECATED! use 'adapter srst pulse_width' not 'jtag_nsrst_assert_width'" 134 eval adapter srst pulse_width $args 135} 136 137proc jtag_reset args { 138 echo "DEPRECATED! use 'adapter \[de\]assert' not 'jtag_reset'" 139 switch $args { 140 "0 0" 141 {eval adapter deassert trst deassert srst} 142 "0 1" 143 {eval adapter deassert trst assert srst} 144 "1 0" 145 {eval adapter assert trst deassert srst} 146 "1 1" 147 {eval adapter assert trst assert srst} 148 default 149 {return -code 1 -level 1 "jtag_reset: syntax error"} 150 } 151} 152 153# stlink migration helpers 154proc stlink_device_desc args { 155 echo "DEPRECATED! use 'hla_device_desc' not 'stlink_device_desc'" 156 eval hla_device_desc $args 157} 158 159proc stlink_serial args { 160 echo "DEPRECATED! use 'hla_serial' not 'stlink_serial'" 161 eval hla_serial $args 162} 163 164proc stlink_layout args { 165 echo "DEPRECATED! use 'hla_layout' not 'stlink_layout'" 166 eval hla_layout $args 167} 168 169proc stlink_vid_pid args { 170 echo "DEPRECATED! use 'hla_vid_pid' not 'stlink_vid_pid'" 171 eval hla_vid_pid $args 172} 173 174proc stlink args { 175 echo "DEPRECATED! use 'hla' not 'stlink'" 176 eval hla $args 177} 178 179proc adapter_khz args { 180 echo "DEPRECATED! use 'adapter speed' not 'adapter_khz'" 181 eval adapter speed $args 182} 183 184proc adapter_name args { 185 echo "DEPRECATED! use 'adapter name' not 'adapter_name'" 186 eval adapter name $args 187} 188 189proc adapter_nsrst_delay args { 190 echo "DEPRECATED! use 'adapter srst delay' not 'adapter_nsrst_delay'" 191 eval adapter srst delay $args 192} 193 194proc adapter_nsrst_assert_width args { 195 echo "DEPRECATED! use 'adapter srst pulse_width' not 'adapter_nsrst_assert_width'" 196 eval adapter srst pulse_width $args 197} 198 199proc interface args { 200 echo "DEPRECATED! use 'adapter driver' not 'interface'" 201 eval adapter driver $args 202} 203 204proc interface_transports args { 205 echo "DEPRECATED! use 'adapter transports' not 'interface_transports'" 206 eval adapter transports $args 207} 208 209proc interface_list args { 210 echo "DEPRECATED! use 'adapter list' not 'interface_list'" 211 eval adapter list $args 212} 213 214proc ftdi_location args { 215 echo "DEPRECATED! use 'adapter usb location' not 'ftdi_location'" 216 eval adapter usb location $args 217} 218 219proc xds110_serial args { 220 echo "DEPRECATED! use 'xds110 serial' not 'xds110_serial'" 221 eval xds110 serial $args 222} 223 224proc xds110_supply_voltage args { 225 echo "DEPRECATED! use 'xds110 supply' not 'xds110_supply_voltage'" 226 eval xds110 supply $args 227} 228 229proc hla {cmd args} { 230 tailcall "hla $cmd" {*}$args 231} 232 233proc "hla newtap" {args} { 234 echo "DEPRECATED! use 'swj_newdap' not 'hla newtap'" 235 eval swj_newdap $args 236} 237 238# END MIGRATION AIDS 239