diff --git a/src/target/arm_dpm.c b/src/target/arm_dpm.c index b602b80e4..b8f392cdd 100644 --- a/src/target/arm_dpm.c +++ b/src/target/arm_dpm.c @@ -648,14 +648,15 @@ static int arm_dpm_full_context(struct target *target) did_read = true; mode = r->mode; - /* For R8..R12 when we've entered debug - * state in FIQ mode... patch mode. + /* For regular (ARM_MODE_ANY) R8..R12 + * in case we've entered debug state + * in FIQ mode we need to patch mode. */ - if (mode == ARM_MODE_ANY) - mode = ARM_MODE_USR; + if (mode != ARM_MODE_ANY) + retval = dpm_modeswitch(dpm, mode); + else + retval = dpm_modeswitch(dpm, ARM_MODE_USR); - /* REVISIT error checks */ - retval = dpm_modeswitch(dpm, mode); if (retval != ERROR_OK) goto done; }