hc
2024-05-10 37f49e37ab4cb5d0bc4c60eb5c6d4dd57db767bb
kernel/arch/powerpc/platforms/pseries/event_sources.c
....@@ -1,22 +1,10 @@
1
+// SPDX-License-Identifier: GPL-2.0-or-later
12 /*
23 * Copyright (C) 2001 Dave Engebretsen IBM Corporation
3
- *
4
- * This program is free software; you can redistribute it and/or modify
5
- * it under the terms of the GNU General Public License as published by
6
- * the Free Software Foundation; either version 2 of the License, or
7
- * (at your option) any later version.
8
- *
9
- * This program is distributed in the hope that it will be useful,
10
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
- * GNU General Public License for more details.
13
- *
14
- * You should have received a copy of the GNU General Public License
15
- * along with this program; if not, write to the Free Software
16
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
174 */
185
19
-#include <asm/prom.h>
6
+#include <linux/interrupt.h>
7
+#include <linux/of_irq.h>
208
219 #include "pseries.h"
2210
....@@ -24,34 +12,19 @@
2412 irq_handler_t handler,
2513 const char *name)
2614 {
27
- int i, index, count = 0;
28
- struct of_phandle_args oirq;
29
- unsigned int virqs[16];
15
+ int i, virq, rc;
3016
31
- /* First try to do a proper OF tree parsing */
32
- for (index = 0; of_irq_parse_one(np, index, &oirq) == 0;
33
- index++) {
34
- if (count > 15)
35
- break;
36
- virqs[count] = irq_create_of_mapping(&oirq);
37
- if (!virqs[count]) {
38
- pr_err("event-sources: Unable to allocate "
39
- "interrupt number for %pOF\n",
40
- np);
41
- WARN_ON(1);
42
- } else {
43
- count++;
44
- }
45
- }
46
-
47
- /* Now request them */
48
- for (i = 0; i < count; i++) {
49
- if (request_irq(virqs[i], handler, 0, name, NULL)) {
50
- pr_err("event-sources: Unable to request interrupt "
51
- "%d for %pOF\n", virqs[i], np);
52
- WARN_ON(1);
17
+ for (i = 0; i < 16; i++) {
18
+ virq = of_irq_get(np, i);
19
+ if (virq < 0)
5320 return;
54
- }
21
+ if (WARN(!virq, "event-sources: Unable to allocate "
22
+ "interrupt number for %pOF\n", np))
23
+ continue;
24
+
25
+ rc = request_irq(virq, handler, 0, name, NULL);
26
+ if (WARN(rc, "event-sources: Unable to request interrupt %d for %pOF\n",
27
+ virq, np))
28
+ return;
5529 }
5630 }
57
-