target/xtensa: avoid IHI for writes to non-executable memory
[openocd.git] / src / target / dsp5680xx.c
index f72d336378b2f484fc964edf4396962052bda5a7..c90bca3c1f9ae72f631962b852cbc7095cfebce5 100644 (file)
@@ -1,24 +1,11 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
 /***************************************************************************
  *  Copyright (C) 2011 by Rodrigo L. Rosa                                 *
  *  rodrigorosa.LG@gmail.com                                              *
  *                                                                        *
  *  Based on dsp563xx_once.h written by Mathias Kuester                   *
  *  mkdorg@users.sourceforge.net                                          *
- *                                                                        *
- *  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, write to the                         *
- *  Free Software Foundation, Inc.,                                       *
- *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.           *
  ***************************************************************************/
 
 #ifdef HAVE_CONFIG_H
@@ -29,7 +16,7 @@
 #include "target_type.h"
 #include "dsp5680xx.h"
 
-struct dsp5680xx_common dsp5680xx_context;
+static struct dsp5680xx_common dsp5680xx_context;
 
 #define _E "DSP5680XX_ERROR:%d\nAt:%s:%d:%s"
 #define err_check(r, c, m) if (r != ERROR_OK) {LOG_ERROR(_E, c, __func__, __LINE__, m); return r; }
@@ -42,7 +29,7 @@ struct dsp5680xx_common dsp5680xx_context;
 #define CHECK_HALT(target) if (target->state != TARGET_HALTED) HALT_FAIL
 #define check_halt_and_debug(target) { CHECK_HALT(target); CHECK_DBG; }
 
-int dsp5680xx_execute_queue(void)
+static int dsp5680xx_execute_queue(void)
 {
        int retval;
 
@@ -87,7 +74,7 @@ static int dsp5680xx_drscan(struct target *target, uint8_t *d_in,
         */
        int retval = ERROR_OK;
 
-       if (NULL == target->tap) {
+       if (!target->tap) {
                retval = ERROR_FAIL;
                err_check(retval, DSP5680XX_ERROR_JTAG_INVALID_TAP,
                          "Invalid tap");
@@ -95,7 +82,7 @@ static int dsp5680xx_drscan(struct target *target, uint8_t *d_in,
        if (len > 32) {
                retval = ERROR_FAIL;
                err_check(retval, DSP5680XX_ERROR_JTAG_DR_LEN_OVERFLOW,
-                         "dr_len overflow, maxium is 32");
+                         "dr_len overflow, maximum is 32");
        }
        /* TODO what values of len are valid for jtag_add_plain_dr_scan? */
        /* can i send as many bits as i want? */
@@ -106,7 +93,7 @@ static int dsp5680xx_drscan(struct target *target, uint8_t *d_in,
                err_check(retval, DSP5680XX_ERROR_JTAG_DRSCAN,
                          "drscan failed!");
        }
-       if (d_out != NULL)
+       if (d_out)
                LOG_DEBUG("Data read (%d bits): 0x%04X", len, *d_out);
        else
                LOG_DEBUG("Data read was discarded.");
@@ -119,7 +106,7 @@ static int dsp5680xx_drscan(struct target *target, uint8_t *d_in,
  * @param target
  * @param d_in This is the data that will be shifted into the JTAG IR reg.
  * @param d_out The data that will be shifted out of the JTAG IR reg will be stored here.
- * @apram ir_len Length of the data to be shifted to JTAG IR.
+ * @param ir_len Length of the data to be shifted to JTAG IR.
  *
  */
 static int dsp5680xx_irscan(struct target *target, uint32_t *d_in,
@@ -129,7 +116,7 @@ static int dsp5680xx_irscan(struct target *target, uint32_t *d_in,
 
        uint16_t tap_ir_len = DSP5680XX_JTAG_MASTER_TAP_IRLEN;
 
-       if (NULL == target->tap) {
+       if (!target->tap) {
                retval = ERROR_FAIL;
                err_check(retval, DSP5680XX_ERROR_JTAG_INVALID_TAP,
                          "Invalid tap");
@@ -142,7 +129,7 @@ static int dsp5680xx_irscan(struct target *target, uint32_t *d_in,
                } else {
                        struct jtag_tap *t =
                                jtag_tap_by_string("dsp568013.chp");
-                       if ((t == NULL)
+                       if ((!t)
                            || ((t->enabled) && (ir_len != tap_ir_len))) {
                                retval = ERROR_FAIL;
                                err_check(retval,
@@ -174,7 +161,7 @@ static int dsp5680xx_jtag_status(struct target *target, uint8_t *status)
                dsp5680xx_irscan(target, &instr, &read_from_ir,
                                 DSP5680XX_JTAG_CORE_TAP_IRLEN);
        err_check_propagate(retval);
-       if (status != NULL)
+       if (status)
                *status = (uint8_t) read_from_ir;
        return ERROR_OK;
 }
@@ -207,7 +194,7 @@ static int jtag_data_write(struct target *target, uint32_t instr, int num_bits,
                dsp5680xx_drscan(target, (uint8_t *) &instr,
                                 (uint8_t *) &data_read_dummy, num_bits);
        err_check_propagate(retval);
-       if (data_read != NULL)
+       if (data_read)
                *data_read = data_read_dummy;
        return retval;
 }
@@ -241,7 +228,7 @@ static int eonce_instruction_exec_single(struct target *target, uint8_t instr,
 
        retval = jtag_data_write(target, instr_with_flags, 8, &dr_out_tmp);
        err_check_propagate(retval);
-       if (eonce_status != NULL)
+       if (eonce_status)
                *eonce_status = (uint8_t) dr_out_tmp;
        return retval;
 }
@@ -503,7 +490,7 @@ static int core_move_value_to_pc(struct target *target, uint32_t value)
        return retval;
 }
 
-static int eonce_load_TX_RX_to_r0(struct target *target)
+static int eonce_load_tx_rx_to_r0(struct target *target)
 {
        int retval;
 
@@ -514,7 +501,7 @@ static int eonce_load_TX_RX_to_r0(struct target *target)
        return retval;
 }
 
-static int core_load_TX_RX_high_addr_to_r0(struct target *target)
+static int core_load_tx_rx_high_addr_to_r0(struct target *target)
 {
        int retval = 0;
 
@@ -579,9 +566,9 @@ static int switch_tap(struct target *target, struct jtag_tap *master_tap,
 
        uint32_t ir_out;        /* not used, just to make jtag happy. */
 
-       if (master_tap == NULL) {
+       if (!master_tap) {
                master_tap = jtag_tap_by_string("dsp568013.chp");
-               if (master_tap == NULL) {
+               if (!master_tap) {
                        retval = ERROR_FAIL;
                        const char *msg = "Failed to get master tap.";
 
@@ -589,9 +576,9 @@ static int switch_tap(struct target *target, struct jtag_tap *master_tap,
                                  msg);
                }
        }
-       if (core_tap == NULL) {
+       if (!core_tap) {
                core_tap = jtag_tap_by_string("dsp568013.cpu");
-               if (core_tap == NULL) {
+               if (!core_tap) {
                        retval = ERROR_FAIL;
                        err_check(retval, DSP5680XX_ERROR_JTAG_TAP_FIND_CORE,
                                  "Failed to get core tap.");
@@ -640,7 +627,7 @@ static int switch_tap(struct target *target, struct jtag_tap *master_tap,
  * more complicated routine, which is guaranteed to work, but requires
  * a reset. This will complicate comm with the flash module, since
  * after a reset clock divisors must be set again.
- * This implementation works most of the time, and is not accesible to the
+ * This implementation works most of the time, and is not accessible to the
  * user.
  *
  * @param target
@@ -697,7 +684,7 @@ static int eonce_enter_debug_mode_without_reset(struct target *target,
                 */
                err_check_propagate(retval);
        }
-       if (eonce_status != NULL)
+       if (eonce_status)
                *eonce_status = data_read_from_dr;
        return retval;
 }
@@ -733,13 +720,13 @@ static int eonce_enter_debug_mode(struct target *target,
        struct jtag_tap *tap_cpu;
 
        tap_chp = jtag_tap_by_string("dsp568013.chp");
-       if (tap_chp == NULL) {
+       if (!tap_chp) {
                retval = ERROR_FAIL;
                err_check(retval, DSP5680XX_ERROR_JTAG_TAP_FIND_MASTER,
                          "Failed to get master tap.");
        }
        tap_cpu = jtag_tap_by_string("dsp568013.cpu");
-       if (tap_cpu == NULL) {
+       if (!tap_cpu) {
                retval = ERROR_FAIL;
                err_check(retval, DSP5680XX_ERROR_JTAG_TAP_FIND_CORE,
                          "Failed to get master tap.");
@@ -835,7 +822,7 @@ static int eonce_enter_debug_mode(struct target *target,
                retval = ERROR_TARGET_FAILURE;
                err_check(retval, DSP5680XX_ERROR_ENTER_DEBUG_MODE, msg);
        }
-       if (eonce_status != NULL)
+       if (eonce_status)
                *eonce_status = data_read_from_dr;
        return retval;
 }
@@ -857,7 +844,7 @@ static int eonce_pc_store(struct target *target)
        err_check_propagate(retval);
        retval = core_move_r4_to_y(target);
        err_check_propagate(retval);
-       retval = eonce_load_TX_RX_to_r0(target);
+       retval = eonce_load_tx_rx_to_r0(target);
        err_check_propagate(retval);
        retval = core_move_y0_at_r0(target);
        err_check_propagate(retval);
@@ -894,12 +881,6 @@ static int dsp5680xx_arch_state(struct target *target)
        return ERROR_OK;
 }
 
-int dsp5680xx_target_status(struct target *target, uint8_t *jtag_st,
-                           uint16_t *eonce_st)
-{
-       return target->state;
-}
-
 static int dsp5680xx_assert_reset(struct target *target)
 {
        target->state = TARGET_RESET;
@@ -1003,17 +984,17 @@ static int dsp5680xx_poll(struct target *target)
                         __func__);
                target->state = TARGET_UNKNOWN;
                return ERROR_TARGET_FAILURE;
-       };
+       }
        if (target->state == TARGET_UNKNOWN) {
                LOG_ERROR("%s: Target status invalid - communication failure",
                          __func__);
                return ERROR_TARGET_FAILURE;
-       };
+       }
        return ERROR_OK;
 }
 
 static int dsp5680xx_resume(struct target *target, int current,
-                           uint32_t address, int hb, int d)
+                           target_addr_t address, int hb, int d)
 {
        if (target->state == TARGET_RUNNING) {
                LOG_USER("Target already running.");
@@ -1078,8 +1059,8 @@ static int dsp5680xx_resume(struct target *target, int current,
 }
 
 /**
- * The value of @address determines if it corresponds to P: (program) or X: (dat) memory.
- * If the address is over 0x200000 then it is considered X: memory, and @pmem = 0.
+ * The value of @a address determines if it corresponds to P: (program) or X: (dat) memory.
+ * If the address is over 0x200000 then it is considered X: memory, and @pmem = 0.
  * The special case of 0xFFXXXX is not modified, since it allows to read out the
  * memory mapped EOnCE registers.
  *
@@ -1118,7 +1099,7 @@ static int dsp5680xx_read_16_single(struct target *t, uint32_t a,
        else
                retval = core_move_at_r0_to_y0(target);
        err_check_propagate(retval);
-       retval = eonce_load_TX_RX_to_r0(target);
+       retval = eonce_load_tx_rx_to_r0(target);
        err_check_propagate(retval);
        retval = core_move_y0_at_r0(target);
        err_check_propagate(retval);
@@ -1155,7 +1136,7 @@ static int dsp5680xx_read_32_single(struct target *t, uint32_t a,
                err_check_propagate(retval);
        }
        /* Get lower part of data to TX/RX */
-       retval = eonce_load_TX_RX_to_r0(target);
+       retval = eonce_load_tx_rx_to_r0(target);
        err_check_propagate(retval);
        retval = core_move_y0_at_r0_inc(target);    /* This also load TX/RX high to r0 */
        err_check_propagate(retval);
@@ -1170,7 +1151,7 @@ static int dsp5680xx_read_32_single(struct target *t, uint32_t a,
        return retval;
 }
 
-static int dsp5680xx_read(struct target *t, uint32_t a, uint32_t size,
+static int dsp5680xx_read(struct target *t, target_addr_t a, uint32_t size,
                          uint32_t count, uint8_t *buf)
 {
        struct target *target = t;
@@ -1413,32 +1394,26 @@ static int dsp5680xx_write_32(struct target *t, uint32_t a, uint32_t c,
 }
 
 /**
- * Writes @buffer to memory.
- * The parameter @address determines whether @buffer should be written to
+ * Writes @buffer to memory.
+ * The parameter @a address determines whether @a buffer should be written to
  * P: (program) memory or X: (dat) memory.
  *
  * @param target
- * @param address
+ * @param a address
  * @param size Bytes (1), Half words (2), Words (4).
  * @param count In bytes.
- * @param buffer
+ * @param b buffer
  *
  * @return
  */
-static int dsp5680xx_write(struct target *t, uint32_t a, uint32_t s, uint32_t c,
+static int dsp5680xx_write(struct target *target, target_addr_t a, uint32_t size, uint32_t count,
                           const uint8_t *b)
 {
        /* TODO Cannot write 32bit to odd address, will write 0x12345678  as 0x5678 0x0012 */
-       struct target *target = t;
-
        uint32_t address = a;
 
-       uint32_t count = c;
-
        uint8_t const *buffer = b;
 
-       uint32_t size = s;
-
        check_halt_and_debug(target);
 
        int retval = 0;
@@ -1470,7 +1445,7 @@ static int dsp5680xx_write(struct target *t, uint32_t a, uint32_t s, uint32_t c,
        return retval;
 }
 
-static int dsp5680xx_write_buffer(struct target *t, uint32_t a, uint32_t size,
+static int dsp5680xx_write_buffer(struct target *t, target_addr_t a, uint32_t size,
                                  const uint8_t *b)
 {
        check_halt_and_debug(t);
@@ -1487,12 +1462,12 @@ static int dsp5680xx_write_buffer(struct target *t, uint32_t a, uint32_t size,
  *
  * @return
  */
-static int dsp5680xx_read_buffer(struct target *t, uint32_t a, uint32_t size,
-                                uint8_t *buf)
+static int dsp5680xx_read_buffer(struct target *target, target_addr_t address, uint32_t size,
+                                uint8_t *buffer)
 {
-       check_halt_and_debug(t);
+       check_halt_and_debug(target);
        /* The "/2" solves the byte/word addressing issue.*/
-       return dsp5680xx_read(t, a, 2, size / 2, buf);
+       return dsp5680xx_read(target, address, 2, size / 2, buffer);
 }
 
 /**
@@ -1507,24 +1482,24 @@ static int dsp5680xx_read_buffer(struct target *t, uint32_t a, uint32_t size,
  *
  * @return
  */
-static int dsp5680xx_checksum_memory(struct target *t, uint32_t a, uint32_t s,
+static int dsp5680xx_checksum_memory(struct target *target, target_addr_t address, uint32_t size,
                                     uint32_t *checksum)
 {
        return ERROR_FAIL;
 }
 
 /**
- * Calculates a signature over @word_count words in the data from @buff16.
- * The algorithm used is the same the FM uses, so the @return may be used to compare
+ * Calculates a signature over @a word_count words in the data from @a buff8.
+ * The algorithm used is the same the FM uses, so the @return may be used to compare
  * with the one generated by the FM module, and check if flashing was successful.
  * This algorithm is based on the perl script available from the Freescale website at FAQ 25630.
  *
- * @param buff16
+ * @param buff8
  * @param word_count
  *
  * @return
  */
-static int perl_crc(uint8_t *buff8, uint32_t word_count)
+static int perl_crc(const uint8_t *buff8, uint32_t word_count)
 {
        uint16_t checksum = 0xffff;
 
@@ -1557,7 +1532,7 @@ static int perl_crc(uint8_t *buff8, uint32_t word_count)
  *
  * @return
  */
-int dsp5680xx_f_SIM_reset(struct target *target)
+static int dsp5680xx_f_sim_reset(struct target *target)
 {
        int retval = ERROR_OK;
 
@@ -1589,7 +1564,7 @@ static int dsp5680xx_soft_reset_halt(struct target *target)
 
        retval = dsp5680xx_halt(target);
        err_check_propagate(retval);
-       retval = dsp5680xx_f_SIM_reset(target);
+       retval = dsp5680xx_f_sim_reset(target);
        err_check_propagate(retval);
        return retval;
 }
@@ -1599,7 +1574,7 @@ int dsp5680xx_f_protect_check(struct target *target, uint16_t *protected)
        int retval;
 
        check_halt_and_debug(target);
-       if (protected == NULL) {
+       if (!protected) {
                const char *msg = "NULL pointer not valid.";
 
                err_check(ERROR_FAIL,
@@ -1614,35 +1589,24 @@ int dsp5680xx_f_protect_check(struct target *target, uint16_t *protected)
 
 /**
  * Executes a command on the FM module.
- * Some commands use the parameters @address and @data, others ignore them.
+ * Some commands use the parameters @a address and @a data, others ignore them.
  *
  * @param target
- * @param command Command to execute.
+ * @param c Command to execute.
  * @param address Command parameter.
  * @param data Command parameter.
  * @param hfm_ustat FM status register.
- * @param pmem Address is P: (program) memory (@pmem == 1) or X: (dat) memory (@pmem == 0)
+ * @param pmem Address is P: (program) memory (@a pmem == 1) or X: (dat) memory (@a pmem == 0)
  *
  * @return
  */
-static int dsp5680xx_f_ex(struct target *t, uint16_t c, uint32_t a, uint32_t d,
-                         uint16_t *h, int p)
+static int dsp5680xx_f_ex(struct target *target, uint16_t c, uint32_t address, uint32_t data,
+                         uint16_t *hfm_ustat, int pmem)
 {
-       struct target *target = t;
-
        uint32_t command = c;
-
-       uint32_t address = a;
-
-       uint32_t data = d;
-
-       uint16_t *hfm_ustat = h;
-
-       int pmem = p;
-
        int retval;
 
-       retval = core_load_TX_RX_high_addr_to_r0(target);
+       retval = core_load_tx_rx_high_addr_to_r0(target);
        err_check_propagate(retval);
        retval = core_move_long_to_r2(target, HFM_BASE_ADDR);
        err_check_propagate(retval);
@@ -1733,7 +1697,12 @@ static int dsp5680xx_f_ex(struct target *t, uint16_t c, uint32_t a, uint32_t d,
 }
 
 /**
- * Prior to the execution of any Flash module command, the Flash module Clock Divider (CLKDIV) register must be initialized. The values of this register determine the speed of the internal Flash Clock (FCLK). FCLK must be in the range of 150kHz ≤ FCLK ≤ 200kHz for proper operation of the Flash module. (Running FCLK too slowly wears out the module, while running it too fast under programs Flash leading to bit errors.)
+ * Prior to the execution of any Flash module command, the Flash module Clock
+ * Divider (CLKDIV) register must be initialized. The values of this register
+ * determine the speed of the internal Flash Clock (FCLK). FCLK must be in the
+ * range of 150kHz ≤ FCLK ≤ 200kHz for proper operation of the Flash module.
+ * (Running FCLK too slowly wears out the module, while running it too fast
+ * under programs Flash leading to bit errors.)
  *
  * @param target
  *
@@ -1747,7 +1716,7 @@ static int set_fm_ck_div(struct target *target)
 
        retval = core_move_long_to_r2(target, HFM_BASE_ADDR);
        err_check_propagate(retval);
-       retval = core_load_TX_RX_high_addr_to_r0(target);
+       retval = core_load_tx_rx_high_addr_to_r0(target);
        err_check_propagate(retval);
        /* read HFM_CLKD */
        retval = core_move_at_r2_to_y0(target);
@@ -1789,7 +1758,11 @@ static int set_fm_ck_div(struct target *target)
 }
 
 /**
- * Executes the FM calculate signature command. The FM will calculate over the data from @address to @address + @words -1. The result is written to a register, then read out by this function and returned in @signature. The value @signature may be compared to the the one returned by perl_crc to verify the flash was written correctly.
+ * Executes the FM calculate signature command. The FM will calculate over the
+ * data from @a address to @a address + @a words -1. The result is written to a
+ * register, then read out by this function and returned in @a signature. The
+ * value @a signature may be compared to the one returned by perl_crc to
+ * verify the flash was written correctly.
  *
  * @param target
  * @param address Start of flash array where the signature should be calculated.
@@ -1798,13 +1771,9 @@ static int set_fm_ck_div(struct target *target)
  *
  * @return
  */
-static int dsp5680xx_f_signature(struct target *t, uint32_t a, uint32_t words,
+static int dsp5680xx_f_signature(struct target *target, uint32_t address, uint32_t words,
                                 uint16_t *signature)
 {
-       struct target *target = t;
-
-       uint32_t address = a;
-
        int retval;
 
        uint16_t hfm_ustat;
@@ -1849,7 +1818,7 @@ int dsp5680xx_f_erase_check(struct target *target, uint8_t *erased,
        retval =
                dsp5680xx_f_ex(target, HFM_ERASE_VERIFY, tmp, 0, &hfm_ustat, 1);
        err_check_propagate(retval);
-       if (erased != NULL)
+       if (erased)
                *erased = (uint8_t) (hfm_ustat & HFM_USTAT_MASK_BLANK);
        return retval;
 }
@@ -1902,7 +1871,7 @@ int dsp5680xx_f_erase(struct target *target, int first, int last)
         * Reset SIM
         *
         */
-       retval = dsp5680xx_f_SIM_reset(target);
+       retval = dsp5680xx_f_sim_reset(target);
        err_check_propagate(retval);
        /*
         * Set hfmdiv
@@ -1971,7 +1940,8 @@ int dsp5680xx_f_erase(struct target *target, int first, int last)
  * 0x0000001E  0xA961           bra     *-30
  */
 
-const uint16_t pgm_write_pflash[] = { 0x8A46, 0x0013, 0x807D, 0xE700,
+static const uint16_t pgm_write_pflash[] = {
+               0x8A46, 0x0013, 0x807D, 0xE700,
                0xE700, 0x8A44, 0xFFFE, 0x017B,
                0xE700, 0xF514, 0x8563, 0x8646,
                0x0020, 0x0014, 0x8646, 0x0080,
@@ -1981,16 +1951,16 @@ const uint16_t pgm_write_pflash[] = { 0x8A46, 0x0013, 0x807D, 0xE700,
                0x0013, 0x0010, 0xA961
 };
 
-const uint32_t pgm_write_pflash_length = 31;
+static const uint32_t pgm_write_pflash_length = 31;
 
-int dsp5680xx_f_wr(struct target *t, uint8_t *b, uint32_t a, uint32_t count,
+int dsp5680xx_f_wr(struct target *t, const uint8_t *b, uint32_t a, uint32_t count,
                   int is_flash_lock)
 {
        struct target *target = t;
 
        uint32_t address = a;
 
-       uint8_t *buffer = b;
+       const uint8_t *buffer = b;
 
        int retval = ERROR_OK;
 
@@ -2033,7 +2003,7 @@ int dsp5680xx_f_wr(struct target *t, uint8_t *b, uint32_t a, uint32_t count,
 
        retval = core_move_long_to_r3(target, address); /* Destination address to r3 */
        err_check_propagate(retval);
-       core_load_TX_RX_high_addr_to_r0(target); /* TX/RX reg address to r0 */
+       core_load_tx_rx_high_addr_to_r0(target); /* TX/RX reg address to r0 */
        err_check_propagate(retval);
        retval = core_move_long_to_r2(target, HFM_BASE_ADDR); /* FM base address to r2 */
        err_check_propagate(retval);
@@ -2137,13 +2107,13 @@ int dsp5680xx_f_unlock(struct target *target)
        struct jtag_tap *tap_cpu;
 
        tap_chp = jtag_tap_by_string("dsp568013.chp");
-       if (tap_chp == NULL) {
+       if (!tap_chp) {
                retval = ERROR_FAIL;
                err_check(retval, DSP5680XX_ERROR_JTAG_TAP_ENABLE_MASTER,
                          "Failed to get master tap.");
        }
        tap_cpu = jtag_tap_by_string("dsp568013.cpu");
-       if (tap_cpu == NULL) {
+       if (!tap_cpu) {
                retval = ERROR_FAIL;
                err_check(retval, DSP5680XX_ERROR_JTAG_TAP_ENABLE_CORE,
                          "Failed to get master tap.");
@@ -2230,8 +2200,8 @@ int dsp5680xx_f_lock(struct target *target)
        struct jtag_tap *tap_chp;
 
        struct jtag_tap *tap_cpu;
-       uint16_t lock_word[] = { HFM_LOCK_FLASH };
-       retval = dsp5680xx_f_wr(target, (uint8_t *) (lock_word), HFM_LOCK_ADDR_L, 2, 1);
+       uint16_t lock_word = HFM_LOCK_FLASH;
+       retval = dsp5680xx_f_wr(target, (uint8_t *)&lock_word, HFM_LOCK_ADDR_L, 2, 1);
        err_check_propagate(retval);
 
        jtag_add_reset(0, 1);
@@ -2245,13 +2215,13 @@ int dsp5680xx_f_lock(struct target *target)
        jtag_add_sleep(TIME_DIV_FREESCALE * 300 * 1000);
 
        tap_chp = jtag_tap_by_string("dsp568013.chp");
-       if (tap_chp == NULL) {
+       if (!tap_chp) {
                retval = ERROR_FAIL;
                err_check(retval, DSP5680XX_ERROR_JTAG_TAP_ENABLE_MASTER,
                          "Failed to get master tap.");
        }
        tap_cpu = jtag_tap_by_string("dsp568013.cpu");
-       if (tap_cpu == NULL) {
+       if (!tap_cpu) {
                retval = ERROR_FAIL;
                err_check(retval, DSP5680XX_ERROR_JTAG_TAP_ENABLE_CORE,
                          "Failed to get master tap.");
@@ -2264,7 +2234,7 @@ int dsp5680xx_f_lock(struct target *target)
        return retval;
 }
 
-static int dsp5680xx_step(struct target *target, int current, uint32_t address,
+static int dsp5680xx_step(struct target *target, int current, target_addr_t address,
                          int handle_breakpoints)
 {
        err_check(ERROR_FAIL, DSP5680XX_ERROR_NOT_IMPLEMENTED_STEP,

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)