target/riscv: remove duplicate `dtmcontrol_scan()`
Also avoid receiving data if the value is discarded on the call-site. Change-Id: Ied87b551536a00d9fad469b9843cccae1976e6b6 Signed-off-by: Evgeniy Naydanov <evgeniy.naydanov@syntacore.com>
This commit is contained in:
parent
9a23c9e679
commit
4379e84380
|
@ -273,38 +273,6 @@ static uint16_t dram_address(unsigned int index)
|
||||||
return 0x40 + index - 0x10;
|
return 0x40 + index - 0x10;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dtmcontrol_scan(struct target *target, uint32_t out, uint32_t *in_ptr)
|
|
||||||
{
|
|
||||||
struct scan_field field;
|
|
||||||
uint8_t in_value[4];
|
|
||||||
uint8_t out_value[4] = { 0 };
|
|
||||||
|
|
||||||
buf_set_u32(out_value, 0, 32, out);
|
|
||||||
|
|
||||||
jtag_add_ir_scan(target->tap, &select_dtmcontrol, TAP_IDLE);
|
|
||||||
|
|
||||||
field.num_bits = 32;
|
|
||||||
field.out_value = out_value;
|
|
||||||
field.in_value = in_value;
|
|
||||||
jtag_add_dr_scan(target->tap, 1, &field, TAP_IDLE);
|
|
||||||
|
|
||||||
/* Always return to dbus. */
|
|
||||||
jtag_add_ir_scan(target->tap, &select_dbus, TAP_IDLE);
|
|
||||||
|
|
||||||
int retval = jtag_execute_queue();
|
|
||||||
if (retval != ERROR_OK) {
|
|
||||||
LOG_ERROR("failed jtag scan: %d", retval);
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t in = buf_get_u32(field.in_value, 0, 32);
|
|
||||||
LOG_DEBUG("DTMCONTROL: 0x%x -> 0x%x", out, in);
|
|
||||||
|
|
||||||
if (in_ptr)
|
|
||||||
*in_ptr = in;
|
|
||||||
return ERROR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint32_t idcode_scan(struct target *target)
|
static uint32_t idcode_scan(struct target *target)
|
||||||
{
|
{
|
||||||
struct scan_field field;
|
struct scan_field field;
|
||||||
|
|
|
@ -433,41 +433,6 @@ static void select_dmi(struct target *target)
|
||||||
jtag_add_ir_scan(target->tap, &select_dbus, TAP_IDLE);
|
jtag_add_ir_scan(target->tap, &select_dbus, TAP_IDLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dtmcontrol_scan(struct target *target, uint32_t out, uint32_t *in_ptr)
|
|
||||||
{
|
|
||||||
struct scan_field field;
|
|
||||||
uint8_t in_value[4];
|
|
||||||
uint8_t out_value[4] = { 0 };
|
|
||||||
|
|
||||||
if (bscan_tunnel_ir_width != 0)
|
|
||||||
return dtmcontrol_scan_via_bscan(target, out, in_ptr);
|
|
||||||
|
|
||||||
buf_set_u32(out_value, 0, 32, out);
|
|
||||||
|
|
||||||
jtag_add_ir_scan(target->tap, &select_dtmcontrol, TAP_IDLE);
|
|
||||||
|
|
||||||
field.num_bits = 32;
|
|
||||||
field.out_value = out_value;
|
|
||||||
field.in_value = in_value;
|
|
||||||
jtag_add_dr_scan(target->tap, 1, &field, TAP_IDLE);
|
|
||||||
|
|
||||||
/* Always return to dmi. */
|
|
||||||
select_dmi(target);
|
|
||||||
|
|
||||||
int retval = jtag_execute_queue();
|
|
||||||
if (retval != ERROR_OK) {
|
|
||||||
LOG_ERROR("failed jtag scan: %d", retval);
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t in = buf_get_u32(field.in_value, 0, 32);
|
|
||||||
LOG_DEBUG("DTMCS: 0x%x -> 0x%x", out, in);
|
|
||||||
|
|
||||||
if (in_ptr)
|
|
||||||
*in_ptr = in;
|
|
||||||
return ERROR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int increase_dmi_busy_delay(struct target *target)
|
static int increase_dmi_busy_delay(struct target *target)
|
||||||
{
|
{
|
||||||
RISCV013_INFO(info);
|
RISCV013_INFO(info);
|
||||||
|
|
|
@ -383,22 +383,23 @@ int dtmcontrol_scan_via_bscan(struct target *target, uint32_t out, uint32_t *in_
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dtmcontrol_scan(struct target *target, uint32_t out, uint32_t *in_ptr)
|
/* TODO: rename "dtmcontrol"-> "dtmcs" */
|
||||||
|
int dtmcontrol_scan(struct target *target, uint32_t out, uint32_t *in_ptr)
|
||||||
{
|
{
|
||||||
struct scan_field field;
|
uint8_t value[4];
|
||||||
uint8_t in_value[4];
|
|
||||||
uint8_t out_value[4] = { 0 };
|
|
||||||
|
|
||||||
if (bscan_tunnel_ir_width != 0)
|
if (bscan_tunnel_ir_width != 0)
|
||||||
return dtmcontrol_scan_via_bscan(target, out, in_ptr);
|
return dtmcontrol_scan_via_bscan(target, out, in_ptr);
|
||||||
|
|
||||||
buf_set_u32(out_value, 0, 32, out);
|
buf_set_u32(value, 0, 32, out);
|
||||||
|
|
||||||
jtag_add_ir_scan(target->tap, &select_dtmcontrol, TAP_IDLE);
|
jtag_add_ir_scan(target->tap, &select_dtmcontrol, TAP_IDLE);
|
||||||
|
|
||||||
field.num_bits = 32;
|
struct scan_field field = {
|
||||||
field.out_value = out_value;
|
.num_bits = 32,
|
||||||
field.in_value = in_value;
|
.out_value = value,
|
||||||
|
.in_value = in_ptr ? value : NULL
|
||||||
|
};
|
||||||
jtag_add_dr_scan(target->tap, 1, &field, TAP_IDLE);
|
jtag_add_dr_scan(target->tap, 1, &field, TAP_IDLE);
|
||||||
|
|
||||||
/* Always return to dbus. */
|
/* Always return to dbus. */
|
||||||
|
@ -406,15 +407,18 @@ static int dtmcontrol_scan(struct target *target, uint32_t out, uint32_t *in_ptr
|
||||||
|
|
||||||
int retval = jtag_execute_queue();
|
int retval = jtag_execute_queue();
|
||||||
if (retval != ERROR_OK) {
|
if (retval != ERROR_OK) {
|
||||||
LOG_TARGET_ERROR(target, "dtmcontrol scan failed, error code = %d", retval);
|
LOG_TARGET_ERROR(target, "dtmcs scan failed, error code = %d", retval);
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t in = buf_get_u32(field.in_value, 0, 32);
|
if (in_ptr) {
|
||||||
LOG_DEBUG("DTMCONTROL: 0x%x -> 0x%x", out, in);
|
assert(field.in_value);
|
||||||
|
uint32_t in = buf_get_u32(field.in_value, 0, 32);
|
||||||
if (in_ptr)
|
LOG_TARGET_DEBUG(target, "DTMCS: 0x%" PRIx32 " -> 0x%" PRIx32, out, in);
|
||||||
*in_ptr = in;
|
*in_ptr = in;
|
||||||
|
} else {
|
||||||
|
LOG_TARGET_DEBUG(target, "DTMCS: 0x%" PRIx32 " -> ?", out);
|
||||||
|
}
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -362,12 +362,13 @@ extern struct scan_field select_dtmcontrol;
|
||||||
extern struct scan_field select_dbus;
|
extern struct scan_field select_dbus;
|
||||||
extern struct scan_field select_idcode;
|
extern struct scan_field select_idcode;
|
||||||
|
|
||||||
|
int dtmcontrol_scan(struct target *target, uint32_t out, uint32_t *in_ptr);
|
||||||
|
|
||||||
extern struct scan_field *bscan_tunneled_select_dmi;
|
extern struct scan_field *bscan_tunneled_select_dmi;
|
||||||
extern uint32_t bscan_tunneled_select_dmi_num_fields;
|
extern uint32_t bscan_tunneled_select_dmi_num_fields;
|
||||||
typedef enum { BSCAN_TUNNEL_NESTED_TAP, BSCAN_TUNNEL_DATA_REGISTER } bscan_tunnel_type_t;
|
typedef enum { BSCAN_TUNNEL_NESTED_TAP, BSCAN_TUNNEL_DATA_REGISTER } bscan_tunnel_type_t;
|
||||||
extern int bscan_tunnel_ir_width;
|
extern int bscan_tunnel_ir_width;
|
||||||
|
|
||||||
int dtmcontrol_scan_via_bscan(struct target *target, uint32_t out, uint32_t *in_ptr);
|
|
||||||
void select_dmi_via_bscan(struct target *target);
|
void select_dmi_via_bscan(struct target *target);
|
||||||
|
|
||||||
/*** OpenOCD Interface */
|
/*** OpenOCD Interface */
|
||||||
|
|
Loading…
Reference in New Issue