soc_sleep.S 752 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /*
  2. * Copyright (c) 2022 Actions Semiconductor Co., Ltd
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. /**
  7. * @file soc_sleep.S sleep for Actions SoC
  8. */
  9. #include <toolchain.h>
  10. #include <linker/sections.h>
  11. _ASM_FILE_PROLOGUE
  12. GTEXT(__cpu_suspend)
  13. GTEXT(__cpu_resume)
  14. GDATA(soc_sleep_backup)
  15. SECTION_FUNC(sleepfunc, __cpu_suspend)
  16. ldr ip, =soc_sleep_backup
  17. stmia ip!, {r0-r11}
  18. mov r0, sp
  19. mov r1, lr
  20. mrs r2, MSP
  21. mrs r3, PSP
  22. stmia ip!, {r0-r3}
  23. dsb
  24. wfi
  25. isb
  26. bx lr
  27. SECTION_FUNC(sleepfunc, __cpu_resume)
  28. mrs r0, CONTROL
  29. movs r1, #2
  30. orrs r0, r1
  31. msr CONTROL, r0
  32. isb
  33. ldr ip, =soc_sleep_backup
  34. add ip, #48
  35. ldmia ip!, {r0-r3}
  36. mov sp, r0
  37. mov lr, r1
  38. msr MSP, r2
  39. msr PSP, r3
  40. ldr ip, =soc_sleep_backup
  41. ldmia ip!, {r0-r11}
  42. isb
  43. bx lr