xref: /OK3568_Linux_fs/kernel/arch/arm/mach-iop32x/include/mach/entry-macro.S (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun/*
2*4882a593Smuzhiyun * arch/arm/mach-iop32x/include/mach/entry-macro.S
3*4882a593Smuzhiyun *
4*4882a593Smuzhiyun * Low-level IRQ helper macros for IOP32x-based platforms
5*4882a593Smuzhiyun *
6*4882a593Smuzhiyun * This file is licensed under the terms of the GNU General Public
7*4882a593Smuzhiyun * License version 2. This program is licensed "as is" without any
8*4882a593Smuzhiyun * warranty of any kind, whether express or implied.
9*4882a593Smuzhiyun */
10*4882a593Smuzhiyun	.macro get_irqnr_preamble, base, tmp
11*4882a593Smuzhiyun	mrc	p15, 0, \tmp, c15, c1, 0
12*4882a593Smuzhiyun	orr	\tmp, \tmp, #(1 << 6)
13*4882a593Smuzhiyun	mcr	p15, 0, \tmp, c15, c1, 0	@ Enable cp6 access
14*4882a593Smuzhiyun	mrc	p15, 0, \tmp, c15, c1, 0
15*4882a593Smuzhiyun	mov	\tmp, \tmp
16*4882a593Smuzhiyun	sub	pc, pc, #4			@ cp_wait
17*4882a593Smuzhiyun	.endm
18*4882a593Smuzhiyun
19*4882a593Smuzhiyun	.macro  get_irqnr_and_base, irqnr, irqstat, base, tmp
20*4882a593Smuzhiyun	mrc     p6, 0, \irqstat, c8, c0, 0	@ Read IINTSRC
21*4882a593Smuzhiyun	cmp     \irqstat, #0
22*4882a593Smuzhiyun	clzne   \irqnr, \irqstat
23*4882a593Smuzhiyun	rsbne   \irqnr, \irqnr, #32
24*4882a593Smuzhiyun	.endm
25*4882a593Smuzhiyun
26*4882a593Smuzhiyun	.macro arch_ret_to_user, tmp1, tmp2
27*4882a593Smuzhiyun	mrc	p15, 0, \tmp1, c15, c1, 0
28*4882a593Smuzhiyun	ands	\tmp2, \tmp1, #(1 << 6)
29*4882a593Smuzhiyun	bicne	\tmp1, \tmp1, #(1 << 6)
30*4882a593Smuzhiyun	mcrne	p15, 0, \tmp1, c15, c1, 0	@ Disable cp6 access
31*4882a593Smuzhiyun	.endm
32