You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1299 lines
31 KiB

  1. /***************************************************************************
  2. * Copyright (C) 2005 by Dominic Rath *
  3. * Dominic.Rath@gmx.de *
  4. * *
  5. * Copyright (C) 2007,2008 Øyvind Harboe *
  6. * oyvind.harboe@zylin.com *
  7. * *
  8. * Copyright (C) 2009 SoftPLC Corporation *
  9. * http://softplc.com *
  10. * dick@softplc.com *
  11. * *
  12. * Copyright (C) 2009 Zachary T Welch *
  13. * zw@superlucidity.net *
  14. * *
  15. * This program is free software; you can redistribute it and/or modify *
  16. * it under the terms of the GNU General Public License as published by *
  17. * the Free Software Foundation; either version 2 of the License, or *
  18. * (at your option) any later version. *
  19. * *
  20. * This program is distributed in the hope that it will be useful, *
  21. * but WITHOUT ANY WARRANTY; without even the implied warranty of *
  22. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
  23. * GNU General Public License for more details. *
  24. * *
  25. * You should have received a copy of the GNU General Public License *
  26. * along with this program; if not, write to the *
  27. * Free Software Foundation, Inc., *
  28. * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
  29. ***************************************************************************/
  30. #ifdef HAVE_CONFIG_H
  31. #include "config.h"
  32. #endif
  33. #include "jtag.h"
  34. #include "minidriver.h"
  35. #include "interface.h"
  36. #ifdef HAVE_STRINGS_H
  37. #include <strings.h>
  38. #endif
  39. /// The number of JTAG queue flushes (for profiling and debugging purposes).
  40. static int jtag_flush_queue_count;
  41. static void jtag_add_scan_check(void (*jtag_add_scan)(int in_num_fields, const scan_field_t *in_fields, tap_state_t state),
  42. int in_num_fields, scan_field_t *in_fields, tap_state_t state);
  43. /* note that this is not marked as static as it must be available from outside core.c for those
  44. that implement the jtag_xxx() minidriver layer
  45. */
  46. int jtag_error=ERROR_OK;
  47. char* jtag_event_strings[] =
  48. {
  49. "JTAG controller reset (RESET or TRST)"
  50. };
  51. const Jim_Nvp nvp_jtag_tap_event[] = {
  52. { .value = JTAG_TAP_EVENT_ENABLE, .name = "tap-enable" },
  53. { .value = JTAG_TAP_EVENT_DISABLE, .name = "tap-disable" },
  54. { .name = NULL, .value = -1 }
  55. };
  56. static int jtag_trst = 0;
  57. static int jtag_srst = 0;
  58. /**
  59. * List all TAPs that have been created.
  60. */
  61. static jtag_tap_t *__jtag_all_taps = NULL;
  62. /**
  63. * The number of TAPs in the __jtag_all_taps list, used to track the
  64. * assigned chain position to new TAPs
  65. */
  66. static unsigned jtag_num_taps = 0;
  67. enum reset_types jtag_reset_config = RESET_NONE;
  68. tap_state_t cmd_queue_end_state = TAP_RESET;
  69. tap_state_t cmd_queue_cur_state = TAP_RESET;
  70. int jtag_verify_capture_ir = 1;
  71. int jtag_verify = 1;
  72. /* how long the OpenOCD should wait before attempting JTAG communication after reset lines deasserted (in ms) */
  73. static int jtag_nsrst_delay = 0; /* default to no nSRST delay */
  74. static int jtag_ntrst_delay = 0; /* default to no nTRST delay */
  75. /* callbacks to inform high-level handlers about JTAG state changes */
  76. static jtag_event_callback_t *jtag_event_callbacks;
  77. /* speed in kHz*/
  78. static int speed_khz = 0;
  79. /* flag if the kHz speed was defined */
  80. bool hasKHz = false;
  81. struct jtag_interface_s *jtag = NULL;
  82. /* configuration */
  83. jtag_interface_t *jtag_interface = NULL;
  84. int jtag_speed = 0;
  85. jtag_tap_t *jtag_all_taps(void)
  86. {
  87. return __jtag_all_taps;
  88. };
  89. unsigned jtag_tap_count(void)
  90. {
  91. return jtag_num_taps;
  92. }
  93. unsigned jtag_tap_count_enabled(void)
  94. {
  95. jtag_tap_t *t = jtag_all_taps();
  96. unsigned n = 0;
  97. while(t)
  98. {
  99. if (t->enabled)
  100. n++;
  101. t = t->next_tap;
  102. }
  103. return n;
  104. }
  105. /// Append a new TAP to the chain of all taps.
  106. void jtag_tap_add(struct jtag_tap_s *t)
  107. {
  108. t->abs_chain_position = jtag_num_taps++;
  109. jtag_tap_t **tap = &__jtag_all_taps;
  110. while(*tap != NULL)
  111. tap = &(*tap)->next_tap;
  112. *tap = t;
  113. }
  114. jtag_tap_t *jtag_tap_by_string(const char *s)
  115. {
  116. /* try by name first */
  117. jtag_tap_t *t = jtag_all_taps();
  118. while (t)
  119. {
  120. if (0 == strcmp(t->dotted_name, s))
  121. return t;
  122. t = t->next_tap;
  123. }
  124. /* no tap found by name, so try to parse the name as a number */
  125. char *cp;
  126. unsigned n = strtoul(s, &cp, 0);
  127. if ((s == cp) || (*cp != 0))
  128. return NULL;
  129. return jtag_tap_by_position(n);
  130. }
  131. jtag_tap_t *jtag_tap_by_jim_obj(Jim_Interp *interp, Jim_Obj *o)
  132. {
  133. const char *cp = Jim_GetString(o, NULL);
  134. jtag_tap_t *t = cp ? jtag_tap_by_string(cp) : NULL;
  135. if (NULL == cp)
  136. cp = "(unknown)";
  137. if (NULL == t)
  138. Jim_SetResult_sprintf(interp, "Tap '%s' could not be found", cp);
  139. return t;
  140. }
  141. /* returns a pointer to the n-th device in the scan chain */
  142. jtag_tap_t *jtag_tap_by_position(unsigned n)
  143. {
  144. jtag_tap_t *t = jtag_all_taps();
  145. while (t && n-- > 0)
  146. t = t->next_tap;
  147. return t;
  148. }
  149. const char *jtag_tap_name(const jtag_tap_t *tap)
  150. {
  151. return (tap == NULL) ? "(unknown)" : tap->dotted_name;
  152. }
  153. int jtag_register_event_callback(int (*callback)(enum jtag_event event, void *priv), void *priv)
  154. {
  155. jtag_event_callback_t **callbacks_p = &jtag_event_callbacks;
  156. if (callback == NULL)
  157. {
  158. return ERROR_INVALID_ARGUMENTS;
  159. }
  160. if (*callbacks_p)
  161. {
  162. while ((*callbacks_p)->next)
  163. callbacks_p = &((*callbacks_p)->next);
  164. callbacks_p = &((*callbacks_p)->next);
  165. }
  166. (*callbacks_p) = malloc(sizeof(jtag_event_callback_t));
  167. (*callbacks_p)->callback = callback;
  168. (*callbacks_p)->priv = priv;
  169. (*callbacks_p)->next = NULL;
  170. return ERROR_OK;
  171. }
  172. int jtag_unregister_event_callback(int (*callback)(enum jtag_event event, void *priv))
  173. {
  174. jtag_event_callback_t **callbacks_p = &jtag_event_callbacks;
  175. if (callback == NULL)
  176. {
  177. return ERROR_INVALID_ARGUMENTS;
  178. }
  179. while (*callbacks_p)
  180. {
  181. jtag_event_callback_t **next = &((*callbacks_p)->next);
  182. if ((*callbacks_p)->callback == callback)
  183. {
  184. free(*callbacks_p);
  185. *callbacks_p = *next;
  186. }
  187. callbacks_p = next;
  188. }
  189. return ERROR_OK;
  190. }
  191. int jtag_call_event_callbacks(enum jtag_event event)
  192. {
  193. jtag_event_callback_t *callback = jtag_event_callbacks;
  194. LOG_DEBUG("jtag event: %s", jtag_event_strings[event]);
  195. while (callback)
  196. {
  197. callback->callback(event, callback->priv);
  198. callback = callback->next;
  199. }
  200. return ERROR_OK;
  201. }
  202. static void jtag_checks(void)
  203. {
  204. assert(jtag_trst == 0);
  205. }
  206. static void jtag_prelude(tap_state_t state)
  207. {
  208. jtag_checks();
  209. assert(state!=TAP_INVALID);
  210. cmd_queue_cur_state = state;
  211. }
  212. void jtag_alloc_in_value32(scan_field_t *field)
  213. {
  214. interface_jtag_alloc_in_value32(field);
  215. }
  216. void jtag_add_ir_scan_noverify(int in_count, const scan_field_t *in_fields,
  217. tap_state_t state)
  218. {
  219. jtag_prelude(state);
  220. int retval = interface_jtag_add_ir_scan(in_count, in_fields, state);
  221. jtag_set_error(retval);
  222. }
  223. void jtag_add_ir_scan(int in_num_fields, scan_field_t *in_fields, tap_state_t state)
  224. {
  225. if (jtag_verify&&jtag_verify_capture_ir)
  226. {
  227. /* 8 x 32 bit id's is enough for all invocations */
  228. for (int j = 0; j < in_num_fields; j++)
  229. {
  230. /* if we are to run a verification of the ir scan, we need to get the input back.
  231. * We may have to allocate space if the caller didn't ask for the input back.
  232. */
  233. in_fields[j].check_value=in_fields[j].tap->expected;
  234. in_fields[j].check_mask=in_fields[j].tap->expected_mask;
  235. }
  236. jtag_add_scan_check(jtag_add_ir_scan_noverify, in_num_fields, in_fields, state);
  237. } else
  238. {
  239. jtag_add_ir_scan_noverify(in_num_fields, in_fields, state);
  240. }
  241. }
  242. void jtag_add_plain_ir_scan(int in_num_fields, const scan_field_t *in_fields,
  243. tap_state_t state)
  244. {
  245. jtag_prelude(state);
  246. int retval = interface_jtag_add_plain_ir_scan(
  247. in_num_fields, in_fields, state);
  248. jtag_set_error(retval);
  249. }
  250. void jtag_add_callback(jtag_callback1_t f, u8 *in)
  251. {
  252. interface_jtag_add_callback(f, in);
  253. }
  254. void jtag_add_callback4(jtag_callback_t f, u8 *in,
  255. jtag_callback_data_t data1, jtag_callback_data_t data2,
  256. jtag_callback_data_t data3)
  257. {
  258. interface_jtag_add_callback4(f, in, data1, data2, data3);
  259. }
  260. int jtag_check_value_inner(u8 *captured, u8 *in_check_value, u8 *in_check_mask, int num_bits);
  261. static int jtag_check_value_mask_callback(u8 *in, jtag_callback_data_t data1, jtag_callback_data_t data2, jtag_callback_data_t data3)
  262. {
  263. return jtag_check_value_inner(in, (u8 *)data1, (u8 *)data2, (int)data3);
  264. }
  265. static void jtag_add_scan_check(void (*jtag_add_scan)(int in_num_fields, const scan_field_t *in_fields, tap_state_t state),
  266. int in_num_fields, scan_field_t *in_fields, tap_state_t state)
  267. {
  268. for (int i = 0; i < in_num_fields; i++)
  269. {
  270. struct scan_field_s *field = &in_fields[i];
  271. field->allocated = 0;
  272. field->modified = 0;
  273. if (field->check_value || field->in_value)
  274. continue;
  275. interface_jtag_add_scan_check_alloc(field);
  276. field->modified = 1;
  277. }
  278. jtag_add_scan(in_num_fields, in_fields, state);
  279. for (int i = 0; i < in_num_fields; i++)
  280. {
  281. if ((in_fields[i].check_value != NULL) && (in_fields[i].in_value != NULL))
  282. {
  283. /* this is synchronous for a minidriver */
  284. jtag_add_callback4(jtag_check_value_mask_callback, in_fields[i].in_value,
  285. (jtag_callback_data_t)in_fields[i].check_value,
  286. (jtag_callback_data_t)in_fields[i].check_mask,
  287. (jtag_callback_data_t)in_fields[i].num_bits);
  288. }
  289. if (in_fields[i].allocated)
  290. {
  291. free(in_fields[i].in_value);
  292. }
  293. if (in_fields[i].modified)
  294. {
  295. in_fields[i].in_value = NULL;
  296. }
  297. }
  298. }
  299. void jtag_add_dr_scan_check(int in_num_fields, scan_field_t *in_fields, tap_state_t state)
  300. {
  301. if (jtag_verify)
  302. {
  303. jtag_add_scan_check(jtag_add_dr_scan, in_num_fields, in_fields, state);
  304. } else
  305. {
  306. jtag_add_dr_scan(in_num_fields, in_fields, state);
  307. }
  308. }
  309. void jtag_add_dr_scan(int in_num_fields, const scan_field_t *in_fields,
  310. tap_state_t state)
  311. {
  312. jtag_prelude(state);
  313. int retval;
  314. retval = interface_jtag_add_dr_scan(in_num_fields, in_fields, state);
  315. jtag_set_error(retval);
  316. }
  317. void jtag_add_plain_dr_scan(int in_num_fields, const scan_field_t *in_fields,
  318. tap_state_t state)
  319. {
  320. jtag_prelude(state);
  321. int retval;
  322. retval = interface_jtag_add_plain_dr_scan(in_num_fields, in_fields, state);
  323. jtag_set_error(retval);
  324. }
  325. void jtag_add_dr_out(jtag_tap_t* tap,
  326. int num_fields, const int* num_bits, const u32* value,
  327. tap_state_t end_state)
  328. {
  329. assert(end_state != TAP_INVALID);
  330. cmd_queue_cur_state = end_state;
  331. interface_jtag_add_dr_out(tap,
  332. num_fields, num_bits, value,
  333. end_state);
  334. }
  335. void jtag_add_tlr(void)
  336. {
  337. jtag_prelude(TAP_RESET);
  338. jtag_set_error(interface_jtag_add_tlr());
  339. jtag_call_event_callbacks(JTAG_TRST_ASSERTED);
  340. }
  341. void jtag_add_pathmove(int num_states, const tap_state_t *path)
  342. {
  343. tap_state_t cur_state = cmd_queue_cur_state;
  344. /* the last state has to be a stable state */
  345. if (!tap_is_state_stable(path[num_states - 1]))
  346. {
  347. LOG_ERROR("BUG: TAP path doesn't finish in a stable state");
  348. jtag_set_error(ERROR_JTAG_NOT_STABLE_STATE);
  349. return;
  350. }
  351. for (int i = 0; i < num_states; i++)
  352. {
  353. if (path[i] == TAP_RESET)
  354. {
  355. LOG_ERROR("BUG: TAP_RESET is not a valid state for pathmove sequences");
  356. jtag_set_error(ERROR_JTAG_STATE_INVALID);
  357. return;
  358. }
  359. if ( tap_state_transition(cur_state, true) != path[i]
  360. && tap_state_transition(cur_state, false) != path[i])
  361. {
  362. LOG_ERROR("BUG: %s -> %s isn't a valid TAP transition",
  363. tap_state_name(cur_state), tap_state_name(path[i]));
  364. jtag_set_error(ERROR_JTAG_TRANSITION_INVALID);
  365. return;
  366. }
  367. cur_state = path[i];
  368. }
  369. jtag_checks();
  370. jtag_set_error(interface_jtag_add_pathmove(num_states, path));
  371. cmd_queue_cur_state = path[num_states - 1];
  372. }
  373. void jtag_add_runtest(int num_cycles, tap_state_t state)
  374. {
  375. jtag_prelude(state);
  376. jtag_set_error(interface_jtag_add_runtest(num_cycles, state));
  377. }
  378. void jtag_add_clocks(int num_cycles)
  379. {
  380. if (!tap_is_state_stable(cmd_queue_cur_state))
  381. {
  382. LOG_ERROR("jtag_add_clocks() called with TAP in unstable state \"%s\"",
  383. tap_state_name(cmd_queue_cur_state));
  384. jtag_set_error(ERROR_JTAG_NOT_STABLE_STATE);
  385. return;
  386. }
  387. if (num_cycles > 0)
  388. {
  389. jtag_checks();
  390. jtag_set_error(interface_jtag_add_clocks(num_cycles));
  391. }
  392. }
  393. void jtag_add_reset(int req_tlr_or_trst, int req_srst)
  394. {
  395. int trst_with_tlr = 0;
  396. /* FIX!!! there are *many* different cases here. A better
  397. * approach is needed for legal combinations of transitions...
  398. */
  399. if ((jtag_reset_config & RESET_HAS_SRST)&&
  400. (jtag_reset_config & RESET_HAS_TRST)&&
  401. ((jtag_reset_config & RESET_SRST_PULLS_TRST)==0))
  402. {
  403. if (((req_tlr_or_trst&&!jtag_trst)||
  404. (!req_tlr_or_trst&&jtag_trst))&&
  405. ((req_srst&&!jtag_srst)||
  406. (!req_srst&&jtag_srst)))
  407. {
  408. /* FIX!!! srst_pulls_trst allows 1,1 => 0,0 transition.... */
  409. //LOG_ERROR("BUG: transition of req_tlr_or_trst and req_srst in the same jtag_add_reset() call is undefined");
  410. }
  411. }
  412. /* Make sure that jtag_reset_config allows the requested reset */
  413. /* if SRST pulls TRST, we can't fulfill srst == 1 with trst == 0 */
  414. if (((jtag_reset_config & RESET_SRST_PULLS_TRST) && (req_srst == 1)) && (!req_tlr_or_trst))
  415. {
  416. LOG_ERROR("BUG: requested reset would assert trst");
  417. jtag_set_error(ERROR_FAIL);
  418. return;
  419. }
  420. /* if TRST pulls SRST, we reset with TAP T-L-R */
  421. if (((jtag_reset_config & RESET_TRST_PULLS_SRST) && (req_tlr_or_trst)) && (req_srst == 0))
  422. {
  423. trst_with_tlr = 1;
  424. }
  425. if (req_srst && !(jtag_reset_config & RESET_HAS_SRST))
  426. {
  427. LOG_ERROR("BUG: requested SRST assertion, but the current configuration doesn't support this");
  428. jtag_set_error(ERROR_FAIL);
  429. return;
  430. }
  431. if (req_tlr_or_trst)
  432. {
  433. if (!trst_with_tlr && (jtag_reset_config & RESET_HAS_TRST))
  434. {
  435. jtag_trst = 1;
  436. } else
  437. {
  438. trst_with_tlr = 1;
  439. }
  440. } else
  441. {
  442. jtag_trst = 0;
  443. }
  444. jtag_srst = req_srst;
  445. int retval = interface_jtag_add_reset(jtag_trst, jtag_srst);
  446. if (retval != ERROR_OK)
  447. {
  448. jtag_set_error(retval);
  449. return;
  450. }
  451. jtag_execute_queue();
  452. if (jtag_srst)
  453. {
  454. LOG_DEBUG("SRST line asserted");
  455. }
  456. else
  457. {
  458. LOG_DEBUG("SRST line released");
  459. if (jtag_nsrst_delay)
  460. jtag_add_sleep(jtag_nsrst_delay * 1000);
  461. }
  462. if (trst_with_tlr)
  463. {
  464. LOG_DEBUG("JTAG reset with RESET instead of TRST");
  465. jtag_set_end_state(TAP_RESET);
  466. jtag_add_tlr();
  467. return;
  468. }
  469. if (jtag_trst)
  470. {
  471. /* we just asserted nTRST, so we're now in Test-Logic-Reset,
  472. * and inform possible listeners about this
  473. */
  474. LOG_DEBUG("TRST line asserted");
  475. tap_set_state(TAP_RESET);
  476. jtag_call_event_callbacks(JTAG_TRST_ASSERTED);
  477. }
  478. else
  479. {
  480. if (jtag_ntrst_delay)
  481. jtag_add_sleep(jtag_ntrst_delay * 1000);
  482. }
  483. }
  484. tap_state_t jtag_set_end_state(tap_state_t state)
  485. {
  486. if ((state == TAP_DRSHIFT)||(state == TAP_IRSHIFT))
  487. {
  488. LOG_ERROR("BUG: TAP_DRSHIFT/IRSHIFT can't be end state. Calling code should use a larger scan field");
  489. }
  490. if (state!=TAP_INVALID)
  491. cmd_queue_end_state = state;
  492. return cmd_queue_end_state;
  493. }
  494. tap_state_t jtag_get_end_state(void)
  495. {
  496. return cmd_queue_end_state;
  497. }
  498. void jtag_add_sleep(u32 us)
  499. {
  500. /// @todo Here, keep_alive() appears to be a layering violation!!!
  501. keep_alive();
  502. jtag_set_error(interface_jtag_add_sleep(us));
  503. }
  504. int jtag_check_value_inner(u8 *captured, u8 *in_check_value, u8 *in_check_mask, int num_bits)
  505. {
  506. int retval = ERROR_OK;
  507. int compare_failed = 0;
  508. if (in_check_mask)
  509. compare_failed = buf_cmp_mask(captured, in_check_value, in_check_mask, num_bits);
  510. else
  511. compare_failed = buf_cmp(captured, in_check_value, num_bits);
  512. if (compare_failed){
  513. /* An error handler could have caught the failing check
  514. * only report a problem when there wasn't a handler, or if the handler
  515. * acknowledged the error
  516. */
  517. /*
  518. LOG_WARNING("TAP %s:",
  519. jtag_tap_name(field->tap));
  520. */
  521. if (compare_failed)
  522. {
  523. char *captured_char = buf_to_str(captured, (num_bits > DEBUG_JTAG_IOZ) ? DEBUG_JTAG_IOZ : num_bits, 16);
  524. char *in_check_value_char = buf_to_str(in_check_value, (num_bits > DEBUG_JTAG_IOZ) ? DEBUG_JTAG_IOZ : num_bits, 16);
  525. if (in_check_mask)
  526. {
  527. char *in_check_mask_char;
  528. in_check_mask_char = buf_to_str(in_check_mask, (num_bits > DEBUG_JTAG_IOZ) ? DEBUG_JTAG_IOZ : num_bits, 16);
  529. LOG_WARNING("value captured during scan didn't pass the requested check:");
  530. LOG_WARNING("captured: 0x%s check_value: 0x%s check_mask: 0x%s",
  531. captured_char, in_check_value_char, in_check_mask_char);
  532. free(in_check_mask_char);
  533. }
  534. else
  535. {
  536. LOG_WARNING("value captured during scan didn't pass the requested check: captured: 0x%s check_value: 0x%s", captured_char, in_check_value_char);
  537. }
  538. free(captured_char);
  539. free(in_check_value_char);
  540. retval = ERROR_JTAG_QUEUE_FAILED;
  541. }
  542. }
  543. return retval;
  544. }
  545. void jtag_check_value_mask(scan_field_t *field, u8 *value, u8 *mask)
  546. {
  547. assert(field->in_value != NULL);
  548. if (value==NULL)
  549. {
  550. /* no checking to do */
  551. return;
  552. }
  553. jtag_execute_queue_noclear();
  554. int retval=jtag_check_value_inner(field->in_value, value, mask, field->num_bits);
  555. jtag_set_error(retval);
  556. }
  557. int default_interface_jtag_execute_queue(void)
  558. {
  559. if (NULL == jtag)
  560. {
  561. LOG_ERROR("No JTAG interface configured yet. "
  562. "Issue 'init' command in startup scripts "
  563. "before communicating with targets.");
  564. return ERROR_FAIL;
  565. }
  566. return jtag->execute_queue();
  567. }
  568. void jtag_execute_queue_noclear(void)
  569. {
  570. jtag_flush_queue_count++;
  571. jtag_set_error(interface_jtag_execute_queue());
  572. }
  573. int jtag_get_flush_queue_count(void)
  574. {
  575. return jtag_flush_queue_count;
  576. }
  577. int jtag_execute_queue(void)
  578. {
  579. jtag_execute_queue_noclear();
  580. return jtag_error_clear();
  581. }
  582. static int jtag_reset_callback(enum jtag_event event, void *priv)
  583. {
  584. jtag_tap_t *tap = priv;
  585. LOG_DEBUG("-");
  586. if (event == JTAG_TRST_ASSERTED)
  587. {
  588. buf_set_ones(tap->cur_instr, tap->ir_length);
  589. tap->bypass = 1;
  590. }
  591. return ERROR_OK;
  592. }
  593. void jtag_sleep(u32 us)
  594. {
  595. alive_sleep(us/1000);
  596. }
  597. /// maximum number of JTAG devices expected in the chain
  598. #define JTAG_MAX_CHAIN_SIZE 20
  599. #define EXTRACT_MFG(X) (((X) & 0xffe) >> 1)
  600. #define EXTRACT_PART(X) (((X) & 0xffff000) >> 12)
  601. #define EXTRACT_VER(X) (((X) & 0xf0000000) >> 28)
  602. static int jtag_examine_chain_execute(u8 *idcode_buffer, unsigned num_idcode)
  603. {
  604. scan_field_t field = {
  605. .tap = NULL,
  606. .num_bits = num_idcode * 32,
  607. .out_value = idcode_buffer,
  608. .in_value = idcode_buffer,
  609. };
  610. // initialize to the end of chain ID value
  611. for (unsigned i = 0; i < JTAG_MAX_CHAIN_SIZE; i++)
  612. buf_set_u32(idcode_buffer, i * 32, 32, 0x000000FF);
  613. jtag_add_plain_dr_scan(1, &field, TAP_RESET);
  614. return jtag_execute_queue();
  615. }
  616. static bool jtag_examine_chain_check(u8 *idcodes, unsigned count)
  617. {
  618. u8 zero_check = 0x0;
  619. u8 one_check = 0xff;
  620. for (unsigned i = 0; i < count * 4; i++)
  621. {
  622. zero_check |= idcodes[i];
  623. one_check &= idcodes[i];
  624. }
  625. /* if there wasn't a single non-zero bit or if all bits were one,
  626. * the scan is not valid */
  627. if (zero_check == 0x00 || one_check == 0xff)
  628. {
  629. LOG_ERROR("JTAG communication failure: check connection, "
  630. "JTAG interface, target power etc.");
  631. return false;
  632. }
  633. return true;
  634. }
  635. static void jtag_examine_chain_display(enum log_levels level, const char *msg,
  636. const char *name, u32 idcode)
  637. {
  638. log_printf_lf(level, __FILE__, __LINE__, __FUNCTION__,
  639. "JTAG tap: %s %16.16s: 0x%08x "
  640. "(mfg: 0x%3.3x, part: 0x%4.4x, ver: 0x%1.1x)",
  641. name, msg, idcode,
  642. EXTRACT_MFG(idcode), EXTRACT_PART(idcode), EXTRACT_VER(idcode) );
  643. }
  644. static bool jtag_idcode_is_final(u32 idcode)
  645. {
  646. return idcode == 0x000000FF || idcode == 0xFFFFFFFF;
  647. }
  648. /**
  649. * This helper checks that remaining bits in the examined chain data are
  650. * all as expected, but a single JTAG device requires only 64 bits to be
  651. * read back correctly. This can help identify and diagnose problems
  652. * with the JTAG chain earlier, gives more helpful/explicit error messages.
  653. */
  654. static void jtag_examine_chain_end(u8 *idcodes, unsigned count, unsigned max)
  655. {
  656. bool triggered = false;
  657. for ( ; count < max - 31; count += 32)
  658. {
  659. u32 idcode = buf_get_u32(idcodes, count, 32);
  660. // do not trigger the warning if the data looks good
  661. if (!triggered && jtag_idcode_is_final(idcode))
  662. continue;
  663. LOG_WARNING("Unexpected idcode after end of chain: %d 0x%08x",
  664. count, idcode);
  665. triggered = true;
  666. }
  667. }
  668. static bool jtag_examine_chain_match_tap(const struct jtag_tap_s *tap)
  669. {
  670. if (0 == tap->expected_ids_cnt)
  671. {
  672. /// @todo Enable LOG_INFO to ask for reports about unknown TAP IDs.
  673. #if 0
  674. LOG_INFO("Uknown JTAG TAP ID: 0x%08x", tap->idcode)
  675. LOG_INFO("Please report the chip name and reported ID code to the openocd project");
  676. #endif
  677. return true;
  678. }
  679. /* Loop over the expected identification codes and test for a match */
  680. u8 ii;
  681. for (ii = 0; ii < tap->expected_ids_cnt; ii++)
  682. {
  683. if (tap->idcode == tap->expected_ids[ii])
  684. break;
  685. }
  686. /* If none of the expected ids matched, log an error */
  687. if (ii != tap->expected_ids_cnt)
  688. {
  689. LOG_INFO("JTAG Tap/device matched");
  690. return true;
  691. }
  692. jtag_examine_chain_display(LOG_LVL_ERROR, "got",
  693. tap->dotted_name, tap->idcode);
  694. for (ii = 0; ii < tap->expected_ids_cnt; ii++)
  695. {
  696. char msg[32];
  697. snprintf(msg, sizeof(msg), "expected %hhu of %hhu",
  698. ii + 1, tap->expected_ids_cnt);
  699. jtag_examine_chain_display(LOG_LVL_ERROR, msg,
  700. tap->dotted_name, tap->expected_ids[ii]);
  701. }
  702. return false;
  703. }
  704. /* Try to examine chain layout according to IEEE 1149.1 §12
  705. */
  706. int jtag_examine_chain(void)
  707. {
  708. u8 idcode_buffer[JTAG_MAX_CHAIN_SIZE * 4];
  709. unsigned device_count = 0;
  710. jtag_examine_chain_execute(idcode_buffer, JTAG_MAX_CHAIN_SIZE);
  711. if (!jtag_examine_chain_check(idcode_buffer, JTAG_MAX_CHAIN_SIZE))
  712. return ERROR_JTAG_INIT_FAILED;
  713. /* point at the 1st tap */
  714. jtag_tap_t *tap = jtag_tap_next_enabled(NULL);
  715. if (tap == NULL)
  716. {
  717. LOG_ERROR("JTAG: No taps enabled?");
  718. return ERROR_JTAG_INIT_FAILED;
  719. }
  720. for (unsigned bit_count = 0; bit_count < (JTAG_MAX_CHAIN_SIZE * 32) - 31;)
  721. {
  722. u32 idcode = buf_get_u32(idcode_buffer, bit_count, 32);
  723. if ((idcode & 1) == 0)
  724. {
  725. /* LSB must not be 0, this indicates a device in bypass */
  726. LOG_WARNING("Tap/Device does not have IDCODE");
  727. idcode = 0;
  728. bit_count += 1;
  729. }
  730. else
  731. {
  732. /*
  733. * End of chain (invalid manufacturer ID) some devices, such
  734. * as AVR will output all 1's instead of TDI input value at
  735. * end of chain.
  736. */
  737. if (jtag_idcode_is_final(idcode))
  738. {
  739. jtag_examine_chain_end(idcode_buffer,
  740. bit_count + 32, JTAG_MAX_CHAIN_SIZE * 32);
  741. break;
  742. }
  743. jtag_examine_chain_display(LOG_LVL_INFO, "tap/device found",
  744. tap ? tap->dotted_name : "(not-named)",
  745. idcode);
  746. bit_count += 32;
  747. }
  748. device_count++;
  749. if (!tap)
  750. continue;
  751. tap->idcode = idcode;
  752. // ensure the TAP ID does matches what was expected
  753. if (!jtag_examine_chain_match_tap(tap))
  754. return ERROR_JTAG_INIT_FAILED;
  755. tap = jtag_tap_next_enabled(tap);
  756. }
  757. /* see if number of discovered devices matches configuration */
  758. if (device_count != jtag_tap_count_enabled())
  759. {
  760. LOG_ERROR("number of discovered devices in JTAG chain (%i) "
  761. "does not match (enabled) configuration (%i), total taps: %d",
  762. device_count, jtag_tap_count_enabled(), jtag_tap_count());
  763. LOG_ERROR("check the config file and ensure proper JTAG communication"
  764. " (connections, speed, ...)");
  765. return ERROR_JTAG_INIT_FAILED;
  766. }
  767. return ERROR_OK;
  768. }
  769. int jtag_validate_chain(void)
  770. {
  771. jtag_tap_t *tap;
  772. int total_ir_length = 0;
  773. u8 *ir_test = NULL;
  774. scan_field_t field;
  775. int chain_pos = 0;
  776. tap = NULL;
  777. total_ir_length = 0;
  778. for(;;){
  779. tap = jtag_tap_next_enabled(tap);
  780. if( tap == NULL ){
  781. break;
  782. }
  783. total_ir_length += tap->ir_length;
  784. }
  785. total_ir_length += 2;
  786. ir_test = malloc(CEIL(total_ir_length, 8));
  787. buf_set_ones(ir_test, total_ir_length);
  788. field.tap = NULL;
  789. field.num_bits = total_ir_length;
  790. field.out_value = ir_test;
  791. field.in_value = ir_test;
  792. jtag_add_plain_ir_scan(1, &field, TAP_RESET);
  793. jtag_execute_queue();
  794. tap = NULL;
  795. chain_pos = 0;
  796. int val;
  797. for(;;){
  798. tap = jtag_tap_next_enabled(tap);
  799. if( tap == NULL ){
  800. break;
  801. }
  802. val = buf_get_u32(ir_test, chain_pos, 2);
  803. if (val != 0x1)
  804. {
  805. char *cbuf = buf_to_str(ir_test, total_ir_length, 16);
  806. LOG_ERROR("Could not validate JTAG scan chain, IR mismatch, scan returned 0x%s. tap=%s pos=%d expected 0x1 got %0x", cbuf, jtag_tap_name(tap), chain_pos, val);
  807. free(cbuf);
  808. free(ir_test);
  809. return ERROR_JTAG_INIT_FAILED;
  810. }
  811. chain_pos += tap->ir_length;
  812. }
  813. val = buf_get_u32(ir_test, chain_pos, 2);
  814. if (val != 0x3)
  815. {
  816. char *cbuf = buf_to_str(ir_test, total_ir_length, 16);
  817. LOG_ERROR("Could not validate end of JTAG scan chain, IR mismatch, scan returned 0x%s. pos=%d expected 0x3 got %0x", cbuf, chain_pos, val);
  818. free(cbuf);
  819. free(ir_test);
  820. return ERROR_JTAG_INIT_FAILED;
  821. }
  822. free(ir_test);
  823. return ERROR_OK;
  824. }
  825. void jtag_tap_init(jtag_tap_t *tap)
  826. {
  827. assert(0 != tap->ir_length);
  828. tap->expected = malloc(tap->ir_length);
  829. tap->expected_mask = malloc(tap->ir_length);
  830. tap->cur_instr = malloc(tap->ir_length);
  831. buf_set_u32(tap->expected, 0, tap->ir_length, tap->ir_capture_value);
  832. buf_set_u32(tap->expected_mask, 0, tap->ir_length, tap->ir_capture_mask);
  833. buf_set_ones(tap->cur_instr, tap->ir_length);
  834. // place TAP in bypass mode
  835. tap->bypass = 1;
  836. // register the reset callback for the TAP
  837. jtag_register_event_callback(&jtag_reset_callback, tap);
  838. LOG_DEBUG("Created Tap: %s @ abs position %d, "
  839. "irlen %d, capture: 0x%x mask: 0x%x", tap->dotted_name,
  840. tap->abs_chain_position, tap->ir_length,
  841. tap->ir_capture_value, tap->ir_capture_mask);
  842. jtag_tap_add(tap);
  843. }
  844. void jtag_tap_free(jtag_tap_t *tap)
  845. {
  846. /// @todo is anything missing? no memory leaks please
  847. free((void *)tap->expected_ids);
  848. free((void *)tap->chip);
  849. free((void *)tap->tapname);
  850. free((void *)tap->dotted_name);
  851. free(tap);
  852. }
  853. int jtag_interface_init(struct command_context_s *cmd_ctx)
  854. {
  855. if (jtag)
  856. return ERROR_OK;
  857. if (!jtag_interface)
  858. {
  859. /* nothing was previously specified by "interface" command */
  860. LOG_ERROR("JTAG interface has to be specified, see \"interface\" command");
  861. return ERROR_JTAG_INVALID_INTERFACE;
  862. }
  863. if(hasKHz)
  864. {
  865. jtag_interface->khz(jtag_get_speed_khz(), &jtag_speed);
  866. hasKHz = false;
  867. }
  868. if (jtag_interface->init() != ERROR_OK)
  869. return ERROR_JTAG_INIT_FAILED;
  870. jtag = jtag_interface;
  871. return ERROR_OK;
  872. }
  873. static int jtag_init_inner(struct command_context_s *cmd_ctx)
  874. {
  875. jtag_tap_t *tap;
  876. int retval;
  877. LOG_DEBUG("Init JTAG chain");
  878. tap = jtag_tap_next_enabled(NULL);
  879. if( tap == NULL ){
  880. LOG_ERROR("There are no enabled taps?");
  881. return ERROR_JTAG_INIT_FAILED;
  882. }
  883. jtag_add_tlr();
  884. if ((retval=jtag_execute_queue())!=ERROR_OK)
  885. return retval;
  886. /* examine chain first, as this could discover the real chain layout */
  887. if (jtag_examine_chain() != ERROR_OK)
  888. {
  889. LOG_ERROR("trying to validate configured JTAG chain anyway...");
  890. }
  891. if (jtag_validate_chain() != ERROR_OK)
  892. {
  893. LOG_WARNING("Could not validate JTAG chain, continuing anyway...");
  894. }
  895. return ERROR_OK;
  896. }
  897. int jtag_interface_quit(void)
  898. {
  899. if (!jtag || !jtag->quit)
  900. return ERROR_OK;
  901. // close the JTAG interface
  902. int result = jtag->quit();
  903. if (ERROR_OK != result)
  904. LOG_ERROR("failed: %d", result);
  905. return ERROR_OK;
  906. }
  907. int jtag_init_reset(struct command_context_s *cmd_ctx)
  908. {
  909. int retval;
  910. if ((retval=jtag_interface_init(cmd_ctx)) != ERROR_OK)
  911. return retval;
  912. LOG_DEBUG("Trying to bring the JTAG controller to life by asserting TRST / RESET");
  913. /* Reset can happen after a power cycle.
  914. *
  915. * Ideally we would only assert TRST or run RESET before the target reset.
  916. *
  917. * However w/srst_pulls_trst, trst is asserted together with the target
  918. * reset whether we want it or not.
  919. *
  920. * NB! Some targets have JTAG circuitry disabled until a
  921. * trst & srst has been asserted.
  922. *
  923. * NB! here we assume nsrst/ntrst delay are sufficient!
  924. *
  925. * NB! order matters!!!! srst *can* disconnect JTAG circuitry
  926. *
  927. */
  928. jtag_add_reset(1, 0); /* RESET or TRST */
  929. if (jtag_reset_config & RESET_HAS_SRST)
  930. {
  931. jtag_add_reset(1, 1);
  932. if ((jtag_reset_config & RESET_SRST_PULLS_TRST)==0)
  933. jtag_add_reset(0, 1);
  934. }
  935. jtag_add_reset(0, 0);
  936. if ((retval = jtag_execute_queue()) != ERROR_OK)
  937. return retval;
  938. /* Check that we can communication on the JTAG chain + eventually we want to
  939. * be able to perform enumeration only after OpenOCD has started
  940. * telnet and GDB server
  941. *
  942. * That would allow users to more easily perform any magic they need to before
  943. * reset happens.
  944. */
  945. return jtag_init_inner(cmd_ctx);
  946. }
  947. int jtag_init(struct command_context_s *cmd_ctx)
  948. {
  949. int retval;
  950. if ((retval=jtag_interface_init(cmd_ctx)) != ERROR_OK)
  951. return retval;
  952. if (jtag_init_inner(cmd_ctx)==ERROR_OK)
  953. {
  954. return ERROR_OK;
  955. }
  956. return jtag_init_reset(cmd_ctx);
  957. }
  958. void jtag_set_speed_khz(unsigned khz)
  959. {
  960. speed_khz = khz;
  961. }
  962. unsigned jtag_get_speed_khz(void)
  963. {
  964. return speed_khz;
  965. }
  966. int jtag_get_speed(void)
  967. {
  968. return jtag_speed;
  969. }
  970. int jtag_set_speed(int speed)
  971. {
  972. jtag_speed = speed;
  973. /* this command can be called during CONFIG,
  974. * in which case jtag isn't initialized */
  975. return jtag ? jtag->speed(speed) : ERROR_OK;
  976. }
  977. void jtag_set_verify(bool enable)
  978. {
  979. jtag_verify = enable;
  980. }
  981. bool jtag_will_verify()
  982. {
  983. return jtag_verify;
  984. }
  985. int jtag_power_dropout(int *dropout)
  986. {
  987. return jtag->power_dropout(dropout);
  988. }
  989. int jtag_srst_asserted(int *srst_asserted)
  990. {
  991. return jtag->srst_asserted(srst_asserted);
  992. }
  993. void jtag_tap_handle_event( jtag_tap_t * tap, enum jtag_tap_event e)
  994. {
  995. jtag_tap_event_action_t * jteap;
  996. int done;
  997. jteap = tap->event_action;
  998. done = 0;
  999. while (jteap) {
  1000. if (jteap->event == e) {
  1001. done = 1;
  1002. LOG_DEBUG( "JTAG tap: %s event: %d (%s) action: %s\n",
  1003. tap->dotted_name,
  1004. e,
  1005. Jim_Nvp_value2name_simple(nvp_jtag_tap_event, e)->name,
  1006. Jim_GetString(jteap->body, NULL) );
  1007. if (Jim_EvalObj(interp, jteap->body) != JIM_OK) {
  1008. Jim_PrintErrorMessage(interp);
  1009. }
  1010. }
  1011. jteap = jteap->next;
  1012. }
  1013. if (!done) {
  1014. LOG_DEBUG( "event %d %s - no action",
  1015. e,
  1016. Jim_Nvp_value2name_simple( nvp_jtag_tap_event, e)->name);
  1017. }
  1018. }
  1019. int jtag_add_statemove(tap_state_t goal_state)
  1020. {
  1021. tap_state_t cur_state = cmd_queue_cur_state;
  1022. LOG_DEBUG( "cur_state=%s goal_state=%s",
  1023. tap_state_name(cur_state),
  1024. tap_state_name(goal_state) );
  1025. if (goal_state==cur_state )
  1026. ; /* nothing to do */
  1027. else if( goal_state==TAP_RESET )
  1028. {
  1029. jtag_add_tlr();
  1030. }
  1031. else if( tap_is_state_stable(cur_state) && tap_is_state_stable(goal_state) )
  1032. {
  1033. unsigned tms_bits = tap_get_tms_path(cur_state, goal_state);
  1034. unsigned tms_count = tap_get_tms_path_len(cur_state, goal_state);
  1035. tap_state_t moves[8];
  1036. assert(tms_count < DIM(moves));
  1037. for (unsigned i = 0; i < tms_count; i++, tms_bits >>= 1)
  1038. {
  1039. bool bit = tms_bits & 1;
  1040. cur_state = tap_state_transition(cur_state, bit);
  1041. moves[i] = cur_state;
  1042. }
  1043. jtag_add_pathmove(tms_count, moves);
  1044. }
  1045. else if( tap_state_transition(cur_state, true) == goal_state
  1046. || tap_state_transition(cur_state, false) == goal_state )
  1047. {
  1048. jtag_add_pathmove(1, &goal_state);
  1049. }
  1050. else
  1051. return ERROR_FAIL;
  1052. return ERROR_OK;
  1053. }
  1054. enum reset_types jtag_get_reset_config(void)
  1055. {
  1056. return jtag_reset_config;
  1057. }
  1058. void jtag_set_reset_config(enum reset_types type)
  1059. {
  1060. jtag_reset_config = type;
  1061. }
  1062. int jtag_get_trst(void)
  1063. {
  1064. return jtag_trst;
  1065. }
  1066. int jtag_get_srst(void)
  1067. {
  1068. return jtag_srst;
  1069. }
  1070. void jtag_set_nsrst_delay(unsigned delay)
  1071. {
  1072. jtag_nsrst_delay = delay;
  1073. }
  1074. unsigned jtag_get_nsrst_delay(void)
  1075. {
  1076. return jtag_nsrst_delay;
  1077. }
  1078. void jtag_set_ntrst_delay(unsigned delay)
  1079. {
  1080. jtag_ntrst_delay = delay;
  1081. }
  1082. unsigned jtag_get_ntrst_delay(void)
  1083. {
  1084. return jtag_ntrst_delay;
  1085. }