jtag: linuxgpiod: drop extra parenthesis
[openocd.git] / src / flash / nor / pic32mx.c
index b214642a0931506616344cd2d0b39a8924426401..0f3937cfc22da83d14a9a85b379ff4ff99725b85 100644 (file)
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
 /***************************************************************************
  *   Copyright (C) 2005 by Dominic Rath                                    *
  *   Dominic.Rath@gmx.de                                                   *
@@ -7,19 +9,6 @@
  *                                                                         *
  *   Copyright (C) 2008 by John McCarthy                                   *
  *   jgmcc@magma.ca                                                        *
- *                                                                         *
- *   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
  * Note: These macros only work for KSEG0/KSEG1 addresses.
  */
 
-#define Virt2Phys(v)   ((v) & 0x1FFFFFFF)
+#define virt2phys(v)   ((v) & 0x1FFFFFFF)
 
 /* pic32mx configuration register locations */
 
-#define PIC32MX_DEVCFG0_1xx_2xx        0xBFC00BFC
+#define PIC32MX_DEVCFG0_1XX_2XX        0xBFC00BFC
 #define PIC32MX_DEVCFG0                0xBFC02FFC
 #define PIC32MX_DEVCFG1                0xBFC02FF8
 #define PIC32MX_DEVCFG2                0xBFC02FF4
@@ -91,8 +80,8 @@
 #define NVMKEY1                        0xAA996655
 #define NVMKEY2                        0x556699AA
 
-#define MX_1xx_2xx                     1       /* PIC32mx1xx/2xx */
-#define MX_17x_27x                     2       /* PIC32mx17x/27x */
+#define MX_1XX_2XX                     1       /* PIC32mx1xx/2xx */
+#define MX_17X_27X                     2       /* PIC32mx17x/27x */
 
 struct pic32mx_flash_bank {
        bool probed;
@@ -279,9 +268,9 @@ static int pic32mx_protect_check(struct flash_bank *bank)
        }
 
        switch (pic32mx_info->dev_type) {
-       case    MX_1xx_2xx:
-       case    MX_17x_27x:
-               config0_address = PIC32MX_DEVCFG0_1xx_2xx;
+       case    MX_1XX_2XX:
+       case    MX_17X_27X:
+               config0_address = PIC32MX_DEVCFG0_1XX_2XX;
                break;
        default:
                config0_address = PIC32MX_DEVCFG0;
@@ -292,7 +281,7 @@ static int pic32mx_protect_check(struct flash_bank *bank)
 
        if ((devcfg0 & (1 << 28)) == 0) /* code protect bit */
                num_pages = 0xffff;                     /* All pages protected */
-       else if (Virt2Phys(bank->base) == PIC32MX_PHYS_BOOT_FLASH) {
+       else if (virt2phys(bank->base) == PIC32MX_PHYS_BOOT_FLASH) {
                if (devcfg0 & (1 << 24))
                        num_pages = 0;                  /* All pages unprotected */
                else
@@ -300,10 +289,10 @@ static int pic32mx_protect_check(struct flash_bank *bank)
        } else {
                /* pgm flash */
                switch (pic32mx_info->dev_type) {
-               case    MX_1xx_2xx:
+               case    MX_1XX_2XX:
                        num_pages = (~devcfg0 >> 10) & 0x7f;
                        break;
-               case    MX_17x_27x:
+               case    MX_17X_27X:
                        num_pages = (~devcfg0 >> 10) & 0x1ff;
                        break;
                default:
@@ -332,7 +321,7 @@ static int pic32mx_erase(struct flash_bank *bank, unsigned int first,
        }
 
        if ((first == 0) && (last == (bank->num_sectors - 1))
-               && (Virt2Phys(bank->base) == PIC32MX_PHYS_PGM_FLASH)) {
+               && (virt2phys(bank->base) == PIC32MX_PHYS_PGM_FLASH)) {
                /* this will only erase the Program Flash (PFM), not the Boot Flash (BFM)
                 * we need to use the MTAP to perform a full erase */
                LOG_DEBUG("Erasing entire program flash");
@@ -345,7 +334,7 @@ static int pic32mx_erase(struct flash_bank *bank, unsigned int first,
        }
 
        for (unsigned int i = first; i <= last; i++) {
-               target_write_u32(target, PIC32MX_NVMADDR, Virt2Phys(bank->base + bank->sectors[i].offset));
+               target_write_u32(target, PIC32MX_NVMADDR, virt2phys(bank->base + bank->sectors[i].offset));
 
                status = pic32mx_nvm_exec(bank, NVMCON_OP_PAGE_ERASE, 10);
 
@@ -353,7 +342,6 @@ static int pic32mx_erase(struct flash_bank *bank, unsigned int first,
                        return ERROR_FLASH_OPERATION_FAILED;
                if (status & NVMCON_LVDERR)
                        return ERROR_FLASH_OPERATION_FAILED;
-               bank->sectors[i].is_erased = 1;
        }
 
        return ERROR_OK;
@@ -372,7 +360,7 @@ static int pic32mx_protect(struct flash_bank *bank, int set, unsigned int first,
        return ERROR_OK;
 }
 
-/* see contib/loaders/flash/pic32mx.s for src */
+/* see contrib/loaders/flash/pic32mx.s for src */
 
 static uint32_t pic32mx_flash_write_code[] = {
                                        /* write: */
@@ -465,8 +453,8 @@ static int pic32mx_write_block(struct flash_bank *bank, const uint8_t *buffer,
 
        /* Change values for counters and row size, depending on variant */
        switch (pic32mx_info->dev_type) {
-       case    MX_1xx_2xx:
-       case    MX_17x_27x:
+       case    MX_1XX_2XX:
+       case    MX_17X_27X:
                /* 128 byte row */
                pic32mx_flash_write_code[8] = 0x2CD30020;
                pic32mx_flash_write_code[14] = 0x24840080;
@@ -515,7 +503,7 @@ static int pic32mx_write_block(struct flash_bank *bank, const uint8_t *buffer,
        uint8_t *new_buffer = NULL;
        if (row_offset && (count >= (row_size / 4))) {
                new_buffer = malloc(buffer_size);
-               if (new_buffer == NULL) {
+               if (!new_buffer) {
                        LOG_ERROR("Out of memory");
                        return ERROR_FAIL;
                }
@@ -548,8 +536,8 @@ static int pic32mx_write_block(struct flash_bank *bank, const uint8_t *buffer,
                                break;
                }
 
-               buf_set_u32(reg_params[0].value, 0, 32, Virt2Phys(source->address));
-               buf_set_u32(reg_params[1].value, 0, 32, Virt2Phys(address));
+               buf_set_u32(reg_params[0].value, 0, 32, virt2phys(source->address));
+               buf_set_u32(reg_params[1].value, 0, 32, virt2phys(address));
                buf_set_u32(reg_params[2].value, 0, 32, thisrun_count + row_offset / 4);
 
                retval = target_run_algorithm(target, 0, NULL, 3, reg_params,
@@ -591,8 +579,7 @@ static int pic32mx_write_block(struct flash_bank *bank, const uint8_t *buffer,
        destroy_reg_param(&reg_params[1]);
        destroy_reg_param(&reg_params[2]);
 
-       if (new_buffer != NULL)
-               free(new_buffer);
+       free(new_buffer);
        return retval;
 }
 
@@ -600,7 +587,7 @@ static int pic32mx_write_word(struct flash_bank *bank, uint32_t address, uint32_
 {
        struct target *target = bank->target;
 
-       target_write_u32(target, PIC32MX_NVMADDR, Virt2Phys(address));
+       target_write_u32(target, PIC32MX_NVMADDR, virt2phys(address));
        target_write_u32(target, PIC32MX_NVMDATA, word);
 
        return pic32mx_nvm_exec(bank, NVMCON_OP_WORD_PROG, 5);
@@ -715,17 +702,17 @@ static int pic32mx_probe(struct flash_bank *bank)
        }
 
        /* Check for PIC32mx1xx/2xx */
-       for (i = 0; pic32mx_devs[i].name != NULL; i++) {
+       for (i = 0; pic32mx_devs[i].name; i++) {
                if (pic32mx_devs[i].devid == (device_id & 0x0fffffff)) {
                        if ((pic32mx_devs[i].name[0] == '1') || (pic32mx_devs[i].name[0] == '2'))
-                               pic32mx_info->dev_type = (pic32mx_devs[i].name[1] == '7') ? MX_17x_27x : MX_1xx_2xx;
+                               pic32mx_info->dev_type = (pic32mx_devs[i].name[1] == '7') ? MX_17X_27X : MX_1XX_2XX;
                        break;
                }
        }
 
        switch (pic32mx_info->dev_type) {
-       case    MX_1xx_2xx:
-       case    MX_17x_27x:
+       case    MX_1XX_2XX:
+       case    MX_17X_27X:
                page_size = 1024;
                break;
        default:
@@ -733,7 +720,7 @@ static int pic32mx_probe(struct flash_bank *bank)
                break;
        }
 
-       if (Virt2Phys(bank->base) == PIC32MX_PHYS_BOOT_FLASH) {
+       if (virt2phys(bank->base) == PIC32MX_PHYS_BOOT_FLASH) {
                /* 0x1FC00000: Boot flash size */
 #if 0
                /* for some reason this register returns 8k for the boot bank size
@@ -746,8 +733,8 @@ static int pic32mx_probe(struct flash_bank *bank)
 #else
                /* fixed 12k boot bank - see comments above */
                switch (pic32mx_info->dev_type) {
-               case    MX_1xx_2xx:
-               case    MX_17x_27x:
+               case    MX_1XX_2XX:
+               case    MX_17X_27X:
                        num_pages = (3 * 1024);
                        break;
                default:
@@ -759,8 +746,8 @@ static int pic32mx_probe(struct flash_bank *bank)
                /* read the flash size from the device */
                if (target_read_u32(target, PIC32MX_BMXPFMSZ, &num_pages) != ERROR_OK) {
                        switch (pic32mx_info->dev_type) {
-                       case    MX_1xx_2xx:
-                       case    MX_17x_27x:
+                       case    MX_1XX_2XX:
+                       case    MX_17X_27X:
                                LOG_WARNING("PIC32MX flash size failed, probe inaccurate - assuming 32k flash");
                                num_pages = (32 * 1024);
                                break;
@@ -772,12 +759,9 @@ static int pic32mx_probe(struct flash_bank *bank)
                }
        }
 
-       LOG_INFO("flash size = %" PRId32 "kbytes", num_pages / 1024);
+       LOG_INFO("flash size = %" PRIu32 " KiB", num_pages / 1024);
 
-       if (bank->sectors) {
-               free(bank->sectors);
-               bank->sectors = NULL;
-       }
+       free(bank->sectors);
 
        /* calculate numbers of pages */
        num_pages /= page_size;
@@ -805,37 +789,35 @@ static int pic32mx_auto_probe(struct flash_bank *bank)
        return pic32mx_probe(bank);
 }
 
-static int pic32mx_info(struct flash_bank *bank, char *buf, int buf_size)
+static int pic32mx_info(struct flash_bank *bank, struct command_invocation *cmd)
 {
        struct target *target = bank->target;
        struct mips32_common *mips32 = target->arch_info;
        struct mips_ejtag *ejtag_info = &mips32->ejtag_info;
        uint32_t device_id;
-       int printed = 0, i;
 
        device_id = ejtag_info->idcode;
 
        if (((device_id >> 1) & 0x7ff) != PIC32MX_MANUF_ID) {
-               snprintf(buf, buf_size,
-                                "Cannot identify target as a PIC32MX family (manufacturer 0x%03x != 0x%03x)\n",
-                                (unsigned)((device_id >> 1) & 0x7ff),
-                                PIC32MX_MANUF_ID);
+               command_print_sameline(cmd,
+                               "Cannot identify target as a PIC32MX family (manufacturer 0x%03x != 0x%03x)\n",
+                               (unsigned)((device_id >> 1) & 0x7ff),
+                               PIC32MX_MANUF_ID);
                return ERROR_FLASH_OPERATION_FAILED;
        }
 
-       for (i = 0; pic32mx_devs[i].name != NULL; i++) {
+       int i;
+       for (i = 0; pic32mx_devs[i].name; i++) {
                if (pic32mx_devs[i].devid == (device_id & 0x0fffffff)) {
-                       printed = snprintf(buf, buf_size, "PIC32MX%s", pic32mx_devs[i].name);
+                       command_print_sameline(cmd, "PIC32MX%s", pic32mx_devs[i].name);
                        break;
                }
        }
 
-       if (pic32mx_devs[i].name == NULL)
-               printed = snprintf(buf, buf_size, "Unknown");
+       if (!pic32mx_devs[i].name)
+               command_print_sameline(cmd, "Unknown");
 
-       buf += printed;
-       buf_size -= printed;
-       snprintf(buf, buf_size, " Ver: 0x%02x",
+       command_print_sameline(cmd, " Ver: 0x%02x",
                        (unsigned)((device_id >> 28) & 0xf));
 
        return ERROR_OK;
@@ -854,7 +836,7 @@ COMMAND_HANDLER(pic32mx_handle_pgm_word_command)
 
        struct flash_bank *bank;
        int retval = CALL_COMMAND_HANDLER(flash_command_get_bank, 2, &bank);
-       if (ERROR_OK != retval)
+       if (retval != ERROR_OK)
                return retval;
 
        if (address < bank->base || address >= (bank->base + bank->size)) {
@@ -884,14 +866,12 @@ COMMAND_HANDLER(pic32mx_handle_unlock_command)
        struct mips_ejtag *ejtag_info;
        int timeout = 10;
 
-       if (CMD_ARGC < 1) {
-               command_print(CMD, "pic32mx unlock <bank>");
+       if (CMD_ARGC != 1)
                return ERROR_COMMAND_SYNTAX_ERROR;
-       }
 
        struct flash_bank *bank;
        int retval = CALL_COMMAND_HANDLER(flash_command_get_bank, 0, &bank);
-       if (ERROR_OK != retval)
+       if (retval != ERROR_OK)
                return retval;
 
        target = bank->target;
@@ -920,7 +900,7 @@ COMMAND_HANDLER(pic32mx_handle_unlock_command)
                mchip_cmd = MCHP_STATUS;
                mips_ejtag_drscan_8(ejtag_info, &mchip_cmd);
                if (timeout-- == 0) {
-                       LOG_DEBUG("timeout waiting for unlock: 0x%" PRIx32 "", mchip_cmd);
+                       LOG_DEBUG("timeout waiting for unlock: 0x%" PRIx8 "", mchip_cmd);
                        break;
                }
                alive_sleep(1);
@@ -950,7 +930,7 @@ static const struct command_registration pic32mx_exec_command_handlers[] = {
                .name = "unlock",
                .handler = pic32mx_handle_unlock_command,
                .mode = COMMAND_EXEC,
-               .usage = "[bank_id]",
+               .usage = "bank_id",
                .help = "Unlock/Erase entire device.",
        },
        COMMAND_REGISTRATION_DONE

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)