8.1 Firmware Update Process
通过reset激活firmware 更新的过程:
- host发出firmare下载命令,将FW image下载到控制器。FW image可能有多个部分要下载,因此FW image 下载命令中指定正在下载的FW image的每个部分的偏移量。FW image 下载命令中提供的数据应该符合Identify Controller data structure中的FWUG,否则会更新失败。
- FW image下载到控制器后,host下一步是FW Commit 命令。FW Commit 命令验证最后下载的FW image是否有效,并将该image提交到指定的FW Slot以供使用。FW image不以0偏移开始,包含间隙或包含重叠区域,则视为无效。控制器可以采用额外的供应商特定方法(例如检验, CRC,密码三列或数字签名)来确定FW image的有效性。 FW Commit可以用于激活与先前提交的FW slot相关联的FW image。
- 最后一步是执行reset,然后激活FW Commit 命令中FW Slot中指定的FW image。重置可以是NVM 子系统重置, Conventional Reset, Function Level Reset, or Controller Reset (CC.EN transitions from ‘1’ to ‘0’):在某些情况下,需要a Conventional Reset or NVM Subsystem Reset 来激活FW image,这个要求有FW commit 命令特定状态指出,参考 章节5.11。
- 在reset完成后,host重新初始化控制器。包括重新分配I/O提交和完成队列。参见章节7.6.1.
在没有reset的情况下激活FW更新的过程是:
- host发出FW image 下载命令,将FW image下载到控制器。下载的FW image 可能存在多个部分,因此在FW image下载命令中指定正在下载的FW image的每个部分的偏移量。FW image下载命令中提供的数据应符合 Identify Controller data structure中的FWUG,否则FW 会更新失败。
- host 提交具有011b的提交操作的FW Commit 命令,该命令指定应立即激活image 而不reset。下载的image 应替换FW slot中的image。如果自上次 reset或FW commit命令(即跳过第一步)以来没有下载image,则控制器应验证并激活指定slot中的image。如果控制器开始激活FW,受新FW影响的任何控制器都会向host发送FW激活启动异步事件(如果启用了固件激活通知)参见图291.
a.FW 提交命令还可以用于激活与先前提交的FW slot相关联的FW image。
Figure 291: Asynchronous Event Configuration
Bits | Description |
---|---|
… | … |
09 | Firmware Activation Notices: 该bit位确定是否向主机发送FW激活启动事件的异步事件通知(参见图149),如果此位设置为1,则当出现此情况时,FW激活启动事件会发送到host。如果此位被清除为0,则控制器不应向host发送FW激活启动事件。 |
… | … |
Figure 149: Asynchronous Event Information – Notice
Value | Description |
---|---|
01h | Firmware Activation Starting: 控制器正在启动FW 激活过程,在次过程暂停命令处理。host可以通过CSTS.PP 确定命令处理何时已恢复。要清除此事件,host将读取FW slot信息日志页。 |
… | … |
- 控制器完成FW 提交命令。在某些错误情况下会采取以下操作:
a. 如果FW image 无效,则控制器报告适当的错误(例如, Invalid
Firmware Image )
b. 如果FW 激活不成功,因为需要Controller Level Reset来激活该FW ,则控制器报告FW激活需要Controller Level Reset的错误,并且在下一次Controller Level Reset时应用该image。
c.如果FW 激活不成功,因为需要NVM Subsystem Reset来激活该FW,则控制器报告FW激活需要NVM Subsystem Reset的错误,并且在下一次NVM Subsystem Reset是应用该image。
d. 如果FW激活不成功,因为需要Conventional Reset来激活该FW,则控制器报告FW激活需要Conventional Reset的错误,并且在下一次Conventional Reset时应用图像。
e. 如果FW激活不成功,因为FW激活时间将超过 Identify Controller data structure中的MTFA值,则控制器报告FW激活需要最长时间违规的错误。在这种情况下,要激活FW,需要重新发出FW 提交命令,并使用reset 激活image。
如果控制器在提交试图激活FW image的FW 提交命令之后并且在该命令完成之前转到D3cold 状态(参考PCI Express Base Specification),则控制器可以在提交FW 提交命令时激活FW image或者由该命令激活的FW image的情况下恢复操作。如果无法成功加载FW,则控制器应恢复到最近激活的FW slot中的FW image或基线只读FW image(如果可用),并将故障指示为带有FW image加载错误的异步事件。
如果host 覆盖活动FW slot中的FW,则先前活动的FW image可能不在可用。因此需要使用该FW slot的任何动作(例如: power cycling the controller)都可以使用当前在该FW Slot中的FW image。
host不应同时更新多个FW image,下载FW image后,host 会在下载其他FW image 之前发出FW 提交命令。在完成FW提交命令对第一个FW 下载命令的处理应使控制器丢弃下载image的剩余部分(如果有)。如果FW下载和FW提交命令完成之间发生reset,则控制器应丢弃下载image的所有部分(如果有)。