int jtag;
/** */
int swim;
- /** highest supported jtag api version */
- enum stlink_jtag_api_version jtag_api_max;
+ /** jtag api version supported */
+ enum stlink_jtag_api_version jtag_api;
/** one bit for each feature supported. See macros STLINK_F_* */
uint32_t flags;
};
uint16_t vid;
/** */
uint16_t pid;
- /** this is the currently used jtag api */
- enum stlink_jtag_api_version jtag_api;
/** */
struct {
/** whether SWO tracing is enabled or not */
}
/* TODO: no error checking yet on api V1 */
- if (h->jtag_api == STLINK_JTAG_API_V1)
+ if (h->version.jtag_api == STLINK_JTAG_API_V1)
h->databuf[0] = STLINK_DEBUG_ERR_OK;
switch (h->databuf[0]) {
case 1:
/* ST-LINK/V1 from J11 switch to api-v2 (and support SWD) */
if (h->version.jtag >= 11)
- h->version.jtag_api_max = STLINK_JTAG_API_V2;
+ h->version.jtag_api = STLINK_JTAG_API_V2;
else
- h->version.jtag_api_max = STLINK_JTAG_API_V1;
+ h->version.jtag_api = STLINK_JTAG_API_V1;
break;
case 2:
/* all ST-LINK/V2 and ST-Link/V2.1 use api-v2 */
- h->version.jtag_api_max = STLINK_JTAG_API_V2;
+ h->version.jtag_api = STLINK_JTAG_API_V2;
/* API for trace from J13 */
/* API for target voltage from J13 */
LOG_INFO("STLINK v%d JTAG v%d API v%d SWIM v%d VID 0x%04X PID 0x%04X",
h->version.stlink,
h->version.jtag,
- (h->version.jtag_api_max == STLINK_JTAG_API_V1) ? 1 : 2,
+ (h->version.jtag_api == STLINK_JTAG_API_V1) ? 1 : 2,
h->version.swim,
h->vid,
h->pid);
* status
* TODO: we need the test on api V1 too
*/
- if (h->jtag_api == STLINK_JTAG_API_V2)
+ if (h->version.jtag_api == STLINK_JTAG_API_V2)
rx_size = 2;
stlink_usb_init_buffer(handle, h->rx_ep, rx_size);
switch (type) {
case STLINK_MODE_DEBUG_JTAG:
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_COMMAND;
- if (h->jtag_api == STLINK_JTAG_API_V1)
+ if (h->version.jtag_api == STLINK_JTAG_API_V1)
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV1_ENTER;
else
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV2_ENTER;
break;
case STLINK_MODE_DEBUG_SWD:
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_COMMAND;
- if (h->jtag_api == STLINK_JTAG_API_V1)
+ if (h->version.jtag_api == STLINK_JTAG_API_V1)
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV1_ENTER;
else
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV2_ENTER;
stlink_usb_init_buffer(handle, h->rx_ep, 2);
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_COMMAND;
- if (h->jtag_api == STLINK_JTAG_API_V1)
+ if (h->version.jtag_api == STLINK_JTAG_API_V1)
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV1_WRITEDEBUGREG;
else
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV2_WRITEDEBUGREG;
h->reconnect_pending = false;
}
- if (h->jtag_api == STLINK_JTAG_API_V2) {
+ if (h->version.jtag_api == STLINK_JTAG_API_V2) {
res = stlink_usb_v2_get_status(handle);
if (res == TARGET_UNKNOWN)
h->reconnect_pending = true;
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_COMMAND;
- if (h->jtag_api == STLINK_JTAG_API_V1)
+ if (h->version.jtag_api == STLINK_JTAG_API_V1)
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV1_RESETSYS;
else
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV2_RESETSYS;
assert(handle != NULL);
- if (h->jtag_api == STLINK_JTAG_API_V2) {
+ if (h->version.jtag_api == STLINK_JTAG_API_V2) {
res = stlink_usb_write_debug_reg(handle, DCB_DHCSR, DBGKEY|C_DEBUGEN);
return res;
assert(handle != NULL);
- if (h->jtag_api == STLINK_JTAG_API_V2) {
+ if (h->version.jtag_api == STLINK_JTAG_API_V2) {
res = stlink_usb_write_debug_reg(handle, DCB_DHCSR, DBGKEY|C_HALT|C_DEBUGEN);
return res;
assert(handle != NULL);
- if (h->jtag_api == STLINK_JTAG_API_V2) {
+ if (h->version.jtag_api == STLINK_JTAG_API_V2) {
/* TODO: this emulates the v1 api, it should really use a similar auto mask isr
* that the Cortex-M3 currently does. */
stlink_usb_write_debug_reg(handle, DCB_DHCSR, DBGKEY|C_HALT|C_MASKINTS|C_DEBUGEN);
stlink_usb_init_buffer(handle, h->rx_ep, 84);
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_COMMAND;
- if (h->jtag_api == STLINK_JTAG_API_V1)
+ if (h->version.jtag_api == STLINK_JTAG_API_V1)
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV1_READALLREGS;
else
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV2_READALLREGS;
assert(handle != NULL);
- stlink_usb_init_buffer(handle, h->rx_ep, h->jtag_api == STLINK_JTAG_API_V1 ? 4 : 8);
+ stlink_usb_init_buffer(handle, h->rx_ep, h->version.jtag_api == STLINK_JTAG_API_V1 ? 4 : 8);
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_COMMAND;
- if (h->jtag_api == STLINK_JTAG_API_V1)
+ if (h->version.jtag_api == STLINK_JTAG_API_V1)
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV1_READREG;
else
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV2_READREG;
h->cmdbuf[h->cmdidx++] = num;
- if (h->jtag_api == STLINK_JTAG_API_V1) {
+ if (h->version.jtag_api == STLINK_JTAG_API_V1) {
res = stlink_usb_xfer(handle, h->databuf, 4);
if (res != ERROR_OK)
return res;
stlink_usb_init_buffer(handle, h->rx_ep, 2);
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_COMMAND;
- if (h->jtag_api == STLINK_JTAG_API_V1)
+ if (h->version.jtag_api == STLINK_JTAG_API_V1)
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV1_WRITEREG;
else
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV2_WRITEREG;
assert(handle != NULL);
- if (h->jtag_api == STLINK_JTAG_API_V1)
+ if (h->version.jtag_api == STLINK_JTAG_API_V1)
return ERROR_OK;
stlink_usb_init_buffer(handle, h->rx_ep, 2);
{
int err, retry_count = 1;
struct stlink_usb_handle_s *h;
- enum stlink_jtag_api_version api;
LOG_DEBUG("stlink_usb_open");
switch (h->transport) {
case HL_TRANSPORT_SWD:
- if (h->version.jtag_api_max == STLINK_JTAG_API_V1)
+ if (h->version.jtag_api == STLINK_JTAG_API_V1)
err = ERROR_FAIL;
/* fall-through */
case HL_TRANSPORT_JTAG:
goto error_open;
}
- api = h->version.jtag_api_max;
-
- LOG_INFO("using stlink api v%d", api);
-
- /* set the used jtag api, this will default to the newest supported version */
- h->jtag_api = api;
-
/* initialize the debug hardware */
err = stlink_usb_init_mode(h, param->connect_under_reset);