aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPoroCYon <porocyon@titandemo.org>2021-07-21 04:17:08 +0200
committerAntonio Borneo <borneo.antonio@gmail.com>2021-07-31 10:08:24 +0100
commitbeff3de2ce7e275bf8c0051641dfc1acb0ecee9a (patch)
tree271f6fcde7449904b26215f6fcb803b415d4af53 /src
parentd94e1ffef0c352af1a291819907f398f060a462e (diff)
downloadriscv-openocd-beff3de2ce7e275bf8c0051641dfc1acb0ecee9a.zip
riscv-openocd-beff3de2ce7e275bf8c0051641dfc1acb0ecee9a.tar.gz
riscv-openocd-beff3de2ce7e275bf8c0051641dfc1acb0ecee9a.tar.bz2
drivers/cmsis-dap: update for newest protocol version
The capabilities INFO command can now return two bytes, without this patch, the capabilities would simply not be read and left as 0 (i.e. no capabilities). cf. https://arm-software.github.io/CMSIS_5/DAP/html/group__DAP__Info.html ; https://github.com/ARM-software/CMSIS_5/blob/116866fd74756c88096e37cbd0066fadad583cad/CMSIS/DAP/Firmware/Source/DAP.c#L100-L111 Change-Id: Ibd894971edf1c120cae08089e5515ce5e9972323 Signed-off-by: PoroCYon <porocyon@titandemo.org> Reviewed-on: http://openocd.zylin.com/6373 Tested-by: jenkins Reviewed-by: Andrzej Sierżęga <asier70@gmail.com> Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
Diffstat (limited to 'src')
-rw-r--r--src/jtag/drivers/cmsis_dap.c47
-rw-r--r--src/jtag/drivers/cmsis_dap.h2
2 files changed, 29 insertions, 20 deletions
diff --git a/src/jtag/drivers/cmsis_dap.c b/src/jtag/drivers/cmsis_dap.c
index be8881d..06d5c69 100644
--- a/src/jtag/drivers/cmsis_dap.c
+++ b/src/jtag/drivers/cmsis_dap.c
@@ -102,10 +102,16 @@ static bool swd_mode;
#define INFO_ID_PKT_SZ 0xff /* short */
#define INFO_ID_SWO_BUF_SZ 0xfd /* word */
-#define INFO_CAPS_SWD BIT(0)
-#define INFO_CAPS_JTAG BIT(1)
-#define INFO_CAPS_SWO_UART BIT(2)
-#define INFO_CAPS_SWO_MANCHESTER BIT(3)
+#define INFO_CAPS_SWD BIT(0)
+#define INFO_CAPS_JTAG BIT(1)
+#define INFO_CAPS_SWO_UART BIT(2)
+#define INFO_CAPS_SWO_MANCHESTER BIT(3)
+#define INFO_CAPS_ATOMIC_CMDS BIT(4)
+#define INFO_CAPS_TEST_DOMAIN_TIMER BIT(5)
+#define INFO_CAPS_SWO_STREAMING_TRACE BIT(6)
+#define INFO_CAPS_UART_PORT BIT(7)
+#define INFO_CAPS_USB_COM_PORT BIT(8)
+#define INFO_CAPS__NUM_CAPS 9
/* CMD_LED */
#define LED_ID_CONNECT 0x00
@@ -203,11 +209,16 @@ static bool swd_mode;
/* CMSIS-DAP Vendor Commands
* None as yet... */
-static const char * const info_caps_str[] = {
- "SWD Supported",
- "JTAG Supported",
- "SWO-UART Supported",
- "SWO-MANCHESTER Supported"
+static const char * const info_caps_str[INFO_CAPS__NUM_CAPS] = {
+ "SWD supported",
+ "JTAG supported",
+ "SWO-UART supported",
+ "SWO-MANCHESTER supported",
+ "Atomic commands supported",
+ "Test domain timer supported",
+ "SWO streaming trace supported",
+ "UART communication port supported",
+ "UART via USB COM port supported",
};
struct pending_transfer_result {
@@ -1016,19 +1027,17 @@ static int cmsis_dap_get_caps_info(void)
if (retval != ERROR_OK)
return retval;
- if (data[0] == 1) {
- uint8_t caps = data[1];
+ if (data[0] == 1 || data[0] == 2) {
+ uint16_t caps = data[1];
+ if (data[0] == 2)
+ caps |= (uint16_t)data[2] << 8;
cmsis_dap_handle->caps = caps;
- if (caps & INFO_CAPS_SWD)
- LOG_INFO("CMSIS-DAP: %s", info_caps_str[0]);
- if (caps & INFO_CAPS_JTAG)
- LOG_INFO("CMSIS-DAP: %s", info_caps_str[1]);
- if (caps & INFO_CAPS_SWO_UART)
- LOG_INFO("CMSIS-DAP: %s", info_caps_str[2]);
- if (caps & INFO_CAPS_SWO_MANCHESTER)
- LOG_INFO("CMSIS-DAP: %s", info_caps_str[3]);
+ for (int i = 0; i < INFO_CAPS__NUM_CAPS; ++i) {
+ if (caps & BIT(i))
+ LOG_INFO("CMSIS-DAP: %s", info_caps_str[i]);
+ }
}
return ERROR_OK;
diff --git a/src/jtag/drivers/cmsis_dap.h b/src/jtag/drivers/cmsis_dap.h
index 634a62c..f6d9df2 100644
--- a/src/jtag/drivers/cmsis_dap.h
+++ b/src/jtag/drivers/cmsis_dap.h
@@ -16,7 +16,7 @@ struct cmsis_dap {
uint16_t packet_buffer_size;
uint8_t *command;
uint8_t *response;
- uint8_t caps;
+ uint16_t caps;
uint8_t mode;
uint32_t swo_buf_sz;
bool trace_enabled;