summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
c13ca4d)
EJTAG v2.0 indicated some debug caps in IMP register.
V2.6 moved them to DCR register. To make it more universal,
convert this values and store them for later use.
Change-Id: Id6b9f47c9c2ea94d37281ebfcae5acf357261ddf
Signed-off-by: Oleksij Rempel <linux@rempel-privat.de>
Reviewed-on: http://openocd.zylin.com/1932
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
if (retval != ERROR_OK)
return retval;
if (retval != ERROR_OK)
return retval;
- /* EJTAG 2.0 defines IB and DB bits in IMP instead of DCR.
- * Since these DCR bits should be reserved on EJTAG 2.0, we can
- * just remap them. */
+ /* EJTAG 2.0 defines IB and DB bits in IMP instead of DCR. */
if (ejtag_info->ejtag_version == EJTAG_VERSION_20) {
if (ejtag_info->ejtag_version == EJTAG_VERSION_20) {
+ ejtag_info->debug_caps = dcr & EJTAG_DCR_ENM;
if (!(ejtag_info->impcode & EJTAG_V20_IMP_NOIB))
if (!(ejtag_info->impcode & EJTAG_V20_IMP_NOIB))
+ ejtag_info->debug_caps |= EJTAG_DCR_IB;
if (!(ejtag_info->impcode & EJTAG_V20_IMP_NODB))
if (!(ejtag_info->impcode & EJTAG_V20_IMP_NODB))
- dcr |= EJTAG_DCR_DB;
- }
+ ejtag_info->debug_caps |= EJTAG_DCR_DB;
+ } else
+ /* keep debug caps for later use */
+ ejtag_info->debug_caps = dcr & (EJTAG_DCR_ENM
+ | EJTAG_DCR_IB | EJTAG_DCR_DB);
+
- if (dcr & EJTAG_DCR_IB) {
+ if (ejtag_info->debug_caps & EJTAG_DCR_IB) {
retval = mips32_configure_ibs(target);
if (retval != ERROR_OK)
return retval;
}
retval = mips32_configure_ibs(target);
if (retval != ERROR_OK)
return retval;
}
- if (dcr & EJTAG_DCR_DB) {
+ if (ejtag_info->debug_caps & EJTAG_DCR_DB) {
retval = mips32_configure_dbs(target);
if (retval != ERROR_OK)
return retval;
}
/* check if target endianness settings matches debug control register */
retval = mips32_configure_dbs(target);
if (retval != ERROR_OK)
return retval;
}
/* check if target endianness settings matches debug control register */
- if (((dcr & EJTAG_DCR_ENM) && (target->endianness == TARGET_LITTLE_ENDIAN)) ||
- (!(dcr & EJTAG_DCR_ENM) && (target->endianness == TARGET_BIG_ENDIAN)))
+ if (((ejtag_info->debug_caps & EJTAG_DCR_ENM)
+ && (target->endianness == TARGET_LITTLE_ENDIAN)) ||
+ (!(ejtag_info->debug_caps & EJTAG_DCR_ENM)
+ && (target->endianness == TARGET_BIG_ENDIAN)))
LOG_WARNING("DCR endianness settings does not match target settings");
LOG_DEBUG("DCR 0x%" PRIx32 " numinst %i numdata %i", dcr, mips32->num_inst_bpoints,
LOG_WARNING("DCR endianness settings does not match target settings");
LOG_DEBUG("DCR 0x%" PRIx32 " numinst %i numdata %i", dcr, mips32->num_inst_bpoints,
/* Memory-Mapped Registers. This addresses are not same on different
* EJTAG versions. */
/* Memory-Mapped Registers. This addresses are not same on different
* EJTAG versions. */
uint32_t ejtag_ibs_addr; /* Instruction Address Break Status */
uint32_t ejtag_iba0_addr; /* IAB channel 0 */
uint32_t ejtag_ibc_offs; /* IAB Control offset */
uint32_t ejtag_ibs_addr; /* Instruction Address Break Status */
uint32_t ejtag_iba0_addr; /* IAB channel 0 */
uint32_t ejtag_ibc_offs; /* IAB Control offset */