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的所有部分(如果有)。