arm11: fix another infinite loop bug

reset init would get stuck in an infinite loop when
e.g. khz was too high. Added timeout. This is a copy
of paste of a number of such bugfixes in the arm11
code.

Arm11 code reviewed for further such infinite loop bugs
and I couldn't find any more. Xing fingers it's the last
one...

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
This commit is contained in:
Øyvind Harboe 2010-02-10 20:04:00 +01:00
parent 84ac6bb0d9
commit 65cc81ddb6

View File

@ -854,7 +854,9 @@ int arm11_sc7_run(struct arm11_common * arm11, struct arm11_sc7_action * actions
AddressOut = 0; AddressOut = 0;
} }
do /* Timeout here so we don't get stuck. */
int i = 0;
while (1)
{ {
JTAG_DEBUG("SC7 <= c%-3d Data %08x %s", JTAG_DEBUG("SC7 <= c%-3d Data %08x %s",
(unsigned) AddressOut, (unsigned) AddressOut,
@ -866,10 +868,27 @@ int arm11_sc7_run(struct arm11_common * arm11, struct arm11_sc7_action * actions
CHECK_RETVAL(jtag_execute_queue()); CHECK_RETVAL(jtag_execute_queue());
if (!Ready) /* 'nRW' is 'Ready' on read out */
JTAG_DEBUG("SC7 => !ready"); if (Ready)
break;
long long then = 0;
if (i == 1000)
{
then = timeval_ms();
}
if (i >= 1000)
{
if ((timeval_ms()-then) > 1000)
{
LOG_WARNING("Timeout (1000ms) waiting for instructions to complete");
return ERROR_FAIL;
}
}
i++;
} }
while (!Ready); /* 'nRW' is 'Ready' on read out */
if (!nRW) if (!nRW)
JTAG_DEBUG("SC7 => Data %08x", (unsigned) DataIn); JTAG_DEBUG("SC7 => Data %08x", (unsigned) DataIn);