VMPIDR_EL2,虚拟化多处理器 ID 寄存器

VMPIDR_EL2 的特性:

**用途**

保存虚拟化多处理器 ID 的值。这是 EL1 读取 MPIDR_EL1 时返回的值。

**配置**

AArch64 系统寄存器 VMPIDR_EL2 的位 [31:0] 在架构上映射到 AArch32 系统寄存器 VMPIDR[31:0]。

如果未实现 EL2,则读取该寄存器返回 MPIDR_EL1 的值,并且忽略对该寄存器的写入。

如果在当前安全状态下 EL2 未被使能,则该寄存器无效。

该寄存器中的 RW 字段复位为架构上未知的值。

**属性**

VMPIDR_EL2 是一个 64 位寄存器。

**字段描述**

VMPIDR_EL2 的位分配如下:

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 | Aff3 |

| RES1 | U | RES0 | MT | Aff2 | Aff1 | Aff0 |

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:40]**

保留,RES0。

**Aff3,位 [39:32]**

亲和性等级 3。更多信息请参见 Aff0 的描述。

Aff3 在 AArch32 状态下不支持。

该字段复位为架构上未知的值。

**位 [31]**

保留,RES1。

**U,位 [30]**

指示单处理器系统,以区别于多处理器系统中的 PE 0。该位的可能值为:

| U | 含义 |

|----|------|

| 0b0 | 处理器是多处理器系统的一部分。 |

| 0b1 | 处理器是单处理器系统的一部分。 |

该字段复位为架构上未知的值。

**位 [29:25]**

保留,RES0。

**MT,位 [24]**

指示最低亲和性等级是否由使用多线程类型方法实现的逻辑 PE 组成。关于亲和性等级的更多信息,请参见 Aff0 的描述。该位的可能值为:

| MT | 含义 |

|----|------|

| 0b0 | 最低亲和性等级的 PE 的性能在很大程度上是独立的。 |

| 0b1 | 最低亲和性等级的 PE 的性能是非常相互依赖的。 |

该字段复位为架构上未知的值。

**Aff2,位 [23:16]**

亲和性等级 2。更多信息请参见 Aff0 的描述。

该字段复位为架构上未知的值。

**Aff1,位 [15:8]**

亲和性等级 1。更多信息请参见 Aff0 的描述。

该字段复位为架构上未知的值。

**Aff0,位 [7:0]**

亲和性等级 0。这是对确定 PE 行为最重要的亲和性等级。更高的亲和性等级在确定 PE 行为时的重要性逐渐降低。每个 PE 的 MPIDR.{Aff2, Aff1, Aff0} 或 MPIDR_EL1.{Aff3, Aff2, Aff1, Aff0} 字段集的分配值在整个系统中必须是唯一的。

该字段复位为架构上未知的值。


**访问 VMPIDR_EL2**

对此寄存器的访问使用以下编码:

MRS <Xt>, VMPIDR_EL2

| op0 | op1 | CRn | CRm | op2 |

|-----|-----|-----|-----|-----|

| 0b11 | 0b100 | 0b0000 | 0b0000 | 0b101 |

如果 PSTATE.EL == EL0,则

未定义;

否则如果 PSTATE.EL == EL1,则

如果 EL2Enabled() && HCR_EL2.<NV2,NV> == '11',则

返回 NVMem[0x050];

否则如果 EL2Enabled() && HCR_EL2.NV == '1',则

AArch64.SystemAccessTrap(EL2, 0x18);

否则

未定义;

否则如果 PSTATE.EL == EL2,则

返回 VMPIDR_EL2;

否则如果 PSTATE.EL == EL3,则

如果 !HaveEL(EL2),则

返回 MPIDR_EL1;

否则

返回 VMPIDR_EL2;

MSR VMPIDR_EL2, <Xt>

| op0 | op1 | CRn | CRm | op2 |

|-----|-----|-----|-----|-----|

| 0b11 | 0b100 | 0b0000 | 0b0000 | 0b101 |

如果 PSTATE.EL == EL0,则

未定义;

否则如果 PSTATE.EL == EL1,则

如果 EL2Enabled() && HCR_EL2.<NV2,NV> == '11',则

NVMem[0x050] = X[t];

否则如果 EL2Enabled() && HCR_EL2.NV == '1',则

AArch64.SystemAccessTrap(EL2, 0x18);

否则

未定义;

否则如果 PSTATE.EL == EL2,则

VMPIDR_EL2 = X[t];

否则如果 PSTATE.EL == EL3,则

如果 !HaveEL(EL2),则

// 无操作

否则

VMPIDR_EL2 = X[t];

MRS <Xt>, MPIDR_EL1

| op0 | op1 | CRn | CRm | op2 |

|-----|-----|-----|-----|-----|

| 0b11 | 0b000 | 0b0000 | 0b0000 | 0b101 |

如果 PSTATE.EL == EL0,则

如果 IsFeatureImplemented("ARMv8.4-IDST"),则

如果 EL2Enabled() && !ELUsingAArch32(EL2) && HCR_EL2.TGE == '1',则

AArch64.SystemAccessTrap(EL2, 0x18);

否则

AArch64.SystemAccessTrap(EL1, 0x18);

否则

未定义;

否则如果 PSTATE.EL == EL1,则

如果 EL2Enabled() && !ELUsingAArch32(EL2) && (!HaveEL(EL3) || SCR_EL3.FGTEn == '1') && HFGRTR_EL2.MPIDR_EL1 == '1',则

AArch64.SystemAccessTrap(EL2, 0x18);

否则如果 EL2Enabled() && !ELUsingAArch32(EL2),则

返回 VMPIDR_EL2;

否则

返回 MPIDR_EL1;

否则如果 PSTATE.EL == EL2,则

返回 MPIDR_EL1;

否则如果 PSTATE.EL == EL3,则

返回 MPIDR_EL1;

MRC{<c>}{<q>} <coproc>, {#}<opc1>, <Rt>, <CRn>, <CRm>{, {#}<opc2>}

| coproc | opc1 | CRn | CRm | opc2 |

|--------|------|-----|-----|------|

| 0b1111 | 0b000 | 0b0000 | 0b0000 | 0b101 |

如果 PSTATE.EL == EL0,则

未定义;

否则如果 PSTATE.EL == EL1,则

如果 EL2Enabled() && !ELUsingAArch32(EL2) && HSTR_EL2.T0 == '1',则

AArch64.AArch32SystemAccessTrap(EL2, 0x03);

否则如果 EL2Enabled() && ELUsingAArch32(EL2) && HSTR.T0 == '1',则

AArch32.TakeHypTrapException(0x03);

否则如果 EL2Enabled() && !ELUsingAArch32(EL2),则

返回 VMPIDR_EL2<31:0>;

否则如果 EL2Enabled() && ELUsingAArch32(EL2),则

返回 VMPIDR<31:0>;

否则

返回 MPIDR<31:0>;

否则如果 PSTATE.EL == EL2,则

返回 MPIDR<31:0>;

否则如果 PSTATE.EL == EL3,则

返回 MPIDR<31:0>;

相关推荐
tianrun12344 小时前
ARMv8 两级页表内存属性合并原理
虚拟化·mmu·armv8
Jia ming2 个月前
ARMv8内存模型与屏障指令详解
armv8·内存模型·内存屏障
openHiTLS密码开源社区5 个月前
ARM架构深度解析:ARMv7、ARMv8、ARMv9的技术演进、芯片实现与未来展望
armv8·armv9·armv7·cortex-m·sve2·cca架构
全栈工程师修炼日记6 个月前
ARMv8系统的安全性(一):安全目标是什么?
安全·trustzone·armv8
liuluyang5309 个月前
ARMv8 创建3级页表示例
mmu·armv8·页表
代码改变世界ctw1 年前
Armv8/Armv9架构从入门到精通-介绍
arm·trustzone·atf·tee·armv8·armv9·周贺贺
Wanliang Li1 年前
Linux电源管理——CPU Hotplug 流程
linux·嵌入式硬件·嵌入式·armv8·电源管理·cpuhotplug
代码改变世界ctw1 年前
如何学习Trustzone
安全·trustzone·atf·optee·tee·armv8·armv9
代码改变世界ctw2 年前
【Arm Cortex-X925】 -【第四章】-时钟和复位
arm开发·armv8·armv9·cortex-r