]> git.sur5r.net Git - openocd/blobdiff - src/flash/ecos.c
ocd_flash_banks now returns empty list when no flash banks are configured instead...
[openocd] / src / flash / ecos.c
index 5994660ceea3fbec5603924826348a73fc0325a3..f6c2442f16c663e187ca4d022d31d376faadbbe4 100644 (file)
@@ -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 <string.h>
+
 #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;