entry-macro.S 1.2 KB

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