openocd: build: add SPDX tag
[fw/openocd] / src / target / startup.tcl
index 9bbc6e32c92358fc054750e3f9158403aa456661..290e79d1eee3ab13a1f193f887114c813b313dd1 100644 (file)
@@ -1,7 +1,9 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+
 # Defines basic Tcl procs for OpenOCD target module
 
 proc new_target_name { } {
-       return [target number [expr [target count] - 1 ]]
+       return [target number [expr {[target count] - 1}]]
 }
 
 global in_process_reset
@@ -16,7 +18,7 @@ proc ocd_process_reset { MODE } {
        }
 
        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} {
@@ -30,18 +32,17 @@ proc ocd_process_reset_inner { MODE } {
        set targets [target names]
 
        # If this target must be halted...
-       set halt -1
-       if { 0 == [string compare $MODE halt] } {
-               set halt 1
-       }
-       if { 0 == [string compare $MODE init] } {
-               set halt 1;
-       }
-       if { 0 == [string compare $MODE run ] } {
-               set halt 0;
-       }
-       if { $halt < 0 } {
-               return -code error "Invalid mode: $MODE, must be one of: halt, init, or run";
+       switch $MODE {
+               halt -
+               init {
+                       set halt 1
+               }
+               run {
+                       set halt 0
+               }
+               default {
+                       return -code error "Invalid mode: $MODE, must be one of: halt, init, or run";
+               }
        }
 
        # Target event handlers *might* change which TAPs are enabled
@@ -66,7 +67,9 @@ proc ocd_process_reset_inner { MODE } {
                if {![using_jtag] || [jtag tapisenabled [$t cget -chain-position]]} {
                        $t invoke-event examine-start
                        set err [catch "$t arp_examine allow-defer"]
-                       if { $err == 0 } {
+                       if { $err } {
+                               $t invoke-event examine-fail
+                       } else {
                                $t invoke-event examine-end
                        }
                }
@@ -117,7 +120,7 @@ proc ocd_process_reset_inner { MODE } {
                                continue
                        }
 
-                       # Wait upto 1 second for target to halt.  Why 1sec? Cause
+                       # Wait up to 1 second for target to halt. Why 1sec? Cause
                        # the JTAG tap reset signal might be hooked to a slow
                        # resistor/capacitor circuit - and it might take a while
                        # to charge
@@ -128,14 +131,14 @@ proc ocd_process_reset_inner { MODE } {
                        # Did we succeed?
                        set s [$t curstate]
 
-                       if { 0 != [string compare $s "halted" ] } {
+                       if { $s != "halted" } {
                                return -code error [format "TARGET: %s - Not halted" $t]
                        }
                }
        }
 
        #Pass 2 - if needed "init"
-       if { 0 == [string compare init $MODE] } {
+       if { $MODE == "init" } {
                foreach t $targets {
                        if {[using_jtag] && ![jtag tapisenabled [$t cget -chain-position]]} {
                                continue
@@ -177,12 +180,6 @@ proc using_hla {} {
 
 #########
 
-# Temporary migration aid.  May be removed starting in January 2011.
-proc armv4_5 params {
-       echo "DEPRECATED! use 'arm $params' not 'armv4_5 $params'"
-       arm $params
-}
-
 # Target/chain configuration scripts can either execute commands directly
 # or define a procedure which is executed once all configuration
 # scripts have completed.
@@ -203,6 +200,7 @@ proc init_target_events {} {
        foreach t $targets {
                set_default_target_event $t gdb-flash-erase-start "reset init"
                set_default_target_event $t gdb-flash-write-end "reset halt"
+               set_default_target_event $t gdb-attach "halt 1000"
        }
 }
 
@@ -210,13 +208,65 @@ proc init_target_events {} {
 proc init_board {} {
 }
 
-# deprecated target name cmds
-proc cortex_m3 args {
-       echo "DEPRECATED! use 'cortex_m' not 'cortex_m3'"
-       eval cortex_m $args
+proc mem2array {arrayname bitwidth address count {phys ""}} {
+       echo "DEPRECATED! use 'read_memory' not 'mem2array'"
+
+       upvar $arrayname $arrayname
+       set $arrayname ""
+       set i 0
+
+       foreach elem [read_memory $address $bitwidth $count {*}$phys] {
+               set ${arrayname}($i) $elem
+               incr i
+       }
+}
+
+proc array2mem {arrayname bitwidth address count {phys ""}} {
+       echo "DEPRECATED! use 'write_memory' not 'array2mem'"
+
+       upvar $arrayname $arrayname
+       set data ""
+
+       for {set i 0} {$i < $count} {incr i} {
+               lappend data [expr $${arrayname}($i)]
+       }
+
+       write_memory $address $bitwidth $data {*}$phys
+}
+
+# smp_on/smp_off were already DEPRECATED in v0.11.0 through http://openocd.zylin.com/4615
+lappend _telnet_autocomplete_skip "aarch64 smp_on"
+proc "aarch64 smp_on" {args} {
+       echo "DEPRECATED! use 'aarch64 smp on' not 'aarch64 smp_on'"
+       eval aarch64 smp on $args
+}
+
+lappend _telnet_autocomplete_skip "aarch64 smp_off"
+proc "aarch64 smp_off" {args} {
+       echo "DEPRECATED! use 'aarch64 smp off' not 'aarch64 smp_off'"
+       eval aarch64 smp off $args
+}
+
+lappend _telnet_autocomplete_skip "cortex_a smp_on"
+proc "cortex_a smp_on" {args} {
+       echo "DEPRECATED! use 'cortex_a smp on' not 'cortex_a smp_on'"
+       eval cortex_a smp on $args
+}
+
+lappend _telnet_autocomplete_skip "cortex_a smp_off"
+proc "cortex_a smp_off" {args} {
+       echo "DEPRECATED! use 'cortex_a smp off' not 'cortex_a smp_off'"
+       eval cortex_a smp off $args
+}
+
+lappend _telnet_autocomplete_skip "mips_m4k smp_on"
+proc "mips_m4k smp_on" {args} {
+       echo "DEPRECATED! use 'mips_m4k smp on' not 'mips_m4k smp_on'"
+       eval mips_m4k smp on $args
 }
 
-proc cortex_a8 args {
-       echo "DEPRECATED! use 'cortex_a' not 'cortex_a8'"
-       eval cortex_a $args
+lappend _telnet_autocomplete_skip "mips_m4k smp_off"
+proc "mips_m4k smp_off" {args} {
+       echo "DEPRECATED! use 'mips_m4k smp off' not 'mips_m4k smp_off'"
+       eval mips_m4k smp off $args
 }