lowlevel_init.S 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /*
  2. * Copyright 2017 NXP
  3. *
  4. * SPDX-License-Identifier: GPL-2.0+
  5. */
  6. #include <config.h>
  7. .align 8
  8. .global rom_pointer
  9. rom_pointer:
  10. .space 256
  11. /*
  12. * Routine: save_boot_params (called after reset from start.S)
  13. */
  14. .global save_boot_params
  15. save_boot_params:
  16. /* The firmware provided ATAG/FDT address can be found in r2/x0 */
  17. adr x0, rom_pointer
  18. stp x1, x2, [x0], #16
  19. stp x3, x4, [x0], #16
  20. stp x5, x6, [x0], #16
  21. stp x7, x8, [x0], #16
  22. stp x9, x10, [x0], #16
  23. stp x11, x12, [x0], #16
  24. stp x13, x14, [x0], #16
  25. stp x15, x16, [x0], #16
  26. stp x17, x18, [x0], #16
  27. stp x19, x20, [x0], #16
  28. stp x21, x22, [x0], #16
  29. stp x23, x24, [x0], #16
  30. stp x25, x26, [x0], #16
  31. stp x27, x28, [x0], #16
  32. stp x29, x30, [x0], #16
  33. mov x30, sp
  34. str x30, [x0], #8
  35. /* Returns */
  36. b save_boot_params_ret
  37. .global restore_boot_params
  38. restore_boot_params:
  39. adr x0, rom_pointer
  40. ldp x1, x2, [x0], #16
  41. ldp x3, x4, [x0], #16
  42. ldp x5, x6, [x0], #16
  43. ldp x7, x8, [x0], #16
  44. ldp x9, x10, [x0], #16
  45. ldp x11, x12, [x0], #16
  46. ldp x13, x14, [x0], #16
  47. ldp x15, x16, [x0], #16
  48. ldp x17, x18, [x0], #16
  49. ldp x19, x20, [x0], #16
  50. ldp x21, x22, [x0], #16
  51. ldp x23, x24, [x0], #16
  52. ldp x25, x26, [x0], #16
  53. ldp x27, x28, [x0], #16
  54. ldp x29, x30, [x0], #16
  55. ldr x0, [x0]
  56. mov sp, x0
  57. ret