jtag: linuxgpiod: drop extra parenthesis
[openocd.git] / src / flash / nor / atsamv.c
index 5beeefc5ab56dafe19d6afd063b36091f3a2b307..24c432cba3b2a2e0f905b1127c6cf15e645a6967 100644 (file)
@@ -1,63 +1,22 @@
-/***************************************************************************
- *   Copyright (C) 2009 by Duane Ellis                                     *
- *   openocd@duaneellis.com                                                *
- *                                                                         *
- *   Copyright (C) 2010 by Olaf Lüke (at91sam3s* support)                  *
- *   olaf@uni-paderborn.de                                                 *
- *                                                                         *
- *   Copyright (C) 2011 by Olivier Schonken, Jim Norris                    *
- *   (at91sam3x* & at91sam4 support)*                                      *
- *                                                                         *
- *   Copyright (C) 2015 Morgan Quigley                                     *
- *   (atsamv, atsams, and atsame support)                                  *
- *                                                                         *
- *   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/>. *
- ***************************************************************************/
-
-/* Some of the the lower level code was based on code supplied by
- * ATMEL under this copyright. */
-
-/* BEGIN ATMEL COPYRIGHT */
-/* ----------------------------------------------------------------------------
- *         ATMEL Microcontroller Software Support
- * ----------------------------------------------------------------------------
- * Copyright (c) 2009, Atmel Corporation
- *
- * All rights reserved.
+// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-Source-Code)
+
+/*
+ * Copyright (C) 2009 by Duane Ellis <openocd@duaneellis.com>
  *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
+ * at91sam3s* support
+ * Copyright (C) 2010 by Olaf Lüke <olaf@uni-paderborn.de>
  *
- * - Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the disclaimer below.
+ * at91sam3x* & at91sam4 support
+ * Copyright (C) 2011 by Olivier Schonken and Jim Norris
  *
- * Atmel's name may not be used to endorse or promote products derived from
- * this software without specific prior written permission.
+ * atsamv, atsams, and atsame support
+ * Copyright (C) 2015 Morgan Quigley
  *
- * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
- * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
- * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- * ----------------------------------------------------------------------------
+ * Some of the lower level code was based on code supplied by
+ * ATMEL under BSD-Source-Code License and this copyright.
+ * ATMEL Microcontroller Software Support
+ * Copyright (c) 2009, Atmel Corporation. All rights reserved.
  */
-/* END ATMEL COPYRIGHT */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #define SAMV_PAGE_SIZE                 512
 #define SAMV_FLASH_BASE         0x00400000
 
-extern const struct flash_driver atsamv_flash;
-
 struct samv_flash_bank {
-       int      probed;
+       bool      probed;
        unsigned size_bytes;
        unsigned gpnvm[SAMV_NUM_GPNVM_BITS];
 };
@@ -328,7 +285,7 @@ static int samv_protect_check(struct flash_bank *bank)
        if (r != ERROR_OK)
                return r;
 
-       for (int x = 0; x < bank->num_sectors; x++)
+       for (unsigned int x = 0; x < bank->num_sectors; x++)
                bank->sectors[x].is_protected = (!!(v[x >> 5] & (1 << (x % 32))));
        return ERROR_OK;
 }
@@ -375,17 +332,16 @@ static int samv_probe(struct flash_bank *bank)
                default:
                        LOG_ERROR("unrecognized flash size code: %d", nvm_size_code);
                        return ERROR_FAIL;
-                       break;
        }
 
        struct samv_flash_bank *samv_info = bank->driver_priv;
        samv_info->size_bytes = bank->size;
-       samv_info->probed = 1;
+       samv_info->probed = true;
 
        bank->base = SAMV_FLASH_BASE;
        bank->num_sectors = bank->size / SAMV_SECTOR_SIZE;
        bank->sectors = calloc(bank->num_sectors, sizeof(struct flash_sector));
-       for (int s = 0; s < (int)bank->num_sectors; s++) {
+       for (unsigned int s = 0; s < bank->num_sectors; s++) {
                bank->sectors[s].size = SAMV_SECTOR_SIZE;
                bank->sectors[s].offset = s * SAMV_SECTOR_SIZE;
                bank->sectors[s].is_erased = -1;
@@ -407,7 +363,8 @@ static int samv_auto_probe(struct flash_bank *bank)
        return samv_probe(bank);
 }
 
-static int samv_erase(struct flash_bank *bank, int first, int last)
+static int samv_erase(struct flash_bank *bank, unsigned int first,
+               unsigned int last)
 {
        const int page_count = 32; /* 32 pages equals 16 KB lock region */
 
@@ -421,31 +378,31 @@ static int samv_erase(struct flash_bank *bank, int first, int last)
                return r;
 
        /* easy case: we've been requested to erase the entire flash */
-       if ((first == 0) && ((last + 1) == (int)(bank->num_sectors)))
+       if ((first == 0) && ((last + 1) == bank->num_sectors))
                return samv_efc_perform_command(bank->target, SAMV_EFC_FCMD_EA, 0, NULL);
 
-       LOG_INFO("erasing lock regions %d-%d...", first, last);
+       LOG_INFO("erasing lock regions %u-%u...", first, last);
 
-       for (int i = first; i <= last; i++) {
+       for (unsigned int i = first; i <= last; i++) {
                uint32_t status;
                r = samv_erase_pages(bank->target, (i * page_count), page_count, &status);
-               LOG_INFO("erasing lock region %d", i);
+               LOG_INFO("erasing lock region %u", i);
                if (r != ERROR_OK)
-                       LOG_ERROR("error performing erase page @ lock region number %d",
-                                       (unsigned int)(i));
+                       LOG_ERROR("error performing erase page @ lock region number %u", i);
                if (status & (1 << 2)) {
-                       LOG_ERROR("lock region %d is locked", (unsigned int)(i));
+                       LOG_ERROR("lock region %u is locked", i);
                        return ERROR_FAIL;
                }
                if (status & (1 << 1)) {
-                       LOG_ERROR("flash command error @lock region %d", (unsigned int)(i));
+                       LOG_ERROR("flash command error @lock region %u", i);
                        return ERROR_FAIL;
                }
        }
        return ERROR_OK;
 }
 
-static int samv_protect(struct flash_bank *bank, int set, int first, int last)
+static int samv_protect(struct flash_bank *bank, int set, unsigned int first,
+               unsigned int last)
 {
        if (bank->target->state != TARGET_HALTED) {
                LOG_ERROR("Target not halted");
@@ -454,9 +411,9 @@ static int samv_protect(struct flash_bank *bank, int set, int first, int last)
 
        int r;
        if (set)
-               r = samv_flash_lock(bank->target, (unsigned)(first), (unsigned)(last));
+               r = samv_flash_lock(bank->target, first, last);
        else
-               r = samv_flash_unlock(bank->target, (unsigned)(first), (unsigned)(last));
+               r = samv_flash_unlock(bank->target, first, last);
 
        return r;
 }
@@ -607,15 +564,15 @@ static int samv_write(struct flash_bank *bank, const uint8_t *buffer,
        return ERROR_OK;
 }
 
-static int samv_get_info(struct flash_bank *bank, char *buf, int buf_size)
+static int samv_get_info(struct flash_bank *bank, struct command_invocation *cmd)
 {
        struct samv_flash_bank *samv_info = bank->driver_priv;
        if (!samv_info->probed) {
                int r = samv_probe(bank);
-               if (ERROR_OK != r)
+               if (r != ERROR_OK)
                        return r;
        }
-       snprintf(buf, buf_size, "Cortex-M7 detected with %d kB flash",
+       command_print_sameline(cmd, "Cortex-M7 detected with %" PRIu32 " kB flash\n",
                        bank->size / 1024);
        return ERROR_OK;
 }
@@ -645,7 +602,6 @@ COMMAND_HANDLER(samv_handle_gpnvm_command)
        switch (CMD_ARGC) {
                case 0:
                        goto showall;
-                       break;
                case 1:
                        who = -1;
                        break;
@@ -660,10 +616,9 @@ COMMAND_HANDLER(samv_handle_gpnvm_command)
                        break;
                default:
                        return ERROR_COMMAND_SYNTAX_ERROR;
-                       break;
        }
 
-       uint32_t v;
+       unsigned v = 0;
        if (!strcmp("show", CMD_ARGV[0])) {
                if (who == -1) {
 showall:
@@ -672,22 +627,25 @@ showall:
                                r = samv_get_gpnvm(target, x, &v);
                                if (r != ERROR_OK)
                                        break;
-                               command_print(CMD_CTX, "samv-gpnvm%u: %u", x, v);
+                               command_print(CMD, "samv-gpnvm%u: %u", x, v);
                        }
                        return r;
                }
                if ((who >= 0) && (((unsigned)who) < SAMV_NUM_GPNVM_BITS)) {
                        r = samv_get_gpnvm(target, who, &v);
-                       command_print(CMD_CTX, "samv-gpnvm%u: %u", who, v);
+                       if (r != ERROR_OK)
+                               return r;
+
+                       command_print(CMD, "samv-gpnvm%u: %u", who, v);
                        return r;
                } else {
-                       command_print(CMD_CTX, "invalid gpnvm: %u", who);
+                       command_print(CMD, "invalid gpnvm: %u", who);
                        return ERROR_COMMAND_SYNTAX_ERROR;
                }
        }
 
        if (who == -1) {
-               command_print(CMD_CTX, "missing gpnvm number");
+               command_print(CMD, "missing gpnvm number");
                return ERROR_COMMAND_SYNTAX_ERROR;
        }
 
@@ -696,7 +654,7 @@ showall:
        else if (!strcmp("clr", CMD_ARGV[0]) || !strcmp("clear", CMD_ARGV[0]))
                r = samv_clear_gpnvm(target, who);
        else {
-               command_print(CMD_CTX, "unknown command: %s", CMD_ARGV[0]);
+               command_print(CMD, "unknown command: %s", CMD_ARGV[0]);
                r = ERROR_COMMAND_SYNTAX_ERROR;
        }
        return r;

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)