openocd: fix SPDX tag format for files .c
[fw/openocd] / src / flash / nor / sim3x.c
index 21449041c8081aee5637e7b1691da311e59bf2f2..42550d06bc7fa9a9a9f21334bf885c03bcbe10a6 100644 (file)
@@ -1,22 +1,11 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
 /***************************************************************************
  *   Copyright (C) 2014 by Ladislav Bábel                                  *
  *   ladababel@seznam.cz                                                   *
  *                                                                         *
  *   Copyright (C) 2015 by Andreas Bomholtz                                *
  *   andreas@seluxit.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
@@ -27,6 +16,7 @@
 #include <helper/binarybuffer.h>
 #include <helper/time_support.h>
 #include <target/algorithm.h>
+#include <target/arm_adi_v5.h>
 #include <target/cortex_m.h>
 
 /* SI32_DEVICEID0 */
@@ -511,7 +501,7 @@ static int sim3x_flash_write(struct flash_bank *bank, const uint8_t *buffer, uin
                count++;
                new_buffer = malloc(count);
 
-               if (new_buffer == NULL) {
+               if (!new_buffer) {
                        LOG_ERROR("odd number of bytes to write and no memory "
                                        "for padding buffer");
                        return ERROR_FAIL;
@@ -801,10 +791,7 @@ static int sim3x_probe(struct flash_bank *bank)
        if (ret != ERROR_OK)
                return ret;
 
-       if (bank->sectors) {
-               free(bank->sectors);
-               bank->sectors = NULL;
-       }
+       free(bank->sectors);
 
        bank->base = FLASH_BASE_ADDRESS;
        bank->size = sim3x_info->flash_size_kb * SIM3X_FLASH_PAGE_SIZE;
@@ -837,53 +824,32 @@ static int sim3x_auto_probe(struct flash_bank *bank)
        }
 }
 
-static int sim3x_flash_info(struct flash_bank *bank, char *buf, int buf_size)
+static int sim3x_flash_info(struct flash_bank *bank, struct command_invocation *cmd)
 {
-       int ret;
-       int printed = 0;
        struct sim3x_info *sim3x_info;
 
        sim3x_info = bank->driver_priv;
 
        /* Read info about chip */
-       ret = sim3x_read_info(bank);
+       int ret = sim3x_read_info(bank);
        if (ret != ERROR_OK)
                return ret;
 
        /* Part */
        if (sim3x_info->part_family && sim3x_info->part_number) {
-               printed = snprintf(buf, buf_size, "SiM3%c%d", sim3x_info->part_family, sim3x_info->part_number);
-               buf += printed;
-               buf_size -= printed;
-
-               if (buf_size <= 0)
-                       return ERROR_BUF_TOO_SMALL;
+               command_print_sameline(cmd, "SiM3%c%d", sim3x_info->part_family, sim3x_info->part_number);
 
                /* Revision */
                if (sim3x_info->device_revision && sim3x_info->device_revision <= 'Z' - 'A') {
-                       printed = snprintf(buf, buf_size, "-%c", sim3x_info->device_revision + 'A');
-                       buf += printed;
-                       buf_size -= printed;
-
-                       if (buf_size <= 0)
-                               return ERROR_BUF_TOO_SMALL;
+                       command_print_sameline(cmd, "-%c", sim3x_info->device_revision + 'A');
 
                        /* Package */
-                       printed = snprintf(buf, buf_size, "-G%s", sim3x_info->device_package);
-                       buf += printed;
-                       buf_size -= printed;
-
-                       if (buf_size <= 0)
-                               return ERROR_BUF_TOO_SMALL;
+                       command_print_sameline(cmd, "-G%s", sim3x_info->device_package);
                }
        }
 
        /* Print flash size */
-       printed = snprintf(buf, buf_size, " flash_size = %dKB", sim3x_info->flash_size_kb);
-       buf_size -= printed;
-
-       if (buf_size <= 0)
-               return ERROR_BUF_TOO_SMALL;
+       command_print_sameline(cmd, " flash_size = %dKB", sim3x_info->flash_size_kb);
 
        return ERROR_OK;
 }
@@ -895,16 +861,23 @@ static int sim3x_flash_info(struct flash_bank *bank, char *buf, int buf_size)
  */
 static int ap_write_register(struct adiv5_dap *dap, unsigned reg, uint32_t value)
 {
-       int retval;
        LOG_DEBUG("DAP_REG[0x%02x] <- %08" PRIX32, reg, value);
 
-       retval = dap_queue_ap_write(dap_ap(dap, SIM3X_AP), reg, value);
+       struct adiv5_ap *ap = dap_get_ap(dap, SIM3X_AP);
+       if (!ap) {
+               LOG_DEBUG("DAP: failed to get AP");
+               return ERROR_FAIL;
+       }
+
+       int retval = dap_queue_ap_write(ap, reg, value);
        if (retval != ERROR_OK) {
                LOG_DEBUG("DAP: failed to queue a write request");
+               dap_put_ap(ap);
                return retval;
        }
 
        retval = dap_run(dap);
+       dap_put_ap(ap);
        if (retval != ERROR_OK) {
                LOG_DEBUG("DAP: dap_run failed");
                return retval;
@@ -915,15 +888,21 @@ static int ap_write_register(struct adiv5_dap *dap, unsigned reg, uint32_t value
 
 static int ap_read_register(struct adiv5_dap *dap, unsigned reg, uint32_t *result)
 {
-       int retval;
+       struct adiv5_ap *ap = dap_get_ap(dap, SIM3X_AP);
+       if (!ap) {
+               LOG_DEBUG("DAP: failed to get AP");
+               return ERROR_FAIL;
+       }
 
-       retval = dap_queue_ap_read(dap_ap(dap, SIM3X_AP), reg, result);
+       int retval = dap_queue_ap_read(ap, reg, result);
        if (retval != ERROR_OK) {
                LOG_DEBUG("DAP: failed to queue a read request");
+               dap_put_ap(ap);
                return retval;
        }
 
        retval = dap_run(dap);
+       dap_put_ap(ap);
        if (retval != ERROR_OK) {
                LOG_DEBUG("DAP: dap_run failed");
                return retval;
@@ -959,7 +938,7 @@ COMMAND_HANDLER(sim3x_mass_erase)
        struct cortex_m_common *cortex_m = target_to_cm(target);
        struct adiv5_dap *dap = cortex_m->armv7m.arm.dap;
 
-       if (dap == NULL) {
+       if (!dap) {
                /* Used debug interface doesn't support direct DAP access */
                LOG_ERROR("mass_erase can't be used by this debug interface");
                return ERROR_FAIL;
@@ -1004,9 +983,9 @@ COMMAND_HANDLER(sim3x_lock)
        struct cortex_m_common *cortex_m = target_to_cm(target);
        struct adiv5_dap *dap = cortex_m->armv7m.arm.dap;
 
-       if (dap == NULL) {
+       if (!dap) {
                /* Used debug interface doesn't support direct DAP access */
-               LOG_INFO("Target can't by unlocked by this debug interface");
+               LOG_INFO("Target can't be unlocked by this debug interface");
 
                /* Core check */
                ret = target_read_u32(target, CPUID, &val);
@@ -1063,7 +1042,7 @@ COMMAND_HANDLER(sim3x_lock)
                        return retval;
 
                ret = sim3x_flash_write(bank, lock_word, LOCK_WORD_ADDRESS, 4);
-               if (ERROR_OK != ret)
+               if (ret != ERROR_OK)
                        return ret;
 
                LOG_INFO("Target is successfully locked");
@@ -1076,7 +1055,7 @@ COMMAND_HANDLER(sim3x_lock)
                LOG_ERROR("Unexpected lock word value");
 
                /* SIM3X_AP_ID_VALUE is not checked */
-               if (dap == NULL)
+               if (!dap)
                        LOG_INFO("Maybe this isn't a SiM3x MCU");
 
                return ERROR_FAIL;