From: Antonio Borneo Date: Thu, 28 Feb 2019 10:31:11 +0000 (+0100) Subject: target/adi_v5_swd: update cached value on write to DP_SELECT X-Git-Tag: v0.11.0-rc1~788 X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=commitdiff_plain;h=420a692e0fae34a59eb3c33932362812e33f5583;ds=sidebyside target/adi_v5_swd: update cached value on write to DP_SELECT When the register DP_SELECT is written directly, e.g. with command dpreg 8 the cached value in OpenOCD is not completely updated with the new value, thus creating issues in the following AP and DP read/write that rely on the cached value. Update the cached value while writing to DP_SELECT. Change-Id: I8221b10cd6fc1fbe73e6b834b68820b43480e1a2 Signed-off-by: Antonio Borneo Reviewed-on: http://openocd.zylin.com/4979 Tested-by: jenkins Reviewed-by: Tomas Vanek --- diff --git a/src/target/adi_v5_swd.c b/src/target/adi_v5_swd.c index eb181cb653..d099f4e710 100644 --- a/src/target/adi_v5_swd.c +++ b/src/target/adi_v5_swd.c @@ -211,7 +211,10 @@ static int swd_queue_dp_write(struct adiv5_dap *dap, unsigned reg, return retval; swd_finish_read(dap); - swd_queue_dp_bankselect(dap, reg); + if (reg == DP_SELECT) + dap->select = data & (DP_SELECT_APSEL | DP_SELECT_APBANK | DP_SELECT_DPBANK); + else + swd_queue_dp_bankselect(dap, reg); swd->write_reg(swd_cmd(false, false, reg), data, 0); return check_sync(dap);