openocd: src/target: replace the GPL-2.0-or-later license tag
[openocd.git] / src / target / arm11_dbgtap.c
index 96e6891d0950cb5cd7af4a70dbd881edf42c2825..5035d9e053fb95decc5a7171340351d31abd7a45 100644 (file)
@@ -1,21 +1,10 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
 /***************************************************************************
  *   Copyright (C) 2008 digenius technology GmbH.                          *
  *   Michael Bruck                                                         *
  *                                                                         *
  *   Copyright (C) 2008,2009 Oyvind Harboe oyvind.harboe@zylin.com         *
- *                                                                         *
- *   This program is free software; you can redistribute it and/or modify  *
- *   it under the terms of the GNU General Public License as published by  *
- *   the Free Software Foundation; either version 2 of the License, or     *
- *   (at your option) any later version.                                   *
- *                                                                         *
- *   This program is distributed in the hope that it will be useful,       *
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
- *   GNU General Public License for more details.                          *
- *                                                                         *
- *   You should have received a copy of the GNU General Public License     *
- *   along with this program.  If not, see <http://www.gnu.org/licenses/>. *
  ***************************************************************************/
 
 #ifdef HAVE_CONFIG_H
@@ -132,7 +121,7 @@ static const char *arm11_ir_to_string(uint8_t ir)
  *
  * \remarks                    This adds to the JTAG command queue but does \em not execute it.
  */
-void arm11_add_IR(struct arm11_common *arm11, uint8_t instr, tap_state_t state)
+void arm11_add_ir(struct arm11_common *arm11, uint8_t instr, tap_state_t state)
 {
        struct jtag_tap *tap = arm11->arm.target->tap;
 
@@ -153,7 +142,7 @@ void arm11_add_IR(struct arm11_common *arm11, uint8_t instr, tap_state_t state)
 }
 
 /** Verify data shifted out from Scan Chain Register (SCREG). */
-static void arm11_in_handler_SCAN_N(uint8_t *in_value)
+static void arm11_in_handler_scan_n(uint8_t *in_value)
 {
        /* Don't expect JTAG layer to modify bits we didn't ask it to read */
        uint8_t v = *in_value & 0x1F;
@@ -186,12 +175,12 @@ static void arm11_in_handler_SCAN_N(uint8_t *in_value)
  *                                     call will end in Pause-DR. The second call, due to the IR
  *                                     caching, will not go through Capture-DR when shifting in the
  *                                     new scan chain number. As a result the verification in
- *                                     arm11_in_handler_SCAN_N() must fail.
+ *                                     arm11_in_handler_scan_n() must fail.
  *
  * \remarks                    This adds to the JTAG command queue but does \em not execute it.
  */
 
-int arm11_add_debug_SCAN_N(struct arm11_common *arm11,
+int arm11_add_debug_scan_n(struct arm11_common *arm11,
        uint8_t chain, tap_state_t state)
 {
        /* Don't needlessly switch the scan chain.
@@ -211,7 +200,7 @@ int arm11_add_debug_SCAN_N(struct arm11_common *arm11,
 #endif
        JTAG_DEBUG("SCREG <= %d", chain);
 
-       arm11_add_IR(arm11, ARM11_SCAN_N, ARM11_TAP_DEFAULT);
+       arm11_add_ir(arm11, ARM11_SCAN_N, ARM11_TAP_DEFAULT);
 
        struct scan_field field;
 
@@ -225,7 +214,7 @@ int arm11_add_debug_SCAN_N(struct arm11_common *arm11,
 
        jtag_execute_queue_noclear();
 
-       arm11_in_handler_SCAN_N(tmp);
+       arm11_in_handler_scan_n(tmp);
 
        arm11->jtag_info.cur_scan_chain = chain;
 
@@ -250,7 +239,7 @@ int arm11_add_debug_SCAN_N(struct arm11_common *arm11,
  * is properly set up.  Depending on the instruction, you may also need
  * to ensure that the rDTR is ready before that Run-Test/Idle state.
  */
-static void arm11_add_debug_INST(struct arm11_common *arm11,
+static void arm11_add_debug_inst(struct arm11_common *arm11,
        uint32_t inst, uint8_t *flag, tap_state_t state)
 {
        JTAG_DEBUG("INST <= 0x%08x", (unsigned) inst);
@@ -273,15 +262,15 @@ static void arm11_add_debug_INST(struct arm11_common *arm11,
  * command queue.  It does not require the ARM11 debug TAP to be
  * in any particular state.
  */
-int arm11_read_DSCR(struct arm11_common *arm11)
+int arm11_read_dscr(struct arm11_common *arm11)
 {
        int retval;
 
-       retval = arm11_add_debug_SCAN_N(arm11, 0x01, ARM11_TAP_DEFAULT);
+       retval = arm11_add_debug_scan_n(arm11, 0x01, ARM11_TAP_DEFAULT);
        if (retval != ERROR_OK)
                return retval;
 
-       arm11_add_IR(arm11, ARM11_INTEST, ARM11_TAP_DEFAULT);
+       arm11_add_ir(arm11, ARM11_INTEST, ARM11_TAP_DEFAULT);
 
        uint32_t dscr;
        struct scan_field chain1_field;
@@ -311,14 +300,14 @@ int arm11_read_DSCR(struct arm11_common *arm11)
  *
  * \remarks                    This is a stand-alone function that executes the JTAG command queue.
  */
-int arm11_write_DSCR(struct arm11_common *arm11, uint32_t dscr)
+int arm11_write_dscr(struct arm11_common *arm11, uint32_t dscr)
 {
        int retval;
-       retval = arm11_add_debug_SCAN_N(arm11, 0x01, ARM11_TAP_DEFAULT);
+       retval = arm11_add_debug_scan_n(arm11, 0x01, ARM11_TAP_DEFAULT);
        if (retval != ERROR_OK)
                return retval;
 
-       arm11_add_IR(arm11, ARM11_EXTEST, ARM11_TAP_DEFAULT);
+       arm11_add_ir(arm11, ARM11_EXTEST, ARM11_TAP_DEFAULT);
 
        struct scan_field chain1_field;
 
@@ -353,7 +342,7 @@ int arm11_write_DSCR(struct arm11_common *arm11, uint32_t dscr)
  */
 int arm11_run_instr_data_prepare(struct arm11_common *arm11)
 {
-       return arm11_add_debug_SCAN_N(arm11, 0x05, ARM11_TAP_DEFAULT);
+       return arm11_add_debug_scan_n(arm11, 0x05, ARM11_TAP_DEFAULT);
 }
 
 /** Cleanup after ITR/DTR operations
@@ -372,7 +361,7 @@ int arm11_run_instr_data_prepare(struct arm11_common *arm11)
  */
 int arm11_run_instr_data_finish(struct arm11_common *arm11)
 {
-       return arm11_add_debug_SCAN_N(arm11, 0x00, ARM11_TAP_DEFAULT);
+       return arm11_add_debug_scan_n(arm11, 0x00, ARM11_TAP_DEFAULT);
 }
 
 /**
@@ -392,23 +381,23 @@ static
 int arm11_run_instr_no_data(struct arm11_common *arm11,
        uint32_t *opcode, size_t count)
 {
-       arm11_add_IR(arm11, ARM11_ITRSEL, ARM11_TAP_DEFAULT);
+       arm11_add_ir(arm11, ARM11_ITRSEL, ARM11_TAP_DEFAULT);
 
        while (count--) {
-               arm11_add_debug_INST(arm11, *opcode++, NULL, TAP_IDLE);
+               arm11_add_debug_inst(arm11, *opcode++, NULL, TAP_IDLE);
 
                int i = 0;
                while (1) {
                        uint8_t flag;
 
-                       arm11_add_debug_INST(arm11, 0, &flag, count ? TAP_IDLE : TAP_DRPAUSE);
+                       arm11_add_debug_inst(arm11, 0, &flag, count ? TAP_IDLE : TAP_DRPAUSE);
 
                        CHECK_RETVAL(jtag_execute_queue());
 
                        if (flag)
                                break;
 
-                       long long then = 0;
+                       int64_t then = 0;
 
                        if (i == 1000)
                                then = timeval_ms();
@@ -463,35 +452,35 @@ int arm11_run_instr_data_to_core(struct arm11_common *arm11,
        uint32_t *data,
        size_t count)
 {
-       arm11_add_IR(arm11, ARM11_ITRSEL, ARM11_TAP_DEFAULT);
+       arm11_add_ir(arm11, ARM11_ITRSEL, ARM11_TAP_DEFAULT);
 
-       arm11_add_debug_INST(arm11, opcode, NULL, TAP_DRPAUSE);
+       arm11_add_debug_inst(arm11, opcode, NULL, TAP_DRPAUSE);
 
-       arm11_add_IR(arm11, ARM11_EXTEST, ARM11_TAP_DEFAULT);
+       arm11_add_ir(arm11, ARM11_EXTEST, ARM11_TAP_DEFAULT);
 
        struct scan_field chain5_fields[3];
 
-       uint32_t Data;
-       uint8_t Ready;
-       uint8_t nRetry;
+       uint32_t _data;
+       uint8_t ready;
+       uint8_t n_retry;
 
-       arm11_setup_field(arm11, 32,    &Data,  NULL,           chain5_fields + 0);
-       arm11_setup_field(arm11,  1,    NULL,   &Ready,         chain5_fields + 1);
-       arm11_setup_field(arm11,  1,    NULL,   &nRetry,        chain5_fields + 2);
+       arm11_setup_field(arm11, 32,    &_data, NULL,           chain5_fields + 0);
+       arm11_setup_field(arm11,  1,    NULL,   &ready,         chain5_fields + 1);
+       arm11_setup_field(arm11,  1,    NULL,   &n_retry,       chain5_fields + 2);
 
        while (count--) {
                int i = 0;
                do {
-                       Data        = *data;
+                       _data        = *data;
 
                        arm11_add_dr_scan_vc(arm11->arm.target->tap, ARRAY_SIZE(
                                        chain5_fields), chain5_fields, TAP_IDLE);
 
                        CHECK_RETVAL(jtag_execute_queue());
 
-                       JTAG_DEBUG("DTR  Ready %d  nRetry %d", Ready, nRetry);
+                       JTAG_DEBUG("DTR  ready %d  n_retry %d", ready, n_retry);
 
-                       long long then = 0;
+                       int64_t then = 0;
 
                        if (i == 1000)
                                then = timeval_ms();
@@ -504,26 +493,26 @@ int arm11_run_instr_data_to_core(struct arm11_common *arm11,
                        }
 
                        i++;
-               } while (!Ready);
+               } while (!ready);
 
                data++;
        }
 
-       arm11_add_IR(arm11, ARM11_INTEST, ARM11_TAP_DEFAULT);
+       arm11_add_ir(arm11, ARM11_INTEST, ARM11_TAP_DEFAULT);
 
        int i = 0;
        do {
-               Data        = 0;
+               _data        = 0;
 
                arm11_add_dr_scan_vc(arm11->arm.target->tap, ARRAY_SIZE(
                                chain5_fields), chain5_fields, TAP_DRPAUSE);
 
                CHECK_RETVAL(jtag_execute_queue());
 
-               JTAG_DEBUG("DTR  Data %08x  Ready %d  nRetry %d",
-                       (unsigned) Data, Ready, nRetry);
+               JTAG_DEBUG("DTR  _data %08x  ready %d  n_retry %d",
+                       (unsigned) _data, ready, n_retry);
 
-               long long then = 0;
+               int64_t then = 0;
 
                if (i == 1000)
                        then = timeval_ms();
@@ -535,7 +524,7 @@ int arm11_run_instr_data_to_core(struct arm11_common *arm11,
                }
 
                i++;
-       } while (!Ready);
+       } while (!ready);
 
        return ERROR_OK;
 }
@@ -557,16 +546,12 @@ int arm11_run_instr_data_to_core(struct arm11_common *arm11,
  *  https://lists.berlios.de/pipermail/openocd-development/2009-July/009698.html
  *  https://lists.berlios.de/pipermail/openocd-development/2009-August/009865.html
  */
-static const tap_state_t arm11_MOVE_DRPAUSE_IDLE_DRPAUSE_with_delay[] = {
+static const tap_state_t arm11_move_drpause_idle_drpause_with_delay[] = {
        TAP_DREXIT2, TAP_DRUPDATE, TAP_IDLE, TAP_IDLE, TAP_IDLE, TAP_DRSELECT, TAP_DRCAPTURE,
        TAP_DRSHIFT
 };
 
-/* This inner loop can be implemented by the minidriver, oftentimes in hardware... The
- * minidriver can call the default implementation as a fallback or implement it
- * from scratch.
- */
-int arm11_run_instr_data_to_core_noack_inner_default(struct jtag_tap *tap,
+static int arm11_run_instr_data_to_core_noack_inner(struct jtag_tap *tap,
        uint32_t opcode,
        uint32_t *data,
        size_t count)
@@ -585,26 +570,26 @@ int arm11_run_instr_data_to_core_noack_inner_default(struct jtag_tap *tap,
        chain5_fields[2].out_value              = NULL;
        chain5_fields[2].in_value               = NULL;
 
-       uint8_t *Readies;
-       unsigned readiesNum = count;
-       unsigned bytes = sizeof(*Readies)*readiesNum;
+       uint8_t *readies;
+       unsigned readies_num = count;
+       unsigned bytes = sizeof(*readies)*readies_num;
 
-       Readies = malloc(bytes);
-       if (Readies == NULL) {
+       readies = malloc(bytes);
+       if (!readies) {
                LOG_ERROR("Out of memory allocating %u bytes", bytes);
                return ERROR_FAIL;
        }
 
-       uint8_t *ReadyPos                        = Readies;
+       uint8_t *ready_pos                      = readies;
        while (count--) {
                chain5_fields[0].out_value      = (uint8_t *)(data++);
-               chain5_fields[1].in_value       = ReadyPos++;
+               chain5_fields[1].in_value       = ready_pos++;
 
                if (count > 0) {
                        jtag_add_dr_scan(tap, ARRAY_SIZE(chain5_fields), chain5_fields,
                                TAP_DRPAUSE);
-                       jtag_add_pathmove(ARRAY_SIZE(arm11_MOVE_DRPAUSE_IDLE_DRPAUSE_with_delay),
-                               arm11_MOVE_DRPAUSE_IDLE_DRPAUSE_with_delay);
+                       jtag_add_pathmove(ARRAY_SIZE(arm11_move_drpause_idle_drpause_with_delay),
+                               arm11_move_drpause_idle_drpause_with_delay);
                } else
                        jtag_add_dr_scan(tap, ARRAY_SIZE(chain5_fields), chain5_fields, TAP_IDLE);
        }
@@ -613,37 +598,22 @@ int arm11_run_instr_data_to_core_noack_inner_default(struct jtag_tap *tap,
        if (retval == ERROR_OK) {
                unsigned error_count = 0;
 
-               for (size_t i = 0; i < readiesNum; i++) {
-                       if (Readies[i] != 1)
+               for (size_t i = 0; i < readies_num; i++) {
+                       if (readies[i] != 1)
                                error_count++;
                }
 
                if (error_count > 0) {
                        LOG_ERROR("%u words out of %u not transferred",
-                               error_count, readiesNum);
+                               error_count, readies_num);
                        retval = ERROR_FAIL;
                }
        }
-       free(Readies);
+       free(readies);
 
        return retval;
 }
 
-int arm11_run_instr_data_to_core_noack_inner(struct jtag_tap *tap,
-                                            uint32_t opcode,
-                                            uint32_t *data,
-                                            size_t count);
-
-#ifndef HAVE_JTAG_MINIDRIVER_H
-int arm11_run_instr_data_to_core_noack_inner(struct jtag_tap *tap,
-       uint32_t opcode,
-       uint32_t *data,
-       size_t count)
-{
-       return arm11_run_instr_data_to_core_noack_inner_default(tap, opcode, data, count);
-}
-#endif
-
 /** Execute one instruction via ITR repeatedly while
  *  passing data to the core via DTR on each execution.
  *
@@ -668,11 +638,11 @@ int arm11_run_instr_data_to_core_noack(struct arm11_common *arm11,
        uint32_t *data,
        size_t count)
 {
-       arm11_add_IR(arm11, ARM11_ITRSEL, ARM11_TAP_DEFAULT);
+       arm11_add_ir(arm11, ARM11_ITRSEL, ARM11_TAP_DEFAULT);
 
-       arm11_add_debug_INST(arm11, opcode, NULL, TAP_DRPAUSE);
+       arm11_add_debug_inst(arm11, opcode, NULL, TAP_DRPAUSE);
 
-       arm11_add_IR(arm11, ARM11_EXTEST, ARM11_TAP_DEFAULT);
+       arm11_add_ir(arm11, ARM11_EXTEST, ARM11_TAP_DEFAULT);
 
        int retval = arm11_run_instr_data_to_core_noack_inner(arm11->arm.target->tap,
                        opcode,
@@ -682,7 +652,7 @@ int arm11_run_instr_data_to_core_noack(struct arm11_common *arm11,
        if (retval != ERROR_OK)
                return retval;
 
-       arm11_add_IR(arm11, ARM11_INTEST, ARM11_TAP_DEFAULT);
+       arm11_add_ir(arm11, ARM11_INTEST, ARM11_TAP_DEFAULT);
 
        struct scan_field chain5_fields[3];
 
@@ -759,21 +729,21 @@ int arm11_run_instr_data_from_core(struct arm11_common *arm11,
        uint32_t *data,
        size_t count)
 {
-       arm11_add_IR(arm11, ARM11_ITRSEL, ARM11_TAP_DEFAULT);
+       arm11_add_ir(arm11, ARM11_ITRSEL, ARM11_TAP_DEFAULT);
 
-       arm11_add_debug_INST(arm11, opcode, NULL, TAP_IDLE);
+       arm11_add_debug_inst(arm11, opcode, NULL, TAP_IDLE);
 
-       arm11_add_IR(arm11, ARM11_INTEST, ARM11_TAP_DEFAULT);
+       arm11_add_ir(arm11, ARM11_INTEST, ARM11_TAP_DEFAULT);
 
        struct scan_field chain5_fields[3];
 
-       uint32_t Data;
-       uint8_t Ready;
-       uint8_t nRetry;
+       uint32_t _data;
+       uint8_t ready;
+       uint8_t n_retry;
 
-       arm11_setup_field(arm11, 32,    NULL,   &Data,      chain5_fields + 0);
-       arm11_setup_field(arm11,  1,    NULL,   &Ready,     chain5_fields + 1);
-       arm11_setup_field(arm11,  1,    NULL,   &nRetry,    chain5_fields + 2);
+       arm11_setup_field(arm11, 32,    NULL,   &_data,     chain5_fields + 0);
+       arm11_setup_field(arm11,  1,    NULL,   &ready,     chain5_fields + 1);
+       arm11_setup_field(arm11,  1,    NULL,   &n_retry,   chain5_fields + 2);
 
        while (count--) {
                int i = 0;
@@ -784,10 +754,10 @@ int arm11_run_instr_data_from_core(struct arm11_common *arm11,
 
                        CHECK_RETVAL(jtag_execute_queue());
 
-                       JTAG_DEBUG("DTR  Data %08x  Ready %d  nRetry %d",
-                               (unsigned) Data, Ready, nRetry);
+                       JTAG_DEBUG("DTR  _data %08x  ready %d  n_retry %d",
+                               (unsigned) _data, ready, n_retry);
 
-                       long long then = 0;
+                       int64_t then = 0;
 
                        if (i == 1000)
                                then = timeval_ms();
@@ -800,9 +770,9 @@ int arm11_run_instr_data_from_core(struct arm11_common *arm11,
                        }
 
                        i++;
-               } while (!Ready);
+               } while (!ready);
 
-               *data++ = Data;
+               *data++ = _data;
        }
 
        return ERROR_OK;
@@ -875,54 +845,54 @@ int arm11_sc7_run(struct arm11_common *arm11, struct arm11_sc7_action *actions,
 {
        int retval;
 
-       retval = arm11_add_debug_SCAN_N(arm11, 0x07, ARM11_TAP_DEFAULT);
+       retval = arm11_add_debug_scan_n(arm11, 0x07, ARM11_TAP_DEFAULT);
        if (retval != ERROR_OK)
                return retval;
 
-       arm11_add_IR(arm11, ARM11_EXTEST, ARM11_TAP_DEFAULT);
+       arm11_add_ir(arm11, ARM11_EXTEST, ARM11_TAP_DEFAULT);
 
        struct scan_field chain7_fields[3];
 
-       uint8_t nRW;
-       uint32_t DataOut;
-       uint8_t AddressOut;
-       uint8_t Ready;
-       uint32_t DataIn;
-       uint8_t AddressIn;
+       uint8_t n_rw;
+       uint32_t data_out;
+       uint8_t address_out;
+       uint8_t ready;
+       uint32_t data_in;
+       uint8_t address_in;
 
-       arm11_setup_field(arm11,  1, &nRW,                      &Ready,         chain7_fields + 0);
-       arm11_setup_field(arm11, 32, &DataOut,          &DataIn,        chain7_fields + 1);
-       arm11_setup_field(arm11,  7, &AddressOut,       &AddressIn,     chain7_fields + 2);
+       arm11_setup_field(arm11,  1, &n_rw,              &ready,          chain7_fields + 0);
+       arm11_setup_field(arm11, 32, &data_out,          &data_in,        chain7_fields + 1);
+       arm11_setup_field(arm11,  7, &address_out,       &address_in,     chain7_fields + 2);
 
        for (size_t i = 0; i < count + 1; i++) {
                if (i < count) {
-                       nRW                     = actions[i].write ? 1 : 0;
-                       DataOut         = actions[i].value;
-                       AddressOut      = actions[i].address;
+                       n_rw             = actions[i].write ? 1 : 0;
+                       data_out         = actions[i].value;
+                       address_out      = actions[i].address;
                } else {
-                       nRW                     = 1;
-                       DataOut         = 0;
-                       AddressOut      = 0;
+                       n_rw             = 1;
+                       data_out         = 0;
+                       address_out      = 0;
                }
 
                /* Timeout here so we don't get stuck. */
                int i_n = 0;
                while (1) {
                        JTAG_DEBUG("SC7 <= c%-3d Data %08x %s",
-                               (unsigned) AddressOut,
-                               (unsigned) DataOut,
-                               nRW ? "write" : "read");
+                               (unsigned) address_out,
+                               (unsigned) data_out,
+                               n_rw ? "write" : "read");
 
                        arm11_add_dr_scan_vc(arm11->arm.target->tap, ARRAY_SIZE(chain7_fields),
                                chain7_fields, TAP_DRPAUSE);
 
                        CHECK_RETVAL(jtag_execute_queue());
 
-                       /* 'nRW' is 'Ready' on read out */
-                       if (Ready)
+                       /* 'n_rw' is 'ready' on read out */
+                       if (ready)
                                break;
 
-                       long long then = 0;
+                       int64_t then = 0;
 
                        if (i_n == 1000)
                                then = timeval_ms();
@@ -937,17 +907,17 @@ int arm11_sc7_run(struct arm11_common *arm11, struct arm11_sc7_action *actions,
                        i_n++;
                }
 
-               if (!nRW)
-                       JTAG_DEBUG("SC7 => Data %08x", (unsigned) DataIn);
+               if (!n_rw)
+                       JTAG_DEBUG("SC7 => Data %08x", (unsigned) data_in);
 
                if (i > 0) {
-                       if (actions[i - 1].address != AddressIn)
+                       if (actions[i - 1].address != address_in)
                                LOG_WARNING("Scan chain 7 shifted out unexpected address");
 
                        if (!actions[i - 1].write)
-                               actions[i - 1].value = DataIn;
+                               actions[i - 1].value = data_in;
                        else {
-                               if (actions[i - 1].value != DataIn)
+                               if (actions[i - 1].value != data_in)
                                        LOG_WARNING("Scan chain 7 shifted out unexpected data");
                        }
                }
@@ -1183,7 +1153,7 @@ int arm11_dpm_init(struct arm11_common *arm11, uint32_t didr)
 
        /* alloc enough to enable all breakpoints and watchpoints at once */
        arm11->bpwp_actions = calloc(2 * (dpm->nbp + dpm->nwp),
-                       sizeof *arm11->bpwp_actions);
+                       sizeof(*arm11->bpwp_actions));
        if (!arm11->bpwp_actions)
                return ERROR_FAIL;
 
@@ -1193,3 +1163,13 @@ int arm11_dpm_init(struct arm11_common *arm11, uint32_t didr)
 
        return arm11_bpwp_flush(arm11);
 }
+
+void arm11_dpm_deinit(struct arm11_common *arm11)
+{
+       struct arm_dpm *dpm = &arm11->dpm;
+
+       free(arm11->bpwp_actions);
+       arm_free_reg_cache(dpm->arm);
+       free(dpm->dbp);
+       free(dpm->dwp);
+}

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)