aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSpencer Oliver <spen@spen-soft.co.uk>2012-05-04 14:31:25 +0100
committerSpencer Oliver <spen@spen-soft.co.uk>2012-05-14 09:34:00 +0000
commit61672009c41f4f72deb399512774acf2105cf1b6 (patch)
tree35bbe1ed306b270cfbcd45719d93be1131c41d34 /src
parent18df479f0a96e9e6b50d7e3393adc90629c049f7 (diff)
downloadriscv-openocd-61672009c41f4f72deb399512774acf2105cf1b6.zip
riscv-openocd-61672009c41f4f72deb399512774acf2105cf1b6.tar.gz
riscv-openocd-61672009c41f4f72deb399512774acf2105cf1b6.tar.bz2
stlink: add stlink_api cmd
This enables the manual selection of the stlink api version. Change-Id: I0ec8c5b0a101b6456f426d2fec65971da56db4e7 Signed-off-by: Spencer Oliver <spen@spen-soft.co.uk> Reviewed-on: http://openocd.zylin.com/617 Tested-by: jenkins Reviewed-by: Freddie Chopin <freddie.chopin@gmail.com> Reviewed-by: Xiaofan <xiaofanc@gmail.com>
Diffstat (limited to 'src')
-rw-r--r--src/jtag/drivers/stlink_usb.c14
-rw-r--r--src/jtag/stlink/stlink_interface.c24
-rw-r--r--src/jtag/stlink/stlink_interface.h2
3 files changed, 37 insertions, 3 deletions
diff --git a/src/jtag/drivers/stlink_usb.c b/src/jtag/drivers/stlink_usb.c
index 1de42ef..b4944f5 100644
--- a/src/jtag/drivers/stlink_usb.c
+++ b/src/jtag/drivers/stlink_usb.c
@@ -48,7 +48,7 @@
#define STLINK_CMD_SIZE_V1 (10)
enum stlink_jtag_api_version {
- STLINK_JTAG_API_V1 = 0,
+ STLINK_JTAG_API_V1 = 1,
STLINK_JTAG_API_V2,
};
@@ -1132,6 +1132,7 @@ static int stlink_usb_open(struct stlink_interface_param_s *param, void **fd)
{
int err;
struct stlink_usb_handle_s *h;
+ enum stlink_jtag_api_version api;
LOG_DEBUG("stlink_usb_open");
@@ -1213,8 +1214,17 @@ static int stlink_usb_open(struct stlink_interface_param_s *param, void **fd)
return err;
}
+ api = h->version.jtag_api_max;
+
+ /* check that user has not requested certain api version
+ * and if they have check it is supported */
+ if ((param->api != 0) && (param->api <= h->version.jtag_api_max)) {
+ api = param->api;
+ LOG_INFO("using stlink api v%d", api);
+ }
+
/* set the used jtag api, this will default to the newest supported version */
- h->jtag_api = h->version.jtag_api_max;
+ h->jtag_api = api;
/* initialize the debug hardware */
err = stlink_usb_init_mode(h);
diff --git a/src/jtag/stlink/stlink_interface.c b/src/jtag/stlink/stlink_interface.c
index 389ab3f..379e68d 100644
--- a/src/jtag/stlink/stlink_interface.c
+++ b/src/jtag/stlink/stlink_interface.c
@@ -34,7 +34,7 @@
#include <target/target.h>
-static struct stlink_interface_s stlink_if = { {0, 0, 0, 0, 0}, 0, 0 };
+static struct stlink_interface_s stlink_if = { {0, 0, 0, 0, 0, 0}, 0, 0 };
int stlink_interface_open(enum stlink_transports tr)
{
@@ -200,6 +200,21 @@ COMMAND_HANDLER(stlink_interface_handle_vid_pid_command)
return ERROR_OK;
}
+COMMAND_HANDLER(stlink_interface_handle_api_command)
+{
+ if (CMD_ARGC != 1)
+ return ERROR_COMMAND_SYNTAX_ERROR;
+
+ unsigned new_api;
+ COMMAND_PARSE_NUMBER(uint, CMD_ARGV[0], new_api);
+ if ((new_api == 0) || (new_api > 2))
+ return ERROR_COMMAND_SYNTAX_ERROR;
+
+ stlink_if.param.api = new_api;
+
+ return ERROR_OK;
+}
+
static const struct command_registration stlink_interface_command_handlers[] = {
{
.name = "stlink_device_desc",
@@ -229,6 +244,13 @@ static const struct command_registration stlink_interface_command_handlers[] = {
.help = "the vendor and product ID of the STLINK device",
.usage = "(vid pid)* ",
},
+ {
+ .name = "stlink_api",
+ .handler = &stlink_interface_handle_api_command,
+ .mode = COMMAND_CONFIG,
+ .help = "set the desired stlink api level",
+ .usage = "api version 1 or 2",
+ },
COMMAND_REGISTRATION_DONE
};
diff --git a/src/jtag/stlink/stlink_interface.h b/src/jtag/stlink/stlink_interface.h
index 4b6949e..ee2feff 100644
--- a/src/jtag/stlink/stlink_interface.h
+++ b/src/jtag/stlink/stlink_interface.h
@@ -38,6 +38,8 @@ struct stlink_interface_param_s {
/** */
uint16_t pid;
/** */
+ unsigned api;
+ /** */
enum stlink_transports transport;
};