openocd: fix SPDX tag format for files .c
[fw/openocd] / src / flash / nor / at91sam7.c
index 232260b93ff1eaffff543809283fa4034e0d0ac2..8d8cf22268bee523e335c327bc4b23ae62bd9b2e 100644 (file)
@@ -1,21 +1,10 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
 /***************************************************************************
  *   Copyright (C) 2006 by Magnus Lundin                                   *
  *   lundin@mlu.mine.nu                                                    *
  *                                                                         *
  *   Copyright (C) 2008 by Gheorghe Guran (atlas)                          *
- *                                                                         *
- *   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/>. *
 ****************************************************************************/
 
 /***************************************************************************
@@ -104,11 +93,11 @@ static void at91sam7_set_flash_mode(struct flash_bank *bank, int mode);
 static uint32_t at91sam7_wait_status_busy(struct flash_bank *bank, uint32_t waitbits, int timeout);
 static int at91sam7_flash_command(struct flash_bank *bank, uint8_t cmd, uint16_t pagen);
 
-static const uint32_t MC_FMR[4] = { 0xFFFFFF60, 0xFFFFFF70, 0xFFFFFF80, 0xFFFFFF90 };
-static const uint32_t MC_FCR[4] = { 0xFFFFFF64, 0xFFFFFF74, 0xFFFFFF84, 0xFFFFFF94 };
-static const uint32_t MC_FSR[4] = { 0xFFFFFF68, 0xFFFFFF78, 0xFFFFFF88, 0xFFFFFF98 };
+static const uint32_t mc_fmr[4] = { 0xFFFFFF60, 0xFFFFFF70, 0xFFFFFF80, 0xFFFFFF90 };
+static const uint32_t mc_fcr[4] = { 0xFFFFFF64, 0xFFFFFF74, 0xFFFFFF84, 0xFFFFFF94 };
+static const uint32_t mc_fsr[4] = { 0xFFFFFF68, 0xFFFFFF78, 0xFFFFFF88, 0xFFFFFF98 };
 
-static const char *EPROC[8] = {
+static const char *eproc[8] = {
        "Unknown", "ARM946-E", "ARM7TDMI", "Unknown", "ARM920T", "ARM926EJ-S", "Unknown", "Unknown"
 };
 
@@ -179,7 +168,7 @@ static long SRAMSIZ[16] = {
 static uint32_t at91sam7_get_flash_status(struct target *target, int bank_number)
 {
        uint32_t fsr;
-       target_read_u32(target, MC_FSR[bank_number], &fsr);
+       target_read_u32(target, mc_fsr[bank_number], &fsr);
 
        return fsr;
 }
@@ -254,7 +243,7 @@ static void at91sam7_read_clock_info(struct flash_bank *bank)
                at91sam7_info->mck_freq = tmp;
 }
 
-/* Setup the timimg registers for nvbits or normal flash */
+/* Setup the timing registers for nvbits or normal flash */
 static void at91sam7_set_flash_mode(struct flash_bank *bank, int mode)
 {
        uint32_t fmr, fmcn = 0, fws = 0;
@@ -290,7 +279,7 @@ static void at91sam7_set_flash_mode(struct flash_bank *bank, int mode)
 
                LOG_DEBUG("fmcn[%i]: %i", bank->bank_number, (int)(fmcn));
                fmr = fmcn << 16 | fws << 8;
-               target_write_u32(target, MC_FMR[bank->bank_number], fmr);
+               target_write_u32(target, mc_fmr[bank->bank_number], fmr);
        }
 
        at91sam7_info->flashmode = mode;
@@ -329,7 +318,7 @@ static int at91sam7_flash_command(struct flash_bank *bank, uint8_t cmd, uint16_t
        struct target *target = bank->target;
 
        fcr = (0x5A << 24) | ((pagen&0x3FF) << 8) | cmd;
-       target_write_u32(target, MC_FCR[bank->bank_number], fcr);
+       target_write_u32(target, mc_fcr[bank->bank_number], fcr);
        LOG_DEBUG("Flash command: 0x%" PRIx32 ", flash bank: %i, page number: %u",
                fcr,
                bank->bank_number + 1,
@@ -377,7 +366,7 @@ static int at91sam7_read_part_info(struct flash_bank *bank)
                        /* re-calculate master clock frequency */
                        at91sam7_read_clock_info(t_bank);
 
-                       /* no timming */
+                       /* no timing */
                        at91sam7_set_flash_mode(t_bank, FMR_TIMING_NONE);
 
                        /* check protect state */
@@ -415,7 +404,7 @@ static int at91sam7_read_part_info(struct flash_bank *bank)
                        /* calculate master clock frequency */
                        at91sam7_read_clock_info(t_bank);
 
-                       /* no timming */
+                       /* no timing */
                        at91sam7_set_flash_mode(t_bank, FMR_TIMING_NONE);
 
                        /* check protect state */
@@ -587,8 +576,6 @@ static int at91sam7_read_part_info(struct flash_bank *bank)
                t_bank->bank_number = bnk;
                t_bank->base = base_address + bnk * bank_size;
                t_bank->size = bank_size;
-               t_bank->chip_width = 0;
-               t_bank->bus_width = 4;
                t_bank->num_sectors = sectors_num;
 
                /* allocate sectors */
@@ -623,7 +610,7 @@ static int at91sam7_read_part_info(struct flash_bank *bank)
                /* calculate master clock frequency */
                at91sam7_read_clock_info(t_bank);
 
-               /* no timming */
+               /* no timing */
                at91sam7_set_flash_mode(t_bank, FMR_TIMING_NONE);
 
                /* check protect state */
@@ -702,19 +689,13 @@ FLASH_BANK_COMMAND_HANDLER(at91sam7_flash_bank_command)
        uint32_t bank_size;
        uint32_t ext_freq = 0;
 
-       int chip_width;
-       int bus_width;
-       int banks_num;
-       int num_sectors;
+       unsigned int banks_num;
+       unsigned int num_sectors;
 
        uint16_t pages_per_sector;
        uint16_t page_size;
        uint16_t num_nvmbits;
 
-       char *target_name_t;
-
-       int bnk, sec;
-
        at91sam7_info = malloc(sizeof(struct at91sam7_flash_bank));
        t_bank->driver_priv = at91sam7_info;
 
@@ -731,11 +712,8 @@ FLASH_BANK_COMMAND_HANDLER(at91sam7_flash_bank_command)
 
        COMMAND_PARSE_NUMBER(u32, CMD_ARGV[1], base_address);
 
-       COMMAND_PARSE_NUMBER(int, CMD_ARGV[3], chip_width);
-       COMMAND_PARSE_NUMBER(int, CMD_ARGV[4], bus_width);
-
-       COMMAND_PARSE_NUMBER(int, CMD_ARGV[8], banks_num);
-       COMMAND_PARSE_NUMBER(int, CMD_ARGV[9], num_sectors);
+       COMMAND_PARSE_NUMBER(uint, CMD_ARGV[8], banks_num);
+       COMMAND_PARSE_NUMBER(uint, CMD_ARGV[9], num_sectors);
        COMMAND_PARSE_NUMBER(u16, CMD_ARGV[10], pages_per_sector);
        COMMAND_PARSE_NUMBER(u16, CMD_ARGV[11], page_size);
        COMMAND_PARSE_NUMBER(u16, CMD_ARGV[12], num_nvmbits);
@@ -747,19 +725,16 @@ FLASH_BANK_COMMAND_HANDLER(at91sam7_flash_bank_command)
                at91sam7_info->ext_freq = ext_freq;
        }
 
-       if ((bus_width == 0) || (banks_num == 0) || (num_sectors == 0) ||
+       if ((banks_num == 0) || (num_sectors == 0) ||
                        (pages_per_sector == 0) || (page_size == 0) || (num_nvmbits == 0)) {
                at91sam7_info->flash_autodetection = 1;
                return ERROR_OK;
        }
 
-       target_name_t = calloc(strlen(CMD_ARGV[7]) + 1, sizeof(char));
-       strcpy(target_name_t, CMD_ARGV[7]);
-
        /* calculate bank size  */
        bank_size = num_sectors * pages_per_sector * page_size;
 
-       for (bnk = 0; bnk < banks_num; bnk++) {
+       for (unsigned int bnk = 0; bnk < banks_num; bnk++) {
                if (bnk > 0) {
                        if (!t_bank->next) {
                                /* create a new bank element */
@@ -779,13 +754,11 @@ FLASH_BANK_COMMAND_HANDLER(at91sam7_flash_bank_command)
                t_bank->bank_number = bnk;
                t_bank->base = base_address + bnk * bank_size;
                t_bank->size = bank_size;
-               t_bank->chip_width = chip_width;
-               t_bank->bus_width = bus_width;
                t_bank->num_sectors = num_sectors;
 
                /* allocate sectors */
                t_bank->sectors = malloc(num_sectors * sizeof(struct flash_sector));
-               for (sec = 0; sec < num_sectors; sec++) {
+               for (unsigned int sec = 0; sec < num_sectors; sec++) {
                        t_bank->sectors[sec].offset = sec * pages_per_sector * page_size;
                        t_bank->sectors[sec].size = pages_per_sector * page_size;
                        t_bank->sectors[sec].is_erased = -1;
@@ -794,7 +767,7 @@ FLASH_BANK_COMMAND_HANDLER(at91sam7_flash_bank_command)
 
                at91sam7_info = t_bank->driver_priv;
 
-               at91sam7_info->target_name  = target_name_t;
+               at91sam7_info->target_name = strdup(CMD_ARGV[7]);
                at91sam7_info->flashmode = 0;
                at91sam7_info->ext_freq  = ext_freq;
                at91sam7_info->num_nvmbits = num_nvmbits;
@@ -806,10 +779,10 @@ FLASH_BANK_COMMAND_HANDLER(at91sam7_flash_bank_command)
        return ERROR_OK;
 }
 
-static int at91sam7_erase(struct flash_bank *bank, int first, int last)
+static int at91sam7_erase(struct flash_bank *bank, unsigned int first,
+               unsigned int last)
 {
        struct at91sam7_flash_bank *at91sam7_info = bank->driver_priv;
-       int sec;
        uint32_t nbytes, pos;
        uint8_t *buffer;
        uint8_t erase_all;
@@ -822,7 +795,7 @@ static int at91sam7_erase(struct flash_bank *bank, int first, int last)
                return ERROR_TARGET_NOT_HALTED;
        }
 
-       if ((first < 0) || (last < first) || (last >= bank->num_sectors))
+       if ((last < first) || (last >= bank->num_sectors))
                return ERROR_FLASH_SECTOR_INVALID;
 
        erase_all = 0;
@@ -852,16 +825,16 @@ static int at91sam7_erase(struct flash_bank *bank, int first, int last)
        }
 
        /* mark erased sectors */
-       for (sec = first; sec <= last; sec++)
+       for (unsigned int sec = first; sec <= last; sec++)
                bank->sectors[sec].is_erased = 1;
 
        return ERROR_OK;
 }
 
-static int at91sam7_protect(struct flash_bank *bank, int set, int first, int last)
+static int at91sam7_protect(struct flash_bank *bank, int set,
+               unsigned int first, unsigned int last)
 {
        uint32_t cmd;
-       int sector;
        uint32_t pagen;
 
        struct at91sam7_flash_bank *at91sam7_info = bank->driver_priv;
@@ -874,14 +847,14 @@ static int at91sam7_protect(struct flash_bank *bank, int set, int first, int las
                return ERROR_TARGET_NOT_HALTED;
        }
 
-       if ((first < 0) || (last < first) || (last >= bank->num_sectors))
+       if ((last < first) || (last >= bank->num_sectors))
                return ERROR_FLASH_SECTOR_INVALID;
 
        /* Configure the flash controller timing */
        at91sam7_read_clock_info(bank);
        at91sam7_set_flash_mode(bank, FMR_TIMING_NVBITS);
 
-       for (sector = first; sector <= last; sector++) {
+       for (unsigned int sector = first; sector <= last; sector++) {
                if (set)
                        cmd = SLB;
                else
@@ -961,7 +934,7 @@ static int at91sam7_write(struct flash_bank *bank, const uint8_t *buffer, uint32
                /* Send Write Page command to Flash Controller */
                if (at91sam7_flash_command(bank, WP, pagen) != ERROR_OK)
                        return ERROR_FLASH_OPERATION_FAILED;
-               LOG_DEBUG("Write flash bank:%i page number:%" PRIi32 "", bank->bank_number, pagen);
+               LOG_DEBUG("Write flash bank:%u page number:%" PRIu32, bank->bank_number, pagen);
        }
 
        return ERROR_OK;
@@ -985,56 +958,39 @@ static int at91sam7_probe(struct flash_bank *bank)
        return ERROR_OK;
 }
 
-static int get_at91sam7_info(struct flash_bank *bank, char *buf, int buf_size)
+static int get_at91sam7_info(struct flash_bank *bank, struct command_invocation *cmd)
 {
-       int printed;
        struct at91sam7_flash_bank *at91sam7_info = bank->driver_priv;
 
        if (at91sam7_info->cidr == 0)
                return ERROR_FLASH_BANK_NOT_PROBED;
 
-       printed = snprintf(buf, buf_size,
-                       "\n at91sam7 driver information: Chip is %s\n",
+       command_print_sameline(cmd, "\n at91sam7 driver information: Chip is %s\n",
                        at91sam7_info->target_name);
 
-       buf += printed;
-       buf_size -= printed;
-
-       printed = snprintf(buf,
-                       buf_size,
+       command_print_sameline(cmd,
                        " Cidr: 0x%8.8" PRIx32 " | Arch: 0x%4.4x | Eproc: %s | Version: 0x%3.3x | "
                        "Flashsize: 0x%8.8" PRIx32 "\n",
                        at91sam7_info->cidr,
                        at91sam7_info->cidr_arch,
-                       EPROC[at91sam7_info->cidr_eproc],
+                       eproc[at91sam7_info->cidr_eproc],
                        at91sam7_info->cidr_version,
                        bank->size);
 
-       buf += printed;
-       buf_size -= printed;
-
-       printed = snprintf(buf, buf_size,
-                       " Master clock (estimated): %u KHz | External clock: %u KHz\n",
+       command_print_sameline(cmd,
+                       " Master clock (estimated): %u kHz | External clock: %u kHz\n",
                        (unsigned)(at91sam7_info->mck_freq / 1000),
                        (unsigned)(at91sam7_info->ext_freq / 1000));
 
-       buf += printed;
-       buf_size -= printed;
-
-       printed = snprintf(buf,
-                       buf_size,
-                       " Pagesize: %i bytes | Lockbits(%i): %i 0x%4.4x | Pages in lock region: %i\n",
+       command_print_sameline(cmd,
+                       " Pagesize: %i bytes | Lockbits(%u): %i 0x%4.4x | Pages in lock region: %i\n",
                        at91sam7_info->pagesize,
                        bank->num_sectors,
                        at91sam7_info->num_lockbits_on,
                        at91sam7_info->lockbits,
-                       at91sam7_info->pages_per_sector*at91sam7_info->num_lockbits_on);
-
-       buf += printed;
-       buf_size -= printed;
+                       at91sam7_info->pages_per_sector * at91sam7_info->num_lockbits_on);
 
-       snprintf(buf, buf_size,
-               " Securitybit: %i | Nvmbits(%i): %i 0x%1.1x\n",
+       command_print_sameline(cmd, " Securitybit: %i | Nvmbits(%i): %i 0x%1.1x\n",
                at91sam7_info->securitybit, at91sam7_info->num_nvmbits,
                at91sam7_info->num_nvmbits_on, at91sam7_info->nvmbits);
 
@@ -1064,7 +1020,7 @@ COMMAND_HANDLER(at91sam7_handle_gpnvm_command)
                return ERROR_COMMAND_SYNTAX_ERROR;
 
        bank = get_flash_bank_by_num_noprobe(0);
-       if (bank ==  NULL)
+       if (!bank)
                return ERROR_FLASH_BANK_INVALID;
        if (strcmp(bank->driver->name, "at91sam7")) {
                command_print(CMD, "not an at91sam7 flash bank '%s'", CMD_ARGV[0]);