lowlevel_init.S 1016 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /* SPDX-License-Identifier: GPL-2.0+ */
  2. /*
  3. * Copyright (C) 2012 Nobuhiro Iwamatsu <nobuhiro.Iwamatsu.yj@renesas.com>
  4. * Copyright (C) 2012 Renesas Solutions Corp.
  5. */
  6. #include <config.h>
  7. #include <linux/linkage.h>
  8. ENTRY(lowlevel_init)
  9. ldr r0, =MERAM_BASE
  10. mov r1, #0x0
  11. str r1, [r0]
  12. mrc p15, 0, r0, c0, c0, 5
  13. ands r0, r0, #0xF
  14. beq lowlevel_init__
  15. b wait_interrupt
  16. .pool
  17. .align 4
  18. wait_interrupt:
  19. #ifdef ICCICR
  20. ldr r1, =ICCICR
  21. mov r2, #0x0
  22. str r2, [r1]
  23. mov r2, #0xF0
  24. adds r1, r1, #4 /* ICCPMR */
  25. str r2, [r1]
  26. ldr r1, =ICCICR
  27. mov r2, #0x1
  28. str r2, [r1]
  29. #endif
  30. wait_loop:
  31. .long 0xE320F003 /* wfi */
  32. ldr r2, [r1, #0xC]
  33. str r2, [r1, #0x10]
  34. ldr r0, =MERAM_BASE
  35. ldr r2, [r0]
  36. cmp r2, #0
  37. movne pc, r2
  38. b wait_loop
  39. wait_loop_end:
  40. .pool
  41. .align 4
  42. lowlevel_init__:
  43. mov r0, #0x200000
  44. loop0:
  45. subs r0, r0, #1
  46. bne loop0
  47. ldr sp, MERAM_STACK
  48. b s_init
  49. .pool
  50. .align 4
  51. ENDPROC(lowlevel_init)
  52. .ltorg
  53. MERAM_STACK:
  54. .word LOW_LEVEL_MERAM_STACK