aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/powerpc/kernel/entry_64.S31
-rw-r--r--arch/powerpc/kernel/traps.c7
2 files changed, 8 insertions, 30 deletions
diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S
index 4524500f30d6..c04cdf70d487 100644
--- a/arch/powerpc/kernel/entry_64.S
+++ b/arch/powerpc/kernel/entry_64.S
@@ -578,34 +578,15 @@ BEGIN_FTR_SECTION
578 ld r7,DSCR_DEFAULT@toc(2) 578 ld r7,DSCR_DEFAULT@toc(2)
579 ld r0,THREAD_DSCR(r4) 579 ld r0,THREAD_DSCR(r4)
580 cmpwi r6,0 580 cmpwi r6,0
581 li r8, FSCR_DSCR
582 bne 1f 581 bne 1f
583 ld r0,0(r7) 582 ld r0,0(r7)
584 b 3f
5851: 5831:
586 BEGIN_FTR_SECTION_NESTED(70) 584BEGIN_FTR_SECTION_NESTED(70)
587 mfspr r6, SPRN_FSCR 585 mfspr r8, SPRN_FSCR
588 or r6, r6, r8 586 rldimi r8, r6, FSCR_DSCR_LG, (63 - FSCR_DSCR_LG)
589 mtspr SPRN_FSCR, r6 587 mtspr SPRN_FSCR, r8
590 BEGIN_FTR_SECTION_NESTED(69) 588END_FTR_SECTION_NESTED(CPU_FTR_ARCH_207S, CPU_FTR_ARCH_207S, 70)
591 mfspr r6, SPRN_HFSCR 589 cmpd r0,r25
592 or r6, r6, r8
593 mtspr SPRN_HFSCR, r6
594 END_FTR_SECTION_NESTED(CPU_FTR_HVMODE, CPU_FTR_HVMODE, 69)
595 b 4f
596 END_FTR_SECTION_NESTED(CPU_FTR_ARCH_207S, CPU_FTR_ARCH_207S, 70)
5973:
598 BEGIN_FTR_SECTION_NESTED(70)
599 mfspr r6, SPRN_FSCR
600 andc r6, r6, r8
601 mtspr SPRN_FSCR, r6
602 BEGIN_FTR_SECTION_NESTED(69)
603 mfspr r6, SPRN_HFSCR
604 andc r6, r6, r8
605 mtspr SPRN_HFSCR, r6
606 END_FTR_SECTION_NESTED(CPU_FTR_HVMODE, CPU_FTR_HVMODE, 69)
607 END_FTR_SECTION_NESTED(CPU_FTR_ARCH_207S, CPU_FTR_ARCH_207S, 70)
6084: cmpd r0,r25
609 beq 2f 590 beq 2f
610 mtspr SPRN_DSCR,r0 591 mtspr SPRN_DSCR,r0
6112: 5922:
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c
index 529a9329e8d9..f783c932faeb 100644
--- a/arch/powerpc/kernel/traps.c
+++ b/arch/powerpc/kernel/traps.c
@@ -1342,13 +1342,10 @@ void facility_unavailable_exception(struct pt_regs *regs)
1342 if (status == FSCR_DSCR_LG) { 1342 if (status == FSCR_DSCR_LG) {
1343 /* User is acessing the DSCR. Set the inherit bit and allow 1343 /* User is acessing the DSCR. Set the inherit bit and allow
1344 * the user to set it directly in future by setting via the 1344 * the user to set it directly in future by setting via the
1345 * H/FSCR DSCR bit. 1345 * FSCR DSCR bit. We always leave HFSCR DSCR set.
1346 */ 1346 */
1347 current->thread.dscr_inherit = 1; 1347 current->thread.dscr_inherit = 1;
1348 if (hv) 1348 mtspr(SPRN_FSCR, value | FSCR_DSCR);
1349 mtspr(SPRN_HFSCR, value | HFSCR_DSCR);
1350 else
1351 mtspr(SPRN_FSCR, value | FSCR_DSCR);
1352 return; 1349 return;
1353 } 1350 }
1354 1351