SimonQian <simonqian@SimonQian.com>:
Changes svf_check_tdo function (checks tdo output matches desired values): - call buf_cmp_mask function to do comparison instead of using a loop. - fixes a bug when data length is equal to sizeof(int). git-svn-id: svn://svn.berlios.de/openocd/trunk@1900 b42882b7-edfa-0310-969c-e2dbd0fdcd60
This commit is contained in:
parent
7e11f08a77
commit
8717ed04aa
|
@ -628,32 +628,35 @@ static int svf_copy_hexstring_to_binary(char *str, u8 **bin, int orig_bit_len, i
|
||||||
|
|
||||||
static int svf_check_tdo(void)
|
static int svf_check_tdo(void)
|
||||||
{
|
{
|
||||||
int i, j, byte_len, index;
|
int i, len, index;
|
||||||
|
|
||||||
for (i = 0; i < svf_check_tdo_para_index; i++)
|
for (i = 0; i < svf_check_tdo_para_index; i++)
|
||||||
{
|
{
|
||||||
if (svf_check_tdo_para[i].enabled)
|
index = svf_check_tdo_para[i].buffer_offset;
|
||||||
|
len = svf_check_tdo_para[i].bit_len;
|
||||||
|
if ((svf_check_tdo_para[i].enabled)
|
||||||
|
&& buf_cmp_mask(&svf_tdi_buffer[index], &svf_tdo_buffer[index], &svf_mask_buffer[index], len))
|
||||||
{
|
{
|
||||||
byte_len = (svf_check_tdo_para[i].bit_len + 7) >> 3;
|
unsigned bitmask;
|
||||||
index = svf_check_tdo_para[i].buffer_offset;
|
unsigned received, expected, tapmask;
|
||||||
for (j = 0; j < byte_len; j++)
|
if (svf_check_tdo_para[i].bit_len >= 32)
|
||||||
{
|
{
|
||||||
if ((svf_tdi_buffer[index + j] & svf_mask_buffer[index + j]) != svf_tdo_buffer[index + j])
|
bitmask = 0xFFFFFFFF;
|
||||||
{
|
|
||||||
unsigned bitmask = (1 << svf_check_tdo_para[i].bit_len) - 1;
|
|
||||||
unsigned received, expected, tapmask;
|
|
||||||
memcpy(&received, svf_tdi_buffer + index, sizeof(unsigned));
|
|
||||||
memcpy(&expected, svf_tdo_buffer + index, sizeof(unsigned));
|
|
||||||
memcpy(&tapmask, svf_mask_buffer + index, sizeof(unsigned));
|
|
||||||
LOG_ERROR("tdo check error at line %d, "
|
|
||||||
"read = 0x%X, want = 0x%X, mask = 0x%X",
|
|
||||||
svf_check_tdo_para[i].line_num,
|
|
||||||
received & bitmask,
|
|
||||||
expected & bitmask,
|
|
||||||
tapmask & bitmask);
|
|
||||||
return ERROR_FAIL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bitmask = (1 << svf_check_tdo_para[i].bit_len) - 1;
|
||||||
|
}
|
||||||
|
memcpy(&received, svf_tdi_buffer + index, sizeof(unsigned));
|
||||||
|
memcpy(&expected, svf_tdo_buffer + index, sizeof(unsigned));
|
||||||
|
memcpy(&tapmask, svf_mask_buffer + index, sizeof(unsigned));
|
||||||
|
LOG_ERROR("tdo check error at line %d",
|
||||||
|
svf_check_tdo_para[i].line_num);
|
||||||
|
LOG_ERROR("read = 0x%X, want = 0x%X, mask = 0x%X",
|
||||||
|
received & bitmask,
|
||||||
|
expected & bitmask,
|
||||||
|
tapmask & bitmask);
|
||||||
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
svf_check_tdo_para_index = 0;
|
svf_check_tdo_para_index = 0;
|
||||||
|
|
Loading…
Reference in New Issue