diff --git a/src/platforms/hosted/ftdi_bmp.c b/src/platforms/hosted/ftdi_bmp.c index e664d466ead..db83f843170 100644 --- a/src/platforms/hosted/ftdi_bmp.c +++ b/src/platforms/hosted/ftdi_bmp.c @@ -359,6 +359,19 @@ const cable_desc_s cable_desc[] = { .bb_swdio_in_pin = MPSSE_CS, .name = "hifive1", }, + { + /* + * 1bitSquared Icebreaker FT2232H + * Direct connection on Interface A, JTAG only + */ + .vendor = 0x0403U, + .product = 0x6010U, + .interface = INTERFACE_A, + .init.data[0] = MPSSE_CS | MPSSE_DO | MPSSE_DI, + .init.dirs[0] = MPSSE_CS | MPSSE_DO | MPSSE_SK, + .description = "Dual RS232-HS", + .name = "icebreaker", + }, { /* * https://www.olimex.com/Products/ARM/JTAG/ARM-USB-TINY-H/ diff --git a/src/target/jtag_devs.c b/src/target/jtag_devs.c index ecd6eca761a..748977a3085 100644 --- a/src/target/jtag_devs.c +++ b/src/target/jtag_devs.c @@ -410,6 +410,14 @@ const jtag_dev_descr_s dev_descr[] = { .idmask = 0x0fffffffU, #if ENABLE_DEBUG == 1 .descr = "RISC-V debug v0.13.", +#endif + .handler = riscv_jtag_dtm_handler, + }, + { + .idcode = 0xdeadbeefU, + .idmask = 0xffffffffU, +#if ENABLE_DEBUG == 1 + .descr = "RISC-V Hazard3 DTM.", #endif .handler = riscv_jtag_dtm_handler, }, diff --git a/src/target/riscv32.c b/src/target/riscv32.c index 0d98a1b1596..5aa0e8c797e 100644 --- a/src/target/riscv32.c +++ b/src/target/riscv32.c @@ -71,6 +71,13 @@ static void riscv32_regs_write(target_s *target, const void *data); static int riscv32_breakwatch_set(target_s *target, breakwatch_s *breakwatch); static int riscv32_breakwatch_clear(target_s *target, breakwatch_s *breakwatch); +bool hazard3_probe(target_s *const target) +{ + target->driver = "Hazard3"; + target_add_ram32(target, 0x0, 131072); + return true; +} + bool riscv32_probe(target_s *const target) { /* 'E' base ISA has 16 GPRs + PC, 'I' base ISA has 32 GPRs + PC */ @@ -95,6 +102,9 @@ bool riscv32_probe(target_s *const target) case JEP106_MANUFACTURER_RASPBERRY: PROBE(rp2350_probe); break; + case 0xe77: + PROBE(hazard3_probe); + break; default: break; }