X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Fjtag%2Fzy1000%2Fzy1000.c;h=5ddc7c5ce0768000f7a5a2024bd939310449229a;hb=96d2b61c049773c02a41b220a0104d24c75fd284;hp=5ea72a76bd8d0cd21c0b654d797f444f6417cf2d;hpb=833e7f5248778bcb31b4db1a1b91160995415203;p=openocd.git diff --git a/src/jtag/zy1000/zy1000.c b/src/jtag/zy1000/zy1000.c index 5ea72a76bd..5ddc7c5ce0 100644 --- a/src/jtag/zy1000/zy1000.c +++ b/src/jtag/zy1000/zy1000.c @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2007-2008 by Øyvind Harboe * + * Copyright (C) 2007-2009 by Øyvind Harboe * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -16,13 +16,38 @@ * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ + +/* This file supports the zy1000 debugger: http://www.zylin.com/zy1000.html + * + * The zy1000 is a standalone debugger that has a web interface and + * requires no drivers on the developer host as all communication + * is via TCP/IP. The zy1000 gets it performance(~400-700kBytes/s + * DCC downloads @ 16MHz target) as it has an FPGA to hardware + * accelerate the JTAG commands, while offering *very* low latency + * between OpenOCD and the FPGA registers. + * + * The disadvantage of the zy1000 is that it has a feeble CPU compared to + * a PC(ca. 50-500 DMIPS depending on how one counts it), whereas a PC + * is on the order of 10000 DMIPS(i.e. at a factor of 20-200). + * + * The zy1000 revc hardware is using an Altera Nios CPU, whereas the + * revb is using ARM7 + Xilinx. + * + * See Zylin web pages or contact Zylin for more information. + * + * The reason this code is in OpenOCD rather than OpenOCD linked with the + * ZY1000 code is that OpenOCD is the long road towards getting + * libopenocd into place. libopenocd will support both low performance, + * low latency systems(embedded) and high performance high latency + * systems(PCs). + */ #ifdef HAVE_CONFIG_H #include "config.h" #endif -#include "embeddedice.h" -#include "minidriver.h" -#include "interface.h" +#include +#include +#include #include "zy1000_version.h" #include // low level i/o @@ -36,15 +61,6 @@ #define ZYLIN_OPENOCD GIT_OPENOCD_VERSION #define ZYLIN_OPENOCD_VERSION "ZY1000 " ZYLIN_VERSION " " ZYLIN_DATE -/* low level command set - */ -void zy1000_reset(int trst, int srst); - - -int zy1000_speed(int speed); -int zy1000_register_commands(struct command_context *cmd_ctx); -int zy1000_init(void); -int zy1000_quit(void); static int zy1000_khz(int khz, int *jtag_speed) { @@ -108,21 +124,6 @@ static int zy1000_power_dropout(int *dropout) return ERROR_OK; } - -struct jtag_interface zy1000_interface = -{ - .name = "ZY1000", - .execute_queue = NULL, - .speed = zy1000_speed, - .register_commands = zy1000_register_commands, - .init = zy1000_init, - .quit = zy1000_quit, - .khz = zy1000_khz, - .speed_div = zy1000_speed_div, - .power_dropout = zy1000_power_dropout, - .srst_asserted = zy1000_srst_asserted, -}; - void zy1000_reset(int trst, int srst) { LOG_DEBUG("zy1000 trst=%d, srst=%d", trst, srst); @@ -370,24 +371,6 @@ zylinjtag_Jim_Command_powerstatus(Jim_Interp *interp, return JIM_OK; } -int zy1000_register_commands(struct command_context *cmd_ctx) -{ - COMMAND_REGISTER(cmd_ctx, NULL, "power", handle_power_command, COMMAND_ANY, - "power - turn power switch to target on/off. No arguments - print status."); - - Jim_CreateCommand(interp, "zy1000_version", jim_zy1000_version, NULL, NULL); - - - 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; -} - @@ -817,3 +800,50 @@ void embeddedice_write_dcc(struct jtag_tap *tap, int reg_addr, uint8_t *buffer, } +static const struct command_registration zy1000_commands[] = { + { + .name = "power", + .handler = &handle_power_command, + .mode = COMMAND_ANY, + .help = "turn power switch to target on/off. No arguments - print status.", + .usage = "power ", + }, + { + .name = "zy1000_version", + .mode = COMMAND_ANY, + .jim_handler = &jim_zy1000_version, + .help = "print version info for zy1000", + }, + { + .name = "powerstatus", + .mode = COMMAND_ANY, + .jim_handler = & zylinjtag_Jim_Command_powerstatus, + .help = "print power status of target", + }, +#ifdef CYGPKG_HAL_NIOS2 + { + .name = "updatezy1000firmware", + .mode = COMMAND_ANY, + .jim_handler = &jim_zy1000_writefirmware, + .help = "writes firmware to flash", + }, +#endif + COMMAND_REGISTRATION_DONE +}; + + + +struct jtag_interface zy1000_interface = +{ + .name = "ZY1000", + .execute_queue = NULL, + .speed = zy1000_speed, + .commands = zy1000_commands, + .init = zy1000_init, + .quit = zy1000_quit, + .khz = zy1000_khz, + .speed_div = zy1000_speed_div, + .power_dropout = zy1000_power_dropout, + .srst_asserted = zy1000_srst_asserted, +}; +