entry-macro.S 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. /*
  2. * arch/arm/mach-h720x/include/mach/entry-macro.S
  3. *
  4. * Low-level IRQ helper macros for Hynix HMS720x 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. .macro disable_fiq
  11. .endm
  12. .macro get_irqnr_preamble, base, tmp
  13. .endm
  14. .macro arch_ret_to_user, tmp1, tmp2
  15. .endm
  16. .macro get_irqnr_and_base, irqnr, irqstat, base, tmp
  17. #if defined (CONFIG_CPU_H7201) || defined (CONFIG_CPU_H7202)
  18. @ we could use the id register on H7202, but this is not
  19. @ properly updated when we come back from asm_do_irq
  20. @ without a previous return from interrupt
  21. @ (see loops below in irq_svc, irq_usr)
  22. @ We see unmasked pending ints only, as the masked pending ints
  23. @ are not visible here
  24. mov \base, #0xf0000000 @ base register
  25. orr \base, \base, #0x24000 @ irqbase
  26. ldr \irqstat, [\base, #0x04] @ get interrupt status
  27. #if defined (CONFIG_CPU_H7201)
  28. ldr \tmp, =0x001fffff
  29. #else
  30. mvn \tmp, #0xc0000000
  31. #endif
  32. and \irqstat, \irqstat, \tmp @ mask out unused ints
  33. mov \irqnr, #0
  34. mov \tmp, #0xff00
  35. orr \tmp, \tmp, #0xff
  36. tst \irqstat, \tmp
  37. addeq \irqnr, \irqnr, #16
  38. moveq \irqstat, \irqstat, lsr #16
  39. tst \irqstat, #255
  40. addeq \irqnr, \irqnr, #8
  41. moveq \irqstat, \irqstat, lsr #8
  42. tst \irqstat, #15
  43. addeq \irqnr, \irqnr, #4
  44. moveq \irqstat, \irqstat, lsr #4
  45. tst \irqstat, #3
  46. addeq \irqnr, \irqnr, #2
  47. moveq \irqstat, \irqstat, lsr #2
  48. tst \irqstat, #1
  49. addeq \irqnr, \irqnr, #1
  50. moveq \irqstat, \irqstat, lsr #1
  51. tst \irqstat, #1 @ bit 0 should be set
  52. .endm
  53. .macro irq_prio_table
  54. .endm
  55. #else
  56. #error hynix processor selection missmatch
  57. #endif