NVMe 2.0——Boot Partitions

Boot Partitions提供了一个可选的 NVM 存储区域,主机可以读取该区域,而无需主机初始化队列或enable控制器。访问Boot Partitions的简化接口可用于平台初始化代码(例如,从主机 ROM 执行的bootloader)以引导至预操作系统环境(例如 UEFI)而不是将image存储在另一个存储介质(例如, SPI 闪存)。有关读取Boot Partitions内容的过程,请参阅第 8.2.1 节。

支持Boot Partitions的 NVMe 控制器有两个大小相同的Boot Partitions,使用Boot Partitions标识符 0h 和 1h。这两个Boot Partitions允许主机在将Boot Partitions标记为active之前更新其中一个并验证内容。 NVM 子系统中的控制器可以共享相同的Boot Partitions。

Boot Partitions的内容只能使用Firmware Image Download和Firmware Commit命令(请参阅第 8.2.2 节)进行修改,并且可以使用Replay Protected Memory Block进行保护以防止未经授权的修改(请参阅第 8.2.3 节)。

8.2.1 Reading from a Boot Partition

一个Boot Partition就是一个连续的数据块,如图 412 所示,主机可以通过 NVMe 属性读取该数据块。

要使用 NVMe 属性读取Boot Partitions的内容,Host会在Host Memory中分配Boot Partitions Memory Buffer,以便控制器从Boot Partitions复制内容。 Host初始化Boot Partitions Memory Buffer Base Address。 Host通过设置Boot Partition ID、Boot Partition Read Size和Boot Partition Read Offset来enable Boot Partition读操作。 Host可以继续从Boot Partitions读取,直到读取了整个Boot Partitions。

Host可以在 NVM 子系统上电时随时读取Boot Partitions的一部分(即,无论 CC.EN 是否设置为“1”)。 当正在进行Boot Partitions读取时,Host不得修改传输特定properties(在适用的 NVMe Transport binding specification中描述)、Reset或者shutdown controller。

要从Boot Partitions读取数据,Host要执行以下步骤:

  1. 如有必要,对传输初始化(比如 PCIe link);
  2. 判断控制器是否支持Boot Partitions(CAP.BPS);
  3. 确定哪个Boot Partition是active(BPINFO.ABPID),Boot Partition的大小(BPINFO.BPSZ);
  4. 在Host中分配一块物理上连续的Memory Buffer来存放一个Boot Partition的内容;
  5. 将地址(BPMBL.BMBBA)初始化到要复制内容的Memory Buffer中;
  6. 通过写入Boot Partition Read Select (BPRSEL) 属性,开始从Boot Partition传输数据。这包括设置Boot Partition identifier (BPRSEL.BPID)、Boot Partition Read Size的大小 (BPRSEL.BPRSZ) 和Boot Partition Read Offset(BPRSEL.BPROF)。控制器在传输Boot Partition内容时设置Boot Read Status(BPINFO.BRS) 字段以指示Boot Partition读取操作正在进行中;并且
  7. 等待控制器完全传输Boot Partition的请求部分,在status字段 (BPINFO.BRS) 表示。如果 BPINFO.BRS 设置为 10b,则请求的 Boot Partition 数据已传输到 Boot Partition Memory Buffer。如果 BPINFO.BRS 设置为 11b,则传输请求的Boot Partition数据时出错,Host可能会再次请求Boot Partition数据。

在内存受限的环境中,主机可以通过读取Boot Partition的一小部分,将数据从Boot Partition Memory Buffer移到另一个内存位置,来读取小Boot Partition Memory Buffer的Boot Partition内容。 然后读取Boot Partition的另一部分,直到读取了整个Boot Partition。

如果支持 Boot Partition log page(参见 5.16.1.1 节),则可以通过 Boot Partition log page(参见 5.16.1.21 节)访问 Boot Partition。

8.2.2 Writing to a Boot Partition

Boot Partition内容可由Host使用Firmware Image Download和Firmware Commit命令在控制器enable时(CC.EN 设置为“1”)进行修改。
Boot Partition的更新过程是:

  1. Host发出Firmware Image Download命令以将Boot Partition的内容下载到控制器。可能有多个Boot Partition要下载,因此正在下载的Boot Partition的每个部分的偏移量在Firmware Image Download命令中指定。Host软件应从Boot Partition的开头开始按顺序发送Boot Partition image;
  2. Unlock Boot Partitions进行写操作(参考8.2.3节);
  3. Host在该控制器上提交Firmware Commit命令(参见第 5.12 节),提交操作为 110b,指定下载的image替换Boot Partition ID 字段中指定的Boot Partition的内容;
  4. 控制器完成Firmware Commit命令。在某些错误情况下会采取以下措施:
    1. 如果由于无法写入Boot Partition导致firmware active失败,则控制器报Boot Partition Write Prohibited错误;
  5. (可选)Host读取Boot Partition的内容以验证它们是否正确(参见第 8.2.1 节)。Host软件通过发出一个 Commit Action 为 111b 的 Firmware Commit 命令来更新active Boot Partition ID;
  6. Host Lock Boot Partition 访问以防止进一步修改(参见8.2.3 节)。

如果在将下载的 image提交到boot partition时发生内部错误、重置或掉电情况,则boot partition的内容可能包含旧内容、新内容或两者的混合。Host软件应在将boot partition标记为active之前验证boot partition的内容,以确保activeboot partition稳定。

Host软件在写入boot partition时不应读取boot partition的内容。如果Host在覆盖内容时尝试执行boot partition读取操作,则控制器可能会返回新旧数据的组合。

Host软件不应与firmware/boot partition image update命令序列重叠(请参阅第 1.5.23 节)。在boot partition image update命令序列期间,如果为另一个firmware/boot partition image update命令序列提交firmware image下载命令或firmware提交命令,则该命令和正在进行的firmware image update的结果都是不确定的。

对于作为boot partition image update命令序列一部分的所有命令,Host软件应使用相同的控制器或Management Endpoint(请参阅 NVMe Management Interface Specification)。如果单个firmware/boot partition image update命令序列的命令被提交给多个控制器和/或Management Endpoint,则控制器可能会以Invalid Firmware Image状态abort firmware Commit命令。

8.2.3 Boot Partition Protection

支持Boot Partitions和 RPMB 的控制器应支持Boot Partition Protection。 Boot Partition Protection可以使用 RPMB 进行配置(请参阅第 8.18 节)。 图 413 显示了Boot Partition Protection的概述。

Figure 413: Boot Partition Protection Overview
Figure 413: Boot Partition Protection Overview

 

所有Boot Partitions的默认状态都是“Unlocked”状态。在这种状态下,主机软件可以读写一个Boot Partition。

所有Boot Partitions保持Unlock状态,直到主机软件enable Boot Partition Protection。主机软件通过设置 RPMB Device Configuration Block数据结构中的Boot Partition Protection Enable位来启用Boot Partition Protection(参见第 8.18 节)。一旦启用Boot Partition Protection,控制器将拒绝禁用Boot Partition Protection的Authenticated Device Configuration Block Writes(即启用Boot Partition Protection是永久性的)。一旦Boot Partition Protection被启用,只有在使用 RPMB 解锁Boot Partition后才能修改Boot Partition。

激活Boot Partition Protection后,所有Boot Partitions的默认状态为“Locked”状态。在这种状态下,主机软件可以读取Boot Partition,控制器拒绝使用Firmware Commit命令写入Boot Partition的尝试。

可以使用Device Configuration Block数据结构中的相应位独立地lock或unlock每个Boot Partition。

5.16.1.21 Boot Partition (Log Identifier 15h)

Boot Partition Log page提供对Boot Partition的只读访问(参见第 8.2 节), 该控制器可通过 BPRSEL 寄存器访问Boot Partition(参见 3.1.3.14 节)。

该日志包含一个header,描述Boot Partition和Boot Partition Data,如图 262 所定义。Log Specific字段字段中的Boot Partition Identifier位确定Boot Partition。

Host读取此log page对 BPINFO(参见第 3.1.3.13 节)、BPRSEL 和 BPMBL(参见第 3.1.3.15 节)寄存器没有影响。

Figure 261: Command Dword 10 – Log Specific Field
BitsDescription
14:09Reserved
08Boot Partition Identifier:该bit指定要返回的Boot Partition的Boot Partition identifier

Figure 262: Get Log Page – Boot Partition Log (Log Identifier 15h)
BytesDescription
Boot Partition Header
00Log Identifier: 该字段设为15h
03:01Reserved
07:04

Boot Partition Information:包含定义Boot Partitions的特征。

BitsDescription
31Active Boot Partition ID (ABPID):该位指示active Boot Partition的标识符。
30:15Reserved
14:00Boot Partition Size (BPSZ):此字段以 128 KiB 的倍数定义Boot Partition Data字段的大小。
15:08Reserved
Boot Partition Data
BPSZ*128 KiB + 15:16Boot Partition Data:包含特定Boot Partition的内容


参考文档:NVMe 2.0, TP 6026

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值