diff options
author | Spencer Oliver <spen@spen-soft.co.uk> | 2012-05-04 14:31:25 +0100 |
---|---|---|
committer | Spencer Oliver <spen@spen-soft.co.uk> | 2012-05-14 09:34:00 +0000 |
commit | 61672009c41f4f72deb399512774acf2105cf1b6 (patch) | |
tree | 35bbe1ed306b270cfbcd45719d93be1131c41d34 /src | |
parent | 18df479f0a96e9e6b50d7e3393adc90629c049f7 (diff) | |
download | riscv-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.c | 14 | ||||
-rw-r--r-- | src/jtag/stlink/stlink_interface.c | 24 | ||||
-rw-r--r-- | src/jtag/stlink/stlink_interface.h | 2 |
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; }; |