mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-02 23:36:43 +07:00
MIPS: i8259: Use IRQ domains
Create a legacy IRQ domain for the 16 i8259 interrupts. Signed-off-by: Andrew Bresticker <abrestic@chromium.org> Reviewed-by: Qais Yousef <qais.yousef@imgtec.com> Tested-by: Qais Yousef <qais.yousef@imgtec.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Jason Cooper <jason@lakedaemon.net> Cc: Andrew Bresticker <abrestic@chromium.org> Cc: Jeffrey Deans <jeffrey.deans@imgtec.com> Cc: Markos Chandras <markos.chandras@imgtec.com> Cc: Paul Burton <paul.burton@imgtec.com> Cc: Qais Yousef <qais.yousef@imgtec.com> Cc: Jonas Gorski <jogo@openwrt.org> Cc: John Crispin <blogic@openwrt.org> Cc: David Daney <ddaney.cavm@gmail.com> Cc: linux-mips@linux-mips.org Cc: linux-kernel@vger.kernel.org Patchwork: https://patchwork.linux-mips.org/patch/7804/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
parent
f64e55dcbf
commit
079a460176
@ -975,6 +975,7 @@ config SYS_SUPPORTS_HOTPLUG_CPU
|
||||
|
||||
config I8259
|
||||
bool
|
||||
select IRQ_DOMAIN
|
||||
|
||||
config MIPS_BONITO64
|
||||
bool
|
||||
|
@ -12,6 +12,7 @@
|
||||
#include <linux/init.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irqdomain.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/syscore_ops.h>
|
||||
@ -308,6 +309,19 @@ static struct resource pic2_io_resource = {
|
||||
.flags = IORESOURCE_BUSY
|
||||
};
|
||||
|
||||
static int i8259A_irq_domain_map(struct irq_domain *d, unsigned int virq,
|
||||
irq_hw_number_t hw)
|
||||
{
|
||||
irq_set_chip_and_handler(virq, &i8259A_chip, handle_level_irq);
|
||||
irq_set_probe(virq);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct irq_domain_ops i8259A_ops = {
|
||||
.map = i8259A_irq_domain_map,
|
||||
.xlate = irq_domain_xlate_onecell,
|
||||
};
|
||||
|
||||
/*
|
||||
* On systems with i8259-style interrupt controllers we assume for
|
||||
* driver compatibility reasons interrupts 0 - 15 to be the i8259
|
||||
@ -315,17 +329,17 @@ static struct resource pic2_io_resource = {
|
||||
*/
|
||||
void __init init_i8259_irqs(void)
|
||||
{
|
||||
int i;
|
||||
struct irq_domain *domain;
|
||||
|
||||
insert_resource(&ioport_resource, &pic1_io_resource);
|
||||
insert_resource(&ioport_resource, &pic2_io_resource);
|
||||
|
||||
init_8259A(0);
|
||||
|
||||
for (i = I8259A_IRQ_BASE; i < I8259A_IRQ_BASE + 16; i++) {
|
||||
irq_set_chip_and_handler(i, &i8259A_chip, handle_level_irq);
|
||||
irq_set_probe(i);
|
||||
}
|
||||
domain = irq_domain_add_legacy(NULL, 16, I8259A_IRQ_BASE, 0,
|
||||
&i8259A_ops, NULL);
|
||||
if (!domain)
|
||||
panic("Failed to add i8259 IRQ domain");
|
||||
|
||||
setup_irq(I8259A_IRQ_BASE + PIC_CASCADE_IR, &irq2);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user