Andreas Fritiofson <andreas.fritiofson@gmail.com> UTF8 fixes
[fw/openocd] / src / flash / ecos.c
index f6c2442f16c663e187ca4d022d31d376faadbbe4..76859df5db90046fbd8894bf965f3d8b96cde1cb 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2007,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  *
 #include "config.h"
 #endif
 
-#include <string.h>
-
-#include "replacements.h"
-
-
-#include "flash.h"
-
-#include "target.h"
-
 #include "flash.h"
-#include "target.h"
-#include "log.h"
-#include "binarybuffer.h"
-#include "../target/embeddedice.h"
-#include "types.h"
-
-
-
-int ecosflash_register_commands(struct command_context_s *cmd_ctx);
-int ecosflash_flash_bank_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc, struct flash_bank_s *bank);
-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_protect_check(struct flash_bank_s *bank);
-int ecosflash_info(struct flash_bank_s *bank, char *buf, int buf_size);
-
-u32 ecosflash_get_flash_status(flash_bank_t *bank);
-void ecosflash_set_flash_mode(flash_bank_t *bank,int mode);
-u32 ecosflash_wait_status_busy(flash_bank_t *bank, u32 waitbits, int timeout);
-int ecosflash_handle_gpnvm_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
+#include "embeddedice.h"
+#include "image.h"
+
+
+static int ecosflash_register_commands(struct command_context_s *cmd_ctx);
+static int ecosflash_flash_bank_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc, struct flash_bank_s *bank);
+static int ecosflash_erase(struct flash_bank_s *bank, int first, int last);
+static int ecosflash_protect(struct flash_bank_s *bank, int set, int first, int last);
+static int ecosflash_write(struct flash_bank_s *bank, uint8_t *buffer, uint32_t offset, uint32_t count);
+static int ecosflash_probe(struct flash_bank_s *bank);
+static int ecosflash_protect_check(struct flash_bank_s *bank);
+static int ecosflash_info(struct flash_bank_s *bank, char *buf, int buf_size);
+
+#if 0
+static uint32_t ecosflash_get_flash_status(flash_bank_t *bank);
+static void ecosflash_set_flash_mode(flash_bank_t *bank,int mode);
+static uint32_t ecosflash_wait_status_busy(flash_bank_t *bank, uint32_t waitbits, int timeout);
+static int ecosflash_handle_gpnvm_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
+#endif
 
 flash_driver_t ecosflash_flash =
 {
@@ -74,10 +63,10 @@ typedef struct ecosflash_flash_bank_s
        working_area_t *write_algorithm;
        working_area_t *erase_check_algorithm;
        char *driverPath;
-       u32 start_address;
+       uint32_t start_address;
 } ecosflash_flash_bank_t;
 
-static const int sectorSize=0x10000;
+static const int sectorSize = 0x10000;
 
 char *
 flash_errmsg(int err);
@@ -99,73 +88,72 @@ flash_errmsg(int err);
 #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 *
 flash_errmsg(int err)
 {
-    switch (err) {
-    case FLASH_ERR_OK:
-        return "No error - operation complete";
-    case FLASH_ERR_ERASE_SUSPEND:
-        return "Device is in erase suspend state";
-    case FLASH_ERR_PROGRAM_SUSPEND:
-        return "Device is in program suspend state";
-    case FLASH_ERR_INVALID:
-        return "Invalid FLASH address";
-    case FLASH_ERR_ERASE:
-        return "Error trying to erase";
-    case FLASH_ERR_LOCK:
-        return "Error trying to lock/unlock";
-    case FLASH_ERR_PROGRAM:
-        return "Error trying to program";
-    case FLASH_ERR_PROTOCOL:
-        return "Generic error";
-    case FLASH_ERR_PROTECT:
-        return "Device/region is write-protected";
-    case FLASH_ERR_NOT_INIT:
-        return "FLASH sub-system not initialized";
-    case FLASH_ERR_DRV_VERIFY:
-        return "Data verify failed after operation";
-    case FLASH_ERR_DRV_TIMEOUT:
-        return "Driver timed out waiting for device";
-    case FLASH_ERR_DRV_WRONG_PART:
-        return "Driver does not support device";
-    case FLASH_ERR_LOW_VOLTAGE:
-        return "Device reports low voltage";
-    default:
-        return "Unknown error";
-    }
+       switch (err) {
+       case FLASH_ERR_OK:
+               return "No error - operation complete";
+       case FLASH_ERR_ERASE_SUSPEND:
+               return "Device is in erase suspend state";
+       case FLASH_ERR_PROGRAM_SUSPEND:
+               return "Device is in program suspend state";
+       case FLASH_ERR_INVALID:
+               return "Invalid FLASH address";
+       case FLASH_ERR_ERASE:
+               return "Error trying to erase";
+       case FLASH_ERR_LOCK:
+               return "Error trying to lock/unlock";
+       case FLASH_ERR_PROGRAM:
+               return "Error trying to program";
+       case FLASH_ERR_PROTOCOL:
+               return "Generic error";
+       case FLASH_ERR_PROTECT:
+               return "Device/region is write-protected";
+       case FLASH_ERR_NOT_INIT:
+               return "FLASH sub-system not initialized";
+       case FLASH_ERR_DRV_VERIFY:
+               return "Data verify failed after operation";
+       case FLASH_ERR_DRV_TIMEOUT:
+               return "Driver timed out waiting for device";
+       case FLASH_ERR_DRV_WRONG_PART:
+               return "Driver does not support device";
+       case FLASH_ERR_LOW_VOLTAGE:
+               return "Device reports low voltage";
+       default:
+               return "Unknown error";
+       }
 }
 #endif
 
 /* flash bank ecosflash <base> <size> <chip_width> <bus_width> <target#> <driverPath>
  */
-int ecosflash_flash_bank_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc, struct flash_bank_s *bank)
+static int ecosflash_flash_bank_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc, struct flash_bank_s *bank)
 {
        ecosflash_flash_bank_t *info;
-       
+
        if (argc < 7)
        {
                LOG_WARNING("incomplete flash_bank ecosflash configuration");
                return ERROR_FLASH_BANK_INVALID;
        }
-       
+
        info = malloc(sizeof(ecosflash_flash_bank_t));
-       if(info == NULL)
+       if (info == NULL)
        {
                LOG_ERROR("no memory for flash bank info");
                exit(-1);
        }
        bank->driver_priv = info;
-       info->driverPath=strdup(args[6]);
+       info->driverPath = strdup(args[6]);
 
-       /* eCos flash sector sizes are not exposed to OpenOCD, use 0x10000 as 
+       /* 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;
+       uint32_t offset = 0;
+       bank->num_sectors = bank->size/sectorSize;
        bank->sectors = malloc(sizeof(flash_sector_t) * bank->num_sectors);
        for (i = 0; i < bank->num_sectors; i++)
        {
@@ -175,35 +163,34 @@ int ecosflash_flash_bank_command(struct command_context_s *cmd_ctx, char *cmd, c
                bank->sectors[i].is_erased = -1;
                bank->sectors[i].is_protected = 0;
        }
-       
-       info->target = get_target_by_num(strtoul(args[5], NULL, 0));
+
+       info->target = get_target(args[5]);
        if (info->target == NULL)
        {
-               LOG_ERROR("no target '%i' configured", (int)strtoul(args[5], NULL, 0));
-               exit(-1);
+               LOG_ERROR("target '%s' not defined", args[5]);
+               return ERROR_FAIL;
        }
        return ERROR_OK;
 }
 
-
-int loadDriver(ecosflash_flash_bank_t *info)
+static int loadDriver(ecosflash_flash_bank_t *info)
 {
-       u32 buf_cnt;
-       u32 image_size;
-       image_t image;  
-       
+       uint32_t buf_cnt;
+       uint32_t image_size;
+       image_t image;
+
        image.base_address_set = 0;
        image.start_address_set = 0;
-       target_t *target=info->target;
+       target_t *target = info->target;
        int retval;
-       
-       if ((retval=image_open(&image, info->driverPath, NULL)) != ERROR_OK)
+
+       if ((retval = image_open(&image, info->driverPath, NULL)) != ERROR_OK)
        {
                return retval;
        }
-       
-       info->start_address=image.start_address;
-       
+
+       info->start_address = image.start_address;
+
        image_size = 0x0;
        int i;
        for (i = 0; i < image.num_sections; i++)
@@ -218,8 +205,8 @@ int loadDriver(ecosflash_flash_bank_t *info)
                }
                target_write_buffer(target, image.sections[i].base_address, buf_cnt, buffer);
                image_size += buf_cnt;
-               LOG_DEBUG("%u byte written at address 0x%8.8x", buf_cnt, image.sections[i].base_address);
-               
+               LOG_DEBUG("%" PRIu32 " byte written at address 0x%8.8" PRIx32 "", buf_cnt, image.sections[i].base_address);
+
                free(buffer);
        }
 
@@ -228,166 +215,162 @@ int loadDriver(ecosflash_flash_bank_t *info)
        return ERROR_OK;
 }
 
+static int const OFFSET_ERASE = 0x0;
+static int const OFFSET_ERASE_SIZE = 0x8;
+static int const OFFSET_FLASH = 0xc;
+static int const OFFSET_FLASH_SIZE = 0x8;
+static int const OFFSET_GET_WORKAREA = 0x18;
+static int const OFFSET_GET_WORKAREA_SIZE = 0x4;
 
-static int const OFFSET_ERASE=0x0;
-static int const OFFSET_ERASE_SIZE=0x8;
-static int const OFFSET_FLASH=0xc;
-static int const OFFSET_FLASH_SIZE=0x8;
-static int const OFFSET_GET_WORKAREA=0x18;
-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,
+static int runCode(ecosflash_flash_bank_t *info,
+               uint32_t codeStart, uint32_t codeStop, uint32_t r0, uint32_t r1, uint32_t r2,
+               uint32_t *result,
                /* timeout in ms */
                int timeout)
 {
-       target_t *target=info->target;
+       target_t *target = info->target;
 
        reg_param_t reg_params[3];
        armv4_5_algorithm_t armv4_5_info;
        armv4_5_info.common_magic = ARMV4_5_COMMON_MAGIC;
        armv4_5_info.core_mode = ARMV4_5_MODE_SVC;
        armv4_5_info.core_state = ARMV4_5_STATE_ARM;
-       
+
        init_reg_param(&reg_params[0], "r0", 32, PARAM_IN_OUT);
        init_reg_param(&reg_params[1], "r1", 32, PARAM_OUT);
        init_reg_param(&reg_params[2], "r2", 32, PARAM_OUT);
-       
+
        buf_set_u32(reg_params[0].value, 0, 32, r0);
        buf_set_u32(reg_params[1].value, 0, 32, r1);
        buf_set_u32(reg_params[2].value, 0, 32, r2);
-       
+
        int retval;
-       if ((retval = target->type->run_algorithm(target, 0, NULL, 3, reg_params,
+       if ((retval = target_run_algorithm(target, 0, NULL, 3, reg_params,
                        codeStart,
-                       codeStop, timeout, 
+                       codeStop, timeout,
                        &armv4_5_info)) != ERROR_OK)
        {
                LOG_ERROR("error executing eCos flash algorithm");
                return retval;
        }
-       
-       *result=buf_get_u32(reg_params[0].value, 0, 32);
-       
+
+       *result = buf_get_u32(reg_params[0].value, 0, 32);
+
        destroy_reg_param(&reg_params[0]);
        destroy_reg_param(&reg_params[1]);
        destroy_reg_param(&reg_params[2]);
-       
+
        return ERROR_OK;
 }
 
-int eCosBoard_erase(ecosflash_flash_bank_t *info, u32 address, u32 len)
+static int eCosBoard_erase(ecosflash_flash_bank_t *info, uint32_t address, uint32_t len)
 {
        int retval;
-       int timeout = (len / 20480 + 1) * 1000; /*asume 20 KB/s*/ 
+       int timeout = (len / 20480 + 1) * 1000; /*asume 20 KB/s*/
 
-       retval=loadDriver(info);
-       if (retval!=ERROR_OK)
+       retval = loadDriver(info);
+       if (retval != ERROR_OK)
                return retval;
-       
-       u32 flashErr;
-       retval=runCode(info, 
-                       info->start_address+OFFSET_ERASE,
-                       info->start_address+OFFSET_ERASE+OFFSET_ERASE_SIZE,
+
+       uint32_t flashErr;
+       retval = runCode(info,
+                       info->start_address + OFFSET_ERASE,
+                       info->start_address + OFFSET_ERASE + OFFSET_ERASE_SIZE,
                        address,
                        len,
                        0,
                        &flashErr,
                        timeout
-                       );
-       if (retval!=ERROR_OK)
+);
+       if (retval != ERROR_OK)
                return retval;
-       
+
        if (flashErr != 0x0)
        {
-               LOG_ERROR("Flash erase failed with %d (%s)\n", flashErr, flash_errmsg(flashErr));
+               LOG_ERROR("Flash erase failed with %d (%s)\n", (int)flashErr, flash_errmsg(flashErr));
                return ERROR_FAIL;
        }
 
        return ERROR_OK;
 }
 
-int eCosBoard_flash(ecosflash_flash_bank_t *info, void *data, u32 address, u32 len)
+static int eCosBoard_flash(ecosflash_flash_bank_t *info, void *data, uint32_t address, uint32_t len)
 {
-       target_t *target=info->target;
-       const int chunk=8192;
-       int retval=ERROR_OK;
+       target_t *target = info->target;
+       const int chunk = 8192;
+       int retval = ERROR_OK;
        int timeout = (chunk / 20480 + 1) * 1000; /*asume 20 KB/s + 1 second*/
-       
-       retval=loadDriver(info);
-       if (retval!=ERROR_OK)
+
+       retval = loadDriver(info);
+       if (retval != ERROR_OK)
                return retval;
-       
-       u32 buffer;
-       retval=runCode(info, 
-                       info->start_address+OFFSET_GET_WORKAREA,
-                       info->start_address+OFFSET_GET_WORKAREA+OFFSET_GET_WORKAREA_SIZE,
+
+       uint32_t buffer;
+       retval = runCode(info,
+                       info->start_address + OFFSET_GET_WORKAREA,
+                       info->start_address + OFFSET_GET_WORKAREA + OFFSET_GET_WORKAREA_SIZE,
                        0,
                        0,
                        0,
                        &buffer,
                        1000);
-       if (retval!=ERROR_OK)
+       if (retval != ERROR_OK)
                return retval;
-       
-       
-       int i;
-    for (i=0; i<len; i+=chunk)
-    {
-               int t=len-i;
-               if (t>chunk)
+
+
+       uint32_t i;
+       for (i = 0; i < len; i += chunk)
+       {
+               int t = len-i;
+               if (t > chunk)
                {
-                       t=chunk;
+                       t = chunk;
                }
-               
+
                int retval;
-       retval=target_write_buffer(target, buffer, t, ((u8 *)data)+i);
-       if (retval != ERROR_OK)
-               return retval;
-       
-       u32 flashErr;
-       retval=runCode(info, 
-                       info->start_address+OFFSET_FLASH,
-                       info->start_address+OFFSET_FLASH+OFFSET_FLASH_SIZE,
-                       buffer,
-                       address+i,
-                       t,
-                       &flashErr,
-                       timeout);
-       if (retval != ERROR_OK)
-               return retval;
+               retval = target_write_buffer(target, buffer, t, ((uint8_t *)data) + i);
+               if (retval != ERROR_OK)
+                       return retval;
+
+               uint32_t flashErr;
+               retval = runCode(info,
+                               info->start_address + OFFSET_FLASH,
+                               info->start_address + OFFSET_FLASH + OFFSET_FLASH_SIZE,
+                               buffer,
+                               address + i,
+                               t,
+                               &flashErr,
+                               timeout);
+               if (retval != ERROR_OK)
+                       return retval;
 
                if (flashErr != 0x0)
                {
-                       LOG_ERROR("Flash prog failed with %d (%s)\n", flashErr, flash_errmsg(flashErr));
+                       LOG_ERROR("Flash prog failed with %d (%s)\n", (int)flashErr, flash_errmsg(flashErr));
                        return ERROR_FAIL;
                }
-    }
+       }
        return ERROR_OK;
 }
 
-
-int ecosflash_probe(struct flash_bank_s *bank)
+static int ecosflash_probe(struct flash_bank_s *bank)
 {
        return ERROR_OK;
 }
 
-
-int ecosflash_register_commands(struct command_context_s *cmd_ctx)
+static int ecosflash_register_commands(struct command_context_s *cmd_ctx)
 {
        register_command(cmd_ctx, NULL, "ecosflash", NULL, COMMAND_ANY, NULL);
-       
+
        return ERROR_OK;
 }
 
-/*
-static void command(flash_bank_t *bank, u8 cmd, u8 *cmd_buf)
+#if 0
+static void command(flash_bank_t *bank, uint8_t cmd, uint8_t *cmd_buf)
 {
        ecosflash_flash_bank_t *info = bank->driver_priv;
        int i;
-       
+
        if (info->target->endianness == TARGET_LITTLE_ENDIAN)
        {
                for (i = bank->bus_width; i > 0; i--)
@@ -403,12 +386,13 @@ static void command(flash_bank_t *bank, u8 cmd, u8 *cmd_buf)
                }
        }
 }
-*/
+#endif
 
-u32 ecosflash_address(struct flash_bank_s *bank, u32 address)
+#if 0
+static uint32_t ecosflash_address(struct flash_bank_s *bank, uint32_t address)
 {
-       u32 retval = 0;
-       switch(bank->bus_width)
+       uint32_t retval = 0;
+       switch (bank->bus_width)
        {
                case 4:
                        retval = address & 0xfffffffc;
@@ -417,65 +401,60 @@ u32 ecosflash_address(struct flash_bank_s *bank, u32 address)
                case 1:
                        retval = address;
        }
-       
-       return retval + bank->base;
-} 
 
+       return retval + bank->base;
+}
+#endif
 
-int ecosflash_erase(struct flash_bank_s *bank, int first, int last)
+static int ecosflash_erase(struct flash_bank_s *bank, int first, int last)
 {
-       struct flash_bank_s *c=bank;
+       struct flash_bank_s *c = bank;
        ecosflash_flash_bank_t *info = bank->driver_priv;
-       return eCosBoard_erase(info, c->base+first*sectorSize, sectorSize*(last-first+1)); 
+       return eCosBoard_erase(info, c->base + first*sectorSize, sectorSize*(last-first + 1));
 }
 
-int ecosflash_protect(struct flash_bank_s *bank, int set, int first, int last)
+static int ecosflash_protect(struct flash_bank_s *bank, int set, int first, int last)
 {
        return ERROR_OK;
 }
 
-
-int ecosflash_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 count)
+static int ecosflash_write(struct flash_bank_s *bank, uint8_t *buffer, uint32_t offset, uint32_t count)
 {
        ecosflash_flash_bank_t *info = bank->driver_priv;
-       struct flash_bank_s *c=bank;
-       return eCosBoard_flash(info, buffer, c->base+offset, count);
+       struct flash_bank_s *c = bank;
+       return eCosBoard_flash(info, buffer, c->base + offset, count);
 }
 
-
-int ecosflash_protect_check(struct flash_bank_s *bank)
+static int ecosflash_protect_check(struct flash_bank_s *bank)
 {
        return ERROR_OK;
 }
 
-int ecosflash_info(struct flash_bank_s *bank, char *buf, int buf_size)
+static int ecosflash_info(struct flash_bank_s *bank, char *buf, int buf_size)
 {
        ecosflash_flash_bank_t *info = bank->driver_priv;
        snprintf(buf, buf_size, "eCos flash driver: %s", info->driverPath);
        return ERROR_OK;
 }
 
-
-u32 ecosflash_get_flash_status(flash_bank_t *bank)
+#if 0
+static uint32_t ecosflash_get_flash_status(flash_bank_t *bank)
 {
        return ERROR_OK;
 }
 
-void ecosflash_set_flash_mode(flash_bank_t *bank,int mode)
+static void ecosflash_set_flash_mode(flash_bank_t *bank,int mode)
 {
-       
+
 }
 
-u32 ecosflash_wait_status_busy(flash_bank_t *bank, u32 waitbits, int timeout)
+static uint32_t ecosflash_wait_status_busy(flash_bank_t *bank, uint32_t waitbits, int timeout)
 {
        return ERROR_OK;
 }
 
-int ecosflash_handle_gpnvm_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
+static int ecosflash_handle_gpnvm_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
 {
        return ERROR_OK;
 }
-
-
-
-
+#endif