mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-25 11:40:53 +07:00
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: Rob Herring <rob.herring@calxeda.com> Acked-by: Nicolas Pitre <nico@linaro.org>
This commit is contained in:
parent
13a5045d4e
commit
78cbaaca69
@ -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- :=
|
||||||
|
16
arch/arm/mach-rpc/fiq.S
Normal file
16
arch/arm/mach-rpc/fiq.S
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
#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 @@
|
|||||||
#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 = {
|
|||||||
.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)
|
|||||||
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;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user