From 415715d91a11ea4ed6db3a1fd760741a22b6e098 Mon Sep 17 00:00:00 2001 From: Tomas Vanek Date: Tue, 14 Mar 2023 15:11:14 +0100 Subject: [PATCH] target/adi_v5_jtag: fix endianness error in transaction replay The code for JTAG WAIT recovery did not handle DP_SELECT endianness. While on it, mark missing ADIv6 DP SELECT1 handling as TODO. Change-Id: I44f3bc8fc9fd2483c0293b6d4f2c51a60ca01873 Signed-off-by: Tomas Vanek Reviewed-on: https://review.openocd.org/c/openocd/+/7540 Tested-by: jenkins Reviewed-by: Antonio Borneo --- src/target/adi_v5_jtag.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/target/adi_v5_jtag.c b/src/target/adi_v5_jtag.c index eeb796be4..9f66adc68 100644 --- a/src/target/adi_v5_jtag.c +++ b/src/target/adi_v5_jtag.c @@ -566,14 +566,20 @@ static int jtagdp_overrun_check(struct adiv5_dap *dap) /* restore SELECT register first */ if (!list_empty(&replay_list)) { el = list_first_entry(&replay_list, struct dap_cmd, lh); + + uint8_t out_value_buf[4]; + buf_set_u32(out_value_buf, 0, 32, (uint32_t)(el->dp_select)); + tmp = dap_cmd_new(dap, JTAG_DP_DPACC, - DP_SELECT, DPAP_WRITE, (uint8_t *)&el->dp_select, NULL, 0); + DP_SELECT, DPAP_WRITE, out_value_buf, NULL, 0); if (!tmp) { retval = ERROR_JTAG_DEVICE_ERROR; goto done; } list_add(&tmp->lh, &replay_list); + /* TODO: ADIv6 DP SELECT1 handling */ + dap->select = DP_SELECT_INVALID; }