Fixed wrong assignment of IR width (needed BSCAN IR width somewhere

instead of Tunneled JTAG IR width).
This commit is contained in:
Greg Savin 2019-04-05 12:10:34 -07:00
parent dd2c0b0b9a
commit 38e7bdbaa3
2 changed files with 7 additions and 49 deletions

View File

@ -416,47 +416,6 @@ static void select_dmi_via_bscan(struct target *target)
jtag_add_dr_scan(target->tap, bscan_tunneled_select_dmi_num_fields, bscan_tunneled_select_dmi, TAP_IDLE);
}
static void dmi_scan_via_bscan(struct target *target, uint8_t *out, uint8_t *in, unsigned num_bytes, size_t num_bits)
{
jtag_add_ir_scan(target->tap, &select_user4, TAP_IDLE);
uint8_t out_right_shifted_by_one[num_bytes];
uint8_t tunneled_dr_width[4] = {num_bits};
memcpy(out_right_shifted_by_one, out, num_bytes);
buffer_shr(out_right_shifted_by_one, num_bytes, 1);
struct scan_field tunneled_dr[] = {
{
.num_bits = 1,
.out_value = bscan_one,
.in_value = NULL,
},
{
.num_bits = 7,
.out_value = tunneled_dr_width,
.in_value = NULL,
},
/* for BSCAN tunnel, there is a one-TCK skew between shift in and shift out, so splitting the DR payload into 2 fields */
{
.num_bits = 1,
.out_value = out,
.in_value = NULL,
},
{
.num_bits = num_bits,
.out_value = out_right_shifted_by_one,
.in_value = in,
},
{
.num_bits = 3,
.out_value = bscan_zero,
.in_value = NULL,
}
};
jtag_add_dr_scan(target->tap, DIM(tunneled_dr), tunneled_dr, TAP_IDLE);
}
static uint32_t dtmcontrol_scan_via_bscan(struct target *target, uint32_t out)
{

View File

@ -179,18 +179,17 @@ struct scan_field select_user4 = {
};
uint8_t zero[4] = {0};
uint8_t one[4] = {1};
uint8_t tunneled_ir_width[4] = {5}; /* overridden by assignment in riscv_init_target */
static uint8_t bscan_zero[4];
uint8_t bscan_tunneled_ir_width[4] = {5}; /* overridden by assignment in riscv_init_target */
struct scan_field _bscan_tunneled_select_dmi[] = {
{
.num_bits = 1,
.out_value = zero,
.out_value = bscan_zero,
.in_value = NULL,
},
{
.num_bits = 7,
.out_value = tunneled_ir_width,
.out_value = bscan_tunneled_ir_width,
.in_value = NULL,
},
{
@ -200,7 +199,7 @@ struct scan_field _bscan_tunneled_select_dmi[] = {
},
{
.num_bits = 3,
.out_value = zero,
.out_value = bscan_zero,
.in_value = NULL,
}
};
@ -306,8 +305,8 @@ static int riscv_init_target(struct command_context *cmd_ctx,
#if BUILD_RISCV_ARTY_BSCAN == 1
if (target->bscan_tunnel_ir_width != 0) {
select_user4.num_bits = target->bscan_tunnel_ir_width;
tunneled_ir_width[0] = target->bscan_tunnel_ir_width;
select_user4.num_bits = target->tap->ir_length;
bscan_tunneled_ir_width[0] = target->bscan_tunnel_ir_width;
bscan_tunneled_select_dmi[2].num_bits = target->bscan_tunnel_ir_width;
}