10ms timeout check on cp15 read/write

git-svn-id: svn://svn.berlios.de/openocd/trunk@2470 b42882b7-edfa-0310-969c-e2dbd0fdcd60
This commit is contained in:
oharboe 2009-07-06 09:32:22 +00:00
parent 83655bf49b
commit e48e7000b0

View File

@ -159,8 +159,9 @@ int arm926ejs_cp15_read(target_t *target, uint32_t op1, uint32_t op2, uint32_t C
jtag_add_dr_scan(4, fields, jtag_get_end_state());
/*TODO: add timeout*/
do
long long then = timeval_ms();
for (;;)
{
/* rescan with NOP, to wait for the access to complete */
access = 0;
@ -173,7 +174,19 @@ int arm926ejs_cp15_read(target_t *target, uint32_t op1, uint32_t op2, uint32_t C
{
return retval;
}
} while (buf_get_u32(&access, 0, 1) != 1);
if (buf_get_u32(&access, 0, 1) == 1)
{
break;
}
/* 10ms timeout */
if ((timeval_ms()-then)>10)
{
LOG_ERROR("cp15 read operation timed out");
return ERROR_FAIL;
}
}
#ifdef _DEBUG_INSTRUCTION_EXECUTION_
LOG_DEBUG("addr: 0x%x value: %8.8x", address, *value);
@ -228,8 +241,10 @@ int arm926ejs_cp15_write(target_t *target, uint32_t op1, uint32_t op2, uint32_t
fields[3].in_value = NULL;
jtag_add_dr_scan(4, fields, jtag_get_end_state());
/*TODO: add timeout*/
do
long long then = timeval_ms();
for (;;)
{
/* rescan with NOP, to wait for the access to complete */
access = 0;
@ -239,7 +254,19 @@ int arm926ejs_cp15_write(target_t *target, uint32_t op1, uint32_t op2, uint32_t
{
return retval;
}
} while (buf_get_u32(&access, 0, 1) != 1);
if (buf_get_u32(&access, 0, 1) == 1)
{
break;
}
/* 10ms timeout */
if ((timeval_ms()-then)>10)
{
LOG_ERROR("cp15 write operation timed out");
return ERROR_FAIL;
}
}
#ifdef _DEBUG_INSTRUCTION_EXECUTION_
LOG_DEBUG("addr: 0x%x value: %8.8x", address, value);