Browse Source

10ms timeout check on cp15 read/write

git-svn-id: svn://svn.berlios.de/openocd/trunk@2470 b42882b7-edfa-0310-969c-e2dbd0fdcd60
tags/v0.2.0
oharboe 15 years ago
parent
commit
e48e7000b0
1 changed files with 33 additions and 6 deletions
  1. +33
    -6
      src/target/arm926ejs.c

+ 33
- 6
src/target/arm926ejs.c 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);


Loading…
Cancel
Save