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

Reply via email to