aboutsummaryrefslogtreecommitdiff
path: root/src/jtag
diff options
context:
space:
mode:
authorEvgeniy Naydanov <evgeniy.naydanov@syntacore.com>2024-03-07 12:38:57 +0300
committerEvgeniy Naydanov <evgeniy.naydanov@syntacore.com>2024-03-07 12:38:57 +0300
commit19acf51c396cc311c12fc096296f218497b0bfb8 (patch)
tree56f0e20979d17c90464473527077549f796a542b /src/jtag
parentca7d88252633a5d452ee92e6f8f3eb20cadfb633 (diff)
parent07141132a7d787005c0829618a60b4a842be7847 (diff)
downloadriscv-openocd-19acf51c396cc311c12fc096296f218497b0bfb8.zip
riscv-openocd-19acf51c396cc311c12fc096296f218497b0bfb8.tar.gz
riscv-openocd-19acf51c396cc311c12fc096296f218497b0bfb8.tar.bz2
Merge up to 07141132a7d787005c0829618a60b4a842be7847 from upstream
Change-Id: Ibca0c8093e2983e1ee199f79ed777f5136794195
Diffstat (limited to 'src/jtag')
-rw-r--r--src/jtag/commands.c2
-rw-r--r--src/jtag/drivers/driver.c9
-rw-r--r--src/jtag/drivers/mpsse.c18
-rw-r--r--src/jtag/drivers/mpsse.h6
4 files changed, 34 insertions, 1 deletions
diff --git a/src/jtag/commands.c b/src/jtag/commands.c
index c36c219..a60684c 100644
--- a/src/jtag/commands.c
+++ b/src/jtag/commands.c
@@ -103,7 +103,7 @@ void *cmd_queue_alloc(size_t size)
if (*p_page) {
p_page = &cmd_queue_pages_tail;
- if (CMD_QUEUE_PAGE_SIZE - (*p_page)->used < size)
+ if (CMD_QUEUE_PAGE_SIZE < (*p_page)->used + size)
p_page = &((*p_page)->next);
}
diff --git a/src/jtag/drivers/driver.c b/src/jtag/drivers/driver.c
index fae2aad..e52816d 100644
--- a/src/jtag/drivers/driver.c
+++ b/src/jtag/drivers/driver.c
@@ -116,12 +116,21 @@ int interface_jtag_add_dr_scan(struct jtag_tap *active, int in_num_fields,
/* count devices in bypass */
size_t bypass_devices = 0;
+ size_t all_devices = 0;
for (struct jtag_tap *tap = jtag_tap_next_enabled(NULL); tap; tap = jtag_tap_next_enabled(tap)) {
+ all_devices++;
+
if (tap->bypass)
bypass_devices++;
}
+ if (all_devices == bypass_devices) {
+ LOG_ERROR("At least one TAP shouldn't be in BYPASS mode");
+
+ return ERROR_FAIL;
+ }
+
struct jtag_command *cmd = cmd_queue_alloc(sizeof(struct jtag_command));
struct scan_command *scan = cmd_queue_alloc(sizeof(struct scan_command));
struct scan_field *out_fields = cmd_queue_alloc((in_num_fields + bypass_devices) * sizeof(struct scan_field));
diff --git a/src/jtag/drivers/mpsse.c b/src/jtag/drivers/mpsse.c
index 41a8b6e..f3499e3 100644
--- a/src/jtag/drivers/mpsse.c
+++ b/src/jtag/drivers/mpsse.c
@@ -265,6 +265,24 @@ static bool open_matching_device(struct mpsse_ctx *ctx, const uint16_t vids[], c
case 0x900:
ctx->type = TYPE_FT232H;
break;
+ case 0x2800:
+ ctx->type = TYPE_FT2233HP;
+ break;
+ case 0x2900:
+ ctx->type = TYPE_FT4233HP;
+ break;
+ case 0x3000:
+ ctx->type = TYPE_FT2232HP;
+ break;
+ case 0x3100:
+ ctx->type = TYPE_FT4232HP;
+ break;
+ case 0x3200:
+ ctx->type = TYPE_FT233HP;
+ break;
+ case 0x3300:
+ ctx->type = TYPE_FT232HP;
+ break;
default:
LOG_ERROR("unsupported FTDI chip type: 0x%04x", desc.bcdDevice);
goto error;
diff --git a/src/jtag/drivers/mpsse.h b/src/jtag/drivers/mpsse.h
index a017aff..e92a9bb 100644
--- a/src/jtag/drivers/mpsse.h
+++ b/src/jtag/drivers/mpsse.h
@@ -24,6 +24,12 @@ enum ftdi_chip_type {
TYPE_FT2232H,
TYPE_FT4232H,
TYPE_FT232H,
+ TYPE_FT2233HP,
+ TYPE_FT4233HP,
+ TYPE_FT2232HP,
+ TYPE_FT4232HP,
+ TYPE_FT233HP,
+ TYPE_FT232HP,
};
struct mpsse_ctx;