diff options
Diffstat (limited to 'arch/sparc/include/asm/winmacro.h')
| -rw-r--r-- | arch/sparc/include/asm/winmacro.h | 49 | 
1 files changed, 18 insertions, 31 deletions
diff --git a/arch/sparc/include/asm/winmacro.h b/arch/sparc/include/asm/winmacro.h index a9be04b0d04..9b7b21764cd 100644 --- a/arch/sparc/include/asm/winmacro.h +++ b/arch/sparc/include/asm/winmacro.h @@ -103,37 +103,24 @@          st       %scratch, [%cur_reg + TI_W_SAVED];  #ifdef CONFIG_SMP -/* Results of LOAD_CURRENT() after BTFIXUP for SUN4M, SUN4D & LEON (comments) */ -#define LOAD_CURRENT4M(dest_reg, idreg) \ -        rd       %tbr, %idreg; \ -	sethi    %hi(current_set), %dest_reg; \ -        srl      %idreg, 10, %idreg; \ -	or       %dest_reg, %lo(current_set), %dest_reg; \ -	and      %idreg, 0xc, %idreg; \ -	ld       [%idreg + %dest_reg], %dest_reg; - -#define LOAD_CURRENT4D(dest_reg, idreg) \ -	lda	 [%g0] ASI_M_VIKING_TMP1, %idreg; \ -	sethi	%hi(C_LABEL(current_set)), %dest_reg; \ -	sll	%idreg, 2, %idreg; \ -	or	%dest_reg, %lo(C_LABEL(current_set)), %dest_reg; \ -	ld	[%idreg + %dest_reg], %dest_reg; - -#define LOAD_CURRENT_LEON(dest_reg, idreg)			\ -	rd	%asr17, %idreg;					\ -	sethi	%hi(current_set), %dest_reg;			\ -	srl	%idreg, 0x1c, %idreg;				\ -	or	%dest_reg, %lo(current_set), %dest_reg;		\ -	sll	%idreg, 0x2, %idreg;				\ -	ld	[%idreg + %dest_reg], %dest_reg; - -/* Blackbox - take care with this... - check smp4m and smp4d before changing this. */ -#define LOAD_CURRENT(dest_reg, idreg) 					\ -	sethi	 %hi(___b_load_current), %idreg;			\ -	sethi    %hi(current_set), %dest_reg; 			\ -	sethi    %hi(boot_cpu_id4), %idreg; 			\ -	or       %dest_reg, %lo(current_set), %dest_reg; 	\ -	ldub	 [%idreg + %lo(boot_cpu_id4)], %idreg;		\ +#define LOAD_CURRENT(dest_reg, idreg) 			\ +661:	rd	%tbr, %idreg;				\ +	srl	%idreg, 10, %idreg;			\ +	and	%idreg, 0xc, %idreg;			\ +	.section	.cpuid_patch, "ax";		\ +	/* Instruction location. */			\ +	.word		661b;				\ +	/* SUN4D implementation. */			\ +	lda	 [%g0] ASI_M_VIKING_TMP1, %idreg;	\ +	sll	 %idreg, 2, %idreg;			\ +	nop;						\ +	/* LEON implementation. */			\ +	rd 	%asr17, %idreg;				\ +	srl	%idreg, 0x1c, %idreg;			\ +	sll	%idreg, 0x02, %idreg;			\ +	.previous;					\ +	sethi    %hi(current_set), %dest_reg; 		\ +	or       %dest_reg, %lo(current_set), %dest_reg;\  	ld       [%idreg + %dest_reg], %dest_reg;  #else  #define LOAD_CURRENT(dest_reg, idreg) \  |