baron · 3月23日 · 四川

[mmu/cache]-MMU的地址翻译(Address translation)指令介绍

快速连接

👉👉👉【精选】ARMv8/ARMv9架构入门到精通-目录 👈👈👈


 title=
Address translation system instructions

AT指令的语法格式:
在这里插入图片描述
有了上面的语法格式后,就非常好理解armv8的MMU提供了14条AT指令了:
在这里插入图片描述
MMU的地址翻译一般都是自动进行的,在当前的linux kernel(kernel-4.14)中还真找不到使用AT指令的代码。而在optee中是可以找到一个示例的,如下:


static bool arm_va2pa_helper(void *va, paddr_t *pa)
{
        uint32_t exceptions = thread_mask_exceptions(THREAD_EXCP_ALL);
        paddr_t par;
        paddr_t par_pa_mask;
        bool ret = false;

#ifdef ARM32
        write_ats1cpr((vaddr_t)va);
        isb();
#ifdef CFG_WITH_LPAE
        par = read_par64();
        par_pa_mask = PAR64_PA_MASK;
#else
        par = read_par32();
        par_pa_mask = PAR32_PA_MASK;
#endif
#endif /*ARM32*/

#ifdef ARM64
        write_at_s1e1r((vaddr_t)va);
        isb();
        par = read_par_el1();
        par_pa_mask = PAR_PA_MASK;
#endif
        if (par & PAR_F)
                goto out;
        *pa = (par & (par_pa_mask << PAR_PA_SHIFT)) |
                ((vaddr_t)va & ((1 << PAR_PA_SHIFT) - 1));

        ret = true;
out:
        thread_unmask_exceptions(exceptions);
        return ret;
}

关注"Arm精选"公众号,备注进ARM交流讨论区。
图片1.png

推荐阅读
关注数
9467
内容数
212
以易懂、渐进、有序的方式,深入探讨ARMv8/ARMv9架构的核心概念。我们将从基础知识开始,逐步深入,覆盖最新的架构,不再纠缠于过时技术。本系列内容包含但不限于ARM基础、SOC芯片基础、Trustzone、gic、异常和中断、AMBA、Cache、MMU等内容,并将持续更新。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息