mmu920t.s
上传用户:qiulin1960
上传日期:2013-10-16
资源大小:2844k
文件大小:9k
源码类别:

Windows CE

开发平台:

Windows_Unix

  1. ;
  2. ; Copyright (c) 2001. Samsung Electronics, co. ltd  All rights reserved.
  3. ;
  4. ;
  5. ; Use of this source code is subject to the terms of the Microsoft end-user
  6. ; license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
  7. ; If you did not accept the terms of the EULA, you are not authorized to use
  8. ; this source code. For a copy of the EULA, please see the LICENSE.RTF on your
  9. ; install media.
  10. ;
  11. ; -*-Asm-*-
  12. ;
  13. ; $Revision: 1.1 $
  14. ;   $Author: kwelton $
  15. ;     $Date: 1999/10/25 21:40:55 $
  16. ;
  17. ; Copyright (c) ARM Limited 1998, 1999.
  18. ; All Rights Reserved.
  19. ;
  20. ; mmu920T.s - This file contains the COPROCESSOR access macros for the
  21. ;             ARM920T processor
  22. ;
  23. ;Flag that this processor has an MMU
  24. ;
  25. MACRO
  26. CHECK_FOR_MMU_920T $tmp
  27. MOVS $tmp, #1 ; Set tmp & clear Z (TRUE)
  28. MEND
  29. ;Flag that this processor does not have an MPU
  30. ;
  31. MACRO
  32. CHECK_FOR_MPU_920T $tmp
  33. BICS $tmp, $tmp, $tmp ; Clear tmp & set Z (FALSE)
  34. MEND
  35. ;Flag that this processor does not have a unified cache
  36. ;
  37. MACRO
  38. CHECK_CACHE_920T $tmp
  39. MOVS $tmp, #1 ; Set tmp & clear Z (TRUE)
  40. MEND
  41. ;Flag that this processor does not have a unified cache
  42. ;
  43. MACRO
  44. CHECK_UNIFIED_920T $tmp
  45. BICS $tmp, $tmp, $tmp ; Clear tmp & set Z (FALSE)
  46. MEND
  47. ;Flag if this processor ID matches
  48. ;
  49. MACRO
  50. CHECK_CPUID_920T $id, $tmp
  51. RDCPU_ID_920T $id, $tmp
  52. CMP $tmp, #0x920
  53. MEND
  54. ;Flag if this processor Vendor ID matches
  55. ;
  56. MACRO
  57. CHECK_VENDOR_920T $id, $tmp
  58. RDCPU_VENDOR_920T $id, $tmp
  59. CMP $tmp, #0x41 ; I'll have an 'A' please, Bob.
  60. MEND
  61. ;------------------------------------------------------------------
  62. ;Macros to hide internals of cache implementation on each processor
  63. ;
  64. MACRO
  65.         CLEAR_IDC_920T $state
  66.         CLEAR_ICACHE_920T $state
  67.         CLEAR_DCACHE_920T $state
  68. ; No Write Buffer - Can't turn off on a 920
  69. MEND
  70. MACRO
  71.         CLEAR_ICACHE_920T $state
  72.         BIC     $state, $state, #EnableIcache   ; No ICache
  73. MEND
  74. MACRO
  75.         CLEAR_DCACHE_920T $state
  76.         BIC     $state, $state, #EnableDcache   ; No DCache
  77. MEND
  78. ; No Write Buffer - Can't turn off on a 920
  79. MACRO
  80. CLEAR_MMU_920T $state
  81.         BIC     $state, $state, #EnableMMU ; Disable MMU
  82. MEND
  83. MACRO
  84. CLEAR_BIGEND_920T $state
  85.         BIC     $state, $state, #EnableBigEndian ; Clean BigEndian
  86. MEND
  87. MACRO
  88.         SET_IDC_920T $state
  89.         SET_ICACHE_920T $state
  90.         SET_DCACHE_920T $state
  91. ; No Write Buffer - Can't turn on on a 920
  92. MEND
  93. MACRO
  94.         SET_ICACHE_920T $state
  95.         ORR $state, $state, #EnableIcache   ; Enable ICache
  96. MEND
  97. MACRO
  98.         SET_DCACHE_920T $state
  99.         ORR $state, $state, #EnableDcache   ; Enable DCache
  100. MEND
  101. ; No Write Buffer - Can't turn on on a 920
  102. MACRO
  103. SET_MMU_920T $state
  104.         ORR $state, $state, #EnableMMU ; Enable MMU
  105. MEND
  106. MACRO
  107. SET_BIGEND_920T $state
  108.         ORR $state, $state, #EnableBigEndian ; Set BigEndian
  109. MEND
  110. MACRO
  111. TEST_MMU_920T $tmp
  112. RDMMU_STATE_920T $tmp
  113. AND $tmp, $tmp, #EnableMMU
  114. TEQ $tmp, #EnableMMU
  115. MEND
  116. MACRO
  117. TEST_BIGEND_920T $tmp
  118. RDMMU_STATE_920T $tmp
  119. AND $tmp, $tmp, #EnableBigEndian
  120. TEQ $tmp, #EnableBigEndian
  121. MEND
  122. ;------------------------------------------------------------------
  123. ;Read CPU Code (ID, Vendor revision etc.) register 
  124. ;
  125. MACRO
  126. RDCPU_CODE_920T $id
  127. MRC p15, 0, $id, c0, c0 ,0
  128. MEND
  129. ;Extract CPU ID from CPU Code register
  130. ;
  131. MACRO
  132. RDCPU_ID_920T $id, $tmp
  133. MRC p15, 0, $id, c0, c0 ,0
  134. MOV $tmp, $id, LSL #16 ; Clear bits 16-31
  135. MOV $tmp, $tmp, LSR #20 ; Move bits 15-3 to 12-0
  136. MEND
  137. ;Extract CPU Vendor from CPU Code register
  138. ;
  139. MACRO
  140. RDCPU_VENDOR_920T $id, $tmp
  141. MRC p15, 0, $id, c0, c0 ,0
  142. MOV $tmp, $id, LSR #24 ; Move bits 31-24 to 7-0
  143. MEND
  144. ;Coprocessor read of ID register (cache line sizes)
  145. ;
  146. MACRO
  147. RDCACHE_SIZES_920T $reg_number
  148. MRC p15, 0, $reg_number, c0, c0 ,1
  149. MEND
  150. ;Coprocessor read of Control register 
  151. ;
  152. MACRO
  153. RDMMU_STATE_920T $reg_number
  154. MRC p15, 0, $reg_number, c1, c0 ,0
  155. MEND
  156. ;Coprocessor write of Control register 
  157. ;
  158. MACRO 
  159. WRMMU_STATE_920T $reg_number
  160. MCR p15, 0, $reg_number, c1, c0 ,0
  161. MEND
  162. ;------------------------------------------------------------------
  163. ;Coprocessor read of Translation Table Base reg. 
  164. ;
  165. MACRO
  166. RDMMU_TTBase_920T $reg_number
  167. MRC p15, 0, $reg_number, c2, c0 ,0
  168. MEND
  169. ;Coprocessor write of Translation Table Base reg. 
  170. ;
  171. MACRO 
  172. WRMMU_TTBase_920T $reg_number
  173. MCR p15, 0, $reg_number , c2, c0 ,0
  174. MEND
  175. ;Coprocessor read of Domain Access Control reg. 
  176. ;
  177. MACRO
  178. RDMMU_DAControl_920T $reg_number
  179. MRC p15, 0, $reg_number, c3, c0 ,0
  180. MEND
  181. ;Coprocessor write of Domain Access Control reg. 
  182. ;
  183. MACRO 
  184. WRMMU_DAControl_920T $reg_number
  185. MCR p15, 0, $reg_number, c3, c0 ,0
  186. MEND
  187. ;Coprocessor read of Fault Status register 
  188. ;
  189.     MACRO
  190.     RDMMU_FaultStatus_920T $reg_number
  191.     MRC p15, 0, $reg_number, c5, c0 ,0
  192.     MEND
  193. ;Coprocessor write of Fault Status register 
  194. ;
  195.     MACRO 
  196.     WRMMU_FaultStatus_920T $reg_number
  197.     MCR p15, 0, $reg_number, c5, c0 ,0
  198.     MEND
  199. ;Coprocessor read of Fault Address register 
  200. ;
  201.     MACRO
  202.     RDMMU_FaultAddress_920T $reg_number
  203.     MRC p15, 0, $reg_number, c6, c0 ,0
  204.     MEND
  205. ;Coprocessor write of Fault Address register 
  206. ;
  207.     MACRO 
  208.     WRMMU_FaultAddress_920T $reg_number
  209.     MCR p15, 0, $reg_number, c6, c0 ,0
  210.     MEND
  211. ; ------------------------------------------------------------------
  212. ;Coprocessor cache control 
  213. ;Flush I & D Caches
  214. ;
  215. MACRO 
  216. WRCACHE_FlushIDC_920T $reg_number
  217. MCR p15,0,$reg_number,c7,c7,0
  218. MEND
  219. ;Coprocessor cache control 
  220. ;Flush ICache
  221. ;
  222. MACRO 
  223. WRCACHE_FlushIC_920T $reg_number
  224. MCR p15,0,$reg_number,c7,c5,0
  225. MEND
  226. ;Coprocessor cache control 
  227. ;Flush DCache
  228. ;
  229. MACRO 
  230. WRCACHE_FlushDC_920T $reg_number
  231. MCR p15,0,$reg_number,c7,c6,0
  232. MEND
  233. ;Coprocessor cache control 
  234. ;Flush DCache entry
  235. ;
  236. MACRO 
  237. WRCACHE_CacheFlushDentry_920T $reg_number
  238. MCR p15,0,$reg_number,c7,c6,1
  239. MEND
  240. ;Coprocessor cache control 
  241. ;Clean DCache entry
  242. ;
  243. MACRO 
  244. WRCACHE_CleanDCentry_920T $reg_number
  245. MCR p15,0,$reg_number,c7,c10,1
  246. MEND
  247. ;Coprocessor cache control 
  248. ;Clean DCache
  249. ;
  250. MACRO 
  251. WRCACHE_CleanDCache_920T $w1, $w2, $w3, $w4, $w5, $w6
  252. RDCACHE_SIZES $w2 ; Get cache information
  253. MOV $w3, #7 ; 3 bit mask
  254. AND $w4, $w3, $w2, LSR #18 ; Get Cache Size
  255. AND $w5, $w3, $w2, LSR #15 ; Get Cache Associativity
  256. AND $w6, $w3, $w2, LSR #12 ; Get Base and Line Length
  257. MOVS $w3, $w6, LSR #2 ; Get Base (and set flags)
  258. AND $w6, $w6, #3 ; Get Line Length
  259. ; Calculate LSB of Index field
  260. ;
  261. ; 32 - Cache Associativity - Base
  262. RSB $w2, $w5, #32
  263. SUB $w2, $w2, $w3
  264. ; Calculate MSB of Segment field
  265. ;
  266. ; 8 + Cache Size - Cache Associativity
  267. ADD $w3, $w4, #8
  268. SUB $w3, $w3, $w5
  269. ; Calculate LSB of Segment field
  270. ;
  271. ; Line Length + 3
  272. ADD $w4, $w6, #3
  273. ; Calculate max value for Index field
  274. RSB $w5, $w2, #32
  275. MOV $w6, #1
  276. MOV $w5, $w6, LSL $w5
  277. SUBNE $w5, $w5, $w5, LSR #2
  278. SUB $w5, $w5, #1
  279. ; Calculate max value for Segment field
  280. SUB $w3, $w3, $w4
  281. ADD $w3, $w3, #1
  282. MOV $w3, $w6, LSL $w3
  283. SUB $w3, $w3, #1
  284. ; Now finally clean the cache
  285. 1 MOV $w6, $w3
  286. 2 MOV $w1, $w5, LSL $w2
  287. ORR $w1, $w1, $w6, LSL $w4
  288. MCR p15, 0, $w1, c7, c10, 2 ; Clean Line by Index (Not Address)
  289. SUBS $w6, $w6, #1
  290. BGE %B2
  291. SUBS $w5, $w5, #1
  292. BGE %B1
  293. MEND
  294. ;Coprocessor cache control 
  295. ;Clean + Flush DCache entry
  296. ;
  297. MACRO 
  298. WRCACHE_Clean_FlushDCentry_920T $reg_number
  299. MCR p15,0,$reg_number,c7,c14,1
  300. MEND
  301. ;Drain Write Buffer.
  302. ;
  303. MACRO
  304. WRCACHE_DrainWriteBuffer_920T $reg_number
  305. MCR p15,0,$reg_number,c7,c10,4
  306. MEND
  307. ;Flush TLB 
  308. ;
  309. MACRO
  310. WRMMU_FlushTB_920T $reg_number
  311. MCR p15,0,$reg_number,c8,c7,0
  312. MEND
  313. ;Flush Instruction TLB 
  314. ;
  315. MACRO
  316. WRMMU_FlushITB_920T $reg_number
  317. MCR p15,0,$reg_number,c8,c5,0
  318. MEND
  319. ;Flush Data TLB
  320. ;
  321. MACRO
  322. WRMMU_FlushDTB_920T $reg_number
  323. MCR p15,0,$reg_number,c8,c6,0
  324. MEND
  325. ;Clean DCache (only) from address in $reg1 to (excl) addr in $reg2
  326. ;
  327. MACRO
  328. CleanDCacheRange_920T $reg1, $reg2
  329. 1      
  330.         WRCACHE_CleanDCentry_920T $reg1
  331.         ADD     $reg1, $reg1, #32
  332.         CMP     $reg1, $reg2
  333.         BLT     %B1
  334. MEND
  335. ; ------------------------------------------------------------------
  336. ;Coprocessor test/clock/idle control 
  337. ;Enable Clock Switching
  338. ;
  339. MACRO
  340. WRCLK_EnableClockSW_920T $reg
  341. RDMMU_STATE_920T $reg
  342. ORR $reg, $reg, #0xC0000000
  343. WRMMU_STATE_920T $reg
  344. MEND
  345. ;Coprocessor test/clock/idle control 
  346. ;Disable Clock Switching
  347. ;
  348. MACRO
  349. WRCLK_DisableClockSW_920T $reg
  350. RDMMU_STATE_920T $reg
  351. BIC $reg, $reg, #0xC0000000
  352. WRMMU_STATE_920T $reg
  353. MEND
  354. ;Coprocessor test/clock/idle control 
  355. ;Disable nMCLK output
  356. ;
  357. MACRO
  358. WRCLK_DisablenMCLK_920T $reg
  359. MEND
  360. ;Coprocessor test/clock/idle control 
  361. ;Wait for Interrupt
  362. ;
  363. MACRO
  364. WRTEST_WaitInt_920T $reg
  365. MEND
  366. END
  367. ; EOF mmu920T.s