SCR_EL3 的特性:
**用途**
定义当前安全状态的配置。它指定:
• EL0、EL1 和 EL2 的安全状态。安全状态可以是安全(Secure)或非安全(Non-secure)。
• 较低异常等级的执行状态。
• IRQ、FIQ、SError 中断和外部中止异常是否被路由到 EL3。
• 各种操作是否被陷入到 EL3。
**配置**
AArch64 系统寄存器 SCR_EL3 的位 [31:0] 可以映射到 AArch32 系统寄存器 SCR[31:0],但这并非架构强制要求。
仅当 HaveEL(EL3) 时,此寄存器才存在。否则,直接访问 SCR_EL3 将是未定义的。
该寄存器的部分或全部 RW 字段具有定义的复位值。这些值仅在 PE 复位到使用 AArch64 的异常等级时适用。否则,该寄存器中的 RW 字段复位为架构上未知的值。
**属性**
SCR_EL3 是一个 64 位寄存器。
**字段描述**
SCR_EL3 的位分配如下:
63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32
| RES0 | AMVOFFEN | RES0 | TWEDEL | TWEDEn | ECVEn | FGTEn | ATA | EnSCXT | RES0 | FIEN | NMEA | EASE | EEL2 | API | APK | TERR | TLOR | TWE | TWI | ST | RW | SIF | HCE | SMD | RES0 | RES1 | EA | FIQ | IRQ | NS |
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
---
**位 [63:36]**
保留,RES0。
**AMVOFFEN,位 [35]**
当实现了 ARMv8.6-AMU 时:
活动监视器虚拟偏移使能。
| AMVOFFEN | 含义 |
|----------|------|
| 0b0 | 在 EL2 层对 AMEVCNTVOFF0<n>_EL2 和 AMEVCNTVOFF1<n>_EL2 的访问被陷入到 EL3。对虚拟偏移寄存器的间接读返回零。 |
| 0b1 | 该字段不影响对 AMEVCNTVOFF0<n>_EL2 和 AMEVCNTVOFF1<n>_EL2 的访问。 |
否则:
保留,RES0。
**位 [34]**
保留,RES0。
**TWEDEL,位 [33:30]**
当实现了 ARMv8.6-TWED 时:
TWE 延迟。一个 4 位无符号数,当 SCR_EL3.TWEDEn 为 1 时,编码因 SCR_EL3.TWE 引起的 WFE 陷入的最小延迟为 2^(TWEDEL + 8) 个周期。
该字段复位为架构上未知的值。
否则:
保留,RES0。
**TWEDEn,位 [29]**
当实现了 ARMv8.6-TWED 时:
TWE 延迟使能。使能由 SCR_EL3.TWE 引起的 WFE 指令的可配置延迟陷入。
| TWEDEn | 含义 |
|--------|------|
| 0b0 | 执行 WFE 陷入的延迟由实现定义。 |
| 0b1 | 执行 WFE 陷入的延迟至少为 SCR_EL3.TWEDEL 中定义的周期数。 |
该字段复位为架构上未知的值。
否则:
保留,RES0。
**ECVEn,位 [28]**
当实现了 ARMv8.6-ECV 时:
ECV 使能。使能对 CNTPOFF_EL2 寄存器的访问。
| ECVEn | 含义 |
|-------|------|
| 0b0 | EL2 对 CNTPOFF_EL2 的访问被陷入到 EL3,并且除了从 EL3 直接读或写该寄存器外,CNTPOFF_EL2 的值被视为 0。 |
| 0b1 | 此机制不会将 EL2 对 CNTPOFF_EL2 的访问陷入到 EL3。 |
该字段复位为架构上未知的值。
否则:
保留,RES0。
**FGTEn,位 [27]**
当实现了 ARMv8.6-FGT 时:
使能对细粒度陷入寄存器的访问:HAFGRTR_EL2, HDFGRTR_EL2, HDFGWTR_EL2, HFGRTR_EL2, HFGITR_EL2 和 HFGWTR_EL2。
| FGTEn | 含义 |
|-------|------|
| 0b0 | EL2 对 HAFGRTR_EL2, HDFGRTR_EL2, HDFGWTR_EL2, HFGRTR_EL2, HFGITR_EL2 和 HFGWTR_EL2 寄存器的访问被陷入到 EL3,并且这些寄存器的行为如同所有位都被设置为 0。 |
| 0b1 | 此机制不会将 EL2 对 HAFGRTR_EL2, HDFGRTR_EL2, HDFGWTR_EL2, HFGRTR_EL2, HFGITR_EL2 和 HFGWTR_EL2 寄存器的访问陷入到 EL3。 |
由访问细粒度陷入寄存器引起的陷阱使用 EC 代码 0x18 及其相关的 ISS 报告。
否则:
保留,RES0。
**ATA,位 [26]**
当实现了 ARMv8.5-MemTag 时:
分配标签访问。控制 EL2、EL1 和 EL0 对分配标签的访问。
当访问被阻止时:
• 加载或存储数据的指令是无检查的(Unchecked)。
• 加载或存储分配标签的指令将分配标签视为 RAZ/WI。
• 将逻辑地址标签插入地址的指令,用于生成逻辑地址标签的分配标签被视为 0。
• 从缓存中无效分配标签的缓存维护指令的行为类似于对分配标签执行清除并无效操作。
• 在 EL1 和 EL2 层使用 GCR_EL1, RGSR_EL1, TFSR_EL1, TFSR_EL2 或 TFSRE0_EL1 且未定义或未陷入到较低异常等级的 MRS 和 MSR 指令,会被陷入到 EL3。
• 在 EL2 层使用 TFSR_EL12 且未定义的 MRS 和 MSR 指令,会被陷入到 EL3。
| ATA | 含义 |
|-----|------|
| 0b0 | 访问被阻止。 |
| 0b1 | 访问不被阻止。 |
该字段允许缓存在 TLB 中。
该字段复位为架构上未知的值。
否则:
保留,RES0。
**EnSCXT,位 [25]**
当实现了 ARMv8.0-CSV2 时:
使能对 SCXTNUM_EL2, SCXTNUM_EL1 和 SCXTNUM_EL0 寄存器的访问。定义的值如下:
| EnSCXT | 含义 |
|--------|------|
| 0b0 | 此机制禁用 EL2、EL1 和 EL0 对 SCXTNUM_EL0 的访问,EL2 和 EL1 对 SCXTNUM_EL1 的访问,EL2 对 SCXTNUM_EL2 的访问,导致异常陷入 EL3,并且这些寄存器的值被视为 0。 |
| 0b1 | 此控制不会导致对 SCXTNUM_EL0, SCXTNUM_EL1, SCXTNUM_EL2 的访问被陷入。 |
该字段复位为架构上未知的值。
否则:
保留,RES0。
**位 [24:22]**
保留,RES0。
**FIEN,位 [21]**
当实现了 ARMv8.4-RAS 时:
故障注入使能。将从 EL1 和 EL2 对 RAS ERX* 寄存器 ERXPFGCDN_EL1, ERXPFGCTL_EL1 和 ERXPFGF_EL1 的访问陷入到 EL3,使用 EC 综合征值 0x18 报告。
| FIEN | 含义 |
|------|------|
| 0b0 | 从 EL1 和 EL2 对指定寄存器的访问会产生陷入异常到 EL3。 |
| 0b1 | 此控制不会导致任何指令被陷入。 |
如果未实现 EL3,则 SCR_EL3.FIEN 的有效值为 0b1。
如果 ERRIDR_EL1.NUM 为零(表示未实现错误记录),或者没有实现 RAS 公共故障注入模型扩展的节点所拥有的、可通过系统寄存器访问的错误记录,则该位可能为 RES0。
该字段复位为架构上未知的值。
否则:
保留,RES0。
**NMEA,位 [20]**
当实现了 ARMv8.4-DFE 时:
不可屏蔽外部中止。当 SCR_EL3.EA == 1 时,控制 PSTATE.A 是否在 EL3 层屏蔽 SError 中断。
| NMEA | 含义 |
|------|------|
| 0b0 | 如果 SCR_EL3.EA == 1,当 PSTATE.A == 1 时,断言的 SError 中断不会在 EL3 层被接收。 |
| 0b1 | 如果 SCR_EL3.EA == 1,无论 PSTATE.A 的值如何,断言的 SError 中断都会在 EL3 层被接收。 |
当 SCR_EL3.EA == 0 时:
• 无论 PSTATE.A 的值如何,断言的 SError 中断都不会在 EL3 层被接收,并且该字段被忽略,其有效值为 0。
该字段复位为 0。
否则:
保留,RES0。
**EASE,位 [19]**
当实现了 ARMv8.4-DFE 时:
外部中止到 SError 中断向量。
| EASE | 含义 |
|------|------|
| 0b0 | 在 EL3 层接收的同步外部中止异常被路由到 VBAR_EL3 对应的同步异常向量偏移处。 |
| 0b1 | 在 EL3 层接收的同步外部中止异常被路由到 VBAR_EL3 对应的 SError 中断向量偏移处。 |
该字段复位为 0。
否则:
保留,RES0。
**EEL2,位 [18]**
当实现了 ARMv8.4-SecEL2 时:
安全 EL2 使能。
| EEL2 | 含义 |
|------|------|
| 0b0 | 禁用所有与安全 EL2 相关的行为。所有由 ARMv8.4-SecEL2 定义的寄存器(包括定时器寄存器)都是未定义的,并且这些定时器被禁用。 |
| 0b1 | 使能所有与安全 EL2 相关的行为。 |
当该位的值为 1 时:
• 当 SCR_EL3.NS == 0 时,除读写寄存器外,SCR_EL3.RW 位被视为 1。
• 如果安全 EL1 使用 AArch32,则在安全 EL1 中执行的以下任何操作都会被陷入到安全 EL2,使用 ESR_EL2.EC==0x3 的 EC 值:
◦ 读或写 SCR。
◦ 读或写 NSACR。
◦ 读或写 MVBAR。
◦ 读或写 SDCR。
◦ 执行 ATS12NSO** 指令。
• 如果安全 EL1 使用 AArch32,则在安全 EL1 中执行的以下任何操作都会被陷入到安全 EL2,使用 ESR_EL2.EC==0x0 的 EC 值:
◦ 执行使用 R13_mon 的 SRS 指令。
◦ 执行会访问 SPSR_mon, R13_mon 或 R14_mon 的 MRS(银行寄存器)或 MSR(银行寄存器)指令。
**注意**
如果 SCR_EL3.EEL2 的有效值为 0,则在安全 EL1 中使用 AArch32 执行的这些操作会被陷入到 EL3。
在未实现 EL3 但实现了 EL2 的纯安全实现中,行为如同 SCR_EL3.EEL2 == 1。
该位允许缓存在 TLB 中。
该字段复位为架构上未知的值。
否则:
保留,RES0。
**API,位 [17]**
当实现了 ARMv8.4-SecEL2 且实现了 ARMv8.3-PAuth 时:
控制与指针认证相关的以下指令的使用。陷阱使用 EC 综合征值 0x09 报告:
• PACGA,始终使能。
• AUTDA, AUTDB, AUTDZA, AUTDZB, AUTIA, AUTIA1716, AUTIASP, AUTIAZ, AUTIB, AUTIB1716, AUTIBSP, AUTIBZ, AUTIZA, AUTIZB, PACDA, PACDB, PACDZA, PACDZB, PACIA, PACIA1716, PACIASP, PACIAZ, PACIB, PACIB1716, PACIBSP, PACIBZ, PACIZA, PACIZB, RETAA, RETAB, BRAA, BRAB, BLRAA, BLRAB, BRAAZ, BRABZ, BLRAAZ, BLRABZ, ERETAA, ERETAB, LDRAA 和 LDRAB,当:
◦ 在 EL0 层,当 HCR_EL2.TGE==0 或 HCR_EL2.E2H==0,且关联的 SCTLR_EL1.En<N><M> == 1 时。
◦ 在 EL0 层,当 HCR_EL2.TGE==1 且 HCR_EL2.E2H==1,且关联的 SCTLR_EL2.En<N><M> == 1 时。
◦ 在 EL1 层,当关联的 SCTLR_EL1.En<N><M> == 1 时。
◦ 在 EL2 层,当关联的 SCTLR_EL2.En<N><M> == 1 时。
| API | 含义 |
|-----|------|
| 0b0 | 当指令使能时,除 EL3 外的任何异常等级中使用任何与指针认证相关的指令,除非由于 HCR_EL2.API 位而被陷入到 EL2,否则将被陷入到 EL3。 |
| 0b1 | 此控制不会导致任何指令被陷入。 |
仅当为该指令使能了指针认证时,指令才会被陷入。更多信息请参见 Arm® 架构参考手册 Armv8(针对 Armv8-A 架构配置文件)中的“指针认证的系统寄存器控制”。
**注意**
如果实现了 ARMv8.3-PAuth 但未实现 EL3,则系统的行为如同该位为 1。
该字段复位为架构上未知的值。
当未实现 ARMv8.4-SecEL2 但实现了 ARMv8.3-PAuth 时:
控制与指针认证相关的指令的使用:
• PACGA。
• AUTDA, AUTDB, AUTDZA, AUTDZB, AUTIA, AUTIA1716, AUTIASP, AUTIAZ, AUTIB, AUTIB1716, AUTIBSP, AUTIBZ, AUTIZA, AUTIZB, PACDA, PACDB, PACDZA, PACDZB, PACIA, PACIA1716, PACIASP, PACIAZ, PACIB, PACIB1716, PACIBSP, PACIBZ, PACIZA, PACIZ, RETAA, RETAB, BRAA, BRAB, BLRAA, BLRAB, BRAAZ, BRABZ, BLRAAZ, BLRABZ, ERETAA, ERETAB, LDRAA 和 LDRAB,当:
◦ 在非安全 EL0 层,当 HCR_EL2.TGE==0 或 HCR_EL2.E2H==0,且关联的 SCTLR_EL1.En<N><M> == 1 时。
◦ 在非安全 EL0 层,当 HCR_EL2.TGE==1 且 HCR_EL2.E2H==1,且关联的 SCTLR_EL2.En<N><M> == 1 时。
◦ 在安全 EL0 层,当关联的 SCTLR_EL2.En<N><M> == 1 时。
◦ 在安全或非安全 EL1 层,当关联的 SCTLR_EL1.En<N><M> == 1 时。
◦ 在 EL2 层,当关联的 SCTLR_EL2.En<N><M> == 1 时。
| API | 含义 |
|-----|------|
| 0b0 | 当指令使能时,除 EL3 外的任何异常等级中使用任何与指针认证相关的指令,除非由于 HCR_EL2.API 位而被陷入到 EL2,否则将被陷入到 EL3。 |
| 0b1 | 此控制不会导致任何指令被陷入。 |
**注意**
如果实现了 ARMv8.3-PAuth 但未实现 EL3,则系统的行为如同该位为 1。
该字段复位为架构上未知的值。
否则:
保留,RES0。
**APK,位 [16]**
当实现了 ARMv8.3-PAuth 时:
陷入保存指针认证“密钥”值的寄存器。将从 EL1 或 EL2 对以下寄存器的访问陷入到 EL3,使用 EC 综合征值 0x18,除非由于 HCR_EL2.APK 位或其他陷阱而被陷入到 EL2:
• APIAKeyLo_EL1, APIAKeyHi_EL1, APIBKeyLo_EL1, APIBKeyHi_EL1。
• APDAKeyLo_EL1, APDAKeyHi_EL1, APDBKeyLo_EL1, APDBKeyHi_EL1。
• APGAKeyLo_EL1, APGAKeyHi_EL1。
| APK | 含义 |
|-----|------|
| 0b0 | 从 EL1 或 EL2 对保存指针认证“密钥”值的寄存器的访问,除非由于 HCR_EL2.APK 位或其他陷阱而被陷入到 EL2,否则将被陷入到 EL3。 |
| 0b1 | 此控制不会导致任何指令被陷入。 |
更多信息请参见 Arm® 架构参考手册 Armv8(针对 Armv8-A 架构配置文件)中的“指针认证的系统寄存器控制”。
**注意**
如果实现了 ARMv8.3-PAuth 但未实现 EL3,则系统的行为如同该位为 1。
该字段复位为架构上未知的值。
否则:
保留,RES0。
**TERR,位 [15]**
当实现了 RAS 时:
陷入错误记录访问。将从 EL1 和 EL2 对 RAS ERR 和 RAS ERX 寄存器的访问陷入到 EL3,具体如下:
• 如果 EL1 使用 AArch64,则 ERRIDR_EL1, ERRSELR_EL1, ERXADDR_EL1, ERXCTLR_EL1, ERXFR_EL1, ERXMISC0_EL1, ERXMISC1_EL1, ERXSTATUS_EL1 被陷入,并使用 EC 综合征值 0x18 报告。
• 如果实现了 ARMv8.4-RAS,则 ERXMISC2_EL1 和 ERXMISC3_EL1 被陷入,并使用 EC 综合征值 0x18 报告。
• 如果 EL1 使用 AArch32,则通过 MCR 或 MRC 对以下寄存器的访问使用 EC 综合征值 0x03 报告,通过 MCRR 或 MRRC 的访问使用 EC 综合征值 0x04 报告:
◦ ERRIDR, ERRSELR, ERXADDR, ERXADDR2, ERXCTLR, ERXCTLR2, ERXFR, ERXFR2, ERXMISC0, ERXMISC1, ERXMISC2, ERXMISC3, ERXSTATUS。
• 如果实现了 ARMv8.4-RAS,则通过 MCR 或 MRC 对以下寄存器的访问使用 EC 综合征值 0x03 报告,通过 MCRR 或 MRRC 的访问使用 EC 综合征值 0x04 报告:
◦ ERXMISC4, ERXMISC5, ERXMISC6, ERXMISC7。
| TERR | 含义 |
|------|------|
| 0b0 | 此控制不会导致任何指令被陷入。 |
| 0b1 | 从 EL1 和 EL2 对指定寄存器的访问会产生陷入异常到 EL3。 |
该字段复位为架构上未知的值。
否则:
保留,RES0。
**TLOR,位 [14]**
当实现了 ARMv8.1-LOR 时:
陷入 LOR 寄存器。将从 EL1 和 EL2 对 LORSA_EL1, LOREA_EL1, LORN_EL1, LORC_EL1 和 LORID_EL1 寄存器的访问陷入到 EL3,除非该访问已经被陷入到 EL2。
| TLOR | 含义 |
|------|------|
| 0b0 | 此控制不会导致任何指令被陷入。 |
| 0b1 | EL1 和 EL2 对 LOR 寄存器的非未定义访问被陷入到 EL3,除非被 HCR_EL2.TLOR 陷入。 |
该字段复位为架构上未知的值。
否则:
保留,RES0。
**TWE,位 [13]**
将 EL2、EL1 和 EL0 执行 WFE 指令的行为陷入到 EL3,来自两种安全状态和两种执行状态,使用 EC 综合征值 0x01 报告。
| TWE | 含义 |
|-----|------|
| 0b0 | 此控制不会导致任何指令被陷入。 |
| 0b1 | 在任何低于 EL3 的异常等级上尝试执行 WFE 指令,如果该指令本来会导致 PE 进入低功耗状态,并且未被 SCTLR.nTWE, HCR.TWE, SCTLR_EL1.nTWE, SCTLR_EL2.nTWE 或 HCR_EL2.TWE 陷入,则会被陷入到 EL3。 |
在 AArch32 状态下,仅当条件 WFE 指令通过其条件码检查时,尝试执行该指令才会被陷入。
**注意**
由于 WFE 或 WFI 可以在任何时候完成,即使没有唤醒事件,因此不保证一定会触发 WFE 或 WFI 的陷阱,即使 WFE 或 WFI 在没有唤醒事件时执行也是如此。唯一能保证的是,如果指令在没有唤醒事件的情况下无法在有限时间内完成,则会触发陷阱。
关于 WFE 指令何时会导致 PE 进入低功耗状态的更多信息,请参见 Arm® 架构参考手册 Armv8(针对 Armv8-A 架构配置文件)中的“等待事件机制和发送事件”。
该字段复位为架构上未知的值。
**TWI,位 [12]**
将 EL2、EL1 和 EL0 执行 WFI 指令的行为陷入到 EL3,来自两种安全状态和两种执行状态,使用 EC 综合征值 0x01 报告。
| TWI | 含义 |
|-----|------|
| 0b0 | 此控制不会导致任何指令被陷入。 |
| 0b1 | 在任何低于 EL3 的异常等级上尝试执行 WFI 指令,如果该指令本来会导致 PE 进入低功耗状态,并且未被 SCTLR.nTWI, HCR.TWI, SCTLR_EL1.nTWI, SCTLR_EL2.nTWI 或 HCR_EL2.TWI 陷入,则会被陷入到 EL3。 |
在 AArch32 状态下,仅当条件 WFI 指令通过其条件码检查时,尝试执行该指令才会被陷入。
**注意**
由于 WFE 或 WFI 可以在任何时候完成,即使没有唤醒事件,因此不保证一定会触发 WFE 或 WFI 的陷阱,即使 WFE 或 WFI 在没有唤醒事件时执行也是如此。唯一能保证的是,如果指令在没有唤醒事件的情况下无法在有限时间内完成,则会触发陷阱。
关于 WFI 指令何时会导致 PE 进入低功耗状态的更多信息,请参见 Arm® 架构参考手册 Armv8(针对 Armv8-A 架构配置文件)中的“等待中断”。
该字段复位为架构上未知的值。
**ST,位 [11]**
将安全 EL1 对计数器定时器物理安全定时器寄存器的访问(仅限 AArch64 状态)陷入到 EL3,使用 EC 综合征值 0x18 报告。
| ST | 含义 |
|----|------|
| 0b0 | 当安全 EL2 被禁用时,使用 AArch64 的安全 EL1 对 CNTPS_TVAL_EL1, CNTPS_CTL_EL1 和 CNTPS_CVAL_EL1 的访问被陷入到 EL3。如果安全 EL2 被使能,则行为如同该字段的值为 0b1。 |
| 0b1 | 此控制不会导致任何指令被陷入。 |
**注意**
在 EL3 层,对计数器定时器物理安全定时器寄存器的访问始终使能。这些寄存器在 EL0 层不可访问。
该字段复位为架构上未知的值。
**RW,位 [10]**
较低异常等级的执行状态控制。
| RW | 含义 |
|----|------|
| 0b0 | 所有较低等级均为 AArch32。 |
| 0b1 | 下一个较低等级为 AArch64。 |
如果 EL2 存在:
• EL2 是 AArch64。
• EL2 控制 EL1 和 EL0 的行为。
如果 EL2 不存在:
• EL1 是 AArch64。
• EL0 由在 EL0 执行时当前进程状态中描述的执行状态决定。
如果实现中 EL2 不支持 AArch32 状态,并且 EL1 也不支持 AArch32 状态,则该位为 RAO/WI。
如果实现中 EL1 支持 AArch32 状态,SCR_EL3.NS == 1,并且 EL2 不支持 AArch32 状态,则该位的有效值为 1。
如果实现中 EL1 支持 AArch32 状态,实现了 ARMv8.4-SecEL2,并且 SCR_EL3.{EEL2, NS} == {1, 0},则该位的有效值为 1。
该位允许缓存在 TLB 中。
该字段复位为架构上未知的值。
**SIF,位 [9]**
当实现了 ARMv8.4-SecEL2 时:
安全指令获取。当 PE 处于安全状态时,该位禁止从第一级转换表中标记为非安全的内存中获取指令。该位的可能值为:
| SIF | 含义 |
|-----|------|
| 0b0 | 允许安全状态从第一级转换表中标记为非安全的内存中获取指令。 |
| 0b1 | 禁止安全状态从第一级转换表中标记为非安全的内存中获取指令。 |
该位允许缓存在 TLB 中。
该字段复位为架构上未知的值。
否则:
安全指令获取。当 PE 处于安全状态时,该位禁止从非安全内存中获取指令。
| SIF | 含义 |
|-----|------|
| 0b0 | 允许安全状态从非安全内存中获取指令。 |
| 0b1 | 禁止安全状态从非安全内存中获取指令。 |
该位允许缓存在 TLB 中。
该字段复位为架构上未知的值。
**HCE,位 [8]**
Hypervisor 调用指令使能。在 EL3 层使能 HVC 指令,并且如果 EL2 在当前安全状态下被使能,则在 EL2 和 EL1 层也使能,两种执行状态均适用,使用 EC 综合征值 0x00 报告。
| HCE | 含义 |
|-----|------|
| 0b0 | HVC 指令是未定义的。 |
| 0b1 | HVC 指令在 EL3、EL2 和 EL1 层被使能。 |
**注意**
HVC 指令在 EL0 层总是未定义的,并且如果安全 EL2 被禁用,在安全 EL1 层也是未定义的。任何由此产生的异常都从当前异常等级被路由到当前异常等级。
如果未实现 EL2,则该位为 RES0。
该字段复位为架构上未知的值。
**SMD,位 [7]**
安全监控调用禁用。在 EL1 及以上等级禁用 SMC 指令,来自两种安全状态和两种执行状态,使用 EC 综合征值 0x00 报告。
| SMD | 含义 |
|-----|------|
| 0b0 | SMC 指令在 EL3、EL2 和 EL1 层被使能。 |
| 0b1 | SMC 指令是未定义的。 |
**注意**
SMC 指令在 EL0 层总是未定义的。任何由此产生的异常都从当前异常等级被路由到当前异常等级。
如果 HCR_EL2.TSC 或 HCR.TSC 将在 EL1 层尝试执行的 SMC 指令陷入到 EL2,则该陷阱优先于此禁用。
该字段复位为架构上未知的值。
**位 [6]**
保留,RES0。
**位 [5:4]**
保留,RES1。
**EA,位 [3]**
外部中止和 SError 中断路由。
| EA | 含义 |
|----|------|
| 0b0 | 当在低于 EL3 的异常等级执行时,外部中止和 SError 中断不会被路由到 EL3。此外,当在 EL3 执行时:• SError 中断不会被接收。• 外部中止会被路由到 EL3。 |
| 0b1 | 当在任何异常等级执行时,外部中止和 SError 中断都会被路由到 EL3。 |
更多信息请参见 Arm® 架构参考手册 Armv8(针对 Armv8-A 架构配置文件)第 D1 节(AArch64 系统级编程模型)中的“异步异常路由”。
该字段复位为架构上未知的值。
**FIQ,位 [2]**
物理 FIQ 路由。
| FIQ | 含义 |
|-----|------|
| 0b0 | 当在低于 EL3 的异常等级执行时,物理 FIQ 中断不会被路由到 EL3。当在 EL3 执行时,物理 FIQ 中断不会被接收。 |
| 0b1 | 当在任何异常等级执行时,物理 FIQ 中断都会被路由到 EL3。 |
更多信息请参见 Arm® 架构参考手册 Armv8(针对 Armv8-A 架构配置文件)第 D1 节中的“异步异常路由”。
该字段复位为架构上未知的值。
**IRQ,位 [1]**
物理 IRQ 路由。
| IRQ | 含义 |
|-----|------|
| 0b0 | 当在低于 EL3 的异常等级执行时,物理 IRQ 中断不会被路由到 EL3。当在 EL3 执行时,物理 IRQ 中断不会被接收。 |
| 0b1 | 当在任何异常等级执行时,物理 IRQ 中断都会被路由到 EL3。 |
更多信息请参见 Arm® 架构参考手册 Armv8(针对 Armv8-A 架构配置文件)第 D1 节中的“异步异常路由”。
该字段复位为架构上未知的值。
**NS,位 [0]**
非安全位。
| NS | 含义 |
|----|------|
| 0b0 | 指示 EL0 和 EL1 处于安全状态。 |
| 0b1 | 指示低于 EL3 的异常等级处于非安全状态,因此来自这些异常等级的内存访问不能访问安全内存。 |
当 SCR_EL3.{EEL2, NS} == {1, 0} 时,EL2 使用 AArch64 并处于安全状态。
该字段复位为架构上未知的值。
---
**访问 SCR_EL3**
对此寄存器的访问使用以下编码:
MRS <Xt>, SCR_EL3
| op0 | op1 | CRn | CRm | op2 |
|-----|-----|-----|-----|-----|
| 0b11 | 0b110 | 0b0001 | 0b0001 | 0b000 |
如果 PSTATE.EL == EL0,则 未定义;
否则如果 PSTATE.EL == EL1,则 未定义;
否则如果 PSTATE.EL == EL2,则 未定义;
否则如果 PSTATE.EL == EL3,则 返回 SCR_EL3;
MSR SCR_EL3, <Xt>
| op0 | op1 | CRn | CRm | op2 |
|-----|-----|-----|-----|-----|
| 0b11 | 0b110 | 0b0001 | 0b0001 | 0b000 |
如果 PSTATE.EL == EL0,则 未定义;
否则如果 PSTATE.EL == EL1,则 未定义;
否则如果 PSTATE.EL == EL2,则 未定义;
否则如果 PSTATE.EL == EL3,则 SCR_EL3 = X[t];
SCR_EL3,安全配置寄存器
liuluyang5302026-04-03 13:23
相关推荐
小陈工2 小时前
Python Web开发入门(八):用户认证系统实现,给你的应用加上安全锁小五传输2 小时前
汽车供应商协同平台如何重塑主机厂与供应商的数字化纽带?清水白石0082 小时前
《Python 静态检查链:格式化、Lint、类型检查、安全扫描全攻略——CI 阻断策略与团队平衡实践》互联网科技看点2 小时前
海康威视亮相安全应急产业专场,共启生命线新篇章一名优秀的码农2 小时前
vulhub系列-55-napping-1.0.1(超详细)OPHKVPS3 小时前
Anthropic CMS配置错误泄露新旗舰模型:Claude Mythos(Capybara)即将到来正经教主3 小时前
安全养虾:[windows]Docker部署OpenClaw详细过程记录csdn_aspnet4 小时前
Chrome安全机制深度解析,从CSP、Sandbox到Site Isolation,拆解浏览器安全防护体系Meme Buoy4 小时前
9.3端口扫描-安全体系-网络安全技术和协议