flyredonly 发表于 2014-04-08 09:52

uboot下ARMv7的Start.S中,关MMU和Cache的一段代码看不懂

本帖最后由 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的协处理器后,要做这样的两个操作。
一条操作难道不行?

shenzhenaika 发表于 2014-04-08 11:11

专门查看了一下code,,我手头的code和你的不一样。只有一行。。估计是别人移植的时候留下的尾巴?

flyredonly 发表于 2014-04-08 13:56

如果真相是这样,只有吐血了。:-L
页: [1]
查看完整版本: uboot下ARMv7的Start.S中,关MMU和Cache的一段代码看不懂