|
From: openocd-gerrit <ope...@us...> - 2023-12-15 05:57:05
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Main OpenOCD repository".
The branch, master has been updated
via 3413ae67ae4b886f240c57af8bf562fb0ba8ce76 (commit)
from c1ae95f6f55168a15a7cf359c1d4c5f1d4b04c01 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 3413ae67ae4b886f240c57af8bf562fb0ba8ce76
Author: Samuel Dewan <sam...@me...>
Date: Fri Dec 1 14:16:22 2023 -0500
cmsis_dap_usb_hid: improve detection of probes with unusual report sizes
Currently all Atmel CMSIS-DAP interfaces are assumed to have 512 byte
reports except for the mEDBG (found on Xplained Mini boards) and the nEDBG
(found on Curiosity Nano boards). This check is far from exaustive and it
results in some Microchip programmers (like the MPLAB Snap and PICkit 4)
not working correctly with OpenOCD.
Instead of assuming that Atmel programmers have 512 byte reports unless we
know otherwise, this commit flips the logic around. Only the older "third
generation" EDBG based programmers have 512 byte report sizes, and that 64
bytes will be more common in Microchip tools going forward.
The list of PIDs for 3rd generation Microchip programmers comes from
toolinfo.py from Microchip's pyedbglib.
This commit adds a more generic "quirks" list that will allow programmers
with unusual report sizes to be added easily in the future.
Change-Id: Ic39a4bdcd67c4c93d5707657c6ee5d216bc4437a
Signed-off-by: Samuel Dewan <sam...@me...>
Reviewed-on: https://review.openocd.org/c/openocd/+/8033
Tested-by: jenkins
Reviewed-by: Tomas Vanek <va...@fb...>
diff --git a/src/jtag/drivers/cmsis_dap_usb_hid.c b/src/jtag/drivers/cmsis_dap_usb_hid.c
index 1decc7156..98ccc3e38 100644
--- a/src/jtag/drivers/cmsis_dap_usb_hid.c
+++ b/src/jtag/drivers/cmsis_dap_usb_hid.c
@@ -34,6 +34,36 @@ struct cmsis_dap_backend_data {
hid_device *dev_handle;
};
+struct cmsis_dap_report_size {
+ unsigned short vid;
+ unsigned short pid;
+ unsigned int report_size;
+};
+
+static const struct cmsis_dap_report_size report_size_quirks[] = {
+ /* Third gen Atmel tools use a report size of 512 */
+ /* This list of PIDs comes from toolinfo.py in Microchip's pyedbglib. */
+ // Atmel JTAG-ICE 3
+ { .vid = 0x03eb, .pid = 0x2140, .report_size = 512 },
+ // Atmel-ICE
+ { .vid = 0x03eb, .pid = 0x2141, .report_size = 512 },
+ // Atmel Power Debugger
+ { .vid = 0x03eb, .pid = 0x2144, .report_size = 512 },
+ // EDBG (found on Xplained Pro boards)
+ { .vid = 0x03eb, .pid = 0x2111, .report_size = 512 },
+ // Zero (???)
+ { .vid = 0x03eb, .pid = 0x2157, .report_size = 512 },
+ // EDBG with Mass Storage (found on Xplained Pro boards)
+ { .vid = 0x03eb, .pid = 0x2169, .report_size = 512 },
+ // Commercially available EDBG (for third-party use)
+ { .vid = 0x03eb, .pid = 0x216a, .report_size = 512 },
+ // Kraken (???)
+ { .vid = 0x03eb, .pid = 0x2170, .report_size = 512 },
+
+ { .vid = 0, .pid = 0, .report_size = 0 }
+};
+
+
static void cmsis_dap_hid_close(struct cmsis_dap *dap);
static int cmsis_dap_hid_alloc(struct cmsis_dap *dap, unsigned int pkt_sz);
static void cmsis_dap_hid_free(struct cmsis_dap *dap);
@@ -139,13 +169,15 @@ static int cmsis_dap_hid_open(struct cmsis_dap *dap, uint16_t vids[], uint16_t p
unsigned int packet_size = 64;
- /* atmel cmsis-dap uses 512 byte reports */
- /* except when it doesn't e.g. with mEDBG on SAMD10 Xplained
- * board */
+ /* Check for adapters that are known to have unusual report lengths. */
+ for (i = 0; report_size_quirks[i].vid != 0; i++) {
+ if (report_size_quirks[i].vid == target_vid &&
+ report_size_quirks[i].pid == target_pid) {
+ packet_size = report_size_quirks[i].report_size;
+ }
+ }
/* TODO: HID report descriptor should be parsed instead of
- * hardcoding a match by VID */
- if (target_vid == 0x03eb && target_pid != 0x2145 && target_pid != 0x2175)
- packet_size = 512;
+ * hardcoding a match by VID/PID */
dap->bdata->dev_handle = dev;
-----------------------------------------------------------------------
Summary of changes:
src/jtag/drivers/cmsis_dap_usb_hid.c | 44 +++++++++++++++++++++++++++++++-----
1 file changed, 38 insertions(+), 6 deletions(-)
hooks/post-receive
--
Main OpenOCD repository
|