From 92db0c58b02d2a2cbc90a6e04a50ab97cb3e59a1 Mon Sep 17 00:00:00 2001
From: oharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Date: Fri, 26 Jun 2009 12:57:56 +0000
Subject: [PATCH] zy1000 rev C work

git-svn-id: svn://svn.berlios.de/openocd/trunk@2405 b42882b7-edfa-0310-969c-e2dbd0fdcd60
---
 src/jtag/zy1000/zy1000.c | 44 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)

diff --git a/src/jtag/zy1000/zy1000.c b/src/jtag/zy1000/zy1000.c
index 33947332b..495ff48ec 100644
--- a/src/jtag/zy1000/zy1000.c
+++ b/src/jtag/zy1000/zy1000.c
@@ -283,6 +283,14 @@ static int jim_zy1000_version(Jim_Interp *interp, int argc, Jim_Obj *const *argv
 		{
 			version_str = ZYLIN_DATE;
 		}
+		else if (strcmp("pcb", str) == 0)
+		{
+#ifdef CYGPKG_HAL_NIOS2
+			version_str="c";
+#else
+			version_str="b";
+#endif
+		}
 		else
 		{
 			return JIM_ERR;
@@ -295,6 +303,37 @@ static int jim_zy1000_version(Jim_Interp *interp, int argc, Jim_Obj *const *argv
 }
 
 
+#ifdef CYGPKG_HAL_NIOS2
+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)
+		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;
+
+    return JIM_OK;
+}
+#endif
+
 static int
 zylinjtag_Jim_Command_powerstatus(Jim_Interp *interp,
 								   int argc,
@@ -324,6 +363,11 @@ int zy1000_register_commands(struct command_context_s *cmd_ctx)
 
 	Jim_CreateCommand(interp, "powerstatus", zylinjtag_Jim_Command_powerstatus, NULL, NULL);
 
+#ifdef CYGPKG_HAL_NIOS2
+	Jim_CreateCommand(interp, "updatezy1000firmware", jim_zy1000_writefirmware, NULL, NULL);
+#endif
+
+
 	return ERROR_OK;
 }
 
-- 
GitLab