XScale excessive waiting fix.
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Thu, 13 Mar 2008 08:16:34 +0000 (08:16 +0000)
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Thu, 13 Mar 2008 08:16:34 +0000 (08:16 +0000)
git-svn-id: svn://svn.berlios.de/openocd/trunk@509 b42882b7-edfa-0310-969c-e2dbd0fdcd60

src/target/xscale.c

index 18c5c3de6b5617bd42fb93902188b5bc2ab98a20..771812ccde89af67bebcbc34e48b91150498ea76 100644 (file)
@@ -481,41 +481,47 @@ int xscale_read_tx(target_t *target, int consume)
        jtag_set_check_value(fields+2, &field2_check_value, &field2_check_mask, NULL);
 
        gettimeofday(&timeout, NULL);
-       timeval_add_time(&timeout, 5, 0);
+       timeval_add_time(&timeout, 1, 0);
 
        for (;;)
        {
-               /* if we want to consume the register content (i.e. clear TX_READY),
-                * we have to go straight from Capture-DR to Shift-DR
-                * otherwise, we go from Capture-DR to Exit1-DR to Pause-DR
-               */
-               if (consume)
-                       jtag_add_pathmove(3, path);
-               else
-               {
-                       jtag_add_pathmove(sizeof(noconsume_path)/sizeof(*noconsume_path), noconsume_path);
-               }
-
-               jtag_add_dr_scan(3, fields, TAP_RTI);
-
-               if ((retval = jtag_execute_queue()) != ERROR_OK)
-               {
-                       ERROR("JTAG error while reading TX");
-                       return ERROR_TARGET_TIMEOUT;
-               }
-
-               gettimeofday(&now, NULL);
-               if ((now.tv_sec > timeout.tv_sec) || ((now.tv_sec == timeout.tv_sec)&& (now.tv_usec > timeout.tv_usec)))
-               {
-                       ERROR("time out reading TX register");
-                       return ERROR_TARGET_TIMEOUT;
-               }
-               if (!((!(field0_in & 1)) && consume))
+               int i;
+               for (i=0; i<100; i++)
                {
-                       break;
+                       /* if we want to consume the register content (i.e. clear TX_READY),
+                        * we have to go straight from Capture-DR to Shift-DR
+                        * otherwise, we go from Capture-DR to Exit1-DR to Pause-DR
+                       */
+                       if (consume)
+                               jtag_add_pathmove(3, path);
+                       else
+                       {
+                               jtag_add_pathmove(sizeof(noconsume_path)/sizeof(*noconsume_path), noconsume_path);
+                       }
+       
+                       jtag_add_dr_scan(3, fields, TAP_RTI);
+       
+                       if ((retval = jtag_execute_queue()) != ERROR_OK)
+                       {
+                               ERROR("JTAG error while reading TX");
+                               return ERROR_TARGET_TIMEOUT;
+                       }
+       
+                       gettimeofday(&now, NULL);
+                       if ((now.tv_sec > timeout.tv_sec) || ((now.tv_sec == timeout.tv_sec)&& (now.tv_usec > timeout.tv_usec)))
+                       {
+                               ERROR("time out reading TX register");
+                               return ERROR_TARGET_TIMEOUT;
+                       }
+                       if (!((!(field0_in & 1)) && consume))
+                       {
+                               goto done;
+                       }
                }
-               usleep(500*1000); /* avoid flooding the logs */
+               DEBUG("waiting 10ms");
+               usleep(10*1000); /* avoid flooding the logs */
        } 
+       done:
 
        if (!(field0_in & 1))
                return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
@@ -571,31 +577,37 @@ int xscale_write_rx(target_t *target)
        jtag_set_check_value(fields+2, &field2_check_value, &field2_check_mask, NULL);
 
        gettimeofday(&timeout, NULL);
-       timeval_add_time(&timeout, 5, 0);
+       timeval_add_time(&timeout, 1, 0);
 
        /* poll until rx_read is low */
        DEBUG("polling RX");
        for (;;)
        {
-               jtag_add_dr_scan(3, fields, TAP_RTI);
-
-               if ((retval = jtag_execute_queue()) != ERROR_OK)
-               {
-                       ERROR("JTAG error while writing RX");
-                       return retval;
-               }
-
-               gettimeofday(&now, NULL);
-               if ((now.tv_sec > timeout.tv_sec) || ((now.tv_sec == timeout.tv_sec)&& (now.tv_usec > timeout.tv_usec)))
+               int i;
+               for (i=0; i<10; i++)
                {
-                       ERROR("time out writing RX register");
-                       return ERROR_TARGET_TIMEOUT;
+                       jtag_add_dr_scan(3, fields, TAP_RTI);
+       
+                       if ((retval = jtag_execute_queue()) != ERROR_OK)
+                       {
+                               ERROR("JTAG error while writing RX");
+                               return retval;
+                       }
+       
+                       gettimeofday(&now, NULL);
+                       if ((now.tv_sec > timeout.tv_sec) || ((now.tv_sec == timeout.tv_sec)&& (now.tv_usec > timeout.tv_usec)))
+                       {
+                               ERROR("time out writing RX register");
+                               return ERROR_TARGET_TIMEOUT;
+                       }
+                       if (!(field0_in & 1))
+                               goto done;
                }
-               if (!(field0_in & 1))
-                       break;
-               usleep(500*1000); /* wait 500ms to avoid flooding the logs */
+               DEBUG("waiting 10ms");
+               usleep(10*1000); /* wait 10ms to avoid flooding the logs */
        }
-
+       done:
+       
        /* set rx_valid */
        field2 = 0x1;
        jtag_add_dr_scan(3, fields, TAP_RTI);

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)