diff options
author | Mihai Caraman <mihai.caraman@freescale.com> | 2013-08-08 08:56:09 -0400 |
---|---|---|
committer | Scott Wood <scottwood@freescale.com> | 2014-01-07 19:15:29 -0500 |
commit | 228b1a473037c89d524e03a569c688a22241b4ea (patch) | |
tree | 89148336fa415353ad442861ab17d4beda3f8973 /arch/powerpc/kernel/exceptions-64e.S | |
parent | dece8ada993e1764a115bdff0f1effffaa5fc8dc (diff) |
powerpc/booke64: Add LRAT error exception handler
LRAT (Logical to Real Address Translation) present in MMU v2 provides hardware
translation from a logical page number (LPN) to a real page number (RPN) when
tlbwe is executed by a guest or when a page table translation occurs from a
guest virtual address.
Add LRAT error exception handler to Booke3E 64-bit kernel and the basic KVM
handler to avoid build breakage. This is a prerequisite for KVM LRAT support
that will follow.
Signed-off-by: Mihai Caraman <mihai.caraman@freescale.com>
Signed-off-by: Scott Wood <scottwood@freescale.com>
Diffstat (limited to 'arch/powerpc/kernel/exceptions-64e.S')
-rw-r--r-- | arch/powerpc/kernel/exceptions-64e.S | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/exceptions-64e.S b/arch/powerpc/kernel/exceptions-64e.S index e7751561fd1d..4d5a0b1034e8 100644 --- a/arch/powerpc/kernel/exceptions-64e.S +++ b/arch/powerpc/kernel/exceptions-64e.S | |||
@@ -308,6 +308,7 @@ interrupt_base_book3e: /* fake trap */ | |||
308 | EXCEPTION_STUB(0x2e0, guest_doorbell_crit) | 308 | EXCEPTION_STUB(0x2e0, guest_doorbell_crit) |
309 | EXCEPTION_STUB(0x300, hypercall) | 309 | EXCEPTION_STUB(0x300, hypercall) |
310 | EXCEPTION_STUB(0x320, ehpriv) | 310 | EXCEPTION_STUB(0x320, ehpriv) |
311 | EXCEPTION_STUB(0x340, lrat_error) | ||
311 | 312 | ||
312 | .globl interrupt_end_book3e | 313 | .globl interrupt_end_book3e |
313 | interrupt_end_book3e: | 314 | interrupt_end_book3e: |
@@ -677,6 +678,17 @@ kernel_dbg_exc: | |||
677 | bl .unknown_exception | 678 | bl .unknown_exception |
678 | b .ret_from_except | 679 | b .ret_from_except |
679 | 680 | ||
681 | /* LRAT Error interrupt */ | ||
682 | START_EXCEPTION(lrat_error); | ||
683 | NORMAL_EXCEPTION_PROLOG(0x340, BOOKE_INTERRUPT_LRAT_ERROR, | ||
684 | PROLOG_ADDITION_NONE) | ||
685 | EXCEPTION_COMMON(0x340, PACA_EXGEN, INTS_KEEP) | ||
686 | addi r3,r1,STACK_FRAME_OVERHEAD | ||
687 | bl .save_nvgprs | ||
688 | INTS_RESTORE_HARD | ||
689 | bl .unknown_exception | ||
690 | b .ret_from_except | ||
691 | |||
680 | /* | 692 | /* |
681 | * An interrupt came in while soft-disabled; We mark paca->irq_happened | 693 | * An interrupt came in while soft-disabled; We mark paca->irq_happened |
682 | * accordingly and if the interrupt is level sensitive, we hard disable | 694 | * accordingly and if the interrupt is level sensitive, we hard disable |
@@ -859,6 +871,7 @@ BAD_STACK_TRAMPOLINE(0x2e0) | |||
859 | BAD_STACK_TRAMPOLINE(0x300) | 871 | BAD_STACK_TRAMPOLINE(0x300) |
860 | BAD_STACK_TRAMPOLINE(0x310) | 872 | BAD_STACK_TRAMPOLINE(0x310) |
861 | BAD_STACK_TRAMPOLINE(0x320) | 873 | BAD_STACK_TRAMPOLINE(0x320) |
874 | BAD_STACK_TRAMPOLINE(0x340) | ||
862 | BAD_STACK_TRAMPOLINE(0x400) | 875 | BAD_STACK_TRAMPOLINE(0x400) |
863 | BAD_STACK_TRAMPOLINE(0x500) | 876 | BAD_STACK_TRAMPOLINE(0x500) |
864 | BAD_STACK_TRAMPOLINE(0x600) | 877 | BAD_STACK_TRAMPOLINE(0x600) |
@@ -1414,3 +1427,7 @@ _GLOBAL(setup_ehv_ivors) | |||
1414 | SET_IVOR(38, 0x2c0) /* Guest Processor Doorbell */ | 1427 | SET_IVOR(38, 0x2c0) /* Guest Processor Doorbell */ |
1415 | SET_IVOR(39, 0x2e0) /* Guest Processor Doorbell Crit/MC */ | 1428 | SET_IVOR(39, 0x2e0) /* Guest Processor Doorbell Crit/MC */ |
1416 | blr | 1429 | blr |
1430 | |||
1431 | _GLOBAL(setup_lrat_ivor) | ||
1432 | SET_IVOR(42, 0x340) /* LRAT Error */ | ||
1433 | blr | ||