target/aarch64: Use apnum setting
Change aarch64 to use ap-num setting if provided. Fall back to original behavior of using first AP when ap-num is invalid. Change-Id: I0d3624f75c86ba5fd5a322ac60856dbbb6e71eaf Signed-off-by: Kevin Yang <kangyang@google.com> Reviewed-on: http://openocd.zylin.com/5831 Tested-by: jenkins Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
This commit is contained in:
parent
9a877a83a1
commit
63d3640add
|
@ -2248,7 +2248,7 @@ static int aarch64_examine_first(struct target *target)
|
||||||
struct aarch64_common *aarch64 = target_to_aarch64(target);
|
struct aarch64_common *aarch64 = target_to_aarch64(target);
|
||||||
struct armv8_common *armv8 = &aarch64->armv8_common;
|
struct armv8_common *armv8 = &aarch64->armv8_common;
|
||||||
struct adiv5_dap *swjdp = armv8->arm.dap;
|
struct adiv5_dap *swjdp = armv8->arm.dap;
|
||||||
struct aarch64_private_config *pc;
|
struct aarch64_private_config *pc = target->private_config;
|
||||||
int i;
|
int i;
|
||||||
int retval = ERROR_OK;
|
int retval = ERROR_OK;
|
||||||
uint64_t debug, ttypr;
|
uint64_t debug, ttypr;
|
||||||
|
@ -2256,11 +2256,18 @@ static int aarch64_examine_first(struct target *target)
|
||||||
uint32_t tmp0, tmp1, tmp2, tmp3;
|
uint32_t tmp0, tmp1, tmp2, tmp3;
|
||||||
debug = ttypr = cpuid = 0;
|
debug = ttypr = cpuid = 0;
|
||||||
|
|
||||||
/* Search for the APB-AB - it is needed for access to debug registers */
|
if (pc == NULL)
|
||||||
retval = dap_find_ap(swjdp, AP_TYPE_APB_AP, &armv8->debug_ap);
|
return ERROR_FAIL;
|
||||||
if (retval != ERROR_OK) {
|
|
||||||
LOG_ERROR("Could not find APB-AP for debug access");
|
if (pc->adiv5_config.ap_num == DP_APSEL_INVALID) {
|
||||||
return retval;
|
/* Search for the APB-AB */
|
||||||
|
retval = dap_find_ap(swjdp, AP_TYPE_APB_AP, &armv8->debug_ap);
|
||||||
|
if (retval != ERROR_OK) {
|
||||||
|
LOG_ERROR("Could not find APB-AP for debug access");
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
armv8->debug_ap = dap_ap(swjdp, pc->adiv5_config.ap_num);
|
||||||
}
|
}
|
||||||
|
|
||||||
retval = mem_ap_init(armv8->debug_ap);
|
retval = mem_ap_init(armv8->debug_ap);
|
||||||
|
@ -2335,10 +2342,6 @@ static int aarch64_examine_first(struct target *target)
|
||||||
LOG_DEBUG("ttypr = 0x%08" PRIx64, ttypr);
|
LOG_DEBUG("ttypr = 0x%08" PRIx64, ttypr);
|
||||||
LOG_DEBUG("debug = 0x%08" PRIx64, debug);
|
LOG_DEBUG("debug = 0x%08" PRIx64, debug);
|
||||||
|
|
||||||
if (target->private_config == NULL)
|
|
||||||
return ERROR_FAIL;
|
|
||||||
|
|
||||||
pc = (struct aarch64_private_config *)target->private_config;
|
|
||||||
if (pc->cti == NULL)
|
if (pc->cti == NULL)
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
|
|
||||||
|
@ -2491,6 +2494,7 @@ static int aarch64_jim_configure(struct target *target, Jim_GetOptInfo *goi)
|
||||||
pc = (struct aarch64_private_config *)target->private_config;
|
pc = (struct aarch64_private_config *)target->private_config;
|
||||||
if (pc == NULL) {
|
if (pc == NULL) {
|
||||||
pc = calloc(1, sizeof(struct aarch64_private_config));
|
pc = calloc(1, sizeof(struct aarch64_private_config));
|
||||||
|
pc->adiv5_config.ap_num = DP_APSEL_INVALID;
|
||||||
target->private_config = pc;
|
target->private_config = pc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue