免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3069 | 回复: 2

[BootLoader] uboot下ARMv7的Start.S中,关MMU和Cache的一段代码看不懂 [复制链接]

论坛徽章:
0
发表于 2014-04-08 09:52 |显示全部楼层
本帖最后由 flyredonly 于 2014-04-08 10:51 编辑

uboot下ARMv7的Start.S中,关MMU和Cache的一段代码看不懂,请各位大大指导!

cache_set:
/* 禁止MMU ICACHE DCACHE */
    MRC     p15, 0, r0, c1, c0, 0           /*; Get control register  */
    BIC     r0, r0, #CTRL_M_BIT             /*; Disable MMU  */
    BIC     r0, r0, #CTRL_C_BIT             /*; Disable D Cache  */
    BIC     r0, r0, #CTRL_I_BIT             /*; Disable I Cache  */
    MCR     p15, 0, r0, c1, c0, 0           /*; Write control register  */


    /* Invalidate ICACHE和DCACHE */
    MOV     r0, #0
    MOV     r0, #0

    /* Invalidate caches/BTAC and TLB */
    /* I-cache and BTAC(Also resets GHB) */
    MCR     p15, 0, r0, c7, c5, 0           /* Invalidate all instruction caches(to POU) */


   
    /* D-cache (by set/way) */
    /* Read cache size from the Cache Size Identification Register */
    MRC     p15, 1, r3, c0, c0, 0           /* Read Current Cache Size Identification Register */
    /*MOV     r1, #0x1ff  */
    LDR     r1, =0x1ff
    AND     r3, r1, r3, LSR #13             /* r3 = (number of sets -1 */
    MOV     r0, #0
way_loop:
    MOV     r1, #0                          /* r1->set counter */

主要就是这两条数据传送指令,不明白为何在设置了CP15的协处理器后,要做这样的两个操作。
一条操作难道不行?

论坛徽章:
0
发表于 2014-04-08 11:11 |显示全部楼层
专门查看了一下code,,我手头的code和你的不一样。只有一行。。估计是别人移植的时候留下的尾巴?

论坛徽章:
0
发表于 2014-04-08 13:56 |显示全部楼层
如果真相是这样,只有吐血了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP