diff options
author | Alex Ray <a@machinaut.com> | 2014-04-06 07:34:27 -0700 |
---|---|---|
committer | Andreas Fritiofson <andreas.fritiofson@gmail.com> | 2014-06-01 17:37:56 +0000 |
commit | 248b85a6e739c8eb107c3a278b8eac6fc1f0cf62 (patch) | |
tree | eac4ba43c69676792fd0ddf344e5a6797772eb03 /src/target/armv7a.c | |
parent | 9744a2fa20ad64baef19243bcc984bc5f5f8fcc3 (diff) | |
download | riscv-openocd-248b85a6e739c8eb107c3a278b8eac6fc1f0cf62.zip riscv-openocd-248b85a6e739c8eb107c3a278b8eac6fc1f0cf62.tar.gz riscv-openocd-248b85a6e739c8eb107c3a278b8eac6fc1f0cf62.tar.bz2 |
Disable multiprocessor-id read on ARMv7-R cores
ARMv7-R cores are largely uniprocessor-configured, and when they are
multiprocessor-configured the format of the MPIDR register isn't
compatible with ARMv7-A cores.
Change-Id: I024ec514496fbab5075c6fb34b6acd870e68e1fc
Signed-off-by: Alex Ray <a@machinaut.com>
Reviewed-on: http://openocd.zylin.com/2096
Tested-by: jenkins
Reviewed-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
Diffstat (limited to 'src/target/armv7a.c')
-rw-r--r-- | src/target/armv7a.c | 12 |
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); |