openocd: fix SPDX tag format for files .c
[fw/openocd] / src / flash / nor / sim3x.c
index a84fcf0e35a37153dcaf5efbc645655e2a934862..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;
@@ -871,16 +861,23 @@ static int sim3x_flash_info(struct flash_bank *bank, struct command_invocation *
  */
 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;
@@ -891,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;
@@ -935,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;
@@ -980,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);
@@ -1052,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;