]>
Commit | Line | Data |
---|---|---|
2874c5fd | 1 | // SPDX-License-Identifier: GPL-2.0-or-later |
42d226c7 ST |
2 | /* |
3 | * Copyright 2001 MontaVista Software Inc. | |
4 | * Author: Jun Sun, jsun@mvista.com or jsun@junsun.net | |
5 | * Copyright (C) 2000, 2001 Ralf Baechle (ralf@gnu.org) | |
6 | * | |
0bb383a2 | 7 | * Copyright (C) 2007 Lemote Inc. & Institute of Computing Technology |
42d226c7 | 8 | * Author: Fuxin Zhang, zhangfx@lemote.com |
42d226c7 | 9 | */ |
42d226c7 | 10 | #include <linux/interrupt.h> |
6f7a251a | 11 | #include <linux/compiler.h> |
42d226c7 | 12 | |
5e983ff6 | 13 | #include <loongson.h> |
42d226c7 | 14 | |
7ec8af9e | 15 | static inline void bonito_irq_enable(struct irq_data *d) |
42d226c7 | 16 | { |
7ec8af9e | 17 | LOONGSON_INTENSET = (1 << (d->irq - LOONGSON_IRQ_BASE)); |
42d226c7 ST |
18 | mmiowb(); |
19 | } | |
20 | ||
7ec8af9e | 21 | static inline void bonito_irq_disable(struct irq_data *d) |
42d226c7 | 22 | { |
7ec8af9e | 23 | LOONGSON_INTENCLR = (1 << (d->irq - LOONGSON_IRQ_BASE)); |
42d226c7 ST |
24 | mmiowb(); |
25 | } | |
26 | ||
27 | static struct irq_chip bonito_irq_type = { | |
7ec8af9e TG |
28 | .name = "bonito_irq", |
29 | .irq_mask = bonito_irq_disable, | |
30 | .irq_unmask = bonito_irq_enable, | |
42d226c7 ST |
31 | }; |
32 | ||
6f7a251a | 33 | static struct irqaction __maybe_unused dma_timeout_irqaction = { |
42d226c7 ST |
34 | .handler = no_action, |
35 | .name = "dma_timeout", | |
36 | }; | |
37 | ||
38 | void bonito_irq_init(void) | |
39 | { | |
40 | u32 i; | |
41 | ||
e2fee572 | 42 | for (i = LOONGSON_IRQ_BASE; i < LOONGSON_IRQ_BASE + 32; i++) |
e4ec7989 TG |
43 | irq_set_chip_and_handler(i, &bonito_irq_type, |
44 | handle_level_irq); | |
42d226c7 | 45 | |
6f7a251a | 46 | #ifdef CONFIG_CPU_LOONGSON2E |
e2fee572 | 47 | setup_irq(LOONGSON_IRQ_BASE + 10, &dma_timeout_irqaction); |
6f7a251a | 48 | #endif |
42d226c7 | 49 | } |