You can subscribe to this list here.
| 2008 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(75) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2009 |
Jan
(70) |
Feb
(20) |
Mar
(52) |
Apr
(149) |
May
(387) |
Jun
(466) |
Jul
(133) |
Aug
(87) |
Sep
(122) |
Oct
(140) |
Nov
(185) |
Dec
(105) |
| 2010 |
Jan
(85) |
Feb
(45) |
Mar
(75) |
Apr
(17) |
May
(41) |
Jun
(52) |
Jul
(33) |
Aug
(29) |
Sep
(36) |
Oct
(15) |
Nov
(26) |
Dec
(34) |
| 2011 |
Jan
(26) |
Feb
(25) |
Mar
(26) |
Apr
(29) |
May
(20) |
Jun
(27) |
Jul
(15) |
Aug
(32) |
Sep
(13) |
Oct
(64) |
Nov
(60) |
Dec
(10) |
| 2012 |
Jan
(64) |
Feb
(63) |
Mar
(39) |
Apr
(43) |
May
(54) |
Jun
(11) |
Jul
(30) |
Aug
(45) |
Sep
(11) |
Oct
(70) |
Nov
(24) |
Dec
(23) |
| 2013 |
Jan
(17) |
Feb
(8) |
Mar
(35) |
Apr
(40) |
May
(20) |
Jun
(24) |
Jul
(36) |
Aug
(25) |
Sep
(42) |
Oct
(40) |
Nov
(9) |
Dec
(21) |
| 2014 |
Jan
(29) |
Feb
(24) |
Mar
(60) |
Apr
(22) |
May
(22) |
Jun
(46) |
Jul
(11) |
Aug
(23) |
Sep
(26) |
Oct
(10) |
Nov
(14) |
Dec
(2) |
| 2015 |
Jan
(28) |
Feb
(47) |
Mar
(33) |
Apr
(58) |
May
(5) |
Jun
(1) |
Jul
|
Aug
(8) |
Sep
(12) |
Oct
(25) |
Nov
(58) |
Dec
(21) |
| 2016 |
Jan
(12) |
Feb
(40) |
Mar
(2) |
Apr
(1) |
May
(67) |
Jun
(2) |
Jul
(5) |
Aug
(36) |
Sep
|
Oct
(24) |
Nov
(17) |
Dec
(50) |
| 2017 |
Jan
(14) |
Feb
(16) |
Mar
(2) |
Apr
(35) |
May
(14) |
Jun
(16) |
Jul
(3) |
Aug
(3) |
Sep
|
Oct
(19) |
Nov
|
Dec
(16) |
| 2018 |
Jan
(55) |
Feb
(11) |
Mar
(34) |
Apr
(14) |
May
(4) |
Jun
(20) |
Jul
(39) |
Aug
(16) |
Sep
(17) |
Oct
(16) |
Nov
(20) |
Dec
(30) |
| 2019 |
Jan
(29) |
Feb
(24) |
Mar
(37) |
Apr
(26) |
May
(19) |
Jun
(21) |
Jul
(2) |
Aug
(3) |
Sep
(9) |
Oct
(12) |
Nov
(12) |
Dec
(12) |
| 2020 |
Jan
(47) |
Feb
(36) |
Mar
(54) |
Apr
(44) |
May
(37) |
Jun
(19) |
Jul
(32) |
Aug
(13) |
Sep
(16) |
Oct
(24) |
Nov
(32) |
Dec
(11) |
| 2021 |
Jan
(14) |
Feb
(5) |
Mar
(40) |
Apr
(32) |
May
(42) |
Jun
(31) |
Jul
(29) |
Aug
(47) |
Sep
(38) |
Oct
(17) |
Nov
(74) |
Dec
(33) |
| 2022 |
Jan
(11) |
Feb
(15) |
Mar
(40) |
Apr
(21) |
May
(39) |
Jun
(44) |
Jul
(19) |
Aug
(46) |
Sep
(79) |
Oct
(35) |
Nov
(21) |
Dec
(15) |
| 2023 |
Jan
(56) |
Feb
(13) |
Mar
(43) |
Apr
(28) |
May
(60) |
Jun
(15) |
Jul
(29) |
Aug
(28) |
Sep
(32) |
Oct
(21) |
Nov
(42) |
Dec
(39) |
| 2024 |
Jan
(35) |
Feb
(17) |
Mar
(28) |
Apr
(7) |
May
(14) |
Jun
(35) |
Jul
(30) |
Aug
(35) |
Sep
(30) |
Oct
(28) |
Nov
(38) |
Dec
(18) |
| 2025 |
Jan
(21) |
Feb
(28) |
Mar
(36) |
Apr
(35) |
May
(34) |
Jun
(58) |
Jul
(9) |
Aug
(54) |
Sep
(47) |
Oct
(15) |
Nov
(58) |
Dec
|
|
From: openocd-gerrit <ope...@us...> - 2023-01-21 22:58:20
|
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 6e67f1473af15adc7c4052cee27ad84883b286d4 (commit)
from 92dd917f5a2af4470b151adc3492f9b3c68caaa9 (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 6e67f1473af15adc7c4052cee27ad84883b286d4
Author: Marian Buschsieweke <mar...@ov...>
Date: Thu Dec 22 13:20:07 2022 +0100
helper: Add generic little endian CRC32 function
This generalizes the little endian CRC32 function used in the OR1K
target and moves it to a common helper, so that other places do not need
to reinvent the wheel. It is directly used in the OR1K target.
Change-Id: I0e55340281a5bfd80669bb1994f3a96fecc1248a
Signed-off-by: Marian Buschsieweke <mar...@ov...>
Reviewed-on: https://review.openocd.org/c/openocd/+/7415
Tested-by: jenkins
Reviewed-by: Antonio Borneo <bor...@gm...>
diff --git a/src/helper/Makefile.am b/src/helper/Makefile.am
index 7354f5422..c4c60d96b 100644
--- a/src/helper/Makefile.am
+++ b/src/helper/Makefile.am
@@ -9,6 +9,7 @@ noinst_LTLIBRARIES += %D%/libhelper.la
%D%/configuration.c \
%D%/log.c \
%D%/command.c \
+ %D%/crc32.c \
%D%/time_support.c \
%D%/replacements.c \
%D%/fileio.c \
@@ -24,6 +25,7 @@ noinst_LTLIBRARIES += %D%/libhelper.la
%D%/types.h \
%D%/log.h \
%D%/command.h \
+ %D%/crc32.h \
%D%/time_support.h \
%D%/replacements.h \
%D%/fileio.h \
diff --git a/src/helper/crc32.c b/src/helper/crc32.c
new file mode 100644
index 000000000..441a46c57
--- /dev/null
+++ b/src/helper/crc32.c
@@ -0,0 +1,50 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+/***************************************************************************
+ * Copyright (C) 2013-2014 by Franck Jullien *
+ * ele...@gm... *
+ * *
+ * Copyright (C) 2022 Otto-von-Guericke-Universität Magdeburg *
+ * mar...@ov... *
+ ***************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "crc32.h"
+#include <stdint.h>
+#include <stddef.h>
+
+static uint32_t crc_le_step(uint32_t poly, uint32_t crc, uint32_t data_in,
+ unsigned int data_bits)
+{
+ for (unsigned int i = 0; i < data_bits; i++) {
+ uint32_t d, c;
+ d = ((data_in >> i) & 0x1) ? 0xffffffff : 0;
+ c = (crc & 0x1) ? 0xffffffff : 0;
+ crc = crc >> 1;
+ crc = crc ^ ((d ^ c) & poly);
+ }
+
+ return crc;
+}
+
+uint32_t crc32_le(uint32_t poly, uint32_t seed, const void *_data,
+ size_t data_len)
+{
+ if (((uintptr_t)_data & 0x3) || (data_len & 0x3)) {
+ /* data is unaligned, processing data one byte at a time */
+ const uint8_t *data = _data;
+ for (size_t i = 0; i < data_len; i++)
+ seed = crc_le_step(poly, seed, data[i], 8);
+ } else {
+ /* data is aligned, processing 32 bit at a time */
+ data_len >>= 2;
+ const uint32_t *data = _data;
+ for (size_t i = 0; i < data_len; i++)
+ seed = crc_le_step(poly, seed, data[i], 32);
+ }
+
+ return seed;
+}
diff --git a/src/helper/crc32.h b/src/helper/crc32.h
new file mode 100644
index 000000000..8f077863a
--- /dev/null
+++ b/src/helper/crc32.h
@@ -0,0 +1,37 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+/***************************************************************************
+ * Copyright (C) 2022 Otto-von-Guericke-Universität Magdeburg *
+ * mar...@ov... *
+ ***************************************************************************/
+
+#ifndef OPENOCD_HELPER_CRC32_H
+#define OPENOCD_HELPER_CRC32_H
+
+#include <stdint.h>
+#include <stddef.h>
+
+/** @file
+ * A generic CRC32 implementation
+ */
+
+/**
+ * CRC32 polynomial commonly used for little endian CRC32
+ */
+#define CRC32_POLY_LE 0xedb88320
+
+/**
+ * Calculate the CRC32 value of the given data
+ * @param poly The polynomial of the CRC
+ * @param seed The seed to use (mostly either `0` or `0xffffffff`)
+ * @param data The data to calculate the CRC32 of
+ * @param data_len The length of the data in @p data in bytes
+ * @return The CRC value of the first @p data_len bytes at @p data
+ * @note This function can be used to incrementally compute the CRC one
+ * chunk of data at a time by using the CRC32 of the previous chunk
+ * as @p seed for the next chunk.
+ */
+uint32_t crc32_le(uint32_t poly, uint32_t seed, const void *data,
+ size_t data_len);
+
+#endif /* OPENOCD_HELPER_CRC32_H */
diff --git a/src/target/openrisc/or1k_du_adv.c b/src/target/openrisc/or1k_du_adv.c
index e4c89e5b5..e4003a213 100644
--- a/src/target/openrisc/or1k_du_adv.c
+++ b/src/target/openrisc/or1k_du_adv.c
@@ -22,8 +22,9 @@
#include "or1k_du.h"
#include "jsp_server.h"
-#include <target/target.h>
+#include <helper/crc32.h>
#include <jtag/jtag.h>
+#include <target/target.h>
#define JSP_BANNER "\n\r" \
"******************************\n\r" \
@@ -67,13 +68,6 @@
#define DBG_CPU_CR_STALL 0x01
#define DBG_CPU_CR_RESET 0x02
-/* Polynomial for the CRC calculation
- * Yes, it's backwards. Yes, this is on purpose.
- * The hardware is designed this way to save on logic and routing,
- * and it's really all the same to us here.
- */
-#define ADBG_CRC_POLY 0xedb88320
-
/* These are for the internal registers in the Wishbone module
* The first is the length of the index register,
* the indexes of the various registers are defined after that.
@@ -133,20 +127,6 @@ static struct or1k_du or1k_du_adv;
static const char * const chain_name[] = {"WISHBONE", "CPU0", "CPU1", "JSP"};
-static uint32_t adbg_compute_crc(uint32_t crc, uint32_t data_in,
- int length_bits)
-{
- for (int i = 0; i < length_bits; i++) {
- uint32_t d, c;
- d = ((data_in >> i) & 0x1) ? 0xffffffff : 0;
- c = (crc & 0x1) ? 0xffffffff : 0;
- crc = crc >> 1;
- crc = crc ^ ((d ^ c) & ADBG_CRC_POLY);
- }
-
- return crc;
-}
-
static int find_status_bit(void *_buf, int len)
{
int i = 0;
@@ -522,9 +502,8 @@ retry_read_full:
memcpy(data, in_buffer, total_size_bytes);
memcpy(&crc_read, &in_buffer[total_size_bytes], 4);
- uint32_t crc_calc = 0xffffffff;
- for (int i = 0; i < total_size_bytes; i++)
- crc_calc = adbg_compute_crc(crc_calc, data[i], 8);
+ uint32_t crc_calc = crc32_le(CRC32_POLY_LE, 0xffffffff, data,
+ total_size_bytes);
if (crc_calc != crc_read) {
LOG_WARNING("CRC ERROR! Computed 0x%08" PRIx32 ", read CRC 0x%08" PRIx32, crc_calc, crc_read);
@@ -650,9 +629,8 @@ retry_full_write:
field[0].out_value = &value;
field[0].in_value = NULL;
- uint32_t crc_calc = 0xffffffff;
- for (int i = 0; i < (count * size); i++)
- crc_calc = adbg_compute_crc(crc_calc, data[i], 8);
+ uint32_t crc_calc = crc32_le(CRC32_POLY_LE, 0xffffffff, data,
+ count * size);
field[1].num_bits = count * size * 8;
field[1].out_value = data;
-----------------------------------------------------------------------
Summary of changes:
src/helper/Makefile.am | 2 ++
src/helper/crc32.c | 50 +++++++++++++++++++++++++++++++++++++++
src/helper/crc32.h | 37 +++++++++++++++++++++++++++++
src/target/openrisc/or1k_du_adv.c | 34 +++++---------------------
4 files changed, 95 insertions(+), 28 deletions(-)
create mode 100644 src/helper/crc32.c
create mode 100644 src/helper/crc32.h
hooks/post-receive
--
Main OpenOCD repository
|
|
From: openocd-gerrit <ope...@us...> - 2023-01-21 22:57:31
|
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 92dd917f5a2af4470b151adc3492f9b3c68caaa9 (commit)
from cda39f929e65316478f2f41f461b0cbb3338806c (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 92dd917f5a2af4470b151adc3492f9b3c68caaa9
Author: Tomas Vanek <va...@fb...>
Date: Sun Sep 4 14:18:26 2022 +0200
flash/nor/psoc4: drop jtag_poll_mask() from flash write
Polling the target makes no harm during PSoC 4 flash write in the current
OpenOCD code. Don't mask it.
Change-Id: I6625ded0162ee3a96b92188844d0d2d6c30101c2
Signed-off-by: Tomas Vanek <va...@fb...>
Reviewed-on: https://review.openocd.org/c/openocd/+/7162
Tested-by: jenkins
Reviewed-by: Antonio Borneo <bor...@gm...>
diff --git a/src/flash/nor/psoc4.c b/src/flash/nor/psoc4.c
index c935bd5f2..fb462c1e5 100644
--- a/src/flash/nor/psoc4.c
+++ b/src/flash/nor/psoc4.c
@@ -651,9 +651,6 @@ static int psoc4_write(struct flash_bank *bank, const uint8_t *buffer,
if (row_offset)
memset(row_buffer, bank->default_padded_value, row_offset);
- /* Mask automatic polling triggered by execution of halted events */
- bool save_poll_mask = jtag_poll_mask();
-
while (count) {
uint32_t chunk_size = psoc4_info->row_size - row_offset;
if (chunk_size > count) {
@@ -693,8 +690,6 @@ static int psoc4_write(struct flash_bank *bank, const uint8_t *buffer,
}
cleanup:
- jtag_poll_unmask(save_poll_mask);
-
free(sysrq_buffer);
return retval;
}
-----------------------------------------------------------------------
Summary of changes:
src/flash/nor/psoc4.c | 5 -----
1 file changed, 5 deletions(-)
hooks/post-receive
--
Main OpenOCD repository
|
|
From: openocd-gerrit <ope...@us...> - 2023-01-15 15:12:20
|
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 cda39f929e65316478f2f41f461b0cbb3338806c (commit)
via 7a890a8f256f28b1c8b0dde3b62ab81c7c139d55 (commit)
from 69571354f4741f791a4a70c68ca082f765f98c88 (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 cda39f929e65316478f2f41f461b0cbb3338806c
Author: Antonio Borneo <bor...@gm...>
Date: Sun Jan 1 19:17:18 2023 +0100
jtag: hla: use generic helper for commands 'jtag newtap' 'swd newdap'
The commands 'jtag newtap' and 'swd newdap' have to work either on
HLA transport and on standard JTAG/SWD. Having a dedicated
implementation for HLA is a non-sense.
Reuse the generic code jim_jtag_newtap() and drop the files
hla_tcl.[ch] as they are now empty.
Change-Id: I9dabbdc2a6f338f23b2fd3ed1a4dc3da0200c080
Signed-off-by: Antonio Borneo <bor...@gm...>
Reviewed-on: https://review.openocd.org/c/openocd/+/7428
Tested-by: jenkins
diff --git a/src/jtag/hla/Makefile.am b/src/jtag/hla/Makefile.am
index 41117868a..ea6e11dd6 100644
--- a/src/jtag/hla/Makefile.am
+++ b/src/jtag/hla/Makefile.am
@@ -4,10 +4,8 @@ noinst_LTLIBRARIES += %D%/libocdhla.la
%C%_libocdhla_la_SOURCES = \
%D%/hla_transport.c \
- %D%/hla_tcl.c \
%D%/hla_interface.c \
%D%/hla_layout.c \
%D%/hla_transport.h \
%D%/hla_interface.h \
- %D%/hla_layout.h \
- %D%/hla_tcl.h
+ %D%/hla_layout.h
diff --git a/src/jtag/hla/hla_interface.c b/src/jtag/hla/hla_interface.c
index 6198b3db4..f4bfeb1a1 100644
--- a/src/jtag/hla/hla_interface.c
+++ b/src/jtag/hla/hla_interface.c
@@ -17,7 +17,6 @@
#include <transport/transport.h>
#include <helper/time_support.h>
-#include <jtag/hla/hla_tcl.h>
#include <jtag/hla/hla_layout.h>
#include <jtag/hla/hla_transport.h>
#include <jtag/hla/hla_interface.h>
diff --git a/src/jtag/hla/hla_layout.c b/src/jtag/hla/hla_layout.c
index a760f0b3c..51671d60a 100644
--- a/src/jtag/hla/hla_layout.c
+++ b/src/jtag/hla/hla_layout.c
@@ -18,7 +18,6 @@
#include <helper/time_support.h>
#include <jtag/hla/hla_layout.h>
-#include <jtag/hla/hla_tcl.h>
#include <jtag/hla/hla_transport.h>
#include <jtag/hla/hla_interface.h>
diff --git a/src/jtag/hla/hla_tcl.c b/src/jtag/hla/hla_tcl.c
deleted file mode 100644
index 328339955..000000000
--- a/src/jtag/hla/hla_tcl.c
+++ /dev/null
@@ -1,143 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-/***************************************************************************
- * Copyright (C) 2011 by Mathias Kuester *
- * Mathias Kuester <ke...@fr...> *
- * *
- * Copyright (C) 2012 by Spencer Oliver *
- * sp...@sp... *
- ***************************************************************************/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-/* project specific includes */
-#include <jtag/interface.h>
-#include <transport/transport.h>
-#include <helper/time_support.h>
-
-static int jim_newtap_expected_id(struct jim_nvp *n, struct jim_getopt_info *goi,
- struct jtag_tap *tap)
-{
- jim_wide w;
- int e = jim_getopt_wide(goi, &w);
- if (e != JIM_OK) {
- Jim_SetResultFormatted(goi->interp, "option: %s bad parameter",
- n->name);
- return e;
- }
-
- uint32_t *p = realloc(tap->expected_ids,
- (tap->expected_ids_cnt + 1) * sizeof(uint32_t));
- if (!p) {
- Jim_SetResultFormatted(goi->interp, "no memory");
- return JIM_ERR;
- }
-
- tap->expected_ids = p;
- tap->expected_ids[tap->expected_ids_cnt++] = w;
-
- return JIM_OK;
-}
-
-#define NTAP_OPT_IRLEN 0
-#define NTAP_OPT_IRMASK 1
-#define NTAP_OPT_IRCAPTURE 2
-#define NTAP_OPT_ENABLED 3
-#define NTAP_OPT_DISABLED 4
-#define NTAP_OPT_EXPECTED_ID 5
-#define NTAP_OPT_VERSION 6
-#define NTAP_OPT_BYPASS 7
-
-static int jim_hl_newtap_cmd(struct jim_getopt_info *goi)
-{
- struct jtag_tap *tap;
- int x;
- int e;
- struct jim_nvp *n;
- char *cp;
- const struct jim_nvp opts[] = {
- { .name = "-irlen", .value = NTAP_OPT_IRLEN },
- { .name = "-irmask", .value = NTAP_OPT_IRMASK },
- { .name = "-ircapture", .value = NTAP_OPT_IRCAPTURE },
- { .name = "-enable", .value = NTAP_OPT_ENABLED },
- { .name = "-disable", .value = NTAP_OPT_DISABLED },
- { .name = "-expected-id", .value = NTAP_OPT_EXPECTED_ID },
- { .name = "-ignore-version", .value = NTAP_OPT_VERSION },
- { .name = "-ignore-bypass", .value = NTAP_OPT_BYPASS },
- { .name = NULL, .value = -1},
- };
-
- tap = calloc(1, sizeof(struct jtag_tap));
- if (!tap) {
- Jim_SetResultFormatted(goi->interp, "no memory");
- return JIM_ERR;
- }
-
- /*
- * we expect CHIP + TAP + OPTIONS
- * */
- if (goi->argc < 3) {
- Jim_SetResultFormatted(goi->interp,
- "Missing CHIP TAP OPTIONS ....");
- free(tap);
- return JIM_ERR;
- }
-
- const char *tmp;
- jim_getopt_string(goi, &tmp, NULL);
- tap->chip = strdup(tmp);
-
- jim_getopt_string(goi, &tmp, NULL);
- tap->tapname = strdup(tmp);
-
- /* name + dot + name + null */
- x = strlen(tap->chip) + 1 + strlen(tap->tapname) + 1;
- cp = malloc(x);
- sprintf(cp, "%s.%s", tap->chip, tap->tapname);
- tap->dotted_name = cp;
-
- LOG_DEBUG("Creating New Tap, Chip: %s, Tap: %s, Dotted: %s, %d params",
- tap->chip, tap->tapname, tap->dotted_name, goi->argc);
-
- while (goi->argc) {
- e = jim_getopt_nvp(goi, opts, &n);
- if (e != JIM_OK) {
- jim_getopt_nvp_unknown(goi, opts, 0);
- free(cp);
- free(tap);
- return e;
- }
- LOG_DEBUG("Processing option: %s", n->name);
- switch (n->value) {
- case NTAP_OPT_EXPECTED_ID:
- e = jim_newtap_expected_id(n, goi, tap);
- if (e != JIM_OK) {
- free(cp);
- free(tap);
- return e;
- }
- break;
- case NTAP_OPT_IRLEN:
- case NTAP_OPT_IRMASK:
- case NTAP_OPT_IRCAPTURE:
- /* dummy read to ignore the next argument */
- jim_getopt_wide(goi, NULL);
- break;
- } /* switch (n->value) */
- } /* while (goi->argc) */
-
- /* default is enabled-after-reset */
- tap->enabled = !tap->disabled_after_reset;
-
- jtag_tap_init(tap);
- return JIM_OK;
-}
-
-int jim_hl_newtap(Jim_Interp *interp, int argc, Jim_Obj * const *argv)
-{
- struct jim_getopt_info goi;
- jim_getopt_setup(&goi, interp, argc - 1, argv + 1);
- return jim_hl_newtap_cmd(&goi);
-}
diff --git a/src/jtag/hla/hla_tcl.h b/src/jtag/hla/hla_tcl.h
deleted file mode 100644
index b028e4b50..000000000
--- a/src/jtag/hla/hla_tcl.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-
-/***************************************************************************
- * Copyright (C) 2011 by Mathias Kuester *
- * Mathias Kuester <ke...@fr...> *
- * *
- * Copyright (C) 2012 by Spencer Oliver *
- * sp...@sp... *
- ***************************************************************************/
-
-#ifndef OPENOCD_JTAG_HLA_HLA_TCL_H
-#define OPENOCD_JTAG_HLA_HLA_TCL_H
-
-/** */
-int jim_hl_newtap(Jim_Interp *interp, int argc, Jim_Obj * const *argv);
-
-#endif /* OPENOCD_JTAG_HLA_HLA_TCL_H */
diff --git a/src/jtag/hla/hla_transport.c b/src/jtag/hla/hla_transport.c
index 91228bed2..004e9f0c5 100644
--- a/src/jtag/hla/hla_transport.c
+++ b/src/jtag/hla/hla_transport.c
@@ -18,7 +18,6 @@
#include <transport/transport.h>
#include <helper/time_support.h>
#include <target/target.h>
-#include <jtag/hla/hla_tcl.h>
#include <jtag/hla/hla_transport.h>
#include <jtag/hla/hla_interface.h>
@@ -38,7 +37,7 @@ static const struct command_registration hl_swd_transport_subcommand_handlers[]
{
.name = "newdap",
.mode = COMMAND_CONFIG,
- .jim_handler = jim_hl_newtap,
+ .jim_handler = jim_jtag_newtap,
.help = "declare a new SWD DAP",
},
COMMAND_REGISTRATION_DONE
@@ -59,7 +58,7 @@ static const struct command_registration hl_transport_jtag_subcommand_handlers[]
{
.name = "newtap",
.mode = COMMAND_CONFIG,
- .jim_handler = jim_hl_newtap,
+ .jim_handler = jim_jtag_newtap,
.help = "Create a new TAP instance named basename.tap_type, "
"and appends it to the scan chain.",
.usage = "basename tap_type '-irlen' count "
commit 7a890a8f256f28b1c8b0dde3b62ab81c7c139d55
Author: Antonio Borneo <bor...@gm...>
Date: Sun Jan 1 18:26:53 2023 +0100
jtag: parse command options in 'swd newdap'
The same code is currently used for commands 'jtag newtap' and
'swd newdap' (plus dapdirect versions), but for SWD case the code
skips the parsing of the command line as not every flag is used.
This has the drawback that syntax errors get unchecked.
Move the check about the transport so the command line get always
parsed even when the corresponding flags are not useful.
Change-Id: I596c3beb04e9e8a9ebe6ee68a61395b679d43b3e
Signed-off-by: Antonio Borneo <bor...@gm...>
Reviewed-on: https://review.openocd.org/c/openocd/+/7427
Tested-by: jenkins
Reviewed-by: Tomas Vanek <va...@fb...>
diff --git a/src/jtag/tcl.c b/src/jtag/tcl.c
index b1815b79d..fc0d562e2 100644
--- a/src/jtag/tcl.c
+++ b/src/jtag/tcl.c
@@ -557,13 +557,6 @@ static int jim_newtap_cmd(struct jim_getopt_info *goi)
LOG_DEBUG("Creating New Tap, Chip: %s, Tap: %s, Dotted: %s, %d params",
tap->chip, tap->tapname, tap->dotted_name, goi->argc);
- if (!transport_is_jtag()) {
- /* SWD doesn't require any JTAG tap parameters */
- tap->enabled = true;
- jtag_tap_init(tap);
- return JIM_OK;
- }
-
/* IEEE specifies that the two LSBs of an IR scan are 01, so make
* that the default. The "-ircapture" and "-irmask" options are only
* needed to cope with nonstandard TAPs, or to specify more bits.
@@ -618,7 +611,7 @@ static int jim_newtap_cmd(struct jim_getopt_info *goi)
tap->enabled = !tap->disabled_after_reset;
/* Did all the required option bits get cleared? */
- if (tap->ir_length != 0) {
+ if (!transport_is_jtag() || tap->ir_length != 0) {
jtag_tap_init(tap);
return JIM_OK;
}
-----------------------------------------------------------------------
Summary of changes:
src/jtag/hla/Makefile.am | 4 +-
src/jtag/hla/hla_interface.c | 1 -
src/jtag/hla/hla_layout.c | 1 -
src/jtag/hla/hla_tcl.c | 143 -------------------------------------------
src/jtag/hla/hla_tcl.h | 17 -----
src/jtag/hla/hla_transport.c | 5 +-
src/jtag/tcl.c | 9 +--
7 files changed, 4 insertions(+), 176 deletions(-)
delete mode 100644 src/jtag/hla/hla_tcl.c
delete mode 100644 src/jtag/hla/hla_tcl.h
hooks/post-receive
--
Main OpenOCD repository
|
|
From: openocd-gerrit <ope...@us...> - 2023-01-15 15:11:54
|
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 69571354f4741f791a4a70c68ca082f765f98c88 (commit)
from dbb42ca18d471b6bffddbd441b1da2ffe18d7400 (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 69571354f4741f791a4a70c68ca082f765f98c88
Author: Marian Buschsieweke <mar...@ov...>
Date: Wed Dec 21 11:00:53 2022 +0100
.gitignore: Add .cache and compile_commands.json
Enhancing the editor / IDE experience with the use of the language
server protocol (lsp) is getting more and more common. The most widely
used lsp implementation for C/C++ outside of Redmond is clangd.
Clangd uses compile_commands.json, that contains the compiler invocation
for each compilation unit, to get the required $CFLAGS to successfully
located header files etc. This is best automatically generated from with
bear on Makefile based build systems. Hence, there is little value in
adding it to the git repo.
In addition, clangd generates cache files in the .cache folder. Again,
there is no reason in tracking it with git.
Change-Id: Ic5165d10aca3a1cc9e9398af9dd2fbf0977608b3
Signed-off-by: Marian Buschsieweke <mar...@ov...>
Reviewed-on: https://review.openocd.org/c/openocd/+/7414
Tested-by: jenkins
Reviewed-by: Antonio Borneo <bor...@gm...>
diff --git a/.gitignore b/.gitignore
index 818bb0cd3..103dad2c7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -103,3 +103,11 @@ GTAGS
# checkpatch script files
.checkpatch-camelcase.*
+
+# clangd (e.g. for advanced code completion and linting) generates cache files
+# into .cache
+.cache
+
+# A compile_commands.json can be generated using bear and will help tools such
+# as clangd to locate header files and use correct $CFLAGS
+compile_commands.json
-----------------------------------------------------------------------
Summary of changes:
.gitignore | 8 ++++++++
1 file changed, 8 insertions(+)
hooks/post-receive
--
Main OpenOCD repository
|
|
From: openocd-gerrit <ope...@us...> - 2023-01-15 15:11:32
|
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 dbb42ca18d471b6bffddbd441b1da2ffe18d7400 (commit)
from a3ed12401b1f7d9578fb7da881d3504e07acfc27 (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 dbb42ca18d471b6bffddbd441b1da2ffe18d7400
Author: Marc Schink <de...@za...>
Date: Wed Dec 7 13:13:04 2022 +0100
flash/nor/stm32l4x: Add revision 'X' and 'C' for STM32U575/585 devices
Change-Id: I4d950dc0a1421036418f2e5c1f0ed8eca86efc1a
Signed-off-by: Marc Schink <de...@za...>
Reviewed-on: https://review.openocd.org/c/openocd/+/7390
Tested-by: jenkins
Reviewed-by: Antonio Borneo <bor...@gm...>
diff --git a/src/flash/nor/stm32l4x.c b/src/flash/nor/stm32l4x.c
index 92d511c17..c67dbf75d 100644
--- a/src/flash/nor/stm32l4x.c
+++ b/src/flash/nor/stm32l4x.c
@@ -327,6 +327,7 @@ static const struct stm32l4_rev stm32g49_g4axx_revs[] = {
static const struct stm32l4_rev stm32u57_u58xx_revs[] = {
{ 0x1000, "A" }, { 0x1001, "Z" }, { 0x1003, "Y" }, { 0x2000, "B" },
+ { 0x2001, "X" }, { 0x3000, "C" },
};
static const struct stm32l4_rev stm32wb1xx_revs[] = {
-----------------------------------------------------------------------
Summary of changes:
src/flash/nor/stm32l4x.c | 1 +
1 file changed, 1 insertion(+)
hooks/post-receive
--
Main OpenOCD repository
|
|
From: openocd-gerrit <ope...@us...> - 2023-01-15 15:11:17
|
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 a3ed12401b1f7d9578fb7da881d3504e07acfc27 (commit)
from 5292c7eae925d59d6b6c0017b6a4995d39a6e9ee (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 a3ed12401b1f7d9578fb7da881d3504e07acfc27
Author: Antonio Borneo <bor...@gm...>
Date: Tue Nov 29 00:34:44 2022 +0100
tcl/target: enable -rtos hwthread
The rtos hwthread has been merged in 2019 with commit 85ba2dc4c6ab
("rtos/hwthread: add hardware-thread pseudo rtos").
During review in patchset 19 the name of the rtos has been changed
from 'hawt' to 'hwthread'.
Some target config file was already merged ready for hwthread, but
keeping the relevant lines commented and still reporting the old
name.
Enable rtos hwtread to the target that were supposed to use it.
Fix the name of the rtos.
Change-Id: I877862dcdba39f26462bb542bac06d1a5f5f222d
Signed-off-by: Antonio Borneo <bor...@gm...>
Reviewed-on: https://review.openocd.org/c/openocd/+/7384
Tested-by: jenkins
diff --git a/tcl/target/hi3798.cfg b/tcl/target/hi3798.cfg
index 4373962e4..722305dcf 100644
--- a/tcl/target/hi3798.cfg
+++ b/tcl/target/hi3798.cfg
@@ -42,8 +42,7 @@ for { set _core 0 } { $_core < $_cores } { incr _core 1 } {
#set _command "$_command -defer-examine"
set _smp_command "$_smp_command ${_TARGETNAME}$_core"
} else {
- # uncomment when "hawt" rtos is merged
- # set _command "$_command -rtos hawt"
+ set _command "$_command -rtos hwthread"
set _smp_command "target smp ${_TARGETNAME}$_core"
}
diff --git a/tcl/target/hi6220.cfg b/tcl/target/hi6220.cfg
index f5f7fc9a4..5b0389925 100644
--- a/tcl/target/hi6220.cfg
+++ b/tcl/target/hi6220.cfg
@@ -49,8 +49,7 @@ for { set _core 0 } { $_core < $_cores } { incr _core 1 } {
set _command "$_command -defer-examine"
set _smp_command "$_smp_command ${_TARGETNAME}$_core"
} else {
- # uncomment when "hawt" rtos is merged
- # set _command "$_command -rtos hawt"
+ set _command "$_command -rtos hwthread"
set _smp_command "target smp ${_TARGETNAME}$_core"
}
diff --git a/tcl/target/marvell/88f37x0.cfg b/tcl/target/marvell/88f37x0.cfg
index d80f4ef6f..738d22110 100644
--- a/tcl/target/marvell/88f37x0.cfg
+++ b/tcl/target/marvell/88f37x0.cfg
@@ -57,8 +57,7 @@ for { set _core 0 } { $_core < $_cores } { incr _core 1 } {
set _command "$_command -defer-examine"
set _smp_command "$_smp_command ${_TARGETNAME}$_core"
} else {
- # uncomment when "hawt" rtos is merged
- # set _command "$_command -rtos hawt"
+ set _command "$_command -rtos hwthread"
set _smp_command "target smp ${_TARGETNAME}$_core"
}
diff --git a/tcl/target/xilinx_zynqmp.cfg b/tcl/target/xilinx_zynqmp.cfg
index 893372978..9734a1837 100644
--- a/tcl/target/xilinx_zynqmp.cfg
+++ b/tcl/target/xilinx_zynqmp.cfg
@@ -86,8 +86,7 @@ for { set _core 0 } { $_core < $_cores } { incr _core } {
set _command "$_command -defer-examine"
set _smp_command "$_smp_command $_TARGETNAME.$_core"
} else {
- # uncomment when "hawt" rtos is merged
- #set _command "$_command -rtos hawt"
+ set _command "$_command -rtos hwthread"
set _smp_command "target smp $_TARGETNAME.$_core"
}
-----------------------------------------------------------------------
Summary of changes:
tcl/target/hi3798.cfg | 3 +--
tcl/target/hi6220.cfg | 3 +--
tcl/target/marvell/88f37x0.cfg | 3 +--
tcl/target/xilinx_zynqmp.cfg | 3 +--
4 files changed, 4 insertions(+), 8 deletions(-)
hooks/post-receive
--
Main OpenOCD repository
|
|
From: openocd-gerrit <ope...@us...> - 2023-01-15 15:10:42
|
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 5292c7eae925d59d6b6c0017b6a4995d39a6e9ee (commit)
from 630cb5ea4d65edba42d1c77fa17d9fe78f7b38c2 (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 5292c7eae925d59d6b6c0017b6a4995d39a6e9ee
Author: Tomas Vanek <va...@fb...>
Date: Thu Nov 24 14:21:59 2022 +0100
jtag/drivers/cmsis_dap: prevent conn/discon workaround before line reset
The line reset SWD sequence is used quite often in SWD multidrop mode.
Prevent the ugly connect/disconnect adapter firmware bug workaround
to be called before each line reset.
Signed-off-by: Tomas Vanek <va...@fb...>
Change-Id: Id85bff075dba9077e4e501e2cdcfd64d5d9d0531
Reviewed-on: https://review.openocd.org/c/openocd/+/7381
Tested-by: jenkins
Reviewed-by: Antonio Borneo <bor...@gm...>
diff --git a/src/jtag/drivers/cmsis_dap.c b/src/jtag/drivers/cmsis_dap.c
index d2c30cc79..0c42a7f1e 100644
--- a/src/jtag/drivers/cmsis_dap.c
+++ b/src/jtag/drivers/cmsis_dap.c
@@ -1158,7 +1158,9 @@ static int cmsis_dap_swd_switch_seq(enum swd_special_seq seq)
unsigned int s_len;
int retval;
- if ((output_pins & (SWJ_PIN_SRST | SWJ_PIN_TRST)) == (SWJ_PIN_SRST | SWJ_PIN_TRST)) {
+ if (seq != LINE_RESET &&
+ (output_pins & (SWJ_PIN_SRST | SWJ_PIN_TRST))
+ == (SWJ_PIN_SRST | SWJ_PIN_TRST)) {
/* Following workaround deasserts reset on most adapters.
* Do not reconnect if a reset line is active!
* Reconnecting would break connecting under reset. */
-----------------------------------------------------------------------
Summary of changes:
src/jtag/drivers/cmsis_dap.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
hooks/post-receive
--
Main OpenOCD repository
|
|
From: openocd-gerrit <ope...@us...> - 2023-01-15 15:10:28
|
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 630cb5ea4d65edba42d1c77fa17d9fe78f7b38c2 (commit)
from 40bac8e8c4e556faaf9c8adc1a030dbc52080fdb (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 630cb5ea4d65edba42d1c77fa17d9fe78f7b38c2
Author: Tomas Vanek <va...@fb...>
Date: Tue Nov 22 12:29:52 2022 +0100
jtag/drivers/cmsis_dap: speed up long transfers using DAP_TransferBlock
DAP_TransferBlock command saves n - 3 bytes in comparison to DAP_Transfer,
where n is number of transfers.
Use DAP_TransferBlock optionaly to save some USB bandwidth.
The change increases the speed of the write transfer
from 40 KiB/s to 42 KiB/s @ USB FS, adapter speed 1000.
Signed-off-by: Tomas Vanek <va...@fb...>
Change-Id: Ifde0159cfd44481d2b81b90daa088e731c03e26d
Reviewed-on: https://review.openocd.org/c/openocd/+/7372
Tested-by: jenkins
Reviewed-by: Antonio Borneo <bor...@gm...>
diff --git a/src/jtag/drivers/cmsis_dap.c b/src/jtag/drivers/cmsis_dap.c
index 10e663862..d2c30cc79 100644
--- a/src/jtag/drivers/cmsis_dap.c
+++ b/src/jtag/drivers/cmsis_dap.c
@@ -160,6 +160,11 @@ static bool swd_mode;
#define CMD_DAP_TFER_BLOCK 0x06
#define CMD_DAP_TFER_ABORT 0x07
+/* DAP_TransferBlock increases the sum of command/response sizes
+ * (due to 16-bit Transfer Count) if used in a small packet.
+ * Prevent using it until we have at least r/w operations. */
+#define CMD_DAP_TFER_BLOCK_MIN_OPS 4
+
/* DAP Status Code */
#define DAP_OK 0
#define DAP_ERROR 0xFF
@@ -756,8 +761,9 @@ static void cmsis_dap_swd_write_from_queue(struct cmsis_dap *dap)
dap->write_count = 0;
dap->read_count = 0;
- LOG_DEBUG_IO("Executing %d queued transactions from FIFO index %u",
- block->transfer_count, dap->pending_fifo_put_idx);
+ LOG_DEBUG_IO("Executing %d queued transactions from FIFO index %u%s",
+ block->transfer_count, dap->pending_fifo_put_idx,
+ cmsis_dap_handle->swd_cmds_differ ? "" : ", same swd ops");
if (queued_retval != ERROR_OK) {
LOG_DEBUG("Skipping due to previous errors: %d", queued_retval);
@@ -767,10 +773,21 @@ static void cmsis_dap_swd_write_from_queue(struct cmsis_dap *dap)
if (block->transfer_count == 0)
goto skip;
- command[0] = CMD_DAP_TFER;
+ bool block_cmd = !cmsis_dap_handle->swd_cmds_differ
+ && block->transfer_count >= CMD_DAP_TFER_BLOCK_MIN_OPS;
+ block->command = block_cmd ? CMD_DAP_TFER_BLOCK : CMD_DAP_TFER;
+
+ command[0] = block->command;
command[1] = 0x00; /* DAP Index */
- command[2] = block->transfer_count;
- size_t idx = 3;
+
+ unsigned int idx;
+ if (block_cmd) {
+ h_u16_to_le(&command[2], block->transfer_count);
+ idx = 4; /* The first transfer will store the common DAP register */
+ } else {
+ command[2] = block->transfer_count;
+ idx = 3;
+ }
for (unsigned int i = 0; i < block->transfer_count; i++) {
struct pending_transfer_result *transfer = &(block->transfers[i]);
@@ -801,7 +818,9 @@ static void cmsis_dap_swd_write_from_queue(struct cmsis_dap *dap)
data &= ~CORUNDETECT;
}
- command[idx++] = (cmd >> 1) & 0x0f;
+ if (!block_cmd || i == 0)
+ command[idx++] = (cmd >> 1) & 0x0f;
+
if (!(cmd & SWD_CMD_RNW)) {
h_u32_to_le(&command[idx], data);
idx += 4;
@@ -846,20 +865,28 @@ static void cmsis_dap_swd_read_process(struct cmsis_dap *dap, int timeout_ms)
}
uint8_t *resp = dap->response;
- if (resp[0] != CMD_DAP_TFER) {
+ if (resp[0] != block->command) {
LOG_ERROR("CMSIS-DAP command mismatch. Expected 0x%x received 0x%" PRIx8,
- CMD_DAP_TFER, resp[0]);
+ block->command, resp[0]);
queued_retval = ERROR_FAIL;
goto skip;
}
- unsigned int transfer_count = resp[1];
- uint8_t ack = resp[2] & 0x07;
- if (resp[2] & 0x08) {
+ unsigned int transfer_count;
+ unsigned int idx;
+ if (block->command == CMD_DAP_TFER_BLOCK) {
+ transfer_count = le_to_h_u16(&resp[1]);
+ idx = 3;
+ } else {
+ transfer_count = resp[1];
+ idx = 2;
+ }
+ if (resp[idx] & 0x08) {
LOG_DEBUG("CMSIS-DAP Protocol Error @ %d (wrong parity)", transfer_count);
queued_retval = ERROR_FAIL;
goto skip;
}
+ uint8_t ack = resp[idx++] & 0x07;
if (ack != SWD_ACK_OK) {
LOG_DEBUG("SWD ack not OK @ %d %s", transfer_count,
ack == SWD_ACK_WAIT ? "WAIT" : ack == SWD_ACK_FAULT ? "FAULT" : "JUNK");
@@ -874,7 +901,7 @@ static void cmsis_dap_swd_read_process(struct cmsis_dap *dap, int timeout_ms)
LOG_DEBUG_IO("Received results of %d queued transactions FIFO index %u timeout %i",
transfer_count, dap->pending_fifo_get_idx, timeout_ms);
- unsigned int idx = 3;
+
for (unsigned int i = 0; i < transfer_count; i++) {
struct pending_transfer_result *transfer = &(block->transfers[i]);
if (transfer->cmd & SWD_CMD_RNW) {
@@ -923,19 +950,30 @@ static int cmsis_dap_swd_run_queue(void)
}
static unsigned int cmsis_dap_tfer_cmd_size(unsigned int write_count,
- unsigned int read_count)
+ unsigned int read_count, bool block_tfer)
{
- unsigned int size = 3; /* header */
- size += write_count * (1 + 4); /* DAP register + data */
- size += read_count; /* DAP register */
+ unsigned int size;
+ if (block_tfer) {
+ size = 5; /* DAP_TransferBlock header */
+ size += write_count * 4; /* data */
+ } else {
+ size = 3; /* DAP_Transfer header */
+ size += write_count * (1 + 4); /* DAP register + data */
+ size += read_count; /* DAP register */
+ }
return size;
}
static unsigned int cmsis_dap_tfer_resp_size(unsigned int write_count,
- unsigned int read_count)
+ unsigned int read_count, bool block_tfer)
{
- unsigned int size = 3; /* header */
- size += read_count * 4; /* data */
+ unsigned int size;
+ if (block_tfer)
+ size = 4; /* DAP_TransferBlock response header */
+ else
+ size = 3; /* DAP_Transfer response header */
+
+ size += read_count * 4; /* data */
return size;
}
@@ -947,13 +985,22 @@ static void cmsis_dap_swd_queue_cmd(uint8_t cmd, uint32_t *dst, uint32_t data)
unsigned int write_count = cmsis_dap_handle->write_count;
unsigned int read_count = cmsis_dap_handle->read_count;
+ bool block_cmd;
+ if (write_count + read_count < CMD_DAP_TFER_BLOCK_MIN_OPS)
+ block_cmd = false;
+ else
+ block_cmd = !cmsis_dap_handle->swd_cmds_differ
+ && cmd == cmsis_dap_handle->common_swd_cmd;
+
if (cmd & SWD_CMD_RNW)
read_count++;
else
write_count++;
- unsigned int cmd_size = cmsis_dap_tfer_cmd_size(write_count, read_count);
- unsigned int resp_size = cmsis_dap_tfer_resp_size(write_count, read_count);
+ unsigned int cmd_size = cmsis_dap_tfer_cmd_size(write_count, read_count,
+ block_cmd);
+ unsigned int resp_size = cmsis_dap_tfer_resp_size(write_count, read_count,
+ block_cmd);
/* Does the DAP Transfer command and the expected response fit into one packet?
* Run the queue also before a targetsel - it cannot be queued */
@@ -984,6 +1031,13 @@ static void cmsis_dap_swd_queue_cmd(uint8_t cmd, uint32_t *dst, uint32_t data)
struct pending_transfer_result *transfer = &(block->transfers[block->transfer_count]);
transfer->data = data;
transfer->cmd = cmd;
+ if (block->transfer_count == 0) {
+ cmsis_dap_handle->swd_cmds_differ = false;
+ cmsis_dap_handle->common_swd_cmd = cmd;
+ } else if (cmd != cmsis_dap_handle->common_swd_cmd) {
+ cmsis_dap_handle->swd_cmds_differ = true;
+ }
+
if (cmd & SWD_CMD_RNW) {
/* Queue a read transaction */
transfer->buffer = dst;
diff --git a/src/jtag/drivers/cmsis_dap.h b/src/jtag/drivers/cmsis_dap.h
index 1c30975da..16885a51d 100644
--- a/src/jtag/drivers/cmsis_dap.h
+++ b/src/jtag/drivers/cmsis_dap.h
@@ -21,6 +21,7 @@ struct pending_transfer_result {
struct pending_request_block {
struct pending_transfer_result *transfers;
unsigned int transfer_count;
+ uint8_t command;
};
struct cmsis_dap {
@@ -33,11 +34,17 @@ struct cmsis_dap {
uint8_t *command;
uint8_t *response;
- /* DAP register r/w operation counters used for checking the packet size
+ /* DP/AP register r/w operation counters used for checking the packet size
* that would result from the queue run */
unsigned int write_count;
unsigned int read_count;
+ /* We can use DAP_TransferBlock only if all SWD operations in the packet
+ * are either all writes or all reads and use the same DP/AP register.
+ * The following variables keep track of it */
+ uint8_t common_swd_cmd;
+ bool swd_cmds_differ;
+
/* Pending requests are organized as a FIFO - circular buffer */
struct pending_request_block pending_fifo[MAX_PENDING_REQUESTS];
unsigned int packet_count;
-----------------------------------------------------------------------
Summary of changes:
src/jtag/drivers/cmsis_dap.c | 96 ++++++++++++++++++++++++++++++++++----------
src/jtag/drivers/cmsis_dap.h | 9 ++++-
2 files changed, 83 insertions(+), 22 deletions(-)
hooks/post-receive
--
Main OpenOCD repository
|
|
From: openocd-gerrit <ope...@us...> - 2023-01-15 15:09:37
|
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 40bac8e8c4e556faaf9c8adc1a030dbc52080fdb (commit)
from 3d3d35c9b87243a14b37478f1120c4c8d0a6d0bb (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 40bac8e8c4e556faaf9c8adc1a030dbc52080fdb
Author: Tomas Vanek <va...@fb...>
Date: Sat Nov 19 07:21:10 2022 +0100
jtag/drivers/cmsis_dap: improve USB packets filling
DAP write transaction occupies 5 bytes of a command packet.
DAP read transaction needs just one byte in a command packet
and expect 4 bytes in a response.
The fixed maximal number of transactions in a packet caused
packet filling less than optimal.
Compute both command and expected response sizes based on
read or write direction of each transaction.
Run the queue if one of sizes does not fit into a packet.
The change increases the speed of the mostly read transfer
from 36 KiB/s to almost 40 KiB/s @ USB FS, adapter speed 1000
due to reduction of adapter inserted RDBUFF reads.
Signed-off-by: Tomas Vanek <va...@fb...>
Change-Id: Ib70812600eaae0403b8ee8673b6f897348496569
Reviewed-on: https://review.openocd.org/c/openocd/+/7364
Tested-by: jenkins
Reviewed-by: Antonio Borneo <bor...@gm...>
diff --git a/src/jtag/drivers/cmsis_dap.c b/src/jtag/drivers/cmsis_dap.c
index 364a17746..10e663862 100644
--- a/src/jtag/drivers/cmsis_dap.c
+++ b/src/jtag/drivers/cmsis_dap.c
@@ -222,6 +222,8 @@ struct pending_scan_result {
/* Each block in FIFO can contain up to pending_queue_len transfers */
static unsigned int pending_queue_len;
+static unsigned int tfer_max_command_size;
+static unsigned int tfer_max_response_size;
/* pointers to buffers that will receive jtag scan results on the next flush */
#define MAX_PENDING_SCAN_RESULTS 256
@@ -742,11 +744,18 @@ static int cmsis_dap_cmd_dap_swo_data(
return ERROR_OK;
}
+
static void cmsis_dap_swd_write_from_queue(struct cmsis_dap *dap)
{
uint8_t *command = dap->command;
struct pending_request_block *block = &dap->pending_fifo[dap->pending_fifo_put_idx];
+ assert(dap->write_count + dap->read_count == block->transfer_count);
+
+ /* Reset packet size check counters for the next packet */
+ dap->write_count = 0;
+ dap->read_count = 0;
+
LOG_DEBUG_IO("Executing %d queued transactions from FIFO index %u",
block->transfer_count, dap->pending_fifo_put_idx);
@@ -913,11 +922,43 @@ static int cmsis_dap_swd_run_queue(void)
return retval;
}
+static unsigned int cmsis_dap_tfer_cmd_size(unsigned int write_count,
+ unsigned int read_count)
+{
+ unsigned int size = 3; /* header */
+ size += write_count * (1 + 4); /* DAP register + data */
+ size += read_count; /* DAP register */
+ return size;
+}
+
+static unsigned int cmsis_dap_tfer_resp_size(unsigned int write_count,
+ unsigned int read_count)
+{
+ unsigned int size = 3; /* header */
+ size += read_count * 4; /* data */
+ return size;
+}
+
static void cmsis_dap_swd_queue_cmd(uint8_t cmd, uint32_t *dst, uint32_t data)
{
+ /* Compute sizes of the DAP Transfer command and the expected response
+ * for all queued and this operation */
bool targetsel_cmd = swd_cmd(false, false, DP_TARGETSEL) == cmd;
- if (cmsis_dap_handle->pending_fifo[cmsis_dap_handle->pending_fifo_put_idx].transfer_count == pending_queue_len
+ unsigned int write_count = cmsis_dap_handle->write_count;
+ unsigned int read_count = cmsis_dap_handle->read_count;
+ if (cmd & SWD_CMD_RNW)
+ read_count++;
+ else
+ write_count++;
+
+ unsigned int cmd_size = cmsis_dap_tfer_cmd_size(write_count, read_count);
+ unsigned int resp_size = cmsis_dap_tfer_resp_size(write_count, read_count);
+
+ /* Does the DAP Transfer command and the expected response fit into one packet?
+ * Run the queue also before a targetsel - it cannot be queued */
+ if (cmd_size > tfer_max_command_size
+ || resp_size > tfer_max_response_size
|| targetsel_cmd) {
if (cmsis_dap_handle->pending_fifo_block_count)
cmsis_dap_swd_read_process(cmsis_dap_handle, 0);
@@ -929,6 +970,8 @@ static void cmsis_dap_swd_queue_cmd(uint8_t cmd, uint32_t *dst, uint32_t data)
cmsis_dap_swd_read_process(cmsis_dap_handle, LIBUSB_TIMEOUT_MS);
}
+ assert(cmsis_dap_handle->pending_fifo[cmsis_dap_handle->pending_fifo_put_idx].transfer_count < pending_queue_len);
+
if (queued_retval != ERROR_OK)
return;
@@ -944,6 +987,9 @@ static void cmsis_dap_swd_queue_cmd(uint8_t cmd, uint32_t *dst, uint32_t data)
if (cmd & SWD_CMD_RNW) {
/* Queue a read transaction */
transfer->buffer = dst;
+ cmsis_dap_handle->read_count++;
+ } else {
+ cmsis_dap_handle->write_count++;
}
block->transfer_count++;
}
@@ -1183,7 +1229,6 @@ static int cmsis_dap_init(void)
/* Be conservative and suppress submitting multiple HID requests
* until we get packet count info from the adaptor */
cmsis_dap_handle->packet_count = 1;
- pending_queue_len = 12;
/* INFO_ID_PKT_SZ - short */
retval = cmsis_dap_cmd_dap_info(INFO_ID_PKT_SZ, &data);
@@ -1193,12 +1238,6 @@ static int cmsis_dap_init(void)
if (data[0] == 2) { /* short */
uint16_t pkt_sz = data[1] + (data[2] << 8);
if (pkt_sz != cmsis_dap_handle->packet_size) {
-
- /* 4 bytes of command header + 5 bytes per register
- * write. For bulk read sequences just 4 bytes are
- * needed per transfer, so this is suboptimal. */
- pending_queue_len = (pkt_sz - 4) / 5;
-
free(cmsis_dap_handle->packet_buffer);
retval = cmsis_dap_handle->backend->packet_buffer_alloc(cmsis_dap_handle, pkt_sz);
if (retval != ERROR_OK)
@@ -1208,6 +1247,16 @@ static int cmsis_dap_init(void)
}
}
+ /* Maximal number of transfers which fit to one packet:
+ * Limited by response size: 3 bytes of response header + 4 per read
+ * Plus writes to full command size: 3 bytes cmd header + 1 per read + 5 per write */
+ tfer_max_command_size = cmsis_dap_handle->packet_usable_size;
+ tfer_max_response_size = cmsis_dap_handle->packet_usable_size;
+ unsigned int max_reads = tfer_max_response_size / 4;
+ pending_queue_len = max_reads + (tfer_max_command_size - max_reads) / 5;
+ cmsis_dap_handle->write_count = 0;
+ cmsis_dap_handle->read_count = 0;
+
/* INFO_ID_PKT_CNT - byte */
retval = cmsis_dap_cmd_dap_info(INFO_ID_PKT_CNT, &data);
if (retval != ERROR_OK)
diff --git a/src/jtag/drivers/cmsis_dap.h b/src/jtag/drivers/cmsis_dap.h
index 72e07fb04..1c30975da 100644
--- a/src/jtag/drivers/cmsis_dap.h
+++ b/src/jtag/drivers/cmsis_dap.h
@@ -33,6 +33,11 @@ struct cmsis_dap {
uint8_t *command;
uint8_t *response;
+ /* DAP register r/w operation counters used for checking the packet size
+ * that would result from the queue run */
+ unsigned int write_count;
+ unsigned int read_count;
+
/* Pending requests are organized as a FIFO - circular buffer */
struct pending_request_block pending_fifo[MAX_PENDING_REQUESTS];
unsigned int packet_count;
-----------------------------------------------------------------------
Summary of changes:
src/jtag/drivers/cmsis_dap.c | 65 ++++++++++++++++++++++++++++++++++++++------
src/jtag/drivers/cmsis_dap.h | 5 ++++
2 files changed, 62 insertions(+), 8 deletions(-)
hooks/post-receive
--
Main OpenOCD repository
|
|
From: openocd-gerrit <ope...@us...> - 2023-01-15 15:09:18
|
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 3d3d35c9b87243a14b37478f1120c4c8d0a6d0bb (commit)
from 600d0165cc041a36d3707168aeb113d7a2e6747f (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 3d3d35c9b87243a14b37478f1120c4c8d0a6d0bb
Author: Tomas Vanek <va...@fb...>
Date: Sat Nov 19 07:16:30 2022 +0100
jtag/drivers/cmsis_dap: introduce packet_usable_size
USB bulk backend needs to avoid zero sized USB packets
sent after each full sized packed for performance reasons.
HID backend uses fixed size HID reports so the full size
of the report can be utilized.
Introduce packet_usable_size to reflect it.
Signed-off-by: Tomas Vanek <va...@fb...>
Change-Id: I34094c9edac5730624480711cbd6aa65883c47c7
Reviewed-on: https://review.openocd.org/c/openocd/+/7363
Tested-by: jenkins
Reviewed-by: Antonio Borneo <bor...@gm...>
diff --git a/src/jtag/drivers/cmsis_dap.c b/src/jtag/drivers/cmsis_dap.c
index 5e01d0647..364a17746 100644
--- a/src/jtag/drivers/cmsis_dap.c
+++ b/src/jtag/drivers/cmsis_dap.c
@@ -229,7 +229,7 @@ static int pending_scan_result_count;
static struct pending_scan_result pending_scan_results[MAX_PENDING_SCAN_RESULTS];
/* queued JTAG sequences that will be executed on the next flush */
-#define QUEUED_SEQ_BUF_LEN (cmsis_dap_handle->packet_size - 3)
+#define QUEUED_SEQ_BUF_LEN (cmsis_dap_handle->packet_usable_size - 3)
static int queued_seq_count;
static int queued_seq_buf_end;
static int queued_seq_tdo_ptr;
diff --git a/src/jtag/drivers/cmsis_dap.h b/src/jtag/drivers/cmsis_dap.h
index 80044199b..72e07fb04 100644
--- a/src/jtag/drivers/cmsis_dap.h
+++ b/src/jtag/drivers/cmsis_dap.h
@@ -27,6 +27,7 @@ struct cmsis_dap {
struct cmsis_dap_backend_data *bdata;
const struct cmsis_dap_backend *backend;
unsigned int packet_size;
+ unsigned int packet_usable_size;
unsigned int packet_buffer_size;
uint8_t *packet_buffer;
uint8_t *command;
diff --git a/src/jtag/drivers/cmsis_dap_usb_bulk.c b/src/jtag/drivers/cmsis_dap_usb_bulk.c
index 55b9a558a..6599c414c 100644
--- a/src/jtag/drivers/cmsis_dap_usb_bulk.c
+++ b/src/jtag/drivers/cmsis_dap_usb_bulk.c
@@ -352,25 +352,17 @@ static int cmsis_dap_usb_open(struct cmsis_dap *dap, uint16_t vids[], uint16_t p
return ERROR_FAIL;
}
- dap->packet_size = packet_size;
- dap->packet_buffer_size = packet_size;
dap->bdata->usb_ctx = ctx;
dap->bdata->dev_handle = dev_handle;
dap->bdata->ep_out = ep_out;
dap->bdata->ep_in = ep_in;
dap->bdata->interface = interface_num;
- dap->packet_buffer = malloc(dap->packet_buffer_size);
- if (!dap->packet_buffer) {
- LOG_ERROR("unable to allocate memory");
+ err = cmsis_dap_usb_alloc(dap, packet_size);
+ if (err != ERROR_OK)
cmsis_dap_usb_close(dap);
- return ERROR_FAIL;
- }
-
- dap->command = dap->packet_buffer;
- dap->response = dap->packet_buffer;
- return ERROR_OK;
+ return err;
}
libusb_close(dev_handle);
@@ -445,6 +437,8 @@ static int cmsis_dap_usb_alloc(struct cmsis_dap *dap, unsigned int pkt_sz)
dap->packet_buffer = buf;
dap->packet_size = pkt_sz;
dap->packet_buffer_size = pkt_sz;
+ /* Prevent sending zero size USB packets */
+ dap->packet_usable_size = pkt_sz - 1;
dap->command = dap->packet_buffer;
dap->response = dap->packet_buffer;
diff --git a/src/jtag/drivers/cmsis_dap_usb_hid.c b/src/jtag/drivers/cmsis_dap_usb_hid.c
index 592eb0925..52dfd7616 100644
--- a/src/jtag/drivers/cmsis_dap_usb_hid.c
+++ b/src/jtag/drivers/cmsis_dap_usb_hid.c
@@ -213,6 +213,7 @@ static int cmsis_dap_hid_alloc(struct cmsis_dap *dap, unsigned int pkt_sz)
dap->packet_buffer = buf;
dap->packet_size = pkt_sz;
+ dap->packet_usable_size = pkt_sz;
dap->packet_buffer_size = packet_buffer_size;
dap->command = dap->packet_buffer + REPORT_ID_SIZE;
-----------------------------------------------------------------------
Summary of changes:
src/jtag/drivers/cmsis_dap.c | 2 +-
src/jtag/drivers/cmsis_dap.h | 1 +
src/jtag/drivers/cmsis_dap_usb_bulk.c | 16 +++++-----------
src/jtag/drivers/cmsis_dap_usb_hid.c | 1 +
4 files changed, 8 insertions(+), 12 deletions(-)
hooks/post-receive
--
Main OpenOCD repository
|
|
From: openocd-gerrit <ope...@us...> - 2023-01-15 15:08:47
|
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 600d0165cc041a36d3707168aeb113d7a2e6747f (commit)
from a9b48a6f481344c592e7e05ca06564cdadfe0721 (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 600d0165cc041a36d3707168aeb113d7a2e6747f
Author: Tomas Vanek <va...@fb...>
Date: Sat Nov 19 07:08:32 2022 +0100
jtag/drivers/cmsis_dap: use unsigned types
Not all variables converted, JTAG part is left as is.
Signed-off-by: Tomas Vanek <va...@fb...>
Change-Id: Ie9cc890769a2f53cb3a07fd457030e1b98910d44
Reviewed-on: https://review.openocd.org/c/openocd/+/7362
Tested-by: jenkins
Reviewed-by: Antonio Borneo <bor...@gm...>
diff --git a/src/jtag/drivers/cmsis_dap.c b/src/jtag/drivers/cmsis_dap.c
index 49181ad90..5e01d0647 100644
--- a/src/jtag/drivers/cmsis_dap.c
+++ b/src/jtag/drivers/cmsis_dap.c
@@ -211,17 +211,17 @@ static const char * const info_caps_str[INFO_CAPS__NUM_CAPS] = {
struct pending_scan_result {
/** Offset in bytes in the CMD_DAP_JTAG_SEQ response buffer. */
- unsigned first;
+ unsigned int first;
/** Number of bits to read. */
- unsigned length;
+ unsigned int length;
/** Location to store the result */
uint8_t *buffer;
/** Offset in the destination buffer */
- unsigned buffer_offset;
+ unsigned int buffer_offset;
};
/* Each block in FIFO can contain up to pending_queue_len transfers */
-static int pending_queue_len;
+static unsigned int pending_queue_len;
/* pointers to buffers that will receive jtag scan results on the next flush */
#define MAX_PENDING_SCAN_RESULTS 256
@@ -292,7 +292,7 @@ static void cmsis_dap_close(struct cmsis_dap *dap)
free(dap->packet_buffer);
- for (int i = 0; i < MAX_PENDING_REQUESTS; i++) {
+ for (unsigned int i = 0; i < MAX_PENDING_REQUESTS; i++) {
free(dap->pending_fifo[i].transfers);
dap->pending_fifo[i].transfers = NULL;
}
@@ -403,7 +403,7 @@ static int cmsis_dap_cmd_dap_swj_sequence(uint8_t s_len, const uint8_t *sequence
#ifdef CMSIS_DAP_JTAG_DEBUG
LOG_DEBUG("cmsis-dap TMS sequence: len=%d", s_len);
- for (int i = 0; i < DIV_ROUND_UP(s_len, 8); ++i)
+ for (unsigned int i = 0; i < DIV_ROUND_UP(s_len, 8); ++i)
printf("%02X ", sequence[i]);
printf("\n");
@@ -763,7 +763,7 @@ static void cmsis_dap_swd_write_from_queue(struct cmsis_dap *dap)
command[2] = block->transfer_count;
size_t idx = 3;
- for (int i = 0; i < block->transfer_count; i++) {
+ for (unsigned int i = 0; i < block->transfer_count; i++) {
struct pending_transfer_result *transfer = &(block->transfers[i]);
uint8_t cmd = transfer->cmd;
uint32_t data = transfer->data;
@@ -844,7 +844,7 @@ static void cmsis_dap_swd_read_process(struct cmsis_dap *dap, int timeout_ms)
goto skip;
}
- uint8_t transfer_count = resp[1];
+ unsigned int transfer_count = resp[1];
uint8_t ack = resp[2] & 0x07;
if (resp[2] & 0x08) {
LOG_DEBUG("CMSIS-DAP Protocol Error @ %d (wrong parity)", transfer_count);
@@ -865,8 +865,8 @@ static void cmsis_dap_swd_read_process(struct cmsis_dap *dap, int timeout_ms)
LOG_DEBUG_IO("Received results of %d queued transactions FIFO index %u timeout %i",
transfer_count, dap->pending_fifo_get_idx, timeout_ms);
- size_t idx = 3;
- for (int i = 0; i < transfer_count; i++) {
+ unsigned int idx = 3;
+ for (unsigned int i = 0; i < transfer_count; i++) {
struct pending_transfer_result *transfer = &(block->transfers[i]);
if (transfer->cmd & SWD_CMD_RNW) {
static uint32_t last_read;
@@ -1005,7 +1005,7 @@ static int cmsis_dap_get_caps_info(void)
cmsis_dap_handle->caps = caps;
- for (int i = 0; i < INFO_CAPS__NUM_CAPS; ++i) {
+ for (unsigned int i = 0; i < INFO_CAPS__NUM_CAPS; ++i) {
if (caps & BIT(i))
LOG_INFO("CMSIS-DAP: %s", info_caps_str[i]);
}
@@ -1351,7 +1351,7 @@ static void cmsis_dap_end_state(tap_state_t state)
}
#ifdef SPRINT_BINARY
-static void sprint_binary(char *s, const uint8_t *buf, int offset, int len)
+static void sprint_binary(char *s, const uint8_t *buf, unsigned int offset, unsigned int len)
{
if (!len)
return;
@@ -1362,7 +1362,7 @@ static void sprint_binary(char *s, const uint8_t *buf, int offset, int len)
buf = { 0xc0 0x18 } offset=3 len=10 should result in: 11000 11000
i=3 there means i/8 = 0 so c = 0xFF, and
*/
- for (int i = offset; i < offset + len; ++i) {
+ for (unsigned int i = offset; i < offset + len; ++i) {
uint8_t c = buf[i / 8], mask = 1 << (i % 8);
if ((i != offset) && !(i % 8))
putchar(' ');
@@ -1476,10 +1476,11 @@ static void cmsis_dap_flush(void)
* sequence=NULL means clock out zeros on TDI
* tdo_buffer=NULL means don't capture TDO
*/
-static void cmsis_dap_add_jtag_sequence(int s_len, const uint8_t *sequence, int s_offset,
- bool tms, uint8_t *tdo_buffer, int tdo_buffer_offset)
+static void cmsis_dap_add_jtag_sequence(unsigned int s_len, const uint8_t *sequence,
+ unsigned int s_offset, bool tms,
+ uint8_t *tdo_buffer, unsigned int tdo_buffer_offset)
{
- LOG_DEBUG_IO("[at %d] %d bits, tms %s, seq offset %d, tdo buf %p, tdo offset %d",
+ LOG_DEBUG_IO("[at %d] %u bits, tms %s, seq offset %u, tdo buf %p, tdo offset %u",
queued_seq_buf_end,
s_len, tms ? "HIGH" : "LOW", s_offset, tdo_buffer, tdo_buffer_offset);
@@ -1488,11 +1489,11 @@ static void cmsis_dap_add_jtag_sequence(int s_len, const uint8_t *sequence, int
if (s_len > 64) {
LOG_DEBUG_IO("START JTAG SEQ SPLIT");
- for (int offset = 0; offset < s_len; offset += 64) {
- int len = s_len - offset;
+ for (unsigned int offset = 0; offset < s_len; offset += 64) {
+ unsigned int len = s_len - offset;
if (len > 64)
len = 64;
- LOG_DEBUG_IO("Splitting long jtag sequence: %d-bit chunk starting at offset %d", len, offset);
+ LOG_DEBUG_IO("Splitting long jtag sequence: %u-bit chunk starting at offset %u", len, offset);
cmsis_dap_add_jtag_sequence(
len,
sequence,
@@ -1506,7 +1507,7 @@ static void cmsis_dap_add_jtag_sequence(int s_len, const uint8_t *sequence, int
return;
}
- int cmd_len = 1 + DIV_ROUND_UP(s_len, 8);
+ unsigned int cmd_len = 1 + DIV_ROUND_UP(s_len, 8);
if (queued_seq_count >= 255 || queued_seq_buf_end + cmd_len > QUEUED_SEQ_BUF_LEN)
/* empty out the buffer */
cmsis_dap_flush();
diff --git a/src/jtag/drivers/cmsis_dap.h b/src/jtag/drivers/cmsis_dap.h
index 7eaa1f216..80044199b 100644
--- a/src/jtag/drivers/cmsis_dap.h
+++ b/src/jtag/drivers/cmsis_dap.h
@@ -20,15 +20,15 @@ struct pending_transfer_result {
struct pending_request_block {
struct pending_transfer_result *transfers;
- int transfer_count;
+ unsigned int transfer_count;
};
struct cmsis_dap {
struct cmsis_dap_backend_data *bdata;
const struct cmsis_dap_backend *backend;
- uint16_t packet_size;
+ unsigned int packet_size;
+ unsigned int packet_buffer_size;
uint8_t *packet_buffer;
- uint16_t packet_buffer_size;
uint8_t *command;
uint8_t *response;
-----------------------------------------------------------------------
Summary of changes:
src/jtag/drivers/cmsis_dap.c | 41 +++++++++++++++++++++--------------------
src/jtag/drivers/cmsis_dap.h | 6 +++---
2 files changed, 24 insertions(+), 23 deletions(-)
hooks/post-receive
--
Main OpenOCD repository
|
|
From: openocd-gerrit <ope...@us...> - 2023-01-15 15:08:08
|
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 a9b48a6f481344c592e7e05ca06564cdadfe0721 (commit)
via 128736d23f0e92a245d51c10e889ed3e6da4c2b1 (commit)
from 9dac3b247b43d8b91821560b7c99fbd33d736419 (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 a9b48a6f481344c592e7e05ca06564cdadfe0721
Author: Tomas Vanek <va...@fb...>
Date: Sat Nov 19 07:08:32 2022 +0100
jtag/drivers/cmsis_dap: use dap parameter instead of cmsis_dap_handle
Replace the direct dereference of cmsis_dap_handle by dereference
of the dap function parameter wherever possible.
Signed-off-by: Tomas Vanek <va...@fb...>
Change-Id: I32601dbe0270267642720a8524706aa76d187c3b
Reviewed-on: https://review.openocd.org/c/openocd/+/7361
Tested-by: jenkins
Reviewed-by: Antonio Borneo <bor...@gm...>
diff --git a/src/jtag/drivers/cmsis_dap.c b/src/jtag/drivers/cmsis_dap.c
index c2f01f33d..49181ad90 100644
--- a/src/jtag/drivers/cmsis_dap.c
+++ b/src/jtag/drivers/cmsis_dap.c
@@ -290,14 +290,15 @@ static void cmsis_dap_close(struct cmsis_dap *dap)
dap->backend = NULL;
}
- free(cmsis_dap_handle->packet_buffer);
- free(cmsis_dap_handle);
- cmsis_dap_handle = NULL;
+ free(dap->packet_buffer);
for (int i = 0; i < MAX_PENDING_REQUESTS; i++) {
free(dap->pending_fifo[i].transfers);
dap->pending_fifo[i].transfers = NULL;
}
+
+ free(cmsis_dap_handle);
+ cmsis_dap_handle = NULL;
}
static void cmsis_dap_flush_read(struct cmsis_dap *dap)
@@ -328,7 +329,7 @@ static int cmsis_dap_xfer(struct cmsis_dap *dap, int txlen)
dap->pending_fifo_get_idx = 0;
}
- uint8_t current_cmd = cmsis_dap_handle->command[0];
+ uint8_t current_cmd = dap->command[0];
int retval = dap->backend->write(dap, txlen, LIBUSB_TIMEOUT_MS);
if (retval < 0)
return retval;
@@ -338,7 +339,7 @@ static int cmsis_dap_xfer(struct cmsis_dap *dap, int txlen)
if (retval < 0)
return retval;
- uint8_t *resp = cmsis_dap_handle->response;
+ uint8_t *resp = dap->response;
if (resp[0] == DAP_ERROR) {
LOG_ERROR("CMSIS-DAP command 0x%" PRIx8 " not implemented", current_cmd);
return ERROR_NOT_IMPLEMENTED;
@@ -743,7 +744,7 @@ static int cmsis_dap_cmd_dap_swo_data(
static void cmsis_dap_swd_write_from_queue(struct cmsis_dap *dap)
{
- uint8_t *command = cmsis_dap_handle->command;
+ uint8_t *command = dap->command;
struct pending_request_block *block = &dap->pending_fifo[dap->pending_fifo_put_idx];
LOG_DEBUG_IO("Executing %d queued transactions from FIFO index %u",
commit 128736d23f0e92a245d51c10e889ed3e6da4c2b1
Author: Tomas Vanek <va...@fb...>
Date: Sat Nov 19 06:57:56 2022 +0100
jtag/drivers/cmsis_dap: move pending request FIFO
Move all pending request FIFO related variables to
the struct cmsis_dap
Pure refactoring, no functional changes.
Signed-off-by: Tomas Vanek <va...@fb...>
Change-Id: I2cea9c1e265ac102ec0f314767b8b9afdcda9ee9
Reviewed-on: https://review.openocd.org/c/openocd/+/7360
Tested-by: jenkins
Reviewed-by: Antonio Borneo <bor...@gm...>
diff --git a/src/jtag/drivers/cmsis_dap.c b/src/jtag/drivers/cmsis_dap.c
index 44a7dd8cb..c2f01f33d 100644
--- a/src/jtag/drivers/cmsis_dap.c
+++ b/src/jtag/drivers/cmsis_dap.c
@@ -209,17 +209,6 @@ static const char * const info_caps_str[INFO_CAPS__NUM_CAPS] = {
"UART via USB COM port supported",
};
-struct pending_transfer_result {
- uint8_t cmd;
- uint32_t data;
- void *buffer;
-};
-
-struct pending_request_block {
- struct pending_transfer_result *transfers;
- int transfer_count;
-};
-
struct pending_scan_result {
/** Offset in bytes in the CMD_DAP_JTAG_SEQ response buffer. */
unsigned first;
@@ -231,16 +220,8 @@ struct pending_scan_result {
unsigned buffer_offset;
};
-/* Up to MIN(packet_count, MAX_PENDING_REQUESTS) requests may be issued
- * until the first response arrives */
-#define MAX_PENDING_REQUESTS 3
-
-/* Pending requests are organized as a FIFO - circular buffer */
/* Each block in FIFO can contain up to pending_queue_len transfers */
static int pending_queue_len;
-static struct pending_request_block pending_fifo[MAX_PENDING_REQUESTS];
-static int pending_fifo_put_idx, pending_fifo_get_idx;
-static int pending_fifo_block_count;
/* pointers to buffers that will receive jtag scan results on the next flush */
#define MAX_PENDING_SCAN_RESULTS 256
@@ -314,8 +295,8 @@ static void cmsis_dap_close(struct cmsis_dap *dap)
cmsis_dap_handle = NULL;
for (int i = 0; i < MAX_PENDING_REQUESTS; i++) {
- free(pending_fifo[i].transfers);
- pending_fifo[i].transfers = NULL;
+ free(dap->pending_fifo[i].transfers);
+ dap->pending_fifo[i].transfers = NULL;
}
}
@@ -337,14 +318,14 @@ static void cmsis_dap_flush_read(struct cmsis_dap *dap)
/* Send a message and receive the reply */
static int cmsis_dap_xfer(struct cmsis_dap *dap, int txlen)
{
- if (pending_fifo_block_count) {
- LOG_ERROR("pending %d blocks, flushing", pending_fifo_block_count);
- while (pending_fifo_block_count) {
+ if (dap->pending_fifo_block_count) {
+ LOG_ERROR("pending %u blocks, flushing", dap->pending_fifo_block_count);
+ while (dap->pending_fifo_block_count) {
dap->backend->read(dap, 10);
- pending_fifo_block_count--;
+ dap->pending_fifo_block_count--;
}
- pending_fifo_put_idx = 0;
- pending_fifo_get_idx = 0;
+ dap->pending_fifo_put_idx = 0;
+ dap->pending_fifo_get_idx = 0;
}
uint8_t current_cmd = cmsis_dap_handle->command[0];
@@ -763,9 +744,10 @@ static int cmsis_dap_cmd_dap_swo_data(
static void cmsis_dap_swd_write_from_queue(struct cmsis_dap *dap)
{
uint8_t *command = cmsis_dap_handle->command;
- struct pending_request_block *block = &pending_fifo[pending_fifo_put_idx];
+ struct pending_request_block *block = &dap->pending_fifo[dap->pending_fifo_put_idx];
- LOG_DEBUG_IO("Executing %d queued transactions from FIFO index %d", block->transfer_count, pending_fifo_put_idx);
+ LOG_DEBUG_IO("Executing %d queued transactions from FIFO index %u",
+ block->transfer_count, dap->pending_fifo_put_idx);
if (queued_retval != ERROR_OK) {
LOG_DEBUG("Skipping due to previous errors: %d", queued_retval);
@@ -824,10 +806,10 @@ static void cmsis_dap_swd_write_from_queue(struct cmsis_dap *dap)
queued_retval = ERROR_OK;
}
- pending_fifo_put_idx = (pending_fifo_put_idx + 1) % dap->packet_count;
- pending_fifo_block_count++;
- if (pending_fifo_block_count > dap->packet_count)
- LOG_ERROR("too much pending writes %d", pending_fifo_block_count);
+ dap->pending_fifo_put_idx = (dap->pending_fifo_put_idx + 1) % dap->packet_count;
+ dap->pending_fifo_block_count++;
+ if (dap->pending_fifo_block_count > dap->packet_count)
+ LOG_ERROR("too much pending writes %u", dap->pending_fifo_block_count);
return;
@@ -837,9 +819,9 @@ skip:
static void cmsis_dap_swd_read_process(struct cmsis_dap *dap, int timeout_ms)
{
- struct pending_request_block *block = &pending_fifo[pending_fifo_get_idx];
+ struct pending_request_block *block = &dap->pending_fifo[dap->pending_fifo_get_idx];
- if (pending_fifo_block_count == 0)
+ if (dap->pending_fifo_block_count == 0)
LOG_ERROR("no pending write");
/* get reply */
@@ -880,8 +862,8 @@ static void cmsis_dap_swd_read_process(struct cmsis_dap *dap, int timeout_ms)
LOG_ERROR("CMSIS-DAP transfer count mismatch: expected %d, got %d",
block->transfer_count, transfer_count);
- LOG_DEBUG_IO("Received results of %d queued transactions FIFO index %d",
- transfer_count, pending_fifo_get_idx);
+ LOG_DEBUG_IO("Received results of %d queued transactions FIFO index %u timeout %i",
+ transfer_count, dap->pending_fifo_get_idx, timeout_ms);
size_t idx = 3;
for (int i = 0; i < transfer_count; i++) {
struct pending_transfer_result *transfer = &(block->transfers[i]);
@@ -907,22 +889,22 @@ static void cmsis_dap_swd_read_process(struct cmsis_dap *dap, int timeout_ms)
skip:
block->transfer_count = 0;
- pending_fifo_get_idx = (pending_fifo_get_idx + 1) % dap->packet_count;
- pending_fifo_block_count--;
+ dap->pending_fifo_get_idx = (dap->pending_fifo_get_idx + 1) % dap->packet_count;
+ dap->pending_fifo_block_count--;
}
static int cmsis_dap_swd_run_queue(void)
{
- if (pending_fifo_block_count)
+ if (cmsis_dap_handle->pending_fifo_block_count)
cmsis_dap_swd_read_process(cmsis_dap_handle, 0);
cmsis_dap_swd_write_from_queue(cmsis_dap_handle);
- while (pending_fifo_block_count)
+ while (cmsis_dap_handle->pending_fifo_block_count)
cmsis_dap_swd_read_process(cmsis_dap_handle, LIBUSB_TIMEOUT_MS);
- pending_fifo_put_idx = 0;
- pending_fifo_get_idx = 0;
+ cmsis_dap_handle->pending_fifo_put_idx = 0;
+ cmsis_dap_handle->pending_fifo_get_idx = 0;
int retval = queued_retval;
queued_retval = ERROR_OK;
@@ -934,15 +916,15 @@ static void cmsis_dap_swd_queue_cmd(uint8_t cmd, uint32_t *dst, uint32_t data)
{
bool targetsel_cmd = swd_cmd(false, false, DP_TARGETSEL) == cmd;
- if (pending_fifo[pending_fifo_put_idx].transfer_count == pending_queue_len
- || targetsel_cmd) {
- if (pending_fifo_block_count)
+ if (cmsis_dap_handle->pending_fifo[cmsis_dap_handle->pending_fifo_put_idx].transfer_count == pending_queue_len
+ || targetsel_cmd) {
+ if (cmsis_dap_handle->pending_fifo_block_count)
cmsis_dap_swd_read_process(cmsis_dap_handle, 0);
/* Not enough room in the queue. Run the queue. */
cmsis_dap_swd_write_from_queue(cmsis_dap_handle);
- if (pending_fifo_block_count >= cmsis_dap_handle->packet_count)
+ if (cmsis_dap_handle->pending_fifo_block_count >= cmsis_dap_handle->packet_count)
cmsis_dap_swd_read_process(cmsis_dap_handle, LIBUSB_TIMEOUT_MS);
}
@@ -954,7 +936,7 @@ static void cmsis_dap_swd_queue_cmd(uint8_t cmd, uint32_t *dst, uint32_t data)
return;
}
- struct pending_request_block *block = &pending_fifo[pending_fifo_put_idx];
+ struct pending_request_block *block = &cmsis_dap_handle->pending_fifo[cmsis_dap_handle->pending_fifo_put_idx];
struct pending_transfer_result *transfer = &(block->transfers[block->transfer_count]);
transfer->data = data;
transfer->cmd = cmd;
@@ -1231,17 +1213,18 @@ static int cmsis_dap_init(void)
goto init_err;
if (data[0] == 1) { /* byte */
- int pkt_cnt = data[1];
+ unsigned int pkt_cnt = data[1];
if (pkt_cnt > 1)
cmsis_dap_handle->packet_count = MIN(MAX_PENDING_REQUESTS, pkt_cnt);
- LOG_DEBUG("CMSIS-DAP: Packet Count = %d", pkt_cnt);
+ LOG_DEBUG("CMSIS-DAP: Packet Count = %u", pkt_cnt);
}
- LOG_DEBUG("Allocating FIFO for %d pending packets", cmsis_dap_handle->packet_count);
- for (int i = 0; i < cmsis_dap_handle->packet_count; i++) {
- pending_fifo[i].transfers = malloc(pending_queue_len * sizeof(struct pending_transfer_result));
- if (!pending_fifo[i].transfers) {
+ LOG_DEBUG("Allocating FIFO for %u pending packets", cmsis_dap_handle->packet_count);
+ for (unsigned int i = 0; i < cmsis_dap_handle->packet_count; i++) {
+ cmsis_dap_handle->pending_fifo[i].transfers = malloc(pending_queue_len
+ * sizeof(struct pending_transfer_result));
+ if (!cmsis_dap_handle->pending_fifo[i].transfers) {
LOG_ERROR("Unable to allocate memory for CMSIS-DAP queue");
retval = ERROR_FAIL;
goto init_err;
diff --git a/src/jtag/drivers/cmsis_dap.h b/src/jtag/drivers/cmsis_dap.h
index cf929b069..7eaa1f216 100644
--- a/src/jtag/drivers/cmsis_dap.h
+++ b/src/jtag/drivers/cmsis_dap.h
@@ -7,17 +7,37 @@
struct cmsis_dap_backend;
struct cmsis_dap_backend_data;
-struct command_registration;
+
+struct pending_transfer_result {
+ uint8_t cmd;
+ uint32_t data;
+ void *buffer;
+};
+
+/* Up to MIN(packet_count, MAX_PENDING_REQUESTS) requests may be issued
+ * until the first response arrives */
+#define MAX_PENDING_REQUESTS 4
+
+struct pending_request_block {
+ struct pending_transfer_result *transfers;
+ int transfer_count;
+};
struct cmsis_dap {
struct cmsis_dap_backend_data *bdata;
const struct cmsis_dap_backend *backend;
uint16_t packet_size;
- int packet_count;
uint8_t *packet_buffer;
uint16_t packet_buffer_size;
uint8_t *command;
uint8_t *response;
+
+ /* Pending requests are organized as a FIFO - circular buffer */
+ struct pending_request_block pending_fifo[MAX_PENDING_REQUESTS];
+ unsigned int packet_count;
+ unsigned int pending_fifo_put_idx, pending_fifo_get_idx;
+ unsigned int pending_fifo_block_count;
+
uint16_t caps;
uint8_t mode;
uint32_t swo_buf_sz;
-----------------------------------------------------------------------
Summary of changes:
src/jtag/drivers/cmsis_dap.c | 104 ++++++++++++++++++-------------------------
src/jtag/drivers/cmsis_dap.h | 24 +++++++++-
2 files changed, 66 insertions(+), 62 deletions(-)
hooks/post-receive
--
Main OpenOCD repository
|
|
From: openocd-gerrit <ope...@us...> - 2023-01-15 15:07:22
|
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 9dac3b247b43d8b91821560b7c99fbd33d736419 (commit)
from 6d76a915214f06a4960710ae171434265409a705 (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 9dac3b247b43d8b91821560b7c99fbd33d736419
Author: Antonio Borneo <bor...@gm...>
Date: Sun Nov 13 15:46:19 2022 +0100
tools: add disassembler helper for files .inc
We are moving the binary helpers in files .inc in contrib/loaders/
but we have no support to disassemble them for checking their
content, nor documentation to give any hint.
Add a simple script that uses objdump to directly disassemble a
file .inc
Use Cortex-M settings as default, but provide the flexibility to
reuse the script for any other target CPU.
Change-Id: I12e79580f2936b1622fb7231d9a2484a763ba72a
Signed-off-by: Antonio Borneo <bor...@gm...>
Reviewed-on: https://review.openocd.org/c/openocd/+/7347
Tested-by: jenkins
Reviewed-by: Tomas Vanek <va...@fb...>
diff --git a/tools/disassemble_inc.sh b/tools/disassemble_inc.sh
new file mode 100755
index 000000000..d4b5f80dc
--- /dev/null
+++ b/tools/disassemble_inc.sh
@@ -0,0 +1,50 @@
+#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+# Simple script to disassemble a file .inc generated by
+# src/helper/bin2char.sh
+# Can be useful to check the correctness of the file .inc
+#
+# By default it decodes ARM thumb little-endian, e.g. cortex-m.
+# Set CROSS_COMPILE for other toolchains.
+# Set OBJDUMP_FLAGS for different objdump flags.
+#
+# Usage:
+# contrib/loaders/disassemble_inc.sh file.inc
+
+default_CROSS_COMPILE="arm-none-eabi-"
+default_OBJDUMP_FLAGS="-m arm -EL -M force-thumb"
+
+if [ $# != 1 -o ! -f "$1" ]; then
+ echo "Usage:"
+ echo " $0 path/to/file.inc"
+ echo ""
+ echo "Set CROSS_COMPILE and/or OBJDUMP_FLAGS to override current default:"
+ echo " export CROSS_COMPILE=\"${default_CROSS_COMPILE}\""
+ echo " export OBJDUMP_FLAGS=\"${default_OBJDUMP_FLAGS}\""
+ exit 1
+fi
+
+if [ -z "${CROSS_COMPILE}" ]; then
+ CROSS_COMPILE="${default_CROSS_COMPILE}"
+fi
+
+if [ -z "${OBJDUMP_FLAGS}" ]; then
+ OBJDUMP_FLAGS="${default_OBJDUMP_FLAGS}"
+fi
+
+perl -v > /dev/null 2>&1
+if [ $? != 0 ]; then
+ echo "Error: 'perl' interpreter not available."
+ exit 1
+fi
+
+tmpfile=$(mktemp --suffix=.bin)
+
+echo "Disassemble $1:"
+echo "${CROSS_COMPILE}objdump ${OBJDUMP_FLAGS} -b binary -D ${tmpfile}"
+
+perl -e 'while (<>){while ($_=~/(0x..)/g){print chr(hex($1));}}' $1 > ${tmpfile}
+${CROSS_COMPILE}objdump ${OBJDUMP_FLAGS} -b binary -D ${tmpfile}
+
+rm ${tmpfile}
-----------------------------------------------------------------------
Summary of changes:
tools/disassemble_inc.sh | 50 ++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 50 insertions(+)
create mode 100755 tools/disassemble_inc.sh
hooks/post-receive
--
Main OpenOCD repository
|
|
From: openocd-gerrit <ope...@us...> - 2023-01-15 15:05:40
|
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 6d76a915214f06a4960710ae171434265409a705 (commit)
from e0059dfffae4f8a55c39e25d0e8b2285559db65c (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 6d76a915214f06a4960710ae171434265409a705
Author: Antonio Borneo <bor...@gm...>
Date: Sat Oct 22 17:58:28 2022 +0200
doc: usb_adapters: add other adapters
Mainly get from web or from OpenOCD users
Change-Id: Id4d6354bc9b6972622adfacf3549c7c3e0549bc2
Signed-off-by: Antonio Borneo <bor...@gm...>
Reviewed-on: https://review.openocd.org/c/openocd/+/7298
Tested-by: jenkins
diff --git a/doc/usb_adapters/cmsis_dap/04b4_f155_cypress_kitprog3.txt b/doc/usb_adapters/cmsis_dap/04b4_f155_cypress_kitprog3.txt
new file mode 100644
index 000000000..3109c6912
--- /dev/null
+++ b/doc/usb_adapters/cmsis_dap/04b4_f155_cypress_kitprog3.txt
@@ -0,0 +1,173 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# KitProg3 Firmware 1.01
+# Has inconsistent class code 0 for CMSIS-DAP interface
+
+Bus 002 Device 017: ID 04b4:f155 Cypress Semiconductor Corp.
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 239 Miscellaneous Device
+ bDeviceSubClass 2 ?
+ bDeviceProtocol 1 Interface Association
+ bMaxPacketSize0 8
+ idVendor 0x04b4 Cypress Semiconductor Corp.
+ idProduct 0xf155
+ bcdDevice 1.01
+ iManufacturer 1 Cypress Semiconductor
+ iProduct 6 KitProg3 CMSIS-DAP
+ iSerial 128 102015B003137400
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 130
+ bNumInterfaces 4
+ bConfigurationValue 1
+ iConfiguration 11 KitProg3 CMSIS-DAP
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 400mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 0 (Defined at Interface level)
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 6 KitProg3 CMSIS-DAP
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x01 EP 1 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x82 EP 2 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 1
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 3 Human Interface Device
+ bInterfaceSubClass 0 No Subclass
+ bInterfaceProtocol 0 None
+ iInterface 12 KitProg3 bridge
+ HID Device Descriptor:
+ bLength 9
+ bDescriptorType 33
+ bcdHID 1.11
+ bCountryCode 0 Not supported
+ bNumDescriptors 1
+ bDescriptorType 34 Report
+ wDescriptorLength 43
+ Report Descriptors:
+ ** UNAVAILABLE **
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x86 EP 6 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x07 EP 7 OUT
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+ Interface Association:
+ bLength 8
+ bDescriptorType 11
+ bFirstInterface 2
+ bInterfaceCount 2
+ bFunctionClass 2 Communications
+ bFunctionSubClass 2 Abstract (modem)
+ bFunctionProtocol 0 None
+ iFunction 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 2
+ bAlternateSetting 0
+ bNumEndpoints 1
+ bInterfaceClass 2 Communications
+ bInterfaceSubClass 2 Abstract (modem)
+ bInterfaceProtocol 1 AT-commands (v.25ter)
+ iInterface 15 KitProg3 USBUART
+ CDC Header:
+ bcdCDC 1.10
+ CDC ACM:
+ bmCapabilities 0x02
+ line coding and serial state
+ CDC Union:
+ bMasterInterface 2
+ bSlaveInterface 3
+ CDC Call Management:
+ bmCapabilities 0x00
+ bDataInterface 3
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x83 EP 3 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0008 1x 8 bytes
+ bInterval 2
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 3
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 10 CDC Data
+ bInterfaceSubClass 0 Unused
+ bInterfaceProtocol 0
+ iInterface 4 KitProg3 USBUART
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x84 EP 4 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x05 EP 5 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/cmsis_dap/1a6a_2000_spansion_sk_fm4.txt b/doc/usb_adapters/cmsis_dap/1a6a_2000_spansion_sk_fm4.txt
new file mode 100644
index 000000000..368ec2a2b
--- /dev/null
+++ b/doc/usb_adapters/cmsis_dap/1a6a_2000_spansion_sk_fm4.txt
@@ -0,0 +1,143 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Reported in https://en.opensuse.org/User:A_faerber/SK-FM4-176L-S6E2CC
+
+Bus 002 Device 009: ID 1a6a:2000 Spansion Inc.
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 1.01
+ bDeviceClass 0 (Defined at Interface level)
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ idVendor 0x1a6a Spansion Inc.
+ idProduct 0x2000
+ bcdDevice 1.60
+ iManufacturer 1 Spansion
+ iProduct 2 Spansion CMSIS-DAP + COM Port
+ iSerial 0
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 107
+ bNumInterfaces 3
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x00
+ (Missing must-be-set bit!)
+ (Bus Powered)
+ MaxPower 62mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 3 Human Interface Device
+ bInterfaceSubClass 0 No Subclass
+ bInterfaceProtocol 0 None
+ iInterface 4 Spansion CMSIS-DAP
+ HID Device Descriptor:
+ bLength 9
+ bDescriptorType 33
+ bcdHID 1.11
+ bCountryCode 0 Not supported
+ bNumDescriptors 1
+ bDescriptorType 34 Report
+ wDescriptorLength 29
+ Report Descriptors:
+ ** UNAVAILABLE **
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x02 EP 2 OUT
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+ Interface Association:
+ bLength 8
+ bDescriptorType 11
+ bFirstInterface 1
+ bInterfaceCount 2
+ bFunctionClass 2 Communications
+ bFunctionSubClass 2 Abstract (modem)
+ bFunctionProtocol 1 AT-commands (v.25ter)
+ iFunction 5 Spansion USB Serial Port
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 1
+ bAlternateSetting 0
+ bNumEndpoints 1
+ bInterfaceClass 2 Communications
+ bInterfaceSubClass 2 Abstract (modem)
+ bInterfaceProtocol 1 AT-commands (v.25ter)
+ iInterface 0
+ CDC Header:
+ bcdCDC 10.01
+ CDC ACM:
+ bmCapabilities 0x00
+ CDC Union:
+ bMasterInterface 1
+ bSlaveInterface 2
+ CDC Call Management:
+ bmCapabilities 0x01
+ call management
+ bDataInterface 2
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x83 EP 3 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 255
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 2
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 10 CDC Data
+ bInterfaceSubClass 0 Unused
+ bInterfaceProtocol 0
+ iInterface 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x04 EP 4 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x85 EP 5 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/cmsis_dap/2a86_8011_wch_link.txt b/doc/usb_adapters/cmsis_dap/2a86_8011_wch_link.txt
new file mode 100644
index 000000000..f27d9932f
--- /dev/null
+++ b/doc/usb_adapters/cmsis_dap/2a86_8011_wch_link.txt
@@ -0,0 +1,143 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Reported in https://github.com/pyocd/pyOCD/issues/1395
+
+Bus 003 Device 118: ID 2a86:8011 wch.cn WCH-Link
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 239 Miscellaneous Device
+ bDeviceSubClass 2
+ bDeviceProtocol 1 Interface Association
+ bMaxPacketSize0 8
+ idVendor 0x2a86
+ idProduct 0x8011
+ bcdDevice 1.00
+ iManufacturer 1 wch.cn
+ iProduct 2 WCH-Link
+ iSerial 3 0001A0000001
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x006b
+ bNumInterfaces 3
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 500mA
+ Interface Association:
+ bLength 8
+ bDescriptorType 11
+ bFirstInterface 0
+ bInterfaceCount 2
+ bFunctionClass 2 Communications
+ bFunctionSubClass 2 Abstract (modem)
+ bFunctionProtocol 1 AT-commands (v.25ter)
+ iFunction 4 QYF CMSIS-DAP
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 1
+ bInterfaceClass 2 Communications
+ bInterfaceSubClass 2 Abstract (modem)
+ bInterfaceProtocol 0
+ iInterface 4 QYF CMSIS-DAP
+ CDC Header:
+ bcdCDC 1.10
+ CDC Call Management:
+ bmCapabilities 0x01
+ call management
+ bDataInterface 1
+ CDC ACM:
+ bmCapabilities 0x02
+ line coding and serial state
+ CDC Union:
+ bMasterInterface 0
+ bSlaveInterface 1
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x84 EP 4 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 2
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 1
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 10 CDC Data
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 5 (error)
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x03 EP 3 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x83 EP 3 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 2
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 3 Human Interface Device
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 6 QYF CMSIS-DAP
+ HID Device Descriptor:
+ bLength 9
+ bDescriptorType 33
+ bcdHID 1.00
+ bCountryCode 0 Not supported
+ bNumDescriptors 1
+ bDescriptorType 34 Report
+ wDescriptorLength 33
+ Report Descriptors:
+ ** UNAVAILABLE **
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x01 EP 1 OUT
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/cmsis_dap/c251_2723_keil_ulink_me.txt b/doc/usb_adapters/cmsis_dap/c251_2723_keil_ulink_me.txt
new file mode 100644
index 000000000..df2b9243e
--- /dev/null
+++ b/doc/usb_adapters/cmsis_dap/c251_2723_keil_ulink_me.txt
@@ -0,0 +1,72 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Reported in https://stackoverflow.com/questions/27087281/jtag-adapter-ulink-me-and-openocd-on-archlinux
+
+Bus 005 Device 026: ID c251:2723 Keil Software, Inc.
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 0 (Defined at Interface level)
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ idVendor 0xc251 Keil Software, Inc.
+ idProduct 0x2723
+ bcdDevice 1.00
+ iManufacturer 1 Keil Software
+ iProduct 2 Keil ULINK-ME CMSIS-DAP
+ iSerial 3 M0489MAE
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 41
+ bNumInterfaces 1
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 100mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 3 Human Interface Device
+ bInterfaceSubClass 0 No Subclass
+ bInterfaceProtocol 0 None
+ iInterface 4 CMSIS-DAP
+ HID Device Descriptor:
+ bLength 9
+ bDescriptorType 33
+ bcdHID 1.00
+ bCountryCode 0 Not supported
+ bNumDescriptors 1
+ bDescriptorType 34 Report
+ wDescriptorLength 33
+ Report Descriptors:
+ ** UNAVAILABLE **
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x01 EP 1 OUT
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/cmsis_dap/c251_2750_keil_ulinkplus.txt b/doc/usb_adapters/cmsis_dap/c251_2750_keil_ulinkplus.txt
new file mode 100644
index 000000000..4504ef0eb
--- /dev/null
+++ b/doc/usb_adapters/cmsis_dap/c251_2750_keil_ulinkplus.txt
@@ -0,0 +1,161 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# firmware 2.0.11
+
+Bus 001 Device 005: ID c251:2750 Keil Software, Inc.
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 0 (Defined at Interface level)
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ idVendor 0xc251 Keil Software, Inc.
+ idProduct 0x2750
+ bcdDevice 1.00
+ iManufacturer 1 KEIL - Tools By ARM
+ iProduct 2 Keil ULINKplus
+ iSerial 3 L78440715A
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 101
+ bNumInterfaces 4
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 500mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 3
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 4 ULINKplus CMSIS-DAP
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x01 EP 1 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x85 EP 5 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 1
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 5 ULINKplus Digital I/O
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x02 EP 2 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x82 EP 2 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 2
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 6 ULINKplus Analog I/O
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x03 EP 3 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x83 EP 3 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 3
+ bAlternateSetting 0
+ bNumEndpoints 1
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 7 ULINKplus Power Probe
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x84 EP 4 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+Device Qualifier (for other device speed):
+ bLength 10
+ bDescriptorType 6
+ bcdUSB 2.00
+ bDeviceClass 0 (Defined at Interface level)
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ bNumConfigurations 1
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/cmsis_dap/c251_f001_jixin.pro.txt b/doc/usb_adapters/cmsis_dap/c251_f001_jixin.pro.txt
new file mode 100644
index 000000000..c08f679a6
--- /dev/null
+++ b/doc/usb_adapters/cmsis_dap/c251_f001_jixin.pro.txt
@@ -0,0 +1,143 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Reported in https://sourceforge.net/p/openocd/tickets/368/
+
+Bus 001 Device 008: ID c251:f001 Keil Software, Inc.
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 239 Miscellaneous Device
+ bDeviceSubClass 2 ?
+ bDeviceProtocol 1 Interface Association
+ bMaxPacketSize0 64
+ idVendor 0xc251 Keil Software, Inc.
+ idProduct 0xf001
+ bcdDevice 1.00
+ iManufacturer 1 jixin.pro
+ iProduct 2 CMSIS-DAP_LU
+ iSerial 3 LU_2022_8888
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 107
+ bNumInterfaces 3
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 100mA
+ Interface Association:
+ bLength 8
+ bDescriptorType 11
+ bFirstInterface 0
+ bInterfaceCount 2
+ bFunctionClass 2 Communications
+ bFunctionSubClass 2 Abstract (modem)
+ bFunctionProtocol 1 AT-commands (v.25ter)
+ iFunction 4 CMSIS-DAP CDC
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 1
+ bInterfaceClass 2 Communications
+ bInterfaceSubClass 2 Abstract (modem)
+ bInterfaceProtocol 0 None
+ iInterface 4 CMSIS-DAP CDC
+ CDC Header:
+ bcdCDC 1.10
+ CDC Call Management:
+ bmCapabilities 0x01
+ call management
+ bDataInterface 1
+ CDC ACM:
+ bmCapabilities 0x02
+ line coding and serial state
+ CDC Union:
+ bMasterInterface 0
+ bSlaveInterface 1
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 2
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 1
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 10 CDC Data
+ bInterfaceSubClass 0 Unused
+ bInterfaceProtocol 0
+ iInterface 5 CMSIS-DAP DCI
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x02 EP 2 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x82 EP 2 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 2
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 3 Human Interface Device
+ bInterfaceSubClass 0 No Subclass
+ bInterfaceProtocol 0 None
+ iInterface 6 CMSIS-DAP_LU
+ HID Device Descriptor:
+ bLength 9
+ bDescriptorType 33
+ bcdHID 1.00
+ bCountryCode 0 Not supported
+ bNumDescriptors 1
+ bDescriptorType 34 Report
+ wDescriptorLength 33
+ Report Descriptors:
+ ** UNAVAILABLE **
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x83 EP 3 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x03 EP 3 OUT
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/ftdi/0403_6014_digilent_hs2.txt b/doc/usb_adapters/ftdi/0403_6014_digilent_hs2.txt
new file mode 100644
index 000000000..68fc119e1
--- /dev/null
+++ b/doc/usb_adapters/ftdi/0403_6014_digilent_hs2.txt
@@ -0,0 +1,71 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Reported in https://sourceforge.net/p/openocd/tickets/357/
+
+Bus 001 Device 084: ID 0403:6014 Future Technology Devices International, Ltd FT232H Single HS USB-UART/FIFO IC
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ idVendor 0x0403 Future Technology Devices International, Ltd
+ idProduct 0x6014 FT232H Single HS USB-UART/FIFO IC
+ bcdDevice 9.00
+ iManufacturer 1 Digilent
+ iProduct 2 Digilent USB Device
+ iSerial 3 210249AFCD0B
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x0020
+ bNumInterfaces 1
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 500mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 255 Vendor Specific Subclass
+ bInterfaceProtocol 255 Vendor Specific Protocol
+ iInterface 2 Digilent USB Device
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x02 EP 2 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+Device Qualifier (for other device speed):
+ bLength 10
+ bDescriptorType 6
+ bcdUSB 2.00
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ bNumConfigurations 1
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/ftdi/9e88_9e8f_sheevaplug_jtagkey.txt b/doc/usb_adapters/ftdi/9e88_9e8f_sheevaplug_jtagkey.txt
new file mode 100644
index 000000000..c61044335
--- /dev/null
+++ b/doc/usb_adapters/ftdi/9e88_9e8f_sheevaplug_jtagkey.txt
@@ -0,0 +1,92 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Reported in https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=837989
+
+Bus 003 Device 002: ID 9e88:9e8f
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 0 (Defined at Interface level)
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 8
+ idVendor 0x9e88
+ idProduct 0x9e8f
+ bcdDevice 5.00
+ iManufacturer 1 FTDI
+ iProduct 2 SheevaPlug JTAGKey FT2232D B
+ iSerial 3 FTU85Z4Y
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 55
+ bNumInterfaces 2
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0xc0
+ Self Powered
+ MaxPower 0mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 255 Vendor Specific Subclass
+ bInterfaceProtocol 255 Vendor Specific Protocol
+ iInterface 2 SheevaPlug JTAGKey FT2232D B
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x02 EP 2 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 1
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 255 Vendor Specific Subclass
+ bInterfaceProtocol 255 Vendor Specific Protocol
+ iInterface 2 SheevaPlug JTAGKey FT2232D B
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x83 EP 3 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x04 EP 4 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/jlink/1366_0101_segger_jlink.txt b/doc/usb_adapters/jlink/1366_0101_segger_jlink.txt
new file mode 100644
index 000000000..8fa4e7d29
--- /dev/null
+++ b/doc/usb_adapters/jlink/1366_0101_segger_jlink.txt
@@ -0,0 +1,62 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Reported in https://forums.gentoo.org/viewtopic-t-781442-start-0.html
+
+Bus 002 Device 002: ID 1366:0101
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 1.10
+ bDeviceClass 0 (Defined at Interface level)
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 8
+ idVendor 0x1366
+ idProduct 0x0101
+ bcdDevice 0.01
+ iManufacturer 1 SEGGER
+ iProduct 2 J-Link
+ iSerial 3 123456
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 32
+ bNumInterfaces 1
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0xc0
+ Self Powered
+ MaxPower 100mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 255 Vendor Specific Subclass
+ bInterfaceProtocol 255 Vendor Specific Protocol
+ iInterface 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x02 EP 2 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+Device Status: 0x0001
+ Self Powered
diff --git a/doc/usb_adapters/kitprog/04b4_f139_cypress_kitprog.txt b/doc/usb_adapters/kitprog/04b4_f139_cypress_kitprog.txt
new file mode 100644
index 000000000..e3430d87e
--- /dev/null
+++ b/doc/usb_adapters/kitprog/04b4_f139_cypress_kitprog.txt
@@ -0,0 +1,172 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Reported in http://false.ekta.is/tag/unboxing/
+
+Bus 003 Device 011: ID 04b4:f139 Cypress Semiconductor Corp.
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 239 Miscellaneous Device
+ bDeviceSubClass 2 ?
+ bDeviceProtocol 1 Interface Association
+ bMaxPacketSize0 8
+ idVendor 0x04b4 Cypress Semiconductor Corp.
+ idProduct 0xf139
+ bcdDevice 2.0b
+ iManufacturer 1 Cypress Semiconductor
+ iProduct 2 Cypress KitProg
+ iSerial 128 1C210338012E4400
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 130
+ bNumInterfaces 4
+ bConfigurationValue 1
+ iConfiguration 2 Cypress KitProg
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 400mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 3 Human Interface Device
+ bInterfaceSubClass 0 No Subclass
+ bInterfaceProtocol 0 None
+ iInterface 3 KitBridge
+ HID Device Descriptor:
+ bLength 9
+ bDescriptorType 33
+ bcdHID 1.11
+ bCountryCode 0 Not supported
+ bNumDescriptors 1
+ bDescriptorType 34 Report
+ wDescriptorLength 43
+ Report Descriptors:
+ ** UNAVAILABLE **
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x83 EP 3 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x04 EP 4 OUT
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 1
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 5 KitProg Programmer
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x02 EP 2 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Interface Association:
+ bLength 8
+ bDescriptorType 11
+ bFirstInterface 2
+ bInterfaceCount 2
+ bFunctionClass 2 Communications
+ bFunctionSubClass 0
+ bFunctionProtocol 0
+ iFunction 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 2
+ bAlternateSetting 0
+ bNumEndpoints 1
+ bInterfaceClass 2 Communications
+ bInterfaceSubClass 2 Abstract (modem)
+ bInterfaceProtocol 0 None
+ iInterface 4 KitProg USBUART
+ CDC Header:
+ bcdCDC 1.10
+ CDC ACM:
+ bmCapabilities 0x02
+ line coding and serial state
+ CDC Union:
+ bMasterInterface 2
+ bSlaveInterface 1
+ CDC Call Management:
+ bmCapabilities 0x00
+ bDataInterface 1
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x85 EP 5 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0008 1x 8 bytes
+ bInterval 2
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 3
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 10 CDC Data
+ bInterfaceSubClass 0 Unused
+ bInterfaceProtocol 0
+ iInterface 4 KitProg USBUART
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x86 EP 6 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x07 EP 7 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+Device Status: 0x0000
+ (Bus Powered)
-----------------------------------------------------------------------
Summary of changes:
..._daplink.txt => 04b4_f155_cypress_kitprog3.txt} | 94 +++++++-------
.../1a6a_2000_spansion_sk_fm4.txt} | 61 ++++-----
.../2a86_8011_wch_link.txt} | 135 ++++++++++----------
...keil_ulink2.txt => c251_2723_keil_ulink_me.txt} | 18 +--
.../c251_2750_keil_ulinkplus.txt} | 117 ++++++++----------
.../c251_f001_jixin.pro.txt} | 137 +++++++++++----------
.../0403_6014_digilent_hs2.txt} | 28 ++---
...t2232h.txt => 9e88_9e8f_sheevaplug_jtagkey.txt} | 49 +++-----
.../1366_0101_segger_jlink.txt} | 34 +++--
.../04b4_f139_cypress_kitprog.txt} | 135 ++++++++++----------
10 files changed, 386 insertions(+), 422 deletions(-)
copy doc/usb_adapters/cmsis_dap/{0d28_0204_nxp_daplink.txt => 04b4_f155_cypress_kitprog3.txt} (75%)
copy doc/usb_adapters/{nulink/0416_511d_nuvoton_nulink.txt => cmsis_dap/1a6a_2000_spansion_sk_fm4.txt} (79%)
copy doc/usb_adapters/{nulink/0416_511d_nuvoton_nulink.txt => cmsis_dap/2a86_8011_wch_link.txt} (78%)
copy doc/usb_adapters/cmsis_dap/{c251_2722_keil_ulink2.txt => c251_2723_keil_ulink_me.txt} (82%)
copy doc/usb_adapters/{stlink/0483_374e_stlinkv3.txt => cmsis_dap/c251_2750_keil_ulinkplus.txt} (67%)
copy doc/usb_adapters/{nulink/0416_511d_nuvoton_nulink.txt => cmsis_dap/c251_f001_jixin.pro.txt} (76%)
copy doc/usb_adapters/{stlink/0483_374d_stlinkv3.txt => ftdi/0403_6014_digilent_hs2.txt} (73%)
copy doc/usb_adapters/ftdi/{0403_6010_ft2232h.txt => 9e88_9e8f_sheevaplug_jtagkey.txt} (68%)
copy doc/usb_adapters/{ftdi/09fb_6001_altera_blaster.txt => jlink/1366_0101_segger_jlink.txt} (72%)
copy doc/usb_adapters/{cmsis_dap/0d28_0204_nxp_daplink.txt => kitprog/04b4_f139_cypress_kitprog.txt} (74%)
hooks/post-receive
--
Main OpenOCD repository
|
|
From: openocd-gerrit <ope...@us...> - 2023-01-15 15:05:26
|
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 e0059dfffae4f8a55c39e25d0e8b2285559db65c (commit)
via 2c191ef1da1f7f4dd38606c9936948a958aece20 (commit)
from 9ffda10298eff870bde12dec580f98de6f497257 (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 e0059dfffae4f8a55c39e25d0e8b2285559db65c
Author: Antonio Borneo <bor...@gm...>
Date: Sat Oct 22 18:16:59 2022 +0200
doc: usb_adapters: add lsusb dump of few adapters
Real dumps from adapters I have access to.
Serial numbers have been manually edited but are still consistent.
Change-Id: Iee2d16e09615746e29588f91fdfb77eb9fad4daa
Signed-off-by: Antonio Borneo <bor...@gm...>
Reviewed-on: https://review.openocd.org/c/openocd/+/7297
Tested-by: jenkins
diff --git a/doc/usb_adapters/cmsis_dap/0d28_0204_nxp_daplink.txt b/doc/usb_adapters/cmsis_dap/0d28_0204_nxp_daplink.txt
new file mode 100644
index 000000000..2ec0d58e2
--- /dev/null
+++ b/doc/usb_adapters/cmsis_dap/0d28_0204_nxp_daplink.txt
@@ -0,0 +1,175 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Board: NXP FRDM-K64F
+
+Bus 001 Device 006: ID 0d28:0204 NXP ARM mbed
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 239 Miscellaneous Device
+ bDeviceSubClass 2
+ bDeviceProtocol 1 Interface Association
+ bMaxPacketSize0 64
+ idVendor 0x0d28 NXP
+ idProduct 0x0204 ARM mbed
+ bcdDevice 10.00
+ iManufacturer 1 ARM
+ iProduct 2 DAPLink CMSIS-DAP
+ iSerial 3 0240000031754e45002f00199485002b6461000097969900
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x0082
+ bNumInterfaces 4
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 500mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 8 Mass Storage
+ bInterfaceSubClass 6 SCSI
+ bInterfaceProtocol 80 Bulk-Only
+ iInterface 7 USB_MSC
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x82 EP 2 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x02 EP 2 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 3
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 3 Human Interface Device
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 6 CMSIS-DAP
+ HID Device Descriptor:
+ bLength 9
+ bDescriptorType 33
+ bcdHID 1.00
+ bCountryCode 0 Not supported
+ bNumDescriptors 1
+ bDescriptorType 34 Report
+ wDescriptorLength 33
+ Report Descriptors:
+ ** UNAVAILABLE **
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x01 EP 1 OUT
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+ Interface Association:
+ bLength 8
+ bDescriptorType 11
+ bFirstInterface 1
+ bInterfaceCount 2
+ bFunctionClass 2 Communications
+ bFunctionSubClass 2 Abstract (modem)
+ bFunctionProtocol 1 AT-commands (v.25ter)
+ iFunction 4 mbed Serial Port
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 1
+ bAlternateSetting 0
+ bNumEndpoints 1
+ bInterfaceClass 2 Communications
+ bInterfaceSubClass 2 Abstract (modem)
+ bInterfaceProtocol 1 AT-commands (v.25ter)
+ iInterface 4 mbed Serial Port
+ CDC Header:
+ bcdCDC 1.10
+ CDC Call Management:
+ bmCapabilities 0x03
+ call management
+ use DataInterface
+ bDataInterface 2
+ CDC ACM:
+ bmCapabilities 0x06
+ sends break
+ line coding and serial state
+ CDC Union:
+ bMasterInterface 1
+ bSlaveInterface 2
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x83 EP 3 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0010 1x 16 bytes
+ bInterval 32
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 2
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 10 CDC Data
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 5 mbed Serial Port
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x04 EP 4 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x84 EP 4 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/cmsis_dap/c251_2722_keil_ulink2.txt b/doc/usb_adapters/cmsis_dap/c251_2722_keil_ulink2.txt
new file mode 100644
index 000000000..520f7c553
--- /dev/null
+++ b/doc/usb_adapters/cmsis_dap/c251_2722_keil_ulink2.txt
@@ -0,0 +1,72 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Standalone adapter
+
+Bus 001 Device 010: ID c251:2722 Keil Software, Inc. Keil ULINK2 CMSIS-DAP
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ idVendor 0xc251 Keil Software, Inc.
+ idProduct 0x2722
+ bcdDevice 1.00
+ iManufacturer 1 Keil Software
+ iProduct 2 Keil ULINK2 CMSIS-DAP
+ iSerial 3 V0022U9E
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x0029
+ bNumInterfaces 1
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 100mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 3 Human Interface Device
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 4 CMSIS-DAP
+ HID Device Descriptor:
+ bLength 9
+ bDescriptorType 33
+ bcdHID 1.00
+ bCountryCode 0 Not supported
+ bNumDescriptors 1
+ bDescriptorType 34 Report
+ wDescriptorLength 33
+ Report Descriptors:
+ ** UNAVAILABLE **
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x01 EP 1 OUT
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/ft232r/0403_6001_ft232r.txt b/doc/usb_adapters/ft232r/0403_6001_ft232r.txt
new file mode 100644
index 000000000..8bfb058fd
--- /dev/null
+++ b/doc/usb_adapters/ft232r/0403_6001_ft232r.txt
@@ -0,0 +1,64 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Board: FT232RL
+# Chip: FT232RL
+
+Bus 001 Device 005: ID 0403:6001 Future Technology Devices International, Ltd FT232 Serial (UART) IC
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 8
+ idVendor 0x0403 Future Technology Devices International, Ltd
+ idProduct 0x6001 FT232 Serial (UART) IC
+ bcdDevice 6.00
+ iManufacturer 1 FTDI
+ iProduct 2 FT232R USB UART
+ iSerial 3 A50285BI
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x0020
+ bNumInterfaces 1
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0xa0
+ (Bus Powered)
+ Remote Wakeup
+ MaxPower 90mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 255 Vendor Specific Subclass
+ bInterfaceProtocol 255 Vendor Specific Protocol
+ iInterface 2 FT232R USB UART
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x02 EP 2 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/ftdi/0403_6010_ft2232h.txt b/doc/usb_adapters/ftdi/0403_6010_ft2232h.txt
new file mode 100644
index 000000000..8bb33e6e5
--- /dev/null
+++ b/doc/usb_adapters/ftdi/0403_6010_ft2232h.txt
@@ -0,0 +1,103 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Board: Steppenprobe
+# Link: https://github.com/diegoherranz/steppenprobe
+# Chip: FT2232HL
+
+Bus 001 Device 012: ID 0403:6010 Future Technology Devices International, Ltd FT2232C/D/H Dual UART/FIFO IC
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ idVendor 0x0403 Future Technology Devices International, Ltd
+ idProduct 0x6010 FT2232C/D/H Dual UART/FIFO IC
+ bcdDevice 7.00
+ iManufacturer 1 FTDI
+ iProduct 2 Dual RS232-HS
+ iSerial 0
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x0037
+ bNumInterfaces 2
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 500mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 255 Vendor Specific Subclass
+ bInterfaceProtocol 255 Vendor Specific Protocol
+ iInterface 2 Dual RS232-HS
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x02 EP 2 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 1
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 255 Vendor Specific Subclass
+ bInterfaceProtocol 255 Vendor Specific Protocol
+ iInterface 2 Dual RS232-HS
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x83 EP 3 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x04 EP 4 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+Device Qualifier (for other device speed):
+ bLength 10
+ bDescriptorType 6
+ bcdUSB 2.00
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ bNumConfigurations 1
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/ftdi/0403_cff8_amontec_jtagkey2.txt b/doc/usb_adapters/ftdi/0403_cff8_amontec_jtagkey2.txt
new file mode 100644
index 000000000..f056502ad
--- /dev/null
+++ b/doc/usb_adapters/ftdi/0403_cff8_amontec_jtagkey2.txt
@@ -0,0 +1,104 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Link: http://www.amontec.com
+# Casing: Hi-Speed JTAGkey-2 (c) 2009, Amontec
+# PCB: Amontec JTAGkey2 v5.3
+# Chip: FT2232HQ
+
+Bus 001 Device 017: ID 0403:cff8 Future Technology Devices International, Ltd Amontec JTAGkey
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ idVendor 0x0403 Future Technology Devices International, Ltd
+ idProduct 0xcff8 Amontec JTAGkey
+ bcdDevice 7.00
+ iManufacturer 1 Amontec
+ iProduct 2 Amontec JTAGkey-2
+ iSerial 3 53U2ML49
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x0037
+ bNumInterfaces 2
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 100mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 255 Vendor Specific Subclass
+ bInterfaceProtocol 255 Vendor Specific Protocol
+ iInterface 2 Amontec JTAGkey-2
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x02 EP 2 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 1
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 255 Vendor Specific Subclass
+ bInterfaceProtocol 255 Vendor Specific Protocol
+ iInterface 2 Amontec JTAGkey-2
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x83 EP 3 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x04 EP 4 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+Device Qualifier (for other device speed):
+ bLength 10
+ bDescriptorType 6
+ bcdUSB 2.00
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ bNumConfigurations 1
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/ftdi/09fb_6001_altera_blaster.txt b/doc/usb_adapters/ftdi/09fb_6001_altera_blaster.txt
new file mode 100644
index 000000000..25f43a416
--- /dev/null
+++ b/doc/usb_adapters/ftdi/09fb_6001_altera_blaster.txt
@@ -0,0 +1,64 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Clone www.terasic.com "USB Blaster"
+# PCB reports: "USB Blaster-B", "FOR ALTERA ONLY"
+# Chip: FT245BL
+
+Bus 001 Device 005: ID 09fb:6001 Altera Blaster
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 1.10
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 8
+ idVendor 0x09fb Altera
+ idProduct 0x6001 Blaster
+ bcdDevice 4.00
+ iManufacturer 1 Altera
+ iProduct 2 USB-Blaster
+ iSerial 3 91f28492
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x0020
+ bNumInterfaces 1
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 150mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 255 Vendor Specific Subclass
+ bInterfaceProtocol 255 Vendor Specific Protocol
+ iInterface 2 USB-Blaster
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x02 EP 2 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/icdi/1cbe_00fd_ti_icdi.txt b/doc/usb_adapters/icdi/1cbe_00fd_ti_icdi.txt
new file mode 100644
index 000000000..14fc86fd6
--- /dev/null
+++ b/doc/usb_adapters/icdi/1cbe_00fd_ti_icdi.txt
@@ -0,0 +1,156 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Board: TI Tiva C Series TM4C1294 Connected LaunchPad
+# ICDI firmware update to add OpenOCD support
+
+Bus 001 Device 016: ID 1cbe:00fd Luminary Micro Inc. In-Circuit Debug Interface
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 1.10
+ bDeviceClass 239 Miscellaneous Device
+ bDeviceSubClass 2
+ bDeviceProtocol 1 Interface Association
+ bMaxPacketSize0 64
+ idVendor 0x1cbe Luminary Micro Inc.
+ idProduct 0x00fd In-Circuit Debug Interface
+ bcdDevice 1.00
+ iManufacturer 1 Texas Instruments
+ iProduct 2 In-Circuit Debug Interface
+ iSerial 3 0F00CAC2
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x0074
+ bNumInterfaces 4
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 250mA
+ Interface Association:
+ bLength 8
+ bDescriptorType 11
+ bFirstInterface 0
+ bInterfaceCount 2
+ bFunctionClass 2 Communications
+ bFunctionSubClass 2 Abstract (modem)
+ bFunctionProtocol 1 AT-commands (v.25ter)
+ iFunction 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 1
+ bInterfaceClass 2 Communications
+ bInterfaceSubClass 2 Abstract (modem)
+ bInterfaceProtocol 1 AT-commands (v.25ter)
+ iInterface 0
+ CDC Header:
+ bcdCDC 1.10
+ CDC ACM:
+ bmCapabilities 0x06
+ sends break
+ line coding and serial state
+ CDC Union:
+ bMasterInterface 0
+ bSlaveInterface 1
+ CDC Call Management:
+ bmCapabilities 0x01
+ call management
+ bDataInterface 1
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0010 1x 16 bytes
+ bInterval 1
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 1
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 10 CDC Data
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x82 EP 2 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x01 EP 1 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 2
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x83 EP 3 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x02 EP 2 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 3
+ bAlternateSetting 0
+ bNumEndpoints 0
+ bInterfaceClass 254 Application Specific Interface
+ bInterfaceSubClass 1 Device Firmware Update
+ bInterfaceProtocol 1
+ iInterface 0
+ Device Firmware Upgrade Interface Descriptor:
+ bLength 9
+ bDescriptorType 33
+ bmAttributes 15
+ Will Detach
+ Manifestation Tolerant
+ Upload Supported
+ Download Supported
+ wDetachTimeout 65535 milliseconds
+ wTransferSize 1024 bytes
+ bcdDFUVersion 1.10
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/jlink/1366_0101_segger_jlink_plus_10_1.txt b/doc/usb_adapters/jlink/1366_0101_segger_jlink_plus_10_1.txt
new file mode 100644
index 000000000..fd31e9c78
--- /dev/null
+++ b/doc/usb_adapters/jlink/1366_0101_segger_jlink_plus_10_1.txt
@@ -0,0 +1,71 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Standalone adapter, original Segger, HW version 10.1
+
+Bus 001 Device 005: ID 1366:0101 SEGGER J-Link PLUS
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ idVendor 0x1366 SEGGER
+ idProduct 0x0101 J-Link PLUS
+ bcdDevice 1.00
+ iManufacturer 1 SEGGER
+ iProduct 2 J-Link
+ iSerial 3 123456
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x0020
+ bNumInterfaces 1
+ bConfigurationValue 1
+ iConfiguration 4 Configuration
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 100mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 255 Vendor Specific Subclass
+ bInterfaceProtocol 255 Vendor Specific Protocol
+ iInterface 5 BULK interface
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 1
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x01 EP 1 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 1
+Device Qualifier (for other device speed):
+ bLength 10
+ bDescriptorType 6
+ bcdUSB 2.00
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ bNumConfigurations 1
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/nulink/0416_511d_nuvoton_nulink.txt b/doc/usb_adapters/nulink/0416_511d_nuvoton_nulink.txt
new file mode 100644
index 000000000..fb4392351
--- /dev/null
+++ b/doc/usb_adapters/nulink/0416_511d_nuvoton_nulink.txt
@@ -0,0 +1,142 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Board: nuvoTon NuMaker-PFM-M2351
+# Adapter: ICE V3.0
+
+Bus 001 Device 013: ID 0416:511d Winbond Electronics Corp. Nuvoton Nu-Link1 ICE/VCOM
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 1.10
+ bDeviceClass 239 Miscellaneous Device
+ bDeviceSubClass 2
+ bDeviceProtocol 1 Interface Association
+ bMaxPacketSize0 64
+ idVendor 0x0416 Winbond Electronics Corp.
+ idProduct 0x511d Nuvoton Nu-Link1 ICE/VCOM
+ bcdDevice 1.00
+ iManufacturer 1 Nuvoton
+ iProduct 2 Nu-Link
+ iSerial 0
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x006b
+ bNumInterfaces 3
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 100mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 3 Human Interface Device
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 0
+ HID Device Descriptor:
+ bLength 9
+ bDescriptorType 33
+ bcdHID 1.10
+ bCountryCode 0 Not supported
+ bNumDescriptors 1
+ bDescriptorType 34 Report
+ wDescriptorLength 28
+ Report Descriptors:
+ ** UNAVAILABLE **
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x02 EP 2 OUT
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+ Interface Association:
+ bLength 8
+ bDescriptorType 11
+ bFirstInterface 1
+ bInterfaceCount 2
+ bFunctionClass 2 Communications
+ bFunctionSubClass 2 Abstract (modem)
+ bFunctionProtocol 1 AT-commands (v.25ter)
+ iFunction 2 Nu-Link
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 1
+ bAlternateSetting 0
+ bNumEndpoints 1
+ bInterfaceClass 2 Communications
+ bInterfaceSubClass 2 Abstract (modem)
+ bInterfaceProtocol 1 AT-commands (v.25ter)
+ iInterface 0
+ CDC Header:
+ bcdCDC 1.10
+ CDC Call Management:
+ bmCapabilities 0x00
+ bDataInterface 1
+ CDC ACM:
+ bmCapabilities 0x00
+ CDC Union:
+ bMasterInterface 1
+ bSlaveInterface 2
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x85 EP 5 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0008 1x 8 bytes
+ bInterval 255
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 2
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 10 CDC Data
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x83 EP 3 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x04 EP 4 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/nulink/0416_5200_nuvoton_nulink.txt b/doc/usb_adapters/nulink/0416_5200_nuvoton_nulink.txt
new file mode 100644
index 000000000..1d8661f18
--- /dev/null
+++ b/doc/usb_adapters/nulink/0416_5200_nuvoton_nulink.txt
@@ -0,0 +1,211 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Board: nuvoTon NuMaker-M483KG V1.1
+# Adapter: Nu-Link2-Me V1.0
+
+Bus 001 Device 014: ID 0416:5200 Winbond Electronics Corp. Nuvoton Nu-Link2-ME ICE/MSC/VCOM
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 239 Miscellaneous Device
+ bDeviceSubClass 2
+ bDeviceProtocol 1 Interface Association
+ bMaxPacketSize0 64
+ idVendor 0x0416 Winbond Electronics Corp.
+ idProduct 0x5200 Nuvoton Nu-Link2-ME ICE/MSC/VCOM
+ bcdDevice 0.00
+ iManufacturer 1 Nuvoton
+ iProduct 2 Nu-Link2 Bulk
+ iSerial 6 13010000AAAAAAAAAAAAAAAAAAAAAAAA
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x0099
+ bNumInterfaces 5
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 100mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x02 EP 2 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Interface Association:
+ bLength 8
+ bDescriptorType 11
+ bFirstInterface 1
+ bInterfaceCount 2
+ bFunctionClass 2 Communications
+ bFunctionSubClass 2 Abstract (modem)
+ bFunctionProtocol 1 AT-commands (v.25ter)
+ iFunction 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 1
+ bAlternateSetting 0
+ bNumEndpoints 1
+ bInterfaceClass 2 Communications
+ bInterfaceSubClass 2 Abstract (modem)
+ bInterfaceProtocol 1 AT-commands (v.25ter)
+ iInterface 3 Nu-Link2 VCOM
+ CDC Header:
+ bcdCDC 1.10
+ CDC Call Management:
+ bmCapabilities 0x00
+ bDataInterface 1
+ CDC ACM:
+ bmCapabilities 0x00
+ CDC Union:
+ bMasterInterface 1
+ bSlaveInterface 2
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x85 EP 5 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 2
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 10 CDC Data
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x83 EP 3 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0100 1x 256 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x04 EP 4 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0100 1x 256 bytes
+ bInterval 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 3
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 3 Human Interface Device
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 4 Nu-Link2 HID
+ HID Device Descriptor:
+ bLength 9
+ bDescriptorType 33
+ bcdHID 1.10
+ bCountryCode 0 Not supported
+ bNumDescriptors 1
+ bDescriptorType 34 Report
+ wDescriptorLength 35
+ Report Descriptors:
+ ** UNAVAILABLE **
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x86 EP 6 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0400 1x 1024 bytes
+ bInterval 4
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x07 EP 7 OUT
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0400 1x 1024 bytes
+ bInterval 4
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 4
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 8 Mass Storage
+ bInterfaceSubClass 6 SCSI
+ bInterfaceProtocol 80 Bulk-Only
+ iInterface 5 Nu-Link2 MSC
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x88 EP 8 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x09 EP 9 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+Device Qualifier (for other device speed):
+ bLength 10
+ bDescriptorType 6
+ bcdUSB 2.00
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ bNumConfigurations 1
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/stlink/0483_3744_stlinkv1.txt b/doc/usb_adapters/stlink/0483_3744_stlinkv1.txt
new file mode 100644
index 000000000..b887f7971
--- /dev/null
+++ b/doc/usb_adapters/stlink/0483_3744_stlinkv1.txt
@@ -0,0 +1,62 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Standalone adapter
+
+Bus 001 Device 009: ID 0483:3744 STMicroelectronics ST-LINK/V1
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ idVendor 0x0483 STMicroelectronics
+ idProduct 0x3744 ST-LINK/V1
+ bcdDevice 1.00
+ iManufacturer 1 STMicroelectronics
+ iProduct 2 STM32 STLink
+ iSerial 3 0000001
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x0020
+ bNumInterfaces 1
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 100mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 8 Mass Storage
+ bInterfaceSubClass 6 SCSI
+ bInterfaceProtocol 80 Bulk-Only
+ iInterface 4 ST Link
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x02 EP 2 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/stlink/0483_3748_stlinkv2.txt b/doc/usb_adapters/stlink/0483_3748_stlinkv2.txt
new file mode 100644
index 000000000..ac6dfc7f6
--- /dev/null
+++ b/doc/usb_adapters/stlink/0483_3748_stlinkv2.txt
@@ -0,0 +1,72 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# ST-Link/V2 standalone or ST-Link/V2 in firmware update mode
+
+Bus 001 Device 006: ID 0483:3748 STMicroelectronics ST-LINK/V2
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ idVendor 0x0483 STMicroelectronics
+ idProduct 0x3748 ST-LINK/V2
+ bcdDevice 1.00
+ iManufacturer 1 STMicroelectronics
+ iProduct 2 STM32 STLink
+ iSerial 3 0668FF323637414257071827
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x0027
+ bNumInterfaces 1
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 100mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 3
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 255 Vendor Specific Subclass
+ bInterfaceProtocol 255 Vendor Specific Protocol
+ iInterface 4 ST Link
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x02 EP 2 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x83 EP 3 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/stlink/0483_374b_stlinkv2.txt b/doc/usb_adapters/stlink/0483_374b_stlinkv2.txt
new file mode 100644
index 000000000..cc0156d74
--- /dev/null
+++ b/doc/usb_adapters/stlink/0483_374b_stlinkv2.txt
@@ -0,0 +1,173 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Board: ST Nucleo F411
+
+Bus 001 Device 007: ID 0483:374b STMicroelectronics ST-LINK/V2.1
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 239 Miscellaneous Device
+ bDeviceSubClass 2
+ bDeviceProtocol 1 Interface Association
+ bMaxPacketSize0 64
+ idVendor 0x0483 STMicroelectronics
+ idProduct 0x374b ST-LINK/V2.1
+ bcdDevice 1.00
+ iManufacturer 1 STMicroelectronics
+ iProduct 2 STM32 STLink
+ iSerial 3 066EFF373535503457062922
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x0080
+ bNumInterfaces 4
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 100mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 3
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 255 Vendor Specific Subclass
+ bInterfaceProtocol 255 Vendor Specific Protocol
+ iInterface 4 ST-Link Debug
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x01 EP 1 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x82 EP 2 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0020 1x 32 bytes
+ bInterval 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 1
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 8 Mass Storage
+ bInterfaceSubClass 6 SCSI
+ bInterfaceProtocol 80 Bulk-Only
+ iInterface 5 ST-Link mass storage
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x83 EP 3 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x03 EP 3 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Interface Association:
+ bLength 8
+ bDescriptorType 11
+ bFirstInterface 2
+ bInterfaceCount 2
+ bFunctionClass 2 Communications
+ bFunctionSubClass 2 Abstract (modem)
+ bFunctionProtocol 1 AT-commands (v.25ter)
+ iFunction 6 ST-Link VCP Ctrl
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 2
+ bAlternateSetting 0
+ bNumEndpoints 1
+ bInterfaceClass 2 Communications
+ bInterfaceSubClass 2 Abstract (modem)
+ bInterfaceProtocol 1 AT-commands (v.25ter)
+ iInterface 6 ST-Link VCP Ctrl
+ CDC Header:
+ bcdCDC 1.10
+ CDC Call Management:
+ bmCapabilities 0x00
+ bDataInterface 3
+ CDC ACM:
+ bmCapabilities 0x06
+ sends break
+ line coding and serial state
+ CDC Union:
+ bMasterInterface 2
+ bSlaveInterface 3
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x84 EP 4 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0002 1x 2 bytes
+ bInterval 255
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 3
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 10 CDC Data
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 7 ST-Link VCP Data
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x05 EP 5 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0008 1x 8 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x85 EP 5 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0010 1x 16 bytes
+ bInterval 0
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/stlink/0483_374d_stlinkv3.txt b/doc/usb_adapters/stlink/0483_374d_stlinkv3.txt
new file mode 100644
index 000000000..e964872c3
--- /dev/null
+++ b/doc/usb_adapters/stlink/0483_374d_stlinkv3.txt
@@ -0,0 +1,71 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# ST-Link/V3 in firmware update mode
+
+Bus 001 Device 009: ID 0483:374d STMicroelectronics STLINK-V3 Loader
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ idVendor 0x0483 STMicroelectronics
+ idProduct 0x374d STLINK-V3 Loader
+ bcdDevice 2.00
+ iManufacturer 1 STMicroelectronics
+ iProduct 2 STM32 ST-LINK/V3
+ iSerial 3 003500463137510239383538
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x0020
+ bNumInterfaces 1
+ bConfigurationValue 1
+ iConfiguration 4 DFU Config
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 100mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 255 Vendor Specific Subclass
+ bInterfaceProtocol 255 Vendor Specific Protocol
+ iInterface 5 ST-LINK/V3
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x01 EP 1 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+Device Qualifier (for other device speed):
+ bLength 10
+ bDescriptorType 6
+ bcdUSB 2.00
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ bNumConfigurations 1
+Device Status: 0x0001
+ Self Powered
diff --git a/doc/usb_adapters/stlink/0483_374e_stlinkv3.txt b/doc/usb_adapters/stlink/0483_374e_stlinkv3.txt
new file mode 100644
index 000000000..55c968cce
--- /dev/null
+++ b/doc/usb_adapters/stlink/0483_374e_stlinkv3.txt
@@ -0,0 +1,182 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Board: ST Nucleo-H...
[truncated message content] |
|
From: openocd-gerrit <ope...@us...> - 2023-01-15 15:04:57
|
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 9ffda10298eff870bde12dec580f98de6f497257 (commit)
from 63336f4aaf672899db78de4ce6781c9451851472 (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 9ffda10298eff870bde12dec580f98de6f497257
Author: Jian-Hong Pan <chi...@gm...>
Date: Sun Nov 13 12:43:14 2022 +0800
flash/nor, contrib/loaders: move numicro M0 write assembly to contrib/loaders
Simply move numicro M0 flash write assembly to contrib/loaders. Also,
modify corresponding Makefile and generated numicro_m0.inc.
To make the path more general, this patch rename the path
"contrib/loaders/flash/numicro_m4" to "contrib/loaders/flash/numicro" as
well.
Signed-off-by: Jian-Hong Pan <chi...@gm...>
Change-Id: I9adea24c2b3c97319a9b015cf50257f3d131dc26
Reviewed-on: https://review.openocd.org/c/openocd/+/7346
Tested-by: jenkins
Reviewed-by: Antonio Borneo <bor...@gm...>
diff --git a/contrib/loaders/flash/numicro_m4/Makefile b/contrib/loaders/flash/numicro/Makefile
similarity index 82%
rename from contrib/loaders/flash/numicro_m4/Makefile
rename to contrib/loaders/flash/numicro/Makefile
index 0f9c507cd..e4f44417c 100644
--- a/contrib/loaders/flash/numicro_m4/Makefile
+++ b/contrib/loaders/flash/numicro/Makefile
@@ -9,9 +9,9 @@ OBJCOPY=$(CROSS_COMPILE)objcopy
OBJDUMP=$(CROSS_COMPILE)objdump
-AFLAGS = -static -nostartfiles -mlittle-endian -mcpu=cortex-m4 -Wa,-EL
+AFLAGS = -static -nostartfiles -mlittle-endian -Wa,-EL
-all: numicro_m4.inc
+all: numicro_m0.inc numicro_m4.inc
.PHONY: clean
diff --git a/contrib/loaders/flash/numicro_m4/numicro_m4.S b/contrib/loaders/flash/numicro/numicro_m0.S
similarity index 82%
copy from contrib/loaders/flash/numicro_m4/numicro_m4.S
copy to contrib/loaders/flash/numicro/numicro_m0.S
index 6c59cca57..37d435532 100644
--- a/contrib/loaders/flash/numicro_m4/numicro_m4.S
+++ b/contrib/loaders/flash/numicro/numicro_m0.S
@@ -1,6 +1,9 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
/***************************************************************************
+ * Copyright (C) 2015 Nemui Trinomius *
+ * nem...@li... *
+ * *
* Copyright (C) 2017 Zale Yu *
* CY...@nu... *
* *
@@ -9,7 +12,7 @@
***************************************************************************/
.text
- .cpu cortex-m4
+ .cpu cortex-m0
.thumb
/* Params:
@@ -64,7 +67,7 @@
.L9:
bkpt #0
.L8:
- .word 0x4000C004
- .word 0x4000C008
- .word 0x4000C010
- .word 0x4000C000
+ .word 0x5000C004
+ .word 0x5000C008
+ .word 0x5000C010
+ .word 0x5000C000
diff --git a/contrib/loaders/flash/numicro_m4/numicro_m4.inc b/contrib/loaders/flash/numicro/numicro_m0.inc
similarity index 78%
copy from contrib/loaders/flash/numicro_m4/numicro_m4.inc
copy to contrib/loaders/flash/numicro/numicro_m0.inc
index c3e605292..db9c7742f 100644
--- a/contrib/loaders/flash/numicro_m4/numicro_m4.inc
+++ b/contrib/loaders/flash/numicro/numicro_m0.inc
@@ -2,4 +2,4 @@
0x04,0x1c,0x00,0x23,0x0d,0x1a,0x67,0x19,0x93,0x42,0x0c,0xd0,0x08,0x4e,0x37,0x60,
0x80,0xcc,0x08,0x4d,0x2f,0x60,0x08,0x4d,0x01,0x26,0x2e,0x60,0x2f,0x68,0xff,0x07,
0xfc,0xd4,0x01,0x33,0xee,0xe7,0x05,0x4b,0x18,0x68,0x40,0x21,0x08,0x40,0x00,0xbe,
-0x04,0xc0,0x00,0x40,0x08,0xc0,0x00,0x40,0x10,0xc0,0x00,0x40,0x00,0xc0,0x00,0x40,
+0x04,0xc0,0x00,0x50,0x08,0xc0,0x00,0x50,0x10,0xc0,0x00,0x50,0x00,0xc0,0x00,0x50,
diff --git a/contrib/loaders/flash/numicro_m4/numicro_m4.S b/contrib/loaders/flash/numicro/numicro_m4.S
similarity index 100%
rename from contrib/loaders/flash/numicro_m4/numicro_m4.S
rename to contrib/loaders/flash/numicro/numicro_m4.S
diff --git a/contrib/loaders/flash/numicro_m4/numicro_m4.inc b/contrib/loaders/flash/numicro/numicro_m4.inc
similarity index 100%
rename from contrib/loaders/flash/numicro_m4/numicro_m4.inc
rename to contrib/loaders/flash/numicro/numicro_m4.inc
diff --git a/src/flash/nor/numicro.c b/src/flash/nor/numicro.c
index cbd2450b0..0b04ce4b7 100644
--- a/src/flash/nor/numicro.c
+++ b/src/flash/nor/numicro.c
@@ -681,66 +681,11 @@ static uint32_t numicro_fmc_cmd(struct target *target, uint32_t cmd, uint32_t ad
/* NuMicro Program-LongWord Microcodes */
static const uint8_t numicro_flash_write_code[] = {
- /* Params:
- * r0 - workarea buffer / result
- * r1 - target address
- * r2 - wordcount
- * Clobbered:
- * r4 - tmp
- * r5 - tmp
- * r6 - tmp
- * r7 - tmp
- */
-
- /* .L1: */
- /* for(register uint32_t i=0;i<wcount;i++){ */
- 0x04, 0x1C, /* mov r4, r0 */
- 0x00, 0x23, /* mov r3, #0 */
- /* .L2: */
- 0x0D, 0x1A, /* sub r5, r1, r0 */
- 0x67, 0x19, /* add r7, r4, r7 */
- 0x93, 0x42, /* cmp r3, r2 */
- 0x0C, 0xD0, /* beq .L7 */
- /* .L4: */
- /* NUMICRO_FLASH_ISPADR = faddr; */
- 0x08, 0x4E, /* ldr r6, .L8 */
- 0x37, 0x60, /* str r7, [r6] */
- /* NUMICRO_FLASH_ISPDAT = *pLW; */
- 0x80, 0xCC, /* ldmia r4!, {r7} */
- 0x08, 0x4D, /* ldr r5, .L8+4 */
- 0x2F, 0x60, /* str r7, [r5] */
- /* faddr += 4; */
- /* pLW++; */
- /* Trigger write action */
- /* NUMICRO_FLASH_ISPTRG = ISPTRG_ISPGO; */
- 0x08, 0x4D, /* ldr r5, .L8+8 */
- 0x01, 0x26, /* mov r6, #1 */
- 0x2E, 0x60, /* str r6, [r5] */
- /* .L3: */
- /* while((NUMICRO_FLASH_ISPTRG & ISPTRG_ISPGO) == ISPTRG_ISPGO){}; */
- 0x2F, 0x68, /* ldr r7, [r5] */
- 0xFF, 0x07, /* lsl r7, r7, #31 */
- 0xFC, 0xD4, /* bmi .L3 */
-
- 0x01, 0x33, /* add r3, r3, #1 */
- 0xEE, 0xE7, /* b .L2 */
- /* .L7: */
- /* return (NUMICRO_FLASH_ISPCON & ISPCON_ISPFF); */
- 0x05, 0x4B, /* ldr r3, .L8+12 */
- 0x18, 0x68, /* ldr r0, [r3] */
- 0x40, 0x21, /* mov r1, #64 */
- 0x08, 0x40, /* and r0, r1 */
- /* .L9: */
- 0x00, 0xBE, /* bkpt #0 */
- /* .L8: */
- 0x04, 0xC0, 0x00, 0x50,/* .word 1342226436 */
- 0x08, 0xC0, 0x00, 0x50,/* .word 1342226440 */
- 0x10, 0xC0, 0x00, 0x50,/* .word 1342226448 */
- 0x00, 0xC0, 0x00, 0x50 /* .word 1342226432 */
+#include "../../../contrib/loaders/flash/numicro/numicro_m0.inc"
};
static const uint8_t numicro_m4_flash_write_code[] = {
-#include "../../../contrib/loaders/flash/numicro_m4/numicro_m4.inc"
+#include "../../../contrib/loaders/flash/numicro/numicro_m4.inc"
};
/* Program LongWord Block Write */
-----------------------------------------------------------------------
Summary of changes:
.../loaders/flash/{numicro_m4 => numicro}/Makefile | 4 +-
.../numicro_m4.S => numicro/numicro_m0.S} | 13 +++--
.../numicro_m4.inc => numicro/numicro_m0.inc} | 2 +-
.../flash/{numicro_m4 => numicro}/numicro_m4.S | 0
.../flash/{numicro_m4 => numicro}/numicro_m4.inc | 0
src/flash/nor/numicro.c | 59 +---------------------
6 files changed, 13 insertions(+), 65 deletions(-)
rename contrib/loaders/flash/{numicro_m4 => numicro}/Makefile (82%)
copy contrib/loaders/flash/{numicro_m4/numicro_m4.S => numicro/numicro_m0.S} (82%)
copy contrib/loaders/flash/{numicro_m4/numicro_m4.inc => numicro/numicro_m0.inc} (78%)
rename contrib/loaders/flash/{numicro_m4 => numicro}/numicro_m4.S (100%)
rename contrib/loaders/flash/{numicro_m4 => numicro}/numicro_m4.inc (100%)
hooks/post-receive
--
Main OpenOCD repository
|
|
From: openocd-gerrit <ope...@us...> - 2023-01-15 15:04:43
|
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 63336f4aaf672899db78de4ce6781c9451851472 (commit)
from 21b14028ad7565f4916ae05a6c28b465eceb9150 (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 63336f4aaf672899db78de4ce6781c9451851472
Author: Jian-Hong Pan <chi...@gm...>
Date: Thu Nov 10 00:14:10 2022 +0800
flash/nor, contrib/loaders: move numicro M4 write assembly to contrib/loaders
Simply move numicro M4 flash write assembly to contrib/loaders. Also,
add corresponding Makefile and generated numicro_m4.inc.
Signed-off-by: Jian-Hong Pan <chi...@gm...>
Change-Id: I22b8be0a245857335b11bd0b538db415fc34748d
Reviewed-on: https://review.openocd.org/c/openocd/+/7343
Tested-by: jenkins
Reviewed-by: Antonio Borneo <bor...@gm...>
diff --git a/contrib/loaders/flash/numicro_m4/Makefile b/contrib/loaders/flash/numicro_m4/Makefile
new file mode 100644
index 000000000..0f9c507cd
--- /dev/null
+++ b/contrib/loaders/flash/numicro_m4/Makefile
@@ -0,0 +1,31 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+BIN2C = ../../../../src/helper/bin2char.sh
+
+CROSS_COMPILE ?= arm-none-eabi-
+
+CC=$(CROSS_COMPILE)gcc
+OBJCOPY=$(CROSS_COMPILE)objcopy
+OBJDUMP=$(CROSS_COMPILE)objdump
+
+
+AFLAGS = -static -nostartfiles -mlittle-endian -mcpu=cortex-m4 -Wa,-EL
+
+all: numicro_m4.inc
+
+.PHONY: clean
+
+%.elf: %.S
+ $(CC) $(AFLAGS) $< -o $@
+
+%.lst: %.elf
+ $(OBJDUMP) -S $< > $@
+
+%.bin: %.elf
+ $(OBJCOPY) -Obinary $< $@
+
+%.inc: %.bin
+ $(BIN2C) < $< > $@
+
+clean:
+ -rm -f *.elf *.lst *.bin *.inc
diff --git a/contrib/loaders/flash/numicro_m4/numicro_m4.S b/contrib/loaders/flash/numicro_m4/numicro_m4.S
new file mode 100644
index 000000000..6c59cca57
--- /dev/null
+++ b/contrib/loaders/flash/numicro_m4/numicro_m4.S
@@ -0,0 +1,70 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+/***************************************************************************
+ * Copyright (C) 2017 Zale Yu *
+ * CY...@nu... *
+ * *
+ * Copyright (C) 2022 Jian-Hong Pan *
+ * chi...@gm... *
+ ***************************************************************************/
+
+ .text
+ .cpu cortex-m4
+ .thumb
+
+ /* Params:
+ * r0 - workarea buffer / result
+ * r1 - target address
+ * r2 - wordcount
+ * Clobbered:
+ * r4 - tmp
+ * r5 - tmp
+ * r6 - tmp
+ * r7 - tmp
+ */
+
+.L1:
+ /* for(register uint32_t i=0;i<wcount;i++){ */
+ mov r4, r0
+ mov r3, #0
+.L2:
+ sub r5, r1, r0
+ add r7, r4, r5
+ cmp r3, r2
+ beq .L7
+.L4:
+ /* NUMICRO_FLASH_ISPADR = faddr; */
+ ldr r6, .L8
+ str r7, [r6]
+ /* NUMICRO_FLASH_ISPDAT = *pLW; */
+ ldmia r4!, {r7}
+ ldr r5, .L8+4
+ str r7, [r5]
+ /* faddr += 4; */
+ /* pLW++; */
+ /* Trigger write action */
+ /* NUMICRO_FLASH_ISPTRG = ISPTRG_ISPGO; */
+ ldr r5, .L8+8
+ mov r6, #1
+ str r6, [r5]
+.L3:
+ /* while((NUMICRO_FLASH_ISPTRG & ISPTRG_ISPGO) == ISPTRG_ISPGO){}; */
+ ldr r7, [r5]
+ lsl r7, r7, #31
+ bmi .L3
+
+ add r3, r3, #1
+ b .L2
+.L7:
+ /* return (NUMICRO_FLASH_ISPCON & ISPCON_ISPFF); */
+ ldr r3, .L8+12
+ ldr r0, [r3]
+ mov r1, #64
+ and r0, r1
+.L9:
+ bkpt #0
+.L8:
+ .word 0x4000C004
+ .word 0x4000C008
+ .word 0x4000C010
+ .word 0x4000C000
diff --git a/contrib/loaders/flash/numicro_m4/numicro_m4.inc b/contrib/loaders/flash/numicro_m4/numicro_m4.inc
new file mode 100644
index 000000000..c3e605292
--- /dev/null
+++ b/contrib/loaders/flash/numicro_m4/numicro_m4.inc
@@ -0,0 +1,5 @@
+/* Autogenerated with ../../../../src/helper/bin2char.sh */
+0x04,0x1c,0x00,0x23,0x0d,0x1a,0x67,0x19,0x93,0x42,0x0c,0xd0,0x08,0x4e,0x37,0x60,
+0x80,0xcc,0x08,0x4d,0x2f,0x60,0x08,0x4d,0x01,0x26,0x2e,0x60,0x2f,0x68,0xff,0x07,
+0xfc,0xd4,0x01,0x33,0xee,0xe7,0x05,0x4b,0x18,0x68,0x40,0x21,0x08,0x40,0x00,0xbe,
+0x04,0xc0,0x00,0x40,0x08,0xc0,0x00,0x40,0x10,0xc0,0x00,0x40,0x00,0xc0,0x00,0x40,
diff --git a/src/flash/nor/numicro.c b/src/flash/nor/numicro.c
index 2bba7b746..cbd2450b0 100644
--- a/src/flash/nor/numicro.c
+++ b/src/flash/nor/numicro.c
@@ -740,62 +740,7 @@ static const uint8_t numicro_flash_write_code[] = {
};
static const uint8_t numicro_m4_flash_write_code[] = {
- /* Params:
- * r0 - workarea buffer / result
- * r1 - target address
- * r2 - wordcount
- * Clobbered:
- * r4 - tmp
- * r5 - tmp
- * r6 - tmp
- * r7 - tmp
- */
-
- /* .L1: */
- /* for(register uint32_t i=0;i<wcount;i++){ */
- 0x04, 0x1C, /* mov r4, r0 */
- 0x00, 0x23, /* mov r3, #0 */
- /* .L2: */
- 0x0D, 0x1A, /* sub r5, r1, r0 */
- 0x67, 0x19, /* add r7, r4, r7 */
- 0x93, 0x42, /* cmp r3, r2 */
- 0x0C, 0xD0, /* beq .L7 */
- /* .L4: */
- /* NUMICRO_FLASH_ISPADR = faddr; */
- 0x08, 0x4E, /* ldr r6, .L8 */
- 0x37, 0x60, /* str r7, [r6] */
- /* NUMICRO_FLASH_ISPDAT = *pLW; */
- 0x80, 0xCC, /* ldmia r4!, {r7} */
- 0x08, 0x4D, /* ldr r5, .L8+4 */
- 0x2F, 0x60, /* str r7, [r5] */
- /* faddr += 4; */
- /* pLW++; */
- /* Trigger write action */
- /* NUMICRO_FLASH_ISPTRG = ISPTRG_ISPGO; */
- 0x08, 0x4D, /* ldr r5, .L8+8 */
- 0x01, 0x26, /* mov r6, #1 */
- 0x2E, 0x60, /* str r6, [r5] */
- /* .L3: */
- /* while((NUMICRO_FLASH_ISPTRG & ISPTRG_ISPGO) == ISPTRG_ISPGO){}; */
- 0x2F, 0x68, /* ldr r7, [r5] */
- 0xFF, 0x07, /* lsl r7, r7, #31 */
- 0xFC, 0xD4, /* bmi .L3 */
-
- 0x01, 0x33, /* add r3, r3, #1 */
- 0xEE, 0xE7, /* b .L2 */
- /* .L7: */
- /* return (NUMICRO_FLASH_ISPCON & ISPCON_ISPFF); */
- 0x05, 0x4B, /* ldr r3, .L8+12 */
- 0x18, 0x68, /* ldr r0, [r3] */
- 0x40, 0x21, /* mov r1, #64 */
- 0x08, 0x40, /* and r0, r1 */
- /* .L9: */
- 0x00, 0xBE, /* bkpt #0 */
- /* .L8: */
- 0x04, 0xC0, 0x00, 0x40,/* .word 0x4000C004 */
- 0x08, 0xC0, 0x00, 0x40,/* .word 0x4000C008 */
- 0x10, 0xC0, 0x00, 0x40,/* .word 0x4000C010 */
- 0x00, 0xC0, 0x00, 0x40 /* .word 0x4000C000 */
+#include "../../../contrib/loaders/flash/numicro_m4/numicro_m4.inc"
};
/* Program LongWord Block Write */
-----------------------------------------------------------------------
Summary of changes:
.../loaders/flash/{nrf5 => numicro_m4}/Makefile | 7 ++-
contrib/loaders/flash/numicro_m4/numicro_m4.S | 70 ++++++++++++++++++++++
contrib/loaders/flash/numicro_m4/numicro_m4.inc | 5 ++
src/flash/nor/numicro.c | 57 +-----------------
4 files changed, 80 insertions(+), 59 deletions(-)
copy contrib/loaders/flash/{nrf5 => numicro_m4}/Makefile (76%)
create mode 100644 contrib/loaders/flash/numicro_m4/numicro_m4.S
create mode 100644 contrib/loaders/flash/numicro_m4/numicro_m4.inc
hooks/post-receive
--
Main OpenOCD repository
|
|
From: openocd-gerrit <ope...@us...> - 2023-01-15 15:04:16
|
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 21b14028ad7565f4916ae05a6c28b465eceb9150 (commit)
from d1b0cb2b774c1033a6ca8e531781df82baac40f7 (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 21b14028ad7565f4916ae05a6c28b465eceb9150
Author: Zale Yu <cy...@nu...>
Date: Fri Nov 4 23:07:29 2022 +0800
tcl: add a configuration file for Nuvoton M541 & NUC442/472 series
This patch is picked from the tcl part of OpenOCD-Nuvoton's commit
("flash: supported Nuvoton M4 series. jtag: Used HW reset instead of
auto reset. tcl: added a configuration file for Nuvoton M4 series.") [1]
to support the communication with Nuvoton's Cortex-M4 chips: M541 &
NUC442/472 series.
This patch has been tested with Nuvoton's NuTiny-SDK-NUC472 development
board [2].
The code comes from the commit basically. Jian-Hong Pan tweaked for the
compatibility with current OpenOCD. So, leave the author as Zale Yu.
[1]: https://github.com/OpenNuvoton/OpenOCD-Nuvoton/commit/c2d5b8bfc705
[2]: https://www.nuvoton.com/export/resource-files/UM_NuTiny-SDK-
NUC472_EN_Rev1.02.pdf
Signed-off-by: Zale Yu <cy...@nu...>
Signed-off-by: Jian-Hong Pan <chi...@gm...>
Change-Id: I27ac58dd1c98a76e791a4f1117c31060cf5522e8
Reviewed-on: https://review.openocd.org/c/openocd/+/7330
Tested-by: jenkins
Reviewed-by: Antonio Borneo <bor...@gm...>
diff --git a/tcl/target/numicro_m4.cfg b/tcl/target/numicro_m4.cfg
new file mode 100644
index 000000000..1302515d3
--- /dev/null
+++ b/tcl/target/numicro_m4.cfg
@@ -0,0 +1,62 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+# script for Nuvoton MuMicro Cortex-M4 Series
+
+source [find target/swj-dp.tcl]
+
+# Set Chipname
+if { [info exists CHIPNAME] } {
+ set _CHIPNAME $CHIPNAME
+} else {
+ set _CHIPNAME NuMicro
+}
+
+# SWD DP-ID Nuvoton NuMicro Cortex-M4 has SWD Transport only.
+if { [info exists CPUDAPID] } {
+ set _CPUDAPID $CPUDAPID
+} else {
+ set _CPUDAPID 0x2BA01477
+}
+
+# Work-area is a space in RAM used for flash programming
+# By default use 16kB
+if { [info exists WORKAREASIZE] } {
+ set _WORKAREASIZE $WORKAREASIZE
+} else {
+ set _WORKAREASIZE 0x4000
+}
+
+
+# Debug Adapter Target Settings
+swj_newdap $_CHIPNAME cpu -irlen 4 -expected-id $_CPUDAPID
+dap create $_CHIPNAME.dap -chain-position $_CHIPNAME.cpu
+set _TARGETNAME $_CHIPNAME.cpu
+target create $_TARGETNAME cortex_m -dap $_CHIPNAME.dap
+
+$_TARGETNAME configure -work-area-phys 0x20000000 -work-area-size $_WORKAREASIZE -work-area-backup 0
+
+# flash bank <name> numicro <base> <size(autodetect,set to 0)> 0 0 <target#>
+#set _FLASHNAME $_CHIPNAME.flash
+#flash bank $_FLASHNAME numicro 0 $_FLASHSIZE 0 0 $_TARGETNAME
+# flash size will be probed
+set _FLASHNAME $_CHIPNAME.flash_aprom
+flash bank $_FLASHNAME numicro 0x00000000 0 0 0 $_TARGETNAME
+set _FLASHNAME $_CHIPNAME.flash_data
+flash bank $_FLASHNAME numicro 0x0001F000 0 0 0 $_TARGETNAME
+set _FLASHNAME $_CHIPNAME.flash_ldrom
+flash bank $_FLASHNAME numicro 0x00100000 0 0 0 $_TARGETNAME
+set _FLASHNAME $_CHIPNAME.flash_config
+flash bank $_FLASHNAME numicro 0x00300000 0 0 0 $_TARGETNAME
+
+# set default SWCLK frequency
+adapter speed 1000
+
+# set default srst setting "none"
+reset_config none
+
+# HLA doesn't have cortex_m commands
+if {![using_hla]} {
+ # if srst is not fitted use SYSRESETREQ to
+ # perform a soft reset
+ cortex_m reset_config sysresetreq
+}
-----------------------------------------------------------------------
Summary of changes:
tcl/target/{numicro.cfg => numicro_m4.cfg} | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
copy tcl/target/{numicro.cfg => numicro_m4.cfg} (87%)
hooks/post-receive
--
Main OpenOCD repository
|
|
From: openocd-gerrit <ope...@us...> - 2023-01-15 15:03:39
|
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 d1b0cb2b774c1033a6ca8e531781df82baac40f7 (commit)
from 776e045de0a2ce6644ae19de99820f02628dfbcc (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 d1b0cb2b774c1033a6ca8e531781df82baac40f7
Author: Zale Yu <cy...@nu...>
Date: Sun Nov 6 23:32:22 2022 +0800
flash: support Nuvoton M541 & NUC442/472 series
This patch is picked from the flash part of OpenOCD-Nuvoton's commit
("flash: supported Nuvoton M4 series. jtag: Used HW reset instead of
auto reset. tcl: added a configuration file for Nuvoton M4 series.") [1]
to support flashing Nuvoton's Cortex-M4 chips: M541 & NUC442/472 series.
The code comes from the commit basically. Jian-Hong Pan tweaked for the
compatibility with current OpenOCD. So, leave the author as Zale Yu.
[1]: https://github.com/OpenNuvoton/OpenOCD-Nuvoton/commit/c2d5b8bfc705
Signed-off-by: Zale Yu <cy...@nu...>
Signed-off-by: Jian-Hong Pan <chi...@gm...>
Change-Id: I9dc69eccb851df14c1b0ce2f619d7b3da0aa92aa
Reviewed-on: https://review.openocd.org/c/openocd/+/7329
Tested-by: jenkins
Reviewed-by: Antonio Borneo <bor...@gm...>
diff --git a/src/flash/nor/numicro.c b/src/flash/nor/numicro.c
index bafad80ce..2bba7b746 100644
--- a/src/flash/nor/numicro.c
+++ b/src/flash/nor/numicro.c
@@ -466,6 +466,65 @@ static const struct numicro_cpu_type numicro_parts[] = {
{"NUC240SE3AE", 0x10024027, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 8 * 1024, 8)},
{"NUC240VE3AE", 0x10024018, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 8 * 1024, 8)},
+ /* M451 */
+ {"M451LC3AE", 0x00945101, NUMICRO_BANKS_GENERAL(40 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M451LD3AE", 0x00945100, NUMICRO_BANKS_GENERAL(72 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M451LE6AE", 0x00845101, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M451LG6AE", 0x00845100, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M451MLC3AE", 0x00945001, NUMICRO_BANKS_GENERAL(40 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M451MLD3AE", 0x00945000, NUMICRO_BANKS_GENERAL(72 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M451MLE6AE", 0x00845001, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M451MLG6AE", 0x00845000, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M451MSC3AE", 0x00945011, NUMICRO_BANKS_GENERAL(40 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M451MSD3AE", 0x00945010, NUMICRO_BANKS_GENERAL(72 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M451RC3AE", 0x00945121, NUMICRO_BANKS_GENERAL(40 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M451RD3AE", 0x00945120, NUMICRO_BANKS_GENERAL(72 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M451RE6AE", 0x00845121, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M451RG6AE", 0x00845120, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M451VE6AE", 0x00845131, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M451VG6AE", 0x00845130, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M452LC3AE", 0x00945201, NUMICRO_BANKS_GENERAL(40 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M452LD3AE", 0x00945200, NUMICRO_BANKS_GENERAL(72 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M452LE6AE", 0x00845201, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M452LG6AE", 0x00845200, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M452RD3AE", 0x00945220, NUMICRO_BANKS_GENERAL(72 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M452RE6AE", 0x00845221, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M452RG6AE", 0x00845220, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M453LC3AE", 0x00945301, NUMICRO_BANKS_GENERAL(40 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M453LD3AE", 0x00945300, NUMICRO_BANKS_GENERAL(72 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M453LE6AE", 0x00845301, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M453LG6AE", 0x00845300, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M453RD3AE", 0x00945320, NUMICRO_BANKS_GENERAL(72 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M453RE6AE", 0x00845321, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M453RG6AE", 0x00845320, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M453VD3AE", 0x00945330, NUMICRO_BANKS_GENERAL(72 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M453VE6AE", 0x00845331, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M453VG6AE", 0x00845330, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M4TKVG6AE", 0x00845430, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M4TKVE6AE", 0x00845431, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M4TKRG6AE", 0x00845420, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M4TKRE6AE", 0x00845421, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M4TKLG6AE", 0x00845400, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M4TKLE6AE", 0x00845401, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+
+ /* NUC442_472 */
+ {"NUC442JG8AE", 0x00044203, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 16 * 1024, 16)},
+ {"NUC442JI8AE", 0x00044201, NUMICRO_BANKS_GENERAL(512 * 1024, 0 * 1024, 16 * 1024, 16)},
+ {"NUC442KG8AE", 0x00044206, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 16 * 1024, 16)},
+ {"NUC442KI8AE", 0x00044204, NUMICRO_BANKS_GENERAL(512 * 1024, 0 * 1024, 16 * 1024, 16)},
+ {"NUC442RG8AE", 0x00044212, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 16 * 1024, 16)},
+ {"NUC442RI8AE", 0x00044210, NUMICRO_BANKS_GENERAL(512 * 1024, 0 * 1024, 16 * 1024, 16)},
+ {"NUC442VG8AE", 0x00044209, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 16 * 1024, 16)},
+ {"NUC442VI8AE", 0x00044207, NUMICRO_BANKS_GENERAL(512 * 1024, 0 * 1024, 16 * 1024, 16)},
+ {"NUC472HG8AE", 0x00047203, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 16 * 1024, 16)},
+ {"NUC472HI8AE", 0x00047201, NUMICRO_BANKS_GENERAL(512 * 1024, 0 * 1024, 16 * 1024, 16)},
+ {"NUC472JG8AE", 0x00047206, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 16 * 1024, 16)},
+ {"NUC472JI8AE", 0x00047204, NUMICRO_BANKS_GENERAL(512 * 1024, 0 * 1024, 16 * 1024, 16)},
+ {"NUC472KG8AE", 0x00047209, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 16 * 1024, 16)},
+ {"NUC472KI8AE", 0x00047207, NUMICRO_BANKS_GENERAL(512 * 1024, 0 * 1024, 16 * 1024, 16)},
+ {"NUC472VG8AE", 0x00047212, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 16 * 1024, 16)},
+ {"NUC472VI8AE", 0x00047210, NUMICRO_BANKS_GENERAL(512 * 1024, 0 * 1024, 16 * 1024, 16)},
+
{"UNKNOWN", 0x00000000, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 16 * 1024, 8)},
};
@@ -476,32 +535,53 @@ struct numicro_flash_bank {
const struct numicro_cpu_type *cpu;
};
+/* Private variables */
+uint32_t m_page_size = NUMICRO_PAGESIZE;
+uint32_t m_address_bias_offset;
+
/* Private methods */
+static int numicro_get_arm_arch(struct target *target)
+{
+ struct armv7m_common *armv7m = target_to_armv7m(target);
+
+ if (armv7m->arm.arch != ARM_ARCH_V6M) {
+ LOG_DEBUG("NuMicro arm architecture: armv7m\n");
+ m_page_size = NUMICRO_PAGESIZE * 4;
+ m_address_bias_offset = 0x10000000;
+ } else {
+ LOG_DEBUG("NuMicro arm architecture: armv6m\n");
+ m_page_size = NUMICRO_PAGESIZE;
+ m_address_bias_offset = 0x0;
+ }
+
+ return ERROR_OK;
+}
+
static int numicro_reg_unlock(struct target *target)
{
uint32_t is_protected;
int retval = ERROR_OK;
/* Check to see if NUC is register unlocked or not */
- retval = target_read_u32(target, NUMICRO_SYS_WRPROT, &is_protected);
+ retval = target_read_u32(target, NUMICRO_SYS_WRPROT - m_address_bias_offset, &is_protected);
if (retval != ERROR_OK)
return retval;
LOG_DEBUG("protected = 0x%08" PRIx32 "", is_protected);
if (is_protected == 0) { /* means protected - so unlock it */
/* unlock flash registers */
- retval = target_write_u32(target, NUMICRO_SYS_WRPROT, REG_KEY1);
+ retval = target_write_u32(target, NUMICRO_SYS_WRPROT - m_address_bias_offset, REG_KEY1);
if (retval != ERROR_OK)
return retval;
- retval = target_write_u32(target, NUMICRO_SYS_WRPROT, REG_KEY2);
+ retval = target_write_u32(target, NUMICRO_SYS_WRPROT - m_address_bias_offset, REG_KEY2);
if (retval != ERROR_OK)
return retval;
- retval = target_write_u32(target, NUMICRO_SYS_WRPROT, REG_KEY3);
+ retval = target_write_u32(target, NUMICRO_SYS_WRPROT - m_address_bias_offset, REG_KEY3);
if (retval != ERROR_OK)
return retval;
}
/* Check that unlock worked */
- retval = target_read_u32(target, NUMICRO_SYS_WRPROT, &is_protected);
+ retval = target_read_u32(target, NUMICRO_SYS_WRPROT - m_address_bias_offset, &is_protected);
if (retval != ERROR_OK)
return retval;
@@ -529,27 +609,27 @@ static int numicro_init_isp(struct target *target)
return retval;
/* Enable ISP/SRAM/TICK Clock */
- retval = target_read_u32(target, NUMICRO_SYSCLK_AHBCLK, ®_stat);
+ retval = target_read_u32(target, NUMICRO_SYSCLK_AHBCLK - m_address_bias_offset, ®_stat);
if (retval != ERROR_OK)
return retval;
reg_stat |= AHBCLK_ISP_EN | AHBCLK_SRAM_EN | AHBCLK_TICK_EN;
- retval = target_write_u32(target, NUMICRO_SYSCLK_AHBCLK, reg_stat);
+ retval = target_write_u32(target, NUMICRO_SYSCLK_AHBCLK - m_address_bias_offset, reg_stat);
if (retval != ERROR_OK)
return retval;
/* Enable ISP */
- retval = target_read_u32(target, NUMICRO_FLASH_ISPCON, ®_stat);
+ retval = target_read_u32(target, NUMICRO_FLASH_ISPCON - m_address_bias_offset, ®_stat);
if (retval != ERROR_OK)
return retval;
reg_stat |= ISPCON_ISPFF | ISPCON_LDUEN | ISPCON_APUEN | ISPCON_CFGUEN | ISPCON_ISPEN;
- retval = target_write_u32(target, NUMICRO_FLASH_ISPCON, reg_stat);
+ retval = target_write_u32(target, NUMICRO_FLASH_ISPCON - m_address_bias_offset, reg_stat);
if (retval != ERROR_OK)
return retval;
/* Write one to undocumented flash control register */
- retval = target_write_u32(target, NUMICRO_FLASH_CHEAT, 1);
+ retval = target_write_u32(target, NUMICRO_FLASH_CHEAT - m_address_bias_offset, 1);
if (retval != ERROR_OK)
return retval;
@@ -561,29 +641,28 @@ static uint32_t numicro_fmc_cmd(struct target *target, uint32_t cmd, uint32_t ad
uint32_t timeout, status;
int retval = ERROR_OK;
- retval = target_write_u32(target, NUMICRO_FLASH_ISPCMD, cmd);
+ retval = target_write_u32(target, NUMICRO_FLASH_ISPCMD - m_address_bias_offset, cmd);
if (retval != ERROR_OK)
return retval;
- retval = target_write_u32(target, NUMICRO_FLASH_ISPDAT, wdata);
+ retval = target_write_u32(target, NUMICRO_FLASH_ISPDAT - m_address_bias_offset, wdata);
if (retval != ERROR_OK)
return retval;
- retval = target_write_u32(target, NUMICRO_FLASH_ISPADR, addr);
+ retval = target_write_u32(target, NUMICRO_FLASH_ISPADR - m_address_bias_offset, addr);
if (retval != ERROR_OK)
return retval;
- retval = target_write_u32(target, NUMICRO_FLASH_ISPTRG, ISPTRG_ISPGO);
+ retval = target_write_u32(target, NUMICRO_FLASH_ISPTRG - m_address_bias_offset, ISPTRG_ISPGO);
if (retval != ERROR_OK)
return retval;
/* Wait for busy to clear - check the GO flag */
timeout = 100;
for (;;) {
- retval = target_read_u32(target, NUMICRO_FLASH_ISPTRG, &status);
+ retval = target_read_u32(target, NUMICRO_FLASH_ISPTRG - m_address_bias_offset, &status);
if (retval != ERROR_OK)
return retval;
- LOG_DEBUG("status: 0x%" PRIx32 "", status);
if ((status & (ISPTRG_ISPGO)) == 0)
break;
if (timeout-- <= 0) {
@@ -593,79 +672,138 @@ static uint32_t numicro_fmc_cmd(struct target *target, uint32_t cmd, uint32_t ad
busy_sleep(1); /* can use busy sleep for short times. */
}
- retval = target_read_u32(target, NUMICRO_FLASH_ISPDAT, rdata);
+ retval = target_read_u32(target, NUMICRO_FLASH_ISPDAT - m_address_bias_offset, rdata);
if (retval != ERROR_OK)
return retval;
return ERROR_OK;
}
-
/* NuMicro Program-LongWord Microcodes */
static const uint8_t numicro_flash_write_code[] = {
- /* Params:
- * r0 - workarea buffer / result
- * r1 - target address
- * r2 - wordcount
- * Clobbered:
- * r4 - tmp
- * r5 - tmp
- * r6 - tmp
- * r7 - tmp
- */
-
- /* .L1: */
- /* for(register uint32_t i=0;i<wcount;i++){ */
+ /* Params:
+ * r0 - workarea buffer / result
+ * r1 - target address
+ * r2 - wordcount
+ * Clobbered:
+ * r4 - tmp
+ * r5 - tmp
+ * r6 - tmp
+ * r7 - tmp
+ */
+
+ /* .L1: */
+ /* for(register uint32_t i=0;i<wcount;i++){ */
0x04, 0x1C, /* mov r4, r0 */
0x00, 0x23, /* mov r3, #0 */
- /* .L2: */
+ /* .L2: */
0x0D, 0x1A, /* sub r5, r1, r0 */
0x67, 0x19, /* add r7, r4, r7 */
0x93, 0x42, /* cmp r3, r2 */
0x0C, 0xD0, /* beq .L7 */
- /* .L4: */
- /* NUMICRO_FLASH_ISPADR = faddr; */
+ /* .L4: */
+ /* NUMICRO_FLASH_ISPADR = faddr; */
0x08, 0x4E, /* ldr r6, .L8 */
0x37, 0x60, /* str r7, [r6] */
- /* NUMICRO_FLASH_ISPDAT = *pLW; */
+ /* NUMICRO_FLASH_ISPDAT = *pLW; */
0x80, 0xCC, /* ldmia r4!, {r7} */
0x08, 0x4D, /* ldr r5, .L8+4 */
0x2F, 0x60, /* str r7, [r5] */
- /* faddr += 4; */
- /* pLW++; */
- /* Trigger write action */
- /* NUMICRO_FLASH_ISPTRG = ISPTRG_ISPGO; */
+ /* faddr += 4; */
+ /* pLW++; */
+ /* Trigger write action */
+ /* NUMICRO_FLASH_ISPTRG = ISPTRG_ISPGO; */
0x08, 0x4D, /* ldr r5, .L8+8 */
0x01, 0x26, /* mov r6, #1 */
0x2E, 0x60, /* str r6, [r5] */
- /* .L3: */
- /* while((NUMICRO_FLASH_ISPTRG & ISPTRG_ISPGO) == ISPTRG_ISPGO){}; */
+ /* .L3: */
+ /* while((NUMICRO_FLASH_ISPTRG & ISPTRG_ISPGO) == ISPTRG_ISPGO){}; */
0x2F, 0x68, /* ldr r7, [r5] */
0xFF, 0x07, /* lsl r7, r7, #31 */
0xFC, 0xD4, /* bmi .L3 */
0x01, 0x33, /* add r3, r3, #1 */
0xEE, 0xE7, /* b .L2 */
- /* .L7: */
- /* return (NUMICRO_FLASH_ISPCON & ISPCON_ISPFF); */
+ /* .L7: */
+ /* return (NUMICRO_FLASH_ISPCON & ISPCON_ISPFF); */
0x05, 0x4B, /* ldr r3, .L8+12 */
0x18, 0x68, /* ldr r0, [r3] */
0x40, 0x21, /* mov r1, #64 */
0x08, 0x40, /* and r0, r1 */
- /* .L9: */
+ /* .L9: */
0x00, 0xBE, /* bkpt #0 */
- /* .L8: */
+ /* .L8: */
0x04, 0xC0, 0x00, 0x50,/* .word 1342226436 */
0x08, 0xC0, 0x00, 0x50,/* .word 1342226440 */
0x10, 0xC0, 0x00, 0x50,/* .word 1342226448 */
0x00, 0xC0, 0x00, 0x50 /* .word 1342226432 */
};
+
+static const uint8_t numicro_m4_flash_write_code[] = {
+ /* Params:
+ * r0 - workarea buffer / result
+ * r1 - target address
+ * r2 - wordcount
+ * Clobbered:
+ * r4 - tmp
+ * r5 - tmp
+ * r6 - tmp
+ * r7 - tmp
+ */
+
+ /* .L1: */
+ /* for(register uint32_t i=0;i<wcount;i++){ */
+ 0x04, 0x1C, /* mov r4, r0 */
+ 0x00, 0x23, /* mov r3, #0 */
+ /* .L2: */
+ 0x0D, 0x1A, /* sub r5, r1, r0 */
+ 0x67, 0x19, /* add r7, r4, r7 */
+ 0x93, 0x42, /* cmp r3, r2 */
+ 0x0C, 0xD0, /* beq .L7 */
+ /* .L4: */
+ /* NUMICRO_FLASH_ISPADR = faddr; */
+ 0x08, 0x4E, /* ldr r6, .L8 */
+ 0x37, 0x60, /* str r7, [r6] */
+ /* NUMICRO_FLASH_ISPDAT = *pLW; */
+ 0x80, 0xCC, /* ldmia r4!, {r7} */
+ 0x08, 0x4D, /* ldr r5, .L8+4 */
+ 0x2F, 0x60, /* str r7, [r5] */
+ /* faddr += 4; */
+ /* pLW++; */
+ /* Trigger write action */
+ /* NUMICRO_FLASH_ISPTRG = ISPTRG_ISPGO; */
+ 0x08, 0x4D, /* ldr r5, .L8+8 */
+ 0x01, 0x26, /* mov r6, #1 */
+ 0x2E, 0x60, /* str r6, [r5] */
+ /* .L3: */
+ /* while((NUMICRO_FLASH_ISPTRG & ISPTRG_ISPGO) == ISPTRG_ISPGO){}; */
+ 0x2F, 0x68, /* ldr r7, [r5] */
+ 0xFF, 0x07, /* lsl r7, r7, #31 */
+ 0xFC, 0xD4, /* bmi .L3 */
+
+ 0x01, 0x33, /* add r3, r3, #1 */
+ 0xEE, 0xE7, /* b .L2 */
+ /* .L7: */
+ /* return (NUMICRO_FLASH_ISPCON & ISPCON_ISPFF); */
+ 0x05, 0x4B, /* ldr r3, .L8+12 */
+ 0x18, 0x68, /* ldr r0, [r3] */
+ 0x40, 0x21, /* mov r1, #64 */
+ 0x08, 0x40, /* and r0, r1 */
+ /* .L9: */
+ 0x00, 0xBE, /* bkpt #0 */
+ /* .L8: */
+ 0x04, 0xC0, 0x00, 0x40,/* .word 0x4000C004 */
+ 0x08, 0xC0, 0x00, 0x40,/* .word 0x4000C008 */
+ 0x10, 0xC0, 0x00, 0x40,/* .word 0x4000C010 */
+ 0x00, 0xC0, 0x00, 0x40 /* .word 0x4000C000 */
+};
+
/* Program LongWord Block Write */
static int numicro_writeblock(struct flash_bank *bank, const uint8_t *buffer,
uint32_t offset, uint32_t count)
{
struct target *target = bank->target;
- uint32_t buffer_size = 1024; /* Default minimum value */
+ uint32_t buffer_size = 1024; /* Default minimum value */
struct working_area *write_algorithm;
struct working_area *source;
uint32_t address = bank->base + offset;
@@ -693,18 +831,34 @@ static int numicro_writeblock(struct flash_bank *bank, const uint8_t *buffer,
LOG_WARNING("offset 0x%" PRIx32 " breaks required 2-byte alignment", offset);
return ERROR_FLASH_DST_BREAKS_ALIGNMENT;
}
+ /* Difference between M0 and M4 */
+ if (m_page_size == NUMICRO_PAGESIZE) {
+ /* allocate working area with flash programming code */
+ if (target_alloc_working_area(target, sizeof(numicro_flash_write_code),
+ &write_algorithm) != ERROR_OK) {
+ LOG_WARNING("no working area available, can't do block memory writes");
+ return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
+ }
- /* allocate working area with flash programming code */
- if (target_alloc_working_area(target, sizeof(numicro_flash_write_code),
+ retval = target_write_buffer(target, write_algorithm->address,
+ sizeof(numicro_flash_write_code), numicro_flash_write_code);
+ if (retval != ERROR_OK)
+ return retval;
+ } else { /* for M4 */
+ /* allocate working area with flash programming code */
+ if (target_alloc_working_area(target, sizeof(numicro_m4_flash_write_code),
&write_algorithm) != ERROR_OK) {
- LOG_WARNING("no working area available, can't do block memory writes");
- return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
- }
+ LOG_WARNING("no working area available, can't do block memory writes");
+ return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
+ }
- retval = target_write_buffer(target, write_algorithm->address,
- sizeof(numicro_flash_write_code), numicro_flash_write_code);
- if (retval != ERROR_OK)
- return retval;
+ retval = target_write_buffer(target, write_algorithm->address,
+ sizeof(numicro_m4_flash_write_code), numicro_m4_flash_write_code);
+ if (retval != ERROR_OK)
+ return retval;
+
+ buffer_size = m_page_size;
+ }
/* memory buffer */
while (target_alloc_working_area(target, buffer_size, &source) != ERROR_OK) {
@@ -775,13 +929,14 @@ static int numicro_protect_check(struct flash_bank *bank)
LOG_INFO("Nuvoton NuMicro: Flash Lock Check...");
+ numicro_get_arm_arch(target);
retval = numicro_init_isp(target);
if (retval != ERROR_OK)
return retval;
/* Read CONFIG0,CONFIG1 */
- numicro_fmc_cmd(target, ISPCMD_READ, NUMICRO_CONFIG0, 0 , &config[0]);
- numicro_fmc_cmd(target, ISPCMD_READ, NUMICRO_CONFIG1, 0 , &config[1]);
+ numicro_fmc_cmd(target, ISPCMD_READ, NUMICRO_CONFIG0 - m_address_bias_offset, 0, &config[0]);
+ numicro_fmc_cmd(target, ISPCMD_READ, NUMICRO_CONFIG1 - m_address_bias_offset, 0, &config[1]);
LOG_DEBUG("CONFIG0: 0x%" PRIx32 ",CONFIG1: 0x%" PRIx32 "", config[0], config[1]);
@@ -821,31 +976,34 @@ static int numicro_erase(struct flash_bank *bank, unsigned int first,
LOG_INFO("Nuvoton NuMicro: Sector Erase ... (%u to %u)", first, last);
+ numicro_get_arm_arch(target);
retval = numicro_init_isp(target);
if (retval != ERROR_OK)
return retval;
- retval = target_write_u32(target, NUMICRO_FLASH_ISPCMD, ISPCMD_ERASE);
+ retval = target_write_u32(target, NUMICRO_FLASH_ISPCMD - m_address_bias_offset, ISPCMD_ERASE);
if (retval != ERROR_OK)
return retval;
for (unsigned int i = first; i <= last; i++) {
- LOG_DEBUG("erasing sector %u at address " TARGET_ADDR_FMT, i,
- bank->base + bank->sectors[i].offset);
- retval = target_write_u32(target, NUMICRO_FLASH_ISPADR, bank->base + bank->sectors[i].offset);
+ LOG_DEBUG("erasing sector %u at address " TARGET_ADDR_FMT, i, bank->base + bank->sectors[i].offset);
+ retval = target_write_u32(target,
+ NUMICRO_FLASH_ISPADR - m_address_bias_offset,
+ bank->base + bank->sectors[i].offset);
if (retval != ERROR_OK)
return retval;
- retval = target_write_u32(target, NUMICRO_FLASH_ISPTRG, ISPTRG_ISPGO); /* This is the only bit available */
+ retval = target_write_u32(target,
+ NUMICRO_FLASH_ISPTRG - m_address_bias_offset,
+ ISPTRG_ISPGO); /* This is the only bit available */
if (retval != ERROR_OK)
return retval;
/* wait for busy to clear - check the GO flag */
timeout = 100;
for (;;) {
- retval = target_read_u32(target, NUMICRO_FLASH_ISPTRG, &status);
+ retval = target_read_u32(target, NUMICRO_FLASH_ISPTRG - m_address_bias_offset, &status);
if (retval != ERROR_OK)
return retval;
- LOG_DEBUG("status: 0x%" PRIx32 "", status);
if (status == 0)
break;
if (timeout-- <= 0) {
@@ -856,13 +1014,13 @@ static int numicro_erase(struct flash_bank *bank, unsigned int first,
}
/* check for failure */
- retval = target_read_u32(target, NUMICRO_FLASH_ISPCON, &status);
+ retval = target_read_u32(target, NUMICRO_FLASH_ISPCON - m_address_bias_offset, &status);
if (retval != ERROR_OK)
return retval;
if ((status & ISPCON_ISPFF) != 0) {
LOG_DEBUG("failure: 0x%" PRIx32 "", status);
/* if bit is set, then must write to it to clear it. */
- retval = target_write_u32(target, NUMICRO_FLASH_ISPCON, (status | ISPCON_ISPFF));
+ retval = target_write_u32(target, NUMICRO_FLASH_ISPCON - m_address_bias_offset, (status | ISPCON_ISPFF));
if (retval != ERROR_OK)
return retval;
}
@@ -889,11 +1047,12 @@ static int numicro_write(struct flash_bank *bank, const uint8_t *buffer,
LOG_INFO("Nuvoton NuMicro: Flash Write ...");
+ numicro_get_arm_arch(target);
retval = numicro_init_isp(target);
if (retval != ERROR_OK)
return retval;
- retval = target_write_u32(target, NUMICRO_FLASH_ISPCMD, ISPCMD_WRITE);
+ retval = target_write_u32(target, NUMICRO_FLASH_ISPCMD - m_address_bias_offset, ISPCMD_WRITE);
if (retval != ERROR_OK)
return retval;
@@ -913,26 +1072,34 @@ static int numicro_write(struct flash_bank *bank, const uint8_t *buffer,
/* program command */
for (uint32_t i = 0; i < count; i += 4) {
+ /* write 4 bytes each time with 0xff padding to avoid unaligned case */
+ uint8_t padding[4] = {0xff, 0xff, 0xff, 0xff};
+ memcpy(padding, buffer + i, MIN(4, count - i));
- LOG_DEBUG("write longword @ %08" PRIX32, offset + i);
-
- retval = target_write_u32(target, NUMICRO_FLASH_ISPADR, bank->base + offset + i);
+ retval = target_write_u32(target,
+ NUMICRO_FLASH_ISPADR - m_address_bias_offset,
+ bank->base + offset + i);
if (retval != ERROR_OK)
return retval;
- retval = target_write_memory(target, NUMICRO_FLASH_ISPDAT, 4, 1, buffer + i);
+ retval = target_write_memory(target,
+ NUMICRO_FLASH_ISPDAT - m_address_bias_offset,
+ 4, 1, padding);
if (retval != ERROR_OK)
return retval;
- retval = target_write_u32(target, NUMICRO_FLASH_ISPTRG, ISPTRG_ISPGO);
+ retval = target_write_u32(target,
+ NUMICRO_FLASH_ISPTRG - m_address_bias_offset,
+ ISPTRG_ISPGO);
if (retval != ERROR_OK)
return retval;
/* wait for busy to clear - check the GO flag */
timeout = 100;
for (;;) {
- retval = target_read_u32(target, NUMICRO_FLASH_ISPTRG, &status);
+ retval = target_read_u32(target,
+ NUMICRO_FLASH_ISPTRG - m_address_bias_offset,
+ &status);
if (retval != ERROR_OK)
return retval;
- LOG_DEBUG("status: 0x%" PRIx32 "", status);
if (status == 0)
break;
if (timeout-- <= 0) {
@@ -946,13 +1113,15 @@ static int numicro_write(struct flash_bank *bank, const uint8_t *buffer,
}
/* check for failure */
- retval = target_read_u32(target, NUMICRO_FLASH_ISPCON, &status);
+ retval = target_read_u32(target, NUMICRO_FLASH_ISPCON - m_address_bias_offset, &status);
if (retval != ERROR_OK)
return retval;
if ((status & ISPCON_ISPFF) != 0) {
LOG_DEBUG("failure: 0x%" PRIx32 "", status);
/* if bit is set, then must write to it to clear it. */
- retval = target_write_u32(target, NUMICRO_FLASH_ISPCON, (status | ISPCON_ISPFF));
+ retval = target_write_u32(target,
+ NUMICRO_FLASH_ISPCON - m_address_bias_offset,
+ (status | ISPCON_ISPFF));
if (retval != ERROR_OK)
return retval;
} else {
@@ -970,8 +1139,9 @@ static int numicro_get_cpu_type(struct target *target, const struct numicro_cpu_
uint32_t part_id;
int retval = ERROR_OK;
+ numicro_get_arm_arch(target);
/* Read NuMicro PartID */
- retval = target_read_u32(target, NUMICRO_SYS_BASE, &part_id);
+ retval = target_read_u32(target, NUMICRO_SYS_BASE - m_address_bias_offset, &part_id);
if (retval != ERROR_OK) {
LOG_WARNING("NuMicro flash driver: Failed to Get PartID\n");
return ERROR_FLASH_OPERATION_FAILED;
@@ -1023,7 +1193,7 @@ static int numicro_probe(struct flash_bank *bank)
return ERROR_FLASH_OPERATION_FAILED;
}
- num_pages = flash_size / NUMICRO_PAGESIZE;
+ num_pages = flash_size / m_page_size;
bank->num_sectors = num_pages;
bank->sectors = malloc(sizeof(struct flash_sector) * num_pages);
@@ -1031,10 +1201,10 @@ static int numicro_probe(struct flash_bank *bank)
for (int i = 0; i < num_pages; i++) {
bank->sectors[i].offset = offset;
- bank->sectors[i].size = NUMICRO_PAGESIZE;
+ bank->sectors[i].size = m_page_size;
bank->sectors[i].is_erased = -1;
bank->sectors[i].is_protected = 0;
- offset += NUMICRO_PAGESIZE;
+ offset += m_page_size;
}
struct numicro_flash_bank *numicro_info = bank->driver_priv;
@@ -1073,7 +1243,6 @@ FLASH_BANK_COMMAND_HANDLER(numicro_flash_bank_command)
bank->write_start_alignment = bank->write_end_alignment = 4;
return ERROR_OK;
-
}
COMMAND_HANDLER(numicro_handle_read_isp_command)
@@ -1089,6 +1258,7 @@ COMMAND_HANDLER(numicro_handle_read_isp_command)
struct target *target = get_current_target(CMD_CTX);
+ numicro_get_arm_arch(target);
retval = numicro_init_isp(target);
if (retval != ERROR_OK)
return retval;
@@ -1116,6 +1286,7 @@ COMMAND_HANDLER(numicro_handle_write_isp_command)
struct target *target = get_current_target(CMD_CTX);
+ numicro_get_arm_arch(target);
retval = numicro_init_isp(target);
if (retval != ERROR_OK)
return retval;
@@ -1138,6 +1309,7 @@ COMMAND_HANDLER(numicro_handle_chip_erase_command)
struct target *target = get_current_target(CMD_CTX);
+ numicro_get_arm_arch(target);
retval = numicro_init_isp(target);
if (retval != ERROR_OK)
return retval;
-----------------------------------------------------------------------
Summary of changes:
src/flash/nor/numicro.c | 334 ++++++++++++++++++++++++++++++++++++------------
1 file changed, 253 insertions(+), 81 deletions(-)
hooks/post-receive
--
Main OpenOCD repository
|
|
From: openocd-gerrit <ope...@us...> - 2023-01-15 15:01:55
|
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 776e045de0a2ce6644ae19de99820f02628dfbcc (commit)
from 11ee500bffe488eba95cea37c99cee6b196e04ff (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 776e045de0a2ce6644ae19de99820f02628dfbcc
Author: Zale Yu <cy...@nu...>
Date: Sun Nov 6 22:54:37 2022 +0800
flash/nor/numicro: reorder the parts list
This patch is picked from the flash part of OpenOCD-Nuvoton's commit
("flash: supported Nuvoton M4 series. jtag: Used HW reset instead of
auto reset. tcl: added a configuration file for Nuvoton M4 series.") [1]
It reorders Nuvoton MCU part list and spreads out the way to define the
banks' base address & size of the parts.
The code comes from the commit basically. Jian-Hong Pan tweaked for the
compatibility with current OpenOCD. So, leave the author as Zale Yu.
[1]: https://github.com/OpenNuvoton/OpenOCD-Nuvoton/commit/c2d5b8bfc705
Signed-off-by: Zale Yu <cy...@nu...>
Signed-off-by: Jian-Hong Pan <chi...@gm...>
Change-Id: I1f21f54dfdf53e5b8ea04d803347d1dbc8c321a0
Reviewed-on: https://review.openocd.org/c/openocd/+/7339
Tested-by: jenkins
Reviewed-by: Antonio Borneo <bor...@gm...>
diff --git a/src/flash/nor/numicro.c b/src/flash/nor/numicro.c
index 1a73eb26d..bafad80ce 100644
--- a/src/flash/nor/numicro.c
+++ b/src/flash/nor/numicro.c
@@ -12,6 +12,12 @@
* *
* Copyright (C) 2015 Nemui Trinomius *
* nem...@li... *
+ * *
+ * Copyright (C) 2017 Zale Yu *
+ * CY...@nu... *
+ * *
+ * Copyright (C) 2022 Jian-Hong Pan *
+ * chi...@gm... *
***************************************************************************/
#ifdef HAVE_CONFIG_H
@@ -114,1008 +120,353 @@ struct numicro_cpu_type {
struct numicro_flash_bank_type bank[NUMICRO_MAX_FLASH_BANKS];
};
-/* TODO : Support variable DataFlash region for 128kB Flash model */
-#define NUMICRO_BANKS_NUC100(aprom_size) \
- .n_banks = 4, \
- { {NUMICRO_APROM_BASE, (aprom_size)}, {NUMICRO_DATA_BASE, 4*1024}, {NUMICRO_LDROM_BASE, 4*1024}, \
- {NUMICRO_CONFIG_BASE, 1024} }
-
-#define NUMICRO_BANKS_M051(aprom_size) \
- .n_banks = 4, \
- { {NUMICRO_APROM_BASE, (aprom_size)}, {NUMICRO_DATA_BASE, 4*1024}, {NUMICRO_LDROM_BASE, 4*1024}, \
- {NUMICRO_CONFIG_BASE, 1024} }
-
-#define NUMICRO_BANKS_MINI51(aprom_size) \
- .n_banks = 3, \
- { {NUMICRO_APROM_BASE, (aprom_size)}, {NUMICRO_LDROM_BASE, 2*1024}, {NUMICRO_CONFIG_BASE, 512} }
-
-#define NUMICRO_BANKS_NANO(aprom_size) \
+/* If DataFlash size equals zero, it means the actual size depends on config settings. */
+#define NUMICRO_BANKS_GENERAL(aprom_size, data_size, ldrom_size, config_size) \
.n_banks = 4, \
- { {NUMICRO_APROM_BASE, (aprom_size)}, {NUMICRO_DATA_BASE, 4*1024}, {NUMICRO_LDROM_BASE, 4*1024}, \
- {NUMICRO_CONFIG_BASE, 1024} }
-
-#define NUMICRO_BANKS_NUC400(aprom_size) \
- .n_banks = 4, \
- { {NUMICRO_APROM_BASE, (aprom_size)}, {NUMICRO_DATA_BASE, 4*1024}, {NUMICRO_LDROM_BASE, 16*1024}, \
- {NUMICRO_CONFIG_BASE, 1024} }
-
+ {{NUMICRO_APROM_BASE, (aprom_size)}, \
+ {NUMICRO_DATA_BASE, (data_size)}, \
+ {NUMICRO_LDROM_BASE, (ldrom_size)}, \
+ {NUMICRO_CONFIG_BASE, (config_size)}}
static const struct numicro_cpu_type numicro_parts[] = {
/*PART NO*/ /*PART ID*/ /*Banks*/
- /* NUC100 Version B */
- {"NUC100LD2BN", 0x10010004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100LD1BN", 0x10010005, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100LD0BN", 0x10010027, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100LC2BN", 0x10010007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100LC1BN", 0x10010008, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100LC0BN", 0x10010028, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100LB2BN", 0x10010029, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC100LB1BN", 0x10010030, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC100LB0BN", 0x10010031, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC100LA2BN", 0x10010032, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC100LA1BN", 0x10010033, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC100LA0BN", 0x10010034, NUMICRO_BANKS_NUC100(8*1024)},
-
- {"NUC100RD2BN", 0x10010013, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100RD1BN", 0x10010014, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100RD0BN", 0x10010035, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100RC2BN", 0x10010016, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100RC1BN", 0x10010017, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100RC0BN", 0x10010036, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100RB2BN", 0x10010037, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC100RB1BN", 0x10010038, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC100RB0BN", 0x10010039, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC100RA2BN", 0x10010040, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC100RA1BN", 0x10010041, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC100RA0BN", 0x10010042, NUMICRO_BANKS_NUC100(8*1024)},
-
- /* NUC100 Version C */
- {"NUC100LE3CN", 0x20010000, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100LE2CN", 0x20010001, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100LE1CN", 0x20010002, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100LD3CN", 0x20010003, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100LD2CN", 0x20010004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100LD1CN", 0x20010005, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100LC3CN", 0x20010006, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100LC2CN", 0x20010007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100LC1CN", 0x20010008, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100RE3CN", 0x20010009, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100RE2CN", 0x20010010, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100RE1CN", 0x20010011, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100RD3CN", 0x20010012, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100RD2CN", 0x20010013, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100RD1CN", 0x20010014, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100RC3CN", 0x20010015, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100RC2CN", 0x20010016, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100RC1CN", 0x20010017, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100VE3CN", 0x20010018, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100VE2CN", 0x20010019, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100VE1CN", 0x20010020, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100VD3CN", 0x20010021, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100VD2CN", 0x20010022, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100VD1CN", 0x20010023, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100VC3CN", 0x20010024, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100VC2CN", 0x20010025, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100VC1CN", 0x20010026, NUMICRO_BANKS_NUC100(32*1024)},
-
- /* NUC100 Version B */
- {"NUC101YD2BN", 0x10010143, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101YD1BN", 0x10010144, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101YD0BN", 0x10010145, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101YC2BN", 0x10010146, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101YC1BN", 0x10010147, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101YC0BN", 0x10010148, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101YB2BN", 0x10010149, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC101YB1BN", 0x10010150, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC101YB0BN", 0x10010151, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC101YA2BN", 0x10010152, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC101YA1BN", 0x10010153, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC101YA0BN", 0x10010154, NUMICRO_BANKS_NUC100(8*1024)},
-
- {"NUC101LD2BN", 0x10010104, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101LD1BN", 0x10010105, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101LD0BN", 0x10010127, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101LC2BN", 0x10010107, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101LC1BN", 0x10010108, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101LC0BN", 0x10010128, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101LB2BN", 0x10010129, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC101LB1BN", 0x10010130, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC101LB0BN", 0x10010131, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC101LA2BN", 0x10010132, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC101LA1BN", 0x10010133, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC101LA0BN", 0x10010134, NUMICRO_BANKS_NUC100(8*1024)},
-
- {"NUC101RD2BN", 0x10010113, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101RD1BN", 0x10010114, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101RD0BN", 0x10010135, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101RC2BN", 0x10010116, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101RC1BN", 0x10010117, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101RC0BN", 0x10010136, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101RB2BN", 0x10010137, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC101RB1BN", 0x10010138, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC101RB0BN", 0x10010139, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC101RA2BN", 0x10010140, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC101RA1BN", 0x10010141, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC101RA0BN", 0x10010142, NUMICRO_BANKS_NUC100(8*1024)},
-
- /* NUC101 Version C */
- {"NUC101LE3CN", 0x20010100, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC101LE2CN", 0x20010101, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC101LE1CN", 0x20010102, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC101LD3CN", 0x20010103, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101LD2CN", 0x20010104, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101LD1CN", 0x20010105, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101LC3CN", 0x20010106, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101LC2CN", 0x20010107, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101LC1CN", 0x20010108, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101RE3CN", 0x20010109, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC101RE2CN", 0x20010110, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC101RE1CN", 0x20010111, NUMICRO_BANKS_NUC100(128*1024)},
-
- {"NUC101RD3CN", 0x20010112, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101RD2CN", 0x20010113, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101RD1CN", 0x20010114, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101RC3CN", 0x20010115, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101RC2CN", 0x20010116, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101RC1CN", 0x20010117, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101VE3CN", 0x20010118, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC101VE2CN", 0x20010119, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC101VE1CN", 0x20010120, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC101VD3CN", 0x20010121, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101VD2CN", 0x20010122, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101VD1CN", 0x20010123, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101VC3CN", 0x20010124, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101VC2CN", 0x20010125, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101VC1CN", 0x20010126, NUMICRO_BANKS_NUC100(32*1024)},
-
- /* NUC102 Version A */
- {"NUC102ZD2AN", 0x00010231, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC102ZC1AN", 0x00010235, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC102LD2AN", 0x00010204, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC102LC1AN", 0x00010208, NUMICRO_BANKS_NUC100(32*1024)},
-
- {"NUC102RB3AN", 0x00010248, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC102RB2AN", 0x00010249, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC102RB1AN", 0x00010250, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC102RA3AN", 0x00010251, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC102RA2AN", 0x00010252, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC102RA1AN", 0x00010253, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC102VB3AN", 0x00010254, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC102VB2AN", 0x00010255, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC102VB1AN", 0x00010256, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC102VA3AN", 0x00010257, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC102VA2AN", 0x00010258, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC102VA1AN", 0x00010259, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC102LA0AN", 0x00010260, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC102LB0AN", 0x00010261, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC102LC0AN", 0x00010262, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC102LD0AN", 0x00010263, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC102RA0AN", 0x00010264, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC102RB0AN", 0x00010265, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC102RC0AN", 0x00010266, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC102RD0AN", 0x00010267, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC102VA0AN", 0x00010268, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC102VB0AN", 0x00010269, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC102VC0AN", 0x00010270, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC102VD0AN", 0x00010271, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC102ZA0AN", 0x00010272, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC102ZB0AN", 0x00010273, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC102ZC0AN", 0x00010274, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC102ZD0AN", 0x00010275, NUMICRO_BANKS_NUC100(64*1024)},
-
- /* NUC102 Version A */
- {"NUC122LD2AN", 0x00012204, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC122LD1AN", 0x00012205, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC122LC2AN", 0x00012207, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC122LC1AN", 0x00012208, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC122RD2AN", 0x00012213, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC122RD1AN", 0x00012214, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC122RC2AN", 0x00012216, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC122RC1AN", 0x00012217, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC122SD2AN", 0x00012222, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC122SD1AN", 0x00012223, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC122SC2AN", 0x00012225, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC122SC1AN", 0x00012226, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC122ZD2AN", 0x00012231, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC122ZD1AN", 0x00012232, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC122ZC2AN", 0x00012234, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC122ZC1AN", 0x00012235, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC122ZB2AN", 0x00012237, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC122ZB1AN", 0x00012238, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC122ZA2AN", 0x00012240, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC122ZA1AN", 0x00012241, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC122LB2AN", 0x00012243, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC122LB1AN", 0x00012244, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC122LA2AN", 0x00012246, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC122LA1AN", 0x00012247, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC122RB2AN", 0x00012249, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC122RB1AN", 0x00012250, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC122RA2AN", 0x00012252, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC122RA1AN", 0x00012253, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC122SB2AN", 0x00012255, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC122SB1AN", 0x00012256, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC122SA2AN", 0x00012258, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC122SA1AN", 0x00012259, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC122LA0AN", 0x00012260, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC122LB0AN", 0x00012261, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC122LC0AN", 0x00012262, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC122LD0AN", 0x00012263, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC122RA0AN", 0x00012264, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC122RB0AN", 0x00012265, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC122RC0AN", 0x00012266, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC122RD0AN", 0x00012267, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC122SA0AN", 0x00012268, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC122SB0AN", 0x00012269, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC122SC0AN", 0x00012270, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC122SD0AN", 0x00012271, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC122ZA0AN", 0x00012272, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC122ZB0AN", 0x00012273, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC122ZC0AN", 0x00012274, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC122ZD0AN", 0x00012275, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC122YD2AN", 0x00012277, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC122YD1AN", 0x00012278, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC122YD0AN", 0x00012279, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC122YC2AN", 0x00012281, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC122YC1AN", 0x00012282, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC122YC0AN", 0x00012283, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC122YB2AN", 0x00012285, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC122YB1AN", 0x00012286, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC122YB0AN", 0x00012287, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC122YA2AN", 0x00012289, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC122YA1AN", 0x00012290, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC122YA0AN", 0x00012291, NUMICRO_BANKS_NUC100(8*1024)},
-
- /* NUC120 Version C */
- {"NUC120LD2BN", 0x10012004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120LD1BN", 0x10012005, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120LD0BN", 0x10012027, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120LC2BN", 0x10012007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120LC1BN", 0x10012008, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120LC0BN", 0x10012028, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120LB2BN", 0x10012029, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC120LB1BN", 0x10012030, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC120LB0BN", 0x10012031, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC120LA2BN", 0x10012032, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC120LA1BN", 0x10012033, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC120LA0BN", 0x10012034, NUMICRO_BANKS_NUC100(8*1024)},
-
- {"NUC120RD2BN", 0x10012013, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120RD1BN", 0x10012014, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120RD0BN", 0x10012035, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120RC2BN", 0x10012016, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120RC1BN", 0x10012017, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120RC0BN", 0x10012036, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120RB2BN", 0x10012037, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC120RB1BN", 0x10012038, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC120RB0BN", 0x10012039, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC120RA2BN", 0x10012040, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC120RA1BN", 0x10012041, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC120RA0BN", 0x10012042, NUMICRO_BANKS_NUC100(8*1024)},
-
- /* NUC120 Version C */
- {"NUC120LE3CN", 0x20012000, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120LE2CN", 0x20012001, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120LE1CN", 0x20012002, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120LD3CN", 0x20012003, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120LD2CN", 0x20012004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120LD1CN", 0x20012005, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120LC3CN", 0x20012006, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120LC2CN", 0x20012007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120LC1CN", 0x20012008, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120RE3CN", 0x20012009, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120RE2CN", 0x20012010, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120RE1CN", 0x20012011, NUMICRO_BANKS_NUC100(128*1024)},
-
- {"NUC120RD3CN", 0x20012012, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120RD2CN", 0x20012013, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120RD1CN", 0x20012014, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120RC3CN", 0x20012015, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120RC2CN", 0x20012016, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120RC1CN", 0x20012017, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120VE3CN", 0x20012018, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120VE2CN", 0x20012019, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120VE1CN", 0x20012020, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120VD3CN", 0x20012021, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120VD2CN", 0x20012022, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120VD1CN", 0x20012023, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120VC3CN", 0x20012024, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120VC2CN", 0x20012025, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120VC1CN", 0x20012026, NUMICRO_BANKS_NUC100(32*1024)},
-
- /* NUC120 Version B */
- {"NUC130LD2BN", 0x10013004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130LD1BN", 0x10013005, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130LD0BN", 0x10013027, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130LC2BN", 0x10013007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130LC1BN", 0x10013008, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130LC0BN", 0x10013028, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130LB2BN", 0x10013029, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC130LB1BN", 0x10013030, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC130LB0BN", 0x10013031, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC130LA2BN", 0x10013032, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC130LA1BN", 0x10013033, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC130LA0BN", 0x10013034, NUMICRO_BANKS_NUC100(8*1024)},
-
- {"NUC130RD2BN", 0x10013013, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130RD1BN", 0x10013014, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130RD0BN", 0x10013035, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130RC2BN", 0x10013016, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130RC1BN", 0x10013017, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130RC0BN", 0x10013036, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130RB2BN", 0x10013037, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC130RB1BN", 0x10013038, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC130RB0BN", 0x10013039, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC130RA2BN", 0x10013040, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC130RA1BN", 0x10013041, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC130RA0BN", 0x10013042, NUMICRO_BANKS_NUC100(8*1024)},
-
- /* NUC130 Version C */
- {"NUC130LE3CN", 0x20013000, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC130LE2CN", 0x20013001, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC130LE1CN", 0x20013002, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC130LD3CN", 0x20013003, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130LD2CN", 0x20013004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130LD1CN", 0x20013005, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130LC3CN", 0x20013006, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130LC2CN", 0x20013007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130LC1CN", 0x20013008, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130RE3CN", 0x20013009, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC130RE2CN", 0x20013010, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC130RE1CN", 0x20013011, NUMICRO_BANKS_NUC100(128*1024)},
-
- {"NUC130RD3CN", 0x20013012, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130RD2CN", 0x20013013, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130RD1CN", 0x20013014, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130RC3CN", 0x20013015, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130RC2CN", 0x20013016, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130RC1CN", 0x20013017, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130VE3CN", 0x20013018, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC130VE2CN", 0x20013019, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC130VE1CN", 0x20013020, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC130VD3CN", 0x20013021, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130VD2CN", 0x20013022, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130VD1CN", 0x20013023, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130VC3CN", 0x20013024, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130VC2CN", 0x20013025, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130VC1CN", 0x20013026, NUMICRO_BANKS_NUC100(32*1024)},
-
- /* NUC140 Version B */
- {"NUC140LD2BN", 0x10014004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140LD1BN", 0x10014005, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140LD0BN", 0x10014027, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140LC2BN", 0x10014007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140LC1BN", 0x10014008, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140LC0BN", 0x10014028, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140LB2BN", 0x10014029, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC140LB1BN", 0x10014030, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC140LB0BN", 0x10014031, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC140LA2BN", 0x10014032, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC140LA1BN", 0x10014033, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC140LA0BN", 0x10014034, NUMICRO_BANKS_NUC100(8*1024)},
-
- {"NUC140RD2BN", 0x10014013, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140RD1BN", 0x10014014, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140RD0BN", 0x10014035, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140RC2BN", 0x10014016, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140RC1BN", 0x10014017, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140RC0BN", 0x10014036, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140RB2BN", 0x10014037, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC140RB1BN", 0x10014038, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC140RB0BN", 0x10014039, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC140RA2BN", 0x10014040, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC140RA1BN", 0x10014041, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC140RA0BN", 0x10014042, NUMICRO_BANKS_NUC100(8*1024)},
-
- /* NUC140 Version C */
- {"NUC140LE3CN", 0x20014000, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC140LE2CN", 0x20014001, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC140LE1CN", 0x20014002, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC140LD3CN", 0x20014003, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140LD2CN", 0x20014004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140LD1CN", 0x20014005, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140LC3CN", 0x20014006, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140LC2CN", 0x20014007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140LC1CN", 0x20014008, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140RE3CN", 0x20014009, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC140RE2CN", 0x20014010, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC140RE1CN", 0x20014011, NUMICRO_BANKS_NUC100(128*1024)},
-
- {"NUC140RD3CN", 0x20014012, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140RD2CN", 0x20014013, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140RD1CN", 0x20014014, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140RC3CN", 0x20014015, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140RC2CN", 0x20014016, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140RC1CN", 0x20014017, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140VE3CN", 0x20014018, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC140VE2CN", 0x20014019, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC140VE1CN", 0x20014020, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC140VD3CN", 0x20014021, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140VD2CN", 0x20014022, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140VD1CN", 0x20014023, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140VC3CN", 0x20014024, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140VC2CN", 0x20014025, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140VC1CN", 0x20014026, NUMICRO_BANKS_NUC100(32*1024)},
-
- /* NUC100 Version A */
- {"NUC100LE3AN", 0x00010000, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100LE2AN", 0x00010001, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100LE1AN", 0x00010002, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100LD3AN", 0x00010003, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100LD2AN", 0x00010004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100LD1AN", 0x00010005, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100LC3AN", 0x00010006, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100LC2AN", 0x00010007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100LC1AN", 0x00010008, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100RE3AN", 0x00010009, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100RE2AN", 0x00010010, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100RE1AN", 0x00010011, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100RD3AN", 0x00010012, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100RD2AN", 0x00010013, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100RD1AN", 0x00010014, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100RC3AN", 0x00010015, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100RC2AN", 0x00010016, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100RC1AN", 0x00010017, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100VE3AN", 0x00010018, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100VE2AN", 0x00010019, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100VE1AN", 0x00010020, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100VD3AN", 0x00010021, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100VD2AN", 0x00010022, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100VD1AN", 0x00010023, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100VC3AN", 0x00010024, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100VC2AN", 0x00010025, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100VC1AN", 0x00010026, NUMICRO_BANKS_NUC100(32*1024)},
-
- /* NUC100 Version A */
- {"NUC101LE3AN", 0x00010100, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC101LE2AN", 0x00010101, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC101LE1AN", 0x00010102, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC101LD3AN", 0x00010103, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101LD2AN", 0x00010104, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101LD1AN", 0x00010105, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101LC3AN", 0x00010106, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101LC2AN", 0x00010107, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101LC1AN", 0x00010108, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101RE3AN", 0x00010109, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC101RE2AN", 0x00010110, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC101RE1AN", 0x00010111, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC101RD3AN", 0x00010112, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101RD2AN", 0x00010113, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101RD1AN", 0x00010114, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101RC3AN", 0x00010115, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101RC2AN", 0x00010116, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101RC1AN", 0x00010117, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101VE3AN", 0x00010118, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC101VE2AN", 0x00010119, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC101VE1AN", 0x00010120, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC101VD3AN", 0x00010121, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101VD2AN", 0x00010122, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101VD1AN", 0x00010123, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101VC3AN", 0x00010124, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101VC2AN", 0x00010125, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101VC1AN", 0x00010126, NUMICRO_BANKS_NUC100(32*1024)},
-
- /* NUC120 Version A */
- {"NUC120LE3AN", 0x00012000, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120LE2AN", 0x00012001, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120LE1AN", 0x00012002, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120LD3AN", 0x00012003, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120LD2AN", 0x00012004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120LD1AN", 0x00012005, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120LC3AN", 0x00012006, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120LC2AN", 0x00012007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120LC1AN", 0x00012008, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120RE3AN", 0x00012009, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120RE2AN", 0x00012010, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120RE1AN", 0x00012011, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120RD3AN", 0x00012012, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120RD2AN", 0x00012013, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120RD1AN", 0x00012014, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120RC3AN", 0x00012015, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120RC2AN", 0x00012016, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120RC1AN", 0x00012017, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120VE3AN", 0x00012018, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120VE2AN", 0x00012019, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120VE1AN", 0x00012020, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120VD3AN", 0x00012021, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120VD2AN", 0x00012022, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120VD1AN", 0x00012023, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120VC3AN", 0x00012024, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120VC2AN", 0x00012025, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120VC1AN", 0x00012026, NUMICRO_BANKS_NUC100(32*1024)},
-
- /* NUC120 Version A */
- {"NUC130LE3AN", 0x00013000, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC130LE2AN", 0x00013001, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC130LE1AN", 0x00013002, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC130LD3AN", 0x00013003, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130LD2AN", 0x00013004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130LD1AN", 0x00013005, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130LC3AN", 0x00013006, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130LC2AN", 0x00013007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130LC1AN", 0x00013008, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130RE3AN", 0x00013009, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC130RE2AN", 0x00013010, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC130RE1AN", 0x00013011, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC130RD3AN", 0x00013012, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130RD2AN", 0x00013013, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130RD1AN", 0x00013014, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130RC3AN", 0x00013015, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130RC2AN", 0x00013016, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130RC1AN", 0x00013017, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130VE3AN", 0x00013018, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC130VE2AN", 0x00013019, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC130VE1AN", 0x00013020, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC130VD3AN", 0x00013021, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130VD2AN", 0x00013022, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130VD1AN", 0x00013023, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130VC3AN", 0x00013024, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130VC2AN", 0x00013025, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130VC1AN", 0x00013026, NUMICRO_BANKS_NUC100(32*1024)},
-
- /* NUC140 Version A */
- {"NUC140LE3AN", 0x00014000, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC140LE2AN", 0x00014001, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC140LE1AN", 0x00014002, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC140LD3AN", 0x00014003, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140LD2AN", 0x00014004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140LD1AN", 0x00014005, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140LC3AN", 0x00014006, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140LC2AN", 0x00014007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140LC1AN", 0x00014008, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140RE3AN", 0x00014009, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC140RE2AN", 0x00014010, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC140RE1AN", 0x00014011, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC140RD3AN", 0x00014012, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140RD2AN", 0x00014013, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140RD1AN", 0x00014014, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140RC3AN", 0x00014015, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140RC2AN", 0x00014016, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140RC1AN", 0x00014017, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140VE3AN", 0x00014018, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC140VE2AN", 0x00014019, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC140VE1AN", 0x00014020, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC140VD3AN", 0x00014021, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140VD2AN", 0x00014022, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140VD1AN", 0x00014023, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140VC3AN", 0x00014024, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140VC2AN", 0x00014025, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140VC1AN", 0x00014026, NUMICRO_BANKS_NUC100(32*1024)},
-
-
- /* M052 */
- {"M052LAN" , 0x00005200, NUMICRO_BANKS_M051(8*1024)},
- {"M052PAN" , 0x00005201, NUMICRO_BANKS_M051(8*1024)},
- {"M052YAN" , 0x00005202, NUMICRO_BANKS_M051(8*1024)},
- {"M052ZAN" , 0x00005203, NUMICRO_BANKS_M051(8*1024)},
-
- /* M054 */
- {"M054LAN" , 0x00005400, NUMICRO_BANKS_M051(16*1024)},
- {"M054PAN" , 0x00005401, NUMICRO_BANKS_M051(16*1024)},
- {"M054YAN" , 0x00005402, NUMICRO_BANKS_M051(16*1024)},
- {"M054ZAN" , 0x00005403, NUMICRO_BANKS_M051(16*1024)},
-
- /* M058 */
- {"M058LAN" , 0x00005800, NUMICRO_BANKS_M051(32*1024)},
- {"M058PAN" , 0x00005801, NUMICRO_BANKS_M051(32*1024)},
- {"M058YAN" , 0x00005802, NUMICRO_BANKS_M051(32*1024)},
- {"M058ZAN" , 0x00005803, NUMICRO_BANKS_M051(32*1024)},
-
- /* M0516 */
- {"M0516LAN" , 0x00005A00, NUMICRO_BANKS_M051(64*1024)},
- {"M0516PAN" , 0x00005A01, NUMICRO_BANKS_M051(64*1024)},
- {"M0516YAN" , 0x00005A02, NUMICRO_BANKS_M051(64*1024)},
- {"M0516ZAN" , 0x00005A03, NUMICRO_BANKS_M051(64*1024)},
- {"M051LBN" , 0x10005100, NUMICRO_BANKS_M051(4*1024)},
- {"M051PBN" , 0x10005101, NUMICRO_BANKS_M051(4*1024)},
- {"M051YBN" , 0x10005102, NUMICRO_BANKS_M051(4*1024)},
- {"M051ZBN" , 0x10005103, NUMICRO_BANKS_M051(4*1024)},
- {"M052LBN" , 0x10005200, NUMICRO_BANKS_M051(8*1024)},
- {"M052PBN" , 0x10005201, NUMICRO_BANKS_M051(8*1024)},
- {"M052YBN" , 0x10005202, NUMICRO_BANKS_M051(8*1024)},
- {"M052ZBN" , 0x10005203, NUMICRO_BANKS_M051(8*1024)},
- {"M054LBN" , 0x10005400, NUMICRO_BANKS_M051(16*1024)},
- {"M054PBN" , 0x10005401, NUMICRO_BANKS_M051(16*1024)},
- {"M054YBN" , 0x10005402, NUMICRO_BANKS_M051(16*1024)},
- {"M054ZBN" , 0x10005403, NUMICRO_BANKS_M051(16*1024)},
- {"M058LBN" , 0x10005800, NUMICRO_BANKS_M051(32*1024)},
- {"M058PBN" , 0x10005801, NUMICRO_BANKS_M051(32*1024)},
- {"M058YBN" , 0x10005802, NUMICRO_BANKS_M051(32*1024)},
- {"M058ZBN" , 0x10005803, NUMICRO_BANKS_M051(32*1024)},
- {"M0516LBN" , 0x10005A00, NUMICRO_BANKS_M051(64*1024)},
- {"M0516PBN" , 0x10005A01, NUMICRO_BANKS_M051(64*1024)},
- {"M0516YBN" , 0x10005A02, NUMICRO_BANKS_M051(64*1024)},
- {"M0516ZBN" , 0x10005A03, NUMICRO_BANKS_M051(64*1024)},
- {"M052LDN" , 0x20005200, NUMICRO_BANKS_M051(8*1024)},
- {"M054LDN" , 0x20005400, NUMICRO_BANKS_M051(16*1024)},
- {"M058LDN" , 0x20005800, NUMICRO_BANKS_M051(32*1024)},
- {"M0516LDN" , 0x20005A00, NUMICRO_BANKS_M051(64*1024)},
- {"M052ZDN" , 0x20005203, NUMICRO_BANKS_M051(8*1024)},
- {"M054ZDN" , 0x20005403, NUMICRO_BANKS_M051(16*1024)},
- {"M058ZDN" , 0x20005803, NUMICRO_BANKS_M051(32*1024)},
- {"M0516ZDN" , 0x20005A03, NUMICRO_BANKS_M051(64*1024)},
- {"M052TDN" , 0x20005204, NUMICRO_BANKS_M051(8*1024)},
- {"M054TDN" , 0x20005404, NUMICRO_BANKS_M051(16*1024)},
- {"M058TDN" , 0x20005804, NUMICRO_BANKS_M051(32*1024)},
- {"M0516TDN" , 0x20005A04, NUMICRO_BANKS_M051(64*1024)},
- {"M052XDN" , 0x20005205, NUMICRO_BANKS_M051(8*1024)},
- {"M054XDN" , 0x20005405, NUMICRO_BANKS_M051(16*1024)},
- {"M058XDN" , 0x20005805, NUMICRO_BANKS_M051(32*1024)},
- {"M0516XDN" , 0x20005A05, NUMICRO_BANKS_M051(64*1024)},
- {"M052LDE" , 0x30005200, NUMICRO_BANKS_M051(8*1024)},
- {"M054LDE" , 0x30005400, NUMICRO_BANKS_M051(16*1024)},
- {"M058LDE" , 0x30005800, NUMICRO_BANKS_M051(32*1024)},
- {"M0516LDE" , 0x30005A00, NUMICRO_BANKS_M051(64*1024)},
- {"M052ZDE" , 0x30005203, NUMICRO_BANKS_M051(8*1024)},
- {"M054ZDE" , 0x30005403, NUMICRO_BANKS_M051(16*1024)},
- {"M058ZDE" , 0x30005803, NUMICRO_BANKS_M051(32*1024)},
- {"M0516ZDE" , 0x30005A03, NUMICRO_BANKS_M051(64*1024)},
- {"M052TDE" , 0x30005204, NUMICRO_BANKS_M051(8*1024)},
- {"M054TDE" , 0x30005404, NUMICRO_BANKS_M051(16*1024)},
- {"M058TDE" , 0x30005804, NUMICRO_BANKS_M051(32*1024)},
- {"M0516TDE" , 0x30005A04, NUMICRO_BANKS_M051(64*1024)},
- {"M052XDE" , 0x30005205, NUMICRO_BANKS_M051(8*1024)},
- {"M054XDE" , 0x30005405, NUMICRO_BANKS_M051(16*1024)},
- {"M058XDE" , 0x30005805, NUMICRO_BANKS_M051(32*1024)},
- {"M0516XDE" , 0x30005A05, NUMICRO_BANKS_M051(64*1024)},
-
- /* Mini51 */
- {"MINI51LAN", 0x00205100, NUMICRO_BANKS_MINI51(4*1024)},
- {"MINI51QAN", 0x00205101, NUMICRO_BANKS_MINI51(4*1024)},
- {"MINI51 ", 0x00205102, NUMICRO_BANKS_MINI51(4*1024)},
- {"MINI51ZAN", 0x00205103, NUMICRO_BANKS_MINI51(4*1024)},
- {"MINI51TAN", 0x00205104, NUMICRO_BANKS_MINI51(4*1024)},
- {"MINI52LAN", 0x00205200, NUMICRO_BANKS_MINI51(8*1024)},
- {"MINI52QAN", 0x00205201, NUMICRO_BANKS_MINI51(8*1024)},
- {"MINI52 ", 0x00205202, NUMICRO_BANKS_MINI51(8*1024)},
- {"MINI52ZAN", 0x00205203, NUMICRO_BANKS_MINI51(8*1024)},
- {"MINI52TAN", 0x00205204, NUMICRO_BANKS_MINI51(8*1024)},
- {"MINI54LAN", 0x00205400, NUMICRO_BANKS_MINI51(16*1024)},
- {"MINI54QAN", 0x00205401, NUMICRO_BANKS_MINI51(16*1024)},
- {"MINI54 ", 0x00205402, NUMICRO_BANKS_MINI51(16*1024)},
- {"MINI54ZAN", 0x00205403, NUMICRO_BANKS_MINI51(16*1024)},
- {"MINI54TAN", 0x00205404, NUMICRO_BANKS_MINI51(16*1024)},
- {"MINI51LBN", 0x10205100, NUMICRO_BANKS_MINI51(4*1024)},
- {"MINI51QBN", 0x10205101, NUMICRO_BANKS_MINI51(4*1024)},
- {"MINI51 ", 0x10205102, NUMICRO_BANKS_MINI51(4*1024)},
- {"MINI51ZBN", 0x10205103, NUMICRO_BANKS_MINI51(4*1024)},
- {"MINI51TBN", 0x10205104, NUMICRO_BANKS_MINI51(4*1024)},
- {"MINI52LBN", 0x10205200, NUMICRO_BANKS_MINI51(8*1024)},
- {"MINI52QBN", 0x10205201, NUMICRO_BANKS_MINI51(8*1024)},
- {"MINI52 ", 0x10205202, NUMICRO_BANKS_MINI51(8*1024)},
- {"MINI52ZBN", 0x10205203, NUMICRO_BANKS_MINI51(8*1024)},
- {"MINI52TBN", 0x10205204, NUMICRO_BANKS_MINI51(8*1024)},
- {"MINI54LBN", 0x10205400, NUMICRO_BANKS_MINI51(16*1024)},
- {"MINI54QBN", 0x10205401, NUMICRO_BANKS_MINI51(16*1024)},
- {"MINI54 ", 0x10205402, NUMICRO_BANKS_MINI51(16*1024)},
- {"MINI54ZBN" , 0x10205403, NUMICRO_BANKS_MINI51(16*1024)},
- {"MINI54TBN" , 0x10205404, NUMICRO_BANKS_MINI51(16*1024)},
- {"MINI51LDE" , 0x20205100, NUMICRO_BANKS_MINI51(4*1024)},
- {"MINI51QDE" , 0x20205101, NUMICRO_BANKS_MINI51(4*1024)},
- {"MINI51 " , 0x20205102, NUMICRO_BANKS_MINI51(4*1024)},
- {"MINI51ZDE" , 0x20205103, NUMICRO_BANKS_MINI51(4*1024)},
- {"MINI51TDE" , 0x20205104, NUMICRO_BANKS_MINI51(4*1024)},
- {"MINI51FDE" , 0x20205105, NUMICRO_BANKS_MINI51(4*1024)},
- {"MINI52LDE" , 0x20205200, NUMICRO_BANKS_MINI51(8*1024)},
- {"MINI52QDE" , 0x20205201, NUMICRO_BANKS_MINI51(8*1024)},
- {"MINI52 " , 0x20205202, NUMICRO_BANKS_MINI51(8*1024)},
- {"MINI52ZDE" , 0x20205203, NUMICRO_BANKS_MINI51(8*1024)},
- {"MINI52TDE" , 0x20205204, NUMICRO_BANKS_MINI51(8*1024)},
- {"MINI52FDE" , 0x20205205, NUMICRO_BANKS_MINI51(8*1024)},
- {"MINI54LDE" , 0x20205400, NUMICRO_BANKS_MINI51(16*1024)},
- {"MINI54QDE" , 0x20205401, NUMICRO_BANKS_MINI51(16*1024)},
- {"MINI54 " , 0x20205402, NUMICRO_BANKS_MINI51(16*1024)},
- {"MINI54ZDE" , 0x20205403, NUMICRO_BANKS_MINI51(16*1024)},
- {"MINI54TDE" , 0x20205404, NUMICRO_BANKS_MINI51(16*1024)},
- {"MINI54FDE" , 0x20205405, NUMICRO_BANKS_MINI51(16*1024)},
- {"MINI55LDE" , 0x20205500, NUMICRO_BANKS_MINI51(16*1024)},
-
- /* NANO100 */
- {"NANO100VF3AN" , 0x00110000, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO100VF2AN" , 0x00110001, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO100RF3AN" , 0x00110002, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO100RF2AN" , 0x00110003, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO100LF3AN" , 0x00110004, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO100LF2AN" , 0x00110005, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO100VE3AN" , 0x00110006, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO100VE2AN" , 0x00110007, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO100RE3AN" , 0x00110008, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO100RE2AN" , 0x00110009, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO100LE3AN" , 0x00110010, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO100LE2AN" , 0x00110011, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO100VD3AN" , 0x00110012, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO100VD2AN" , 0x00110013, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO100VD1AN" , 0x00110014, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO100RD3AN" , 0x00110015, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO100RD2AN" , 0x00110016, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO100RD1AN" , 0x00110017, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO100LD3AN" , 0x00110018, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO100LD2AN" , 0x00110019, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO100LD1AN" , 0x00110020, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO100VC2AN" , 0x00110021, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO100VC1AN" , 0x00110022, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO100RC2AN" , 0x00110023, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO100RC1AN" , 0x00110024, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO100LC2AN" , 0x00110025, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO100LC1AN" , 0x00110026, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO100VB1AN" , 0x00110027, NUMICRO_BANKS_NANO(16*1024)},
- {"NANO100VB0AN" , 0x00110028, NUMICRO_BANKS_NANO(16*1024)},
- {"NANO100RB1AN" , 0x00110029, NUMICRO_BANKS_NANO(16*1024)},
-
- {"NANO110VF3AN" , 0x00111000, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO110VF2AN" , 0x00111001, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO110RF3AN" , 0x00111002, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO110RF2AN" , 0x00111003, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO110VE3AN" , 0x00111006, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO110VE2AN" , 0x00111007, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO110RE3AN" , 0x00111008, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO110RE2AN" , 0x00111009, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO110VD3AN" , 0x00111012, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO110VD2AN" , 0x00111013, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO110VD1AN" , 0x00111014, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO110RD3AN" , 0x00111015, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO110RD2AN" , 0x00111016, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO110RD1AN" , 0x00111017, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO110VC2AN" , 0x00111021, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO110VC1AN" , 0x00111022, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO110SC2AN" , 0x00111023, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO110SC1AN" , 0x00111024, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO120VF3AN" , 0x00112000, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO120VF2AN" , 0x00112001, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO120RF3AN" , 0x00112002, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO120RF2AN" , 0x00112003, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO120LF3AN" , 0x00112004, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO120LF2AN" , 0x00112005, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO120VE3AN" , 0x00112006, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO120VE2AN" , 0x00112007, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO120RE3AN" , 0x00112008, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO120RE2AN" , 0x00112009, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO120LE3AN" , 0x00112010, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO120LE2AN" , 0x00112011, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO120VD3AN" , 0x00112012, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO120VD2AN" , 0x00112013, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO120VD1AN" , 0x00112014, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO120SD3AN" , 0x00112015, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO120SD2AN" , 0x00112016, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO120SD1AN" , 0x00112017, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO120LD3AN" , 0x00112018, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO120LD2AN" , 0x00112019, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO120LD1AN" , 0x00112020, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO120VC2AN" , 0x00112021, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO120VC1AN" , 0x00112022, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO120SC2AN" , 0x00112023, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO120SC1AN" , 0x00112024, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO120LC2AN" , 0x00112025, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO120LC1AN" , 0x00112026, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO130VF3AN" , 0x00113000, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO130VF2AN" , 0x00113001, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO130SF3AN" , 0x00113002, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO130SF2AN" , 0x00113003, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO130VE3AN" , 0x00113006, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO130VE2AN" , 0x00113007, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO130SE3AN" , 0x00113008, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO130SE2AN" , 0x00113009, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO130VD3AN" , 0x00113012, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO130VD2AN" , 0x00113013, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO130VD1AN" , 0x00113014, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO130SD3AN" , 0x00113015, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO130SD2AN" , 0x00113016, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO130SD1AN" , 0x00113017, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO130VC2AN" , 0x00113021, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO130VC1AN" , 0x00113022, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO130SC2AN" , 0x00113023, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO130SC1AN" , 0x00113024, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO100KE3BN" , 0x00110030, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO100KE2BN" , 0x00110031, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO100VE3BN" , 0x00110032, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO100VE2BN" , 0x00110033, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO100SE3BN" , 0x00110034, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO100SE2BN" , 0x00110035, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO100LE3BN" , 0x00110036, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO100LE2BN" , 0x00110037, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO100KD3BN" , 0x00110038, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO100KD2BN" , 0x00110039, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO100VD3BN" , 0x0011003A, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO100VD2BN" , 0x0011003B, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO100SD3BN" , 0x0011003C, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO100SD2BN" , 0x0011003D, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO100LD3BN" , 0x0011003E, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO100LD2BN" , 0x0011003F, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO100KC2BN" , 0x00110040, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO100VC2BN" , 0x00110041, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO100SC2BN" , 0x00110042, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO100LC2BN" , 0x00110043, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO110KE3BN" , 0x00111030, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO110KE2BN" , 0x00111031, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO110VE3BN" , 0x00111032, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO110VE2BN" , 0x00111033, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO110SE3BN" , 0x00111034, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO110SE2BN" , 0x00111035, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO110KD3BN" , 0x00111038, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO110KD2BN" , 0x00111039, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO110VD3BN" , 0x0011103A, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO110VD2BN" , 0x0011103B, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO110SD3BN" , 0x0011103C, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO110SD2BN" , 0x0011103D, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO110KC2BN" , 0x00111040, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO110VC2BN" , 0x00111041, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO110SC2BN" , 0x00111042, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO120KE3BN" , 0x00112030, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO120KE2BN" , 0x00112031, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO120VE3BN" , 0x00112032, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO120VE2BN" , 0x00112033, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO120SE3BN" , 0x00112034, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO120SE2BN" , 0x00112035, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO120LE3BN" , 0x00112036, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO120LE2BN" , 0x00112037, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO120KD3BN" , 0x00112038, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO120KD2BN" , 0x00112039, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO120VD3BN" , 0x0011203A, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO120VD2BN" , 0x0011203B, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO120SD3BN" , 0x0011203C, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO120SD2BN" , 0x0011203D, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO120LD3BN" , 0x0011203E, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO120LD2BN" , 0x0011203F, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO120KC2BN" , 0x00112040, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO120VC2BN" , 0x00112041, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO120SC2BN" , 0x00112042, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO120LC2BN" , 0x00112043, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO130KE3BN" , 0x00113030, NUMICRO_BANKS_NANO(123*1024)},
- {"NANO130KE2BN" , 0x00113031, NUMICRO_BANKS_NANO(123*1024)},
- {"NANO130VE3BN" , 0x00113032, NUMICRO_BANKS_NANO(123*1024)},
- {"NANO130VE2BN" , 0x00113033, NUMICRO_BANKS_NANO(123*1024)},
- {"NANO130SE3BN" , 0x00113034, NUMICRO_BANKS_NANO(123*1024)},
- {"NANO130SE2BN" , 0x00113035, NUMICRO_BANKS_NANO(123*1024)},
- {"NANO130KD3BN" , 0x00113038, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO130KD2BN" , 0x00113039, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO130VD3BN" , 0x0011303A, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO130VD2BN" , 0x0011303B, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO130SD3BN" , 0x0011303C, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO130SD2BN" , 0x0011303D, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO130KC2BN" , 0x00113040, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO130VC2BN" , 0x00113041, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO130SC2BN" , 0x00113042, NUMICRO_BANKS_NANO(32*1024)},
- {"N512DC4" , 0x00100000, NUMICRO_BANKS_NANO(64*1024)},
- {"N512LC4" , 0x00100001, NUMICRO_BANKS_NANO(64*1024)},
- {"N512MC4" , 0x00100003, NUMICRO_BANKS_NANO(64*1024)},
-
- {"N512SC4" , 0x00100005, NUMICRO_BANKS_NANO(64*1024)},
- {"N512VD4" , 0x00100008, NUMICRO_BANKS_NANO(128*1024)},
- {"N512MD4" , 0x00100009, NUMICRO_BANKS_NANO(128*1024)},
- {"N512SD4" , 0x00100010, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO110RC2BN" , 0x00111043, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO110RD3BN" , 0x00111045, NUMICRO_BANKS_NANO(64*1024)},
- {"TX110VE3BN" , 0x00111036, NUMICRO_BANKS_NANO(128*1024)},
-
- /* NANO102/NANO112 */
- {"NANO112LB0AN" , 0x00111201, NUMICRO_BANKS_NANO(16*1024)},
- {"NANO112LB1AN" , 0x00111202, NUMICRO_BANKS_NANO(16*1024)},
- {"NANO112LC1AN" , 0x00111203, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO112LC2AN" , 0x00111204, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO112SB0AN" , 0x00111205, NUMICRO_BANKS_NANO(16*1024)},
- {"NANO112SB1AN" , 0x00111206, NUMICRO_BANKS_NANO(16*1024)},
- {"NANO112SC1AN" , 0x00111207, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO112SC2AN" , 0x00111208, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO112RB0AN" , 0x00111209, NUMICRO_BANKS_NANO(16*1024)},
- {"NANO112RB1AN" , 0x00111210, NUMICRO_BANKS_NANO(16*1024)},
- {"NANO112RC1AN" , 0x00111211, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO112RC2AN" , 0x00111212, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO112VB0AN" , 0x00111213, NUMICRO_BANKS_NANO(16*1024)},
- {"NANO112VB1AN" , 0x00111214, NUMICRO_BANKS_NANO(16*1024)},
- {"NANO112VC1AN" , 0x00111215, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO112VC2AN" , 0x00111216, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO102ZB0AN" , 0x00110201, NUMICRO_BANKS_NANO(16*1024)},
- {"NANO102ZB1AN" , 0x00110202, NUMICRO_BANKS_NANO(16*1024)},
- {"NANO102ZC1AN" , 0x00110203, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO102ZC2AN" , 0x00110204, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO102LB0AN" , 0x00110205, NUMICRO_BANKS_NANO(16*1024)},
- {"NANO102LB1AN" , 0x00110206, NUMICRO_BANKS_NANO(16*1024)},
- {"NANO102LC1AN" , 0x00110207, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO102LC2AN" , 0x00110208, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO102SB0AN" , 0x00110209, NUMICRO_BANKS_NANO(16*1024)},
- {"NANO102SB1AN" , 0x00110210, NUMICRO_BANKS_NANO(16*1024)},
- {"NANO102SC1AN" , 0x00110211, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO102SC2AN" , 0x00110212, NUMICRO_BANKS_NANO(32*1024)},
-
- /* NUC103/NUC105/NUC123 */
- {"NUC123SC2AN" , 0x00012305, NUMICRO_BANKS_NUC100(36*1024)},
- {"NUC123SD4AN" , 0x00012315, NUMICRO_BANKS_NUC100(68*1024)},
- {"NUC123LC2AN" , 0x00012325, NUMICRO_BANKS_NUC100(36*1024)},
- {"NUC103LC2AN" , 0x00010325, NUMICRO_BANKS_NUC100(36*1024)},
- {"NUC105LC2AN" , 0x00010525, NUMICRO_BANKS_NUC100(36*1024)},
- {"NUC123LD4AN" , 0x00012335, NUMICRO_BANKS_NUC100(68*1024)},
- {"NUC103LD4AN" , 0x00010335, NUMICRO_BANKS_NUC100(68*1024)},
- {"NUC105LD4AN" , 0x00010535, NUMICRO_BANKS_NUC100(68*1024)},
- {"NUC123ZC2AN" , 0x00012345, NUMICRO_BANKS_NUC100(36*1024)},
- {"NUC103ZC2AN" , 0x00010345, NUMICRO_BANKS_NUC100(36*1024)},
- {"NUC105ZC2AN" , 0x00010545, NUMICRO_BANKS_NUC100(36*1024)},
- {"NUC123ZD4AN" , 0x00012355, NUMICRO_BANKS_NUC100(68*1024)},
- {"NUC103ZD4AN" , 0x00010355, NUMICRO_BANKS_NUC100(68*1024)},
- {"NUC105ZD4AN" , 0x00010555, NUMICRO_BANKS_NUC100(68*1024)},
-
- /* NUC200 */
- {"NUC200LC2AN" , 0x00020007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC200LD2AN" , 0x00020004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC200LE3AN" , 0x00020000, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC200SC1AN" , 0x00020035, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC200SD2AN" , 0x00020031, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC200SE3AN" , 0x00020027, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC200VE3AN" , 0x00020018, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC220LC2AN" , 0x00022007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC220LD2AN" , 0x00022004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC220LE3AN" , 0x00022000, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC220SC1AN" , 0x00022035, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC220SD2AN" , 0x00022031, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC220SE3AN" , 0x00022027, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC220VE3AN" , 0x00022018, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC230LC2AN" , 0x00023007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC230LD2AN" , 0x00023004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC230LE3AN" , 0x00023000, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC230SC1AN" , 0x00023035, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC230SD2AN" , 0x00023031, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC230SE3AN" , 0x00023027, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC230VE3AN" , 0x00023018, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC240LC2AN" , 0x00024007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC240LD2AN" , 0x00024004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC240LE3AN" , 0x00024000, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC240SC1AN" , 0x00024035, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC240SD2AN" , 0x00024031, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC240SE3AN" , 0x00024027, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC240VE3AN" , 0x00024018, NUMICRO_BANKS_NUC100(128*1024)},
-
- /* NUC200 NUC2XXAE */
- {"NUC230RC1AE" , 0x40013017, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC200LC2AE" , 0x10020007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC200LD2AE" , 0x10020004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC200LE3AE" , 0x10020000, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC200SC2AE" , 0x10020034, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC200SD2AE" , 0x10020031, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC200SE3AE" , 0x10020027, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC200VE3AE" , 0x10020018, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC230LC2AE" , 0x10023007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC230LD2AE" , 0x10023004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC230LE3AE" , 0x10023000, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC230SC2AE" , 0x10023034, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC230SD2AE" , 0x10023031, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC230SE3AE" , 0x10023027, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC230VE3AE" , 0x10023018, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC240LC2AE" , 0x10024007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC240LD2AE" , 0x10024004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC240LE3AE" , 0x10024000, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC240SC2AE" , 0x10024034, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC240SD2AE" , 0x10024031, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC240SE3AE" , 0x10024027, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC240VE3AE" , 0x10024018, NUMICRO_BANKS_NUC100(128*1024)},
-
- /* NUC100 Version D */
- {"NUC100LC1DN" , 0x30010008, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100LD1DN" , 0x30010005, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100LD2DN" , 0x30010004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100RC1DN" , 0x30010017, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100RD1DN" , 0x30010014, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100RD2DN" , 0x30010013, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100LD3DN" , 0x30010003, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100LE3DN" , 0x30010000, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100RD3DN" , 0x30010012, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100RE3DN" , 0x30010009, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100VD2DN" , 0x30010022, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100VD3DN" , 0x30010021, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100VE3DN" , 0x30010018, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120LC1DN" , 0x30012008, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120LD1DN" , 0x30012005, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120LD2DN" , 0x30012004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120RC1DN" , 0x30012017, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120RD1DN" , 0x30012014, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120RD2DN" , 0x30012013, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120LD3DN" , 0x30012003, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120LE3DN" , 0x30012000, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120RD3DN" , 0x30012012, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120RE3DN" , 0x30012009, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120VD2DN" , 0x30012022, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120VD3DN" , 0x30012021, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120VE3DN" , 0x30012018, NUMICRO_BANKS_NUC100(...
[truncated message content] |
|
From: openocd-gerrit <ope...@us...> - 2023-01-15 15:01:31
|
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 11ee500bffe488eba95cea37c99cee6b196e04ff (commit)
from 66da6f20e4df20511828424d835dfade7dd9d535 (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 11ee500bffe488eba95cea37c99cee6b196e04ff
Author: Boris-Chengbiao Zhou <bob...@we...>
Date: Wed Oct 26 03:10:17 2022 +0200
target/armv7m: Rename xPSR to xpsr
The org.gnu.gdb.arm.m-system GDB feature defines the name in lowercase
letters.[1] Not adhering to the definition can cause issues with tools
interacting with the GDB which expect the correct casing.
[1]: https://sourceware.org/gdb/onlinedocs/gdb/ARM-Features.html
Change-Id: I0b6584a78f86b053947d79686baad5dac3ec4a00
Signed-off-by: Boris-Chengbiao Zhou <bob...@we...>
Reviewed-on: https://review.openocd.org/c/openocd/+/7292
Tested-by: jenkins
Reviewed-by: Tomas Vanek <va...@fb...>
Reviewed-by: Antonio Borneo <bor...@gm...>
diff --git a/src/target/armv7m.c b/src/target/armv7m.c
index 1b85315de..5745681d4 100644
--- a/src/target/armv7m.c
+++ b/src/target/armv7m.c
@@ -97,7 +97,7 @@ static const struct {
{ ARMV7M_R13, "sp", 32, REG_TYPE_DATA_PTR, "general", "org.gnu.gdb.arm.m-profile" },
{ ARMV7M_R14, "lr", 32, REG_TYPE_INT, "general", "org.gnu.gdb.arm.m-profile" },
{ ARMV7M_PC, "pc", 32, REG_TYPE_CODE_PTR, "general", "org.gnu.gdb.arm.m-profile" },
- { ARMV7M_XPSR, "xPSR", 32, REG_TYPE_INT, "general", "org.gnu.gdb.arm.m-profile" },
+ { ARMV7M_XPSR, "xpsr", 32, REG_TYPE_INT, "general", "org.gnu.gdb.arm.m-profile" },
{ ARMV7M_MSP, "msp", 32, REG_TYPE_DATA_PTR, "system", "org.gnu.gdb.arm.m-system" },
{ ARMV7M_PSP, "psp", 32, REG_TYPE_DATA_PTR, "system", "org.gnu.gdb.arm.m-system" },
-----------------------------------------------------------------------
Summary of changes:
src/target/armv7m.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
hooks/post-receive
--
Main OpenOCD repository
|
|
From: openocd-gerrit <ope...@us...> - 2023-01-15 15:01:10
|
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 66da6f20e4df20511828424d835dfade7dd9d535 (commit)
from 30631224da59608d93f56bac0f68acd6c8fd32ac (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 66da6f20e4df20511828424d835dfade7dd9d535
Author: Tarek BOCHKATI <tar...@st...>
Date: Thu Oct 20 20:48:48 2022 +0100
flash/stm32l4x: avoid multiple assignments
Change-Id: I6d8e0fbfa7e05f26295fc22733c65c11f7460b51
Signed-off-by: Tarek BOCHKATI <tar...@st...>
Reviewed-on: https://review.openocd.org/c/openocd/+/7282
Reviewed-by: Antonio Borneo <bor...@gm...>
Reviewed-by: Tomas Vanek <va...@fb...>
Tested-by: jenkins
diff --git a/src/flash/nor/stm32l4x.c b/src/flash/nor/stm32l4x.c
index 7a6ec3fd2..92d511c17 100644
--- a/src/flash/nor/stm32l4x.c
+++ b/src/flash/nor/stm32l4x.c
@@ -1740,7 +1740,8 @@ static int stm32l4_probe(struct flash_bank *bank)
/* Set flash write alignment boundaries.
* Ask the flash infrastructure to ensure required alignment */
- bank->write_start_alignment = bank->write_end_alignment = stm32l4_info->data_width;
+ bank->write_start_alignment = stm32l4_info->data_width;
+ bank->write_end_alignment = stm32l4_info->data_width;
/* Initialize the flash registers layout */
if (part_info->flags & F_HAS_L5_FLASH_REGS)
-----------------------------------------------------------------------
Summary of changes:
src/flash/nor/stm32l4x.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
hooks/post-receive
--
Main OpenOCD repository
|
|
From: openocd-gerrit <ope...@us...> - 2023-01-15 14:58:08
|
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 30631224da59608d93f56bac0f68acd6c8fd32ac (commit)
from f2fc23e16b648c3d5600b5cc44bee69a1e697a3a (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 30631224da59608d93f56bac0f68acd6c8fd32ac
Author: Jan Matyas <ma...@co...>
Date: Mon Oct 17 08:24:05 2022 +0200
adapter: Improve three adapter-related prints
- Do not warn the user about adapter speed not being set
if the selected adapter does not support configurable speed.
This would be confusing to users.
- Minor reword in the "adapter speed is not selected" warning.
- Print the adapter name in the "adapter doesn't support
configurable speed" log entry
- Another minor reword: autoselect --> autoselecting
Signed-off-by: Jan Matyas <ma...@co...>
Change-Id: I4c198b547544fd8199921f092153562c5f159134
Reviewed-on: https://review.openocd.org/c/openocd/+/7269
Tested-by: jenkins
Reviewed-by: Antonio Borneo <bor...@gm...>
diff --git a/src/jtag/adapter.c b/src/jtag/adapter.c
index b7feac575..eb73fcb9a 100644
--- a/src/jtag/adapter.c
+++ b/src/jtag/adapter.c
@@ -136,9 +136,11 @@ int adapter_init(struct command_context *cmd_ctx)
int retval;
- if (adapter_config.clock_mode == CLOCK_MODE_UNSELECTED) {
+ /* If the adapter supports configurable speed but the speed is not configured,
+ * provide a hint to the user. */
+ if (adapter_driver->speed && adapter_config.clock_mode == CLOCK_MODE_UNSELECTED) {
LOG_WARNING("An adapter speed is not selected in the init scripts."
- " OpenOCD will try to run the adapter at the low speed (%d kHz)",
+ " OpenOCD will try to run the adapter at very low speed (%d kHz).",
DEFAULT_CLOCK_SPEED_KHZ);
LOG_WARNING("To remove this warnings and achieve reasonable communication speed with the target,"
" set \"adapter speed\" or \"jtag_rclk\" in the init scripts.");
@@ -153,7 +155,7 @@ int adapter_init(struct command_context *cmd_ctx)
adapter_config.adapter_initialized = true;
if (!adapter_driver->speed) {
- LOG_INFO("This adapter doesn't support configurable speed");
+ LOG_INFO("Note: The adapter \"%s\" doesn't support configurable speed", adapter_driver->name);
return ERROR_OK;
}
diff --git a/src/transport/transport.c b/src/transport/transport.c
index d72a48baa..c05db3f00 100644
--- a/src/transport/transport.c
+++ b/src/transport/transport.c
@@ -104,7 +104,7 @@ int allow_transports(struct command_context *ctx, const char * const *vector)
/* autoselect if there's no choice ... */
if (!vector[1]) {
- LOG_INFO("only one transport option; autoselect '%s'", vector[0]);
+ LOG_INFO("only one transport option; autoselecting '%s'", vector[0]);
return transport_select(ctx, vector[0]);
}
-----------------------------------------------------------------------
Summary of changes:
src/jtag/adapter.c | 8 +++++---
src/transport/transport.c | 2 +-
2 files changed, 6 insertions(+), 4 deletions(-)
hooks/post-receive
--
Main OpenOCD repository
|
|
From: openocd-gerrit <ope...@us...> - 2023-01-15 14:57:18
|
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 f2fc23e16b648c3d5600b5cc44bee69a1e697a3a (commit)
via 27edeb775791a598a1e7997fd74078164e771ca6 (commit)
from 228fe7300c7df7aa05ba2c0bc19edde6d0156401 (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 f2fc23e16b648c3d5600b5cc44bee69a1e697a3a
Author: Antonio Borneo <bor...@gm...>
Date: Mon Oct 17 12:34:23 2022 +0200
riscv: drop deprecated command 'riscv test_sba_config_reg'
Change-Id: I51c1b1cb3de8cb86ee38280fa3f035f6f7a63dbc
Signed-off-by: Antonio Borneo <bor...@gm...>
Reviewed-on: https://review.openocd.org/c/openocd/+/7272
Reviewed-by: Jan Matyas <ma...@co...>
Reviewed-by: Tim Newsome <ti...@si...>
Tested-by: jenkins
diff --git a/src/target/riscv/riscv-013.c b/src/target/riscv/riscv-013.c
index 99d3873de..4e6c8dc36 100644
--- a/src/target/riscv/riscv-013.c
+++ b/src/target/riscv/riscv-013.c
@@ -65,12 +65,6 @@ static int read_memory(struct target *target, target_addr_t address,
uint32_t size, uint32_t count, uint8_t *buffer, uint32_t increment);
static int write_memory(struct target *target, target_addr_t address,
uint32_t size, uint32_t count, const uint8_t *buffer);
-static int riscv013_test_sba_config_reg(struct target *target, target_addr_t legal_address,
- uint32_t num_words, target_addr_t illegal_address, bool run_sbbusyerror_test);
-static void write_memory_sba_simple(struct target *target, target_addr_t addr, uint32_t *write_data,
- uint32_t write_size, uint32_t sbcs);
-static void read_memory_sba_simple(struct target *target, target_addr_t addr,
- uint32_t *rd_buf, uint32_t read_size, uint32_t sbcs);
/**
* Since almost everything can be accomplish by scanning the dbus register, all
@@ -2307,7 +2301,6 @@ static int init_target(struct command_context *cmd_ctx,
generic_info->dmi_read = &dmi_read;
generic_info->dmi_write = &dmi_write;
generic_info->read_memory = read_memory;
- generic_info->test_sba_config_reg = &riscv013_test_sba_config_reg;
generic_info->hart_count = &riscv013_hart_count;
generic_info->data_bits = &riscv013_data_bits;
generic_info->print_info = &riscv013_print_info;
@@ -4408,360 +4401,6 @@ void riscv013_fill_dmi_nop_u64(struct target *target, char *buf)
buf_set_u64((unsigned char *)buf, DTM_DMI_ADDRESS_OFFSET, info->abits, 0);
}
-/* Helper function for riscv013_test_sba_config_reg */
-static int get_max_sbaccess(struct target *target)
-{
- RISCV013_INFO(info);
-
- uint32_t sbaccess128 = get_field(info->sbcs, DM_SBCS_SBACCESS128);
- uint32_t sbaccess64 = get_field(info->sbcs, DM_SBCS_SBACCESS64);
- uint32_t sbaccess32 = get_field(info->sbcs, DM_SBCS_SBACCESS32);
- uint32_t sbaccess16 = get_field(info->sbcs, DM_SBCS_SBACCESS16);
- uint32_t sbaccess8 = get_field(info->sbcs, DM_SBCS_SBACCESS8);
-
- if (sbaccess128)
- return 4;
- else if (sbaccess64)
- return 3;
- else if (sbaccess32)
- return 2;
- else if (sbaccess16)
- return 1;
- else if (sbaccess8)
- return 0;
- else
- return -1;
-}
-
-static uint32_t get_num_sbdata_regs(struct target *target)
-{
- RISCV013_INFO(info);
-
- uint32_t sbaccess128 = get_field(info->sbcs, DM_SBCS_SBACCESS128);
- uint32_t sbaccess64 = get_field(info->sbcs, DM_SBCS_SBACCESS64);
- uint32_t sbaccess32 = get_field(info->sbcs, DM_SBCS_SBACCESS32);
-
- if (sbaccess128)
- return 4;
- else if (sbaccess64)
- return 2;
- else if (sbaccess32)
- return 1;
- else
- return 0;
-}
-
-static int riscv013_test_sba_config_reg(struct target *target,
- target_addr_t legal_address, uint32_t num_words,
- target_addr_t illegal_address, bool run_sbbusyerror_test)
-{
- LOG_INFO("Testing System Bus Access as defined by RISC-V Debug Spec v0.13");
-
- uint32_t tests_failed = 0;
-
- uint32_t rd_val;
- uint32_t sbcs_orig;
- int retval = dmi_read(target, &sbcs_orig, DM_SBCS);
- if (retval != ERROR_OK)
- return retval;
-
- uint32_t sbcs = sbcs_orig;
- bool test_passed;
-
- int max_sbaccess = get_max_sbaccess(target);
-
- if (max_sbaccess == -1) {
- LOG_ERROR("System Bus Access not supported in this config.");
- return ERROR_FAIL;
- }
-
- if (get_field(sbcs, DM_SBCS_SBVERSION) != 1) {
- LOG_ERROR("System Bus Access unsupported SBVERSION (%d). Only version 1 is supported.",
- get_field(sbcs, DM_SBCS_SBVERSION));
- return ERROR_FAIL;
- }
-
- uint32_t num_sbdata_regs = get_num_sbdata_regs(target);
- assert(num_sbdata_regs);
-
- uint32_t rd_buf[num_sbdata_regs];
-
- /* Test 1: Simple write/read test */
- test_passed = true;
- sbcs = set_field(sbcs_orig, DM_SBCS_SBAUTOINCREMENT, 0);
- dmi_write(target, DM_SBCS, sbcs);
-
- uint32_t test_patterns[4] = {0xdeadbeef, 0xfeedbabe, 0x12345678, 0x08675309};
- for (uint32_t sbaccess = 0; sbaccess <= (uint32_t)max_sbaccess; sbaccess++) {
- sbcs = set_field(sbcs, DM_SBCS_SBACCESS, sbaccess);
- dmi_write(target, DM_SBCS, sbcs);
-
- uint32_t compare_mask = (sbaccess == 0) ? 0xff : (sbaccess == 1) ? 0xffff : 0xffffffff;
-
- for (uint32_t i = 0; i < num_words; i++) {
- uint32_t addr = legal_address + (i << sbaccess);
- uint32_t wr_data[num_sbdata_regs];
- for (uint32_t j = 0; j < num_sbdata_regs; j++)
- wr_data[j] = test_patterns[j] + i;
- write_memory_sba_simple(target, addr, wr_data, num_sbdata_regs, sbcs);
- }
-
- for (uint32_t i = 0; i < num_words; i++) {
- uint32_t addr = legal_address + (i << sbaccess);
- read_memory_sba_simple(target, addr, rd_buf, num_sbdata_regs, sbcs);
- for (uint32_t j = 0; j < num_sbdata_regs; j++) {
- if (((test_patterns[j]+i)&compare_mask) != (rd_buf[j]&compare_mask)) {
- LOG_ERROR("System Bus Access Test 1: Error reading non-autoincremented address %x,"
- "expected val = %x, read val = %x", addr, test_patterns[j]+i, rd_buf[j]);
- test_passed = false;
- tests_failed++;
- }
- }
- }
- }
- if (test_passed)
- LOG_INFO("System Bus Access Test 1: Simple write/read test PASSED.");
-
- /* Test 2: Address autoincrement test */
- target_addr_t curr_addr;
- target_addr_t prev_addr;
- test_passed = true;
- sbcs = set_field(sbcs_orig, DM_SBCS_SBAUTOINCREMENT, 1);
- dmi_write(target, DM_SBCS, sbcs);
-
- for (uint32_t sbaccess = 0; sbaccess <= (uint32_t)max_sbaccess; sbaccess++) {
- sbcs = set_field(sbcs, DM_SBCS_SBACCESS, sbaccess);
- dmi_write(target, DM_SBCS, sbcs);
-
- dmi_write(target, DM_SBADDRESS0, legal_address);
- read_sbcs_nonbusy(target, &sbcs);
- curr_addr = legal_address;
- for (uint32_t i = 0; i < num_words; i++) {
- prev_addr = curr_addr;
- read_sbcs_nonbusy(target, &sbcs);
- curr_addr = sb_read_address(target);
- if ((curr_addr - prev_addr != (uint32_t)(1 << sbaccess)) && (i != 0)) {
- LOG_ERROR("System Bus Access Test 2: Error with address auto-increment, sbaccess = %x.", sbaccess);
- test_passed = false;
- tests_failed++;
- }
- dmi_write(target, DM_SBDATA0, i);
- }
-
- read_sbcs_nonbusy(target, &sbcs);
-
- dmi_write(target, DM_SBADDRESS0, legal_address);
-
- uint32_t val;
- sbcs = set_field(sbcs, DM_SBCS_SBREADONDATA, 1);
- dmi_write(target, DM_SBCS, sbcs);
- dmi_read(target, &val, DM_SBDATA0); /* Dummy read to trigger first system bus read */
- curr_addr = legal_address;
- for (uint32_t i = 0; i < num_words; i++) {
- prev_addr = curr_addr;
- read_sbcs_nonbusy(target, &sbcs);
- curr_addr = sb_read_address(target);
- if ((curr_addr - prev_addr != (uint32_t)(1 << sbaccess)) && (i != 0)) {
- LOG_ERROR("System Bus Access Test 2: Error with address auto-increment, sbaccess = %x", sbaccess);
- test_passed = false;
- tests_failed++;
- }
- dmi_read(target, &val, DM_SBDATA0);
- read_sbcs_nonbusy(target, &sbcs);
- if (i != val) {
- LOG_ERROR("System Bus Access Test 2: Error reading auto-incremented address,"
- "expected val = %x, read val = %x.", i, val);
- test_passed = false;
- tests_failed++;
- }
- }
- }
- if (test_passed)
- LOG_INFO("System Bus Access Test 2: Address auto-increment test PASSED.");
-
- /* Test 3: Read from illegal address */
- read_memory_sba_simple(target, illegal_address, rd_buf, 1, sbcs_orig);
-
- dmi_read(target, &rd_val, DM_SBCS);
- if (get_field(rd_val, DM_SBCS_SBERROR) == 2) {
- sbcs = set_field(sbcs_orig, DM_SBCS_SBERROR, 2);
- dmi_write(target, DM_SBCS, sbcs);
- dmi_read(target, &rd_val, DM_SBCS);
- if (get_field(rd_val, DM_SBCS_SBERROR) == 0)
- LOG_INFO("System Bus Access Test 3: Illegal address read test PASSED.");
- else
- LOG_ERROR("System Bus Access Test 3: Illegal address read test FAILED, unable to clear to 0.");
- } else {
- LOG_ERROR("System Bus Access Test 3: Illegal address read test FAILED, unable to set error code.");
- }
-
- /* Test 4: Write to illegal address */
- write_memory_sba_simple(target, illegal_address, test_patterns, 1, sbcs_orig);
-
- dmi_read(target, &rd_val, DM_SBCS);
- if (get_field(rd_val, DM_SBCS_SBERROR) == 2) {
- sbcs = set_field(sbcs_orig, DM_SBCS_SBERROR, 2);
- dmi_write(target, DM_SBCS, sbcs);
- dmi_read(target, &rd_val, DM_SBCS);
- if (get_field(rd_val, DM_SBCS_SBERROR) == 0)
- LOG_INFO("System Bus Access Test 4: Illegal address write test PASSED.");
- else {
- LOG_ERROR("System Bus Access Test 4: Illegal address write test FAILED, unable to clear to 0.");
- tests_failed++;
- }
- } else {
- LOG_ERROR("System Bus Access Test 4: Illegal address write test FAILED, unable to set error code.");
- tests_failed++;
- }
-
- /* Test 5: Write with unsupported sbaccess size */
- uint32_t sbaccess128 = get_field(sbcs_orig, DM_SBCS_SBACCESS128);
-
- if (sbaccess128) {
- LOG_INFO("System Bus Access Test 5: SBCS sbaccess error test PASSED, all sbaccess sizes supported.");
- } else {
- sbcs = set_field(sbcs_orig, DM_SBCS_SBACCESS, 4);
-
- write_memory_sba_simple(target, legal_address, test_patterns, 1, sbcs);
-
- dmi_read(target, &rd_val, DM_SBCS);
- if (get_field(rd_val, DM_SBCS_SBERROR) == 4) {
- sbcs = set_field(sbcs_orig, DM_SBCS_SBERROR, 4);
- dmi_write(target, DM_SBCS, sbcs);
- dmi_read(target, &rd_val, DM_SBCS);
- if (get_field(rd_val, DM_SBCS_SBERROR) == 0)
- LOG_INFO("System Bus Access Test 5: SBCS sbaccess error test PASSED.");
- else {
- LOG_ERROR("System Bus Access Test 5: SBCS sbaccess error test FAILED, unable to clear to 0.");
- tests_failed++;
- }
- } else {
- LOG_ERROR("System Bus Access Test 5: SBCS sbaccess error test FAILED, unable to set error code.");
- tests_failed++;
- }
- }
-
- /* Test 6: Write to misaligned address */
- sbcs = set_field(sbcs_orig, DM_SBCS_SBACCESS, 1);
-
- write_memory_sba_simple(target, legal_address+1, test_patterns, 1, sbcs);
-
- dmi_read(target, &rd_val, DM_SBCS);
- if (get_field(rd_val, DM_SBCS_SBERROR) == 3) {
- sbcs = set_field(sbcs_orig, DM_SBCS_SBERROR, 3);
- dmi_write(target, DM_SBCS, sbcs);
- dmi_read(target, &rd_val, DM_SBCS);
- if (get_field(rd_val, DM_SBCS_SBERROR) == 0)
- LOG_INFO("System Bus Access Test 6: SBCS address alignment error test PASSED");
- else {
- LOG_ERROR("System Bus Access Test 6: SBCS address alignment error test FAILED, unable to clear to 0.");
- tests_failed++;
- }
- } else {
- LOG_ERROR("System Bus Access Test 6: SBCS address alignment error test FAILED, unable to set error code.");
- tests_failed++;
- }
-
- /* Test 7: Set sbbusyerror, only run this case in simulation as it is likely
- * impossible to hit otherwise */
- if (run_sbbusyerror_test) {
- sbcs = set_field(sbcs_orig, DM_SBCS_SBREADONADDR, 1);
- dmi_write(target, DM_SBCS, sbcs);
-
- for (int i = 0; i < 16; i++)
- dmi_write(target, DM_SBDATA0, 0xdeadbeef);
-
- for (int i = 0; i < 16; i++)
- dmi_write(target, DM_SBADDRESS0, legal_address);
-
- dmi_read(target, &rd_val, DM_SBCS);
- if (get_field(rd_val, DM_SBCS_SBBUSYERROR)) {
- sbcs = set_field(sbcs_orig, DM_SBCS_SBBUSYERROR, 1);
- dmi_write(target, DM_SBCS, sbcs);
- dmi_read(target, &rd_val, DM_SBCS);
- if (get_field(rd_val, DM_SBCS_SBBUSYERROR) == 0)
- LOG_INFO("System Bus Access Test 7: SBCS sbbusyerror test PASSED.");
- else {
- LOG_ERROR("System Bus Access Test 7: SBCS sbbusyerror test FAILED, unable to clear to 0.");
- tests_failed++;
- }
- } else {
- LOG_ERROR("System Bus Access Test 7: SBCS sbbusyerror test FAILED, unable to set error code.");
- tests_failed++;
- }
- }
-
- if (tests_failed == 0) {
- LOG_INFO("ALL TESTS PASSED");
- return ERROR_OK;
- } else {
- LOG_ERROR("%d TESTS FAILED", tests_failed);
- return ERROR_FAIL;
- }
-
-}
-
-static void write_memory_sba_simple(struct target *target, target_addr_t addr,
- uint32_t *write_data, uint32_t write_size, uint32_t sbcs)
-{
- RISCV013_INFO(info);
-
- uint32_t rd_sbcs;
- uint32_t masked_addr;
-
- uint32_t sba_size = get_field(info->sbcs, DM_SBCS_SBASIZE);
-
- read_sbcs_nonbusy(target, &rd_sbcs);
-
- uint32_t sbcs_no_readonaddr = set_field(sbcs, DM_SBCS_SBREADONADDR, 0);
- dmi_write(target, DM_SBCS, sbcs_no_readonaddr);
-
- for (uint32_t i = 0; i < sba_size/32; i++) {
- masked_addr = (addr >> 32*i) & 0xffffffff;
-
- if (i != 3)
- dmi_write(target, DM_SBADDRESS0+i, masked_addr);
- else
- dmi_write(target, DM_SBADDRESS3, masked_addr);
- }
-
- /* Write SBDATA registers starting with highest address, since write to
- * SBDATA0 triggers write */
- for (int i = write_size-1; i >= 0; i--)
- dmi_write(target, DM_SBDATA0+i, write_data[i]);
-}
-
-static void read_memory_sba_simple(struct target *target, target_addr_t addr,
- uint32_t *rd_buf, uint32_t read_size, uint32_t sbcs)
-{
- RISCV013_INFO(info);
-
- uint32_t rd_sbcs;
- uint32_t masked_addr;
-
- uint32_t sba_size = get_field(info->sbcs, DM_SBCS_SBASIZE);
-
- read_sbcs_nonbusy(target, &rd_sbcs);
-
- uint32_t sbcs_readonaddr = set_field(sbcs, DM_SBCS_SBREADONADDR, 1);
- dmi_write(target, DM_SBCS, sbcs_readonaddr);
-
- /* Write addresses starting with highest address register */
- for (int i = sba_size/32-1; i >= 0; i--) {
- masked_addr = (addr >> 32*i) & 0xffffffff;
-
- if (i != 3)
- dmi_write(target, DM_SBADDRESS0+i, masked_addr);
- else
- dmi_write(target, DM_SBADDRESS3, masked_addr);
- }
-
- read_sbcs_nonbusy(target, &rd_sbcs);
-
- for (uint32_t i = 0; i < read_size; i++)
- dmi_read(target, &(rd_buf[i]), DM_SBDATA0+i);
-}
-
int riscv013_dmi_write_u64_bits(struct target *target)
{
RISCV013_INFO(info);
diff --git a/src/target/riscv/riscv.c b/src/target/riscv/riscv.c
index dcd25fa08..8dafa02b4 100644
--- a/src/target/riscv/riscv.c
+++ b/src/target/riscv/riscv.c
@@ -2711,38 +2711,6 @@ COMMAND_HANDLER(riscv_dmi_write)
}
}
-COMMAND_HANDLER(riscv_test_sba_config_reg)
-{
- LOG_WARNING("Command \"riscv test_sba_config_reg\" is deprecated. "
- "It will be removed in a future OpenOCD version.");
-
- if (CMD_ARGC != 4) {
- LOG_ERROR("Command takes exactly 4 arguments");
- return ERROR_COMMAND_SYNTAX_ERROR;
- }
-
- struct target *target = get_current_target(CMD_CTX);
- RISCV_INFO(r);
-
- target_addr_t legal_address;
- uint32_t num_words;
- target_addr_t illegal_address;
- bool run_sbbusyerror_test;
-
- COMMAND_PARSE_NUMBER(target_addr, CMD_ARGV[0], legal_address);
- COMMAND_PARSE_NUMBER(u32, CMD_ARGV[1], num_words);
- COMMAND_PARSE_NUMBER(target_addr, CMD_ARGV[2], illegal_address);
- COMMAND_PARSE_ON_OFF(CMD_ARGV[3], run_sbbusyerror_test);
-
- if (r->test_sba_config_reg) {
- return r->test_sba_config_reg(target, legal_address, num_words,
- illegal_address, run_sbbusyerror_test);
- } else {
- LOG_ERROR("test_sba_config_reg is not implemented for this target.");
- return ERROR_FAIL;
- }
-}
-
COMMAND_HANDLER(riscv_reset_delays)
{
int wait = 0;
@@ -2982,19 +2950,6 @@ static const struct command_registration riscv_exec_command_handlers[] = {
.usage = "address value",
.help = "Perform a 32-bit DMI write of value at address."
},
- {
- .name = "test_sba_config_reg",
- .handler = riscv_test_sba_config_reg,
- .mode = COMMAND_ANY,
- .usage = "legal_address num_words "
- "illegal_address run_sbbusyerror_test[on/off]",
- .help = "Perform a series of tests on the SBCS register. "
- "Inputs are a legal, 128-byte aligned address and a number of words to "
- "read/write starting at that address (i.e., address range [legal address, "
- "legal_address+word_size*num_words) must be legally readable/writable), "
- "an illegal, 128-byte aligned address for error flag/handling cases, "
- "and whether sbbusyerror test should be run."
- },
{
.name = "reset_delays",
.handler = riscv_reset_delays,
diff --git a/src/target/riscv/riscv.h b/src/target/riscv/riscv.h
index e7e4c650b..aba0864e6 100644
--- a/src/target/riscv/riscv.h
+++ b/src/target/riscv/riscv.h
@@ -174,9 +174,6 @@ struct riscv_info {
int (*dmi_read)(struct target *target, uint32_t *value, uint32_t address);
int (*dmi_write)(struct target *target, uint32_t address, uint32_t value);
- int (*test_sba_config_reg)(struct target *target, target_addr_t legal_address,
- uint32_t num_words, target_addr_t illegal_address, bool run_sbbusyerror_test);
-
int (*sample_memory)(struct target *target,
struct riscv_sample_buf *buf,
riscv_sample_config_t *config,
commit 27edeb775791a598a1e7997fd74078164e771ca6
Author: Antonio Borneo <bor...@gm...>
Date: Mon Oct 17 12:28:57 2022 +0200
riscv: drop deprecated command 'riscv set_prefer_sba'
Change-Id: I546efe4e1a6b673b26cfb4a74b5c3809fecda49c
Signed-off-by: Antonio Borneo <bor...@gm...>
Reviewed-on: https://review.openocd.org/c/openocd/+/7271
Tested-by: jenkins
Reviewed-by: Jan Matyas <ma...@co...>
diff --git a/src/target/riscv/riscv.c b/src/target/riscv/riscv.c
index 4f24fb41e..dcd25fa08 100644
--- a/src/target/riscv/riscv.c
+++ b/src/target/riscv/riscv.c
@@ -2367,37 +2367,6 @@ COMMAND_HANDLER(riscv_set_reset_timeout_sec)
return ERROR_OK;
}
-COMMAND_HANDLER(riscv_set_prefer_sba)
-{
- struct target *target = get_current_target(CMD_CTX);
- RISCV_INFO(r);
- bool prefer_sba;
- LOG_WARNING("`riscv set_prefer_sba` is deprecated. Please use `riscv set_mem_access` instead.");
- if (CMD_ARGC != 1) {
- LOG_ERROR("Command takes exactly 1 parameter");
- return ERROR_COMMAND_SYNTAX_ERROR;
- }
- COMMAND_PARSE_ON_OFF(CMD_ARGV[0], prefer_sba);
- if (prefer_sba) {
- /* Use system bus with highest priority */
- r->mem_access_methods[0] = RISCV_MEM_ACCESS_SYSBUS;
- r->mem_access_methods[1] = RISCV_MEM_ACCESS_PROGBUF;
- r->mem_access_methods[2] = RISCV_MEM_ACCESS_ABSTRACT;
- } else {
- /* Use progbuf with highest priority */
- r->mem_access_methods[0] = RISCV_MEM_ACCESS_PROGBUF;
- r->mem_access_methods[1] = RISCV_MEM_ACCESS_SYSBUS;
- r->mem_access_methods[2] = RISCV_MEM_ACCESS_ABSTRACT;
- }
-
- /* Reset warning flags */
- r->mem_access_progbuf_warn = true;
- r->mem_access_sysbus_warn = true;
- r->mem_access_abstract_warn = true;
-
- return ERROR_OK;
-}
-
COMMAND_HANDLER(riscv_set_mem_access)
{
struct target *target = get_current_target(CMD_CTX);
@@ -2948,14 +2917,6 @@ static const struct command_registration riscv_exec_command_handlers[] = {
.usage = "[sec]",
.help = "Set the wall-clock timeout (in seconds) after reset is deasserted"
},
- {
- .name = "set_prefer_sba",
- .handler = riscv_set_prefer_sba,
- .mode = COMMAND_ANY,
- .usage = "on|off",
- .help = "When on, prefer to use System Bus Access to access memory. "
- "When off (default), prefer to use the Program Buffer to access memory."
- },
{
.name = "set_mem_access",
.handler = riscv_set_mem_access,
-----------------------------------------------------------------------
Summary of changes:
src/target/riscv/riscv-013.c | 361 -------------------------------------------
src/target/riscv/riscv.c | 84 ----------
src/target/riscv/riscv.h | 3 -
3 files changed, 448 deletions(-)
hooks/post-receive
--
Main OpenOCD repository
|
|
From: openocd-gerrit <ope...@us...> - 2023-01-15 14:56:57
|
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 228fe7300c7df7aa05ba2c0bc19edde6d0156401 (commit)
from 8af4d4462fb1954ab4f5d97bc0513e3082a6bb52 (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 228fe7300c7df7aa05ba2c0bc19edde6d0156401
Author: Tomas Vanek <va...@fb...>
Date: Thu Nov 3 10:32:36 2022 +0100
tcl/target: remove rp2040-core0.cfg
rp2040-core0.cfg configuration file was intended for a special adapter
which selects a SWD multidrop target on its own. This means
that rp2040-core0.cfg is totally unusable with a standard SWD
adapter. The file was marked as deprecated in 0.12 release.
The reworked rp2040.cfg can be restricted to use just one core:
openocd ... -c 'set USE_CORE 0' -f target/rp2040.cfg
Remove the obsoleted config.
Change-Id: Id886471622bb4a8cb83f5c4c3660657407aaaf74
Signed-off-by: Tomas Vanek <va...@fb...>
Reviewed-on: https://review.openocd.org/c/openocd/+/7326
Tested-by: jenkins
Reviewed-by: Antonio Borneo <bor...@gm...>
diff --git a/tcl/target/rp2040-core0.cfg b/tcl/target/rp2040-core0.cfg
deleted file mode 100644
index 8a111bcbc..000000000
--- a/tcl/target/rp2040-core0.cfg
+++ /dev/null
@@ -1,52 +0,0 @@
-# SPDX-License-Identifier: GPL-2.0-or-later
-
-# RP2040 is a microcontroller with dual Cortex-M0+ core.
-# https://www.raspberrypi.com/documentation/microcontrollers/rp2040.html
-
-# The device requires multidrop SWD for debug.
-# This configuration file is intended for a special adapter
-# which selects a multidrop target on its own.
-# Cannot be used with a standard SWD adapter!
-
-echo "Warn : rp2040-core0.cfg configuration file is deprecated and will be"
-echo " removed in the next release. Use following parameters instead:"
-echo " -c 'set USE_CORE 0' -f target/rp2040.cfg"
-
-transport select swd
-
-source [find target/swj-dp.tcl]
-
-if { [info exists CHIPNAME] } {
- set _CHIPNAME $CHIPNAME
-} else {
- set _CHIPNAME rp2040
-}
-
-if { [info exists WORKAREASIZE] } {
- set _WORKAREASIZE $WORKAREASIZE
-} else {
- set _WORKAREASIZE 0x10000
-}
-
-if { [info exists CPUTAPID] } {
- set _CPUTAPID $CPUTAPID
-} else {
- set _CPUTAPID 0x01002927
-}
-
-swj_newdap $_CHIPNAME cpu -expected-id $_CPUTAPID
-dap create $_CHIPNAME.dap -chain-position $_CHIPNAME.cpu
-set _TARGETNAME $_CHIPNAME.cpu
-target create $_TARGETNAME cortex_m -dap $_CHIPNAME.dap
-
-# Backup the work area. The flash probe runs an algorithm on the target CPU.
-# The flash is probed during gdb connect if gdb_memory_map is enabled (by default).
-$_TARGETNAME configure -work-area-phys 0x20010000 -work-area-size $_WORKAREASIZE -work-area-backup 1
-
-set _FLASHNAME $_CHIPNAME.flash
-set _FLASHSIZE 0x200000
-set _FLASHBASE 0x10000000
-flash bank $_FLASHNAME rp2040_flash $_FLASHBASE $_FLASHSIZE 1 32 $_TARGETNAME
-
-# srst does not exist; use SYSRESETREQ to perform a soft reset
-cortex_m reset_config sysresetreq
-----------------------------------------------------------------------
Summary of changes:
tcl/target/rp2040-core0.cfg | 52 ---------------------------------------------
1 file changed, 52 deletions(-)
delete mode 100644 tcl/target/rp2040-core0.cfg
hooks/post-receive
--
Main OpenOCD repository
|