XScale excessive waiting fix.

git-svn-id: svn://svn.berlios.de/openocd/trunk@509 b42882b7-edfa-0310-969c-e2dbd0fdcd60
This commit is contained in:
oharboe 2008-03-13 08:16:34 +00:00
parent 979d6b7943
commit b8dab6d056
1 changed files with 58 additions and 46 deletions

View File

@ -481,9 +481,12 @@ 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 (;;)
{
int i;
for (i=0; i<100; i++)
{
/* if we want to consume the register content (i.e. clear TX_READY),
* we have to go straight from Capture-DR to Shift-DR
@ -512,10 +515,13 @@ int xscale_read_tx(target_t *target, int consume)
}
if (!((!(field0_in & 1)) && consume))
{
break;
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,11 +577,14 @@ 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 (;;)
{
int i;
for (i=0; i<10; i++)
{
jtag_add_dr_scan(3, fields, TAP_RTI);
@ -592,9 +601,12 @@ int xscale_write_rx(target_t *target)
return ERROR_TARGET_TIMEOUT;
}
if (!(field0_in & 1))
break;
usleep(500*1000); /* wait 500ms to avoid flooding the logs */
goto done;
}
DEBUG("waiting 10ms");
usleep(10*1000); /* wait 10ms to avoid flooding the logs */
}
done:
/* set rx_valid */
field2 = 0x1;