Commit 78cbaaca authored by Rob Herring's avatar Rob Herring

ARM: rpc: make default fiq handler run-time installed

Only rpc uses disable_fiq macro. Change it to a run-time installed
default FIQ handler. The handler is installed before FIQ is enabled
so the behavior should be unchanged.
Signed-off-by: default avatarRob Herring <rob.herring@calxeda.com>
Acked-by: default avatarNicolas Pitre <nico@linaro.org>
parent 13a5045d
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
# Object file lists. # Object file lists.
obj-y := dma.o irq.o riscpc.o obj-y := dma.o fiq.o irq.o riscpc.o
obj-m := obj-m :=
obj-n := obj-n :=
obj- := obj- :=
......
#include <linux/linkage.h>
#include <asm/assembler.h>
#include <mach/hardware.h>
#include <mach/entry-macro.S>
.text
.global rpc_default_fiq_end
ENTRY(rpc_default_fiq_start)
mov r12, #ioc_base_high
.if ioc_base_low
orr r12, r12, #ioc_base_low
.endif
strb r12, [r12, #0x38] @ Disable FIQ register
subs pc, lr, #4
rpc_default_fiq_end:
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include <asm/mach/irq.h> #include <asm/mach/irq.h>
#include <asm/hardware/iomd.h> #include <asm/hardware/iomd.h>
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/fiq.h>
static void iomd_ack_irq_a(struct irq_data *d) static void iomd_ack_irq_a(struct irq_data *d)
{ {
...@@ -112,6 +113,8 @@ static struct irq_chip iomd_fiq_chip = { ...@@ -112,6 +113,8 @@ static struct irq_chip iomd_fiq_chip = {
.irq_unmask = iomd_unmask_irq_fiq, .irq_unmask = iomd_unmask_irq_fiq,
}; };
extern unsigned char rpc_default_fiq_start, rpc_default_fiq_end;
void __init rpc_init_irq(void) void __init rpc_init_irq(void)
{ {
unsigned int irq, flags; unsigned int irq, flags;
...@@ -121,6 +124,9 @@ void __init rpc_init_irq(void) ...@@ -121,6 +124,9 @@ void __init rpc_init_irq(void)
iomd_writeb(0, IOMD_FIQMASK); iomd_writeb(0, IOMD_FIQMASK);
iomd_writeb(0, IOMD_DMAMASK); iomd_writeb(0, IOMD_DMAMASK);
set_fiq_handler(&rpc_default_fiq_start,
&rpc_default_fiq_end - &rpc_default_fiq_start);
for (irq = 0; irq < NR_IRQS; irq++) { for (irq = 0; irq < NR_IRQS; irq++) {
flags = IRQF_VALID; flags = IRQF_VALID;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment