[POWERPC] 4xx: Use virtual PVR value to init FPU on arch/ppc 440EP
authorJosh Boyer <jwboyer@linux.vnet.ibm.com>
Fri, 16 Nov 2007 17:29:56 +0000 (04:29 +1100)
committerJosh Boyer <jwboyer@linux.vnet.ibm.com>
Mon, 19 Nov 2007 14:22:20 +0000 (08:22 -0600)
This fixes arch/ppc 440EP platforms to setup the FPU correctly.  A virtual
PVR is used, as 440GR platforms share an identical hardware PVR value and do
not have an FPU.

Signed-off-by: Josh Boyer <jwboyer@linux.vnet.ibm.com>
arch/ppc/kernel/setup.c

index aac88c2f3db9d7d07b9b6e63e431f4fdb6a328b1..5255bd80aa6b2ec10fd7cb2c6aa5bd5d978368f7 100644 (file)
@@ -312,7 +312,14 @@ early_init(int r3, int r4, int r5)
         * Identify the CPU type and fix up code sections
         * that depend on which cpu we have.
         */
+#if defined(CONFIG_440EP) && defined(CONFIG_PPC_FPU)
+       /* We pass the virtual PVR here for 440EP as 440EP and 440GR have
+        * identical PVRs and there is no reliable way to check for the FPU
+        */
+       spec = identify_cpu(offset, (mfspr(SPRN_PVR) | 0x8));
+#else
        spec = identify_cpu(offset, mfspr(SPRN_PVR));
+#endif
        do_feature_fixups(spec->cpu_features,
                          PTRRELOC(&__start___ftr_fixup),
                          PTRRELOC(&__stop___ftr_fixup));