openocd: fix SPDX tag format for files .c
[fw/openocd] / src / target / mem_ap.c
index 424d6e71674a81420ea61c20d8e19a2d01d4c485..a6625069373632761da17ffca83245240b534222 100644 (file)
@@ -1,16 +1,8 @@
-/*****************************************************************************
- *   Copyright (C) 2016 by Matthias Welwarsky <matthias.welwarsky@sysgo.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.                            *
- ****************************************************************************/
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+/*
+ * Copyright (C) 2016 by Matthias Welwarsky <matthias.welwarsky@sysgo.com>
+ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -29,7 +21,7 @@ struct mem_ap {
        int common_magic;
        struct adiv5_dap *dap;
        struct adiv5_ap *ap;
-       int ap_num;
+       uint64_t ap_num;
 };
 
 static int mem_ap_target_create(struct target *target, Jim_Interp *interp)
@@ -74,8 +66,13 @@ static int mem_ap_init_target(struct command_context *cmd_ctx, struct target *ta
 
 static void mem_ap_deinit_target(struct target *target)
 {
+       struct mem_ap *mem_ap = target->arch_info;
+
        LOG_DEBUG("%s", __func__);
 
+       if (mem_ap->ap)
+               dap_put_ap(mem_ap->ap);
+
        free(target->private_config);
        free(target->arch_info);
        return;
@@ -139,7 +136,16 @@ static int mem_ap_examine(struct target *target)
        struct mem_ap *mem_ap = target->arch_info;
 
        if (!target_was_examined(target)) {
-               mem_ap->ap = dap_ap(mem_ap->dap, mem_ap->ap_num);
+               if (mem_ap->ap) {
+                       dap_put_ap(mem_ap->ap);
+                       mem_ap->ap = NULL;
+               }
+
+               mem_ap->ap = dap_get_ap(mem_ap->dap, mem_ap->ap_num);
+               if (!mem_ap->ap) {
+                       LOG_ERROR("Cannot get AP");
+                       return ERROR_FAIL;
+               }
                target_set_examined(target);
                target->state = TARGET_UNKNOWN;
                target->debug_reason = DBG_REASON_UNDEFINED;
@@ -179,7 +185,7 @@ static struct reg_arch_type mem_ap_reg_arch_type = {
        .set = mem_ap_reg_set,
 };
 
-const char *mem_ap_get_gdb_arch(struct target *target)
+static const char *mem_ap_get_gdb_arch(struct target *target)
 {
        return "arm";
 }
@@ -238,7 +244,7 @@ static int mem_ap_read_memory(struct target *target, target_addr_t address,
        LOG_DEBUG("Reading memory at physical address " TARGET_ADDR_FMT
                  "; size %" PRIu32 "; count %" PRIu32, address, size, count);
 
-       if (count == 0 || buffer == NULL)
+       if (count == 0 || !buffer)
                return ERROR_COMMAND_SYNTAX_ERROR;
 
        return mem_ap_read_buf(mem_ap->ap, buffer, size, count, address);
@@ -253,7 +259,7 @@ static int mem_ap_write_memory(struct target *target, target_addr_t address,
        LOG_DEBUG("Writing memory at physical address " TARGET_ADDR_FMT
                  "; size %" PRIu32 "; count %" PRIu32, address, size, count);
 
-       if (count == 0 || buffer == NULL)
+       if (count == 0 || !buffer)
                return ERROR_COMMAND_SYNTAX_ERROR;
 
        return mem_ap_write_buf(mem_ap->ap, buffer, size, count, address);