sbi_hfence.S 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. /*
  2. * SPDX-License-Identifier: BSD-2-Clause
  3. *
  4. * Copyright (c) 2019 Western Digital Corporation or its affiliates.
  5. *
  6. * Authors:
  7. * Anup Patel <anup.patel@wdc.com>
  8. * Atish Patra <anup.patel@wdc.com>
  9. */
  10. /*
  11. * HFENCE.GVMA rs1, rs2
  12. * HFENCE.GVMA zero, rs2
  13. * HFENCE.GVMA rs1
  14. * HFENCE.GVMA
  15. *
  16. * rs1!=zero and rs2!=zero ==> HFENCE.GVMA rs1, rs2
  17. * rs1==zero and rs2!=zero ==> HFENCE.GVMA zero, rs2
  18. * rs1!=zero and rs2==zero ==> HFENCE.GVMA rs1
  19. * rs1==zero and rs2==zero ==> HFENCE.GVMA
  20. *
  21. * Instruction encoding of HFENCE.GVMA is:
  22. * 0110001 rs2(5) rs1(5) 000 00000 1110011
  23. */
  24. .align 3
  25. .global __sbi_hfence_gvma_vmid_gpa
  26. __sbi_hfence_gvma_vmid_gpa:
  27. /*
  28. * rs1 = a0 (GPA >> 2)
  29. * rs2 = a1 (VMID)
  30. * HFENCE.GVMA a0, a1
  31. * 0110001 01011 01010 000 00000 1110011
  32. */
  33. .word 0x62b50073
  34. ret
  35. .align 3
  36. .global __sbi_hfence_gvma_vmid
  37. __sbi_hfence_gvma_vmid:
  38. /*
  39. * rs1 = zero
  40. * rs2 = a0 (VMID)
  41. * HFENCE.GVMA zero, a0
  42. * 0110001 01010 00000 000 00000 1110011
  43. */
  44. .word 0x62a00073
  45. ret
  46. .align 3
  47. .global __sbi_hfence_gvma_gpa
  48. __sbi_hfence_gvma_gpa:
  49. /*
  50. * rs1 = a0 (GPA >> 2)
  51. * rs2 = zero
  52. * HFENCE.GVMA a0
  53. * 0110001 00000 01010 000 00000 1110011
  54. */
  55. .word 0x62050073
  56. ret
  57. .align 3
  58. .global __sbi_hfence_gvma_all
  59. __sbi_hfence_gvma_all:
  60. /*
  61. * rs1 = zero
  62. * rs2 = zero
  63. * HFENCE.GVMA
  64. * 0110001 00000 00000 000 00000 1110011
  65. */
  66. .word 0x62000073
  67. ret
  68. /*
  69. * HFENCE.VVMA rs1, rs2
  70. * HFENCE.VVMA zero, rs2
  71. * HFENCE.VVMA rs1
  72. * HFENCE.VVMA
  73. *
  74. * rs1!=zero and rs2!=zero ==> HFENCE.VVMA rs1, rs2
  75. * rs1==zero and rs2!=zero ==> HFENCE.VVMA zero, rs2
  76. * rs1!=zero and rs2==zero ==> HFENCE.VVMA rs1
  77. * rs1==zero and rs2==zero ==> HFENCE.vVMA
  78. *
  79. * Instruction encoding of HFENCE.VVMA is:
  80. * 0010001 rs2(5) rs1(5) 000 00000 1110011
  81. */
  82. .align 3
  83. .global __sbi_hfence_vvma_asid_va
  84. __sbi_hfence_vvma_asid_va:
  85. /*
  86. * rs1 = a0 (VA)
  87. * rs2 = a1 (ASID)
  88. * HFENCE.VVMA a0, a1
  89. * 0010001 01011 01010 000 00000 1110011
  90. */
  91. .word 0x22b50073
  92. ret
  93. .align 3
  94. .global __sbi_hfence_vvma_asid
  95. __sbi_hfence_vvma_asid:
  96. /*
  97. * rs1 = zero
  98. * rs2 = a0 (ASID)
  99. * HFENCE.VVMA zero, a0
  100. * 0010001 01010 00000 000 00000 1110011
  101. */
  102. .word 0x22a00073
  103. ret
  104. .align 3
  105. .global __sbi_hfence_vvma_va
  106. __sbi_hfence_vvma_va:
  107. /*
  108. * rs1 = a0 (VA)
  109. * rs2 = zero
  110. * HFENCE.VVMA zero, a0
  111. * 0010001 00000 01010 000 00000 1110011
  112. */
  113. .word 0x22050073
  114. ret
  115. .align 3
  116. .global __sbi_hfence_vvma_all
  117. __sbi_hfence_vvma_all:
  118. /*
  119. * rs1 = zero
  120. * rs2 = zero
  121. * HFENCE.VVMA
  122. * 0010001 00000 00000 000 00000 1110011
  123. */
  124. .word 0x22000073
  125. ret