系统控制(System Control)

本章介绍系统寄存器及其结构和操作。

1. AArch32 寄存器描述

本节按名称的字母顺序介绍系统寄存器。

1.1. 缓存级别 ID 寄存器(Cache Level ID Register)

CLIDR 标识了在每个已实现的缓存级别类型、缓存层次,已经缓存结构的一致性和统一性级别。

使用限制

该寄存器可通过下列方式访问:

EL0 EL1 EL2
- RO RO

捕获和使能

如果 HCR.TID2 设置为 1,则从 EL1 对此寄存器的读取访问将被捕获到 Hyp 模式。

如果 HSTR.T0 设置为 1,则从 EL1 对此寄存器的读取访问将被捕获到 Hyp 模式。

配置

该寄存器在所有构建配置中都可用。

属性

CLIDR 是一个 32 位寄存器。

下图显示了 CLIDR 位分配。

Figure4_7

Table 4-48: CLIDR 位分配

名称 功能
[31:30] ICB 内部缓存边界:
    0b00 此机制中未公开。
[29:27] LoUU 指示缓存层次结构的统一单处理器级别:
    0b001 级别 1(如果已实现任一缓存)。
    0b000 级别 0(如果未实现指令和数据缓存)。
[26:24] LoC 表示缓存层次结构的一致性级别:
    0b001 级别 1(如果已实现任一缓存)。
    0b000 级别 0(如果未实现指令和数据缓存)
[23:21] LoUIS 指示缓存层次结构的统一内部可共享级别:
    0b001 级别 1(如果已实现任一缓存)。
    0b000 级别 0(如果未实现指令和数据缓存)。
[20:18] Ctype7 如果处理器实现了 L7 缓存,则指示缓存的类型:
    0b000 未实现 L7 缓存。
[17:15] Ctype6 如果处理器实现了 L6 缓存,则指示缓存的类型:
    0b000 未实现 L6 缓存。
[14:12] Ctype5 如果处理器实现了 L5 缓存,则指示缓存的类型:
    0b000 未实现 L5 缓存。
[11:9] Ctype4 如果处理器实现了 L4 缓存,则指示缓存的类型:
    0b000 未实现 L4 缓存。
[8:6] Ctype3 如果处理器实现了 L3 缓存,则指示缓存的类型:
    0b000 未实现 L3 缓存。
[5:3] Ctype2 如果处理器实现了 L2 缓存,则指示缓存的类型:
    0b000 未实现 L2 缓存。
[2:0] Ctype1 表示在 L1 上实现的缓存类型:
    0b000 无缓存。
    0b001 仅限指令缓存。
    0b010 仅限数据缓存。
    0b011 单独的指令和数据缓存。

访问 CLIDR:

MRC p15,1,<Rt>,c0,c0,1 ; 将 CLIDR 读入 Rt

1.2. 缓存隔离控制寄存器(Cache Segregation Control Register)

IMP_CSCTLR 控制 FlashAXIM 之间指令和数据缓存通道的隔离。

使用限制

此寄存器的访问方式如下:

EL0 EL1 EL2
- RW RW

只有在系统重置后,在使能缓存之前才允许写入 IMP_CSCTLR。这可确保在启用数据缓存或指令缓存后,即使随后禁用缓存隔离控制,缓存隔离控制也不会发生变化。

捕获和启用

如果 HCR.TIDCP 设置为 1,则从 EL1 对此寄存器的访问,将被捕获到 EL2

配置

此寄存器在所有构建配置中都可用。

属性

IMP_CSCTLR 是一个 32 位寄存器。

下图显示了 IMP_CSCTLR 位分配。

Figure4_8

名称 功能
[31:11] - 保留,RES0
[10:8] IFLW 指令缓存闪存方式
[7:3] - 保留,RES0
[2:0] DFLW 数据缓存闪存方式

下表显示了 IFLWDFLW 字段编码。

Flash 方式 AXIM 方式
0b000 - 0-3
0b001 0 1-3
0b010 0-1 2-3
0b011 0-2 3
0b100 0-3 -

要访问 IMP_CSCTLR

MRC p15,1,<Rt>,c9,c1,0 ;将 IMP_CSCTLR 读入 Rt
MCR p15,1,<Rt>,c9,c1,0 ;将 Rt 写入 IMP_CSCTLR

1.3. 缓存大小选择寄存器(Cache Size Selection Register)

CSSELR 通过指定所需的缓存级别和缓存类型(指令或数据缓存)来选择当前 CCSIDR。

使用限制

此寄存器的访问方式如下:

EL0 EL1 EL2
- RW RW

捕获和启用

如果 HCR.TID2 设置为 1,则从 EL1 访问此寄存器将被捕获到 Hyp 模式。

如果 HSTR.T0 设置为 1,则从 EL1 访问此寄存器将被捕获到 Hyp 模式。

配置

此寄存器在所有构建配置中都可用。

属性

CSSELR 是一个 32 位寄存器。

下图显示了 CSSELR 位分配。

Figure4_9

名称 功能
[31:4] - 保留,RES0。
[3:1] 级别 所需缓存的缓存级别。此字段为只读(RO):
    0b000: L1。
[0] InD 指令非数据位:
    0: 数据缓存。
    1: 指令缓存。

要访问 CSSELR

MRC p15, 2, <Rt>, c0, c0, 0 ; Read CSSELR into Rt
MCR p15, 2, <Rt>, c0, c0, 0 ; Write Rt to CSSELR

1.4. 缓存类型寄存器(Cache Type Register)

CTR 提供有关缓存架构的信息。

使用限制

该寄存器可通过下列方式访问:

EL0 EL1 EL2
- RO RO

捕获和启用

如果 HCR.TID2 设置为 1,则从 EL1 对此寄存器的读取访问将被捕获到 Hyp 模式。

如果 HSTR.T0 设置为 1,则从 EL1 对此寄存器的读取访问将被捕获到 Hyp 模式。

配置

此寄存器在所有构建配置中都可用。

属性

CTR 是一个 32 位寄存器。

下图显示了 CTR 位分配。

Figure4_10

名称 功能
[31] - 保留,RES1。
[30:28] - 保留,RES0。
[27:24] CWG 缓存写回颗粒。
    0x1 缓存写回颗粒为2个字。
[23:20] ERG 独占预留颗粒。
    为加载独占( Load-Exclusive)和存储独占(Store-Exclusive)指令实现的预留颗粒最大大小的字数的对数2。
    0x4 独占预留颗粒为16个字。
[19:16] DminLine 处理器控制的所有数据和统一缓存中最小缓存行中字数的对数2:
    0x4 最小数据缓存行大小为16个字。
[15:14] L1lp L1 指令缓存策略。指示 L1 指令缓存的索引和标记策略:
    0b11 物理索引物理标记 (PIPT)。
[13:4] - 保留,RES0。
[3:0] IminLine 处理器控制的所有指令缓存中最小缓存行的字数的对数 2。
    0x4 最小指令缓存行大小为16个字。

要访问 CTR

MRC p15,0,<Rt>,c0,c0,1 ; 将 CTR 读入 Rt