cpu: Handle only high order 16 bits of PVR for IBM Power processors
IBM Power processors encode PVR as CPU family in higher
16 bits and a CPU version in lower 16 bits. Since there is no significant
change in behavior between versions, there is no point to add every single
CPU version in cpu_map.xml
Signed-off-by: Pradipta Kr. Banerjee <bpradip(a)in.ibm.com>
---
src/cpu/cpu_map.xml | 22 ++++++++--------------
src/cpu/cpu_powerpc.c | 7 ++++++-
2 files changed, 14 insertions(+), 15 deletions(-)
diff --git a/src/cpu/cpu_map.xml b/src/cpu/cpu_map.xml
index 18c7b0d..f2f13fb 100644
--- a/src/cpu/cpu_map.xml
+++ b/src/cpu/cpu_map.xml
@@ -602,30 +602,24 @@
<vendor name='IBM'/>
<!-- IBM-based CPU models -->
- <model name='POWER7'>
+ <model name='power6'>
<vendor name='IBM'/>
- <pvr value='0x003f0200'/>
+ <pvr value='0x003e0000'/>
</model>
- <model name='POWER7_v2.1'>
+ <model name='power7'>
<vendor name='IBM'/>
- <pvr value='0x003f0201'/>
+ <pvr value='0x003f0000'/>
</model>
- <model name='POWER7_v2.3'>
+ <model name='power7+'>
<vendor name='IBM'/>
- <pvr value='0x003f0203'/>
+ <pvr value='0x004a0000'/>
</model>
- <model name='POWER7+_v2.1'>
+ <model name='power8'>
<vendor name='IBM'/>
- <pvr value='0x004a0201'/>
+ <pvr value='0x004b0000'/>
</model>
-
- <model name='POWER8_v1.0'>
- <vendor name='IBM'/>
- <pvr value='0x004b0100'/>
- </model>
-
</arch>
</cpus>
diff --git a/src/cpu/cpu_powerpc.c b/src/cpu/cpu_powerpc.c
index 67cb9ff..e705bcb 100644
--- a/src/cpu/cpu_powerpc.c
+++ b/src/cpu/cpu_powerpc.c
@@ -93,7 +93,12 @@ ppcModelFindPVR(const struct ppc_map *map,
model = map->models;
while (model != NULL) {
- if (model->data.pvr == pvr)
+ /*IBM PowerPC processors encode PVR as CPU family in higher 16 bits and
+ *a CPU version in lower 16 bits. Since there is no significant change
+ *in behavior between versions, there is no point to add every single CPU
+ *version in cpu_map.xml
+ */
+ if ((model->data.pvr & 0xFFFF0000) == (pvr & 0xFFFF0000))
return model;
model = model->next;
--
1.9.3