msm_watchdog_asm.S 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /* Copyright (c) 2012, The Linux Foundation. All rights reserved.
  2. *
  3. * This program is free software; you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License version 2 and
  5. * only version 2 as published by the Free Software Foundation.
  6. *
  7. * This program is distributed in the hope that it will be useful,
  8. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. * GNU General Public License for more details.
  11. *
  12. */
  13. #include <linux/linkage.h>
  14. #include <asm/assembler.h>
  15. #define VERSION_ID 0x1
  16. #define MAGIC 0xDEAD0000 | VERSION_ID
  17. .text
  18. .align 3
  19. ENTRY(msm_wdog_fiq_start)
  20. mov sp, r8 @get stack
  21. ldr r8, Ldump_cpu_ctx
  22. @ store magic to indicate a valid dump
  23. ldr r9, Lmagic
  24. str r9, [r8], #4
  25. @ get the current cpsr
  26. mrs r9, cpsr
  27. str r9, [r8],#4
  28. @ get the USR r0-r7
  29. stmia r8!, {r0-r7}
  30. mov r4, r8
  31. mov r5, #PSR_I_BIT | PSR_F_BIT | SYSTEM_MODE
  32. msr cpsr_c, r5 @ select SYSTEM mode
  33. stmia r4!, {r8-r14}
  34. mov r5, #PSR_I_BIT | PSR_F_BIT | IRQ_MODE
  35. msr cpsr_c, r5 @ select IRQ mode
  36. mrs r5, spsr
  37. str r5, [r4], #4
  38. stmia r4!, {r13-r14}
  39. mov r5, #PSR_I_BIT | PSR_F_BIT | SVC_MODE
  40. msr cpsr_c, r5 @ select SVC mode
  41. mrs r5, spsr
  42. str r5, [r4], #4
  43. stmia r4!, {r13-r14}
  44. mov r5, #PSR_I_BIT | PSR_F_BIT | ABT_MODE
  45. msr cpsr_c, r5 @ select ABT mode
  46. mrs r5, spsr
  47. str r5, [r4], #4
  48. stmia r4!, {r13-r14}
  49. mov r5, #PSR_I_BIT | PSR_F_BIT | UND_MODE
  50. msr cpsr_c, r5 @ select UND mode
  51. mrs r5, spsr
  52. str r5, [r4], #4
  53. stmia r4!, {r13-r14}
  54. mov r5, #PSR_I_BIT | PSR_F_BIT | FIQ_MODE
  55. msr cpsr_c, r5 @ select FIQ mode
  56. mrs r5, spsr
  57. str r5, [r4], #4
  58. stmia r4!, {r8-r14}
  59. dsb
  60. mov r5, #PSR_F_BIT | SVC_MODE
  61. msr cpsr_c, r5 @ select SVC mode
  62. ldr r2, Lwatchdog_bark_fin
  63. blx r2
  64. Ldump_cpu_ctx:
  65. .word msm_dump_cpu_ctx
  66. Lmagic:
  67. .word MAGIC
  68. Lwatchdog_bark_fin:
  69. .word msm_wdog_bark_fin
  70. ENTRY(msm_wdog_fiq_length)
  71. .word . - msm_wdog_fiq_start
  72. /* setup the stack */
  73. ENTRY(msm_wdog_fiq_setup)
  74. mrs r3, cpsr
  75. msr cpsr_c, #(FIQ_MODE | PSR_I_BIT | PSR_F_BIT)
  76. mov r8, r0
  77. msr cpsr_c, r3
  78. bx lr