- Fixes '<<' whitespace
[openocd.git] / src / helper / startup.tcl
index 41137f1adb204a46f48afd782b59340c24c19f85..228caedafd29fc8424d11812c220e53f57be063d 100644 (file)
@@ -88,9 +88,10 @@ proc unknown {args} {
        # do the name mangling from "flash banks" to "flash_banks"
        if {[llength $args]>=2} {
                set cmd_name "[lindex $args 0]_[lindex $args 1]"
-               # Fix?? add a check here if this is a command?
-               # we'll strip away args until we fail anyway...
-               return [eval "$cmd_name [lrange $args 2 end]"]
+               if {[catch {info body $cmd_name}]==0} {
+                   # the command exists, try it...
+                       return [eval "$cmd_name [lrange $args 2 end]"]
+               }
        }
        # This really is an unknown command.
        return -code error "Unknown command: $args"
@@ -163,6 +164,11 @@ proc ocd_process_reset { MODE } {
                return -error "Invalid mode: $MODE, must be one of: halt, init, or run";
        }
 
+       # Target event handlers *might* change which TAPs are enabled
+       # or disabled, so we fire all of them.  But don't issue any
+       # of the "arp_*" commands, which may issue JTAG transactions,
+       # unless we know the underlying TAP is active.
+
        foreach t [ target names ] {
                # New event script.
                $t invoke-event reset-start
@@ -171,16 +177,20 @@ proc ocd_process_reset { MODE } {
        # Init the tap controller.
        jtag arp_init-reset
 
-       # Examine all targets.
+       # Examine all targets on enabled taps.
        foreach t [ target names ] {
-               $t arp_examine
+               if {[jtag tapisenabled [$t cget -chain-position]]} {
+                       $t arp_examine
+               }
        }
 
        # Let the C code know we are asserting reset.
        foreach t [ target names ] {
                $t invoke-event reset-assert-pre
                # C code needs to know if we expect to 'halt'
-               $t arp_reset assert $halt
+               if {[jtag tapisenabled [$t cget -chain-position]]} {
+                       $t arp_reset assert $halt
+               }
                $t invoke-event reset-assert-post
        }
 
@@ -188,14 +198,19 @@ proc ocd_process_reset { MODE } {
        foreach t [ target names ] {
                $t invoke-event reset-deassert-pre
                # Again, de-assert code needs to know..
-               $t arp_reset deassert $halt
+               if {[jtag tapisenabled [$t cget -chain-position]]} {
+                       $t arp_reset deassert $halt
+               }
                $t invoke-event reset-deassert-post
        }
 
        # Pass 1 - Now try to halt.
        if { $halt } {
                foreach t [target names] {
-       
+                       if {[jtag tapisenabled [$t cget -chain-position]] == 0} {
+                               continue
+                       }
+
                        # Wait upto 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
@@ -216,6 +231,10 @@ proc ocd_process_reset { MODE } {
        #Pass 2 - if needed "init"
        if { 0 == [string compare init $MODE] } {
                foreach t [target names] {
+                       if {[jtag tapisenabled [$t cget -chain-position]] == 0} {
+                               continue
+                       }
+
                        set err [catch "$t arp_waitstate halted 5000"]
                        # Did it halt?
                        if { $err == 0 } {
@@ -303,3 +322,11 @@ add_help_text srst_deasserted "Overridable procedure run when srst deassert is d
 proc srst_asserted {} {
        puts "Sensed nSRST asserted."
 }
+
+# catch any exceptions, capture output and return output
+proc capture_catch {a} {
+       catch {
+               capture {uplevel $a}
+       } result
+       return $result 
+}

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)