[SPARC64]: Add sun4v case to __GET_CPUID() patch tables.
David S. Miller [Sat, 4 Feb 2006 23:40:53 +0000 (15:40 -0800)]
Signed-off-by: David S. Miller <davem@davemloft.net>

arch/sparc64/kernel/setup.c
include/asm-sparc64/cpudata.h

index f751d11..2918ed3 100644 (file)
@@ -520,6 +520,9 @@ static void __init per_cpu_patch(void)
                        else
                                insns = &p->cheetah_safari[0];
                        break;
+               case hypervisor:
+                       insns = &p->sun4v[0];
+                       break;
                default:
                        prom_printf("Unknown cpu type, halting.\n");
                        prom_halt();
index c15514f..4f28a85 100644 (file)
@@ -68,6 +68,7 @@ struct cpuid_patch_entry {
        unsigned int    cheetah_safari[4];
        unsigned int    cheetah_jbus[4];
        unsigned int    starfire[4];
+       unsigned int    sun4v[4];
 };
 extern struct cpuid_patch_entry __cpuid_patch, __cpuid_patch_end;
 #endif
@@ -79,6 +80,8 @@ extern struct cpuid_patch_entry __cpuid_patch, __cpuid_patch_end;
 
 #define TRAP_BLOCK_SZ_SHIFT    6
 
+#include <asm/scratchpad.h>
+
 #ifdef CONFIG_SMP
 
 #define __GET_CPUID(REG)                               \
@@ -105,6 +108,11 @@ extern struct cpuid_patch_entry __cpuid_patch, __cpuid_patch_end;
        sllx            REG, 9, REG;                    \
        or              REG, 0xd0, REG;                 \
        lduwa           [REG] ASI_PHYS_BYPASS_EC_E, REG;\
+       /* sun4v implementation. */                     \
+       mov             SCRATCHPAD_CPUID, REG;          \
+       nop;                                            \
+       ldxa            [REG] ASI_SCRATCHPAD, REG;      \
+       nop;                                            \
        .previous;
 
 /* Clobbers TMP, current address space PGD phys address into DEST.  */