irq.c 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /*
  2. * This file is subject to the terms and conditions of the GNU General Public
  3. * License. See the file "COPYING" in the main directory of this archive
  4. * for more details.
  5. *
  6. * Copyright (C) 2003 Atheros Communications, Inc., All Rights Reserved.
  7. * Copyright (C) 2006 FON Technology, SL.
  8. * Copyright (C) 2006 Imre Kaloz <[email protected]>
  9. * Copyright (C) 2006 Felix Fietkau <[email protected]>
  10. */
  11. /*
  12. * Interrupt support for AR531X WiSOC.
  13. */
  14. #include <linux/autoconf.h>
  15. #include <linux/init.h>
  16. #include <linux/kernel_stat.h>
  17. #include <linux/signal.h>
  18. #include <linux/sched.h>
  19. #include <linux/interrupt.h>
  20. #include <linux/slab.h>
  21. #include <linux/random.h>
  22. #include <linux/pm.h>
  23. #include <linux/delay.h>
  24. #include <linux/reboot.h>
  25. #include <linux/irq.h>
  26. #include <asm/bootinfo.h>
  27. #include <asm/mipsregs.h>
  28. #include <asm/irq_cpu.h>
  29. #include "ar531x.h"
  30. /* ARGSUSED */
  31. irqreturn_t
  32. spurious_irq_handler(int cpl, void *dev_id)
  33. {
  34. /*
  35. printk("spurious_irq_handler: %d cause=0x%8.8x status=0x%8.8x\n",
  36. cpl, cause_intrs, status_intrs);
  37. */
  38. return IRQ_NONE;
  39. }
  40. /* ARGSUSED */
  41. irqreturn_t
  42. spurious_misc_handler(int cpl, void *dev_id)
  43. {
  44. /*
  45. printk("spurious_misc_handler: 0x%x isr=0x%8.8x imr=0x%8.8x\n",
  46. cpl, ar531x_isr, ar531x_imr);
  47. */
  48. return IRQ_NONE;
  49. }
  50. static struct irqaction spurious_irq = {
  51. .handler = spurious_irq_handler,
  52. .flags = SA_INTERRUPT,
  53. .name = "spurious_irq",
  54. };
  55. static struct irqaction spurious_misc = {
  56. .handler = spurious_misc_handler,
  57. .flags = SA_INTERRUPT,
  58. .name = "spurious_misc",
  59. };
  60. asmlinkage void plat_irq_dispatch(void)
  61. {
  62. DO_AR5312(ar5312_irq_dispatch();)
  63. DO_AR5315(ar5315_irq_dispatch();)
  64. }
  65. void __init arch_init_irq(void)
  66. {
  67. clear_c0_status(ST0_IM);
  68. mips_cpu_irq_init();
  69. /* Initialize interrupt controllers */
  70. DO_AR5312(ar5312_misc_intr_init(AR531X_MISC_IRQ_BASE);)
  71. DO_AR5315(ar5315_misc_intr_init(AR531X_MISC_IRQ_BASE);)
  72. /* Default "spurious interrupt" handlers */
  73. setup_irq(AR531X_IRQ_NONE, &spurious_irq);
  74. setup_irq(AR531X_MISC_IRQ_NONE, &spurious_misc);
  75. }