misc.S 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. /*
  2. * arch/xtensa/mm/misc.S
  3. *
  4. * Miscellaneous assembly functions.
  5. *
  6. * This file is subject to the terms and conditions of the GNU General Public
  7. * License. See the file "COPYING" in the main directory of this archive
  8. * for more details.
  9. *
  10. * Copyright (C) 2001 - 2005 Tensilica Inc.
  11. *
  12. * Chris Zankel <chris@zankel.net>
  13. */
  14. /* Note: we might want to implement some of the loops as zero-overhead-loops,
  15. * where applicable and if supported by the processor.
  16. */
  17. #include <linux/linkage.h>
  18. #include <asm/page.h>
  19. #include <asm/pgtable.h>
  20. #include <asm/asmmacro.h>
  21. #include <asm/cacheasm.h>
  22. /* clear_page (page) */
  23. ENTRY(clear_page)
  24. entry a1, 16
  25. addi a4, a2, PAGE_SIZE
  26. movi a3, 0
  27. 1: s32i a3, a2, 0
  28. s32i a3, a2, 4
  29. s32i a3, a2, 8
  30. s32i a3, a2, 12
  31. s32i a3, a2, 16
  32. s32i a3, a2, 20
  33. s32i a3, a2, 24
  34. s32i a3, a2, 28
  35. addi a2, a2, 32
  36. blt a2, a4, 1b
  37. retw
  38. /*
  39. * copy_page (void *to, void *from)
  40. * a2 a3
  41. */
  42. ENTRY(copy_page)
  43. entry a1, 16
  44. addi a4, a2, PAGE_SIZE
  45. 1: l32i a5, a3, 0
  46. l32i a6, a3, 4
  47. l32i a7, a3, 8
  48. s32i a5, a2, 0
  49. s32i a6, a2, 4
  50. s32i a7, a2, 8
  51. l32i a5, a3, 12
  52. l32i a6, a3, 16
  53. l32i a7, a3, 20
  54. s32i a5, a2, 12
  55. s32i a6, a2, 16
  56. s32i a7, a2, 20
  57. l32i a5, a3, 24
  58. l32i a6, a3, 28
  59. s32i a5, a2, 24
  60. s32i a6, a2, 28
  61. addi a2, a2, 32
  62. addi a3, a3, 32
  63. blt a2, a4, 1b
  64. retw
  65. /*
  66. * void __invalidate_icache_page(ulong start)
  67. */
  68. ENTRY(__invalidate_icache_page)
  69. entry sp, 16
  70. ___invalidate_icache_page a2 a3
  71. isync
  72. retw
  73. /*
  74. * void __invalidate_dcache_page(ulong start)
  75. */
  76. ENTRY(__invalidate_dcache_page)
  77. entry sp, 16
  78. ___invalidate_dcache_page a2 a3
  79. dsync
  80. retw
  81. /*
  82. * void __flush_invalidate_dcache_page(ulong start)
  83. */
  84. ENTRY(__flush_invalidate_dcache_page)
  85. entry sp, 16
  86. ___flush_invalidate_dcache_page a2 a3
  87. dsync
  88. retw
  89. /*
  90. * void __flush_dcache_page(ulong start)
  91. */
  92. ENTRY(__flush_dcache_page)
  93. entry sp, 16
  94. ___flush_dcache_page a2 a3
  95. dsync
  96. retw
  97. /*
  98. * void __invalidate_icache_range(ulong start, ulong size)
  99. */
  100. ENTRY(__invalidate_icache_range)
  101. entry sp, 16
  102. ___invalidate_icache_range a2 a3 a4
  103. isync
  104. retw
  105. /*
  106. * void __flush_invalidate_dcache_range(ulong start, ulong size)
  107. */
  108. ENTRY(__flush_invalidate_dcache_range)
  109. entry sp, 16
  110. ___flush_invalidate_dcache_range a2 a3 a4
  111. dsync
  112. retw
  113. /*
  114. * void _flush_dcache_range(ulong start, ulong size)
  115. */
  116. ENTRY(__flush_dcache_range)
  117. entry sp, 16
  118. ___flush_dcache_range a2 a3 a4
  119. dsync
  120. retw
  121. /*
  122. * void _invalidate_dcache_range(ulong start, ulong size)
  123. */
  124. ENTRY(__invalidate_dcache_range)
  125. entry sp, 16
  126. ___invalidate_dcache_range a2 a3 a4
  127. retw
  128. /*
  129. * void _invalidate_icache_all(void)
  130. */
  131. ENTRY(__invalidate_icache_all)
  132. entry sp, 16
  133. ___invalidate_icache_all a2 a3
  134. isync
  135. retw
  136. /*
  137. * void _flush_invalidate_dcache_all(void)
  138. */
  139. ENTRY(__flush_invalidate_dcache_all)
  140. entry sp, 16
  141. ___flush_invalidate_dcache_all a2 a3
  142. dsync
  143. retw
  144. /*
  145. * void _invalidate_dcache_all(void)
  146. */
  147. ENTRY(__invalidate_dcache_all)
  148. entry sp, 16
  149. ___invalidate_dcache_all a2 a3
  150. dsync
  151. retw