-/* SPDX-License-Identifier: GPL-2.0 */
+// SPDX-License-Identifier: GPL-2.0-only
+
/*
* SH QSPI (Quad SPI) driver
* Copyright (C) 2019 Marek Vasut <marek.vasut@gmail.com>
struct sh_qspi_flash_bank {
const struct flash_device *dev;
uint32_t io_base;
- int probed;
+ bool probed;
struct working_area *io_algorithm;
struct working_area *source;
unsigned int buffer_size;
return wait_till_ready(bank, 3000);
}
-static int sh_qspi_erase(struct flash_bank *bank, int first, int last)
+static int sh_qspi_erase(struct flash_bank *bank, unsigned int first,
+ unsigned int last)
{
struct target *target = bank->target;
struct sh_qspi_flash_bank *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;
}
if (info->dev->erase_cmd == 0x00)
return ERROR_FLASH_OPER_UNSUPPORTED;
- for (sector = first; sector <= last; sector++) {
+ for (unsigned int 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 = sh_qspi_erase_sector(bank, sector);
if (retval != ERROR_OK)
break;
uint32_t chunk;
bool addr4b = !!(info->dev->size_in_bytes > (1UL << 24));
int ret = ERROR_OK;
- int sector;
LOG_DEBUG("%s: offset=0x%08" PRIx32 " count=0x%08" PRIx32,
__func__, offset, count);
}
if (offset & 0xff) {
- LOG_ERROR("sh_qspi_write_page: unaligned write address: %08x",
+ LOG_ERROR("sh_qspi_write_page: unaligned write address: %08" PRIx32,
offset);
return ERROR_FAIL;
}
/* 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];
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;
}
}
destroy_reg_param(®_params[2]);
destroy_reg_param(®_params[3]);
- return ERROR_OK;
+ return ret;
}
/* Return ID of flash device */
}
static int sh_qspi_protect(struct flash_bank *bank, int set,
- int first, int last)
+ 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;
};
int ret;
- if (info->source)
- target_free_working_area(target, info->source);
- if (info->io_algorithm)
- target_free_working_area(target, info->io_algorithm);
+ target_free_working_area(target, info->source);
+ target_free_working_area(target, info->io_algorithm);
+ /* FIXME: Working areas are allocated during flash probe
+ * and eventual target_free_all_working_areas() called in case
+ * of target reset or run is not handled at all.
+ * Not a big problem if area backp is off.
+ */
/* flash write code */
if (target_alloc_working_area(target, sizeof(sh_qspi_io_code),
&info->io_algorithm) != ERROR_OK) {
if (info->probed)
free(bank->sectors);
- info->probed = 0;
+ info->probed = false;
for (target_device = target_devices; target_device->name;
++target_device)
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;
}
bank->sectors = sectors;
- info->probed = 1;
+ info->probed = true;
return ERROR_OK;
}
return ERROR_OK;
}
-static int sh_qspi_get_info(struct flash_bank *bank, char *buf, int buf_size)
+static int sh_qspi_get_info(struct flash_bank *bank, struct command_invocation *cmd)
{
struct sh_qspi_flash_bank *info = bank->driver_priv;
if (!info->probed) {
- snprintf(buf, buf_size,
- "\nSH QSPI flash bank not probed yet\n");
+ command_print_sameline(cmd, "\nSH QSPI flash bank not probed yet\n");
return ERROR_OK;
}
- snprintf(buf, buf_size, "\nSH QSPI flash information:\n"
+ command_print_sameline(cmd, "\nSH QSPI flash information:\n"
" Device \'%s\' (ID 0x%08" PRIx32 ")\n",
info->dev->name, info->dev->device_id);