- only if "reset halt" or "reset init" are issued will the reset vector be set up
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Mon, 7 Apr 2008 10:48:44 +0000 (10:48 +0000)
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Mon, 7 Apr 2008 10:48:44 +0000 (10:48 +0000)
- If communication fails during assert between assert/deassert and during
assert, warnings are printed. The warning suggests using srst_only if the
clock locks up as that would allow the reset vector to be set up before
asserting reset.

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

src/target/arm7_9_common.c
src/target/target.c

index 4e14497de0acd3bfab4c3e0b9fe7388a8eac5fa7..d77f2000279abbd6e619bf472062b80dfddf0f77 100644 (file)
@@ -736,7 +736,7 @@ int arm7_9_poll(target_t *target)
 /*
   Some -S targets (ARM966E-S in the STR912 isn't affected, ARM926EJ-S
   in the LPC3180 and AT91SAM9260 is affected) completely stop the JTAG clock
-  while the core is held in reset. It isn't possible to program the halt
+  while the core is held in reset(SRST). It isn't possible to program the halt
   condition once reset was asserted, hence a hook that allows the target to set
   up its reset-halt condition prior to asserting reset.
 */
@@ -753,32 +753,34 @@ int arm7_9_assert_reset(target_t *target)
                return ERROR_FAIL;
        }
 
-       /*
-        * Some targets do not support communication while TRST is asserted. We need to
-        * set up the reset vector catch here.
-        * 
-        * If TRST is in use, then these settings will be reset anyway, so setting them
-        * here is harmless.  
-        */
-       if (arm7_9->has_vector_catch)
-       {
-               /* program vector catch register to catch reset vector */
-               embeddedice_write_reg(&arm7_9->eice_cache->reg_list[EICE_VEC_CATCH], 0x1);
-       }
-       else
+       if ((target->reset_mode == RESET_HALT) || (target->reset_mode == RESET_INIT))
        {
-               /* program watchpoint unit to match on reset vector address */
-               embeddedice_write_reg(&arm7_9->eice_cache->reg_list[EICE_W0_ADDR_MASK], 0x3);
-               embeddedice_write_reg(&arm7_9->eice_cache->reg_list[EICE_W0_DATA_MASK], 0x0);
-               embeddedice_write_reg(&arm7_9->eice_cache->reg_list[EICE_W0_CONTROL_VALUE], 0x100);
-               embeddedice_write_reg(&arm7_9->eice_cache->reg_list[EICE_W0_CONTROL_MASK], 0xf7);
+               /*
+                * Some targets do not support communication while SRST is asserted. We need to
+                * set up the reset vector catch here.
+                * 
+                * If TRST is asserted, then these settings will be reset anyway, so setting them
+                * here is harmless.  
+                */
+               if (arm7_9->has_vector_catch)
+               {
+                       /* program vector catch register to catch reset vector */
+                       embeddedice_write_reg(&arm7_9->eice_cache->reg_list[EICE_VEC_CATCH], 0x1);
+               }
+               else
+               {
+                       /* program watchpoint unit to match on reset vector address */
+                       embeddedice_write_reg(&arm7_9->eice_cache->reg_list[EICE_W0_ADDR_MASK], 0x3);
+                       embeddedice_write_reg(&arm7_9->eice_cache->reg_list[EICE_W0_DATA_MASK], 0x0);
+                       embeddedice_write_reg(&arm7_9->eice_cache->reg_list[EICE_W0_CONTROL_VALUE], 0x100);
+                       embeddedice_write_reg(&arm7_9->eice_cache->reg_list[EICE_W0_CONTROL_MASK], 0xf7);
+               }
        }
 
        /* we can't know what state the target is in as we might e.g.
         * be resetting after a power dropout, so we need to issue a tms/srst
         */
        
-       
        /* assert SRST and TRST */
        /* system would get ouf sync if we didn't reset test-logic, too */
        jtag_add_reset(1, 1);
index 64f6cb8d8768c0319300f9668cdc8febf8a1dad7..bfe0f14aeb6a41b35d7420fcab69d921a08a597e 100644 (file)
@@ -297,7 +297,11 @@ int target_process_reset(struct command_context_s *cmd_ctx)
                target->type->assert_reset(target);
                target = target->next;
        }
-       jtag_execute_queue();
+       if ((retval = jtag_execute_queue()) != ERROR_OK)
+       {
+               LOG_WARNING("JTAG communication failed asserting reset.");
+               retval = ERROR_OK;
+       }
        
        /* request target halt if necessary, and schedule further action */
        target = targets;
@@ -330,13 +334,24 @@ int target_process_reset(struct command_context_s *cmd_ctx)
                target = target->next;
        }
        
+       if ((retval = jtag_execute_queue()) != ERROR_OK)
+       {
+               LOG_WARNING("JTAG communication failed while reset was asserted. Consider using srst_only for reset_config.");
+               retval = ERROR_OK;              
+       }
+       
        target = targets;
        while (target)
        {
                target->type->deassert_reset(target);
                target = target->next;
        }
-       jtag_execute_queue();
+       
+       if ((retval = jtag_execute_queue()) != ERROR_OK)
+       {
+               LOG_WARNING("JTAG communication failed while deasserting reset.");
+               retval = ERROR_OK;
+       }
        
        LOG_DEBUG("Waiting for halted stated as approperiate");
        

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)