forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-13 9d77db3c730780c8ef5ccd4b66403ff5675cfe4e
kernel/arch/ia64/kernel/irq_ia64.c
....@@ -16,6 +16,7 @@
1616 */
1717
1818 #include <linux/module.h>
19
+#include <linux/pgtable.h>
1920
2021 #include <linux/jiffies.h>
2122 #include <linux/errno.h>
....@@ -37,13 +38,7 @@
3738 #include <asm/intrinsics.h>
3839 #include <asm/io.h>
3940 #include <asm/hw_irq.h>
40
-#include <asm/machvec.h>
41
-#include <asm/pgtable.h>
4241 #include <asm/tlbflush.h>
43
-
44
-#ifdef CONFIG_PERFMON
45
-# include <asm/perfmon.h>
46
-#endif
4742
4843 #define IRQ_DEBUG 0
4944
....@@ -53,7 +48,6 @@
5348 #define IRQ_USED (1)
5449 #define IRQ_RSVD (2)
5550
56
-/* These can be overridden in platform_irq_init */
5751 int ia64_first_device_vector = IA64_DEF_FIRST_DEVICE_VECTOR;
5852 int ia64_last_device_vector = IA64_DEF_LAST_DEVICE_VECTOR;
5953
....@@ -250,7 +244,7 @@
250244 }
251245 }
252246
253
-#if defined(CONFIG_SMP) && (defined(CONFIG_IA64_GENERIC) || defined(CONFIG_IA64_DIG))
247
+#ifdef CONFIG_SMP
254248
255249 static enum vector_domain_type {
256250 VECTOR_DOMAIN_NONE,
....@@ -314,7 +308,7 @@
314308 cpumask_and(&cleanup_mask, &cfg->old_domain, cpu_online_mask);
315309 cfg->move_cleanup_count = cpumask_weight(&cleanup_mask);
316310 for_each_cpu(i, &cleanup_mask)
317
- platform_send_ipi(i, IA64_IRQ_MOVE_VECTOR, IA64_IPI_DM_INT, 0);
311
+ ia64_send_ipi(i, IA64_IRQ_MOVE_VECTOR, IA64_IPI_DM_INT, 0);
318312 cfg->move_in_progress = 0;
319313 }
320314
....@@ -352,11 +346,6 @@
352346 }
353347 return IRQ_HANDLED;
354348 }
355
-
356
-static struct irqaction irq_move_irqaction = {
357
- .handler = smp_irq_move_cleanup_interrupt,
358
- .name = "irq_move"
359
-};
360349
361350 static int __init parse_vector_domain(char *arg)
362351 {
....@@ -585,30 +574,18 @@
585574 static irqreturn_t dummy_handler (int irq, void *dev_id)
586575 {
587576 BUG();
577
+ return IRQ_NONE;
588578 }
589
-
590
-static struct irqaction ipi_irqaction = {
591
- .handler = handle_IPI,
592
- .name = "IPI"
593
-};
594579
595580 /*
596581 * KVM uses this interrupt to force a cpu out of guest mode
597582 */
598
-static struct irqaction resched_irqaction = {
599
- .handler = dummy_handler,
600
- .name = "resched"
601
-};
602
-
603
-static struct irqaction tlb_irqaction = {
604
- .handler = dummy_handler,
605
- .name = "tlb_flush"
606
-};
607583
608584 #endif
609585
610586 void
611
-ia64_native_register_percpu_irq (ia64_vector vec, struct irqaction *action)
587
+register_percpu_irq(ia64_vector vec, irq_handler_t handler, unsigned long flags,
588
+ const char *name)
612589 {
613590 unsigned int irq;
614591
....@@ -616,8 +593,9 @@
616593 BUG_ON(bind_irq_vector(irq, vec, CPU_MASK_ALL));
617594 irq_set_status_flags(irq, IRQ_PER_CPU);
618595 irq_set_chip(irq, &irq_type_ia64_lsapic);
619
- if (action)
620
- setup_irq(irq, action);
596
+ if (handler)
597
+ if (request_irq(irq, handler, flags, name, NULL))
598
+ pr_err("Failed to request irq %u (%s)\n", irq, name);
621599 irq_set_handler(irq, handle_percpu_irq);
622600 }
623601
....@@ -625,30 +603,26 @@
625603 ia64_native_register_ipi(void)
626604 {
627605 #ifdef CONFIG_SMP
628
- register_percpu_irq(IA64_IPI_VECTOR, &ipi_irqaction);
629
- register_percpu_irq(IA64_IPI_RESCHEDULE, &resched_irqaction);
630
- register_percpu_irq(IA64_IPI_LOCAL_TLB_FLUSH, &tlb_irqaction);
606
+ register_percpu_irq(IA64_IPI_VECTOR, handle_IPI, 0, "IPI");
607
+ register_percpu_irq(IA64_IPI_RESCHEDULE, dummy_handler, 0, "resched");
608
+ register_percpu_irq(IA64_IPI_LOCAL_TLB_FLUSH, dummy_handler, 0,
609
+ "tlb_flush");
631610 #endif
632611 }
633612
634613 void __init
635614 init_IRQ (void)
636615 {
637
-#ifdef CONFIG_ACPI
638616 acpi_boot_init();
639
-#endif
640617 ia64_register_ipi();
641
- register_percpu_irq(IA64_SPURIOUS_INT_VECTOR, NULL);
618
+ register_percpu_irq(IA64_SPURIOUS_INT_VECTOR, NULL, 0, NULL);
642619 #ifdef CONFIG_SMP
643
-#if defined(CONFIG_IA64_GENERIC) || defined(CONFIG_IA64_DIG)
644
- if (vector_domain_type != VECTOR_DOMAIN_NONE)
645
- register_percpu_irq(IA64_IRQ_MOVE_VECTOR, &irq_move_irqaction);
620
+ if (vector_domain_type != VECTOR_DOMAIN_NONE) {
621
+ register_percpu_irq(IA64_IRQ_MOVE_VECTOR,
622
+ smp_irq_move_cleanup_interrupt, 0,
623
+ "irq_move");
624
+ }
646625 #endif
647
-#endif
648
-#ifdef CONFIG_PERFMON
649
- pfm_init_percpu();
650
-#endif
651
- platform_irq_init();
652626 }
653627
654628 void