From bd3700e89d80b2548890102da3e25012acbd3e41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Harboe?= Date: Fri, 25 Dec 2009 21:50:41 +0100 Subject: [PATCH] zy1000: firmware upgrade fixes for revc MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use ecos firmwareutil upgrade utilities Signed-off-by: Øyvind Harboe --- src/jtag/zy1000/zy1000.c | 61 +++++++++++++++++++++++++++++----------- 1 file changed, 45 insertions(+), 16 deletions(-) diff --git a/src/jtag/zy1000/zy1000.c b/src/jtag/zy1000/zy1000.c index 30b9a4ba4..7c5f44075 100644 --- a/src/jtag/zy1000/zy1000.c +++ b/src/jtag/zy1000/zy1000.c @@ -55,6 +55,11 @@ #include +#ifdef CYGPKG_HAL_NIOS2 +#include +#include +#endif + #define ZYLIN_VERSION GIT_ZY1000_VERSION #define ZYLIN_DATE __DATE__ #define ZYLIN_TIME __TIME__ @@ -322,33 +327,57 @@ static int jim_zy1000_version(Jim_Interp *interp, int argc, Jim_Obj *const *argv #ifdef CYGPKG_HAL_NIOS2 + + +struct info_forward +{ + void *data; + struct cyg_upgrade_info *upgraded_file; +}; + +static void report_info(void *data, const char * format, va_list args) +{ + char *s = alloc_vprintf(format, args); + LOG_USER_N("%s", s); + free(s); +} + +struct cyg_upgrade_info firmware_info = +{ + (cyg_uint8 *)0x84000000, + "/ram/firmware.phi", + "Firmware", + 0x0300000, + 0x1f00000 - + 0x0300000, + "ZylinNiosFirmware\n", + report_info, +}; + static int jim_zy1000_writefirmware(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { if (argc != 2) return JIM_ERR; int length; - int stat; const char *str = Jim_GetString(argv[1], &length); - /* BUG!!!! skip header! */ - void *firmware_address=0x4000000; - int firmware_length=0x100000; - - if (length>firmware_length) + /* */ + int tmpFile; + if ((tmpFile = open(firmware_info.file, O_RDWR | O_CREAT | O_TRUNC)) <= 0) + { + return JIM_ERR; + } + bool success; + success = write(tmpFile, str, length) == length; + close(tmpFile); + if (!success) return JIM_ERR; - void *err_addr; + if (!cyg_firmware_upgrade(NULL, firmware_info)) + return JIM_ERR; - if ((stat = flash_erase((void *)firmware_address, firmware_length, (void **)&err_addr)) != 0) - { - return JIM_ERR; - } - - if ((stat = flash_program(firmware_address, str, length, (void **)&err_addr)) != 0) - return JIM_ERR; - - return JIM_OK; + return JIM_OK; } #endif