aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/target/armv7a.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/target/armv7a.c b/src/target/armv7a.c
index 11e7a37..bf474d3 100644
--- a/src/target/armv7a.c
+++ b/src/target/armv7a.c
@@ -545,6 +545,16 @@ static int armv7a_read_mpidr(struct target *target)
&mpidr);
if (retval != ERROR_OK)
goto done;
+
+ /* ARMv7R uses a different format for MPIDR.
+ * When configured uniprocessor (most R cores) it reads as 0.
+ * This will need to be implemented for multiprocessor ARMv7R cores. */
+ if (armv7a->is_armv7r) {
+ if (mpidr)
+ LOG_ERROR("MPIDR nonzero in ARMv7-R target");
+ goto done;
+ }
+
if (mpidr & 1<<31) {
armv7a->multi_processor_system = (mpidr >> 30) & 1;
armv7a->cluster_id = (mpidr >> 8) & 0xf;
@@ -555,7 +565,7 @@ static int armv7a_read_mpidr(struct target *target)
armv7a->multi_processor_system == 0 ? "multi core" : "mono core");
} else
- LOG_ERROR("mpdir not in multiprocessor format");
+ LOG_ERROR("MPIDR not in multiprocessor format");
done:
dpm->finish(dpm);