cpu_gcc.S 907 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. /*
  2. * Date Author Notes
  3. * 2018-10-06 ZhaoXiaowei the first version
  4. */
  5. .text
  6. .globl rt_hw_get_current_el
  7. rt_hw_get_current_el:
  8. MRS X0, CurrentEL
  9. CMP X0, 0xc
  10. B.EQ 3f
  11. CMP X0, 0x8
  12. B.EQ 2f
  13. CMP X0, 0x4
  14. B.EQ 1f
  15. LDR X0, =0
  16. B 0f
  17. 3:
  18. LDR X0, =3
  19. B 0f
  20. 2:
  21. LDR X0, =2
  22. B 0f
  23. 1:
  24. LDR X0, =1
  25. B 0f
  26. 0:
  27. RET
  28. .globl rt_hw_set_current_vbar
  29. rt_hw_set_current_vbar:
  30. MRS X1, CurrentEL
  31. CMP X1, 0xc
  32. B.EQ 3f
  33. CMP X1, 0x8
  34. B.EQ 2f
  35. CMP X1, 0x4
  36. B.EQ 1f
  37. B 0f
  38. 3:
  39. MSR VBAR_EL3,X0
  40. B 0f
  41. 2:
  42. MSR VBAR_EL2,X0
  43. B 0f
  44. 1:
  45. MSR VBAR_EL1,X0
  46. B 0f
  47. 0:
  48. RET
  49. .globl rt_hw_set_elx_env
  50. rt_hw_set_elx_env:
  51. MRS X1, CurrentEL
  52. CMP X1, 0xc
  53. B.EQ 3f
  54. CMP X1, 0x8
  55. B.EQ 2f
  56. CMP X1, 0x4
  57. B.EQ 1f
  58. B 0f
  59. 3:
  60. MRS X0, SCR_EL3
  61. ORR X0, X0, #0xF /* SCR_EL3.NS|IRQ|FIQ|EA */
  62. MSR SCR_EL3, X0
  63. B 0f
  64. 2:
  65. MRS X0, HCR_EL2
  66. ORR X0, X0, #0x38
  67. MSR HCR_EL2, X0
  68. B 0f
  69. 1:
  70. B 0f
  71. 0:
  72. RET