X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Ftarget%2Fadi_v5_swd.c;h=771b46090e175c2d91b694fda67517afb08e286b;hp=f7a199c56c4735d0ddd4e5202c8df9bcff3365ad;hb=cf49e04429202e832ea642d1fdfec9570fd20f17;hpb=feaea8632f7e7b5fd6ec428058a5f726755cbf9a diff --git a/src/target/adi_v5_swd.c b/src/target/adi_v5_swd.c index f7a199c56c..771b46090e 100644 --- a/src/target/adi_v5_swd.c +++ b/src/target/adi_v5_swd.c @@ -112,9 +112,9 @@ static int swd_connect(struct adiv5_dap *dap) /* Note, debugport_init() does setup too */ jtag_interface->swd->switch_seq(JTAG_TO_SWD); - /* Make sure we don't try to perform any other accesses before the DPIDR read. */ + /* Clear link state, including the SELECT cache. */ dap->do_reconnect = false; - dap->select = 0; + dap->select = DP_SELECT_INVALID; swd_queue_dp_read(dap, DP_IDCODE, &idcode); @@ -123,8 +123,6 @@ static int swd_connect(struct adiv5_dap *dap) status = swd_run_inner(dap); - dap->select = DP_SELECT_INVALID; - if (status == ERROR_OK) { LOG_INFO("SWD IDCODE %#8.8" PRIx32, idcode); dap->do_reconnect = false; @@ -160,7 +158,8 @@ static int swd_queue_ap_abort(struct adiv5_dap *dap, uint8_t *ack) /** Select the DP register bank matching bits 7:4 of reg. */ static void swd_queue_dp_bankselect(struct adiv5_dap *dap, unsigned reg) { - if (reg == DP_SELECT) + /* Only register address 4 is banked. */ + if ((reg & 0xf) != 4) return; uint32_t select_dp_bank = (reg & 0x000000F0) >> 4;