target: lakemon: probemode entry isn't instantaneous
When testing with Intel Galileo GEN2 I have noticed a few iterations where probemode entry took a little longer. At most I had to read tapstatus twice. This patch uses a loop of up to 100 iterations to wait for tapstatus to update with PM entry results. Change-Id: I1c87d7dde715255b3fd2460d299b9493218533fc Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> Reviewed-on: http://openocd.zylin.com/4013 Tested-by: jenkins Reviewed-by: Paul Fertser <fercerpav@gmail.com>
This commit is contained in:
parent
ea80232c5e
commit
1ea313e333
|
@ -444,6 +444,8 @@ static uint32_t get_tapstatus(struct target *t)
|
||||||
static int enter_probemode(struct target *t)
|
static int enter_probemode(struct target *t)
|
||||||
{
|
{
|
||||||
uint32_t tapstatus = 0;
|
uint32_t tapstatus = 0;
|
||||||
|
int retries = 100;
|
||||||
|
|
||||||
tapstatus = get_tapstatus(t);
|
tapstatus = get_tapstatus(t);
|
||||||
LOG_DEBUG("TS before PM enter = 0x%08" PRIx32, tapstatus);
|
LOG_DEBUG("TS before PM enter = 0x%08" PRIx32, tapstatus);
|
||||||
if (tapstatus & TS_PM_BIT) {
|
if (tapstatus & TS_PM_BIT) {
|
||||||
|
@ -456,16 +458,18 @@ static int enter_probemode(struct target *t)
|
||||||
scan.out[0] = 1;
|
scan.out[0] = 1;
|
||||||
if (drscan(t, scan.out, scan.in, 1) != ERROR_OK)
|
if (drscan(t, scan.out, scan.in, 1) != ERROR_OK)
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
|
|
||||||
|
while (retries--) {
|
||||||
tapstatus = get_tapstatus(t);
|
tapstatus = get_tapstatus(t);
|
||||||
LOG_DEBUG("TS after PM enter = 0x%08" PRIx32, tapstatus);
|
LOG_DEBUG("TS after PM enter = 0x%08" PRIx32, tapstatus);
|
||||||
if ((tapstatus & TS_PM_BIT) && (!(tapstatus & TS_EN_PM_BIT)))
|
if ((tapstatus & TS_PM_BIT) && (!(tapstatus & TS_EN_PM_BIT)))
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
else {
|
}
|
||||||
|
|
||||||
LOG_ERROR("%s PM enter error, tapstatus = 0x%08" PRIx32
|
LOG_ERROR("%s PM enter error, tapstatus = 0x%08" PRIx32
|
||||||
, __func__, tapstatus);
|
, __func__, tapstatus);
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
static int exit_probemode(struct target *t)
|
static int exit_probemode(struct target *t)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue