summaryrefslogtreecommitdiff
path: root/src/target
diff options
context:
space:
mode:
Diffstat (limited to 'src/target')
-rw-r--r--src/target/arm11_dbgtap.c34
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;
}