allow jtag interfaces to lack commands
[openocd.git] / src / jtag / rlink / rlink.c
index add945807ac493ac9372eccb98039906fb732202..c88067c95b80fe563a992626ca816bb0343fd724 100644 (file)
@@ -2,7 +2,7 @@
  *   Copyright (C) 2005 by Dominic Rath                                    *
  *   Dominic.Rath@gmx.de                                                   *
  *                                                                         *
- *   Copyright (C) 2007,2008 Øyvind Harboe                                 *
+ *   Copyright (C) 2007,2008 Øyvind Harboe                                 *
  *   oyvind.harboe@zylin.com                                               *
  *                                                                         *
  *   Copyright (C) 2008 Rob Brown, Lou Deluxe                              *
@@ -137,14 +137,14 @@ ep1_generic_commandl(
                usb_buffer_p,
                0,
                sizeof(usb_buffer) - (usb_buffer_p - usb_buffer)
-       );
+);
 
        usb_ret = usb_bulk_write(
                pHDev,
                USB_EP1OUT_ADDR,
                (char *)usb_buffer, sizeof(usb_buffer),
                USB_TIMEOUT_MS
-       );
+);
 
        return(usb_ret);
 }
@@ -170,7 +170,7 @@ ep1_memory_read(
                usb_buffer + 4,
                0,
                sizeof(usb_buffer) - 4
-       );
+);
 
        remain = length;
        count = 0;
@@ -190,7 +190,7 @@ ep1_memory_read(
                        pHDev, USB_EP1OUT_ADDR,
                        usb_buffer, sizeof(usb_buffer),
                        USB_TIMEOUT_MS
-               );
+);
 
                if (usb_ret < sizeof(usb_buffer)) {
                        break;
@@ -200,7 +200,7 @@ ep1_memory_read(
                        pHDev, USB_EP1IN_ADDR,
                        buffer, length,
                        USB_TIMEOUT_MS
-               );
+);
 
                if (usb_ret < length) {
                        break;
@@ -250,18 +250,18 @@ ep1_memory_write(
                        usb_buffer + 4,
                        buffer,
                        length
-               );
+);
                memset(
                        usb_buffer + 4 + length,
                        0,
                        sizeof(usb_buffer) - 4 - length
-               );
+);
 
                        usb_ret = usb_bulk_write(
                        pHDev, USB_EP1OUT_ADDR,
                        (char *)usb_buffer, sizeof(usb_buffer),
                        USB_TIMEOUT_MS
-               );
+);
 
                if ((size_t)usb_ret < sizeof(usb_buffer)) {
                        break;
@@ -345,7 +345,7 @@ dtc_load_from_buffer(
        usb_err = ep1_generic_commandl(
                pHDev, 1,
                EP1_CMD_DTC_STOP
-       );
+);
        if (usb_err < 0) return(usb_err);
 
        while (length) {
@@ -380,7 +380,7 @@ dtc_load_from_buffer(
                                        pHDev,
                                        DTC_LOAD_BUFFER,
                                        header->length + 1, buffer
-                               );
+);
                                if (usb_err < 0) return(usb_err);
 
                                /* Load it into the DTC. */
@@ -389,7 +389,7 @@ dtc_load_from_buffer(
                                        EP1_CMD_DTC_LOAD,
                                                (DTC_LOAD_BUFFER >> 8),
                                                DTC_LOAD_BUFFER
-                               );
+);
                                if (usb_err < 0) return(usb_err);
 
                                break;
@@ -400,7 +400,7 @@ dtc_load_from_buffer(
                                        EP1_CMD_DTC_CALL,
                                                buffer[0],
                                        EP1_CMD_DTC_WAIT
-                               );
+);
                                if (usb_err < 0) return(usb_err);
 
                                break;
@@ -414,7 +414,7 @@ dtc_load_from_buffer(
                                        pHDev,
                                        ST7_USB_BUF_EP0OUT + lut_start,
                                        header->length + 1, buffer
-                               );
+);
                                if (usb_err < 0) return(usb_err);
                                break;
 
@@ -452,7 +452,7 @@ dtc_start_download(void) {
                        ST7_EP2TXR >> 8,
                        ST7_EP2TXR,
                        1
-       );
+);
        if (usb_err < 0) return(usb_err);
 
        /* read back ep2txr */
@@ -460,7 +460,7 @@ dtc_start_download(void) {
                pHDev, USB_EP1IN_ADDR,
                (char *)&ep2txr, 1,
                USB_TIMEOUT_MS
-       );
+);
        if (usb_err < 0) return(usb_err);
 
        usb_err = ep1_generic_commandl(
@@ -479,7 +479,7 @@ dtc_start_download(void) {
                EP1_CMD_DTC_CALL,       /* start running the DTC */
                        dtc_entry_download,
                EP1_CMD_DTC_GET_CACHED_STATUS
-       );
+);
        if (usb_err < 0) return(usb_err);
 
        /* wait for completion */
@@ -487,7 +487,7 @@ dtc_start_download(void) {
                pHDev, USB_EP1IN_ADDR,
                (char *)&ep2txr, 1,
                USB_TIMEOUT_MS
-       );
+);
 
        return(usb_err);
 }
@@ -513,7 +513,7 @@ dtc_run_download(
                USB_EP2OUT_ADDR,
                (char *)command_buffer, USB_EP2BANK_SIZE,
                USB_TIMEOUT_MS
-       );
+);
        if (usb_err < 0) return(usb_err);
 
 
@@ -526,7 +526,7 @@ dtc_run_download(
                                DTC_STATUS_POLL_BYTE >> 8,
                                DTC_STATUS_POLL_BYTE,
                                1
-               );
+);
                if (usb_err < 0) return(usb_err);
 
                usb_err = usb_bulk_read(
@@ -534,7 +534,7 @@ dtc_run_download(
                        USB_EP1IN_ADDR,
                        (char *)ep2_buffer, 1,
                        USB_TIMEOUT_MS
-               );
+);
                if (usb_err < 0) return(usb_err);
 
                if (ep2_buffer[0] & 0x01) break;
@@ -542,7 +542,7 @@ dtc_run_download(
                if (!--i) {
                        LOG_ERROR("%s, %d: too many retries waiting for DTC status\n",
                                __FILE__, __LINE__
-                       );
+);
                        return(-ETIMEDOUT);
                }
        }
@@ -555,12 +555,12 @@ dtc_run_download(
                        USB_EP2IN_ADDR,
                        (char *)ep2_buffer, sizeof(ep2_buffer),
                        USB_TIMEOUT_MS
-               );
+);
 
                if (usb_err < (int)sizeof(ep2_buffer)) {
                        LOG_ERROR("%s, %d: Read of endpoint 2 returned %d\n",
                                __FILE__, __LINE__, usb_err
-                       );
+);
                        return(usb_err);
                }
 
@@ -576,10 +576,9 @@ dtc_run_download(
  * The dtc reply queue is a singly linked list that describes what to do with the reply packet that comes from the DTC.  Only SCAN_IN and SCAN_IO generate these entries.
  */
 
-typedef
-struct dtc_reply_queue_entry_s {
-       struct dtc_reply_queue_entry_s  *next;
-       jtag_command_t  *cmd;   /* the command that resulted in this entry */
+struct dtc_reply_queue_entry {
+       struct dtc_reply_queue_entry    *next;
+       struct jtag_command     *cmd;   /* the command that resulted in this entry */
 
        struct {
                uint8_t         *buffer;        /* the scan buffer */
@@ -588,7 +587,7 @@ struct dtc_reply_queue_entry_s {
                int             length;         /* how many bits are processed in this operation? */
                enum scan_type  type;           /* SCAN_IN/SCAN_OUT/SCAN_IO */
        } scan;
-} dtc_reply_queue_entry_t;
+};
 
 
 /*
@@ -598,8 +597,8 @@ struct dtc_reply_queue_entry_s {
 
 static
 struct {
-       dtc_reply_queue_entry_t *rq_head;
-       dtc_reply_queue_entry_t *rq_tail;
+       struct dtc_reply_queue_entry    *rq_head;
+       struct dtc_reply_queue_entry    *rq_tail;
        uint32_t                        cmd_index;
        uint32_t                        reply_index;
        uint8_t                 cmd_buffer[USB_EP2BANK_SIZE];
@@ -631,18 +630,18 @@ dtc_queue_init(void) {
 
 static
 inline
-dtc_reply_queue_entry_t *
+struct dtc_reply_queue_entry *
 dtc_queue_enqueue_reply(
        enum scan_type  type,
        uint8_t                         *buffer,
        int                             size,
        int                             offset,
        int                             length,
-       jtag_command_t  *cmd
+       struct jtag_command     *cmd
 ) {
-       dtc_reply_queue_entry_t *rq_entry;
+       struct dtc_reply_queue_entry    *rq_entry;
 
-       rq_entry = malloc(sizeof(dtc_reply_queue_entry_t));
+       rq_entry = malloc(sizeof(struct dtc_reply_queue_entry));
        if (rq_entry != NULL) {
                rq_entry->scan.type = type;
                rq_entry->scan.buffer = buffer;
@@ -672,7 +671,7 @@ dtc_queue_enqueue_reply(
 static
 int
 dtc_queue_run(void) {
-       dtc_reply_queue_entry_t *rq_p, *rq_next;
+       struct dtc_reply_queue_entry    *rq_p, *rq_next;
        int                     retval;
        int                     usb_err;
        int                     bit_cnt;
@@ -692,7 +691,7 @@ dtc_queue_run(void) {
                usb_err = dtc_run_download(pHDev,
                        dtc_queue.cmd_buffer, dtc_queue.cmd_index,
                        NULL, 0
-               );
+);
                if (usb_err < 0) {
                        LOG_ERROR("dtc_run_download: %s\n", usb_strerror());
                        exit(1);
@@ -701,7 +700,7 @@ dtc_queue_run(void) {
                usb_err = dtc_run_download(pHDev,
                        dtc_queue.cmd_buffer, dtc_queue.cmd_index,
                        reply_buffer, dtc_queue.reply_index
-               );
+);
                if (usb_err < 0) {
                        LOG_ERROR("dtc_run_download: %s\n", usb_strerror());
                        exit(1);
@@ -715,7 +714,7 @@ dtc_queue_run(void) {
                                rq_p = dtc_queue.rq_head;
                                rq_p != NULL;
                                rq_p = rq_next
-                       ) {
+) {
                                tdo_p = rq_p->scan.buffer + (rq_p->scan.offset / 8);
                                tdo_mask = 1 << (rq_p->scan.offset % 8);
 
@@ -730,7 +729,7 @@ dtc_queue_run(void) {
                                                ;
                                                bit_cnt;
                                                bit_cnt--
-                                       ) {
+) {
                                                if (*dtc_p & dtc_mask) {
                                                        *tdo_p |= tdo_mask;
                                                } else {
@@ -755,9 +754,9 @@ dtc_queue_run(void) {
                                        x = *dtc_p++;
                                        if ((
                                                rq_p->scan.type == SCAN_IN
-                                       ) && (
+) && (
                                                rq_p->scan.offset != rq_p->scan.size - 1
-                                       )) {
+)) {
                                                /* extra bits were sent as a full byte with padding on the end */
                                                dtc_mask = 1 << (8 - 1);
                                        } else {
@@ -768,7 +767,7 @@ dtc_queue_run(void) {
                                                ;
                                                bit_cnt;
                                                bit_cnt--
-                                       ) {
+) {
                                                if (x & dtc_mask) {
                                                        *tdo_p |= tdo_mask;
                                                } else {
@@ -929,7 +928,7 @@ void rlink_state_move(void) {
 }
 
 static
-void rlink_path_move(pathmove_command_t *cmd)
+void rlink_path_move(struct pathmove_command *cmd)
 {
        int num_states = cmd->num_states;
        int state_count;
@@ -1004,7 +1003,7 @@ void rlink_reset(int trst, int srst)
                        ST7_PADR >> 8,
                        ST7_PADR,
                        1
-       );
+);
        if (usb_err < 0) {
                LOG_ERROR("%s", usb_strerror());
                exit(1);
@@ -1014,7 +1013,7 @@ void rlink_reset(int trst, int srst)
                pHDev, USB_EP1IN_ADDR,
                (char *)&bitmap, 1,
                USB_TIMEOUT_MS
-       );
+);
        if (usb_err < 1) {
                LOG_ERROR("%s", usb_strerror());
                exit(1);
@@ -1039,7 +1038,7 @@ void rlink_reset(int trst, int srst)
                        ST7_PBDDR >> 8,
                        ST7_PBDDR,
                        1
-       );
+);
        if (usb_err < 0) {
                LOG_ERROR("%s", usb_strerror());
                exit(1);
@@ -1049,7 +1048,7 @@ void rlink_reset(int trst, int srst)
                pHDev, USB_EP1IN_ADDR,
                (char *)&bitmap, 1,
                USB_TIMEOUT_MS
-       );
+);
        if (usb_err < 1) {
                LOG_ERROR("%s", usb_strerror());
                exit(1);
@@ -1070,7 +1069,7 @@ void rlink_reset(int trst, int srst)
                        1,
                        bitmap,
                EP1_CMD_DTC_GET_CACHED_STATUS
-       );
+);
        if (usb_err < 0) {
                LOG_ERROR("%s", usb_strerror());
                exit(1);
@@ -1080,7 +1079,7 @@ void rlink_reset(int trst, int srst)
                pHDev, USB_EP1IN_ADDR,
                (char *)&bitmap, 1,
                USB_TIMEOUT_MS
-       );
+);
        if (usb_err < 1) {
                LOG_ERROR("%s", usb_strerror());
                exit(1);
@@ -1091,7 +1090,7 @@ void rlink_reset(int trst, int srst)
 static
 int
 rlink_scan(
-       jtag_command_t  *cmd,
+       struct jtag_command     *cmd,
        enum scan_type  type,
        uint8_t                 *buffer,
        int                     scan_size
@@ -1120,7 +1119,7 @@ rlink_scan(
                (!ir_scan && (tap_get_state() == TAP_DRSHIFT))
                ||
                (ir_scan && (tap_get_state() == TAP_IRSHIFT))
-       )) {
+)) {
                saved_end_state = tap_get_end_state();
                rlink_end_state(ir_scan ? TAP_IRSHIFT : TAP_DRSHIFT);
                rlink_state_move();
@@ -1162,7 +1161,7 @@ rlink_scan(
                /* make sure there's room for stop, byte op, and one byte */
                if (
                        (dtc_queue.cmd_index >= sizeof(dtc_queue.cmd_buffer) - (1 + 1 + 1))
-               ) {
+) {
                        dtc_queue_run();
                }
 
@@ -1232,7 +1231,7 @@ rlink_scan(
                                type, buffer, scan_size, tdi_bit_offset,
                                chunk_bits,
                                cmd
-                       ) == NULL) {
+) == NULL) {
                                LOG_ERROR("enqueuing DTC reply entry: %s\n", strerror(errno));
                                exit(1);
                        }
@@ -1289,7 +1288,7 @@ rlink_scan(
                        (dtc_queue.cmd_index >= sizeof(dtc_queue.cmd_buffer) - (1 + 1 + 1))
                        ||
                        (dtc_queue.reply_index >= USB_EP2IN_SIZE - (1))
-               ) {
+) {
                        dtc_queue_run();
                }
 
@@ -1297,7 +1296,7 @@ rlink_scan(
                        type, buffer, scan_size, tdi_bit_offset,
                        extra_bits,
                        cmd
-               ) == NULL) {
+) == NULL) {
                        LOG_ERROR("enqueuing DTC reply entry: %s\n", strerror(errno));
                        exit(1);
                }
@@ -1342,7 +1341,7 @@ rlink_scan(
                        (dtc_queue.cmd_index >= sizeof(dtc_queue.cmd_buffer) - (1 + 1))
                        ||
                        (dtc_queue.reply_index >= USB_EP2IN_SIZE - (1))
-               ) {
+) {
                        dtc_queue_run();
                }
 
@@ -1355,7 +1354,7 @@ rlink_scan(
                                type, buffer, scan_size, tdi_bit_offset,
                                1,
                                cmd
-                       ) == NULL) {
+) == NULL) {
                                LOG_ERROR("enqueuing DTC reply entry: %s\n", strerror(errno));
                                exit(1);
                        }
@@ -1379,7 +1378,7 @@ rlink_scan(
 static
 int rlink_execute_queue(void)
 {
-       jtag_command_t *cmd = jtag_command_queue; /* currently processed command */
+       struct jtag_command *cmd = jtag_command_queue; /* currently processed command */
        int scan_size;
        enum scan_type type;
        uint8_t *buffer;
@@ -1393,7 +1392,7 @@ int rlink_execute_queue(void)
        ep1_generic_commandl(pHDev, 2,
                EP1_CMD_SET_PORTD_LEDS,
                ~(ST7_PD_NBUSY_LED)
-       );
+);
 #endif
 
        while (cmd)
@@ -1484,7 +1483,7 @@ int rlink_execute_queue(void)
        ep1_generic_commandl(pHDev, 2,
                EP1_CMD_SET_PORTD_LEDS,
                ~0
-       );
+);
 #endif
 
        return retval;
@@ -1503,7 +1502,7 @@ int rlink_speed(int speed)
                speed = rlink_speed_table[rlink_speed_table_size - 1].prescaler;
        }
 
-       for (i = rlink_speed_table_size; i--; ) {
+       for (i = rlink_speed_table_size; i--;) {
                if (rlink_speed_table[i].prescaler == speed) {
                        if (dtc_load_from_buffer(pHDev, rlink_speed_table[i].dtc, rlink_speed_table[i].dtc_size) != 0) {
                                LOG_ERROR("An error occurred while trying to load DTC code for speed \"%d\".\n", speed);
@@ -1514,7 +1513,7 @@ int rlink_speed(int speed)
                                LOG_ERROR("%s, %d: starting DTC: %s",
                                        __FILE__, __LINE__,
                                        usb_strerror()
-                               );
+);
                                exit(1);
                        }
 
@@ -1534,7 +1533,7 @@ int rlink_speed_div(
 ) {
        int     i;
 
-       for (i = rlink_speed_table_size; i--; ) {
+       for (i = rlink_speed_table_size; i--;) {
                if (rlink_speed_table[i].prescaler == speed) {
                        *khz = rlink_speed_table[i].khz;
                        return(ERROR_OK);
@@ -1558,7 +1557,7 @@ int rlink_khz(
                return ERROR_FAIL;
        }
 
-       for (i = rlink_speed_table_size; i--; ) {
+       for (i = rlink_speed_table_size; i--;) {
                if (rlink_speed_table[i].khz <= khz) {
                        *speed = rlink_speed_table[i].prescaler;
                        return(ERROR_OK);
@@ -1575,7 +1574,7 @@ int rlink_khz(
 static
 int
 handle_dtc_directory_command(
-       struct command_context_s *cmd_ctx,
+       struct command_context *cmd_ctx,
        char *cmd,
        char **args,
        int argc
@@ -1593,7 +1592,7 @@ handle_dtc_directory_command(
 
 
 static
-int rlink_register_commands(struct command_context_s *cmd_ctx)
+int rlink_register_commands(struct command_context *cmd_ctx)
 {
 
 #ifdef _DEBUG_JTAG_IO_
@@ -1607,7 +1606,7 @@ int rlink_register_commands(struct command_context_s *cmd_ctx)
                handle_dtc_directory_command,
                COMMAND_CONFIG,
                "The directory in which to search for DTC load images"
-       );
+);
 #endif
 
        return ERROR_OK;
@@ -1636,26 +1635,26 @@ int rlink_init(void)
 
                for (dev = bus->devices; dev; dev = dev->next)
                {
-                       if ((dev->descriptor.idVendor == USB_IDVENDOR) && (dev->descriptor.idProduct == USB_IDPRODUCT) )
+                       if ((dev->descriptor.idVendor == USB_IDVENDOR) && (dev->descriptor.idProduct == USB_IDPRODUCT))
                        {
                                found = 1;
                                LOG_DEBUG("Found device on bus.\n");
 
                                do
                                {
-                                       if (dev->descriptor.bNumConfigurations > 1 )
+                                       if (dev->descriptor.bNumConfigurations > 1)
                                        {
                                                LOG_ERROR("Whoops! NumConfigurations is not 1, don't know what to do...\n");
                                                break;
                                        }
-                                       if (dev->config->bNumInterfaces > 1 )
+                                       if (dev->config->bNumInterfaces > 1)
                                        {
                                                LOG_ERROR("Whoops! NumInterfaces is not 1, don't know what to do...\n");
                                                break;
                                        }
 
                                        pHDev = usb_open(dev);
-                                       if (!pHDev )
+                                       if (!pHDev)
                                                LOG_ERROR ("Failed to open device.\n");
                                        else
                                        {
@@ -1686,7 +1685,7 @@ int rlink_init(void)
 
                                                if (!i)
                                                {
-                                                       if (usb_set_altinterface(pHDev,0) )
+                                                       if (usb_set_altinterface(pHDev,0))
                                                        {
                                                                LOG_ERROR("Failed to set interface.\n");
                                                                break;
@@ -1700,13 +1699,13 @@ int rlink_init(void)
                }
        }
 
-       if (!found )
+       if (!found)
        {
                LOG_ERROR("No device found on bus.\n");
                exit(1);
        }
 
-       if (!success )
+       if (!success)
        {
                LOG_ERROR("Initialisation failed.");
                exit(1);
@@ -1719,7 +1718,7 @@ int rlink_init(void)
                j = ep1_generic_commandl(
                        pHDev, 1,
                        EP1_CMD_GET_FWREV
-               );
+);
                if (j < USB_EP1OUT_SIZE) {
                        LOG_ERROR("USB write error: %s", usb_strerror());
                        return(ERROR_FAIL);
@@ -1728,7 +1727,7 @@ int rlink_init(void)
                        pHDev, USB_EP1IN_ADDR,
                        (char *)reply_buffer, sizeof(reply_buffer),
                        200
-               );
+);
                if (j != -ETIMEDOUT) break;
        }
 
@@ -1761,13 +1760,13 @@ int rlink_init(void)
                        ST7_PEDR,
                        1,
                        ST7_PE_ADAPTER_SENSE_OUT
-       );
+);
 
        usb_bulk_read(
                pHDev, USB_EP1IN_ADDR,
                (char *)reply_buffer, 1,
                USB_TIMEOUT_MS
-       );
+);
 
        if ((reply_buffer[0] & ST7_PE_ADAPTER_SENSE_IN) != 0) {
                LOG_WARNING("target detection problem\n");
@@ -1786,13 +1785,13 @@ int rlink_init(void)
                        0x00,   /* DR */
                        0x00,   /* DDR */
                        0x00    /* OR */
-       );
+);
 
        usb_bulk_read(
                pHDev, USB_EP1IN_ADDR,
                (char *)reply_buffer, 1,
                USB_TIMEOUT_MS
-       );
+);
 
 
        if ((reply_buffer[0] & ST7_PE_ADAPTER_SENSE_IN) == 0) {
@@ -1813,7 +1812,7 @@ int rlink_init(void)
                        ST7_PBDDR,
                        1,
                        0x00
-       );
+);
 
        /* make sure DTC is stopped, set VPP control, set up ports A and B */
        ep1_generic_commandl(
@@ -1833,7 +1832,7 @@ int rlink_init(void)
                        ST7_PBDR,
                        1,
                        0x00
-       );
+);
 
        /* set LED updating mode and make sure they're unlit */
        ep1_generic_commandl(
@@ -1845,7 +1844,7 @@ int rlink_init(void)
 #endif
                EP1_CMD_SET_PORTD_LEDS,
                        ~0
-       );
+);
 
        tap_state_queue_init();
        dtc_queue_init();
@@ -1868,7 +1867,7 @@ int rlink_quit(void)
                        ~0,
                EP1_CMD_SET_PORTD_VPP,
                        ~0
-       );
+);
 
        usb_release_interface(pHDev,0);
        usb_close(pHDev);
@@ -1878,7 +1877,7 @@ int rlink_quit(void)
 }
 
 
-jtag_interface_t rlink_interface =
+struct jtag_interface rlink_interface =
 {
        .name = "rlink",
        .init = rlink_init,

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)