sleep.S 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /*
  2. * Copyright (c) 2013 Samsung Electronics Co., Ltd.
  3. * http://www.samsung.com
  4. *
  5. * Exynos low-level resume code
  6. *
  7. * This program is free software; you can redistribute it and/or modify
  8. * it under the terms of the GNU General Public License as published by
  9. * the Free Software Foundation; either version 2 of the License, or
  10. * (at your option) any later version.
  11. *
  12. * This program is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. * GNU General Public License for more details.
  16. */
  17. #include <linux/linkage.h>
  18. #define CPU_MASK 0xff0ffff0
  19. #define CPU_CORTEX_A9 0x410fc090
  20. /*
  21. * The following code is located into the .data section. This is to
  22. * allow l2x0_regs_phys to be accessed with a relative load while we
  23. * can't rely on any MMU translation. We could have put l2x0_regs_phys
  24. * in the .text section as well, but some setups might insist on it to
  25. * be truly read-only. (Reference from: arch/arm/kernel/sleep.S)
  26. */
  27. .data
  28. .align
  29. /*
  30. * sleep magic, to allow the bootloader to check for an valid
  31. * image to resume to. Must be the first word before the
  32. * exynos_cpu_resume entry.
  33. */
  34. .word 0x2bedf00d
  35. /*
  36. * exynos_cpu_resume
  37. *
  38. * resume code entry for bootloader to call
  39. */
  40. ENTRY(exynos_cpu_resume)
  41. #ifdef CONFIG_CACHE_L2X0
  42. mrc p15, 0, r0, c0, c0, 0
  43. ldr r1, =CPU_MASK
  44. and r0, r0, r1
  45. ldr r1, =CPU_CORTEX_A9
  46. cmp r0, r1
  47. bleq l2c310_early_resume
  48. #endif
  49. b cpu_resume
  50. ENDPROC(exynos_cpu_resume)