Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 89c81797 authored by Benjamin Herrenschmidt's avatar Benjamin Herrenschmidt
Browse files

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: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent e8775d4a
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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
+17 −4
Original line number Diff line number Diff line
@@ -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:
+7 −0
Original line number Diff line number Diff line
@@ -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