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

Commit 320516b7 authored by Haavard Skinnemoen's avatar Haavard Skinnemoen
Browse files

[AVR32] Implement irqflags trace and lockdep support

parent 2f026037
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -27,6 +27,12 @@ config GENERIC_HARDIRQS
config STACKTRACE_SUPPORT
	def_bool y

config LOCKDEP_SUPPORT
	def_bool y

config TRACE_IRQFLAGS_SUPPORT
	def_bool y

config HARDIRQS_SW_RESEND
	def_bool y

+35 −19
Original line number Diff line number Diff line
@@ -527,15 +527,14 @@ fault_exit_work:

	/* If we get a debug trap from privileged context we end up here */
handle_debug_priv:
	/* Fix up LR and SP in regs. r11 contains the mode we came from */
	mfsr	r8, SYSREG_SR
	mov	r9, r8
	andh	r8, hi(~MODE_MASK)
	or	r8, r11
	mtsr	SYSREG_SR, r8
	/* Fix up LR and SP in regs. r1 contains the mode we came from */
	mfsr	r2, SYSREG_SR
	mov	r3, r2
	bfins	r2, r1, SYSREG_MODE_OFFSET, SYSREG_MODE_SIZE
	mtsr	SYSREG_SR, r2
	sub	pc, -2
	stdsp	sp[REG_LR], lr
	mtsr	SYSREG_SR, r9
	mtsr	SYSREG_SR, r3
	sub	pc, -2
	sub	r10, sp, -FRAME_SIZE_FULL
	stdsp	sp[REG_SP], r10
@@ -547,15 +546,19 @@ handle_debug_priv:
	popm	r10, r11
	mtsr	SYSREG_RAR_DBG, r10
	mtsr	SYSREG_RSR_DBG, r11
	mfsr	r8, SYSREG_SR
	mov	r9, r8
	andh	r8, hi(~MODE_MASK)
	andh	r11, hi(MODE_MASK)
	or	r8, r11
	mtsr	SYSREG_SR, r8
#ifdef CONFIG_TRACE_IRQFLAGS
	bld	r11, SYSREG_GM_OFFSET
	brcc	1f
	rcall	trace_hardirqs_on
1:
#endif
	mfsr	r2, SYSREG_SR
	mov	r3, r2
	bfins	r2, r1, SYSREG_MODE_OFFSET, SYSREG_MODE_SIZE
	mtsr	SYSREG_SR, r2
	sub	pc, -2
	popm	lr
	mtsr	SYSREG_SR, r9
	mtsr	SYSREG_SR, r3
	sub	pc, -2
	sub	sp, -4		/* skip SP */
	popm	r0-r12
@@ -572,11 +575,14 @@ handle_debug_priv:
handle_debug:
	sub	sp, 4		/* r12_orig */
	stmts	--sp, r0-lr
	mfsr	r10, SYSREG_RAR_DBG
	mfsr	r11, SYSREG_RSR_DBG
	mfsr	r0, SYSREG_RAR_DBG
	mfsr	r1, SYSREG_RSR_DBG
#ifdef CONFIG_TRACE_IRQFLAGS
	rcall	trace_hardirqs_off
#endif
	unmask_exceptions
	pushm	r10,r11
	andh	r11, (MODE_MASK >> 16), COH
	stm	--sp, r0, r1
	bfextu	r1, r1, SYSREG_MODE_OFFSET, SYSREG_MODE_SIZE
	brne	handle_debug_priv

	mov	r12, sp
@@ -591,6 +597,12 @@ debug_restore_all:
	mask_exceptions
	mtsr	SYSREG_RSR_DBG, r11
	mtsr	SYSREG_RAR_DBG, r10
#ifdef CONFIG_TRACE_IRQFLAGS
	bld	r11, SYSREG_GM_OFFSET
	brcc	1f
	rcall	trace_hardirqs_on
1:
#endif
	ldmts	sp++, r0-lr
	sub	sp, -4
	retd
@@ -675,7 +687,11 @@ irq_level\level:
	andl	r1, _TIF_WORK_MASK, COH
	brne	irq_exit_work

1:	popm	r8-r9
1:
#ifdef CONFIG_TRACE_IRQFLAGS
	rcall	trace_hardirqs_on
#endif
	popm	r8-r9
	mtsr	rar_int\level, r8
	mtsr	rsr_int\level, r9
	ldmts	sp++,r0-lr
+2 −0
Original line number Diff line number Diff line
@@ -93,6 +93,8 @@
#define SYSREG_I3M_SIZE				1
#define SYSREG_EM_OFFSET			21
#define SYSREG_EM_SIZE				1
#define SYSREG_MODE_OFFSET			22
#define SYSREG_MODE_SIZE			3
#define SYSREG_M0_OFFSET			22
#define SYSREG_M0_SIZE				1
#define SYSREG_M1_OFFSET			23