Skip to content

Commit 4379e84

Browse files
committed
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 <[email protected]>
1 parent 9a23c9e commit 4379e84

File tree

4 files changed

+19
-81
lines changed

4 files changed

+19
-81
lines changed

src/target/riscv/riscv-011.c

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -273,38 +273,6 @@ static uint16_t dram_address(unsigned int index)
273273
return 0x40 + index - 0x10;
274274
}
275275

276-
static int dtmcontrol_scan(struct target *target, uint32_t out, uint32_t *in_ptr)
277-
{
278-
struct scan_field field;
279-
uint8_t in_value[4];
280-
uint8_t out_value[4] = { 0 };
281-
282-
buf_set_u32(out_value, 0, 32, out);
283-
284-
jtag_add_ir_scan(target->tap, &select_dtmcontrol, TAP_IDLE);
285-
286-
field.num_bits = 32;
287-
field.out_value = out_value;
288-
field.in_value = in_value;
289-
jtag_add_dr_scan(target->tap, 1, &field, TAP_IDLE);
290-
291-
/* Always return to dbus. */
292-
jtag_add_ir_scan(target->tap, &select_dbus, TAP_IDLE);
293-
294-
int retval = jtag_execute_queue();
295-
if (retval != ERROR_OK) {
296-
LOG_ERROR("failed jtag scan: %d", retval);
297-
return retval;
298-
}
299-
300-
uint32_t in = buf_get_u32(field.in_value, 0, 32);
301-
LOG_DEBUG("DTMCONTROL: 0x%x -> 0x%x", out, in);
302-
303-
if (in_ptr)
304-
*in_ptr = in;
305-
return ERROR_OK;
306-
}
307-
308276
static uint32_t idcode_scan(struct target *target)
309277
{
310278
struct scan_field field;

src/target/riscv/riscv-013.c

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -433,41 +433,6 @@ static void select_dmi(struct target *target)
433433
jtag_add_ir_scan(target->tap, &select_dbus, TAP_IDLE);
434434
}
435435

436-
static int dtmcontrol_scan(struct target *target, uint32_t out, uint32_t *in_ptr)
437-
{
438-
struct scan_field field;
439-
uint8_t in_value[4];
440-
uint8_t out_value[4] = { 0 };
441-
442-
if (bscan_tunnel_ir_width != 0)
443-
return dtmcontrol_scan_via_bscan(target, out, in_ptr);
444-
445-
buf_set_u32(out_value, 0, 32, out);
446-
447-
jtag_add_ir_scan(target->tap, &select_dtmcontrol, TAP_IDLE);
448-
449-
field.num_bits = 32;
450-
field.out_value = out_value;
451-
field.in_value = in_value;
452-
jtag_add_dr_scan(target->tap, 1, &field, TAP_IDLE);
453-
454-
/* Always return to dmi. */
455-
select_dmi(target);
456-
457-
int retval = jtag_execute_queue();
458-
if (retval != ERROR_OK) {
459-
LOG_ERROR("failed jtag scan: %d", retval);
460-
return retval;
461-
}
462-
463-
uint32_t in = buf_get_u32(field.in_value, 0, 32);
464-
LOG_DEBUG("DTMCS: 0x%x -> 0x%x", out, in);
465-
466-
if (in_ptr)
467-
*in_ptr = in;
468-
return ERROR_OK;
469-
}
470-
471436
static int increase_dmi_busy_delay(struct target *target)
472437
{
473438
RISCV013_INFO(info);

src/target/riscv/riscv.c

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -383,38 +383,42 @@ int dtmcontrol_scan_via_bscan(struct target *target, uint32_t out, uint32_t *in_
383383
return ERROR_OK;
384384
}
385385

386-
static int dtmcontrol_scan(struct target *target, uint32_t out, uint32_t *in_ptr)
386+
/* TODO: rename "dtmcontrol"-> "dtmcs" */
387+
int dtmcontrol_scan(struct target *target, uint32_t out, uint32_t *in_ptr)
387388
{
388-
struct scan_field field;
389-
uint8_t in_value[4];
390-
uint8_t out_value[4] = { 0 };
389+
uint8_t value[4];
391390

392391
if (bscan_tunnel_ir_width != 0)
393392
return dtmcontrol_scan_via_bscan(target, out, in_ptr);
394393

395-
buf_set_u32(out_value, 0, 32, out);
394+
buf_set_u32(value, 0, 32, out);
396395

397396
jtag_add_ir_scan(target->tap, &select_dtmcontrol, TAP_IDLE);
398397

399-
field.num_bits = 32;
400-
field.out_value = out_value;
401-
field.in_value = in_value;
398+
struct scan_field field = {
399+
.num_bits = 32,
400+
.out_value = value,
401+
.in_value = in_ptr ? value : NULL
402+
};
402403
jtag_add_dr_scan(target->tap, 1, &field, TAP_IDLE);
403404

404405
/* Always return to dbus. */
405406
jtag_add_ir_scan(target->tap, &select_dbus, TAP_IDLE);
406407

407408
int retval = jtag_execute_queue();
408409
if (retval != ERROR_OK) {
409-
LOG_TARGET_ERROR(target, "dtmcontrol scan failed, error code = %d", retval);
410+
LOG_TARGET_ERROR(target, "dtmcs scan failed, error code = %d", retval);
410411
return retval;
411412
}
412413

413-
uint32_t in = buf_get_u32(field.in_value, 0, 32);
414-
LOG_DEBUG("DTMCONTROL: 0x%x -> 0x%x", out, in);
415-
416-
if (in_ptr)
414+
if (in_ptr) {
415+
assert(field.in_value);
416+
uint32_t in = buf_get_u32(field.in_value, 0, 32);
417+
LOG_TARGET_DEBUG(target, "DTMCS: 0x%" PRIx32 " -> 0x%" PRIx32, out, in);
417418
*in_ptr = in;
419+
} else {
420+
LOG_TARGET_DEBUG(target, "DTMCS: 0x%" PRIx32 " -> ?", out);
421+
}
418422
return ERROR_OK;
419423
}
420424

src/target/riscv/riscv.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -362,12 +362,13 @@ extern struct scan_field select_dtmcontrol;
362362
extern struct scan_field select_dbus;
363363
extern struct scan_field select_idcode;
364364

365+
int dtmcontrol_scan(struct target *target, uint32_t out, uint32_t *in_ptr);
366+
365367
extern struct scan_field *bscan_tunneled_select_dmi;
366368
extern uint32_t bscan_tunneled_select_dmi_num_fields;
367369
typedef enum { BSCAN_TUNNEL_NESTED_TAP, BSCAN_TUNNEL_DATA_REGISTER } bscan_tunnel_type_t;
368370
extern int bscan_tunnel_ir_width;
369371

370-
int dtmcontrol_scan_via_bscan(struct target *target, uint32_t out, uint32_t *in_ptr);
371372
void select_dmi_via_bscan(struct target *target);
372373

373374
/*** OpenOCD Interface */

0 commit comments

Comments
 (0)