]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - arch/arm/cpu/ixp/interrupts.c
doc: SPI: Add qspi test details on AM43xx
[karo-tx-uboot.git] / arch / arm / cpu / ixp / interrupts.c
1 /*
2  * (C) Copyright 2006
3  * Stefan Roese, DENX Software Engineering, sr@denx.de.
4  *
5  * (C) Copyright 2002
6  * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
7  * Marius Groeger <mgroeger@sysgo.de>
8  *
9  * (C) Copyright 2002
10  * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
11  * Alex Zuepke <azu@sysgo.de>
12  *
13  * SPDX-License-Identifier:     GPL-2.0+
14  */
15
16 #include <common.h>
17 #include <asm/arch/ixp425.h>
18 #include <asm/proc-armv/ptrace.h>
19
20 struct _irq_handler {
21         void                *m_data;
22         void (*m_func)( void *data);
23 };
24
25 static struct _irq_handler IRQ_HANDLER[N_IRQS];
26
27 static void default_isr(void *data)
28 {
29         printf("default_isr():  called for IRQ %d, Interrupt Status=%x PR=%x\n",
30                (int)data, *IXP425_ICIP, *IXP425_ICIH);
31 }
32
33 static int next_irq(void)
34 {
35         return (((*IXP425_ICIH & 0x000000fc) >> 2) - 1);
36 }
37
38 void do_irq (struct pt_regs *pt_regs)
39 {
40         int irq = next_irq();
41
42         IRQ_HANDLER[irq].m_func(IRQ_HANDLER[irq].m_data);
43 }
44
45 void irq_install_handler (int irq, interrupt_handler_t handle_irq, void *data)
46 {
47         if (irq >= N_IRQS || !handle_irq)
48                 return;
49
50         IRQ_HANDLER[irq].m_data = data;
51         IRQ_HANDLER[irq].m_func = handle_irq;
52 }
53
54 int arch_interrupt_init (void)
55 {
56         int i;
57
58         /* install default interrupt handlers */
59         for (i = 0; i < N_IRQS; i++)
60                 irq_install_handler(i, default_isr, (void *)i);
61
62         /* configure interrupts for IRQ mode */
63         *IXP425_ICLR = 0x00000000;
64
65         return (0);
66 }