This is an automated email from Gerrit. Franck Jullien (franck.jull...@gmail.com) just uploaded a new patch set to Gerrit, which you can find at http://openocd.zylin.com/1131
-- gerrit commit 8403b2f7b9dc9b009f693610105f87b0c103a7e1 Author: Franck Jullien <franck.jull...@gmail.com> Date: Fri Feb 1 23:09:09 2013 +0100 jtag_interface: add support_conf_speed to the struct This patch adds the bool support_conf_speed variable to the jtag_interface structure. When an interface doesn't support speed operations, this bool is set to false. adapter_init (core.c) won't check speed configuration of the selected interface when it's not needed. Moreover, when it's not needed, we can now omit adapter_khz in init scripts and we don't have to implement dummy handlers for speed_div and khz functions. Change-Id: I6eb1894385503fede542a368f297cec6565eed44 Signed-off-by: Franck Jullien <franck.jull...@gmail.com> diff --git a/src/jtag/core.c b/src/jtag/core.c index 9f1e4cf..c9903cc 100644 --- a/src/jtag/core.c +++ b/src/jtag/core.c @@ -1371,6 +1371,11 @@ int adapter_init(struct command_context *cmd_ctx) return retval; } + if (jtag->support_conf_speed == false) { + LOG_INFO("This adapter doesn't support configurable speed"); + return ERROR_OK; + } + if (CLOCK_MODE_UNSELECTED == clock_mode) { LOG_ERROR("An adapter speed is not selected in the init script." " Insert a call to adapter_khz or jtag_rclk to proceed."); diff --git a/src/jtag/drivers/amt_jtagaccel.c b/src/jtag/drivers/amt_jtagaccel.c index 5005e76..fe7d314 100644 --- a/src/jtag/drivers/amt_jtagaccel.c +++ b/src/jtag/drivers/amt_jtagaccel.c @@ -602,6 +602,7 @@ struct jtag_interface amt_jtagaccel_interface = { .init = amt_jtagaccel_init, .quit = amt_jtagaccel_quit, + .support_conf_speed = true, .speed = amt_jtagaccel_speed, .execute_queue = amt_jtagaccel_execute_queue, }; diff --git a/src/jtag/drivers/arm-jtag-ew.c b/src/jtag/drivers/arm-jtag-ew.c index 1624510..c172a5c 100644 --- a/src/jtag/drivers/arm-jtag-ew.c +++ b/src/jtag/drivers/arm-jtag-ew.c @@ -501,6 +501,7 @@ struct jtag_interface armjtagew_interface = { .commands = armjtagew_command_handlers, .transports = jtag_only, .execute_queue = armjtagew_execute_queue, + .support_conf_speed = true, .speed = armjtagew_speed, .speed_div = armjtagew_speed_div, .khz = armjtagew_khz, diff --git a/src/jtag/drivers/at91rm9200.c b/src/jtag/drivers/at91rm9200.c index 3bba368..190f58a 100644 --- a/src/jtag/drivers/at91rm9200.c +++ b/src/jtag/drivers/at91rm9200.c @@ -115,7 +115,6 @@ static int at91rm9200_read(void); static void at91rm9200_write(int tck, int tms, int tdi); static void at91rm9200_reset(int trst, int srst); -static int at91rm9200_speed(int speed); static int at91rm9200_init(void); static int at91rm9200_quit(void); @@ -163,12 +162,6 @@ static void at91rm9200_reset(int trst, int srst) pio_base[device->SRST_PIO + PIO_CODR] = device->SRST_MASK; } -static int at91rm9200_speed(int speed) -{ - - return ERROR_OK; -} - COMMAND_HANDLER(at91rm9200_handle_device_command) { if (CMD_ARGC == 0) @@ -196,7 +189,7 @@ static const struct command_registration at91rm9200_command_handlers[] = { struct jtag_interface at91rm9200_interface = { .name = "at91rm9200", .execute_queue = bitbang_execute_queue, - .speed = at91rm9200_speed, + .support_conf_speed = false, .commands = at91rm9200_command_handlers, .init = at91rm9200_init, .quit = at91rm9200_quit, diff --git a/src/jtag/drivers/buspirate.c b/src/jtag/drivers/buspirate.c index 10b5e0f..cf05ef2 100644 --- a/src/jtag/drivers/buspirate.c +++ b/src/jtag/drivers/buspirate.c @@ -426,6 +426,7 @@ static const struct command_registration buspirate_command_handlers[] = { struct jtag_interface buspirate_interface = { .name = "buspirate", .execute_queue = buspirate_execute_queue, + .support_conf_speed = true, .speed = buspirate_speed, .khz = buspirate_khz, .commands = buspirate_command_handlers, diff --git a/src/jtag/drivers/dummy.c b/src/jtag/drivers/dummy.c index be61b37..34d425d 100644 --- a/src/jtag/drivers/dummy.c +++ b/src/jtag/drivers/dummy.c @@ -153,6 +153,7 @@ struct jtag_interface dummy_interface = { .execute_queue = &bitbang_execute_queue, + .support_conf_speed = true, .speed = &dummy_speed, .khz = &dummy_khz, .speed_div = &dummy_speed_div, diff --git a/src/jtag/drivers/ep93xx.c b/src/jtag/drivers/ep93xx.c index 9781130..c7fde40 100644 --- a/src/jtag/drivers/ep93xx.c +++ b/src/jtag/drivers/ep93xx.c @@ -47,7 +47,6 @@ static int ep93xx_read(void); static void ep93xx_write(int tck, int tms, int tdi); static void ep93xx_reset(int trst, int srst); -static int ep93xx_speed(int speed); static int ep93xx_init(void); static int ep93xx_quit(void); @@ -59,7 +58,7 @@ struct jtag_interface ep93xx_interface = { .supported = DEBUG_CAP_TMS_SEQ, .execute_queue = bitbang_execute_queue, - .speed = ep93xx_speed, + .support_conf_speed = false, .init = ep93xx_init, .quit = ep93xx_quit, }; @@ -114,12 +113,6 @@ static void ep93xx_reset(int trst, int srst) nanosleep(&ep93xx_zzzz, NULL); } -static int ep93xx_speed(int speed) -{ - - return ERROR_OK; -} - static int set_gonk_mode(void) { void *syscon; diff --git a/src/jtag/drivers/ft2232.c b/src/jtag/drivers/ft2232.c index 6758dc7..13dd0dd 100644 --- a/src/jtag/drivers/ft2232.c +++ b/src/jtag/drivers/ft2232.c @@ -4269,6 +4269,7 @@ struct jtag_interface ft2232_interface = { .init = ft2232_init, .quit = ft2232_quit, + .support_conf_speed = true, .speed = ft2232_speed, .speed_div = ft2232_speed_div, .khz = ft2232_khz, diff --git a/src/jtag/drivers/ftdi.c b/src/jtag/drivers/ftdi.c index f04b390..e6bb05c 100644 --- a/src/jtag/drivers/ftdi.c +++ b/src/jtag/drivers/ftdi.c @@ -878,6 +878,7 @@ struct jtag_interface ftdi_interface = { .init = ftdi_initialize, .quit = ftdi_quit, + .support_conf_speed = true, .speed = ftdi_speed, .speed_div = ftdi_speed_div, .khz = ftdi_khz, diff --git a/src/jtag/drivers/gw16012.c b/src/jtag/drivers/gw16012.c index bf027f8..d82bd38 100644 --- a/src/jtag/drivers/gw16012.c +++ b/src/jtag/drivers/gw16012.c @@ -146,12 +146,6 @@ static void gw16012_reset(int trst, int srst) gw16012_control(0x0b); } -static int gw16012_speed(int speed) -{ - - return ERROR_OK; -} - static void gw16012_end_state(tap_state_t state) { if (tap_is_state_stable(state)) @@ -547,6 +541,6 @@ struct jtag_interface gw16012_interface = { .init = gw16012_init, .quit = gw16012_quit, - .speed = gw16012_speed, + .support_conf_speed = false, .execute_queue = gw16012_execute_queue, }; diff --git a/src/jtag/drivers/jlink.c b/src/jtag/drivers/jlink.c index 33b15d2..ce003b4 100644 --- a/src/jtag/drivers/jlink.c +++ b/src/jtag/drivers/jlink.c @@ -1301,6 +1301,7 @@ struct jtag_interface jlink_interface = { .transports = jtag_only, .execute_queue = jlink_execute_queue, + .support_conf_speed = true, .speed = jlink_speed, .speed_div = jlink_speed_div, .khz = jlink_khz, diff --git a/src/jtag/drivers/opendous.c b/src/jtag/drivers/opendous.c index 3a6cf5c..d2f4580 100644 --- a/src/jtag/drivers/opendous.c +++ b/src/jtag/drivers/opendous.c @@ -194,6 +194,7 @@ struct jtag_interface opendous_interface = { .name = "opendous", .commands = opendous_command_handlers, .execute_queue = opendous_execute_queue, + .support_conf_speed = true, .speed = opendous_speed, .speed_div = opendous_speed_div, .khz = opendous_khz, diff --git a/src/jtag/drivers/osbdm.c b/src/jtag/drivers/osbdm.c index 66dbf3d..b4fc974 100644 --- a/src/jtag/drivers/osbdm.c +++ b/src/jtag/drivers/osbdm.c @@ -690,32 +690,13 @@ static int osbdm_init(void) return ERROR_OK; } -static int osbdm_khz(int khz, int *speed) -{ - *speed = khz; - return ERROR_OK; -} - -static int osbdm_speed(int speed) -{ - return ERROR_OK; -} - -static int osbdm_speed_div(int speed, int *khz) -{ - *khz = speed; - return ERROR_OK; -} - struct jtag_interface osbdm_interface = { .name = "osbdm", .transports = jtag_only, .execute_queue = osbdm_execute_queue, - .khz = osbdm_khz, - .speed = osbdm_speed, - .speed_div = osbdm_speed_div, + .support_conf_speed = false, .init = osbdm_init, .quit = osbdm_quit diff --git a/src/jtag/drivers/parport.c b/src/jtag/drivers/parport.c index 3c07afb..a3ccd1a 100644 --- a/src/jtag/drivers/parport.c +++ b/src/jtag/drivers/parport.c @@ -507,6 +507,7 @@ struct jtag_interface parport_interface = { .init = parport_init, .quit = parport_quit, + .support_conf_speed = true, .khz = parport_khz, .speed_div = parport_speed_div, .speed = parport_speed, diff --git a/src/jtag/drivers/presto.c b/src/jtag/drivers/presto.c index 28576a7..2fde497 100644 --- a/src/jtag/drivers/presto.c +++ b/src/jtag/drivers/presto.c @@ -788,6 +788,7 @@ struct jtag_interface presto_interface = { .commands = presto_command_handlers, .execute_queue = bitq_execute_queue, + .support_conf_speed = true, .speed = presto_jtag_speed, .khz = presto_adapter_khz, .speed_div = presto_jtag_speed_div, diff --git a/src/jtag/drivers/remote_bitbang.c b/src/jtag/drivers/remote_bitbang.c index 73d9cfc..82a2d27 100644 --- a/src/jtag/drivers/remote_bitbang.c +++ b/src/jtag/drivers/remote_bitbang.c @@ -130,11 +130,6 @@ static struct bitbang_interface remote_bitbang_bitbang = { .blink = &remote_bitbang_blink, }; -static int remote_bitbang_speed(int speed) -{ - return ERROR_OK; -} - static int remote_bitbang_init_tcp(void) { LOG_INFO("Connecting to %s:%i", remote_bitbang_host, remote_bitbang_port); @@ -235,19 +230,6 @@ static int remote_bitbang_init(void) return remote_bitbang_init_tcp(); } -static int remote_bitbang_khz(int khz, int *jtag_speed) -{ - *jtag_speed = 0; - return ERROR_OK; -} - -static int remote_bitbang_speed_div(int speed, int *khz) -{ - /* I don't think this really matters any. */ - *khz = 1; - return ERROR_OK; -} - COMMAND_HANDLER(remote_bitbang_handle_remote_bitbang_port_command) { if (CMD_ARGC == 1) { @@ -290,10 +272,8 @@ static const struct command_registration remote_bitbang_command_handlers[] = { struct jtag_interface remote_bitbang_interface = { .name = "remote_bitbang", .execute_queue = &bitbang_execute_queue, - .speed = &remote_bitbang_speed, .commands = remote_bitbang_command_handlers, .init = &remote_bitbang_init, .quit = &remote_bitbang_quit, - .khz = &remote_bitbang_khz, - .speed_div = &remote_bitbang_speed_div, + .support_conf_speed = false, }; diff --git a/src/jtag/drivers/rlink.c b/src/jtag/drivers/rlink.c index 0bfe8be..3e6a245 100644 --- a/src/jtag/drivers/rlink.c +++ b/src/jtag/drivers/rlink.c @@ -1678,6 +1678,7 @@ struct jtag_interface rlink_interface = { .name = "rlink", .init = rlink_init, .quit = rlink_quit, + .support_conf_speed = true, .speed = rlink_speed, .speed_div = rlink_speed_div, .khz = rlink_khz, diff --git a/src/jtag/drivers/sysfsgpio.c b/src/jtag/drivers/sysfsgpio.c index 1cad268..bd34df4 100644 --- a/src/jtag/drivers/sysfsgpio.c +++ b/src/jtag/drivers/sysfsgpio.c @@ -258,28 +258,6 @@ static void sysfsgpio_reset(int trst, int srst) } } -/* No speed control is implemented yet */ -static int sysfsgpio_speed(int speed) -{ - return ERROR_OK; -} - -static int sysfsgpio_khz(int khz, int *jtag_speed) -{ - /* no adaptive clocking */ - if (khz == 0) - return ERROR_FAIL; - - *jtag_speed = 0; - return ERROR_OK; -} - -static int sysfsgpio_speed_div(int speed, int *khz) -{ - *khz = 1; - return ERROR_OK; -} - /* gpio numbers for each gpio. Negative values are invalid */ static int tck_gpio = -1; static int tms_gpio = -1; @@ -415,9 +393,7 @@ struct jtag_interface sysfsgpio_interface = { .supported = DEBUG_CAP_TMS_SEQ, .execute_queue = bitbang_execute_queue, .transports = jtag_only, - .speed = sysfsgpio_speed, - .khz = sysfsgpio_khz, - .speed_div = sysfsgpio_speed_div, + .support_conf_speed = false, .commands = sysfsgpio_command_handlers, .init = sysfsgpio_init, .quit = sysfsgpio_quit, diff --git a/src/jtag/drivers/ulink.c b/src/jtag/drivers/ulink.c index 8ded37b..c02a107 100644 --- a/src/jtag/drivers/ulink.c +++ b/src/jtag/drivers/ulink.c @@ -2294,6 +2294,7 @@ struct jtag_interface ulink_interface = { .transports = jtag_only, .execute_queue = ulink_execute_queue, + .support_conf_speed = true, .khz = ulink_khz, .speed = ulink_speed, .speed_div = ulink_speed_div, diff --git a/src/jtag/drivers/usb_blaster.c b/src/jtag/drivers/usb_blaster.c index 088ae34..7a3cb0d 100644 --- a/src/jtag/drivers/usb_blaster.c +++ b/src/jtag/drivers/usb_blaster.c @@ -297,27 +297,6 @@ static void usb_blaster_write(int tck, int tms, int tdi) usb_blaster_addtowritebuffer(out_value, false); } -static int usb_blaster_speed(int speed) -{ -#if BUILD_USB_BLASTER_FTD2XX == 1 - LOG_DEBUG("TODO: usb_blaster_speed() isn't implemented for libftd2xx!"); -#elif BUILD_USB_BLASTER_LIBFTDI == 1 - LOG_DEBUG("TODO: usb_blaster_speed() isn't optimally implemented!"); - - /* TODO: libftdi's ftdi_set_baudrate chokes on high rates, use lowlevel - * usb function instead! And additionally allow user to throttle. - */ - if (ftdi_set_baudrate(&ftdic, 3000000 / 4) < 0) { - LOG_ERROR("Can't set baud rate to max: %s", - ftdi_get_error_string(&ftdic)); - return ERROR_JTAG_DEVICE_ERROR; - } - ; -#endif - - return ERROR_OK; -} - static void usb_blaster_reset(int trst, int srst) { LOG_DEBUG("TODO: usb_blaster_reset(%d,%d) isn't implemented!", @@ -588,7 +567,7 @@ struct jtag_interface usb_blaster_interface = { .execute_queue = bitbang_execute_queue, - .speed = usb_blaster_speed, + .support_conf_speed = false, .init = usb_blaster_init, .quit = usb_blaster_quit, }; diff --git a/src/jtag/drivers/usbprog.c b/src/jtag/drivers/usbprog.c index e90d569..8697602 100644 --- a/src/jtag/drivers/usbprog.c +++ b/src/jtag/drivers/usbprog.c @@ -96,11 +96,6 @@ static void usbprog_jtag_write_slice(struct usbprog_jtag *usbprog_jtag, unsigned static void usbprog_jtag_set_bit(struct usbprog_jtag *usbprog_jtag, int bit, int value); /* static int usbprog_jtag_get_bit(struct usbprog_jtag *usbprog_jtag, int bit); */ -static int usbprog_speed(int speed) -{ - return ERROR_OK; -} - static int usbprog_execute_queue(void) { struct jtag_command *cmd = jtag_command_queue; /* currently processed command */ @@ -621,7 +616,7 @@ struct jtag_interface usbprog_interface = { .name = "usbprog", .execute_queue = usbprog_execute_queue, - .speed = usbprog_speed, + .support_conf_speed = false, .init = usbprog_init, .quit = usbprog_quit }; diff --git a/src/jtag/drivers/vsllink.c b/src/jtag/drivers/vsllink.c index 1c0c3e1..4bf5a9d 100644 --- a/src/jtag/drivers/vsllink.c +++ b/src/jtag/drivers/vsllink.c @@ -842,6 +842,7 @@ struct jtag_interface vsllink_interface = { .init = vsllink_init, .quit = vsllink_quit, + .support_conf_speed = true, .khz = vsllink_khz, .speed = vsllink_speed, .speed_div = vsllink_speed_div, diff --git a/src/jtag/hla/hla_interface.c b/src/jtag/hla/hla_interface.c index 5f493ff..b027f4f 100644 --- a/src/jtag/hla/hla_interface.c +++ b/src/jtag/hla/hla_interface.c @@ -108,25 +108,6 @@ static int hl_interface_quit(void) return ERROR_OK; } -static int hl_interface_speed(int speed) -{ - LOG_DEBUG("hl_interface_speed: ignore speed %d", speed); - - return ERROR_OK; -} - -static int hl_speed_div(int speed, int *khz) -{ - *khz = speed; - return ERROR_OK; -} - -static int hl_khz(int khz, int *jtag_speed) -{ - *jtag_speed = khz; - return ERROR_OK; -} - static int hl_interface_execute_queue(void) { LOG_DEBUG("hl_interface_execute_queue: ignored"); @@ -279,8 +260,6 @@ struct jtag_interface hl_interface = { .transports = hl_transports, .init = hl_interface_init, .quit = hl_interface_quit, - .speed = hl_interface_speed, - .speed_div = hl_speed_div, - .khz = hl_khz, + .support_conf_speed = false, .execute_queue = hl_interface_execute_queue, }; diff --git a/src/jtag/interface.h b/src/jtag/interface.h index 72af2fe..c3cc06b 100644 --- a/src/jtag/interface.h +++ b/src/jtag/interface.h @@ -252,6 +252,11 @@ struct jtag_interface { int (*quit)(void); /** + * Tells if the interface support configurable speed. + */ + bool support_conf_speed; + + /** * Returns JTAG maxium speed for KHz. 0 = RTCK. The function returns * a failure if it can't support the KHz/RTCK. * diff --git a/src/jtag/minidummy/minidummy.c b/src/jtag/minidummy/minidummy.c index 12a658c..7769663 100644 --- a/src/jtag/minidummy/minidummy.c +++ b/src/jtag/minidummy/minidummy.c @@ -31,6 +31,7 @@ struct jtag_interface minidummy_interface = { .execute_queue = NULL, .speed = NULL, .commands = NULL, + .support_conf_speed = false, .init = NULL, .quit = NULL, .khz = NULL, diff --git a/src/jtag/zy1000/zy1000.c b/src/jtag/zy1000/zy1000.c index e246870..3619d09 100644 --- a/src/jtag/zy1000/zy1000.c +++ b/src/jtag/zy1000/zy1000.c @@ -1255,6 +1255,7 @@ struct jtag_interface zy1000_interface = { .name = "ZY1000", .supported = DEBUG_CAP_TMS_SEQ, .execute_queue = NULL, + .support_conf_speed = true, .speed = zy1000_speed, .commands = zy1000_commands, .init = zy1000_init, -- ------------------------------------------------------------------------------ Everyone hates slow websites. So do we. Make your web apps faster with AppDynamics Download AppDynamics Lite for free today: http://p.sf.net/sfu/appdyn_d2d_jan _______________________________________________ OpenOCD-devel mailing list OpenOCD-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openocd-devel