adapter speed: require init script setting and centralize activation from drivers...
authorJonas Hörberg <jhorberg@sauer-danfoss.com>
Thu, 28 Apr 2011 07:17:57 +0000 (09:17 +0200)
committerØyvind Harboe <oyvind.harboe@zylin.com>
Sat, 30 Apr 2011 22:38:04 +0000 (00:38 +0200)
Signed-off-by: Jonas Hörberg <jhorberg@sauer-danfoss.com>
src/jtag/core.c
src/jtag/drivers/amt_jtagaccel.c
src/jtag/drivers/ft2232.c
src/jtag/drivers/gw16012.c
src/jtag/drivers/jlink.c
src/jtag/drivers/parport.c
src/jtag/drivers/presto.c
src/jtag/drivers/rlink.c
src/jtag/drivers/usb_blaster.c
src/jtag/zy1000/zy1000.c

index 4c5d37a..0a9d72a 100644 (file)
@@ -124,7 +124,7 @@ static struct jtag_event_callback *jtag_event_callbacks;
 static int speed_khz = 0;
 /* speed to fallback to when RCLK is requested but not supported */
 static int rclk_fallback_speed_khz = 0;
-static enum {CLOCK_MODE_SPEED, CLOCK_MODE_KHZ, CLOCK_MODE_RCLK} clock_mode;
+static enum {CLOCK_MODE_UNSELECTED, CLOCK_MODE_KHZ, CLOCK_MODE_RCLK} clock_mode;
 static int jtag_speed = 0;
 
 static struct jtag_interface *jtag = NULL;
@@ -1389,12 +1389,22 @@ int adapter_init(struct command_context *cmd_ctx)
                        return retval;
        }
 
+       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.");
+               return ERROR_JTAG_INIT_FAILED;
+       }
+
        int requested_khz = jtag_get_speed_khz();
        int actual_khz = requested_khz;
        int jtag_speed_var;
        retval = jtag_get_speed(&jtag_speed_var);
        if (retval != ERROR_OK)
                return retval;
+       retval = jtag->speed(jtag_speed_var);
+       if (retval != ERROR_OK)
+               return retval;
        retval = jtag_get_speed_readable(&actual_khz);
        if (ERROR_OK != retval)
                LOG_INFO("adapter-specific clock speed value %d", jtag_speed_var);
@@ -1647,9 +1657,6 @@ int jtag_get_speed(int *speed)
 {
        switch(clock_mode)
        {
-               case CLOCK_MODE_SPEED:
-                       *speed = jtag_speed;
-                       break;
                case CLOCK_MODE_KHZ:
                        adapter_khz_to_speed(jtag_get_speed_khz(), speed);
                        break;
index ee44a2b..a433e81 100644 (file)
@@ -506,12 +506,6 @@ static int amt_jtagaccel_init(void)
        aw_control_fsm |= 0x04;
        AMT_AW(aw_control_fsm);
 
-       int jtag_speed_var;
-       int retval = jtag_get_speed(&jtag_speed_var);
-       if (retval != ERROR_OK)
-          return retval;
-       amt_jtagaccel_speed(jtag_speed_var);
-
        enum reset_types jtag_reset_config = jtag_get_reset_config();
        if (jtag_reset_config & RESET_TRST_OPEN_DRAIN)
                aw_control_rst &= ~0x8;
index fdabb64..8c2382a 100644 (file)
@@ -2485,12 +2485,6 @@ static int ft2232_init(void)
                        return ERROR_JTAG_INIT_FAILED;
        }
 
-       int jtag_speed_var;
-       retval = jtag_get_speed(&jtag_speed_var);
-       if (retval != ERROR_OK)
-               return retval;
-       ft2232_speed(jtag_speed_var);
-
        buf[0] = 0x85; /* Disconnect TDI/DO to TDO/DI for Loopback */
        if ((retval = ft2232_write(buf, 1, &bytes_written)) != ERROR_OK)
        {
index 1729299..22a37ac 100644 (file)
@@ -529,11 +529,6 @@ static int gw16012_init(void)
        gw16012_input(&status_port);
        gw16012_msb = (status_port & 0x80) ^ 0x80;
 
-       int jtag_speed_var;
-       int retval = jtag_get_speed(&jtag_speed_var);
-       if (retval != ERROR_OK)
-               return retval;
-       gw16012_speed(jtag_speed_var);
        gw16012_reset(0, 0);
 
        return ERROR_OK;
index 6eb707a..adaa640 100644 (file)
@@ -439,11 +439,6 @@ static int jlink_init(void)
        jlink_reset(0, 0);
        jtag_sleep(3000);
        jlink_tap_init();
-       int jtag_speed_var;
-       int retval = jtag_get_speed(&jtag_speed_var);
-       if (retval != ERROR_OK)
-               return retval;
-       jlink_speed(jtag_speed_var);
 
        /* v5/6 jlink seems to have an issue if the first tap move
         * is not divisible by 8, so we send a TLR on first power up */
index b61f2f1..ad07791 100644 (file)
@@ -384,10 +384,6 @@ static int parport_init(void)
 
        bitbang_interface = &parport_bitbang;
 
-       int retval = jtag_get_speed(&wait_states);
-       if (retval != ERROR_OK)
-               return retval;
-
        return ERROR_OK;
 }
 
index ca6e9d5..2328c26 100644 (file)
@@ -769,13 +769,6 @@ static int presto_jtag_init(void)
        }
        LOG_INFO("PRESTO open, serial number '%s'", presto->serial);
 
-       /* use JTAG speed setting from configuration file */
-       int jtag_speed_var;
-       int retval = jtag_get_speed(&jtag_speed_var);
-       if (retval != ERROR_OK)
-               return retval;
-       presto_jtag_speed(jtag_speed_var);
-
        bitq_interface = &presto_bitq;
        return ERROR_OK;
 }
index 4b3e2ae..5f53dbc 100644 (file)
@@ -1771,11 +1771,6 @@ int rlink_init(void)
 
        tap_state_queue_init();
        dtc_queue_init();
-       int jtag_speed_var;
-       int retval = jtag_get_speed(&jtag_speed_var);
-       if (retval != ERROR_OK)
-               return retval;
-       rlink_speed(jtag_speed_var);
        rlink_reset(0, 0);
 
        return ERROR_OK;
index 68867ad..b046b71 100644 (file)
@@ -474,12 +474,6 @@ static int usb_blaster_init(void)
 
        bitbang_interface = &usb_blaster_bitbang;
 
-       int jtag_speed_var;
-       int retval = jtag_get_speed(&jtag_speed_var);
-       if (retval != ERROR_OK)
-               return retval;
-       usb_blaster_speed(jtag_speed_var);
-
 #if 0
 #if BUILD_USB_BLASTER_FTD2XX == 1
        if ((status = FT_Purge(ftdih, FT_PURGE_RX | FT_PURGE_TX)) != FT_OK)
index 8c37666..7a3a0f2 100644 (file)
@@ -1505,11 +1505,6 @@ int zy1000_init(void)
 
         /* deassert resets. Important to avoid infinite loop waiting for SRST to deassert */
        zy1000_reset(0, 0);
-       int jtag_speed_var;
-       int retval = jtag_get_speed(&jtag_speed_var);
-       if (retval != ERROR_OK)
-               return retval;
-       zy1000_speed(jtag_speed_var);
 
 #if BUILD_ZY1000_MASTER
 #if BUILD_ECOSBOARD