interrupt.S 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391
  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 <asm/hw_irq.h>
  43. #include <asm/entry.h>
  44. #include <asm/blackfin_defs.h>
  45. #include <asm/cpu/bf533_irq.h>
  46. .global blackfin_irq_panic;
  47. .text
  48. .align 2
  49. #ifndef CONFIG_KGDB
  50. .global evt_emulation
  51. evt_emulation:
  52. SAVE_CONTEXT
  53. r0 = IRQ_EMU;
  54. r1 = seqstat;
  55. sp += -12;
  56. call blackfin_irq_panic;
  57. sp += 12;
  58. rte;
  59. #endif
  60. .global evt_nmi
  61. evt_nmi:
  62. SAVE_CONTEXT
  63. r0 = IRQ_NMI;
  64. r1 = RETN;
  65. sp += -12;
  66. call blackfin_irq_panic;
  67. sp += 12;
  68. _evt_nmi_exit:
  69. rtn;
  70. .global trap
  71. trap:
  72. [--sp] = r0;
  73. [--sp] = r1;
  74. [--sp] = p0;
  75. [--sp] = p1;
  76. [--sp] = astat;
  77. r0 = seqstat;
  78. R0 <<= 26;
  79. R0 >>= 26;
  80. p0 = r0;
  81. p1.l = EVTABLE;
  82. p1.h = EVTABLE;
  83. p0 = p1 + (p0 << 1);
  84. r1 = W[p0] (Z);
  85. p1 = r1;
  86. jump (pc + p1);
  87. .global _EVENT1
  88. _EVENT1:
  89. RAISE 14;
  90. JUMP.S _EXIT;
  91. .global _EVENT2
  92. _EVENT2:
  93. RAISE 14;
  94. JUMP.S _EXIT;
  95. .global _EVENT3
  96. _EVENT3:
  97. RAISE 14;
  98. JUMP.S _EXIT;
  99. .global _EVENT4
  100. _EVENT4:
  101. RAISE 14;
  102. JUMP.S _EXIT;
  103. .global _EVENT5
  104. _EVENT5:
  105. RAISE 14;
  106. JUMP.S _EXIT;
  107. .global _EVENT6
  108. _EVENT6:
  109. RAISE 14;
  110. JUMP.S _EXIT;
  111. .global _EVENT7
  112. _EVENT7:
  113. RAISE 15;
  114. JUMP.S _EXIT;
  115. .global _EVENT8
  116. _EVENT8:
  117. RAISE 14;
  118. JUMP.S _EXIT;
  119. .global _EVENT9
  120. _EVENT9:
  121. RAISE 14;
  122. JUMP.S _EXIT;
  123. .global _EVENT10
  124. _EVENT10:
  125. RAISE 14;
  126. JUMP.S _EXIT;
  127. .global _EVENT11
  128. _EVENT11:
  129. RAISE 14;
  130. JUMP.S _EXIT;
  131. .global _EVENT12
  132. _EVENT12:
  133. RAISE 14;
  134. JUMP.S _EXIT;
  135. .global _EVENT13
  136. _EVENT13:
  137. RAISE 14;
  138. JUMP.S _EXIT;
  139. .global _EVENT14
  140. _EVENT14:
  141. /* RAISE 14; */
  142. CALL _cplb_hdr;
  143. JUMP.S _EXIT;
  144. .global _EVENT19
  145. _EVENT19:
  146. RAISE 14;
  147. JUMP.S _EXIT;
  148. .global _EVENT20
  149. _EVENT20:
  150. RAISE 14;
  151. JUMP.S _EXIT;
  152. .global _EVENT21
  153. _EVENT21:
  154. RAISE 14;
  155. JUMP.S _EXIT;
  156. .global _EXIT
  157. _EXIT:
  158. ASTAT = [sp++];
  159. p1 = [sp++];
  160. p0 = [sp++];
  161. r1 = [sp++];
  162. r0 = [sp++];
  163. RTX;
  164. EVTABLE:
  165. .byte2 0x0000;
  166. .byte2 0x0000;
  167. .byte2 0x0000;
  168. .byte2 0x0000;
  169. .byte2 0x0000;
  170. .byte2 0x0000;
  171. .byte2 0x0000;
  172. .byte2 0x0000;
  173. .byte2 0x0000;
  174. .byte2 0x0000;
  175. .byte2 0x0000;
  176. .byte2 0x0000;
  177. .byte2 0x0000;
  178. .byte2 0x0000;
  179. .byte2 0x0000;
  180. .byte2 0x0000;
  181. .byte2 0x003E;
  182. .byte2 0x0042;
  183. .byte4 0x0000;
  184. .byte4 0x0000;
  185. .byte4 0x0000;
  186. .byte4 0x0000;
  187. .byte4 0x0000;
  188. .byte4 0x0000;
  189. .byte4 0x0000;
  190. .byte2 0x0000;
  191. .byte2 0x001E;
  192. .byte2 0x0022;
  193. .byte2 0x0032;
  194. .byte2 0x002e;
  195. .byte2 0x0002;
  196. .byte2 0x0036;
  197. .byte2 0x002A;
  198. .byte2 0x001A;
  199. .byte2 0x0016;
  200. .byte2 0x000A;
  201. .byte2 0x000E;
  202. .byte2 0x0012;
  203. .byte2 0x0006;
  204. .byte2 0x0026;
  205. .global evt_rst
  206. evt_rst:
  207. SAVE_CONTEXT
  208. r0 = IRQ_RST;
  209. r1 = RETN;
  210. sp += -12;
  211. call do_reset;
  212. sp += 12;
  213. _evt_rst_exit:
  214. rtn;
  215. irq_panic:
  216. r0 = IRQ_EVX;
  217. r1 = sp;
  218. sp += -12;
  219. call blackfin_irq_panic;
  220. sp += 12;
  221. .global evt_ivhw
  222. evt_ivhw:
  223. SAVE_CONTEXT
  224. RAISE 14;
  225. _evt_ivhw_exit:
  226. rti;
  227. .global evt_timer
  228. evt_timer:
  229. SAVE_CONTEXT
  230. r0 = IRQ_CORETMR;
  231. sp += -12;
  232. /* Polling method used now. */
  233. /* call timer_int; */
  234. sp += 12;
  235. RESTORE_CONTEXT
  236. rti;
  237. nop;
  238. .global evt_evt7
  239. evt_evt7:
  240. SAVE_CONTEXT
  241. r0 = 7;
  242. sp += -12;
  243. call process_int;
  244. sp += 12;
  245. evt_evt7_exit:
  246. RESTORE_CONTEXT
  247. rti;
  248. .global evt_evt8
  249. evt_evt8:
  250. SAVE_CONTEXT
  251. r0 = 8;
  252. sp += -12;
  253. call process_int;
  254. sp += 12;
  255. evt_evt8_exit:
  256. RESTORE_CONTEXT
  257. rti;
  258. .global evt_evt9
  259. evt_evt9:
  260. SAVE_CONTEXT
  261. r0 = 9;
  262. sp += -12;
  263. call process_int;
  264. sp += 12;
  265. evt_evt9_exit:
  266. RESTORE_CONTEXT
  267. rti;
  268. .global evt_evt10
  269. evt_evt10:
  270. SAVE_CONTEXT
  271. r0 = 10;
  272. sp += -12;
  273. call process_int;
  274. sp += 12;
  275. evt_evt10_exit:
  276. RESTORE_CONTEXT
  277. rti;
  278. .global evt_evt11
  279. evt_evt11:
  280. SAVE_CONTEXT
  281. r0 = 11;
  282. sp += -12;
  283. call process_int;
  284. sp += 12;
  285. evt_evt11_exit:
  286. RESTORE_CONTEXT
  287. rti;
  288. .global evt_evt12
  289. evt_evt12:
  290. SAVE_CONTEXT
  291. r0 = 12;
  292. sp += -12;
  293. call process_int;
  294. sp += 12;
  295. evt_evt12_exit:
  296. RESTORE_CONTEXT
  297. rti;
  298. .global evt_evt13
  299. evt_evt13:
  300. SAVE_CONTEXT
  301. r0 = 13;
  302. sp += -12;
  303. call process_int;
  304. sp += 12;
  305. evt_evt13_exit:
  306. RESTORE_CONTEXT
  307. rti;
  308. .global evt_system_call
  309. evt_system_call:
  310. [--sp] = r0;
  311. [--SP] = RETI;
  312. r0 = [sp++];
  313. r0 += 2;
  314. [--sp] = r0;
  315. RETI = [SP++];
  316. r0 = [SP++];
  317. SAVE_CONTEXT
  318. sp += -12;
  319. call display_excp;
  320. sp += 12;
  321. RESTORE_CONTEXT
  322. RTI;
  323. evt_system_call_exit:
  324. rti;
  325. .global evt_soft_int1
  326. evt_soft_int1:
  327. [--sp] = r0;
  328. [--SP] = RETI;
  329. r0 = [sp++];
  330. r0 += 2;
  331. [--sp] = r0;
  332. RETI = [SP++];
  333. r0 = [SP++];
  334. SAVE_CONTEXT
  335. sp += -12;
  336. call display_excp;
  337. sp += 12;
  338. RESTORE_CONTEXT
  339. RTI;
  340. evt_soft_int1_exit:
  341. rti;