diff options
author | Aaron 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 |
commit | aea22bdbd14ce3d3641884bde68e228882fbd546 (patch) | |
tree | 0511b051554d00e14d453e1cb1dcd21ef57ca4be /src | |
parent | 3fa99ed2bfd01c06acc21e50445b096d71ceed18 (diff) | |
download | openocd_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>
Diffstat (limited to 'src')
-rw-r--r-- | src/target/target.c | 22 | ||||
-rw-r--r-- | src/target/target.h | 1 |
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? */ /** |