NVM Express Revision 1.3学习笔记(二、控制器初始化与关机处理)

注意:本文翻译仅为学习交流用,版权归原文作者所有。原文出处
7.6控制器初始化和关机处理
本节介绍初始化控制器的推荐步骤以及在断电状态之前关闭处理。

7.6.1初始化
主机应依次执行以下操作,初始化控制器,开始执行命令:
1.根据系统配置设置第2节中描述的PCI和PCI Express寄存器,包括电源管理特性配置。在I/O队列的数量确定之前,应该使用single interrupt(例如pin-based, single-MSI, or single MSI-X)。
2. 主机通过等待控制器的CSTS.RDY变成’0’来判断先前的所有复位已完成。
3.配置管理队列。通过设置管理队列属性(AQA)、管理提交队列基地址(ASQ)和管理完成队列基地址(ACQ)。
4. 配置控制器设置。具体:
a.在CC.AMS中设置仲裁机制。
b.在CC.MPS中初始化内存页大小。
c.在CC.CSS中选择要使用的I/O命令集。
5.启动控制器:将CC.EN设置为’ 1 '。
6. 主机等待控制器指示它已准备好处理命令。当CSTS.RDY设置为“1”时,控制器已准备好处理命令。
7. 主机通过发出Identify命令,指定控制器数据结构来确定控制器的配置。然后,主机对每个名称空间发出Identify命令,指定namespace数据结构,从而确定每个名称空间的配置。
8. 主机确定支持的I/O提交队列和I/O完成队列的数量,通过使用Set Features命令,该命令带有队列功能标识符数量。在确定了I/O队列的数量之后,配置MSI和/或MSI- X寄存器。
9.主机分配合适的I/O完成队列数量,基于系统配置所需的数量和控制器支持的数量。I/O完成队列是通过创建I/O完成队列命令(Create I/O CQ)分配的。
10. 主机分配合适的I/O提交队列数量,基于系统配置所需的数量和控制器支持的数量。I/O提交队列是通过创建I/O提交队列命令(Create I/O SQ)分配的。
11. 如果主机希望对可选事件进行异步通知,那么主机应该发出Set Features命令,指定要启用的事件。如果主机希望异步通知事件,则主机应该提交适当数量的异步事件请求命令。这一步可以在控制器发出准备就绪信号后的任何时刻完成(即CSTS.RDY 设置为 ‘1’)。

执行这些步骤后,控制器可能用于I/O命令。对于退出D3电源状态,应该遵循概述的初始化步骤。在这种情况下,I/O提交队列和I/O完成队列的数量不会改变,因此初始化序列的第7步是可选的。

7.6.1.1软件进度标记
软件进度标记:软件进度标记是指在操作系统成功加载之前,已经加载预引导软件的次数,详见5.21.1.18。如果启动前软件加载计数变大,这可能表明NVM中缓存的数据有问题,因为操作系统驱动软件最近没有将该字段设置为0h。在这种情况下,操作系统驱动软件可能会选择更保守地使用NVM(例如,不使用缓存的数据)。作为完成初始化的一部分,预启动和操作系统驱动程序软件都应该更新软件进度标记。

7.6.2关机
关机:当控制器即将下电或关机时,建议主机按照本节的操作步骤对控制器进行关机操作。主机要正常关机,需依次执行以下操作:
1.停止向控制器提交任何新的I/O命令,并允许任何未完成的命令完成。
2.主机应该使用删除I/O提交队列命令删除所有I/O提交队列。成功完成Delete I/O Submission Queue命令的一个结果是将中止所有剩余未完成的命令。
3.主机应该使用删除I/O完成队列命令删除所有I/O完成队列。
13. 主机应该将关机通知(CC.SHN)字段设置为01b,以表示正常的关机操作。控制器通过将shutdown Status (CSTS.SHST)字段更新为10b,表示关闭处理完成。为了进入D3电源状态,应该遵循正常关机的关机步骤。对于突然停机,主机应依次执行以下动作:
1.停止向控制器提交任何新的I/O命令。
2.主机应该将关机通知(CC.SHN)字段设置为10b,以指示突然关机操作。控制器通过将shutdown Status (CSTS.SHST)字段更新为10b,表示关闭处理完成。

建议主机等待识别控制器数据结构中报告的RTD3条目延迟,以便关闭操作;如果在RTD3条目延迟中报告的值为0H,则主机应等待至少一秒。建议不要通过CC.EN字段禁用控制器。这导致控制器复位可能影响完成关闭处理所需的时间。当CSTS.SHST表示关闭处理时,关闭控制器是安全的(无论CC.EN的值如何)。关闭控制器仍然安全,直到CC.EN从“0”到“1”的转换。要在关闭操作后开始执行控制器上的命令,需要一个控制器复位(从’1’到’0’中清除的CC.EN)。然后应该执行初始化序列。它是一个实现选项,是否将主机在关机之前将所有未完成的命令中止到管理员队列中的所有未完成命令。关机时,唯一应该在管理队队列中出现的命令是异步事件请求命令。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值