diff options
| author | Mark Brown <[email protected]> | 2015-10-12 18:09:27 +0100 | 
|---|---|---|
| committer | Mark Brown <[email protected]> | 2015-10-12 18:09:27 +0100 | 
| commit | 79828b4fa835f73cdaf4bffa48696abdcbea9d02 (patch) | |
| tree | 5e0fa7156acb75ba603022bc807df8f2fedb97a8 /arch/arm/include/asm/assembler.h | |
| parent | 721b51fcf91898299d96f4b72cb9434cda29dce6 (diff) | |
| parent | 8c1a9d6323abf0fb1e5dad96cf3f1c783505ea5a (diff) | |
Merge remote-tracking branch 'asoc/fix/rt5645' into asoc-fix-rt5645
Diffstat (limited to 'arch/arm/include/asm/assembler.h')
| -rw-r--r-- | arch/arm/include/asm/assembler.h | 69 | 
1 files changed, 60 insertions, 9 deletions
diff --git a/arch/arm/include/asm/assembler.h b/arch/arm/include/asm/assembler.h index 4abe57279c66..7bbf325a4f31 100644 --- a/arch/arm/include/asm/assembler.h +++ b/arch/arm/include/asm/assembler.h @@ -108,33 +108,37 @@  	.endm  #endif -	.macro asm_trace_hardirqs_off +	.macro asm_trace_hardirqs_off, save=1  #if defined(CONFIG_TRACE_IRQFLAGS) +	.if \save  	stmdb   sp!, {r0-r3, ip, lr} +	.endif  	bl	trace_hardirqs_off +	.if \save  	ldmia	sp!, {r0-r3, ip, lr} +	.endif  #endif  	.endm -	.macro asm_trace_hardirqs_on_cond, cond +	.macro asm_trace_hardirqs_on, cond=al, save=1  #if defined(CONFIG_TRACE_IRQFLAGS)  	/*  	 * actually the registers should be pushed and pop'd conditionally, but  	 * after bl the flags are certainly clobbered  	 */ +	.if \save  	stmdb   sp!, {r0-r3, ip, lr} +	.endif  	bl\cond	trace_hardirqs_on +	.if \save  	ldmia	sp!, {r0-r3, ip, lr} +	.endif  #endif  	.endm -	.macro asm_trace_hardirqs_on -	asm_trace_hardirqs_on_cond al -	.endm - -	.macro disable_irq +	.macro disable_irq, save=1  	disable_irq_notrace -	asm_trace_hardirqs_off +	asm_trace_hardirqs_off \save  	.endm  	.macro enable_irq @@ -173,7 +177,7 @@  	.macro restore_irqs, oldcpsr  	tst	\oldcpsr, #PSR_I_BIT -	asm_trace_hardirqs_on_cond eq +	asm_trace_hardirqs_on cond=eq  	restore_irqs_notrace \oldcpsr  	.endm @@ -445,6 +449,53 @@ THUMB(	orr	\reg , \reg , #PSR_T_BIT	)  #endif  	.endm +	.macro	uaccess_disable, tmp, isb=1 +#ifdef CONFIG_CPU_SW_DOMAIN_PAN +	/* +	 * Whenever we re-enter userspace, the domains should always be +	 * set appropriately. +	 */ +	mov	\tmp, #DACR_UACCESS_DISABLE +	mcr	p15, 0, \tmp, c3, c0, 0		@ Set domain register +	.if	\isb +	instr_sync +	.endif +#endif +	.endm + +	.macro	uaccess_enable, tmp, isb=1 +#ifdef CONFIG_CPU_SW_DOMAIN_PAN +	/* +	 * Whenever we re-enter userspace, the domains should always be +	 * set appropriately. +	 */ +	mov	\tmp, #DACR_UACCESS_ENABLE +	mcr	p15, 0, \tmp, c3, c0, 0 +	.if	\isb +	instr_sync +	.endif +#endif +	.endm + +	.macro	uaccess_save, tmp +#ifdef CONFIG_CPU_SW_DOMAIN_PAN +	mrc	p15, 0, \tmp, c3, c0, 0 +	str	\tmp, [sp, #S_FRAME_SIZE] +#endif +	.endm + +	.macro	uaccess_restore +#ifdef CONFIG_CPU_SW_DOMAIN_PAN +	ldr	r0, [sp, #S_FRAME_SIZE] +	mcr	p15, 0, r0, c3, c0, 0 +#endif +	.endm + +	.macro	uaccess_save_and_disable, tmp +	uaccess_save \tmp +	uaccess_disable \tmp +	.endm +  	.irp	c,,eq,ne,cs,cc,mi,pl,vs,vc,hi,ls,ge,lt,gt,le,hs,lo  	.macro	ret\c, reg  #if __LINUX_ARM_ARCH__ < 6  |