summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorØyvind Harboe <oyvind.harboe@zylin.com>2009-12-25 21:50:41 +0100
committerØyvind Harboe <oyvind.harboe@zylin.com>2009-12-30 12:12:24 +0100
commitbd3700e89d80b2548890102da3e25012acbd3e41 (patch)
tree94d2731be6774e69e78b349a89a89d493e509293 /src
parent12618e4c6d07f6291e2e0c6d7f99a0945b1b67b3 (diff)
downloadopenocd+libswd-bd3700e89d80b2548890102da3e25012acbd3e41.tar.gz
openocd+libswd-bd3700e89d80b2548890102da3e25012acbd3e41.tar.bz2
openocd+libswd-bd3700e89d80b2548890102da3e25012acbd3e41.tar.xz
openocd+libswd-bd3700e89d80b2548890102da3e25012acbd3e41.zip
zy1000: firmware upgrade fixes for revc
Use ecos firmwareutil upgrade utilities Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Diffstat (limited to 'src')
-rw-r--r--src/jtag/zy1000/zy1000.c61
1 files changed, 45 insertions, 16 deletions
diff --git a/src/jtag/zy1000/zy1000.c b/src/jtag/zy1000/zy1000.c
index 30b9a4ba..7c5f4407 100644
--- a/src/jtag/zy1000/zy1000.c
+++ b/src/jtag/zy1000/zy1000.c
@@ -55,6 +55,11 @@
#include <time.h>
+#ifdef CYGPKG_HAL_NIOS2
+#include <cyg/hal/io.h>
+#include <cyg/firmwareutil/firmwareutil.h>
+#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 ((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;
+ if (!cyg_firmware_upgrade(NULL, firmware_info))
+ return JIM_ERR;
- return JIM_OK;
+ return JIM_OK;
}
#endif