本文介绍NVMe协议中定义的Controller Shutdown流程,当Host需要下电或关机的情况下,应该按下面步骤对控制器进行有序的下电操作。
Normal Controller Shutdown,Host应依次执行以下操作:
- 如果Controller是enabled(i.e., CC.EN is set to '1'):
a.Host应该停止向Controller提交任何新的I/O Command,允许outstanding command完成;
b.Host发送Delete I/O Submission Queue Command,删除之前Create的I/O Submission Queue,成功完成Delete I/O Submission Queue Command的结果就是,Submission Queue中任何剩余outstanding command都将被Aborted。
c.Host发送Delete I/O Completion Queue,删除所有的I/O Completion Queue。
- Host应该将Shutdown Notification (CC.SHN)字段设置为01b,以指示Normal Controller shutdown操作。Controller通过将Shutdown Status (CSTS.SHST)字段更新为10b和Shutdown Type (CSTS.ST)字段清‘0’,来指示shutdown何时完成的。
Abrupt Shutdown,Host应依次执行以下操作:
- 如果Controller是enabled(i.e., CC.EN is set to '1'),则停止向Controller提交任何新的I/O命令;
- Host应该将Shutdown Notification (CC.SHN)字段设置为10b,以指示Abrupt shutdown操作,Controller通过将Shutdown Status (CSTS.SHST)字段更新为10b和Shutdown Type (CSTS.ST)字段清‘0’,来指示shutdown何时完成的。
要进入D3电源状态,应该遵循Normal Controller Shutdown关闭步骤。