HCR_EL2寄存器(Hypervisor Configuration Register),即虚拟化配置寄存器,用户定义各种非安全状态下的操作是否trap到EL2去处理
HCR_EL2是个64位的寄存器。
字段说明
注:不同arm版本有些字段可能没有,
各个bit的详细说明如下,
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 | 在ARMv8.3支持。地址转换。当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陷入到EL2读取虚拟内存控制寄存器。0:任何指令不会被捕获;1:当EL2在当前安全状态下启用时,对指定虚拟内存控件的EL1读访问被捕获到EL2。 |
29 | HCD | HVC指令禁用。0:在EL2和EL1上启用HVC指令执行;1:HVC指令在EL2和EL1是未定义的,任何产生的异常都被带到执行HVC指令的异常级别。 |
28 | TDZ | DC ZVA指令陷入。当EL2在当前安全状态下启用时,在EL0和EL1执行DC ZVA指令将陷入EL2。0:不会陷入;1:当EL2在当前安全状态下启用时,任何试图执行该指令会被捕获到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在当前安全状态下启用时,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 | TID0 | 陷入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和EL0转换机制启用阶段2地址转换。0:禁用;1:启用。 |
评论 (0)