Commit | Line | Data |
---|---|---|
42d226c7 ST |
1 | /* |
2 | * Copyright 2001 MontaVista Software Inc. | |
3 | * Author: Jun Sun, jsun@mvista.com or jsun@junsun.net | |
4 | * Copyright (C) 2000, 2001 Ralf Baechle (ralf@gnu.org) | |
5 | * | |
0bb383a2 | 6 | * Copyright (C) 2007 Lemote Inc. & Institute of Computing Technology |
42d226c7 ST |
7 | * Author: Fuxin Zhang, zhangfx@lemote.com |
8 | * | |
70342287 RB |
9 | * This program is free software; you can redistribute it and/or modify it |
10 | * under the terms of the GNU General Public License as published by the | |
11 | * Free Software Foundation; either version 2 of the License, or (at your | |
42d226c7 | 12 | * option) any later version. |
42d226c7 | 13 | */ |
42d226c7 | 14 | #include <linux/interrupt.h> |
6f7a251a | 15 | #include <linux/compiler.h> |
42d226c7 | 16 | |
5e983ff6 | 17 | #include <loongson.h> |
42d226c7 | 18 | |
7ec8af9e | 19 | static inline void bonito_irq_enable(struct irq_data *d) |
42d226c7 | 20 | { |
7ec8af9e | 21 | LOONGSON_INTENSET = (1 << (d->irq - LOONGSON_IRQ_BASE)); |
42d226c7 ST |
22 | mmiowb(); |
23 | } | |
24 | ||
7ec8af9e | 25 | static inline void bonito_irq_disable(struct irq_data *d) |
42d226c7 | 26 | { |
7ec8af9e | 27 | LOONGSON_INTENCLR = (1 << (d->irq - LOONGSON_IRQ_BASE)); |
42d226c7 ST |
28 | mmiowb(); |
29 | } | |
30 | ||
31 | static struct irq_chip bonito_irq_type = { | |
7ec8af9e TG |
32 | .name = "bonito_irq", |
33 | .irq_mask = bonito_irq_disable, | |
34 | .irq_unmask = bonito_irq_enable, | |
42d226c7 ST |
35 | }; |
36 | ||
6f7a251a | 37 | static struct irqaction __maybe_unused dma_timeout_irqaction = { |
42d226c7 ST |
38 | .handler = no_action, |
39 | .name = "dma_timeout", | |
40 | }; | |
41 | ||
42 | void bonito_irq_init(void) | |
43 | { | |
44 | u32 i; | |
45 | ||
e2fee572 | 46 | for (i = LOONGSON_IRQ_BASE; i < LOONGSON_IRQ_BASE + 32; i++) |
e4ec7989 TG |
47 | irq_set_chip_and_handler(i, &bonito_irq_type, |
48 | handle_level_irq); | |
42d226c7 | 49 | |
6f7a251a | 50 | #ifdef CONFIG_CPU_LOONGSON2E |
e2fee572 | 51 | setup_irq(LOONGSON_IRQ_BASE + 10, &dma_timeout_irqaction); |
6f7a251a | 52 | #endif |
42d226c7 | 53 | } |