summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Carroll <aaronc@cse.unsw.edu.au>2011-01-24 18:06:44 +1100
committerØyvind Harboe <oyvind.harboe@zylin.com>2011-01-31 08:53:21 +0100
commitaea22bdbd14ce3d3641884bde68e228882fbd546 (patch)
tree0511b051554d00e14d453e1cb1dcd21ef57ca4be
parent3fa99ed2bfd01c06acc21e50445b096d71ceed18 (diff)
downloadopenocd+libswd-aea22bdbd14ce3d3641884bde68e228882fbd546.tar.gz
openocd+libswd-aea22bdbd14ce3d3641884bde68e228882fbd546.tar.bz2
openocd+libswd-aea22bdbd14ce3d3641884bde68e228882fbd546.tar.xz
openocd+libswd-aea22bdbd14ce3d3641884bde68e228882fbd546.zip
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 <aaronc@cse.unsw.edu.au>
-rw-r--r--src/target/target.c22
-rw-r--r--src/target/target.h1
2 files changed, 23 insertions, 0 deletions
diff --git a/src/target/target.c b/src/target/target.c
index 820e7471..31ade6ac 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 4d03018e..2c6f4cd5 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? */
/**