diff options
Diffstat (limited to 'arch/powerpc/kernel/entry_64.S')
| -rw-r--r-- | arch/powerpc/kernel/entry_64.S | 36 | 
1 files changed, 26 insertions, 10 deletions
diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S index ab15b8d057ad..2bd0b885b0fe 100644 --- a/arch/powerpc/kernel/entry_64.S +++ b/arch/powerpc/kernel/entry_64.S @@ -449,15 +449,6 @@ END_FTR_SECTION_IFSET(CPU_FTR_DSCR)  #ifdef CONFIG_PPC_BOOK3S_64  BEGIN_FTR_SECTION -	/* -	 * Back up the TAR across context switches.  Note that the TAR is not -	 * available for use in the kernel.  (To provide this, the TAR should -	 * be backed up/restored on exception entry/exit instead, and be in -	 * pt_regs.  FIXME, this should be in pt_regs anyway (for debug).) -	 */ -	mfspr	r0,SPRN_TAR -	std	r0,THREAD_TAR(r3) -  	/* Event based branch registers */  	mfspr	r0, SPRN_BESCR  	std	r0, THREAD_BESCR(r3) @@ -584,9 +575,34 @@ BEGIN_FTR_SECTION  	ld	r7,DSCR_DEFAULT@toc(2)  	ld	r0,THREAD_DSCR(r4)  	cmpwi	r6,0 +	li	r8, FSCR_DSCR  	bne	1f  	ld	r0,0(r7) -1:	cmpd	r0,r25 +	b	3f +1: +  BEGIN_FTR_SECTION_NESTED(70) +	mfspr	r6, SPRN_FSCR +	or	r6, r6, r8 +	mtspr	SPRN_FSCR, r6 +    BEGIN_FTR_SECTION_NESTED(69) +	mfspr	r6, SPRN_HFSCR +	or	r6, r6, r8 +	mtspr	SPRN_HFSCR, r6 +    END_FTR_SECTION_NESTED(CPU_FTR_HVMODE, CPU_FTR_HVMODE, 69) +	b	4f +  END_FTR_SECTION_NESTED(CPU_FTR_ARCH_207S, CPU_FTR_ARCH_207S, 70) +3: +  BEGIN_FTR_SECTION_NESTED(70) +	mfspr	r6, SPRN_FSCR +	andc	r6, r6, r8 +	mtspr	SPRN_FSCR, r6 +    BEGIN_FTR_SECTION_NESTED(69) +	mfspr	r6, SPRN_HFSCR +	andc	r6, r6, r8 +	mtspr	SPRN_HFSCR, r6 +    END_FTR_SECTION_NESTED(CPU_FTR_HVMODE, CPU_FTR_HVMODE, 69) +  END_FTR_SECTION_NESTED(CPU_FTR_ARCH_207S, CPU_FTR_ARCH_207S, 70) +4:	cmpd	r0,r25  	beq	2f  	mtspr	SPRN_DSCR,r0  2:  |