uboot-2011.12移植到S3C2440——MMU Cache/TLB/etc on/off functions

[html]  view plain copy print ?
  1. R1_I EQU (1<<12) ;//Cache分开时,1 使能指令Cache,0 禁止使能Cache  
  2. R1_C EQU (1<<2) ;//禁止/使能数据Cache或整个Cache,1使能 不含Cache返回0,不能禁止Cache返回1  
  3. R1_A EQU (1<<1) ;//是否支持内存访问时地址对齐检查系统,1使能  
  4. R1_M    EQU (1)   ;//禁止/使能MMU 1使能  
  5. R1_iA EQU (1<<31)  
  6. R1_nF   EQU (1<<30)  
  7.   
  8. ;void MMU_EnableICache(void)  
  9.    EXPORT MMU_EnableICache  
  10. MMU_EnableICache  
  11.    mrc p15,0,r0,c1,c0,0   ;//mrc:协处理寄存器到ARM寄存器到的数据传送指令,mrc指令将协处理器寄存器中的  
  12.            ;//数据传送到ARM处理器的寄存器中,若协处理器不能成功地执行该操作,将产生未定义  
  13.            ;//异常中断,  
  14.    orr r0,r0,#R1_I  
  15.    mcr p15,0,r0,c1,c0,0  
  16.    MOV_PC_LR  
  17.   
  18. ;void MMU_DisableICache(void)  
  19.    EXPORT MMU_DisableICache  
  20. MMU_DisableICache  
  21.    mrc p15,0,r0,c1,c0,0  
  22.    bic r0,r0,#R1_I       ;//将立即数R1_I取反&r0,保存到r0中  
  23.    mcr p15,0,r0,c1,c0,0  
  24.    MOV_PC_LR  
  25.    ;//禁止/使能指令cache  
  26.   
  27. ;void MMU_EnableDCache(void)  
  28.    EXPORT MMU_EnableDCache  
  29. MMU_EnableDCache  
  30.    mrc p15,0,r0,c1,c0,0  
  31.    orr r0,r0,#R1_C  
  32.    mcr p15,0,r0,c1,c0,0  
  33.    MOV_PC_LR  
  34.   
  35. ;void MMU_DisableDCache(void)  
  36.    EXPORT MMU_DisableDCache  
  37. MMU_DisableDCache  
  38.    mrc p15,0,r0,c1,c0,0  
  39.    bic r0,r0,#R1_C  
  40.    mcr p15,0,r0,c1,c0,0  
  41.    MOV_PC_LR  
  42.    ;//禁止/使能数据Cache       
  43.   
  44. ;void MMU_EnableAlignFault(void)  
  45.    EXPORT MMU_EnableAlignFault  
  46. MMU_EnableAlignFault  
  47.    mrc p15,0,r0,c1,c0,0  
  48.    orr r0,r0,#R1_A  
  49.    mcr p15,0,r0,c1,c0,0  
  50.    MOV_PC_LR  
  51.   
  52. ;void MMU_DisableAlignFault(void)  
  53.    EXPORT MMU_DisableAlignFault  
  54. MMU_DisableAlignFault  
  55.    mrc p15,0,r0,c1,c0,0  
  56.    bic r0,r0,#R1_A  
  57.    mcr p15,0,r0,c1,c0,0  
  58.    MOV_PC_LR  
  59.    ;//使能/禁止存储器对齐功能  
  60.   
  61. ;void MMU_EnableMMU(void)  
  62.    EXPORT MMU_EnableMMU  
  63. MMU_EnableMMU  
  64.    mrc p15,0,r0,c1,c0,0  
  65.    orr r0,r0,#R1_M  
  66.    mcr p15,0,r0,c1,c0,0  
  67.    MOV_PC_LR  
  68.   
  69. ;void MMU_DisableMMU(void)  
  70.    EXPORT MMU_DisableMMU  
  71. MMU_DisableMMU  
  72.    mrc p15,0,r0,c1,c0,0  
  73.    bic r0,r0,#R1_M  
  74.    mcr p15,0,r0,c1,c0,0  
  75.    MOV_PC_LR  
  76.    ;//使能/禁止MMU  
  77.    ;//注意:使能/禁止MMU时  
  78.   
  79. ;//====================================================================================================  
  80. ;//1、在使能MMU之前,要在内存中建立好页表,同时CP15中的各相关寄存器必须完成初始化。  
  81. ;//2、如果使用的不是平板存储模式(物理地址和虚拟地址相等),在禁止/使能MMU时虚拟地  
  82. ;//址和物理地址的对应关系会发生改变,这时应该清楚Cache中的当前地址变换条目。  
  83. ;//3、如果完成禁止/使能MMU的代码的物理地址和虚拟地址不相同,则禁止/使能MMU时将造成  
  84. ;//很大麻烦,因此强烈完成禁止/使能MMU的代码的物理地址和虚拟地址最好相同。  
  85.   
  86.   
  87. ;void MMU_SetFastBusMode(void)  
  88. FCLK:HCLK1:1  
  89. EXPORT MMU_SetFastBusMode  
  90. MMU_SetFastBusMode  
  91.    mrc p15,0,r0,c1,c0,0  
  92.    bic r0,r0,#R1_iA:OR:R1_nF  
  93.    mcr p15,0,r0,c1,c0,0  
  94.    MOV_PC_LR  
  95.   
  96. ;void MMU_SetAsyncBusMode(void)  
  97. FCLK:HCLK1:2  
  98.    EXPORT MMU_SetAsyncBusMode  
  99. MMU_SetAsyncBusMode  
  100.    mrc p15,0,r0,c1,c0,0  
  101.    orr r0,r0,#R1_nF:OR:R1_iA  
  102.    mcr p15,0,r0,c1,c0,0  
  103.    MOV_PC_LR  
  104.     ;//C2用于保存页表的在内存中的基地址  
  105. ;//页表中每一行对应一个虚地址页对应的实地址页的地址、该位的方位权限和该页的缓冲特性  
  106. ;//通常把部分页表放在页表缓冲器TLB(translation lookaside buffer)中,换页表时,TLB要清空,因为。。。。  
  107. ;//C8控制清空TLB  
  108. ;//C10用于控制TLB中内容的锁定  
  109.   
  110. ;=========================  
  111. ; Set TTBase  
  112. ;=========================  
  113. ;void MMU_SetTTBase(int base)  
  114.    EXPORT MMU_SetTTBase  
  115. MMU_SetTTBase  
  116.    ;ro=TTBase  
  117.    mcr p15,0,r0,c2,c0,0  
  118.    MOV_PC_LR  
  119.   
  120. ;=========================  
  121. ; Set Domain  
  122. ;=========================  
  123. ;void MMU_SetDomain(int domain)  
  124.    EXPORT MMU_SetDomain  
  125. MMU_SetDomain  
  126.    ;ro=domain  
  127.    mcr p15,0,r0,c3,c0,0  
  128.    MOV_PC_LR  
  129.   
  130. ;=========================  
  131. ; ICache/DCache functions  
  132. ;=========================  
  133. ;void MMU_InvalidateIDCache(void)  
  134.    EXPORT MMU_InvalidateIDCache  
  135. MMU_InvalidateIDCache  
  136.    mcr p15,0,r0,c7,c7,0  
  137.    MOV_PC_LR  
  138.   
  139. ;void MMU_InvalidateICache(void)  
  140.    EXPORT MMU_InvalidateICache  
  141. MMU_InvalidateICache  
  142.    mcr p15,0,r0,c7,c5,0  
  143.    MOV_PC_LR  
  144.   
  145. ;void MMU_InvalidateICacheMVA(U32 mva)  
  146.    EXPORT MMU_InvalidateICacheMVA  
  147. MMU_InvalidateICacheMVA  
  148.    ;r0=mva  
  149.    mcr p15,0,r0,c7,c5,1  
  150.    MOV_PC_LR  
  151.   
  152. ;void MMU_PrefetchICacheMVA(U32 mva)  
  153.    EXPORT MMU_PrefetchICacheMVA  
  154. MMU_PrefetchICacheMVA  
  155.    ;r0=mva  
  156.    mcr p15,0,r0,c7,c13,1  
  157.    MOV_PC_LR  
  158.   
  159. ;void MMU_InvalidateDCache(void)  
  160.    EXPORT MMU_InvalidateDCache  
  161. MMU_InvalidateDCache  
  162.    mcr p15,0,r0,c7,c6,0  
  163.    MOV_PC_LR  
  164.   
  165. ;void MMU_InvalidateDCacheMVA(U32 mva)  
  166.    EXPORT MMU_InvalidateDCacheMVA  
  167. MMU_InvalidateDCacheMVA  
  168.    ;r0=mva  
  169.    mcr p15,0,r0,c7,c6,1  
  170.    MOV_PC_LR  
  171.   
  172. ;void MMU_CleanDCacheMVA(U32 mva)  
  173.    EXPORT MMU_CleanDCacheMVA  
  174. MMU_CleanDCacheMVA  
  175.    ;r0=mva  
  176.    mcr p15,0,r0,c7,c10,1  
  177.    MOV_PC_LR  
  178.   
  179. ;void MMU_CleanInvalidateDCacheMVA(U32 mva)  
  180.    EXPORT MMU_CleanInvalidateDCacheMVA  
  181. MMU_CleanInvalidateDCacheMVA  
  182.    ;r0=mva  
  183.    mcr p15,0,r0,c7,c14,1  
  184.    MOV_PC_LR  
  185.   
  186. ;void MMU_CleanDCacheIndex(U32 index)  
  187.    EXPORT MMU_CleanDCacheIndex  
  188. MMU_CleanDCacheIndex  
  189.    ;r0=index  
  190.    mcr p15,0,r0,c7,c10,2  
  191.    MOV_PC_LR  
  192.   
  193. ;void MMU_CleanInvalidateDCacheIndex(U32 index)  
  194.    EXPORT MMU_CleanInvalidateDCacheIndex  
  195. MMU_CleanInvalidateDCacheIndex  
  196.    ;r0=index  
  197.    mcr p15,0,r0,c7,c14,2  
  198.    MOV_PC_LR  
  199.   
  200. ;void MMU_WaitForInterrupt(void)  
  201.    EXPORT MMU_WaitForInterrupt  
  202. MMU_WaitForInterrupt  
  203.    mcr p15,0,r0,c7,c0,4  
  204.    MOV_PC_LR  
  205.   
  206. ;===============  
  207. ; TLB functions  
  208. ;===============  
  209. ;voic MMU_InvalidateTLB(void)  
  210.    EXPORT MMU_InvalidateTLB  
  211. MMU_InvalidateTLB  
  212.    mcr p15,0,r0,c8,c7,0  
  213.    MOV_PC_LR  
  214.   
  215. ;void MMU_InvalidateITLB(void)  
  216.    EXPORT MMU_InvalidateITLB  
  217. MMU_InvalidateITLB  
  218.    mcr p15,0,r0,c8,c5,0  
  219.    MOV_PC_LR  
  220.   
  221. ;void MMU_InvalidateITLBMVA(U32 mva)  
  222.    EXPORT MMU_InvalidateITLBMVA  
  223. MMU_InvalidateITLBMVA  
  224.    ;ro=mva  
  225.    mcr p15,0,r0,c8,c5,1  
  226.    MOV_PC_LR  
  227.   
  228. ;void MMU_InvalidateDTLB(void)  
  229. EXPORT MMU_InvalidateDTLB  
  230. MMU_InvalidateDTLB  
  231. mcr p15,0,r0,c8,c6,0  
  232. MOV_PC_LR  
  233.   
  234. ;void MMU_InvalidateDTLBMVA(U32 mva)  
  235. EXPORT MMU_InvalidateDTLBMVA  
  236. MMU_InvalidateDTLBMVA  
  237. ;r0=mva  
  238. mcr p15,0,r0,c8,c6,1  
  239. MOV_PC_LR  
  240.   
  241. ;=================  
  242. ; Cache lock down  
  243. ;=================  
  244. ;void MMU_SetDCacheLockdownBase(U32 base)  
  245.    EXPORT MMU_SetDCacheLockdownBase  
  246. MMU_SetDCacheLockdownBase  
  247.    ;r0victim & lockdown base  
  248.    mcr p15,0,r0,c9,c0,0  
  249.    MOV_PC_LR  
  250.   
  251. ;void MMU_SetICacheLockdownBase(U32 base)  
  252.    EXPORT MMU_SetICacheLockdownBase  
  253. MMU_SetICacheLockdownBase  
  254.    ;r0victim & lockdown base  
  255.    mcr p15,0,r0,c9,c0,1  
  256.    MOV_PC_LR  
  257.   
  258. ;=================  
  259. ; TLB lock down  
  260. ;=================  
  261. ;void MMU_SetDTLBLockdown(U32 baseVictim)  
  262.    EXPORT MMU_SetDTLBLockdown  
  263. MMU_SetDTLBLockdown  
  264.    ;r0baseVictim  
  265.    mcr p15,0,r0,c10,c0,0  
  266.    MOV_PC_LR  
  267.   
  268. ;void MMU_SetITLBLockdown(U32 baseVictim)  
  269.    EXPORT MMU_SetITLBLockdown  
  270. MMU_SetITLBLockdown  
  271.    ;r0baseVictim  
  272.    mcr p15,0,r0,c10,c0,1  
  273.    MOV_PC_LR  
  274.   
  275. ;============  
  276. ; Process ID  
  277. ;============  
  278. ;void MMU_SetProcessId(U32 pid)  
  279.    EXPORT MMU_SetProcessId  
  280. MMU_SetProcessId  
  281.    ;r0pid  
  282.    mcr p15,0,r0,c13,c0,0  
  283.    MOV_PC_LR  
  284.   
  285.    END  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值