ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[register]-ARM64重要寄存器介绍

2021-06-21 14:53:14  阅读:899  来源: 互联网

标签:TTBR0 aarch64 register msr ARM64 寄存器 EL3 EL1


文章目录


★★★ 友情链接 : 个人博客导读首页—点击此处 ★★★

1、PSTATE aarch64的读写

PSTATE(process state)是一些状态位.
一些位仅在aarch32 state下使用、一些位仅在aarch64 state下使用、一些位可以同时在aarch32/aarch64 state下使用;

在aarch64中,只能可以通过MSR/MRS指令访问特殊寄存器(special-purpose)的方式读写这些位. 除了这些特殊寄存器中表示的位,PSTATE的其它位都是不能访问的.
(1)、 这些特殊的寄存器包含 : NZCV、DAIF、CurrentEL、SPSel、PAN、UAO、DIT、SSBS
可以使用MRS/MSR指令,直接读写这些寄存器
(2)、还可以使用MSR/MRS操作这两个寄存器DAIFSet、DAIFClr,直接对某一位置1或清0

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=
static inline void arch_local_irq_restore(unsigned long flags)
{
    asm volatile(
    "msr    daif, %0"  //读取DAIF寄存器的值,保存在flag中
    :
    : "r" (flags)
    : "memory");
}
ENTRY(idmap_cpu_replace_ttbr1)
    mrs x2, daif   //将DAIF寄存器的值,保存在X2寄存器中
    msr daifset, #0xf  //对DAIF寄存器的值的bit0-3位置1

    adrp    x1, empty_zero_page
    msr ttbr1_el1, x1
    isb

    tlbi    vmalle1
    dsb nsh
    isb

    msr ttbr1_el1, x0
    isb

    msr daif, x2

    ret
ENDPROC(idmap_cpu_replace_ttbr1)
bl1/aarch64/bl1_exceptions.S:208:       msr     spsel, #0
bl1/aarch64/bl1_exceptions.S:291:       msr     spsel, #0
bl31/aarch64/crash_reporting.S:210:     msr     spsel, #1
bl31/aarch64/runtime_exceptions.S:92:   msr     spsel, #0
bl31/aarch64/runtime_exceptions.S:386:  msr     spsel, #0
bl31/aarch64/runtime_exceptions.S:447:  msr     spsel, #1 /* Switch to SP_ELx */

2、PSTATE部分状态位的介绍

在这里插入图片描述

负数标志 Negative condition flag
零数标志 Zero condition flag
进位标志 Carry condition flag
溢出标志 Overflow condition flag

D : debug exception MASK :Watchpoint, Breakpoint, and Software Step exceptions
A : SError interrupt MASK
I :IRQ interrupt MASK
F :FIQ  interrupt MASK

EL, bits [3:2]
00 EL0
01 EL1
10 EL2
11 EL3

SP, bit [0]
0 Use SP_EL0 at all Exception levels.
1 Use SP_ELx for Exception level ELx.

PAN, bit [22] 特权访问进制
0 Privileged reads and write are not disabled by this mechanism.
1 Disables privileged read and write accesses to addresses accessible at EL0 for an
enabled stage 1 translation regime that defines the EL0 permissions

我们可以看到,这些急促去你使用的bit都是不相同的,其实我们还可以猜测这些bit其实还是都在一个PSTATE寄存器中,然后相关的bit位被抽象到了NZCV、DAIF、CurrentEL、SPSel、PAN、UAO、DIT、SSBS寄存器中,方便指令访问。

3、SPSR :Saved Program Status Registers

触发异常时,保存当前的PSTATE(CPSR)的状态。
当这个 异常处理程序在aarch64时,异常既可以来自aarch64,也可以来自aarch32
在这里插入图片描述

4、SCR_EL3, Secure Configuration Register

只有SCR_EL3,没有SCR_EL1和SCR_EL2
只有EL3才能读写此寄存器.
在这里插入图片描述
NS 标记processor element的secure/non-secure的安全位
IRQ、FIQ标志中断是routing到EL3是routing到ELx. 如果为1则routing到EL3

5、SCTLR_EL1, System Control Register (EL1)

在AArch64状态下,其实是有三个sctlr寄存器:
SCTLR_EL1
SCTLR_EL2
SCTLR_EL3

在AArch32状态下,有HSCTLR和sctlr寄存器,其中sctlr寄存器是banked:
SCTLR (NS)
HSCTLR
SCTLR (S)

在这里插入图片描述
重要的三个bit位:

I : Instruction cache enable
C : data cache enable
M : mmu enable

6、TTBR1 TTBR0 Translation Table Base Register

TTBR1 内核空间页表基地址
TTBR0 用户空间页表基地址
在aarch64中,TTBR0有三个,TTBR1只有一个。在双系统切换时候(linux/tee),需要在ATF中save/restore这些寄存器。
TTBR0_EL1
TTBR0_EL2
TTBR0_EL3
**TTBR1_EL1**
VTTBR_EL2

在aarch64中,只有TTBR0和TTBR1,他们是banked寄存器。在双系统切换时候(linux/tee),不需要在ATF中save/restore这些寄存器。
TTBR0
TTBR1
HTTBR
VTTBR

在这里插入图片描述

7、ESR_EL3

在这里插入图片描述

标签:TTBR0,aarch64,register,msr,ARM64,寄存器,EL3,EL1
来源: https://blog.51cto.com/u_15278218/2930988

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有