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

Commit 80f31c8a authored by Mike Frysinger's avatar Mike Frysinger Committed by Bryan Wu
Browse files

[Blackfin] arch: change the trace buffer control start/stop logic in the exception handlers



To save/restore the trace buffer control so that if we take an exception
after turning off the trace buffer at a higher level we dont inadvertently
turn the trace buffer back on

Signed-off-by: default avatarMike Frysinger <vapier.adi@gmail.com>
Signed-off-by: default avatarBryan Wu <bryan.wu@analog.com>
parent a3acf528
Loading
Loading
Loading
Loading
+4 −8
Original line number Diff line number Diff line
@@ -121,6 +121,7 @@ ENTRY(_ex_icplb_miss)
	(R7:6,P5:4) = [sp++];
	ASTAT = [sp++];
	SAVE_ALL_SYS
	DEBUG_HWTRACE_SAVE(p5, r7)
#ifdef CONFIG_MPU
	R0 = SEQSTAT;
	R1 = SP;
@@ -132,14 +133,13 @@ ENTRY(_ex_icplb_miss)
#else
	call __cplb_hdr;
#endif
	DEBUG_START_HWTRACE(p5, r7)
	DEBUG_HWTRACE_RESTORE(p5, r7)
	RESTORE_ALL_SYS
	SP = EX_SCRATCH_REG;
	rtx;
ENDPROC(_ex_icplb_miss)

ENTRY(_ex_syscall)
	DEBUG_START_HWTRACE(p5, r7)
	(R7:6,P5:4) = [sp++];
	ASTAT = [sp++];
	raise 15;		/* invoked by TRAP #0, for sys call */
@@ -178,7 +178,6 @@ ENTRY(_ex_single_step)
ENDPROC(_ex_single_step)

ENTRY(_bfin_return_from_exception)
	DEBUG_START_HWTRACE(p5, r7)
#if ANOMALY_05000257
	R7=LC0;
	LC0=R7;
@@ -200,7 +199,6 @@ ENTRY(_handle_bad_cplb)
	 * need to make a CPLB exception look like a normal exception
	 */

	DEBUG_START_HWTRACE(p5, r7)
	RESTORE_ALL_SYS
	[--sp] = ASTAT;
	[--sp] = (R7:6,P5:4);
@@ -253,7 +251,6 @@ ENTRY(_ex_trap_c)
	R6 = SEQSTAT;
	[P5] = R6;

	DEBUG_START_HWTRACE(p5, r7)
	(R7:6,P5:4) = [sp++];
	ASTAT = [sp++];
	SP = EX_SCRATCH_REG;
@@ -383,7 +380,6 @@ ENTRY(_trap) /* Exception: 4th entry into system event table(supervisor mode)*/
	/* Try to deal with syscalls quickly.  */
	[--sp] = ASTAT;
	[--sp] = (R7:6,P5:4);
	DEBUG_STOP_HWTRACE(p5, r7)
	r7 = SEQSTAT;		/* reason code is in bit 5:0 */
	r6.l = lo(SEQSTAT_EXCAUSE);
	r6.h = hi(SEQSTAT_EXCAUSE);
+20 −15
Original line number Diff line number Diff line
@@ -46,42 +46,47 @@ extern unsigned long software_trace_buff[];

#ifdef CONFIG_DEBUG_BFIN_HWTRACE_ON

#define TRACE_BUFFER_START(preg, dreg) trace_buffer_start(preg, dreg)
#define TRACE_BUFFER_STOP(preg, dreg)  trace_buffer_stop(preg, dreg)

#define trace_buffer_stop(preg, dreg)	\
	preg.L = LO(TBUFCTL);		\
	preg.H = HI(TBUFCTL);		\
	dreg = 0x1;			\
	[preg] = dreg;

#define trace_buffer_start(preg, dreg)	\
#define trace_buffer_init(preg, dreg) \
	preg.L = LO(TBUFCTL);         \
	preg.H = HI(TBUFCTL);         \
	dreg = BFIN_TRACE_ON;		\
	dreg = BFIN_TRACE_INIT;       \
	[preg] = dreg;

#define trace_buffer_init(preg, dreg) \
#define trace_buffer_save(preg, dreg) \
	preg.L = LO(TBUFCTL); \
	preg.H = HI(TBUFCTL); \
	dreg = BFIN_TRACE_INIT;       \
	dreg = [preg]; \
	[sp++] = dreg; \
	dreg = 0x1; \
	[preg] = dreg;

#define trace_buffer_restore(preg, dreg) \
	preg.L = LO(TBUFCTL); \
	preg.H = HI(TBUFCTL); \
	dreg = [sp--]; \
	[preg] = dreg;

#else /* CONFIG_DEBUG_BFIN_HWTRACE_ON */

#define trace_buffer_stop(preg, dreg)
#define trace_buffer_start(preg, dreg)
#define trace_buffer_init(preg, dreg)
#define trace_buffer_save(preg, dreg)
#define trace_buffer_restore(preg, dreg)

#endif /* CONFIG_DEBUG_BFIN_HWTRACE_ON */

#ifdef CONFIG_DEBUG_BFIN_NO_KERN_HWTRACE
# define DEBUG_START_HWTRACE(preg, dreg) trace_buffer_start(preg, dreg)
# define DEBUG_STOP_HWTRACE(preg, dreg) trace_buffer_stop(preg, dreg)

# define DEBUG_HWTRACE_SAVE(preg, dreg)    trace_buffer_save(preg, dreg)
# define DEBUG_HWTRACE_RESTORE(preg, dreg) trace_buffer_restore(preg, dreg)
#else
# define DEBUG_START_HWTRACE(preg, dreg)
# define DEBUG_STOP_HWTRACE(preg, dreg)
# define DEBUG_HWTRACE_SAVE(preg, dreg)
# define DEBUG_HWTRACE_RESTORE(preg, dreg)
#endif

#endif /* __ASSEMBLY__ */