diff options
author | Evgeniy Naydanov <evgeniy.naydanov@syntacore.com> | 2024-03-07 12:38:57 +0300 |
---|---|---|
committer | Evgeniy Naydanov <evgeniy.naydanov@syntacore.com> | 2024-03-07 12:38:57 +0300 |
commit | 19acf51c396cc311c12fc096296f218497b0bfb8 (patch) | |
tree | 56f0e20979d17c90464473527077549f796a542b /src/jtag | |
parent | ca7d88252633a5d452ee92e6f8f3eb20cadfb633 (diff) | |
parent | 07141132a7d787005c0829618a60b4a842be7847 (diff) | |
download | riscv-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.c | 2 | ||||
-rw-r--r-- | src/jtag/drivers/driver.c | 9 | ||||
-rw-r--r-- | src/jtag/drivers/mpsse.c | 18 | ||||
-rw-r--r-- | src/jtag/drivers/mpsse.h | 6 |
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; |