entry-macro.S 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. /*
  2. * include/asm-arm/arch-clps711x/entry-macro.S
  3. *
  4. * Low-level IRQ helper macros for CLPS711X-based platforms
  5. *
  6. * This file is licensed under the terms of the GNU General Public
  7. * License version 2. This program is licensed "as is" without any
  8. * warranty of any kind, whether express or implied.
  9. */
  10. #include <asm/hardware.h>
  11. #include <asm/hardware/clps7111.h>
  12. .macro disable_fiq
  13. .endm
  14. .macro get_irqnr_preamble, base, tmp
  15. .endm
  16. .macro arch_ret_to_user, tmp1, tmp2
  17. .endm
  18. #if (INTSR2 - INTSR1) != (INTMR2 - INTMR1)
  19. #error INTSR stride != INTMR stride
  20. #endif
  21. .macro get_irqnr_and_base, irqnr, stat, base, mask
  22. mov \base, #CLPS7111_BASE
  23. ldr \stat, [\base, #INTSR1]
  24. ldr \mask, [\base, #INTMR1]
  25. mov \irqnr, #4
  26. mov \mask, \mask, lsl #16
  27. and \stat, \stat, \mask, lsr #16
  28. movs \stat, \stat, lsr #4
  29. bne 1001f
  30. add \base, \base, #INTSR2 - INTSR1
  31. ldr \stat, [\base, #INTSR1]
  32. ldr \mask, [\base, #INTMR1]
  33. mov \irqnr, #16
  34. mov \mask, \mask, lsl #16
  35. and \stat, \stat, \mask, lsr #16
  36. 1001: tst \stat, #255
  37. addeq \irqnr, \irqnr, #8
  38. moveq \stat, \stat, lsr #8
  39. tst \stat, #15
  40. addeq \irqnr, \irqnr, #4
  41. moveq \stat, \stat, lsr #4
  42. tst \stat, #3
  43. addeq \irqnr, \irqnr, #2
  44. moveq \stat, \stat, lsr #2
  45. tst \stat, #1
  46. addeq \irqnr, \irqnr, #1
  47. moveq \stat, \stat, lsr #1
  48. tst \stat, #1 @ bit 0 should be set
  49. .endm