summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libcpu/powerpc/shared/include/cpuIdent.c
diff options
context:
space:
mode:
authorThomas Doerfler <Thomas.Doerfler@embedded-brains.de>2010-04-07 14:18:53 +0000
committerThomas Doerfler <Thomas.Doerfler@embedded-brains.de>2010-04-07 14:18:53 +0000
commit9a66caae9b06cb90f66770c60cd0625d4b232bcc (patch)
treea741db26c3a87dff00c44e591b4180a550656e12 /c/src/lib/libcpu/powerpc/shared/include/cpuIdent.c
parent2010-04-07 Joel Sherrill <joel.sherrill@oarcorp.com> (diff)
downloadrtems-9a66caae9b06cb90f66770c60cd0625d4b232bcc.tar.bz2
skip version nibble when detecting e200 processor version
Diffstat (limited to 'c/src/lib/libcpu/powerpc/shared/include/cpuIdent.c')
-rw-r--r--c/src/lib/libcpu/powerpc/shared/include/cpuIdent.c27
1 files changed, 25 insertions, 2 deletions
diff --git a/c/src/lib/libcpu/powerpc/shared/include/cpuIdent.c b/c/src/lib/libcpu/powerpc/shared/include/cpuIdent.c
index dab61288e8..2bc7bfb178 100644
--- a/c/src/lib/libcpu/powerpc/shared/include/cpuIdent.c
+++ b/c/src/lib/libcpu/powerpc/shared/include/cpuIdent.c
@@ -75,18 +75,41 @@ char *get_ppc_cpu_type_name(ppc_cpu_id_t cpu)
ppc_cpu_id_t get_ppc_cpu_type(void)
{
+ /*
+ * cpu types listed here have the lowermost nibble as a version identifier
+ * we will tweak them to the starndard version
+ */
+ const uint32_t ppc_cpu_id_version_nibble[] = {
+ PPC_e200z6,
+ PPC_e200z0,
+ PPC_e200z1};
+
unsigned int pvr;
+ int i;
if ( PPC_UNKNOWN != current_ppc_cpu )
return current_ppc_cpu;
pvr = (_read_PVR() >> 16);
+ /*
+ * apply tweaks to ignore version
+ */
+ for (i = 0;
+ i < (sizeof(ppc_cpu_id_version_nibble)
+ /sizeof(ppc_cpu_id_version_nibble[0]));
+ i++) {
+ if ((pvr & 0xfff0) == (ppc_cpu_id_version_nibble[i] & 0xfff0)) {
+ pvr = ppc_cpu_id_version_nibble[i];
+ break;
+ }
+ }
+
current_ppc_cpu = (ppc_cpu_id_t) pvr;
switch (pvr) {
case PPC_405:
- case PPC_405GP:
- case PPC_405EX:
+ case PPC_405GP:
+ case PPC_405EX:
case PPC_601:
case PPC_5XX:
case PPC_603: