Forráskód Böngészése

[SPARC64]: Add sun4v case to __GET_CPUID() patch tables.

Signed-off-by: David S. Miller <davem@davemloft.net>
David S. Miller 19 éve
szülő
commit
d96b81533b
2 módosított fájl, 11 hozzáadás és 0 törlés
  1. 3 0
      arch/sparc64/kernel/setup.c
  2. 8 0
      include/asm-sparc64/cpudata.h

+ 3 - 0
arch/sparc64/kernel/setup.c

@@ -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();

+ 8 - 0
include/asm-sparc64/cpudata.h

@@ -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.  */