flash/stm32l4x: introduce auto-probe when OPTR is changed
[fw/openocd] / src / flash / nor / max32xxx.c
index bf54f63ba0d4e469631172d76dd58509cb908eed..d11af909463b48b60182bcc802c8b587403d2544 100644 (file)
@@ -76,13 +76,13 @@ struct max32xxx_flash_bank {
        unsigned int flc_base;
        unsigned int sector_size;
        unsigned int clkdiv_value;
-       unsigned int int_state;
+       uint32_t int_state;
        unsigned int burst_size_bits;
 };
 
 /* see contrib/loaders/flash/max32xxx/max32xxx.s for src */
 static const uint8_t write_code[] = {
-#include "../../contrib/loaders/flash/max32xxx/max32xxx.inc"
+#include "../../../contrib/loaders/flash/max32xxx/max32xxx.inc"
 };
 
 /*             Config Command: flash bank name driver base size chip_width bus_width target [driver_option]
@@ -98,13 +98,13 @@ FLASH_BANK_COMMAND_HANDLER(max32xxx_flash_bank_command)
        }
 
        info = calloc(sizeof(struct max32xxx_flash_bank), 1);
-       COMMAND_PARSE_NUMBER(u32, CMD_ARGV[2], info->flash_size);
-       COMMAND_PARSE_NUMBER(u32, CMD_ARGV[6], info->flc_base);
-       COMMAND_PARSE_NUMBER(u32, CMD_ARGV[7], info->sector_size);
-       COMMAND_PARSE_NUMBER(u32, CMD_ARGV[8], info->clkdiv_value);
+       COMMAND_PARSE_NUMBER(uint, CMD_ARGV[2], info->flash_size);
+       COMMAND_PARSE_NUMBER(uint, CMD_ARGV[6], info->flc_base);
+       COMMAND_PARSE_NUMBER(uint, CMD_ARGV[7], info->sector_size);
+       COMMAND_PARSE_NUMBER(uint, CMD_ARGV[8], info->clkdiv_value);
 
        if (CMD_ARGC > 9)
-               COMMAND_PARSE_NUMBER(u32, CMD_ARGV[9], info->burst_size_bits);
+               COMMAND_PARSE_NUMBER(uint, CMD_ARGV[9], info->burst_size_bits);
        else
                info->burst_size_bits = 32;
 
@@ -113,17 +113,14 @@ FLASH_BANK_COMMAND_HANDLER(max32xxx_flash_bank_command)
        return ERROR_OK;
 }
 
-static int get_info(struct flash_bank *bank, char *buf, int buf_size)
+static int get_info(struct flash_bank *bank, struct command_invocation *cmd)
 {
-       int printed;
        struct max32xxx_flash_bank *info = bank->driver_priv;
 
        if (!info->probed)
                return ERROR_FLASH_BANK_NOT_PROBED;
 
-       printed = snprintf(buf, buf_size, "\nMaxim Integrated max32xxx flash driver\n");
-       buf += printed;
-       buf_size -= printed;
+       command_print_sameline(cmd, "\nMaxim Integrated max32xxx flash driver\n");
        return ERROR_OK;
 }
 
@@ -305,8 +302,6 @@ static int max32xxx_erase(struct flash_bank *bank, unsigned int first,
                        max32xxx_flash_op_post(bank);
                        return ERROR_FLASH_OPERATION_FAILED;
                }
-
-               bank->sectors[banknr].is_erased = 1;
        }
 
        if (!erased) {
@@ -522,7 +517,7 @@ static int max32xxx_write(struct flash_bank *bank, const uint8_t *buffer,
                        } while ((--retry > 0) && (flsh_cn & FLSH_CN_PEND));
 
                        if (retry <= 0) {
-                               LOG_ERROR("Timed out waiting for flash write @ 0x%08x", address);
+                               LOG_ERROR("Timed out waiting for flash write @ 0x%08" PRIx32, address);
                                return ERROR_FLASH_OPERATION_FAILED;
                        }
 
@@ -543,7 +538,7 @@ static int max32xxx_write(struct flash_bank *bank, const uint8_t *buffer,
 
                while (remaining >= 16) {
                        if ((address & 0xFFF) == 0)
-                               LOG_DEBUG("Writing @ 0x%08x", address);
+                               LOG_DEBUG("Writing @ 0x%08" PRIx32, address);
 
                        target_write_buffer(target, info->flc_base + FLSH_DATA0, 16, buffer);
                        flsh_cn |= 0x00000001;
@@ -556,7 +551,7 @@ static int max32xxx_write(struct flash_bank *bank, const uint8_t *buffer,
                        } while ((--retry > 0) && (flsh_cn & FLSH_CN_PEND));
 
                        if (retry <= 0) {
-                               LOG_ERROR("Timed out waiting for flash write @ 0x%08x", address);
+                               LOG_ERROR("Timed out waiting for flash write @ 0x%08" PRIx32, address);
                                return ERROR_FLASH_OPERATION_FAILED;
                        }
 
@@ -587,7 +582,7 @@ static int max32xxx_write(struct flash_bank *bank, const uint8_t *buffer,
                        } while ((--retry > 0) && (flsh_cn & FLSH_CN_PEND));
 
                        if (retry <= 0) {
-                               LOG_ERROR("Timed out waiting for flash write @ 0x%08x", address);
+                               LOG_ERROR("Timed out waiting for flash write @ 0x%08" PRIx32, address);
                                return ERROR_FLASH_OPERATION_FAILED;
                        }
 
@@ -625,7 +620,7 @@ static int max32xxx_write(struct flash_bank *bank, const uint8_t *buffer,
                } while ((--retry > 0) && (flsh_cn & FLSH_CN_PEND));
 
                if (retry <= 0) {
-                       LOG_ERROR("Timed out waiting for flash write @ 0x%08x", address);
+                       LOG_ERROR("Timed out waiting for flash write @ 0x%08" PRIx32, address);
                        return ERROR_FLASH_OPERATION_FAILED;
                }
        }
@@ -633,7 +628,7 @@ static int max32xxx_write(struct flash_bank *bank, const uint8_t *buffer,
        /* Check access violations */
        target_read_u32(target, info->flc_base + FLSH_INT, &flsh_int);
        if (flsh_int & FLSH_INT_AF) {
-               LOG_ERROR("Flash Error writing 0x%x bytes at 0x%08x", count, offset);
+               LOG_ERROR("Flash Error writing 0x%" PRIx32 " bytes at 0x%08" PRIx32, count, offset);
                max32xxx_flash_op_post(bank);
                return ERROR_FLASH_OPERATION_FAILED;
        }
@@ -675,7 +670,7 @@ static int max32xxx_probe(struct flash_bank *bank)
        if ((arm_pid == ARM_PID_DEFAULT_CM3) || arm_pid == ARM_PID_DEFAULT_CM4) {
                uint32_t max326xx_id;
                target_read_u32(target, MAX326XX_ID_REG, &max326xx_id);
-               LOG_DEBUG("max326xx_id = 0x%x", max326xx_id);
+               LOG_DEBUG("max326xx_id = 0x%" PRIx32, max326xx_id);
                max326xx_id = ((max326xx_id & 0xFF000000) >> 24);
                if (max326xx_id == MAX326XX_ID)
                        info->max326xx = 1;
@@ -771,16 +766,12 @@ COMMAND_HANDLER(max32xxx_handle_mass_erase_command)
                return ERROR_OK;
        }
 
-       if (ERROR_OK != retval)
+       if (retval != ERROR_OK)
                return retval;
 
-       if (max32xxx_mass_erase(bank) == ERROR_OK) {
-               /* set all sectors as erased */
-               for (unsigned i = 0; i < bank->num_sectors; i++)
-                       bank->sectors[i].is_erased = 1;
-
+       if (max32xxx_mass_erase(bank) == ERROR_OK)
                command_print(CMD, "max32xxx mass erase complete");
-       else
+       else
                command_print(CMD, "max32xxx mass erase failed");
 
        return ERROR_OK;
@@ -799,12 +790,12 @@ COMMAND_HANDLER(max32xxx_handle_protection_set_command)
        }
 
        retval = CALL_COMMAND_HANDLER(flash_command_get_bank, 0, &bank);
-       if (ERROR_OK != retval)
+       if (retval != ERROR_OK)
                return retval;
        info = bank->driver_priv;
 
        /* Convert the range to the page numbers */
-       if (1 != sscanf(CMD_ARGV[1], "0x%"SCNx32, &addr)) {
+       if (sscanf(CMD_ARGV[1], "0x%"SCNx32, &addr) != 1) {
                LOG_WARNING("Error parsing address");
                command_print(CMD, "max32xxx protection_set <bank> <addr> <size>");
                return ERROR_FAIL;
@@ -812,7 +803,7 @@ COMMAND_HANDLER(max32xxx_handle_protection_set_command)
        /* Mask off the top portion on the address */
        addr = (addr & 0x0FFFFFFF);
 
-       if (1 != sscanf(CMD_ARGV[2], "0x%"SCNx32, &len)) {
+       if (sscanf(CMD_ARGV[2], "0x%"SCNx32, &len) != 1) {
                LOG_WARNING("Error parsing length");
                command_print(CMD, "max32xxx protection_set <bank> <addr> <size>");
                return ERROR_FAIL;
@@ -855,12 +846,12 @@ COMMAND_HANDLER(max32xxx_handle_protection_clr_command)
        }
 
        retval = CALL_COMMAND_HANDLER(flash_command_get_bank, 0, &bank);
-       if (ERROR_OK != retval)
+       if (retval != ERROR_OK)
                return retval;
        info = bank->driver_priv;
 
        /* Convert the range to the page numbers */
-       if (1 != sscanf(CMD_ARGV[1], "0x%"SCNx32, &addr)) {
+       if (sscanf(CMD_ARGV[1], "0x%"SCNx32, &addr) != 1) {
                LOG_WARNING("Error parsing address");
                command_print(CMD, "max32xxx protection_clr <bank> <addr> <size>");
                return ERROR_FAIL;
@@ -868,7 +859,7 @@ COMMAND_HANDLER(max32xxx_handle_protection_clr_command)
        /* Mask off the top portion on the address */
        addr = (addr & 0x0FFFFFFF);
 
-       if (1 != sscanf(CMD_ARGV[2], "0x%"SCNx32, &len)) {
+       if (sscanf(CMD_ARGV[2], "0x%"SCNx32, &len) != 1) {
                LOG_WARNING("Error parsing length");
                command_print(CMD, "max32xxx protection_clr <bank> <addr> <size>");
                return ERROR_FAIL;
@@ -910,13 +901,13 @@ COMMAND_HANDLER(max32xxx_handle_protection_check_command)
        }
 
        retval = CALL_COMMAND_HANDLER(flash_command_get_bank, 0, &bank);
-       if (ERROR_OK != retval)
+       if (retval != ERROR_OK)
                return retval;
        info = bank->driver_priv;
 
        /* Update the protection array */
        retval = max32xxx_protect_check(bank);
-       if (ERROR_OK != retval) {
+       if (retval != ERROR_OK) {
                LOG_WARNING("Error updating the protection array");
                return retval;
        }