mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-18 16:44:27 +08:00
02aa06bc49
This patch makes inclusion of hardware.h and spear.h consistent over all spear variants. Now we will include hardware.h, wherever we need to use hardware macros. spear.h will be automatically included by hardware.h Signed-off-by: Viresh Kumar <viresh.kumar@st.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
55 lines
1.5 KiB
ArmAsm
55 lines
1.5 KiB
ArmAsm
/*
|
|
* arch/arm/mach-spear6xx/include/mach/entry-macro.S
|
|
*
|
|
* Low-level IRQ helper macros for SPEAr6xx machine family
|
|
*
|
|
* Copyright (C) 2009 ST Microelectronics
|
|
* Rajeev Kumar<rajeev-dlh.kumar@st.com>
|
|
*
|
|
* This file is licensed under the terms of the GNU General Public
|
|
* License version 2. This program is licensed "as is" without any
|
|
* warranty of any kind, whether express or implied.
|
|
*/
|
|
|
|
#include <asm/hardware/vic.h>
|
|
#include <mach/hardware.h>
|
|
|
|
.macro disable_fiq
|
|
.endm
|
|
|
|
.macro get_irqnr_preamble, base, tmp
|
|
.endm
|
|
|
|
.macro arch_ret_to_user, tmp1, tmp2
|
|
.endm
|
|
|
|
.macro get_irqnr_and_base, irqnr, irqstat, base, tmp
|
|
ldr \base, =VA_SPEAR6XX_CPU_VIC_PRI_BASE
|
|
ldr \irqstat, [\base, #VIC_IRQ_STATUS] @ get status
|
|
mov \irqnr, #0
|
|
teq \irqstat, #0
|
|
bne 1001f
|
|
ldr \base, =VA_SPEAR6XX_CPU_VIC_SEC_BASE
|
|
ldr \irqstat, [\base, #VIC_IRQ_STATUS] @ get status
|
|
teq \irqstat, #0
|
|
beq 1002f @ this will set/reset
|
|
@ zero register
|
|
mov \irqnr, #32
|
|
1001:
|
|
/*
|
|
* Following code will find bit position of least significang
|
|
* bit set in irqstat, using following equation
|
|
* least significant bit set in n = (n & ~(n-1))
|
|
*/
|
|
sub \tmp, \irqstat, #1 @ tmp = irqstat - 1
|
|
mvn \tmp, \tmp @ tmp = ~tmp
|
|
and \irqstat, \irqstat, \tmp @ irqstat &= tmp
|
|
/* Now, irqstat is = bit no. of 1st bit set in vic irq status */
|
|
clz \tmp, \irqstat @ tmp = leading zeros
|
|
|
|
rsb \tmp, \tmp, #0x1F @ tmp = 32 - tmp - 1
|
|
add \irqnr, \irqnr, \tmp
|
|
|
|
1002: /* EQ will be set if no irqs pending */
|
|
.endm
|