1.Firmware Commit command
在1.0和1.1协议里,Firmware Commit command被称作Firmware activate,固件提交命令用于修改固件映像或引导分区。
修改固件映像时,“固件提交”命令将验证是否已下载了有效的固件映像,并将该修订提交到特定的固件插槽。 主机可以选择固件映像作为该命令的一部分在下次控制器级别复位时激活。 主机可以通过检查图247中的“识别控制器”数据结构中的“固件版本”字段来确定当前正在执行的固件版本。主机可以通过检查“固件插槽信息”日志页面来确定要在下一个控制器级别重置上执行的固件版本。 NVM子系统中的所有控制器共享固件插槽,并且相同的固件映像应用于所有控制器。
固件映像的激活可能会导致主机不希望的控制器行为发生变化(例如,UUID列表发生不兼容的变化(请参阅第8.24.2节))。 在这种情况下,如果“提交操作”字段设置为011b,则控制器应中止状态为“固件激活需要常规复位”的命令。
修改引导分区时,主机可以选择引导分区以将其标记为活动或替换。 引导分区仅在解锁时才能写入(请参阅第8.13节)。固件提交命令使用Dword10字段。 保留所有其他命令特定字段。
bits | description | ||||||||||||||||
31 | 引导分区ID(BPID):指定用于提交操作的引导分区(如果适用) | ||||||||||||||||
30:06 | 保留 | ||||||||||||||||
05:03 | 提交操作(CA):此字段指定对使用“固件映像下载”命令下载的映像或先前下载并放置的映像执行的操作(请参阅第8.1节)。 下表中指示了这些操作。
| ||||||||||||||||
02:00 | 固件插槽(FS):指定适用于“提交操作”的固件插槽。 如果指定的值为0h,则控制器应选择固件插槽(即插槽1至插槽7)进行操作 |
完成固件提交命令后,控制器会将完成队列条目发布到Admin Completion Queue中,以指示命令的状态。对于固件提交命令,该命令指定在下一个控制器级别重置(即,CA字段设置为001b或010b)并激活状态码值为0h(即,成功完成)时激活控制器级别的新固件映像。 通过第7.3.2节中定义的任何方法启动的复位将激活指定的固件。
固件提交命令特定的状态值在图176中定义。
value | description |
06h | 无效的固件插槽:指示的固件插槽无效或只读。 如果固件插槽超过支持的数量,则会指示此错误。 |
07h | 无效的固件映像:指定用于激活的固件映像无效,并且未由控制器加载 |
0Bh | 固件激活需要常规重置:固件提交成功,但激活固件映像需要常规重置。 如果在常规复位之前发生FLR或控制器复位,则控制器应使用当前正在执行的固件映像继续运行。 |
10h | 固件激活需要NVM子系统重置:固件提交成功,但固件映像的激活需要NVM子系统重置。 如果在NVM子系统复位之前发生了其他类型的控制器级别复位,则控制器应使用当前正在执行的固件映像继续运行。 |
11h | 固件激活需要控制器级重置:固件提交成功;但指定的映像不支持在控制器级别重置之前被激活。映像将在下一个控制器电平复位被激活。只有当固件提交命令中的Commit操作字段被设置为011b时(即当固件提交命令中的Commit操作字段被设置为011b时),才应该返回此状态代码,立即激活)。 |
12h | 激活固件需要最长的时间:激活后指定的映像立即数将超过“识别控制器”数据结构中报告的“固件激活的最大时间”(MTFA)值(请参见图247)。 要激活固件,需要重新发出“固件提交”命令,并使用重置来激活映像。 |
13h | 禁止激活固件:由于供应商的特定原因,控制器禁止激活指定的映像(例如,控制器不支持向下版本的固件)。 |
14h | 重叠范围:如果固件映像具有重叠范围,则指示此错误 |
1Eh | 禁止引导分区写入:如果命令在锁定时尝试修改引导分区,则指示此错误(请参阅第8.13.3节)。 |
2.Sanitize Command
sanitize操作从block级别,在物理擦除SSD上的数据,会更改NVM子系统中的所有用户数据,从而无法从任何高速缓存,非易失性介质或任何控制器内存缓冲区恢复任何先前的用户数据。 具体的实现方式是是否通过sanitize操作来更改控制器内存缓冲区中的提交队列和完成队列。 存储在所有控制器内存缓冲区中的所有其他数据将通过sanitize操作进行更改。 如果一部分用户数据未更改且sanitize操作成功完成,则NVM子系统应确保该部分用户数据永久不可访问,以备将来在NVM子系统内使用(例如,从NVM介质,缓存, 或任何控制器内存缓冲区),并通过与NVM子系统的任何接口(包括管理接口,例如NVMe-MI实现)永久无法访问用户数据的那部分。
该命令有三种操作类型:block erase,crypo erase,overwrite,均为后台运行,命令的完成不代表操作的完成。如果sanitize命令选择了不支持的sanitize操作类型,则控制器应在命令中以Invalid字段的状态终止该命令。①block erase sanitize操作使用一种低级的块擦除方法来修改用户数据,该方法特定于NVM子系统中存储用户数据的媒体上的所有位置的媒体;②Crypto Erase sanitize操作通过改变NVM子系统中存储用户数据的媒体上所有位置的媒体加密密钥来修改用户数据;③Overwrite sanitize操作通过将固定的数据模式(下图)或相关模式写入NVM子系统中媒体上的所有位置来修改用户数据,用户数据可以在其中存储一次或多次。
当任何控制器上的sanitize操作开始时,NVM子系统中的所有控制器①应该清除任何未完成的sanitize操作完成的异步事件或sanitize操作完成时意外的Deallocation异步事件;②更新sanitize状态日志;③在进行中的清洗操作中,应中止任何不允许的命令(已提交的或正在进行的);④终止正在进行的设备自检操作;⑤暂停第8.4.2节所述的自主电源状态管理活动;⑥应释放任何开放流的流标识符。
如果FW的激活和重置正在等待执行,则控制器将中止sanitize命令。Sanitize命令使用命令dword10和命令dword11。所有其他特定于命令的字段都被保留。
bits | descriptions | ||||||||||||||
31:10 | 保留 | ||||||||||||||
09 | sanitize后不释放:如果设置为‘1’,并且No-Deallocate inhibited位(参见图247)被清除为‘0’,则控制器在成功完成sanitize操作后不会释放任何逻辑块。如果: a)清除到' 0 ';或者 b)设置为“1”,并且No-Deallocate的受抑制位设置为“1”, 然后,由于成功完成了sanitize操作,控制器应该释放逻辑块。如果Sanitize操作字段设置为001b(即退出失败模式),则该位将被忽略。 | ||||||||||||||
08 | Overwrite Invert Pattern Between Passes(OIPBP):如果设置为“ 1”,则覆盖模式应在passes之间反转。 如果清除为“ 0”,则覆盖模式在passes之间不得反转。 除非将“清除操作”字段设置为011b(即“覆盖”),否则应忽略该位。 | ||||||||||||||
07:04 | Overwrite Pass Count (OWPASS):此字段使用此命令的“覆盖模式”字段中的数据指定覆盖次数(即,要重写介质的次数)。 值0h指定16次覆盖遍历。 除非将“清除操作”字段设置为011b(即“覆盖”),否则应忽略此字段。 | ||||||||||||||
03 | Allow Unrestricted Sanitize Exit (AUSE):如果设置为“1”,则在不受限制的完成模式下执行sanitize操作。如果清除为“0”,则在受限完成模式下执行sanitize操作。如果Sanitize操作字段设置为001b(即退出失败模式),则该位将被忽略。 | ||||||||||||||
02:00 | Sanitize Action (SANACT):
|
bit | descriptions |
31:0 | Overwrite Pattern (OVRPAT):除非命令Dword 10中的Sanitize操作字段被设置为011b(即Overwrite),否则该字段将被忽略。此字段指定用于覆盖清理操作的32位模式。 |
value | descriptions |
10h | Firmware Activation Requires NVM Subsystem Reset:由于固件激活处于挂起状态,因此无法启动sanitize操作。 |
23h | Sanitize Prohibited While Persistent Memory Region is Enabled:启用持久存储区时,禁止执行sanitize操作。 |