CSR 位字段

RISC-V henvcfg CSR 寄存器详解

地址 0x60A特权级 Hypervisor访问 HRW(Hypervisor 读写) / HSXLENHypervisor 与虚拟化 CSR

henvcfg 是Hypervisor 环境配置 CSR。

字段映射

按 bit 字段理解 henvcfg

7 个关键字段
63

STCE

读写

Sstc 对 VS-mode vstimecmp 访问路径的使能位。

这个字段控制什么

  • - Sstc 对 VS-mode vstimecmp 访问路径的使能位。

常见取值

0关闭

VS-mode 访问 stimecmp(实际为 vstimecmp)会触发 virtual-instruction exception。

1开启

允许 VS-mode 访问 Sstc 定义的 vstimecmp。

打开官方手册
62

PBMTE

读写

控制 Svpbmt 是否可用于 VS-stage 地址转换。

这个字段控制什么

  • - 控制 Svpbmt 是否可用于 VS-stage 地址转换。

常见取值

0关闭

VS-stage 地址转换表现为 Svpbmt 未实现。

1开启

Svpbmt 可用于 VS-stage 地址转换。

打开官方手册
61

ADUE

读写

控制 VS-stage 地址转换中是否启用硬件更新 PTE A/D 位。

这个字段控制什么

  • - 控制 VS-stage 地址转换中是否启用硬件更新 PTE A/D 位。

常见取值

0关闭

VS-stage 地址转换表现为实现 Svade,需要软件处理 A/D 位。

1开启

VS-stage 地址转换启用硬件更新 PTE A/D 位。

打开官方手册
7

CBZE

读写

控制 VS/VU 中 HS-qualified CBO.ZERO 是否可执行。

这个字段控制什么

  • - 控制 VS/VU 中 HS-qualified CBO.ZERO 是否可执行。

常见取值

0关闭

HS-qualified CBO.ZERO 在 VS/VU 中触发 virtual-instruction exception。

1开启

允许 HS-qualified CBO.ZERO 在 VS/VU 中执行。

打开官方手册
6

CBCFE

读写

控制 VS/VU 中 HS-qualified CBO.CLEAN/CBO.FLUSH 是否可执行。

这个字段控制什么

  • - 控制 VS/VU 中 HS-qualified CBO.CLEAN/CBO.FLUSH 是否可执行。

常见取值

0关闭

HS-qualified CBO.CLEAN/CBO.FLUSH 在 VS/VU 中触发 virtual-instruction exception。

1开启

允许 HS-qualified CBO.CLEAN/CBO.FLUSH 在 VS/VU 中执行。

打开官方手册
5:4

CBIE

读写

控制 VS/VU 中 HS-qualified CBO.INVAL 的可用性和行为。

这个字段控制什么

  • - 控制 VS/VU 中 HS-qualified CBO.INVAL 的可用性和行为。

常见取值

0禁用

HS-qualified CBO.INVAL 在 VS/VU 中触发 virtual-instruction exception。

1按 flush 执行

CBO.INVAL 在 VS/VU 中可执行,并按 flush 行为执行。

2保留

保留编码;可移植软件不应写入或依赖。

3按 invalidate 执行

CBO.INVAL 在 VS/VU 中可执行,并按 invalidate 行为执行,除非 HS 配置要求 flush 行为。

打开官方手册
0

FIOM

读写

控制 V=1 时 FENCE I/O 排序是否也隐含内存排序。

这个字段控制什么

  • - 控制 V=1 时 FENCE I/O 排序是否也隐含内存排序。

常见取值

0关闭

V=1 时 FENCE 的 I/O 排序不隐含普通内存排序。

1开启

V=1 时 FENCE 的 I/O 排序也隐含普通内存排序。

打开官方手册
官方依据与检索要点

henvcfg 是 Hypervisor 环境配置 CSR。它是 HS/M 侧的 Hypervisor 状态,不是 VS supervisor CSR 副本;guest 访问是否允许由 H 扩展和相关 state-enable/AIA/Sstc/Smcsrind 规则决定。

henvcfg 的地址、访问类和宽度按官方 CSR 表核对:0x60A,HRW(Hypervisor 读写),HSXLEN。
henvcfg 的字段含义按 Hypervisor 扩展对应章节解释;未实现字段不能当作固定可写位。
写入时只修改官方定义字段;WARL/WLRL/WPRI 和保留字段按官方规范与实现行为处理。

读这个 CSR 时先看什么

  • - henvcfg 是 Hypervisor 级 CSR;独立地址按官方表属于 HRW(Hypervisor 读写) 访问类。
  • - guest/VS 软件不能通过 supervisor CSR alias 访问该 H-level CSR;相关访问由 H 扩展和可选扩展规则控制。

写入前的风险检查

  • - 写 henvcfg 时只修改官方定义的目标字段,并保留 WPRI、保留位和未修改字段。

放回真实流程里理解

1

确认当前软件运行在可访问 Hypervisor CSR 的 M/HS 上下文。

2

确认定义该 CSR 的 H/AIA/Sstc/Smstateen/Smcsrind 等扩展已经实现。

3

按官方字段读写;guest 相关访问是否通过或 trap 由对应扩展规则和 state-enable 控制。

常见问题

henvcfg 能通过 supervisor CSR alias 访问吗?

不能把 henvcfg 当作 VS CSR 副本。它是 H-level CSR;guest/VS 访问相关功能时是否 trap 由 H 扩展和对应可选扩展规则决定。