Nvme协议第三章 Controller Registers

本文详细解释了NVMe控制器寄存器的结构,特别是MLBAR/MUBAR中的CAP区域,强调了host如何通过虚拟内存访问这些寄存器。文章还涵盖了CC.Configuration寄存器的各个部分,如CC.EN、CC.CSS、CC.MPS等,以及它们在驱动中的作用和使用规则,包括NVMe_subsystem_reset功能的配置和处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

控制器寄存器位于MLBAR/MUBAR寄存器(PCI BAR0和BAR1)中,该寄存器应映射到支持有序访问和可变访问宽度的内存空间。host主机通过访问虚拟内存的方式访问该部分寄存器。

注:访问过程只能一次访问一个寄存器,不能多个访问。

寄存器如下:

 1 Offset 00h:CAP

 注意type类型以及bit位。MPSMAX和MPSMIN只是设置一个最大最小范围,具体实际的配置还是需要使用CC.MPS设置。(下图是nvme驱动code(Linux-6.8.8)调用read接口读bar空间 cap信息)

 

 全局搜索了下code,用到ctrl->cap的地方:

 nvme disable controller时候,等待CSTS_RDY状态变化,cap有一项timeout项,需要读取timeout时间,此时间可以理解为一个上限时间,不能超过此时间。通常是以500ms为一个单位。

 /**********************************************************************************************************/

 

 在驱动nvme enable ctrl内:

1 首先读取bar空间CAP,写入到本地ctrl->cap

2 获取dev page min;

3 CSS支持情况,协议定义如下:

 4 关于ctrl->ctrl_config配置,放到后面详细说明。这里配置了ctrl_config,然后写入到nvme register。

 5 重新读取cc reg,然后cap reg重读一次(这里暂时没理解到为什么cc写入一次,会影响到cap)

 6 超时判断,如果&NVME_CAP_CRMS_CRWMS为真,那么需要读取Controller Ready timeout

   定义:NVME_REG_CRTO  = 0x0068,   /* Controller Ready Timeouts */

7 开启cc enable

8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值