diff options
author | Palmer Dabbelt <palmer@dabbelt.com> | 2017-07-10 18:00:26 -0700 |
---|---|---|
committer | Palmer Dabbelt <palmer@dabbelt.com> | 2017-09-26 15:26:44 -0700 |
commit | 76d2a0493a17d4c8ecc781366850c3c4f8e1a446 (patch) | |
tree | 5612f17472f4f3bd6fb49e217cb998f5c32836c4 /arch/riscv/kernel/irq.c | |
parent | 8caea502367056881e5209ca55a7a01775c9a1cd (diff) |
RISC-V: Init and Halt Code
This contains the various __init C functions, the initial assembly
kernel entry point, and the code to reset the system. When a file was
init-related this patch contains the entire file.
Signed-off-by: Palmer Dabbelt <palmer@dabbelt.com>
Diffstat (limited to 'arch/riscv/kernel/irq.c')
-rw-r--r-- | arch/riscv/kernel/irq.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/arch/riscv/kernel/irq.c b/arch/riscv/kernel/irq.c new file mode 100644 index 000000000000..328718e8026e --- /dev/null +++ b/arch/riscv/kernel/irq.c @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2012 Regents of the University of California + * Copyright (C) 2017 SiFive + * + * 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. + * + * 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. + */ + +#include <linux/interrupt.h> +#include <linux/irqchip.h> +#include <linux/irqdomain.h> + +#ifdef CONFIG_RISCV_INTC +#include <linux/irqchip/irq-riscv-intc.h> +#endif + +void __init init_IRQ(void) +{ + irqchip_init(); +} + +asmlinkage void __irq_entry do_IRQ(unsigned int cause, struct pt_regs *regs) +{ +#ifdef CONFIG_RISCV_INTC + /* + * FIXME: We don't want a direct call to riscv_intc_irq here. The plan + * is to put an IRQ domain here and let the interrupt controller + * register with that, but I poked around the arm64 code a bit and + * there might be a better way to do it (ie, something fully generic). + */ + riscv_intc_irq(cause, regs); +#endif +} |