+// SPDX-License-Identifier: GPL-2.0-or-later
+
/***************************************************************************
* Copyright (C) 2018 by Square, Inc. *
* Steven Stallion <stallion@squareup.com> *
* James Zhao <hjz@squareup.com> *
- * *
- * 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
#endif
#define CONTROL_TIMEOUT 5000 /* 5s */
-#define PAGE_SIZE 4096
+#define FLASH_PAGE_SIZE 4096
#define PB_MAX 32
#define NUM_NS_PER_S 1000000000ULL
FLASH_BANK_COMMAND_HANDLER(esirisc_flash_bank_command)
{
struct esirisc_flash_bank *esirisc_info;
- struct command *esirisc_cmd;
if (CMD_ARGC < 9)
return ERROR_COMMAND_SYNTAX_ERROR;
bank->driver_priv = esirisc_info;
/* register commands using existing esirisc context */
- esirisc_cmd = command_find_in_context(CMD_CTX, "esirisc");
- register_commands(CMD_CTX, esirisc_cmd, esirisc_flash_command_handlers);
+ register_commands(CMD_CTX, "esirisc", esirisc_flash_command_handlers);
return ERROR_OK;
}
return esirisc_flash_control(bank, CONTROL_R);
}
-static int esirisc_flash_erase(struct flash_bank *bank, int first, int last)
+static int esirisc_flash_erase(struct flash_bank *bank, unsigned int first,
+ unsigned int last)
{
struct esirisc_flash_bank *esirisc_info = bank->driver_priv;
struct target *target = bank->target;
(void)esirisc_flash_disable_protect(bank);
- for (int page = first; page < last; ++page) {
- uint32_t address = page * PAGE_SIZE;
+ for (unsigned int page = first; page < last; ++page) {
+ uint32_t address = page * FLASH_PAGE_SIZE;
target_write_u32(target, esirisc_info->cfg + ADDRESS, address);
if (target->state != TARGET_HALTED)
return ERROR_TARGET_NOT_HALTED;
- bank->num_sectors = bank->size / PAGE_SIZE;
- bank->sectors = alloc_block_array(0, PAGE_SIZE, bank->num_sectors);
+ bank->num_sectors = bank->size / FLASH_PAGE_SIZE;
+ bank->sectors = alloc_block_array(0, FLASH_PAGE_SIZE, bank->num_sectors);
retval = esirisc_flash_init(bank);
if (retval != ERROR_OK) {
return esirisc_flash_probe(bank);
}
-static int esirisc_flash_info(struct flash_bank *bank, char *buf, int buf_size)
+static int esirisc_flash_info(struct flash_bank *bank, struct command_invocation *cmd)
{
struct esirisc_flash_bank *esirisc_info = bank->driver_priv;
- snprintf(buf, buf_size,
- "%4s cfg at 0x%" PRIx32 ", clock %" PRId32 ", wait_states %" PRId32,
+ command_print_sameline(cmd,
+ "%4s cfg at 0x%" PRIx32 ", clock %" PRIu32 ", wait_states %" PRIu32,
"", /* align with first line */
esirisc_info->cfg,
esirisc_info->clock,
retval = esirisc_flash_mass_erase(bank);
- command_print(CMD_CTX, "mass erase %s",
+ command_print(CMD, "mass erase %s",
(retval == ERROR_OK) ? "successful" : "failed");
return retval;
retval = esirisc_flash_ref_erase(bank);
- command_print(CMD_CTX, "erase reference cell %s",
+ command_print(CMD, "erase reference cell %s",
(retval == ERROR_OK) ? "successful" : "failed");
return retval;
COMMAND_REGISTRATION_DONE
};
-struct flash_driver esirisc_flash = {
+const struct flash_driver esirisc_flash = {
.name = "esirisc",
.usage = "flash bank bank_id 'esirisc' base_address size_bytes 0 0 target "
"cfg_address clock_hz wait_states",