From: Paul Mundt Date: Mon, 20 Dec 2010 15:40:51 +0000 (+0900) Subject: Merge branch 'rmobile/urgent' into rmobile-latest X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=8bcee1832d23869c2cdb6886ae5210b0143256f0;p=GitHub%2Fmoto-9609%2Fandroid_kernel_motorola_exynos9610.git Merge branch 'rmobile/urgent' into rmobile-latest Conflicts: arch/arm/mach-shmobile/include/mach/entry-macro.S Signed-off-by: Paul Mundt --- 8bcee1832d23869c2cdb6886ae5210b0143256f0 diff --cc arch/arm/mach-shmobile/include/mach/entry-macro-intc.S index a285d13c7416,000000000000..f428c4db2b60 mode 100644,000000..100644 --- a/arch/arm/mach-shmobile/include/mach/entry-macro-intc.S +++ b/arch/arm/mach-shmobile/include/mach/entry-macro-intc.S @@@ -1,39 -1,0 +1,61 @@@ +/* ++ * Copyright (C) 2010 Magnus Damm + * Copyright (C) 2008 Renesas Solutions Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ - #include +#include + ++#define INTCA_BASE 0xe6980000 ++#define INTFLGA_OFFS 0x00000018 /* accept pending interrupt */ ++#define INTEVTA_OFFS 0x00000020 /* vector number of accepted interrupt */ ++#define INTLVLA_OFFS 0x00000030 /* priority level of accepted interrupt */ ++#define INTLVLB_OFFS 0x00000034 /* previous priority level */ ++ + .macro disable_fiq + .endm + + .macro get_irqnr_preamble, base, tmp - ldr \base, =INTFLGA ++ ldr \base, =INTCA_BASE + .endm + + .macro arch_ret_to_user, tmp1, tmp2 + .endm + + .macro get_irqnr_and_base, irqnr, irqstat, base, tmp - ldr \irqnr, [\base] ++ /* The single INTFLGA read access below results in the following: ++ * ++ * 1. INTLVLB is updated with old priority value from INTLVLA ++ * 2. Highest priority interrupt is accepted ++ * 3. INTLVLA is updated to contain priority of accepted interrupt ++ * 4. Accepted interrupt vector is stored in INTFLGA and INTEVTA ++ */ ++ ldr \irqnr, [\base, #INTFLGA_OFFS] ++ ++ /* Restore INTLVLA with the value saved in INTLVLB. ++ * This is required to support interrupt priorities properly. ++ */ ++ ldrb \tmp, [\base, #INTLVLB_OFFS] ++ strb \tmp, [\base, #INTLVLA_OFFS] ++ ++ /* Handle invalid vector number case */ + cmp \irqnr, #0 + beq 1000f - /* intevt to irq number */ ++ ++ /* Convert vector to irq number, same as the evt2irq() macro */ + lsr \irqnr, \irqnr, #0x5 + subs \irqnr, \irqnr, #16 + +1000: + .endm