entry-macro.S 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  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. #if (INTSR2 - INTSR1) != (INTMR2 - INTMR1)
  15. #error INTSR stride != INTMR stride
  16. #endif
  17. .macro get_irqnr_and_base, irqnr, stat, base, mask
  18. mov \base, #CLPS7111_BASE
  19. ldr \stat, [\base, #INTSR1]
  20. ldr \mask, [\base, #INTMR1]
  21. mov \irqnr, #4
  22. mov \mask, \mask, lsl #16
  23. and \stat, \stat, \mask, lsr #16
  24. movs \stat, \stat, lsr #4
  25. bne 1001f
  26. add \base, \base, #INTSR2 - INTSR1
  27. ldr \stat, [\base, #INTSR1]
  28. ldr \mask, [\base, #INTMR1]
  29. mov \irqnr, #16
  30. mov \mask, \mask, lsl #16
  31. and \stat, \stat, \mask, lsr #16
  32. 1001: tst \stat, #255
  33. addeq \irqnr, \irqnr, #8
  34. moveq \stat, \stat, lsr #8
  35. tst \stat, #15
  36. addeq \irqnr, \irqnr, #4
  37. moveq \stat, \stat, lsr #4
  38. tst \stat, #3
  39. addeq \irqnr, \irqnr, #2
  40. moveq \stat, \stat, lsr #2
  41. tst \stat, #1
  42. addeq \irqnr, \irqnr, #1
  43. moveq \stat, \stat, lsr #1
  44. tst \stat, #1 @ bit 0 should be set
  45. .endm