X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Fjtag%2Fzy1000%2Fzy1000.c;h=28515c77bee1010bff32d90650087328f6b11f4a;hp=9a5d2e784a4b59dc1a239884463d709ced2a61fb;hb=f382ebae1050fe26f25d13fd558277d8a032c778;hpb=d7a0dfa4dc28c60c3137b9f9acf3fcc046730f0f diff --git a/src/jtag/zy1000/zy1000.c b/src/jtag/zy1000/zy1000.c index 9a5d2e784a..28515c77be 100644 --- a/src/jtag/zy1000/zy1000.c +++ b/src/jtag/zy1000/zy1000.c @@ -28,6 +28,8 @@ #include // low level i/o #include +#include + #define ZYLIN_VERSION GIT_ZY1000_VERSION #define ZYLIN_DATE __DATE__ #define ZYLIN_TIME __TIME__ @@ -44,9 +46,6 @@ int zy1000_register_commands(struct command_context *cmd_ctx); int zy1000_init(void); int zy1000_quit(void); -/* interface commands */ -int zy1000_handle_zy1000_port_command(struct command_context *cmd_ctx, char *cmd, char **args, int argc); - static int zy1000_khz(int khz, int *jtag_speed) { if (khz == 0) @@ -225,31 +224,23 @@ static void setPower(bool power) } } -int handle_power_command(struct command_context *cmd_ctx, char *cmd, char **args, int argc) +COMMAND_HANDLER(handle_power_command) { - if (argc > 1) + switch (CMD_ARGC) { - return ERROR_INVALID_ARGUMENTS; + case 1: { + bool enable; + COMMAND_PARSE_ON_OFF(CMD_ARGV[0], enable); + setPower(enable); + // fall through } - - if (argc == 1) - { - if (strcmp(args[0], "on") == 0) - { - setPower(1); - } - else if (strcmp(args[0], "off") == 0) - { - setPower(0); - } else - { - command_print(cmd_ctx, "arg is \"on\" or \"off\""); - return ERROR_INVALID_ARGUMENTS; - } + case 0: + command_print(cmd_ctx, "Target power %s", savePower ? "on" : "off"); + break; + default: + return ERROR_INVALID_ARGUMENTS; } - command_print(cmd_ctx, "Target power %s", savePower ? "on" : "off"); - return ERROR_OK; } @@ -257,9 +248,8 @@ int handle_power_command(struct command_context *cmd_ctx, char *cmd, char **args /* Give TELNET a way to find out what version this is */ static int jim_zy1000_version(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { - if ((argc < 1) || (argc > 2)) + if ((argc < 1) || (argc > 3)) return JIM_ERR; - char buff[128]; const char *version_str = NULL; if (argc == 1) @@ -268,6 +258,9 @@ static int jim_zy1000_version(Jim_Interp *interp, int argc, Jim_Obj *const *argv } else { const char *str = Jim_GetString(argv[1], NULL); + const char *str2 = NULL; + if (argc > 2) + str2 = Jim_GetString(argv[2], NULL); if (strcmp("openocd", str) == 0) { version_str = ZYLIN_OPENOCD; @@ -292,6 +285,29 @@ static int jim_zy1000_version(Jim_Interp *interp, int argc, Jim_Obj *const *argv version_str="b"; #endif } +#ifdef CYGPKG_HAL_NIOS2 + else if (strcmp("fpga", str) == 0) + { + + /* return a list of 32 bit integers to describe the expected + * and actual FPGA + */ + static char *fpga_id = "0x12345678 0x12345678 0x12345678 0x12345678"; + cyg_uint32 id, timestamp; + HAL_READ_UINT32(SYSID_BASE, id); + HAL_READ_UINT32(SYSID_BASE+4, timestamp); + sprintf(fpga_id, "0x%08x 0x%08x 0x%08x 0x%08x", id, timestamp, SYSID_ID, SYSID_TIMESTAMP); + version_str = fpga_id; + if ((argc>2) && (strcmp("time", str2) == 0)) + { + time_t last_mod = timestamp; + char * t = ctime (&last_mod) ; + t[strlen(t)-1] = 0; + version_str = t; + } + } +#endif + else { return JIM_ERR; @@ -509,7 +525,14 @@ static __inline void scanFields(int num_fields, const struct scan_field *fields, } } /* mask away unused bits for easier debugging */ - value&=~(((uint32_t)0xffffffff) << k); + if (k < 32) + { + value&=~(((uint32_t)0xffffffff) << k); + } else + { + /* Shifting by >= 32 is not defined by the C standard + * and will in fact shift by &0x1f bits on nios */ + } shiftValueInner(shiftState, pause_state, k, value);