Remove annoying end-of-line whitespace from most src/*
[fw/openocd] / src / target / arm926ejs.c
index d9c677ffa88e7bb6c06d98bbcb12771e5152454b..8cb5dbe09def6c18877061fea91bdcee5eb4c484 100644 (file)
@@ -159,8 +159,9 @@ int arm926ejs_cp15_read(target_t *target, uint32_t op1, uint32_t op2, uint32_t C
 
        jtag_add_dr_scan(4, fields, jtag_get_end_state());
 
-       /*TODO: add timeout*/
-       do
+       long long then = timeval_ms();
+
+       for (;;)
        {
                /* rescan with NOP, to wait for the access to complete */
                access = 0;
@@ -173,7 +174,19 @@ int arm926ejs_cp15_read(target_t *target, uint32_t op1, uint32_t op2, uint32_t C
                {
                        return retval;
                }
-       } while (buf_get_u32(&access, 0, 1) != 1);
+
+               if (buf_get_u32(&access, 0, 1) == 1)
+               {
+                       break;
+               }
+
+               /* 10ms timeout */
+               if ((timeval_ms()-then)>10)
+               {
+                       LOG_ERROR("cp15 read operation timed out");
+                       return ERROR_FAIL;
+               }
+       }
 
 #ifdef _DEBUG_INSTRUCTION_EXECUTION_
        LOG_DEBUG("addr: 0x%x value: %8.8x", address, *value);
@@ -228,8 +241,10 @@ int arm926ejs_cp15_write(target_t *target, uint32_t op1, uint32_t op2, uint32_t
        fields[3].in_value = NULL;
 
        jtag_add_dr_scan(4, fields, jtag_get_end_state());
-       /*TODO: add timeout*/
-       do
+
+       long long then = timeval_ms();
+
+       for (;;)
        {
                /* rescan with NOP, to wait for the access to complete */
                access = 0;
@@ -239,7 +254,19 @@ int arm926ejs_cp15_write(target_t *target, uint32_t op1, uint32_t op2, uint32_t
                {
                        return retval;
                }
-       } while (buf_get_u32(&access, 0, 1) != 1);
+
+               if (buf_get_u32(&access, 0, 1) == 1)
+               {
+                       break;
+               }
+
+               /* 10ms timeout */
+               if ((timeval_ms()-then)>10)
+               {
+                       LOG_ERROR("cp15 write operation timed out");
+                       return ERROR_FAIL;
+               }
+       }
 
 #ifdef _DEBUG_INSTRUCTION_EXECUTION_
        LOG_DEBUG("addr: 0x%x value: %8.8x", address, value);
@@ -333,20 +360,21 @@ int arm926ejs_examine_debug_reason(target_t *target)
                         * openocd development mailing list if you have hardware
                         * to donate to look into this problem....
                         */
-                       LOG_ERROR("mystery debug reason MOE = 0xc. Try issuing a resume + halt.");
+                       LOG_WARNING("WARNING: mystery debug reason MOE = 0xc. Try issuing a resume + halt.");
                        target->debug_reason = DBG_REASON_DBGRQ;
-                       retval = ERROR_TARGET_FAILURE;
                        break;
                default:
-                       LOG_ERROR("BUG: unknown debug reason: 0x%x", debug_reason);
+                       LOG_WARNING("WARNING: unknown debug reason: 0x%x", debug_reason);
+                       /* Oh agony! should we interpret this as a halt request or
+                        * that the target stopped on it's own accord?
+                        */
                        target->debug_reason = DBG_REASON_DBGRQ;
                        /* if we fail here, we won't talk to the target and it will
                         * be reported to be in the halted state */
-                       retval = ERROR_TARGET_FAILURE;
                        break;
        }
 
-       return retval;
+       return ERROR_OK;
 }
 
 uint32_t arm926ejs_get_ttb(target_t *target)