flash/nor: add support for Nuvoton NPCX series flash
[fw/openocd] / src / flash / nor / ath79.c
index c551f27223512301ae8a8a5b7cddb6bff2247d82..394b6dda06e8f7ae9241f8a1fb2758b2a3ae14d6 100644 (file)
@@ -89,7 +89,7 @@ struct ath79_spi_ctx {
 };
 
 struct ath79_flash_bank {
-       int probed;
+       bool probed;
        int chipselect;
        uint32_t io_base;
        const struct flash_device *dev;
@@ -275,7 +275,7 @@ static int ath79_spi_bitbang_chunk(struct flash_bank *bank,
        *transferred = 0;
        pracc_queue_init(&ctx);
 
-       LOG_DEBUG("ath79_spi_bitbang_bytes(%p, %08x, %p, %d)",
+       LOG_DEBUG("ath79_spi_bitbang_bytes(%p, %08" PRIx32 ", %p, %d)",
                  target, ath79_info->io_base, data, len);
 
        LOG_DEBUG("max code %d => max len %d. to_xfer %d",
@@ -498,21 +498,21 @@ static int ath79_erase_sector(struct flash_bank *bank, int sector)
        return wait_till_ready(bank, ATH79_MAX_TIMEOUT);
 }
 
-static int ath79_erase(struct flash_bank *bank, int first, int last)
+static int ath79_erase(struct flash_bank *bank, unsigned int first,
+               unsigned int last)
 {
        struct target *target = bank->target;
        struct ath79_flash_bank *ath79_info = bank->driver_priv;
        int retval = ERROR_OK;
-       int sector;
 
-       LOG_DEBUG("%s: from sector %d to sector %d", __func__, first, last);
+       LOG_DEBUG("%s: from sector %u to sector %u", __func__, first, last);
 
        if (target->state != TARGET_HALTED) {
                LOG_ERROR("Target not halted");
                return ERROR_TARGET_NOT_HALTED;
        }
 
-       if ((first < 0) || (last < first) || (last >= bank->num_sectors)) {
+       if ((last < first) || (last >= bank->num_sectors)) {
                LOG_ERROR("Flash sector invalid");
                return ERROR_FLASH_SECTOR_INVALID;
        }
@@ -525,14 +525,14 @@ static int ath79_erase(struct flash_bank *bank, int first, int last)
        if (ath79_info->dev->erase_cmd == 0x00)
                return ERROR_FLASH_OPER_UNSUPPORTED;
 
-       for (sector = first; sector <= last; sector++) {
+       for (unsigned sector = first; sector <= last; sector++) {
                if (bank->sectors[sector].is_protected) {
-                       LOG_ERROR("Flash sector %d protected", sector);
+                       LOG_ERROR("Flash sector %u protected", sector);
                        return ERROR_FAIL;
                }
        }
 
-       for (sector = first; sector <= last; sector++) {
+       for (unsigned int sector = first; sector <= last; sector++) {
                retval = ath79_erase_sector(bank, sector);
                if (retval != ERROR_OK)
                        break;
@@ -542,12 +542,10 @@ static int ath79_erase(struct flash_bank *bank, int first, int last)
        return retval;
 }
 
-static int ath79_protect(struct flash_bank *bank, int set,
-                        int first, int last)
+static int ath79_protect(struct flash_bank *bank, int set, unsigned int first,
+               unsigned int last)
 {
-       int sector;
-
-       for (sector = first; sector <= last; sector++)
+       for (unsigned int sector = first; sector <= last; sector++)
                bank->sectors[sector].is_protected = set;
        return ERROR_OK;
 }
@@ -570,7 +568,7 @@ static int ath79_write_page(struct flash_bank *bank, const uint8_t *buffer,
                ath79_info->dev->pagesize : SPIFLASH_DEF_PAGESIZE;
 
        if (address & 0xff) {
-               LOG_ERROR("ath79_write_page: unaligned write address: %08x",
+               LOG_ERROR("ath79_write_page: unaligned write address: %08" PRIx32,
                          address);
                return ERROR_FAIL;
        }
@@ -579,7 +577,7 @@ static int ath79_write_page(struct flash_bank *bank, const uint8_t *buffer,
                return ERROR_FAIL;
        }
        if (len > ath79_info->dev->pagesize) {
-               LOG_ERROR("ath79_write_page: len bigger than page size %d: %d",
+               LOG_ERROR("ath79_write_page: len bigger than page size %" PRIu32 ": %" PRIu32,
                        pagesize, len);
                return ERROR_FAIL;
        }
@@ -591,7 +589,7 @@ static int ath79_write_page(struct flash_bank *bank, const uint8_t *buffer,
        if (i == len)  /* all 0xff, no need to program. */
                return ERROR_OK;
 
-       LOG_INFO("writing %d bytes to flash page @0x%08x", len, address);
+       LOG_INFO("writing %" PRIu32 " bytes to flash page @0x%08" PRIx32, len, address);
 
        memcpy(ath79_info->spi.page_buf, buffer, len);
 
@@ -648,7 +646,6 @@ static int ath79_write(struct flash_bank *bank, const uint8_t *buffer,
                       uint32_t offset, uint32_t count)
 {
        struct target *target = bank->target;
-       int sector;
 
        LOG_DEBUG("%s: offset=0x%08" PRIx32 " count=0x%08" PRIx32,
                  __func__, offset, count);
@@ -664,7 +661,7 @@ static int ath79_write(struct flash_bank *bank, const uint8_t *buffer,
        }
 
        /* Check sector protection */
-       for (sector = 0; sector < bank->num_sectors; sector++) {
+       for (unsigned int sector = 0; sector < bank->num_sectors; sector++) {
                /* Start offset in or before this sector? */
                /* End offset in or behind this sector? */
                struct flash_sector *bs = &bank->sectors[sector];
@@ -672,7 +669,7 @@ static int ath79_write(struct flash_bank *bank, const uint8_t *buffer,
                if ((offset < (bs->offset + bs->size)) &&
                    ((offset + count - 1) >= bs->offset) &&
                    bs->is_protected) {
-                       LOG_ERROR("Flash sector %d protected", sector);
+                       LOG_ERROR("Flash sector %u protected", sector);
                        return ERROR_FAIL;
                }
        }
@@ -695,12 +692,12 @@ static int ath79_read_buffer(struct flash_bank *bank, uint8_t *buffer,
                  __func__, address, len);
 
        if (address & 0xff) {
-               LOG_ERROR("ath79_read_buffer: unaligned read address: %08x",
+               LOG_ERROR("ath79_read_buffer: unaligned read address: %08" PRIx32,
                          address);
                return ERROR_FAIL;
        }
 
-       LOG_INFO("reading %d bytes from flash @0x%08x", len, address);
+       LOG_INFO("reading %" PRIu32 " bytes from flash @0x%08" PRIx32, len, address);
 
        /* bitbang command */
        ath79_spi_bitbang_prepare(bank);
@@ -780,7 +777,7 @@ static int ath79_probe(struct flash_bank *bank)
                free(bank->sectors);
                free(ath79_info->spi.page_buf);
        }
-       ath79_info->probed = 0;
+       ath79_info->probed = false;
 
        for (target_device = target_devices; target_device->name;
                ++target_device)
@@ -845,7 +842,7 @@ static int ath79_probe(struct flash_bank *bank)
                return ERROR_FAIL;
        }
 
-       for (int sector = 0; sector < bank->num_sectors; sector++) {
+       for (unsigned int sector = 0; sector < bank->num_sectors; sector++) {
                sectors[sector].offset = sector * sectorsize;
                sectors[sector].size = sectorsize;
                sectors[sector].is_erased = 0;
@@ -853,7 +850,7 @@ static int ath79_probe(struct flash_bank *bank)
        }
 
        bank->sectors = sectors;
-       ath79_info->probed = 1;
+       ath79_info->probed = true;
        return ERROR_OK;
 }
 
@@ -878,17 +875,16 @@ static int ath79_protect_check(struct flash_bank *bank)
        return ERROR_OK;
 }
 
-static int get_ath79_info(struct flash_bank *bank, char *buf, int buf_size)
+static int get_ath79_info(struct flash_bank *bank, struct command_invocation *cmd)
 {
        struct ath79_flash_bank *ath79_info = bank->driver_priv;
 
        if (!ath79_info->probed) {
-               snprintf(buf, buf_size,
-                        "\nATH79 flash bank not probed yet\n");
+               command_print_sameline(cmd, "\nATH79 flash bank not probed yet\n");
                return ERROR_OK;
        }
 
-       snprintf(buf, buf_size, "\nATH79 flash information:\n"
+       command_print_sameline(cmd, "\nATH79 flash information:\n"
                "  Device \'%s\' (ID 0x%08" PRIx32 ")\n",
                ath79_info->dev->name, ath79_info->dev->device_id);