X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Fflash%2Fecos.c;h=f6c2442f16c663e187ca4d022d31d376faadbbe4;hp=5994660ceea3fbec5603924826348a73fc0325a3;hb=68c598e88d5e09728ea845a81ab279c615bbaf0f;hpb=9e5a6679cac36667e51f24a6bd5670396cd06ed6 diff --git a/src/flash/ecos.c b/src/flash/ecos.c index 5994660cee..f6c2442f16 100644 --- a/src/flash/ecos.c +++ b/src/flash/ecos.c @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2008 Øyvind Harboe * + * Copyright (C) 2007,2008 Øyvind Harboe * * oyvind.harboe@zylin.com * * * * This program is free software; you can redistribute it and/or modify * @@ -21,6 +21,8 @@ #include "config.h" #endif +#include + #include "replacements.h" @@ -43,7 +45,6 @@ int ecosflash_erase(struct flash_bank_s *bank, int first, int last); int ecosflash_protect(struct flash_bank_s *bank, int set, int first, int last); int ecosflash_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 count); int ecosflash_probe(struct flash_bank_s *bank); -int ecosflash_erase_check(struct flash_bank_s *bank); int ecosflash_protect_check(struct flash_bank_s *bank); int ecosflash_info(struct flash_bank_s *bank, char *buf, int buf_size); @@ -62,7 +63,7 @@ flash_driver_t ecosflash_flash = .write = ecosflash_write, .probe = ecosflash_probe, .auto_probe = ecosflash_probe, - .erase_check = ecosflash_erase_check, + .erase_check = default_flash_blank_check, .protect_check = ecosflash_protect_check, .info = ecosflash_info }; @@ -82,21 +83,21 @@ char * flash_errmsg(int err); #ifndef __ECOS -#define FLASH_ERR_OK 0x00 // No error - operation complete -#define FLASH_ERR_INVALID 0x01 // Invalid FLASH address -#define FLASH_ERR_ERASE 0x02 // Error trying to erase -#define FLASH_ERR_LOCK 0x03 // Error trying to lock/unlock -#define FLASH_ERR_PROGRAM 0x04 // Error trying to program -#define FLASH_ERR_PROTOCOL 0x05 // Generic error -#define FLASH_ERR_PROTECT 0x06 // Device/region is write-protected -#define FLASH_ERR_NOT_INIT 0x07 // FLASH info not yet initialized -#define FLASH_ERR_HWR 0x08 // Hardware (configuration?) problem -#define FLASH_ERR_ERASE_SUSPEND 0x09 // Device is in erase suspend mode -#define FLASH_ERR_PROGRAM_SUSPEND 0x0a // Device is in in program suspend mode -#define FLASH_ERR_DRV_VERIFY 0x0b // Driver failed to verify data -#define FLASH_ERR_DRV_TIMEOUT 0x0c // Driver timed out waiting for device -#define FLASH_ERR_DRV_WRONG_PART 0x0d // Driver does not support device -#define FLASH_ERR_LOW_VOLTAGE 0x0e // Not enough juice to complete job +#define FLASH_ERR_OK 0x00 /* No error - operation complete */ +#define FLASH_ERR_INVALID 0x01 /* Invalid FLASH address */ +#define FLASH_ERR_ERASE 0x02 /* Error trying to erase */ +#define FLASH_ERR_LOCK 0x03 /* Error trying to lock/unlock */ +#define FLASH_ERR_PROGRAM 0x04 /* Error trying to program */ +#define FLASH_ERR_PROTOCOL 0x05 /* Generic error */ +#define FLASH_ERR_PROTECT 0x06 /* Device/region is write-protected */ +#define FLASH_ERR_NOT_INIT 0x07 /* FLASH info not yet initialized */ +#define FLASH_ERR_HWR 0x08 /* Hardware (configuration?) problem */ +#define FLASH_ERR_ERASE_SUSPEND 0x09 /* Device is in erase suspend mode */ +#define FLASH_ERR_PROGRAM_SUSPEND 0x0a /* Device is in in program suspend mode */ +#define FLASH_ERR_DRV_VERIFY 0x0b /* Driver failed to verify data */ +#define FLASH_ERR_DRV_TIMEOUT 0x0c /* Driver timed out waiting for device */ +#define FLASH_ERR_DRV_WRONG_PART 0x0d /* Driver does not support device */ +#define FLASH_ERR_LOW_VOLTAGE 0x0e /* Not enough juice to complete job */ char * @@ -145,22 +146,23 @@ int ecosflash_flash_bank_command(struct command_context_s *cmd_ctx, char *cmd, c if (argc < 7) { - WARNING("incomplete flash_bank ecosflash configuration"); + LOG_WARNING("incomplete flash_bank ecosflash configuration"); return ERROR_FLASH_BANK_INVALID; } info = malloc(sizeof(ecosflash_flash_bank_t)); if(info == NULL) { - ERROR("no memory for flash bank info"); + LOG_ERROR("no memory for flash bank info"); exit(-1); } bank->driver_priv = info; info->driverPath=strdup(args[6]); - // eCos flash sector sizes are not exposed to OpenOCD, use 0x10000 as - // a way to improve impeadance matach between OpenOCD and eCos flash - // driver + /* eCos flash sector sizes are not exposed to OpenOCD, use 0x10000 as + * a way to improve impeadance matach between OpenOCD and eCos flash + * driver. + */ int i = 0; u32 offset = 0; bank->num_sectors=bank->size/sectorSize; @@ -177,7 +179,7 @@ int ecosflash_flash_bank_command(struct command_context_s *cmd_ctx, char *cmd, c info->target = get_target_by_num(strtoul(args[5], NULL, 0)); if (info->target == NULL) { - ERROR("no target '%i' configured", (int)strtoul(args[5], NULL, 0)); + LOG_ERROR("no target '%i' configured", (int)strtoul(args[5], NULL, 0)); exit(-1); } return ERROR_OK; @@ -193,11 +195,11 @@ int loadDriver(ecosflash_flash_bank_t *info) image.base_address_set = 0; image.start_address_set = 0; target_t *target=info->target; + int retval; - if (image_open(&image, info->driverPath, NULL) != ERROR_OK) + if ((retval=image_open(&image, info->driverPath, NULL)) != ERROR_OK) { - ERROR("load_image error: %s", image.error_str); - return ERROR_FLASH_BANK_INVALID; + return retval; } info->start_address=image.start_address; @@ -210,14 +212,13 @@ int loadDriver(ecosflash_flash_bank_t *info) int retval; if ((retval = image_read_section(&image, i, 0x0, image.sections[i].size, buffer, &buf_cnt)) != ERROR_OK) { - ERROR("image_read_section failed with error code: %i", retval); free(buffer); image_close(&image); - return ERROR_FLASH_BANK_INVALID; + return retval; } target_write_buffer(target, image.sections[i].base_address, buf_cnt, buffer); image_size += buf_cnt; - DEBUG("%u byte written at address 0x%8.8x", buf_cnt, image.sections[i].base_address); + LOG_DEBUG("%u byte written at address 0x%8.8x", buf_cnt, image.sections[i].base_address); free(buffer); } @@ -239,7 +240,7 @@ static int const OFFSET_GET_WORKAREA_SIZE=0x4; int runCode(ecosflash_flash_bank_t *info, u32 codeStart, u32 codeStop, u32 r0, u32 r1, u32 r2, u32 *result, - // timeout in ms + /* timeout in ms */ int timeout) { target_t *target=info->target; @@ -264,7 +265,7 @@ int runCode(ecosflash_flash_bank_t *info, codeStop, timeout, &armv4_5_info)) != ERROR_OK) { - ERROR("error executing eCos flash algorithm"); + LOG_ERROR("error executing eCos flash algorithm"); return retval; } @@ -301,8 +302,8 @@ int eCosBoard_erase(ecosflash_flash_bank_t *info, u32 address, u32 len) if (flashErr != 0x0) { - ERROR("Flash erase failed with %d (%s)\n", flashErr, flash_errmsg(flashErr)); - return ERROR_JTAG_DEVICE_ERROR; + LOG_ERROR("Flash erase failed with %d (%s)\n", flashErr, flash_errmsg(flashErr)); + return ERROR_FAIL; } return ERROR_OK; @@ -342,7 +343,7 @@ int eCosBoard_flash(ecosflash_flash_bank_t *info, void *data, u32 address, u32 l } int retval; - retval=target_write_buffer(target, buffer, t, ((char *)data)+i); + retval=target_write_buffer(target, buffer, t, ((u8 *)data)+i); if (retval != ERROR_OK) return retval; @@ -360,8 +361,8 @@ int eCosBoard_flash(ecosflash_flash_bank_t *info, void *data, u32 address, u32 l if (flashErr != 0x0) { - ERROR("Flash prog failed with %d (%s)\n", flashErr, flash_errmsg(flashErr)); - return ERROR_JTAG_DEVICE_ERROR; + LOG_ERROR("Flash prog failed with %d (%s)\n", flashErr, flash_errmsg(flashErr)); + return ERROR_FAIL; } } return ERROR_OK; @@ -442,11 +443,6 @@ int ecosflash_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 count } -int ecosflash_erase_check(struct flash_bank_s *bank) -{ - return ERROR_OK; -} - int ecosflash_protect_check(struct flash_bank_s *bank) { return ERROR_OK;