mips32, add generic scan 32 function
Will be used later, allow queuing all needed scans in a pracc access. This makes faster execution with ftdi based adapters working in sync with pracc. Added now because the overall code is shorter. Change-Id: Ib32b89307b75785f88870db8d7c9255dc5bbd426 Signed-off-by: Salvador Arroyo <sarroyofdez@yahoo.es> Reviewed-on: http://openocd.zylin.com/4005 Tested-by: jenkins Reviewed-by: Freddie Chopin <freddie.chopin@gmail.com>
This commit is contained in:
parent
832f5974f2
commit
d81fc78d9b
|
@ -121,52 +121,42 @@ void mips_ejtag_add_scan_96(struct mips_ejtag *ejtag_info, uint32_t ctrl, uint32
|
||||||
keep_alive();
|
keep_alive();
|
||||||
}
|
}
|
||||||
|
|
||||||
int mips_ejtag_drscan_32(struct mips_ejtag *ejtag_info, uint32_t *data)
|
void mips_ejtag_drscan_32_queued(struct mips_ejtag *ejtag_info, uint32_t data_out, uint8_t *data_in)
|
||||||
{
|
{
|
||||||
struct jtag_tap *tap;
|
assert(ejtag_info->tap != NULL);
|
||||||
tap = ejtag_info->tap;
|
struct jtag_tap *tap = ejtag_info->tap;
|
||||||
assert(tap != NULL);
|
|
||||||
|
|
||||||
struct scan_field field;
|
struct scan_field field;
|
||||||
uint8_t t[4], r[4];
|
|
||||||
int retval;
|
|
||||||
|
|
||||||
field.num_bits = 32;
|
field.num_bits = 32;
|
||||||
field.out_value = t;
|
|
||||||
buf_set_u32(t, 0, field.num_bits, *data);
|
|
||||||
field.in_value = r;
|
|
||||||
|
|
||||||
|
uint8_t scan_out[4];
|
||||||
|
field.out_value = scan_out;
|
||||||
|
buf_set_u32(scan_out, 0, field.num_bits, data_out);
|
||||||
|
|
||||||
|
field.in_value = data_in;
|
||||||
jtag_add_dr_scan(tap, 1, &field, TAP_IDLE);
|
jtag_add_dr_scan(tap, 1, &field, TAP_IDLE);
|
||||||
|
|
||||||
retval = jtag_execute_queue();
|
keep_alive();
|
||||||
|
}
|
||||||
|
|
||||||
|
int mips_ejtag_drscan_32(struct mips_ejtag *ejtag_info, uint32_t *data)
|
||||||
|
{
|
||||||
|
uint8_t scan_in[4];
|
||||||
|
mips_ejtag_drscan_32_queued(ejtag_info, *data, scan_in);
|
||||||
|
|
||||||
|
int retval = jtag_execute_queue();
|
||||||
if (retval != ERROR_OK) {
|
if (retval != ERROR_OK) {
|
||||||
LOG_ERROR("register read failed");
|
LOG_ERROR("register read failed");
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
*data = buf_get_u32(field.in_value, 0, 32);
|
*data = buf_get_u32(scan_in, 0, 32);
|
||||||
|
|
||||||
keep_alive();
|
|
||||||
|
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
void mips_ejtag_drscan_32_out(struct mips_ejtag *ejtag_info, uint32_t data)
|
void mips_ejtag_drscan_32_out(struct mips_ejtag *ejtag_info, uint32_t data)
|
||||||
{
|
{
|
||||||
uint8_t t[4];
|
mips_ejtag_drscan_32_queued(ejtag_info, data, NULL);
|
||||||
struct jtag_tap *tap;
|
|
||||||
tap = ejtag_info->tap;
|
|
||||||
assert(tap != NULL);
|
|
||||||
|
|
||||||
struct scan_field field;
|
|
||||||
|
|
||||||
field.num_bits = 32;
|
|
||||||
field.out_value = t;
|
|
||||||
buf_set_u32(t, 0, field.num_bits, data);
|
|
||||||
|
|
||||||
field.in_value = NULL;
|
|
||||||
|
|
||||||
jtag_add_dr_scan(tap, 1, &field, TAP_IDLE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int mips_ejtag_drscan_8(struct mips_ejtag *ejtag_info, uint8_t *data)
|
int mips_ejtag_drscan_8(struct mips_ejtag *ejtag_info, uint8_t *data)
|
||||||
|
|
Loading…
Reference in New Issue