SCTLR_EL1,系统控制寄存器(EL1)

张开发
2026/6/1 11:29:43 15 分钟阅读
SCTLR_EL1,系统控制寄存器(EL1)
SCTLR_EL1 的特性如下用途在 EL1 和 EL0 异常级别下提供系统顶层控制包括存储系统控制。配置AArch64 系统寄存器 SCTLR_EL1 的位 [31:0] 在架构上映射到 AArch32 系统寄存器 SCTLR [31:0]。本寄存器的部分或全部可读写RW字段具有定义好的复位值。仅当处理引擎PE复位后进入 AArch64 架构的 EL1 模式时这些复位值才有效。否则本寄存器中的可写字段复位为架构规定的 ** 未知UNKNOWN** 值。属性SCTLR_EL1 是一个 64 位寄存器。字段说明SCTLR_EL1 位分配如下63 62 61 60 59 58 57 56 55 54 53 52 51 50 RES0 49 48 47 46 TWEDEL 45 TWEDEn 44 DSSBS 43 ATA 42 ATA0 41 40 TCF 39 38 TCF0 37 ITFSB 36 BT1 35 BT0 34 33 32 RES0 31 EnIA 30 EnIB 29 LSMAOE 28 nTLSMD 27 EnDA 26 UCI 25 EE 24 E0E 23 SPAN 22 EIS 21 IESB 20 TSCXT 19 WXN 18 nTWE 17 RES0 16 nTWI 15 UCT 14 DZE 13 I 12 EOS 11 EnRCTX 10 UMA 9 SED 8 ITD 7 nAA 6 CP15BEN 5 SA0 4 SA 3 C 2 A 1 M 0 EnDB位 [63:50]保留必须写 0RES0。TWEDEL位 [49:46]实现 ARMv8.6-TWED 时有效WFE 陷阱延迟。4 位无符号数。当 SCTLR_EL1.TWEDEn 1 时对由 SCTLR_EL1.nTWE 触发的 WFE 指令陷阱编码其最小触发延迟为2^(TWEDEL 8)个周期。在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。其他情况保留RES0。TWEDEn位 [45]实现 ARMv8.6-TWED 时有效WFE 陷阱延迟使能。对由 SCTLR_EL1.nTWE 触发的 WFE 指令陷阱启用可配置的延迟陷阱功能。0b0WFE 陷阱延迟由实现定义0b1WFE 陷阱延迟至少为 SCTLR_EL1.TWEDEL 定义的周期数在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。其他情况保留RES0。DSSBS位 [44]实现 ARMv8.0-SSBS 时有效异常进入时 PSTATE.SSBS 的默认值。0b0进入 EL1 异常时PSTATE.SSBS 置 00b1进入 EL1 异常时PSTATE.SSBS 置 1在 PE 复位进入 EL1 的系统中该字段复位为实现定义值。其他情况保留RES0。ATA位 [43]实现 ARMv8.5-MemTag内存标签扩展时有效EL1 级分配标签访问控制。当 SCR_EL3.ATA1 且 HCR_EL2.ATA1 时控制 EL1 对分配标签的访问。禁止访问分配标签时加载 / 存储数据指令为非检查模式加载 / 存储分配标签指令将其视为读零 / 忽略写RAZ/WI向地址插入逻辑地址标签的指令将生成标签所用的分配标签视为 0使缓存分配标签失效的缓存维护指令行为等价于清理并失效分配标签0b0禁止访问分配标签0b1允许访问分配标签该位可被 TLB 缓存。在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。其他情况保留RES0。ATA0位 [42]实现 ARMv8.5-MemTag 时有效EL0 级分配标签访问控制。当 SCR_EL3.ATA1、HCR_EL2.ATA1 且 HCR_EL2.{E2H,TGE} ≠ {1,1} 时控制 EL0 对分配标签的访问。限制规则与 ATA 一致。0b0禁止 EL0 访问分配标签0b1允许 EL0 访问分配标签该字段可被 TLB 缓存。注软件可在上下文切换时修改该控制位。在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。其他情况保留RES0。TCF位 [41:40]实现 ARMv8.5-MemTag 时有效EL1 级标签检查失败处理。控制 EL1 中加载 / 存储导致标签检查失败的行为。0b00标签检查失败对 PE 无影响0b01标签检查失败触发同步异常0b10标签检查失败异步累积0b11保留在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。其他情况保留RES0。TCF0位 [39:38]实现 ARMv8.5-MemTag 时有效EL0 级标签检查失败处理。当 HCR_EL2.{E2H,TGE} ≠ {1,1} 时控制 EL0 加载 / 存储标签检查失败行为。取值含义同 TCF。注软件可在上下文切换时修改该控制位。在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。其他情况保留RES0。ITFSB位 [37]实现 ARMv8.5-MemTag 时有效当 EL0/EL1 加载 / 存储的标签检查失败不产生同步异常时控制标签检查失败向 TFSRE0_EL1 和 TFSR_EL1 的自动同步。0b0进入 EL1 时不同步标签检查失败状态0b1进入 EL1 时同步标签检查失败状态在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。其他情况保留RES0。BT1位 [36]实现 ARMv8.5-BTI分支目标识别时有效EL1 级 PAC 分支类型兼容性。0b0EL1 执行时PACIASP / PACIBSP 与 PSTATE.BTYPE 0b11 兼容0b1EL1 执行时PACIASP / PACIBSP 与 PSTATE.BTYPE 0b11 不兼容在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。其他情况保留RES0。BT0位 [35]实现 ARMv8.5-BTI 时有效EL0 级 PAC 分支类型兼容性。0b0EL0 执行时PACIASP / PACIBSP 与 PSTATE.BTYPE 0b11 兼容0b1EL0 执行时PACIASP / PACIBSP 与 PSTATE.BTYPE 0b11 不兼容当 HCR_EL2.E2H 1 且 HCR_EL2.TGE 1 时该位对 EL0 执行无影响。在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。其他情况保留RES0。位 [34:32]保留RES0。EnIA位 [31]实现 ARMv8.3-PAuth指针认证时有效在 EL10 地址转换域中控制 ** 指令地址指针认证APIAKey_EL1 密钥** 的使能。0b0禁用指令地址指针认证0b1启用指令地址指针认证注该字段控制 AddPACIA / AuthIA 伪代码函数。为 1 时生效为 0 时为空操作NOP。在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。其他情况保留RES0。EnIB位 [30]实现 ARMv8.3-PAuth 时有效在 EL10 转换域中控制 ** 指令地址指针认证APIBKey_EL1 密钥** 使能。含义与 EnIA 类似密钥不同。在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。其他情况保留RES0。LSMAOE位 [29]实现 ARMv8.2-LSMAOC 时有效多加载 / 多存储指令原子性与顺序性使能。0b0EL0 下 A32/T32 多加载 / 多存储可在访存序列中被中断且不要求访存有序0b1EL0 下 A32/T32 多加载 / 多存储的顺序与中断行为遵循 Armv8.0 定义该位可被 TLB 缓存。实现 ARMv8.1-VHE 且 HCR_EL2.{E2H,TGE}{1,1} 时对 EL0 无影响。在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。其他情况保留必须写 1RES1。nTLSMD位 [28]实现 ARMv8.2-LSMAOC 时有效不陷阱多加载 / 多存储至设备 nGRE/nGnRE/nGnRnE 内存。0b0EL0 下 A32/T32 多加载 / 多存储访问第一阶段标记为设备内存时触发陷阱并产生对齐错误0b1不触发上述陷阱该位可被 TLB 缓存。VHE 场景下对 EL0 无影响。在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。其他情况保留RES1。EnDA位 [27]实现 ARMv8.3-PAuth 时有效在 EL10 转换域中控制 ** 数据地址指针认证APDAKey_EL1 密钥** 使能。0b0禁用数据地址指针认证0b1启用数据地址指针认证注控制 AddPACDA / AuthDA 函数为 1 生效为 0 为空操作。在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。其他情况保留RES0。UCI位 [26]陷阱 EL0 缓存维护指令。仅 AArch64 态陷阱至 EL1 或 EL2EC 异常码 0x18。覆盖指令DC CVAU、DC CIVAC、DC CVAC、DC CVAP、IC IVAU 等随扩展特性增加。0b0EL0 AArch64 执行指定指令将被陷阱0b1不由此控制位触发陷阱VHE 特定场景下对 EL0 无影响。在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。EE位 [25]EL1 数据访问端序及 EL10 第一阶段页表遍历端序。0b0小端0b1大端该位可被 TLB 缓存。VHE 特定场景下对 PE 无影响。在 PE 复位进入 EL1 的系统中该字段复位为实现定义值。E0E位 [24]EL0 数据访问端序。0b0EL0 小端0b1EL0 大端对 EL1 执行的 LDTR/STTR 系列指令端序无影响。VHE 特定场景下对 EL0 无影响。在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。SPAN位 [23]实现 ARMv8.1-PAN特权访问永不时有效进入 EL1 异常时设置 PAN。0b0进入 EL1 异常时 PSTATE.PAN 置 10b1进入 EL1 异常时保持 PSTATE.PAN 不变VHE 特定场景下对 EL0 无影响。在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。其他情况保留RES1。EIS位 [22]实现 ARMv8.5-CSEH 时有效异常入口为上下文同步事件。0b0进入 EL1 异常不是上下文同步事件0b1进入 EL1 异常是上下文同步事件VHE 特定场景下对 EL0 无影响。在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。其他情况保留RES1。IESB位 [21]实现 ARMv8.2-IESB 时有效隐式错误同步事件使能。0b0禁用0b1在每次进入 EL1 异常时、EL1 执行每条 ERET 前插入隐式错误同步事件调试状态下行为不可预测。在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。其他情况保留RES0。TSCXT位 [20]实现 ARMv8.0-CSV2 时有效陷阱 EL0 AArch64 访问 SCXTNUM_EL0 寄存器。0b0不禁用 EL0 访问 SCXTNUM_EL00b1禁用 EL0 访问触发异常SCXTNUM_EL0 视为 0VHE 特定场景下对 EL0 无影响。在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。其他情况保留RES1。WXN位 [19]写权限隐含不可执行XN。对 EL10 转换域强制所有可写内存区域视为不可执行。0b0对内存访问权限无影响0b1EL10 中可写区域强制为 XN仅在 SCTLR_EL1.M1 时有效。该位可被 TLB 缓存。VHE 特定场景下对 PE 无影响。在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。nTWE位 [18]陷阱 EL0 WFE 指令两种执行状态均有效EC 异常码 0x01。0b0EL0 执行 WFE 且将进入低功耗时触发陷阱0b1不由此控制位触发陷阱AArch32 下仅条件满足的 WFE 会被陷阱。注WFE/WFI 可随时完成陷阱不保证一定触发仅保证无唤醒事件且无法有限时间完成时触发陷阱。VHE 特定场景下对 EL0 无影响。在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。位 [17]保留RES0。nTWI位 [16]陷阱 EL0 WFI 指令两种执行状态均有效EC 异常码 0x01。含义与 nTWE 类似针对 WFI。VHE 特定场景下对 EL0 无影响。在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。UCT位 [15]陷阱 EL0 AArch64 访问 CTR_EL0 寄存器EC 0x18。0b0EL0 访问 CTR_EL0 被陷阱0b1不触发陷阱VHE 特定场景下对 EL0 无影响。在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。DZE位 [14]陷阱 EL0 AArch64 执行 DC ZVA 指令EC 0x18。实现 MemTag 时还覆盖 DC GVA / DC GZVA。0b0EL0 执行相关指令被陷阱EL0 读 DCZID_EL0.DZP 返回 10b1不触发陷阱VHE 特定场景下对 EL0 无影响。在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。EnDB位 [13]实现 ARMv8.3-PAuth 时有效在 EL10 转换域中控制 ** 数据地址指针认证APDBKey_EL1 密钥** 使能。0b0禁用0b1启用注控制 AddPACDB / AuthDB 函数。在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。其他情况保留RES0。I位 [12]EL0/EL1 指令访问缓存性控制。0b0EL0/EL1 对普通内存的指令访问为各级非缓存M0 时为普通、外共享、内外非缓存0b1不对指令访问缓存性做额外控制M0 时为普通、外共享、内外写直通HCR_EL2.DC1 时指令访问始终为缓存。VHE 特定场景下对 PE 无影响。复位值为 0。EOS位 [11]实现 ARMv8.5-CSEH 时有效异常返回为上下文同步事件。0b0EL1 异常返回不是上下文同步事件0b1EL1 异常返回是上下文同步事件VHE 特定场景下对 EL0 无影响。在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。其他情况保留RES1。EnRCTX位 [10]实现 ARMv8.0-PredInv 时有效使能 EL0 访问 AArch32/AArch64 预测上下文指令。0b0禁用并陷阱至 EL1/EL20b1允许 EL0 访问VHE 特定场景下对 EL0 无影响。在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。其他情况保留RES0。UMA位 [9]用户模式屏蔽访问控制。陷阱 EL0 AArch64 下访问 PSTATE.{D,A,I,F} 屏蔽位的 MSR/MRS 指令EC 0x18。0b0EL0 访问 DAIF 相关指令被陷阱0b1不触发陷阱VHE 特定场景下对 EL0 无影响。在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。SED位 [8]禁用 SETEND 指令。禁止 EL0 AArch32 执行 SETEND。0b0允许 EL0 AArch32 执行 SETEND0b1SETEND 为未定义指令触发异常不支持混合端序或 EL0 不支持 AArch32 时为 RES1。VHE 特定场景下对 EL0 无影响。在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。ITD位 [7]IT 指令禁用。限制 EL0 AArch32 下 IT 指令的部分用法。0b0全部 IT 功能启用0b1特定 IT 编码及后续指令为未定义并触发异常EL0 不支持 AArch32 时为 RES1。VHE 特定场景下对 EL0 无影响。在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。nAA位 [6]实现 ARMv8.4-LSE 时有效非对齐访问控制。在特定条件下控制 EL1/EL0 对齐错误产生。0b0LDAPR、LDAR、STLR 等一系列原子指令访问跨 16 字节边界时触发对齐错误0b1不由此位触发对齐错误VHE 特定场景下对 EL0 无影响。在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。其他情况保留RES0。CP15BEN位 [5]系统指令内存屏障使能。允许 EL0 AArch32 访问 CP15 编码的 DMB/DSB/ISB。0b0EL0 AArch32 执行 CP15DMB/CP15DSB/CP15ISB 为未定义并异常0b1允许执行EL0 不支持 AArch32 时为 RES0。VHE 特定场景下对 EL0 无影响。在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。SA0位 [4]EL0 栈指针对齐检查使能。置 1 时EL0 以 SP 为基址加载 / 存储若 SP 未 16 字节对齐则触发对齐错误异常。VHE 特定场景下对 EL0 无影响。在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。SA位 [3]EL1 栈指针对齐检查使能。置 1 时EL1 以 SP 为基址加载 / 存储未 16 字节对齐则触发对齐错误。VHE 特定场景下对 PE 无影响。在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。C位 [2]数据访问缓存性控制。0b0EL0/EL1 对普通内存的数据访问及页表访问为各级非缓存0b1不对数据访问缓存性做额外控制HCR_EL2.DC1 时忽略该位。VHE 特定场景下对 PE 无影响。复位值为 0。A位 [1]对齐检查使能。EL1/EL0 对齐错误检查总开关。0b0禁用对齐检查独占 / 序访问指令除外0b1启用对齐检查访问地址与数据大小不匹配触发数据中止异常独占 / 序访问指令始终做对齐检查与该位无关。VHE 特定场景下对 EL0 无影响。在 PE 复位进入 EL1 的系统中该字段复位为架构未知值。M位 [0]EL1/EL0 第一阶段地址转换MMU使能。0b0禁用 MMU0b1启用 MMUHCR_EL2.{DC,TGE} ≠ {0,0} 时非安全态行为等同于 M0。VHE 特定场景下对 PE 无影响。复位值为 0。SCTLR_EL1 的访问当 HCR_EL2.E2H 1 时EL3 使用 SCTLR_EL1 与 SCTLR_EL12 助记符的访问若无显式同步不保证有序。访问编码MRS Xt, SCTLR_EL1plaintextop00b11 op10b000 CRn0b0001 CRm0b0000 op20b000EL0未定义EL1受 EL2 TVM、HFGRTR 等控制可陷阱或直接返回EL2E2H1 时返回 SCTLR_EL2否则返回 SCTLR_EL1EL3返回 SCTLR_EL1MSR SCTLR_EL1, Xt编码同上按异常级别与虚拟化配置执行写入或陷阱。MRS Xt, SCTLR_EL12 / MSR SCTLR_EL12, Xtplaintextop00b11 op10b101 CRn0b0001 CRm0b0000 op20b000仅在 EL2/E2H1 等特定配置下有效其余场景为未定义。

更多文章