#include "core.h"
#include "imp.h"
#include "fileio.h"
+#include <target/target.h>
// to be removed
extern struct nand_device *nand_devices;
command_print(CMD_CTX, "NAND flash device '%s (%s)' found",
p->device->name, p->manufacturer->name);
}
- else if (retval == ERROR_NAND_OPERATION_FAILED)
- {
- command_print(CMD_CTX, "probing failed for NAND flash device");
- }
- else
- {
- command_print(CMD_CTX, "unknown error when probing NAND flash device");
- }
- return ERROR_OK;
+ return retval;
}
COMMAND_HANDLER(handle_nand_erase_command)
offset, offset + length,
CMD_ARGV[0], p->device->name);
}
- else if (retval == ERROR_NAND_OPERATION_FAILED)
- {
- command_print(CMD_CTX, "erase failed");
- }
- else
- {
- command_print(CMD_CTX, "unknown error when erasing NAND flash device");
- }
- return ERROR_OK;
+ return retval;
}
COMMAND_HANDLER(handle_nand_check_bad_blocks_command)
command_print(CMD_CTX, "checked NAND flash device for bad blocks, "
"use \"nand info\" command to list blocks");
}
- else if (retval == ERROR_NAND_OPERATION_FAILED)
- {
- command_print(CMD_CTX, "error when checking for bad blocks on "
- "NAND flash device");
- }
- else
- {
- command_print(CMD_CTX, "unknown error when checking for bad "
- "blocks on NAND flash device");
- }
- return ERROR_OK;
+ return retval;
}
COMMAND_HANDLER(handle_nand_write_command)
COMMAND_HANDLER(handle_nand_dump_command)
{
+ int filesize;
struct nand_device *nand = NULL;
struct nand_fileio_state s;
int retval = CALL_COMMAND_HANDLER(nand_fileio_parse_args,
s.address += nand->page_size;
}
+ retval = fileio_size(&s.fileio, &filesize);
+ if (retval != ERROR_OK)
+ return retval;
+
if (nand_fileio_finish(&s) == ERROR_OK)
{
command_print(CMD_CTX, "dumped %ld bytes in %fs (%0.3f KiB/s)",
- (long)s.fileio.size, duration_elapsed(&s.bench),
- duration_kbps(&s.bench, s.fileio.size));
+ (long)filesize, duration_elapsed(&s.bench),
+ duration_kbps(&s.bench, filesize));
}
return ERROR_OK;
}
static COMMAND_HELPER(create_nand_device, const char *bank_name,
struct nand_flash_controller *controller)
{
+ struct nand_device *c;
+ struct target *target;
+ int retval;
+
+ if (CMD_ARGC < 2)
+ {
+ LOG_ERROR("missing target");
+ return ERROR_COMMAND_ARGUMENT_INVALID;
+ }
+ target = get_target(CMD_ARGV[1]);
+ if (!target) {
+ LOG_ERROR("invalid target %s", CMD_ARGV[1]);
+ return ERROR_COMMAND_ARGUMENT_INVALID;
+ }
+
if (NULL != controller->commands)
{
- int retval = register_commands(CMD_CTX, NULL,
+ retval = register_commands(CMD_CTX, NULL,
controller->commands);
if (ERROR_OK != retval)
return retval;
}
- struct nand_device *c = malloc(sizeof(struct nand_device));
+ c = malloc(sizeof(struct nand_device));
+ if (c == NULL)
+ {
+ LOG_ERROR("End of memory");
+ return ERROR_FAIL;
+ }
c->name = strdup(bank_name);
+ c->target = target;
c->controller = controller;
c->controller_priv = NULL;
c->manufacturer = NULL;
c->use_raw = 0;
c->next = NULL;
- int retval = CALL_COMMAND_HANDLER(controller->nand_device_command, c);
+ retval = CALL_COMMAND_HANDLER(controller->nand_device_command, c);
if (ERROR_OK != retval)
{
LOG_ERROR("'%s' driver rejected nand flash", controller->name);
COMMAND_HANDLER(handle_nand_device_command)
{
- if (CMD_ARGC < 1)
+ if (CMD_ARGC < 2)
{
LOG_ERROR("incomplete nand device configuration");
return ERROR_FLASH_BANK_INVALID;