mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-02 08:34:20 +08:00
powerpc/book3e: Hookup doorbells exceptions on 64-bit Book3E
Note that critical doorbells are an unimplemented stub just like other critical or machine check handlers, since we haven't done support for "levelled" exceptions yet. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
parent
e8775d4aa1
commit
89c81797d4
@ -68,6 +68,7 @@ obj64-$(CONFIG_HIBERNATION) += swsusp_asm64.o
|
||||
obj-$(CONFIG_MODULES) += module.o module_$(CONFIG_WORD_SIZE).o
|
||||
obj-$(CONFIG_44x) += cpu_setup_44x.o
|
||||
obj-$(CONFIG_FSL_BOOKE) += cpu_setup_fsl_booke.o dbell.o
|
||||
obj-$(CONFIG_PPC_BOOK3E_64) += dbell.o
|
||||
|
||||
extra-y := head_$(CONFIG_WORD_SIZE).o
|
||||
extra-$(CONFIG_PPC_BOOK3E_32) := head_new_booke.o
|
||||
|
@ -246,11 +246,9 @@ interrupt_base_book3e: /* fake trap */
|
||||
EXCEPTION_STUB(0x1a0, watchdog) /* 0x09f0 */
|
||||
EXCEPTION_STUB(0x1c0, data_tlb_miss)
|
||||
EXCEPTION_STUB(0x1e0, instruction_tlb_miss)
|
||||
EXCEPTION_STUB(0x280, doorbell)
|
||||
EXCEPTION_STUB(0x2a0, doorbell_crit)
|
||||
|
||||
#if 0
|
||||
EXCEPTION_STUB(0x280, processor_doorbell)
|
||||
EXCEPTION_STUB(0x220, processor_doorbell_crit)
|
||||
#endif
|
||||
.globl interrupt_end_book3e
|
||||
interrupt_end_book3e:
|
||||
|
||||
@ -428,6 +426,19 @@ interrupt_end_book3e:
|
||||
kernel_dbg_exc:
|
||||
b . /* NYI */
|
||||
|
||||
/* Doorbell interrupt */
|
||||
MASKABLE_EXCEPTION(0x2070, doorbell, .doorbell_exception, ACK_NONE)
|
||||
|
||||
/* Doorbell critical Interrupt */
|
||||
START_EXCEPTION(doorbell_crit);
|
||||
CRIT_EXCEPTION_PROLOG(0x2080, PROLOG_ADDITION_NONE)
|
||||
// EXCEPTION_COMMON(0x2080, PACA_EXCRIT, INTS_DISABLE_ALL)
|
||||
// bl special_reg_save_crit
|
||||
// addi r3,r1,STACK_FRAME_OVERHEAD
|
||||
// bl .doorbell_critical_exception
|
||||
// b ret_from_crit_except
|
||||
b .
|
||||
|
||||
|
||||
/*
|
||||
* An interrupt came in while soft-disabled; clear EE in SRR1,
|
||||
@ -563,6 +574,8 @@ BAD_STACK_TRAMPOLINE(0xd00)
|
||||
BAD_STACK_TRAMPOLINE(0xe00)
|
||||
BAD_STACK_TRAMPOLINE(0xf00)
|
||||
BAD_STACK_TRAMPOLINE(0xf20)
|
||||
BAD_STACK_TRAMPOLINE(0x2070)
|
||||
BAD_STACK_TRAMPOLINE(0x2080)
|
||||
|
||||
.globl bad_stack_book3e
|
||||
bad_stack_book3e:
|
||||
|
@ -64,6 +64,8 @@
|
||||
#include <asm/ptrace.h>
|
||||
#include <asm/machdep.h>
|
||||
#include <asm/udbg.h>
|
||||
#include <asm/dbell.h>
|
||||
|
||||
#ifdef CONFIG_PPC64
|
||||
#include <asm/paca.h>
|
||||
#include <asm/firmware.h>
|
||||
@ -153,6 +155,11 @@ notrace void raw_local_irq_restore(unsigned long en)
|
||||
if (get_hard_enabled())
|
||||
return;
|
||||
|
||||
#if defined(CONFIG_BOOKE) && defined(CONFIG_SMP)
|
||||
/* Check for pending doorbell interrupts on SMP */
|
||||
doorbell_exception(NULL);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Need to hard-enable interrupts here. Since currently disabled,
|
||||
* no need to take further asm precautions against preemption; but
|
||||
|
Loading…
Reference in New Issue
Block a user