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:
parent
84ac6bb0d9
commit
65cc81ddb6
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue