lowlevel_spl.S 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /* SPDX-License-Identifier: GPL-2.0+ */
  2. #include <config.h>
  3. #include <linux/linkage.h>
  4. ENTRY(save_boot_params)
  5. stmfd sp!, {r0 - r12, lr} /* @ save registers on stack */
  6. ldr r12, =CONFIG_SPL_BOOTROM_SAVE
  7. str sp, [r12]
  8. b save_boot_params_ret
  9. ENDPROC(save_boot_params)
  10. ENTRY(return_to_bootrom)
  11. ldr r12, =CONFIG_SPL_BOOTROM_SAVE
  12. ldr sp, [r12]
  13. mov r0, #0x0 /* @ return value: 0x0 NO_ERR */
  14. ldmfd sp!, {r0 - r12, pc} /* @ restore regs and return */
  15. ENDPROC(return_to_bootrom)
  16. /*
  17. * cache_inv - invalidate Cache line
  18. * r0 - dest
  19. */
  20. .global cache_inv
  21. .type cache_inv, %function
  22. cache_inv:
  23. stmfd sp!, {r1-r12}
  24. mcr p15, 0, r0, c7, c6, 1
  25. ldmfd sp!, {r1-r12}
  26. bx lr
  27. /*
  28. * flush_l1_v6 - l1 cache clean invalidate
  29. * r0 - dest
  30. */
  31. .global flush_l1_v6
  32. .type flush_l1_v6, %function
  33. flush_l1_v6:
  34. stmfd sp!, {r1-r12}
  35. mcr p15, 0, r0, c7, c10, 5 /* @ data memory barrier */
  36. mcr p15, 0, r0, c7, c14, 1 /* @ clean & invalidate D line */
  37. mcr p15, 0, r0, c7, c10, 4 /* @ data sync barrier */
  38. ldmfd sp!, {r1-r12}
  39. bx lr
  40. /*
  41. * flush_l1_v7 - l1 cache clean invalidate
  42. * r0 - dest
  43. */
  44. .global flush_l1_v7
  45. .type flush_l1_v7, %function
  46. flush_l1_v7:
  47. stmfd sp!, {r1-r12}
  48. dmb /* @data memory barrier */
  49. mcr p15, 0, r0, c7, c14, 1 /* @ clean & invalidate D line */
  50. dsb /* @data sync barrier */
  51. ldmfd sp!, {r1-r12}
  52. bx lr