fix BUG: keep_alive() error messages
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Wed, 20 Aug 2008 07:14:45 +0000 (07:14 +0000)
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Wed, 20 Aug 2008 07:14:45 +0000 (07:14 +0000)
git-svn-id: svn://svn.berlios.de/openocd/trunk@949 b42882b7-edfa-0310-969c-e2dbd0fdcd60

src/target/arm720t.c
src/target/arm7_9_common.c
src/target/arm920t.c
src/target/arm926ejs.c
src/target/armv4_5.c
src/target/armv7m.c
src/target/target.c

index 848cbca5a7056a510b1de67e059760c032adb2b1..48a6032e03cef26e8e60473725d53b60ab36c8ee 100644 (file)
@@ -24,6 +24,7 @@
 #include "arm720t.h"
 #include "jtag.h"
 #include "log.h"
+#include "time_support.h"
 
 #include <stdlib.h>
 #include <string.h>
@@ -366,12 +367,13 @@ int arm720t_soft_reset_halt(struct target_s *target)
        arm7_9_common_t *arm7_9 = armv4_5->arch_info;
        arm7tdmi_common_t *arm7tdmi = arm7_9->arch_info;
        arm720t_common_t *arm720t = arm7tdmi->arch_info;
-       int i;
        reg_t *dbg_stat = &arm7_9->eice_cache->reg_list[EICE_DBG_STAT];
        
        target_halt(target);
        
-       for (i=0; i<10; i++)
+       long long then=timeval_ms();
+       int timeout;
+       while (!(timeout=((timeval_ms()-then)>1000)))
        {
                if (buf_get_u32(dbg_stat->value, EICE_DBG_STATUS_DBGACK, 1) == 0)
                {
@@ -381,10 +383,15 @@ int arm720t_soft_reset_halt(struct target_s *target)
                {
                        break;
                }
-               /* do not eat all CPU, time out after 1 se*/
-               alive_sleep(100);
+               if (debug_level>=3)
+               {
+                       alive_sleep(100);
+               } else
+               {
+                       keep_alive();
+               }
        }
-       if (i==10)
+       if (timeout)
        {
                LOG_ERROR("Failed to halt CPU after 1 sec");
                return ERROR_TARGET_TIMEOUT;
index c08f6aa20c4b33d248d3d22325c00f21aebafb95..c79e19b96c60b2a50baee86bd24d905cffbbe250 100644 (file)
@@ -35,6 +35,7 @@
 #include "log.h"
 #include "arm7_9_common.h"
 #include "breakpoints.h"
+#include "time_support.h"
 
 #include <stdlib.h>
 #include <string.h>
@@ -511,7 +512,6 @@ int arm7_9_remove_watchpoint(struct target_s *target, watchpoint_t *watchpoint)
 
 int arm7_9_execute_sys_speed(struct target_s *target)
 {
-       int timeout;
        int retval;
 
        armv4_5_common_t *armv4_5 = target->arch_info;
@@ -527,7 +527,9 @@ int arm7_9_execute_sys_speed(struct target_s *target)
        }
        arm_jtag_set_instr(jtag_info, 0x4, NULL);
 
-       for (timeout=0; timeout<50; timeout++)
+       long long then=timeval_ms();
+       int timeout;
+       while (!(timeout=((timeval_ms()-then)>1000)))
        {
                /* read debug status register */
                embeddedice_read_reg(dbg_stat);
@@ -536,9 +538,15 @@ int arm7_9_execute_sys_speed(struct target_s *target)
                if ((buf_get_u32(dbg_stat->value, EICE_DBG_STATUS_DBGACK, 1))
                                   && (buf_get_u32(dbg_stat->value, EICE_DBG_STATUS_SYSCOMP, 1)))
                        break;
-               alive_sleep(100);
+               if (debug_level>=3)
+               {
+                       alive_sleep(100);
+               } else
+               {
+                       keep_alive();
+               }
        }
-       if (timeout == 50)
+       if (timeout)
        {
                LOG_ERROR("timeout waiting for SYSCOMP & DBGACK, last DBG_STATUS: %x", buf_get_u32(dbg_stat->value, 0, dbg_stat->size));
                return ERROR_TARGET_TIMEOUT;
@@ -873,18 +881,24 @@ int arm7_9_soft_reset_halt(struct target_s *target)
        if ((retval=target_halt(target))!=ERROR_OK)
                return retval;
 
-       for (i=0; i<10; i++)
+       long long then=timeval_ms();
+       int timeout;
+       while (!(timeout=((timeval_ms()-then)>1000)))
        {
                if (buf_get_u32(dbg_stat->value, EICE_DBG_STATUS_DBGACK, 1) != 0)
                        break;
                embeddedice_read_reg(dbg_stat);
                if ((retval=jtag_execute_queue())!=ERROR_OK)
                        return retval;
-               /* do not eat all CPU, time out after 1 se*/
-               usleep(100*1000);
-
+               if (debug_level>=3)
+               {
+                       alive_sleep(100);
+               } else
+               {
+                       keep_alive();
+               }
        }
-       if (i==10)
+       if (timeout)
        {
                LOG_ERROR("Failed to halt CPU after 1 sec");
                return ERROR_TARGET_TIMEOUT;
@@ -2162,14 +2176,22 @@ int arm7_9_bulk_write_memory(target_t *target, u32 address, u32 count, u8 *buffe
 
        target_halt(target);
 
-       for (i=0; i<100; i++)
+       long long then=timeval_ms();
+       int timeout;
+       while (!(timeout=((timeval_ms()-then)>100)))
        {
                target_poll(target);
                if (target->state == TARGET_HALTED)
                        break;
-               usleep(1000); /* sleep 1ms */
+               if (debug_level>=3)
+               {
+                       alive_sleep(100);
+               } else
+               {
+                       keep_alive();
+               }
        }
-       if (i == 100)
+       if (timeout)
        {
                LOG_ERROR("bulk write timed out, target not halted");
                return ERROR_TARGET_TIMEOUT;
index 67657c94ccd903062b4994db9be827a5736148b8..781f624aa266e1f87f7e051c85633ae5e2478ea6 100644 (file)
@@ -24,6 +24,7 @@
 #include "arm920t.h"
 #include "jtag.h"
 #include "log.h"
+#include "time_support.h"
 
 #include <stdlib.h>
 #include <string.h>
@@ -629,11 +630,12 @@ int arm920t_soft_reset_halt(struct target_s *target)
        arm9tdmi_common_t *arm9tdmi = arm7_9->arch_info;
        arm920t_common_t *arm920t = arm9tdmi->arch_info;
        reg_t *dbg_stat = &arm7_9->eice_cache->reg_list[EICE_DBG_STAT];
-       int i;
        
        target_halt(target);
        
-       for (i=0; i<10; i++)
+       long long then=timeval_ms();
+       int timeout;
+       while (!(timeout=((timeval_ms()-then)>1000)))
        {
                if (buf_get_u32(dbg_stat->value, EICE_DBG_STATUS_DBGACK, 1) == 0)
                {
@@ -643,10 +645,16 @@ int arm920t_soft_reset_halt(struct target_s *target)
                {
                        break;
                }
-               /* do not eat all CPU, time out after 1 se*/
-               alive_sleep(100);
+               if (debug_level>=3)
+               {
+                       /* do not eat all CPU, time out after 1 se*/
+                       alive_sleep(100);
+               } else
+               {
+                       keep_alive();
+               }
        }
-       if (i==10)
+       if (timeout)
        {
                LOG_ERROR("Failed to halt CPU after 1 sec");
                return ERROR_TARGET_TIMEOUT;
index feb8455f1a765e5a94f7e6ed37a06468e144cc72..4e15095ae2a1cd0a859b988837fb33cf06859932 100644 (file)
@@ -24,6 +24,7 @@
 #include "arm926ejs.h"
 #include "jtag.h"
 #include "log.h"
+#include "time_support.h"
 
 #include <stdlib.h>
 #include <string.h>
@@ -579,11 +580,12 @@ int arm926ejs_soft_reset_halt(struct target_s *target)
        arm9tdmi_common_t *arm9tdmi = arm7_9->arch_info;
        arm926ejs_common_t *arm926ejs = arm9tdmi->arch_info;
        reg_t *dbg_stat = &arm7_9->eice_cache->reg_list[EICE_DBG_STAT];
-       int i;
        
        target_halt(target);
        
-       for (i=0; i<10; i++)
+       long long then=timeval_ms();
+       int timeout;
+       while (!(timeout=((timeval_ms()-then)>1000)))
        {
                if (buf_get_u32(dbg_stat->value, EICE_DBG_STATUS_DBGACK, 1) == 0)
                {
@@ -593,10 +595,16 @@ int arm926ejs_soft_reset_halt(struct target_s *target)
                {
                        break;
                }
-               /* do not eat all CPU, time out after 1 se*/
-               alive_sleep(100);
+               if (debug_level>=1)
+               {
+                       /* do not eat all CPU, time out after 1 se*/
+                       alive_sleep(100);
+               } else
+               {
+                       keep_alive();
+               }
        }
-       if (i==10)
+       if (timeout)
        {
                LOG_ERROR("Failed to halt CPU after 1 sec");
                return ERROR_TARGET_TIMEOUT;
index 3d96961b09270be02e9f6cb5d0762f68c0b3110c..48a45865d5e1a812cbdaef2b8abf17935bb0ab6c 100644 (file)
@@ -552,36 +552,24 @@ int armv4_5_run_algorithm(struct target_s *target, int num_mem_params, mem_param
        }
        
        target_resume(target, 0, entry_point, 1, 1);
-       target_poll(target);
        
-       while (target->state != TARGET_HALTED)
+       target_wait_state(target, TARGET_HALTED, timeout_ms);
+       if (target->state != TARGET_HALTED)
        {
-               alive_sleep(10);
-               target_poll(target);
-               if ((timeout_ms -= 10) <= 0)
+               if ((retval=target_halt(target))!=ERROR_OK)
+                       return retval;
+               if ((retval=target_wait_state(target, TARGET_HALTED, 500))!=ERROR_OK)
                {
-                       LOG_ERROR("timeout waiting for algorithm to complete, trying to halt target");
-                       target_halt(target);
-                       timeout_ms = 1000;
-                       while (target->state != TARGET_HALTED)
-                       {
-                               alive_sleep(10);
-                               target_poll(target);
-                               if ((timeout_ms -= 10) <= 0)
-                               {
-                                       LOG_ERROR("target didn't reenter debug state, exiting");
-                                       exit(-1);
-                               }
-                       }
-                       retval = ERROR_TARGET_TIMEOUT;
+                       return retval;
                }
+               return ERROR_TARGET_TIMEOUT;
        }
        
-       if ((retval != ERROR_TARGET_TIMEOUT) && 
-               (buf_get_u32(armv4_5->core_cache->reg_list[15].value, 0, 32) != exit_point))
+       if (buf_get_u32(armv4_5->core_cache->reg_list[15].value, 0, 32) != exit_point)
        {
                LOG_WARNING("target reentered debug state, but not at the desired exit point: 0x%4.4x",
                        buf_get_u32(armv4_5->core_cache->reg_list[15].value, 0, 32)); 
+               return ERROR_TARGET_TIMEOUT;
        }
        
        breakpoint_remove(target, exit_point);
index b862cf38f1145d0d7446cdbf40103327829ff0b5..f4e8062c0a9a61b926037ef5f5396350b1c51594 100644 (file)
@@ -368,29 +368,24 @@ int armv7m_run_algorithm(struct target_s *target, int num_mem_params, mem_param_
        target_resume(target, 0, entry_point, 1, 1);
        target_poll(target);
        
-       while (target->state != TARGET_HALTED)
+       target_wait_state(target, TARGET_HALTED, timeout_ms);
+       if (target->state != TARGET_HALTED)
        {
-               usleep(5000);
-               target_poll(target);
-               if ((timeout_ms -= 5) <= 0)
+               if ((retval=target_halt(target))!=ERROR_OK)
+                       return retval;
+               if ((retval=target_wait_state(target, TARGET_HALTED, 500))!=ERROR_OK)
                {
-                       LOG_ERROR("timeout waiting for algorithm to complete, trying to halt target");
-                       target_halt(target);
-                       timeout_ms = 1000;
-                       while (target->state != TARGET_HALTED)
-                       {
-                               usleep(10000);
-                               target_poll(target);
-                               if ((timeout_ms -= 10) <= 0)
-                               {
-                                       LOG_ERROR("target didn't reenter debug state, exiting");
-                                       exit(-1);
-                               }
-                       }
-                       armv7m->load_core_reg_u32(target, ARMV7M_REGISTER_CORE_GP, 15, &pc);
-                       LOG_DEBUG("failed algoritm halted at 0x%x ", pc); 
-                       retval = ERROR_TARGET_TIMEOUT;
+                       return retval;
                }
+               return ERROR_TARGET_TIMEOUT;
+       }
+       
+       
+       armv7m->load_core_reg_u32(target, ARMV7M_REGISTER_CORE_GP, 15, &pc);
+       if (pc != exit_point)
+       {
+               LOG_DEBUG("failed algoritm halted at 0x%x ", pc); 
+               return ERROR_TARGET_TIMEOUT;
        }
        
        breakpoint_remove(target, exit_point);
index b2220c0bbe8c0c341fefc5f43caa452c569cf12f..9f633ee1a74032ddc09994b6a9690dcd1fa9439e 100644 (file)
@@ -1634,7 +1634,7 @@ int target_wait_state(target_t *target, enum target_state state, int ms)
        {
                if ((retval=target_poll(target))!=ERROR_OK)
                        return retval;
-               target_call_timer_callbacks_now();
+               keep_alive();
                if (target->state == state)
                {
                        break;

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)