diff options
Diffstat (limited to 'src/target')
-rw-r--r-- | src/target/arm11_dbgtap.c | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/src/target/arm11_dbgtap.c b/src/target/arm11_dbgtap.c index 7e5bd847..54e7ae65 100644 --- a/src/target/arm11_dbgtap.c +++ b/src/target/arm11_dbgtap.c @@ -576,7 +576,15 @@ int arm11_run_instr_data_to_core_noack(arm11_common_t * arm11, uint32_t opcode, arm11_setup_field(arm11, 1, NULL, NULL /*&Ready*/, chain5_fields + 1); arm11_setup_field(arm11, 1, NULL, NULL, chain5_fields + 2); - uint8_t Readies[count + 1]; + uint8_t *Readies; + int bytes = sizeof(*Readies)*(count + 1); + Readies = (uint8_t *) malloc(bytes); + if (Readies == NULL) + { + LOG_ERROR("Out of memory allocating %d bytes", bytes); + return ERROR_FAIL; + } + uint8_t * ReadyPos = Readies; while (count--) @@ -603,22 +611,28 @@ int arm11_run_instr_data_to_core_noack(arm11_common_t * arm11, uint32_t opcode, arm11_add_dr_scan_vc(asizeof(chain5_fields), chain5_fields, TAP_DRPAUSE); - CHECK_RETVAL(jtag_execute_queue()); + int retval = jtag_execute_queue(); + if (retval == ERROR_OK) + { - size_t error_count = 0; + size_t error_count = 0; - for (size_t i = 0; i < asizeof(Readies); i++) - { - if (Readies[i] != 1) + for (size_t i = 0; i < asizeof(Readies); i++) { - error_count++; + if (Readies[i] != 1) + { + error_count++; + } } + + if (error_count) + LOG_ERROR("Transfer errors " ZU, error_count); + } - if (error_count) - LOG_ERROR("Transfer errors " ZU, error_count); + free(Readies); - return ERROR_OK; + return retval; } |