aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntonio Borneo <borneo.antonio@gmail.com>2021-08-14 14:48:50 +0200
committerAntonio Borneo <borneo.antonio@gmail.com>2021-11-05 22:43:12 +0000
commitbac3ef96b79ac7b7b44585f2c3a2adcd8732f7a2 (patch)
treeda8a716e7e6bea0c7c09eeaad44363e57c11dc02
parent6df533abb89307da066335700856e9bfe8586b94 (diff)
downloadriscv-openocd-bac3ef96b79ac7b7b44585f2c3a2adcd8732f7a2.zip
riscv-openocd-bac3ef96b79ac7b7b44585f2c3a2adcd8732f7a2.tar.gz
riscv-openocd-bac3ef96b79ac7b7b44585f2c3a2adcd8732f7a2.tar.bz2
stlink: skip rw-misc commands with TCP server
The main purpose of TCP server is to allow multiple clients to connect and share the same physical stlink. The commands RW MISC don't lock the communication between command and answer, thus cannot prevent another client to break this sequence. The commands are not supposed to be used in shared mode. Prevent the use of RW MISC commands on a (possibly) shared TCP backend. This degrades the overall performance, but the shared mode already adds its own overhead, so this is not really an issue. Change-Id: I713d912a269664859c8142932a9905d24b6d3caa Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com> Reviewed-on: https://review.openocd.org/c/openocd/+/6608 Tested-by: jenkins Reviewed-by: Tarek BOCHKATI <tarek.bouchkati@gmail.com>
-rw-r--r--src/jtag/drivers/stlink_usb.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/jtag/drivers/stlink_usb.c b/src/jtag/drivers/stlink_usb.c
index 42b8cc2..b51a0c2 100644
--- a/src/jtag/drivers/stlink_usb.c
+++ b/src/jtag/drivers/stlink_usb.c
@@ -4445,6 +4445,13 @@ static int stlink_usb_count_misc_rw_queue(void *handle, const struct dap_queue *
if (!(h->version.flags & STLINK_F_HAS_RW_MISC))
return 0;
+ /*
+ * RW_MISC sequence doesn't lock the st-link, so are not safe in shared mode.
+ * Don't use it with TCP backend to prevent any issue in case of sharing.
+ * This further degrades the performance, on top of TCP server overhead.
+ */
+ if (h->backend == &stlink_tcp_backend)
+ return 0;
for (i = 0; i < len; i++) {
if (q[i].cmd != CMD_MEM_AP_READ32 && q[i].cmd != CMD_MEM_AP_WRITE32)