Tweak TCL reset script ... mostly improving descriptions of
authordbrownell <dbrownell@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Fri, 18 Sep 2009 00:11:51 +0000 (00:11 +0000)
committerdbrownell <dbrownell@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Fri, 18 Sep 2009 00:11:51 +0000 (00:11 +0000)
the various steps, but also calling [target names] only once.

git-svn-id: svn://svn.berlios.de/openocd/trunk@2726 b42882b7-edfa-0310-969c-e2dbd0fdcd60

src/helper/startup.tcl

index 3eb7419ffc6eb676da884aac9c2f27613db25d92..8c3ece56af6e938cf2795bd0c8c468bdeec50aa2 100644 (file)
@@ -157,6 +157,7 @@ proc ocd_process_reset { MODE } {
 }
 
 proc ocd_process_reset_inner { MODE } {
+       set targets [target names]
 
        # If this target must be halted...
        set halt -1
@@ -175,26 +176,38 @@ proc ocd_process_reset_inner { MODE } {
 
        # 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,
+       # target "arp_*" commands, which may issue JTAG transactions,
        # unless we know the underlying TAP is active.
+       #
+       # NOTE:  ARP == "Advanced Reset Process" ... "advanced" is
+       # relative to a previous restrictive scheme
 
-       foreach t [ target names ] {
+       foreach t $targets {
                # New event script.
                $t invoke-event reset-start
        }
 
-       # Init the tap controller.
+       # Use TRST or TMS/TCK operations to reset all the tap controllers.
+       # TAP reset events get reported; they might enable some taps.
+       #
+       # REVISIT arp_init-reset pulses SRST (if it can) with TRST active;
+       # but SRST events aren't reported (unlike "jtag arp_reset", below)
        jtag arp_init-reset
 
        # Examine all targets on enabled taps.
-       foreach t [ target names ] {
+       foreach t $targets {
                if {[jtag tapisenabled [$t cget -chain-position]]} {
                        $t arp_examine
                }
        }
 
-       # Let the C code know we are asserting reset.
-       foreach t [ target names ] {
+       # Assert SRST, and report the pre/post events.
+       #
+       # REVISIT this presumes a single-target config, since SRST
+       # applies to the whole device-under-test.  When two targets
+       # both need special setup before SRST, it's only done for
+       # the first one...
+       foreach t $targets {
                $t invoke-event reset-assert-pre
                # C code needs to know if we expect to 'halt'
                if {[jtag tapisenabled [$t cget -chain-position]]} {
@@ -203,8 +216,8 @@ proc ocd_process_reset_inner { MODE } {
                $t invoke-event reset-assert-post
        }
 
-       # Now de-assert reset.
-       foreach t [ target names ] {
+       # Now de-assert SRST, and report the pre/post events.
+       foreach t $targets {
                $t invoke-event reset-deassert-pre
                # Again, de-assert code needs to know..
                if {[jtag tapisenabled [$t cget -chain-position]]} {
@@ -213,9 +226,11 @@ proc ocd_process_reset_inner { MODE } {
                $t invoke-event reset-deassert-post
        }
 
-       # Pass 1 - Now try to halt.
+       # Pass 1 - Now wait for any halt (requested as part of reset
+       # assert/deassert) to happen.  Ideally it takes effect without
+       # first executing any instructions.
        if { $halt } {
-               foreach t [target names] {
+               foreach t $targets {
                        if {[jtag tapisenabled [$t cget -chain-position]] == 0} {
                                continue
                        }
@@ -239,7 +254,7 @@ proc ocd_process_reset_inner { MODE } {
 
        #Pass 2 - if needed "init"
        if { 0 == [string compare init $MODE] } {
-               foreach t [target names] {
+               foreach t $targets {
                        if {[jtag tapisenabled [$t cget -chain-position]] == 0} {
                                continue
                        }
@@ -252,7 +267,7 @@ proc ocd_process_reset_inner { MODE } {
                }
        }
 
-       foreach t [ target names ] {
+       foreach t $targets {
                $t invoke-event reset-end
        }
 }

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)