ARMv8寄存器(2)


上一章介绍了ARMv8 通用寄存器和各种特殊寄存器,本章重点介绍一些常见的系统寄存器。

1.概要

在AArch64中,系统配置通过系统寄存器进行控制,并使用MSR和MRS指令进行访问。ARM架构的之前版本(如ARMv7)使用协处理器来进行系统配置。 但是,AArch64不支持协处理器。

AArch64中系统寄存器会以”_ELn“的方式名命,寄存器的名称会告诉你可以访问它的最低异常级别。

  • <Reg>_EL1:处理器处于EL1、EL2、EL3时可以访问。
  • <Reg>_EL2:处理器处于EL2、EL3时可以访问。
  • 大部分寄存器不支持处于EL0时访问,但也有一些例外,如CTR_EL0。

例如

TTBR0_EL1可以从EL1、EL2和EL3访问。
TTBR0_EL2可以从EL2和EL3访问。

可以采用以下形式来访问系统寄存器:

MRS x0, TTBR0_EL1 // 把 TTBR0_EL1 的值保存到x0
MSR TTBR0_EL1, x0 // 把x0 的值写入TTBR0_EL1寄存器

下表显示了异常级别,这些异常级别具有每个寄存器的单独副本。 例如,单独的辅助控制寄存器(ACTLR)以ACTLR_EL1,ACTLR_EL2和ACTLR_EL3的形式存在。

名称 寄存器 说明 n的允许值
ACTLR_ELn 辅助控制寄存器 控制处理器特定的功能。 1,2,3
CCSIDR_ELn 当前缓存大小ID寄存器 提供有关当前所选缓存的体系结构的信息。 1
CLIDR_ELn 缓存级别ID寄存器 在每个级别上实现的单个或多个高速缓存的类型

缓存层次结构的一致性级别和统一级别。

1,2,3
CNTFRQ_ELn 计数器频率寄存器 报告系统计时器的频率。 0
CNTPCT_ELn 计数器物理计数寄存器 保持64位的当前计数值。 0
CNTKCTL_ELn 计数器内核控制寄存器 控制从虚拟计数器生成事件流。还控制从EL0访问物理计数器,虚拟计数器,EL1物理计时器和虚拟计时器。 1
CNTP_CVAL_ELn 计数器物理计时器比较值寄存器 保存EL1物理计时器的比较值。 0
CPACR_ELn 协处理器访问控制寄存器 控制对跟踪,浮点和SIMD功能的访问。 1
CSSELR_ELn 缓存大小选择寄存器 通过指定所需的缓存级别和缓存类型(指令或数据缓存),选择当前的缓存大小ID寄存器CCSIDR_EL1。 1
CNTP_CTL_ELn 计数器物理控制寄存器 控制EL1物理计时器的寄存器。 0
CTR_ELn 缓存类型寄存器 有关集成缓存体系结构的信息。 0
DCZID_ELn 数据缓存零ID寄存器 指示数据缓存零根据虚拟地址(DCZVA)系统指令写入字节值为0的块大小。 0
ELR_ELn 异常链接寄存器 保存导致异常的指令的地址。 1,2,3
ESR_ELn 异常综合特征寄存器 包括有关异常原因的信息。 1,2,3
FAR_ELn 故障地址寄存器 保存虚拟错误地址。 1,2,3
FPCR 浮点控制寄存器 控制浮点扩展行为。该寄存器中的字段映射到AArch32 FPSCR中的等效字段。 .
FPSR 浮点状态寄存器 提供浮点系统状态信息。该寄存器中的字段映射到AArch32 FPSCR中的等效字段。 .
HCR_ELn Hypervisor 配置寄存器 控制虚拟化设置,并将异常情况捕获到EL2。 2
MAIR_ELn 存储器属性间接寄存器 在ELn的阶段1翻译的Long-descriptor格式转换表项中,提供对应于可能值的存储器属性编码。 1,2,3
MIDR_ELn 主ID寄存器 代码运行的处理器类型(部件号和版本)。 1
MPIDR_ELn 多处理器密切关系的寄存器 处理器和群集ID,在多核或群集系统中。 1
RVBAR_ELn 基于地址寄存器的重置向量 保存重置向量的基地址,以便发送给ELn的任何异常。 1,2,3
SCR_ELn 安全配置寄存器 控制安全状态和EL3的异常情况。 3
SCTLR_ELn 系统控制寄存器 控制架构功能,例如MMU,缓存和对齐检查。 0,1,2,3
SPSR_ELn 保存的程序状态寄存器 当发生异常时,保持已保存的处理器状态。 abt,fiq,irq,und,1,2,3
TCR_ELn 转换控制寄存器 确定哪个转换表基地寄存器定义了转换表行走(translation table walk)的基地址,该基地址是ELn中,内存访问阶段1转换所需要的。

还控制转换表格式并保存可缓存和可共享的信息。

1,2,3
TPIDR_ELn 用户读/写线程ID寄存器 为了操作系统管理的目的,提供一个在ELn上执行的软件可以存储线程标识信息的位置。 0,1,2,3
TPIDRRO_ELn 用户只读线程ID寄存器 提供在EL1或更高版本上执行的软件可以存储线程标识信息的位置。为了操作系统管理的目的,在EL0上执行的软件可以看到这些信息。 0
TTBR0_ELn 转换表基址寄存器0 保存转换表0的基地址,以及它占用的内存的信息。这是ELn内,内存访问阶段1转换的转换表之一。 1,2,3
TTBR1_ELn 转换表基址寄存器1 保存转换表1的基地址,以及它占据的存储器的信息。

这是在EL0和EL1内,内存访问阶段1转换的转换表之一

1
VBAR_ELn 基于向量的地址寄存器 保存异常基地址,以便发送到ELn的任何异常。 1,2,3
VTCR_ELn 虚拟化转换控制寄存器 控制来自非安全EL0和EL1的内存访问阶段2转换所需的转换表步行。还保存访问的可缓存和可共享信息。 2
VTTBR_ELn 虚拟化转换表基址寄存器 保存来自非安全EL0和EL1的内存访问阶段2转换的转换表的基地址。 2

下面我们介绍几组重要的系统控制寄存器。

2 .系统控制寄存器(SCTLR_ELn)

系统控制寄存器(SCTLR)是一个用来控制标准内存、配置系统能力、提供处理器核状态信息的寄存器。包括 SCTLR_EL1、 SCTLR_EL2和 SCTLR_EL3。但是并不是所有bit在EL1都可用。

需要注意的是,有些域在EL1下不能访问。

寄存器各个字段介绍:

描述
UCI 设置此位后,在AArch64中为DC CVAU、DC CIVAC、DC CVAC和IC IVAU指令启用EL0访问。
EE 异常字节顺序。0表示小端,1表示大端。
EOE EL0显式数据访问的字节序。0表示小端,1表示大端。
WXN 写权限不可执行 XN (eXecute Never)。 0表示可写区域不设置不可执行权限(XN),1表示可写区域强制为不可执行(XN)
nTWE 不陷入WFE,此标志为1表示WFE作为普通指令执行
nTWI 不陷入WFI, 此标志为1表示WFI作为普通指令执行
UCT 此标志为1时,开启AArch64的EL0下访问CTR_EL0寄存器
DNE EL0 下访问 DC AVA指令,0 禁止执行,1 允许执行
I 开启指令缓存,这是在EL0和EL1下的指令缓存的启用位。对可缓存的正常内存的指令访问被缓存。
UMA 用户屏蔽访问。当EL0使用AArch64,控制从EL0的中断屏蔽访问。
SED 禁止SETEND。在EL0使用AArch32禁止SETEND指令。0 使能,1 禁止
ITD 禁止IT指令。0表示IT指令有效,1表示IT指令被当作16位指令。仅另外16位指令或32位指令的头16位可以使用
CP 15BEN CP15 barrier使能。如果实现了,它是AArch32 CP15 DMB,DSB和ISB barrier操作的使能位
SA0 EL0的栈对齐检查使能位
SA 栈对齐检查使能位
C 数据cache使能。EL0和EL1的数据访问使能位。对cacheable普通内存的数据访问都被缓存
A 对齐检查使能位
M 使能MMU

2 .虚拟化配置寄存器(HCR_EL2)

虚拟化配置寄存器(HCR_EL2)是一个用来为虚拟化提供配置控制的寄存器,包括定义各种操作是否被捕获到EL2。

各个字段的定义:

bit域 字段 描述
63:60 TWEDEL TWE延迟。当HCR_EL2.TWEDEn为1,由HCR_EL2引起的WFE*陷阱的最小延迟为2的(TWEDEL + 8)次方,单位周期。
59 TWEDEn TWE推迟启用。让由HCR EL2.TWE引起的WFE*指令延迟陷入可配置。 0:陷入的延迟是已经定义的;1:陷入的延迟至少是SCR_EL3.TWEDEL中定义的周期数。
58 TID5 陷入ID组5.。0:任何指令不会被捕获;1:在EL1和EL0访问ID组寄存器5会被捕获到EL2
57 DCT 默认的可缓存性标记。当HCR_EL2.DC实际上控制的是阶段1翻译被视为标记还是或未标记的。0:未标记的;1:标记的
56 ATA 分配标签访问,控制在EL1和EL0对分配标签的访问。0:避免对分配标签的访问,访问GCR_EL1, RGSR_EL1, TFSR_EL1, TFSR_EL2 或者TFSRE0_EL1会出现未定义指令异常并且陷入EL2;1:允许对分配标签的访问
55 TTLBOS 操作于外层共享域的TLB维护陷入指令。当EL2在当前的Security状态中启用时,在EL1执行TLB*指令会导致,0:任何指令不会被捕获。1:指定指令的执行被陷入在EL2中。
54 TTLBIS 操作于内部共享域的TLB维护陷入指令。当EL2在当前的Security状态中启用时,在EL1执行TLB*指令会导致,0:任何指令不会被捕获。1:指定指令的执行被陷入在EL2中。
53 EnSCXT 启用对SCXTNUM_EL1和SCXTNUM_EL0寄存器的访问。0:当HCR_EL2.E2H为0或者HCR_EL2.TGE为0,则访问寄存器会导致未定义指令异常并且陷入EL2;1:访问寄存器不会导致陷入EL2
52 TOCU 操作到统一点的缓存维护陷入指令。当EL2在当前安全状态下启用时,将这些缓存维护指令的执行捕捉到EL2。0:任何指令不会被捕获;1:指定指令的执行会被困在EL2
51 AMVOFFEN 活动监视器虚拟偏移使能。0:活动监视器的虚拟化被禁用。间接读取虚拟偏移寄存器是零;1:启用了活动监视器的虚拟化
50 TICAB ICIALLUIS/IC IALLUIS缓存维护陷入指令。当EL2在当前安全状态下启用时,在EL1到EL2处捕捉那些缓存维护指令的执行。0:任何指令不会被捕获。1:指定指令的执行被陷入在EL2中。
49 TID4 陷入ID组4。 0:任何指令不会被捕获;1:在EL1和EL0访问ID组寄存器4会被捕获到EL2
48 GPF 控制颗粒保护故障在EL0、EL1的上报。0:异常从EL0、EL1不会路由到EL2;1:异常从EL0、EL1路由到EL2,并报告为颗粒保护检查异常。
47 FIEN 故障注入启用。在EL1访问寄存器ERXPFGCDN_EL1, ERXPFGCTL_EL1和ERXPFGF_EL1的结果。0:从EL1访问指定的寄存器会产生一个到EL2的Trap异常;1:任何指令不会被被捕获
46 FWB 强迫写回。定义在2阶段转换机制的组合缓存属性。
45 NV2 嵌套的虚拟化。改变HCR_EL2的行为。(NV1, NV)为硬件提供一种能够将系统寄存器的读写转换为内存的读写的机制。0:该位对HCR EL2的行为没有影响;1:如果HCR_EL2{NV1, NV} 开启了,则将寄存器的读/写转换为对内存的读/写和将EL2寄存器重定向到EL1寄存器。
44 AT 地址转换。当EL2在当前安全状态下启用时,在EL1执行AT S1E0R, AT S1E0W, AT S1E1R, AT S1E1W, AT S1E1RP, AT S1E1WP地址转换指令是否会被捕获到EL2。0:不会;1:会
43 NV1 嵌套的虚拟化。0:没有作用;1:如果HCR_EL2.NV2为1 ,从EL1到实现的EL2寄存器的访问被转换为load和store;如果HCR_EL2.NV2为0,EL1访问VBAR_EL1, ELR_EL1, SPSR_EL1会陷入EL2
42 NV 嵌套的虚拟化。0:没有作用;1:如果HCR_EL2.NV2为0 ,EL1对指定寄存器的访问或指定指令的执行被捕获到EL2,如果HCR_EL2.NV2为1,重新定义EL1的寄存器,使用SPSR_EL2, ELR_EL2, ESR_EL2,和FAR_EL2代替SPSR_EL1, ELR_EL1, ESR_EL1和FAR_EL1
41 API 控制与指针身份验证相关的下列指令的使用。0:任何与指针验证相关的指令的使用都会被捕获到EL2;1:指令不会被捕获。
40 APK 当APK被设置为0,当EL2在当前安全状态下启用时,对保存指针身份验证“键”值的寄存器的访问被捕获到EL2。
39 TME 允许在EL0、EL1上访问TSTART、TCOMMIT、TTEST和TCANCEL指令。 0:不允许,定义为未定义指令;1:允许
38 MIOCNCE 使能用于EL1和EL0的翻译机制的不匹配的内部/外部缓存的非一致性。对于EL1&0翻译机制,对于使用共享性和缓存性的通用定义的内存位置的允许访问,如果这些访问的内部缓存属性与外部缓存属性不同,0:那么一定不会失去一致性;1:可能会失去一致性
37 TEA 路由同步外部中止异常到EL2。0:异常不会从EL0和EL1路由到EL2;1:当前Security状态下启用时,如果EL0和EL1的同步外部中止异常没有路由到EL3,则路由到EL2。
36 TERR 陷入错误记录访问。从EL1陷入到EL2读取的RAS错误寄存器。 0:任何指令不会被捕获。1:当EL2在当前安全状态下被启用时,访问EL1指定的寄存器会生成一个到EL2的陷入异常。
35 TLOR 陷入LOR寄存器。非安全的EL1访问LORSA_EL1, LOREA_EL1, LORN_EL1, LORC_EL1, 和 LORID_EL1。 0:不产生异常;1:被捕获到EL2
34 E2H EL2主机。启用主机操作系统在EL2中运行。0:在EL2上支持主机操作系统的设施被禁用。1:在EL2上支持主机操作系统的设施被启用。
33 ID 禁用阶段2指令访问缓存。0:这种控制对EL1和EL0翻译体系的第二阶段没有影响;1:强制所有对普通内存的指令访问的第二阶段转换为不可缓存。
32 CD 禁用阶段2数据访问缓存。0:这种控制对EL1和EL0翻译体系的第二阶段没有影响;1:强制所有对普通内存的指令访问的第二阶段转换为不可缓存。
31 RW 对较低异常级别的执行状态控制。0:低层的特权等级全部都是AArch32;1:低一层的特权等级是 AArch64
30 TRVM 陷入读取虚拟内存控制。从EL陷入到EL21读取虚拟内存控制寄存器。0:任何指令不会被捕获。1:当EL2在当前安全状态下启用时,对指定虚拟内存控件的EL1读访问被捕获到EL2。
29 HCD HVC指令禁用。0:在EL2和EL1上启用HVC指令执行;1:HVC指令在EL2和EL1是未定义的,任何产生的异常都被带到执行HVC指令的异常级别。
28 TDZ DC ZVA指令陷入。当EL2在当前Security状态下启用时,在EL0和EL1执行DC ZVA指令将陷入EL2。0:不会陷入;1:当EL2在当前Security中启用时,任何试图执行该指令会被捕获到EL2。
27 TGE 陷入一般异常。0:对EL0的执行没有影响;1:当EL2在当前安全状态下未启用时,对EL0没有影响。当EL2在当前安全状态下启用时,所有异常路由到EL2
26 TVM 虚拟内存控制陷入。0:任何指令不会被捕获;1:当EL2在当前安全状态下启用时,对指定的EL1虚拟内存控制寄存器的EL1写访问被捕获到EL2。
25 TTLB TLB维护指令陷入。0:任何指令不会被捕获;1:当EL2在当前安全状态下启用时,在EL1执行指定的TLB维护指令会被捕获到EL2。
24 TPU 缓存维护指令陷入,操作到统一点。0:任何指令不会被捕获;1:当EL2在当前安全状态下启用时,在EL1执行指定的缓存维护指令会被捕获到EL2。
23 TPCP 数据或统一的缓存维护指令陷入,操作到一致性或持久性点。0:任何指令不会被捕获;1:当EL2在当前安全状态下启用时,在EL1执行指定的缓存维护指令会被捕获到EL2。
22 TSW 数据或通过“设置/方式”操作的统一缓存维护指令陷入。0:任何指令不会被捕获;1:当EL2在当前安全状态下启用时,在EL1执行指定的缓存维护指令会被捕获到EL2。
21 TACR 辅助控制寄存器陷入。0:任何指令不会被捕获;1:当EL2在当前安全状态下启用时,在EL1访问辅助控制寄存器会被捕获到EL2。
20 TIDCP 实现定义的功能陷入。。0:任何指令不会被捕获;1:当EL2在当前Security状态中启用时,EL1访问或执行保留的指定编码实现定义功能被捕获到EL2。
19 TSC smc指令陷入。0:任何指令不会被捕获;1:当EL2在当前安全状态下启用时,在EL1执行smc指令会被捕获到EL2。
18 TID3 陷入ID组3。 0:任何指令不会被捕获;1:在EL1和EL0访问ID组寄存器3会被捕获到EL2
17 TID2 陷入ID组2。 0:任何指令不会被捕获;1:在EL1和EL0访问ID组寄存器2会被捕获到EL2
16 TID1 陷入ID组1。 0:任何指令不会被捕获;1:在EL1和EL0访问ID组寄存器1会被捕获到EL2
15 TID2 陷入ID组0。 0:任何指令不会被捕获;1:在EL1和EL0访问ID组寄存器0会被捕获到EL2
14 TWE 当被设置为1,在任何低于EL2的异常级别上执行WFE指令的任何尝试都会被捕获到EL2
13 TWI 当被设置为1,在任何低于EL2的异常级别上执行WFI指令的任何尝试都会被捕获到EL2
12 DC 默认的缓存能力。 0:对EL1和EL0翻译策略没有影响;1:EL1和El0翻译阶段1产生的记忆类型为非正常可共享的,内部写回式读分配写分配,外部写回式读分配写分配。
11:10 BSU 屏障共享升级。该字段确定从EL1或EL0执行的指令屏障的最小可共享域。00:不共享;01:内核共享;10:外部共享;11:全部共享
9 FB 强制广播。 0:任何指令不会被捕获;1:在EL1执行指定的指令之一时,该指令会在内部共享域中广播。
8 VSE 虚拟SError中断。 0:不会使一个虚拟的SError中断挂起;1:使一个虚拟的SError中断挂起
7 VI 虚拟IRQ中断。 0:不会使一个虚拟的IRQ中断挂起;1:使一个虚拟的IRQ中断挂起
6 VF 虚拟FIQ中断。 0:不会使一个虚拟的FIQ中断挂起;1:使一个虚拟的FIQ中断挂起
5 AMO 物理SError中断路由。当在EL2以下的Exception级别执行时,并且EL2在当前的Security状态下被启用,0:如果HCR_EL2.TGE为0,路由到EL2,如果HCR_EL2.TGE为1,不执行。1:路由到EL2,如果HCR_EL2.TGE为1,启用虚拟SError中断。
4 IMO 物理IRQ中断路由。当在EL2以下的Exception级别执行时,并且EL2在当前的Security状态下被启用,0:如果HCR_EL2.TGE为0,路由到EL2,如果HCR_EL2.TGE为1,不执行。1:路由到EL2,如果HCR_EL2.TGE为1,启用虚拟IRQ中断。
3 FMO 物理FIQ中断路由。当在EL2以下的Exception级别执行时,并且EL2在当前的Security状态下被启用,0:如果HCR_EL2.TGE为0,路由到EL2,如果HCR_EL2.TGE为1,不执行。1:路由到EL2,如果HCR_EL2.TGE为1,启用虚拟FIQ中断。
2 PTW 受保护的表遍历。在EL1&EL0转换体系中,作为第一阶段转换表遍历的一部分的转换表访问要服从第二阶段转换。来自两个转换阶段的内存类型属性的组合意味着可以访问某种类型的Device内存。0:转换表的遍历发生在普通非缓存内存中。这意味着它可以被推测;1:内存访问产生二级权限故障
1 SWIO 设置/失效指令覆盖。0:通过设置/失效指令对数据缓存无效的操作没有影响;1:通过设置/失效指令使数据失效,达到清理数据缓存的目的
0 VM 虚拟化支持。当EL2在当前安全状态下启用时,为el1和o转换机制启用阶段2地址转换。0:禁用;1:启用

3 .安全配置寄存器(SCR_EL3)

安全配置寄存器(SCR_EL3)是一个定义当前Security状态的配置的寄存器,它指定:EL0、EL1、EL2的安全状态。“安全”状态为“安全”或者“不安全”。

各个字段的定义:

bit域 字段 描述
63 RES0 保留
62 NSE 该字段表示根据SCR_EL3.NS,选择EL2及以下Exception级别的Security状态。
61:49 RES0 保留的
48 GPF 控制颗粒保护故障在EL0、EL1和El2的上报。0:异常从EL0、EL1或EL2不会路由到EL3;1:异常从EL0、EL1或EL2路由到EL3,并报告为颗粒保护检查异常。
47:42 RES0 保留的
41 EnTP2 在EL2、EL1和EL0上执行的trap指令(比如访问TPIDR2_EL0)陷入到EL3。0:这些指令会在EL2、EL1和EL0的执行时被捕获;1:任何指令的执行不会被捕获。
40 TRNDR RNDR和RNDRRS读取是否捕获。0:不会导致RNDR和RDNRRS被捕获。;1:任何读取RNDR或RNDRRS的尝试都被陷入到EL3
39 RES0 保留的
38 HXEn 允许从EL3访问EL2上的HCRX_EL2寄存器。0:不允许,间接读会返回0;1:允许
37 ADEn 允许EL1和EL2上访问ACCDATA_EL1寄存器。0:在 EL1 at EL1和EL2访问ACCDATA_EL1会被捕获到EL3,除非访问被EL2细粒度trap捕获到EL2;1:访问ACCDATA_EL1不会被捕获。
36 EnAS0 在EL0, EL1或EL2触发ST64BVO指令异常是否路由到EL3。0:路由EL3;1:不会路由到EL3
35 AMVOFFEN 活动监视器虚拟偏移使能。0:使能,在EL2访问AMEVCNTVOFF0_EL2和AMEVCNTVOFF1_EL2 寄存器会陷入到EL3;1:不使能
34 TME 允许在EL0、EL1和EL2上访问TSTART、TCOMMIT、TTEST和TCANCEL指令。 0:不允许,定义为未定义指令;1:允许
33:30 TWEDEL TWE延迟。当SCR_EL3.TWEDEn为1,由SCR_EL3引起的WFE*陷阱的最小延迟为2的(TWEDEL + 8)次方,单位周期。
29 TWEDEn TWE推迟启用。让由SCR EL3.TWE引起的WFE*指令延迟陷入可配置。 0:陷入的延迟是已经定义的;1:陷入的延迟至少是SCR_EL3.TWEDEL中定义的周期数。
28 ECVEn ECV启用,启用对CNTPOFF_EL2寄存器的访问。0:EL2访问CNTPOFF_EL2会被捕获到EL3,;1:EL2访问CNTPOFF_EL2不陷入在EL3。
27 FGTEn 细粒度的陷阱使能。控制对HAFGRTR_EL2, HDFGRTR_EL2, HDFGWTR_EL2, HFGRTR_EL2, HFGITR_EL2,和HFGWTR_EL2,寄存器的访问。 0:会陷入EL3;1:不会陷入EL3
26 ATA 分配标签访问,控制在EL2, EL1和EL0对分配标签的访问。0:避免对分配标签的访问,访问GCR_EL1, RGSR_EL1, TFSR_EL1, TFSR_EL2 或者TFSRE0_EL1会出现未定义指令异常并且陷入EL3;1:允许对分配标签的访问
25 EnSCXT 使能对SCXTNUM_EL2、SCXTNUM_EL1和SCXTNUM_ELO 寄存器的访问。0:不使能,访问读取返回0并且会陷入EL3;1:使能
24:22 RES0 保留的
21 FIEN 故障注入启用。在EL1和EL2访问寄存器ERXPFGCDN_EL1, ERXPFGCTL_EL1和ERXPFGF_EL1的结果。0:从EL1和EL2访问指定的寄存器会产生一个到EL3的Trap异常;1:任何指令不会被被捕获
20 NMEA 屏敝外部中止。当SCR_EL3.EA 等于1时,0:SError中断不会路由到EL3;1:由PSTATE.A.决定是否把SError中断路由到EL3
19 EASE 外部中断到SError中断向量。同步执行到EL3的外部终止异常会被执行到的位置,0:VBAR_EL3相对应的同步异常向量;1:VBAR_EL3相对应的SError中断向量。
18 EEL2 安全EL2启用。 0:与Secure EL2相关的行为都被禁用;1:与Secure EL2相关的行为都已启用。
17 API 控制与指针身份验证相关的下列指令的使用。0:任何与指针验证相关的指令的使用都会被捕获到EL3;1:指令不会被捕获。
16 APK 当APK被设置为1,对持有EL1或EL2指针认证“键”值的寄存器的访问被捕获到EL3,除非它们由于HCR_EL2.APK位或其他陷阱而被捕获到EL2。
15 TERR Trap错误记录访问。0:不产生异常;1:从EL1和EL2访问指定的寄存器会产生一个到EL3的Trap异常。
14 TLOR 0:不产生异常;1:如果EL1和EL2访问的LOR寄存器不是未定义的,则被捕获到EL3,除非它被捕获到HCR_EL2
13 TWE 当被设置为1,在任何低于EL3的异常级别上执行WFE指令的任何尝试都会被捕获到EL3
12 TWI 当被设置为1,在任何低于EL3的异常级别上执行WFI指令的任何尝试都会被捕获到EL3
11 ST 当被设置为1, Secure EL1访问counter timer物理安全计时器寄存器会被捕获到EL3
10 RW 对较低异常级别的执行状态控制。0:低层的特权等级全部都是AArch32;1:低一层的特权等级是 AArch64
9 SIF 安全指令取出。当PE处于Secure状态时,在翻译的第一阶段标记为Non-secure,该位决定是否允许从翻译的第一阶段标记为不安全的内存中提取安全状态指令。0:允许;1:不允许
8 HCE Hypervisor调用指令启用。0:HVC指令未定义的;1:在EL3、EL2、EL1使能HVC指令。
7 SMD 安全监控呼叫禁用。0:SMC指令在EL3、EL2和EL1使能;1:SMC指令未定义的。
6 RES0 保留的
5:4 RES1 保留的
3 EA 外部中止和错误中断路由。当在EL3以下的异常级别执行时,External aborts和SError中断会不会被路由到EL3。0:不会,但是在EL3时,SError中断不会被处理,外部中止中断会被处理;1:会
2 FIQ 物理FIQ路由。 当在EL3以下的异常级别执行时,物理FIQ中断会不会被路由到EL3。0:不会,但是在EL3执行时,不使用物理FIQ中断;1:会。
1 IRQ 物理IRQ路由。 当在EL3以下的异常级别执行时,物理IRQ中断会不会被路由到EL3。0:不会,但是在EL3执行时,不使用物理IRQ中断;1:会。
0 NS 不安全位。该字段与SCR_EL3.NSE选择EL2及更低异常水平的安全状态。 当NSE为0时,0:安全;1:不安全。 当NSE为1时,0:保留;1:领域

4.翻译控制寄存器(TCR_ELx)

翻译控制寄存器是第1阶段翻译状态的控制寄存器,包括TCR_EL1、 TCR_EL2和 TCR_EL3。
AArch64系统寄存器TCR_EL1位[31:0]在架构上映射到AArch32系统寄存器TTBCR[31:0]。AArch64系统寄存器TCR_EL1位[63:32]在架构上映射到AArch32系统寄存器TTBCR2[31:0]。AArch64系统寄存器TCR_EL2位[31:0]在架构上映射到AArch32系统寄存器HTCR[31:0]。

4.1 TCR_EL1寄存器

EL1&0都是用TCR_EL1寄存器。

各个字段的定义:

bit域 字段 描述
63:60 RES0 保留的
59 DS 当在翻译制度的第1阶段使用4KB和16KB翻译粒时,该字段影响52位输出寻址,包括翻译描述符、块描述符、页描述符的输出情况
58 TCMA1 控制未检查访问的生成, 0:对EL1上未检查访问是不会影响其他。1:在EL1的所有访问都是未检查的。
57 TCMA0 控制未检查访问的生成, 0:对EL0上未检查访问是不会影响其他。1:在EL0的所有访问都是未检查的。
56 E0PD1 对由TTBR1_EL1转换的任何地址的非特权访问的故障控制。 0:对由TTBR1_EL1转换的任何地址的非特权访问都不会产生错误;1:对由TTBR1_EL1转换的任何地址的无特权访问将产生0级转换错误。
55 E0PD0 对由TTBR1_EL0转换的任何地址的非特权访问的故障控制。 0:对由TTBR1_EL0转换的任何地址的非特权访问都不会产生错误;1:对由TTBR1_EL0转换的任何地址的无特权访问将产生0级转换错误。
54 NFD1 该位控制是否对使用TTBR1_EL1转换的虚拟地址进行无错误的非特权访问,以响应是否执行阶段1转换表遍历。0:不禁用使用TTBR1_EL1的阶段1翻译表遍历;1:使用TTBR1_EL1转换的虚拟地址上的TLB错过会导致访问失败,而不会发生异常。不执行第1阶段的翻译表行走
53 NFD1 该位控制是否对使用TTBR0_EL1转换的虚拟地址进行无错误的非特权访问,以响应是否执行阶段1转换表遍历。0:不禁用使用TTBR0_EL1的阶段1翻译表遍历;1:使用TTBR0_EL1转换的虚拟地址上的TLB错过会导致访问失败,而不会发生异常。不执行第1阶段的翻译表行走
52 TBID1 使用指令地址的顶部字节进行地址匹配控制 。0:TCR_EL1.TBI1适用于指令访问和数据访问;1:TCR_EL1.TBI1仅适用于数据访问。
51 TBID0 使用指令地址的顶部字节进行地址匹配控制 。0:TCR_EL1.TBI0适用于指令访问和数据访问;1:TCR_EL1.TBI0仅适用于数据访问。
50 HWU162 TTBR1_EL1进行翻译的阶段1的时候,翻译表块或页条目的位[62]能否实现定义的硬件使用。0:不能;1:可以
49 HWU161 TBR1_EL1进行翻译的阶段1的时候,翻译表块或页条目的位[61]能否实现定义的硬件使用。0:不能;1:可以
48 HWU160 TTBR1_EL1进行翻译的阶段1的时候,翻译表块或页条目的位[60]能否实现定义的硬件使用。0:不能;1:可以
47 HWU159 TTBR1_EL1进行翻译的阶段1的时候,翻译表块或页条目的位[59]能否实现定义的硬件使用。0:不能;1:可以
46 HWU062 TTBR0_EL1进行翻译的阶段1的时候,翻译表块或页条目的位[62]能否实现定义的硬件使用。0:不能;1:可以
45 HWU061 TTBR0_EL1进行翻译的阶段1的时候,翻译表块或页条目的位[61]能否实现定义的硬件使用。0:不能;1:可以
44 HWU060 TTBR0_EL1进行翻译的阶段1的时候,翻译表块或页条目的位[60]能否实现定义的硬件使用。0:不能;1:可以
43 HWU059 TTBR0_EL1进行翻译的阶段1的时候,翻译表块或页条目的位[59]能否实现定义的硬件使用。0:不能;1:可以
42 HPD1 分级权限禁用,影响TTBR1 EL1指向的翻译表中的一些控制位。0:启用分级权限;1:禁用分级权限
41 HPD10 分级权限禁用,影响TTBR0 EL1指向的翻译表中的一些控制位。0:启用分级权限;1:禁用分级权限
40 HD 从EL0和EL1转换阶段1脏态的硬件管理。 0:禁用脏状态的阶段1硬件管理;1:启用脏状态的阶段1硬件管理
39 HA 从EL0和EL1翻译的阶段1硬件访问标志更新。 0:阶段1访问标志位更新被禁用;1:阶段1访问标志位更新启用。
38 TBI1 最高字节忽略。 0:地址计算中使用的Top字节匹配TTBR1_EL1区域的地址;1:地址计算中忽略的Top字节
37 TBI0 最高字节忽略。 0:地址计算中使用的Top字节匹配TTBR0_EL1区域的地址;1:地址计算中忽略的Top字节
36 AS ASID大小。0:8位,除了回读寄存器外,TTBRO_ELT和TTBR1_EL1的高8位被硬件忽略;1:16位,TTBRO_EL1和TTBR1_EL1的高16位用于在TLB中分配和匹配。
35 RES0 保留的
34:32 IPS 中间物理地址大小。000:32位,4GB;001:36位,64GB;010:40位,1TB;011:42位,4TB;100:44位,16TB;101:48位,256TB;110:52位,4PB
31:30 TG1 TTBR1_EL1的颗粒大小。01:16KB;10:4KB;11:64Kb
29:28 SH1 与使用TTBR1_EL1的翻译表有关的内存的可共享性属性。00:不共享;10:外部可共享;11:内部可共享
27:26 ORGN1 与使用TTBR1_EL1的翻译表有关的内存的外部缓存属性。00:不缓存;01:写回的读写缓存;10:写穿的读缓存写不缓存;11:写回的读缓存写不缓存
25:24 IRGN1 与使用TTBR1_EL1的翻译表有关的内存的内部缓存属性。00:不缓存;01:写回的读写缓存;10:写穿的读缓存写不缓存;11:写回的读缓存写不缓存
23 EPD1 控制是否在TLB miss上对使用TTBR1_EL1进行转换的地址执行转换表遍历。0:使用TTBR1_EL1执行翻译表遍历;1:不执行翻译表遍历
22 A1 选择是否是TTBR0_EL1或TTBR1_EL1定义ASID。0:TTBR0_EL1.ASID定义了ASID;1:TTBR1_EL1.ASID定义了ASID
21:16 T1SZ TTBR1_EL1寻址的内存区域大小偏移量。区域大小为2的(64-T1SZ)次方字节。T1SZ的最大值和最小值取决于翻译表的级别和内存翻译粒度大小。
15:14 TG0 TTBR0_EL1的颗粒大小。01:16KB;10:4KB;11:64Kb
13:12 SH0 与使用TTBR0_EL1的翻译表有关的内存的可共享性属性。00:不共享;10:外部可共享;11:内部可共享
11:10 ORGN0 与使用TTBR0_EL1的翻译表有关的内存的外部缓存属性。00:不缓存;01:写回的读写缓存;10:写穿的读缓存写不缓存;11:写回的读缓存写不缓存
9:8 IRGN0 与使用TTBR0_EL1的翻译表有关的内存的内部缓存属性。00:不缓存;01:写回的读写缓存;10:写穿的读缓存写不缓存;11:写回的读缓存写不缓存
7 EPD0 控制是否在TLB miss上对使用TTBR0_EL1进行转换的地址执行转换表遍历。0:使用TTBR0_EL1执行翻译表遍历;1:不执行翻译表遍历
6 RES0 保留的
5:0 T0SZ TTBR0_EL1寻址的内存区域大小偏移量。区域大小为2的(64-T0SZ)次方字节。T0SZ的最大值和最小值取决于翻译表的级别和内存翻译粒度大小。

4.2 TCR_EL2&3


各个字段的定义:

bit域 字段 描述
63:33 RES0 保留的
32 DS 当在翻译制度的第1阶段使用4KB和16KB翻译粒时,该字段影响52位输出寻址,包括翻译描述符、块描述符、页描述符的输出情况
31 RES1 保留的
30 TCMA 控制未检查访问的生成。 0:对EL2上未检查访问是不会影响其他。1:在EL2的所有访问都是未检查的。
29 TBID 使用指令地址的顶部字节进行地址匹配控制 。0:TCR_EL2.TBI0适用于指令访问和数据访问;1:TCR_EL2.TBI0仅适用于数据访问。
28 HWU62 进行翻译的阶段1的时候,翻译表块或页条目的位[62]能否实现定义的硬件使用。0:不能;1:可以
27 HWU61 进行翻译的阶段1的时候,翻译表块或页条目的位[61]能否实现定义的硬件使用。0:不能;1:可以
26 HWU60 进行翻译的阶段1的时候,翻译表块或页条目的位[60]能否实现定义的硬件使用。0:不能;1:可以
25 HWU59 进行翻译的阶段1的时候,翻译表块或页条目的位[59]能否实现定义的硬件使用。0:不能;1:可以
24 HPD 分级权限禁用,影响TTBR0 EL2指向的翻译表中的一些控制位。0:启用分级权限;1:禁用分级权限
23 RES1 保留的
22 HD 从EL2转换阶段1脏态的硬件管理。 0:禁用脏状态的阶段1硬件管理;1:启用脏状态的阶段1硬件管理
21 HA 从EL2翻译的阶段1硬件访问标志更新。 0:阶段1访问标志位更新被禁用;1:阶段1访问标志位更新启用。
20 TBI 最高字节忽略。 0:地址计算中使用的Top字节匹配TTBR0_EL2区域的地址;1:地址计算中忽略的Top字节
19 RES1 保留的
18:16 PS 物理地址大小。000:32位,4GB;001:36位,64GB;010:40位,1TB;011:42位,4TB;100:44位,16TB;101:48位,256TB;110:52位,4PB
15:14 TG0 TTBR0_EL2的颗粒大小。01:16KB;10:4KB;11:64Kb
13:12 SH0 与使用TTBR0_EL2的翻译表有关的内存的可共享性属性。00:不共享;10:外部可共享;11:内部可共享
11:10 ORGN0 与使用TTBR0_EL2的翻译表有关的内存的外部缓存属性。00:不缓存;01:写回的读写缓存;10:写穿的读缓存写不缓存;11:写回的读缓存写不缓存
9:8 IRGN0 与使用TTBR0_EL2的翻译表有关的内存的内部缓存属性。00:不缓存;01:写回的读写缓存;10:写穿的读缓存写不缓存;11:写回的读缓存写不缓存
7:6 RES0 保留的
5:0 T0SZ TTBR0_EL2寻址的内存区域大小偏移量。区域大小为2的(64-T0SZ)次方字节。T0SZ的最大值和最小值取决于翻译表的级别和内存翻译粒度大小。

5.总结

我们重点关注的是和启动相关的寄存器,异常处理相关寄存器,以及内存管理相关寄存器。
看寄存器很枯燥,后面需要的寄存器,再追加吧。

基础篇(二).ARMv8寄存器(2)相关推荐

  1. 基础篇(二).ARMv8寄存器(1)

    ARMv8寄存器(1) ARMv8寄存器实在太多了,本节主要针对系统软件常用的寄存器作为重点介绍. 1.ARMv8寄存器介绍 ARMv8架构(针对Core来说)至少有上千个寄存器,更别提Core外SO ...

  2. mysql 基础篇(二) 账号、权限管理

    mysql 基础篇(二) 账号.权限管理.备份与还原 建立账号密码: Grant all on test.* to "cj"@"localhost" ident ...

  3. 用Kotlin撸一个图片压缩插件-插件基础篇(二)

    简述: 前两天写了篇用Kotlin撸一个图片压缩插件-导学篇,现在迎来了插件基础篇,没错这篇文章就是教你如何一步一步从零开始写一个插件,包括插件项目构建,运行,调试到最后的上线发布整个流程.如果你是插 ...

  4. vue实战入门基础篇二:从零开始仿门户网站实例-开发框架搭建

    上一篇:vue实战入门基础篇一:从零开始仿门户网站实例-前期准备工作 vue实战入门基础篇二:从零开始仿门户网-2022-2-23 21:00:27 一.目录 第一篇:前期准备工作 第二篇:开发框架搭 ...

  5. WF4.0 基础篇 (二) Activity介绍及WriteLine Activity的使用

    从本篇开始,将正式讲解WF4.0,本文主要涉及如下内容:Activity介绍, WF4.0 中工作流的结构,通过WriteLine演示InArgument<T>参数的使用 目录 1     ...

  6. 字符变量赋值规则_Java的常量、变量、数据类型(基础篇二)

    标识符 标识符:是指在程序中自己定义的内容,如类名.方法名.变量名等等. 命名规则:是有硬性要求的 关键字:是指Java已经定义好的单词,具有特殊含义,比如public.static.class.vo ...

  7. 02 MSC类设备-基础篇(二)

    上一篇: https://blog.csdn.net/qq_40088639/article/details/110489923 四.Bulk-Only Transport协议传输模型 分析BusHo ...

  8. Python机器学习基础篇二《监督学习》

    前言 前期回顾: Python机器学习基础篇一<为什么用Python进行机器学习> 前面说过,监督学习是最常用也是最成功的机器学习类型之一.本章将会详细介绍监督学 习,并解释几种常用的监督 ...

  9. python进阶记录之基础篇二十六_Python进阶记录之基础篇(十六)

    回顾 在Python进阶记录之基础篇(十五)中,我们介绍了面向对象的基本概念以及Python中类和对象的基础知识,需要重点掌握类的创建和对象的使用.今天我们继续讲一下Python中面向对象的相关知识点 ...

最新文章

  1. @getmapping注解的作用_一口气说出6种,@Transactional注解的失效场景
  2. matlab交流电源并联,交流电路串联谐振和并联谐振的仿真分析
  3. 打开程序时固定位置_FANUC机器人:参考位置功能介绍与设定方法
  4. 缺乏运动 七种病早早光临
  5. php中goto另一个页面,php中goto操作符的详细介绍
  6. SonarQube 质量配置,设置各个语言默认的扫描规则
  7. Nginx+Tomcat搭建高性能负载均衡集群
  8. android视频播放器排行榜,安卓视频播放器哪个好 五款主流视频播放器对比
  9. 阿丹学财报(1)- 财报是用来证伪的
  10. Python 之霍兰德人格与职业分析
  11. Java程序出现不正常情况
  12. 电源常识-差模干扰共模干扰
  13. 白苹果了怎么办_ios13更新遭遇白苹果了怎么办?
  14. “笨办法”学Python3,Zed A. Shaw, 习题1~2
  15. 计算机提示无法识别优盘,win7电脑无法识别u盘的四种解决方法
  16. 一个初中平面几何问题
  17. 香农采样定理及其证明
  18. 计算机存储单位及换算
  19. C++查缺补漏之异常(续)
  20. Educoder JavaScript

热门文章

  1. centos php-fpm 位置,centos 如何安装 php-fpm
  2. Wireshark软件使用
  3. (一)protege之使用入门
  4. Vue项目设置ico
  5. MySQL#Update语句
  6. 论文笔记2:Deep Attention Recurrent Q-Network
  7. python二级证书考试难度_全国计算机等级考试 python二级考试体验及小技巧总结...
  8. 华硕服务器进入重装系统界面怎么办,进不了桌面怎么重装系统,华硕电脑卡在欢迎界面...
  9. 汉诺塔(hanoi)
  10. 青蛙现象、鳄鱼法则、鲇鱼效应、羊群效应、刺猬法则、手表定律、破窗理论、二八定律、木桶理论、马太效应