interrupt.S 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. /*
  2. * U-boot - interrupt.S Processing of interrupts and exception handling
  3. *
  4. * Copyright (c) 2005 blackfin.uclinux.org
  5. *
  6. * (C) Copyright 2000-2004
  7. * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
  8. *
  9. * This file is based on interrupt.S
  10. *
  11. * Copyright (C) 2003 Metrowerks, Inc. <mwaddel@metrowerks.com>
  12. * Copyright (C) 2002 Arcturus Networks Ltd. Ted Ma <mated@sympatico.ca>
  13. * Copyright (C) 1998 D. Jeff Dionne <jeff@ryeham.ee.ryerson.ca>,
  14. * Kenneth Albanowski <kjahds@kjahds.com>,
  15. * The Silver Hammer Group, Ltd.
  16. *
  17. * (c) 1995, Dionne & Associates
  18. * (c) 1995, DKG Display Tech.
  19. *
  20. * This file is also based on exception.asm
  21. * (C) Copyright 2001-2005 - Analog Devices, Inc. All rights reserved.
  22. *
  23. * See file CREDITS for list of people who contributed to this
  24. * project.
  25. *
  26. * This program is free software; you can redistribute it and/or
  27. * modify it under the terms of the GNU General Public License as
  28. * published by the Free Software Foundation; either version 2 of
  29. * the License, or (at your option) any later version.
  30. *
  31. * This program is distributed in the hope that it will be useful,
  32. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  33. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  34. * GNU General Public License for more details.
  35. *
  36. * You should have received a copy of the GNU General Public License
  37. * along with this program; if not, write to the Free Software
  38. * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  39. * MA 02111-1307 USA
  40. */
  41. #define ASSEMBLY
  42. #include <config.h>
  43. #include <asm/blackfin.h>
  44. #include <asm/hw_irq.h>
  45. #include <asm/entry.h>
  46. #include <asm/blackfin_defs.h>
  47. .global _blackfin_irq_panic;
  48. .text
  49. .align 2
  50. #ifndef CONFIG_KGDB
  51. .global _evt_emulation
  52. _evt_emulation:
  53. SAVE_CONTEXT
  54. r0 = IRQ_EMU;
  55. r1 = seqstat;
  56. sp += -12;
  57. call _blackfin_irq_panic;
  58. sp += 12;
  59. rte;
  60. #endif
  61. .global _evt_nmi
  62. _evt_nmi:
  63. SAVE_CONTEXT
  64. r0 = IRQ_NMI;
  65. r1 = RETN;
  66. sp += -12;
  67. call _blackfin_irq_panic;
  68. sp += 12;
  69. _evt_nmi_exit:
  70. rtn;
  71. .global _trap
  72. _trap:
  73. SAVE_ALL_SYS
  74. r0 = sp; /* stack frame pt_regs pointer argument ==> r0 */
  75. sp += -12;
  76. call _trap_c
  77. sp += 12;
  78. RESTORE_ALL_SYS
  79. rtx;
  80. .global _evt_rst
  81. _evt_rst:
  82. SAVE_CONTEXT
  83. r0 = IRQ_RST;
  84. r1 = RETN;
  85. sp += -12;
  86. call _do_reset;
  87. sp += 12;
  88. _evt_rst_exit:
  89. rtn;
  90. irq_panic:
  91. r0 = IRQ_EVX;
  92. r1 = sp;
  93. sp += -12;
  94. call _blackfin_irq_panic;
  95. sp += 12;
  96. .global _evt_ivhw
  97. _evt_ivhw:
  98. SAVE_CONTEXT
  99. RAISE 14;
  100. _evt_ivhw_exit:
  101. rti;
  102. .global _evt_timer
  103. _evt_timer:
  104. SAVE_CONTEXT
  105. r0 = IRQ_CORETMR;
  106. sp += -12;
  107. /* Polling method used now. */
  108. /* call timer_int; */
  109. sp += 12;
  110. RESTORE_CONTEXT
  111. rti;
  112. nop;
  113. .global _evt_evt7
  114. _evt_evt7:
  115. SAVE_CONTEXT
  116. r0 = 7;
  117. sp += -12;
  118. call _process_int;
  119. sp += 12;
  120. evt_evt7_exit:
  121. RESTORE_CONTEXT
  122. rti;
  123. .global _evt_evt8
  124. _evt_evt8:
  125. SAVE_CONTEXT
  126. r0 = 8;
  127. sp += -12;
  128. call _process_int;
  129. sp += 12;
  130. evt_evt8_exit:
  131. RESTORE_CONTEXT
  132. rti;
  133. .global _evt_evt9
  134. _evt_evt9:
  135. SAVE_CONTEXT
  136. r0 = 9;
  137. sp += -12;
  138. call _process_int;
  139. sp += 12;
  140. evt_evt9_exit:
  141. RESTORE_CONTEXT
  142. rti;
  143. .global _evt_evt10
  144. _evt_evt10:
  145. SAVE_CONTEXT
  146. r0 = 10;
  147. sp += -12;
  148. call _process_int;
  149. sp += 12;
  150. evt_evt10_exit:
  151. RESTORE_CONTEXT
  152. rti;
  153. .global _evt_evt11
  154. _evt_evt11:
  155. SAVE_CONTEXT
  156. r0 = 11;
  157. sp += -12;
  158. call _process_int;
  159. sp += 12;
  160. evt_evt11_exit:
  161. RESTORE_CONTEXT
  162. rti;
  163. .global _evt_evt12
  164. _evt_evt12:
  165. SAVE_CONTEXT
  166. r0 = 12;
  167. sp += -12;
  168. call _process_int;
  169. sp += 12;
  170. evt_evt12_exit:
  171. RESTORE_CONTEXT
  172. rti;
  173. .global _evt_evt13
  174. _evt_evt13:
  175. SAVE_CONTEXT
  176. r0 = 13;
  177. sp += -12;
  178. call _process_int;
  179. sp += 12;
  180. evt_evt13_exit:
  181. RESTORE_CONTEXT
  182. rti;
  183. .global _evt_system_call
  184. _evt_system_call:
  185. [--sp] = r0;
  186. [--SP] = RETI;
  187. r0 = [sp++];
  188. r0 += 2;
  189. [--sp] = r0;
  190. RETI = [SP++];
  191. r0 = [SP++];
  192. SAVE_CONTEXT
  193. sp += -12;
  194. call _exception_handle;
  195. sp += 12;
  196. RESTORE_CONTEXT
  197. RTI;
  198. evt_system_call_exit:
  199. rti;
  200. .global _evt_soft_int1
  201. _evt_soft_int1:
  202. [--sp] = r0;
  203. [--SP] = RETI;
  204. r0 = [sp++];
  205. r0 += 2;
  206. [--sp] = r0;
  207. RETI = [SP++];
  208. r0 = [SP++];
  209. SAVE_CONTEXT
  210. sp += -12;
  211. call _exception_handle;
  212. sp += 12;
  213. RESTORE_CONTEXT
  214. RTI;
  215. evt_soft_int1_exit:
  216. rti;