arm_debug: Support multiple APs per DAP and remove DAP from armv7* structs
Separate out the values from adiv5_dap that are associated with a specific AP into a new struct, so we can properly support multiple APs. Remove the DAP struct from the armv7* structs, because we can have multiple CPUs per DAP, and we shouldn't have multiple DAP structs. Tidy up a few places where ap_current is used incorrectly. Change-Id: I0c6ef4b49cc86b140366347aaf9b76c07cbab0a8 Signed-off-by: Patrick Stewart <patstew@gmail.com> Reviewed-on: http://openocd.zylin.com/2984 Tested-by: jenkins Reviewed-by: Matthias Welwarsky <matthias@welwarsky.de> Reviewed-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
This commit is contained in:
committed by
Andreas Fritiofson
parent
67f24e6734
commit
bf4cf76631
@@ -459,7 +459,7 @@ static void bitbang_swd_read_reg(struct adiv5_dap *dap, uint8_t cmd, uint32_t *v
|
||||
if (value)
|
||||
*value = data;
|
||||
if (cmd & SWD_CMD_APnDP)
|
||||
bitbang_exchange(true, NULL, 0, dap->memaccess_tck);
|
||||
bitbang_exchange(true, NULL, 0, dap->ap[dap_ap_get_select(dap)].memaccess_tck);
|
||||
return;
|
||||
case SWD_ACK_WAIT:
|
||||
LOG_DEBUG("SWD_ACK_WAIT");
|
||||
@@ -511,7 +511,7 @@ static void bitbang_swd_write_reg(struct adiv5_dap *dap, uint8_t cmd, uint32_t v
|
||||
switch (ack) {
|
||||
case SWD_ACK_OK:
|
||||
if (cmd & SWD_CMD_APnDP)
|
||||
bitbang_exchange(true, NULL, 0, dap->memaccess_tck);
|
||||
bitbang_exchange(true, NULL, 0, dap->ap[dap_ap_get_select(dap)].memaccess_tck);
|
||||
return;
|
||||
case SWD_ACK_WAIT:
|
||||
LOG_DEBUG("SWD_ACK_WAIT");
|
||||
|
||||
@@ -1057,7 +1057,7 @@ static void ftdi_swd_queue_cmd(struct adiv5_dap *dap, uint8_t cmd, uint32_t *dst
|
||||
|
||||
/* Insert idle cycles after AP accesses to avoid WAIT */
|
||||
if (cmd & SWD_CMD_APnDP)
|
||||
mpsse_clock_data_out(mpsse_ctx, NULL, 0, dap->memaccess_tck, SWD_MODE);
|
||||
mpsse_clock_data_out(mpsse_ctx, NULL, 0, dap->ap[dap_ap_get_select(dap)].memaccess_tck, SWD_MODE);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -1853,9 +1853,8 @@ static void jlink_swd_queue_cmd(struct adiv5_dap *dap, uint8_t cmd,
|
||||
uint32_t *dst, uint32_t data)
|
||||
{
|
||||
uint8_t data_parity_trn[DIV_ROUND_UP(32 + 1, 8)];
|
||||
|
||||
if (tap_length + 46 + 8 + dap->memaccess_tck >= swd_buffer_size * 8 ||
|
||||
pending_scan_results_length == MAX_PENDING_SCAN_RESULTS) {
|
||||
if (tap_length + 46 + 8 + dap->ap[dap_ap_get_select(dap)].memaccess_tck >= sizeof(tdi_buffer) * 8 ||
|
||||
pending_scan_results_length == MAX_PENDING_SCAN_RESULTS) {
|
||||
/* Not enough room in the queue. Run the queue. */
|
||||
queued_retval = jlink_swd_run_queue(dap);
|
||||
}
|
||||
@@ -1890,7 +1889,7 @@ static void jlink_swd_queue_cmd(struct adiv5_dap *dap, uint8_t cmd,
|
||||
|
||||
/* Insert idle cycles after AP accesses to avoid WAIT. */
|
||||
if (cmd & SWD_CMD_APnDP)
|
||||
jlink_queue_data_out(NULL, dap->memaccess_tck);
|
||||
jlink_queue_data_out(NULL, dap->ap[dap_ap_get_select(dap)].memaccess_tck);
|
||||
}
|
||||
|
||||
static const struct swd_driver jlink_swd = {
|
||||
|
||||
Reference in New Issue
Block a user