From aea22bdbd14ce3d3641884bde68e228882fbd546 Mon Sep 17 00:00:00 2001 From: Aaron Carroll Date: Mon, 24 Jan 2011 18:06:44 +1100 Subject: [PATCH] Add '-coreid' target option to support multiple cores per TAP. ARM Cortex-A9 multi-core chips expose a single TAP/DAP which connects to both cores. The '-coreid' option selects which core the target should connect to. Note that at present, OpenOCD can connect to either core, but not both simulatenously, until ADI contexts can be shared. Signed-off-by: Aaron Carroll --- src/target/target.c | 22 ++++++++++++++++++++++ src/target/target.h | 1 + 2 files changed, 23 insertions(+) diff --git a/src/target/target.c b/src/target/target.c index 820e7471ae..31ade6acff 100644 --- a/src/target/target.c +++ b/src/target/target.c @@ -3660,6 +3660,7 @@ enum target_cfg_param { TCFG_WORK_AREA_BACKUP, TCFG_ENDIAN, TCFG_VARIANT, + TCFG_COREID, TCFG_CHAIN_POSITION, }; @@ -3672,6 +3673,7 @@ static Jim_Nvp nvp_config_opts[] = { { .name = "-work-area-backup", .value = TCFG_WORK_AREA_BACKUP }, { .name = "-endian" , .value = TCFG_ENDIAN }, { .name = "-variant", .value = TCFG_VARIANT }, + { .name = "-coreid", .value = TCFG_COREID }, { .name = "-chain-position", .value = TCFG_CHAIN_POSITION }, { .name = NULL, .value = -1 } @@ -3924,6 +3926,23 @@ static int target_configure(Jim_GetOptInfo *goi, struct target *target) Jim_SetResultString(goi->interp, target->variant,-1); /* loop for more */ break; + + case TCFG_COREID: + if (goi->isconfigure) { + e = Jim_GetOpt_Wide(goi, &w); + if (e != JIM_OK) { + return e; + } + target->coreid = (int)w; + } else { + if (goi->argc != 0) { + goto no_params; + } + } + Jim_SetResult(goi->interp, Jim_NewIntObj(goi->interp, target->working_area_size)); + /* loop for more */ + break; + case TCFG_CHAIN_POSITION: if (goi->isconfigure) { Jim_Obj *o_t; @@ -4634,6 +4653,9 @@ static int target_create(Jim_GetOptInfo *goi) /* will be set by "-endian" */ target->endianness = TARGET_ENDIAN_UNKNOWN; + /* default to first core, override with -coreid */ + target->coreid = 0; + target->working_area = 0x0; target->working_area_size = 0x0; target->working_areas = NULL; diff --git a/src/target/target.h b/src/target/target.h index 4d03018e70..2c6f4cd50d 100644 --- a/src/target/target.h +++ b/src/target/target.h @@ -107,6 +107,7 @@ struct target const char *cmd_name; /* tcl Name of target */ int target_number; /* DO NOT USE! field to be removed in 2010 */ struct jtag_tap *tap; /* where on the jtag chain is this */ + int coreid; /* which device on the TAP? */ const char *variant; /* what variant of this chip is it? */ /** -- 2.30.2