Firmware Update Process

12 篇文章 0 订阅

通过reset 激活firmware 更新的过程
  1. host发Firmware Image Download命令来将固件映像下载至控制器。固件映像(firmware image)可能有多个部分要下载,所以,要下载的固件映像的每一个部分的Offset 都应在Firmware Image Download中指定,Firmware Image Download命令里提供的数据需要符合Identify Controller 数据结构中指定的Firmware Update Granularity,否则,更新可能失败。
  2. 在固件下载到控制器之后,下一步是host提交Firmware Commit 命令。Firmware Commit会验证上次Download的固件映像是否有效,并将该映像提交到指定的Firm Slot以便后面使用。Offset 不是从0开始,含有空隙或者重叠Offset的固件映像视为无效。控制器可以额外采用其他vendor指定的方式(如校验和,CRC,密码哈希或数字签名)来确定固件映像的有效性:
    a. Firmware Commit命令还可以用于激活与先前提交的Firmware Slot关联的固件映像。
  3. 最后一步是reset,然后激活”Firmware Commit”命令中”特定Firm Slot”字段里的固件映像。Reset 可以是The reset may be an NVM Subsystem Reset, Conventional Reset, Function Level Reset, or Controller Reset (CC.EN 从 ‘1’ 置为 ‘0’):
    a. 在某些情况下,需要Conventional Reset 或 NVM Subsystem Reset才能激活固件映像。这种会在”Firmware Commit“中特定状态指示(NVME1.4 5.11.1)。
  4. Reset 完成后,host软件将重新初始化控制器。这包括重新分配I/O Submission Queues和Completion Queues. NVME1.4 7.6.1
不通过reset 激活firmware更新的过程
  1. host发Firmware Image Download命令来将固件映像下载至控制器。固件映像可能有多个部分要下载,所以,要下载的固件映像的每一个部分的Offset 都应在Firmware Image Download中指定,Firmware Image Download命令里提供的数据需要符合Identify Controller 数据结构中指定的Firmware Update Granularity,否则,更新可能失败。
  2. host 通过CA(Commit Action) = 011b提交Firmware Commit命令,这样就会立即激活映像而无需reset。Download的映像应替换原firmware slot中的映像。如果自上次reset或firmware commit命令以后(即跳过第一步)没有下载映像,那么控制器会验证并激活指定slot中有的映像。如果控制器开始激活固件,在启用 Firmware Activation Notices情况下,收新固件影响的任何控制器都会向host发送Firmware Activation Starting异步事件(参照NVME1.4 Figure 287):
    a. Firmware Commit命令还可以用于激活与先前提交的Firmware Slot关联的固件映像。
  3. 控制器完成Firmware Commit命令。在某些错误情况下,将采取以下措施:
    a. 如果固件映像无效,那么控制器报告适当的错误(如:Invalid Firmware Image);
    b. 如果由于需要Controller Level Reset 来激活导致固件激活失败,那么控制器会报Firmware Activation Requires Controller Level Reset的错误,并且映像会在下次Controller Level Reset时应用。
    c. 如果由于需要NVM Subsystem Reset来激活导致固件激活失败,则控制器会报Firmware Activation Requires NVM Subsystem Reset的错误,并且映像将在下一次NVM Subsystem Reset时应用;
    d. 如果由于需要Conventional Reset来激活导致固件激活失败,则控制器会报Firmware Activation Requires Conventional Reset的错误,并且映像将在下一次Conventional Reset时应用;
    e. 如果由于固件激活时间超过“Identify Controller”数据结构中的MTFA值而导致固件激活失败,则控制器将报Firmware Activation Requires Maximum Time Violation的错误。在这种情况下,要激活固件,需要重新发出“Firmware Commit”命令,并使用reset来激活。

如果在提交Firmware Commit命令之后且在该命令完成之前,控制器转到D3cold状态(参阅PCI Express Base Specification4.0),若Firmware Commit命令已经提交,或该固件映像已经被激活,控制器可以继续固件激活操作。

如果无法成功加载固件,则控制器应恢复到最近激活的firmware slot中存在的固件映像或基准只读固件映像(如果有),并将失败记录为一个异步事件:Firmware Image Load Error。

如果host覆盖(即更新)已激活的firmware slot中的固件,则先前激活的固件映像可能不再可用。结果是,需要使用该firmware slot的任何动作(如,控制器重启)都可以使用该firmware slot中当前的固件映像。

host软件不应同时更新多个固件映像。下载映像后,host软件会发出Firmware Commit命令,然后再下载其他固件映像。 上一次做了FW download + commit (FW1), 这次再执行FW download (FW2), 那么FW2会覆盖FW1, 等接下来发 commit命令的时候,激活的是FW2而不是FW1. 在download和commit之间来了reset,控制器会清理掉之前download进来的映像。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值