nvme1.3 学习笔记 3 controller register-1

3 Controller Register

Controller register位于被映射到host memory space的MLBAR/MUBAR(PCI BAR0和BAR1)寄存器空间上,可以按照顺序访问,可以任意宽度访问。许多计算机架构中,将内存设置为不可缓存会产生这种行为。Host不应该应用锁定访问。Host应该按照他们自己的宽度或者按照32位对其去访问。违反这些主机要求中的任意一个都将被认为是未定义的行为。

一次访问两个或者多个寄存器都是不被支持的。

所有reserved的寄存器和所有被reserved的寄存器的位都是只读的且在读取时返回0.Host不应当回复当0被返回时。

3.1 Register Definition

下面的表时controller的寄存器映射表

厂商自定义寄存器的地址范围从最后一个DB寄存器质疑道Bar0/1的结束。此寄存器起始地址是固定的不取决于DB寄存器的个数。

Start

End

Symbol

Description

00h

07h

CAP

Controller Capabilities

08h

0Bh

VS

Version

0Ch

0Fh

INTMS

Interrupt Mask Set

10h

13h

INTMC

Interrupt Mask Clear

14h

17h

CC

Controller Configuration

18h

1Bh

Reserved

Reserved

1Ch

1Fh

CSTS

Controller Status

20h

23h

NSSR

NVM Subsystem Reset (Optional)

24h

27h

AQA

Admin Queue Attributes

28h

2Fh

ASQ

Admin Submission Queue Base Address

30h

37h

ACQ

Admin Completion Queue Base Address

38h

3Bh

CMBLOC

Controller Memory Buffer Location (Optional)

3Ch

3Fh

CMBSZ

Controller Memory Buffer Size (Optional)

40h

43h

BPINFO

Boot Partition Information (Optional)

44h

47h

BPRSEL

Boot Partition Read Select (Optional)

48h

4Fh

BPMBL

Boot Partition Memory Buffer Location (Optional)

50h

EFFh

Reserved

Reserved

F00h

FFFh

Reserved

Command Set Specific

1000h

1003h

SQ0TDBL

Submission Queue 0 Tail Doorbell (Admin)

1000h + (1 *

(4 << CAP.DSTRD))

1003h + (1 *

(4 << CAP.DSTRD))

CQ0HDBL

Completion Queue 0 Head Doorbell (Admin)

1000h + (2 *

(4 << CAP.DSTRD))

1003h + (2 *

(4 << CAP.DSTRD))

SQ1TDBL

Submission Queue 1 Tail Doorbell

1000h + (3 *

(4 << CAP.DSTRD))

1003h + (3 *

(4 << CAP.DSTRD))

CQ1HDBL

Completion Queue 1 Head Doorbell

1000h + (4 *

(4 << CAP.DSTRD))

1003h + (4 *

(4 << CAP.DSTRD))

SQ2TDBL

Submission Queue 2 Tail Doorbell

1000h + (5 *

(4 << CAP.DSTRD))

1003h + (5 *

(4 << CAP.DSTRD))

CQ2HDBL

Completion Queue 2 Head Doorbell

1000h+ (2y * (4 << CAP.DSTRD))

1003h + (2y * (4 << CAP.DSTRD))

SQyTDBL

Submission Queue y Tail Doorbell

1000h +

((2y + 1) * (4 << CAP.DSTRD))

1003h +

((2y + 1) * (4 << CAP.DSTRD))

CQyHDBL

Completion Queue y Head Doorbell

Vendor Specific (Optional)

3.1.1 offset 00h:CAP-controller Capabilities

这寄存器代表了Controller到host的基本功能。

Bit

Type

Reset

Description

63:56

RO

0h

Memory Page Size Maximum(MPSMAX):这一部分代表了Controller支持的最大的Host的MPS,最大的MPS是2^(12+MPSMAX)。主机不应当配置大于此值的MPS。

55:52

RO

Impl Spec

Memory Page Size Minimum(MPSMIN):这一部分代表了Controller支持的最小的Host的MPS,最小的MPS是2^(12+MPSMAX)。主机不应当配置小于此值的MPS。

47:46

RO

0h

Reserved

45

RO

Impl

Spec

Boot Partition Support(BPS):这一位代表了Controller是否支持Boot分区,如果这一位是1,controller支持,0不支持,详见8.13

44:37

RO

Impl

Spec

Command Sets Supported(CSS):这一部分代表了Controller支持的IO Command Set,Controller应当支持最小数量的命令,如果某一位置1,则对应的IO Command应该被支持

Bit

Definition

37

NVM Command set

38

Reserved

39

Reserved

40

Reserved

41

Reserved

42

Reserved

43

Reserved

44

Reserved

 

36

RO

Impl

Spec

NVM Subsystem Reset Supprted(NSSRS):这一部分代表了Controller是否支持在7.3.1中定义的NVM Subsystem Reset特性,设置为1为支持,0不支持。

35:32

RO

Impl

Spec

Doorbell Stride(DSTRD):这一部分代表了Doorbell 寄存器(每一个SQ Doorbell和CQ Doorbell都是32bit的)之间的跨度。这个跨度是2^(2+DSTRD)字节,0代表4个字节,每个Doorbell之间没有Reserved的空间。见8.6

31:24

RO

Impl

Spec

Timeout(TO):代表了Host应该等待的最长时间,在下面两种情况下;

a.CC.EN从0到1,CSTS.RDY也应该从0到1。

b.CC.EN从1到0,CSTS.RDY也应该从1到0。

这个时间通常被用于像是突然shutdown或者从新加载一个FW image时,期待的时间应该短于此时间,这个时间以500ms为单位。

23:19

RO

0h

Reserved

18:17

RO

Impl

Spec

Aribitration Mechanism Supported(AMS):这几位代表着Cotroller支持的选择性支持的仲裁机制,设置为1表示Controller应该支持此仲裁机制,参见4.11

Bit

Definition

17

Weighted Round Robin with Urgent Priority Class

18

Vendor Specific

表中没有Round Robin是因为RR是必须支持的仲裁机制。

16

RO

Impl

Spec

Contiguous Queues Required(CQR):这一位设为1,代表Controller请求的IO SQ和IO CQ必须是物理地址连续的,Create IO SQ或CQ命令中的CDW.PC位也必须置1。0代表可以不连续。

15:0

RO

Impl

Spec

Maximum Queue Entries Supported(MQES):这几位代表了Controller支持的一个Queue最大的尺寸是多少0是最基本的值,1代表2个Entries大小。

3.1.2 Offset 08h:VS-Version

这个寄存器代表了Controller所支持的NVME版本。

3.1.2.1 VS Value for 1.3 Compliant Controllers

Bit

Type

Reset

Description

31:16

RO

0001h

Major Version Number (MJR):代表主版本是1

15:08

RO

03h

Minor Version Number (MNR): 代表次版本是3

07:00

RO

00h

Tertiary Version Number(TER) :代表第三版本是0

3.1.3 Offset 0Ch:INTMS-Interrupt Mask set

这一位被用来在使用Pin-Based Interrupts,signal Message MSI,或者Multiple Message MSI时对中断进行屏蔽。当使用MSI-X时,会再定义一个中断屏蔽表,Host不应读取这个寄存器。对于中断的行为要求,参见7.5。

Bit

Type

Reset

Description

31:00

RW1S

0h

Interrupt Vector Mask Set(IVMS):当某一位写1时,产生的中断或将报告的来自MSI capability Structure的中断对应的中断向量将被屏蔽。当写0时,这一位没有影响。当如这一部分时,应当返回Controller的当前中断屏蔽值(不是这个寄存器的值)。如果某位是1,则相应的中断向量被屏蔽了,如果是0,则没有屏蔽

3.1.4 Offset 10h:INTMC-Interrupt Mask Clear

这一位被用来在使用Pin-Based Interrupts,signal Message MSI,或者Multiple Message MSI时对中断进行清除屏蔽。当使用MSI-X时,会再定义一个中断屏蔽表,Host不应读取这个寄存器。对于中断的行为要求,参见7.5。

Bit

Type

Reset

Description

31:00

RW1C

0h

Interrupt Vector Mask Clear(IVMC):当某一位写1时,产生的中断或将报告的来自MSI capability Structure的中断对应的中断向量将被清除屏蔽。当写0时,这一位没有影响。当如这一部分时,应当返回Controller的当前中断屏蔽值(不是这个寄存器的值)。如果某位是1,则相应的中断向量被屏蔽了,如果是0,则没有屏蔽

3.1.5 Offset 14h:CC-Controller Configuration

这个寄存器修改Controller的设置。在Host设置CC.EN为1之前, Host应该设置Controller的仲裁机制(CC.AMS),内存页大小(CC.MPS)和支持的命令选择(CC.CSS)。Host如果在初始化IO CQ Entr(CC.IOCQES)大小和IO SQ Enty(CC.IOCQES)大小之前进行Create IO SQ/CQ的操作时,controller应该Abort掉Create IO SQ/CQ命令,并上报Invalid Queue Size。

Bit

Type

Reset

Description

31:24

RO

0

Reserved

23:20

RW

0

I/O Completion Queue Entry Size(IOCQES):这一部分定义了当选择使用I/O Command时I/O Completion Queue Entry的大小。最大值在Identify Controller Data Struct中被定义。这个值的单位是字节而且必须是2的n次幂。

19:16

RW

0

I/O Submission Queue Entry Size(IOSQES):这一部分定义了当选择使用I/O Command时I/O Submission Queue Entry的大小。最大值在Identify Controller Data Struct中被定义。这个值的单位是字节而且必须是2的n次幂。

15:14

RW

0h

Shutown Notification(SHN):这一部分用在在关机事件发生时通知controller的关机通告。对于正常关机来说,Host会等待Controller进行关机的处理。对于一个突发性关机,Host在断电之前可能不会等待Controller进行完成关机处理。

关机通告值定义如下:

Value

Definition

00b

No notification;no effect

01b

Normal shutdown notification

10b

Abrupt shutdown notification

11b

Reserved

这部分值应该优先于任何下电情况或者PCI Power Management情况,建议在热重启之前写入此字段。Host想要查看Controller什么时候关机完成,应当去读CSTS.SHST寄存器,参见7.6.2。

CC寄存器的其他bit可以在此位为01b或者10b的时候被更改。

13:11

RW

0h

Arbitration Mechanism Selected(AMS):本字段选择要使用的仲裁机制,只有在CC.EN为0时,此字段才能被改变。Host应该根据CAP.AMS中支持的仲裁类型选择此字段的设置。

Value

Definition

000b

Round Robin

001b

Weighted Round Robin with Urgent Priority Class

010b-110b

Reserved

111b

Vendor Specific

 

10:7

RW

0h

Memory Page Size(MPS):这一部分代表了Host的内存页大小,大小为2^(12+MPS)。因此,最小的内存页大小为4KB,最大是128MB。这个值的大小应该在CAP.MPSMAX和CAP.MPSMIN之间。这一部分也描述了PRP Entry的大小,只有CC.EN为0时,此字段才能被修改。

06:04

RW

0h

I/O Command Set Selected(CSS):这个字段去选择I/O Command使用的I/O Submission Queues。Host应该只选择在CAP.CSS中支持的I/O Command Set。只有CC.EN为0时,次字段能够被修改。

Value

Definition

000b

NVM Command Set

0001b-111b

Reserved

 

03:01

RO

0h

Reserved

00

RW

0

Enable(EN):当设置为1时,Controller可以通过Submission Queue Tail Doorbell的值来读取命令。当设置为0时,Controller不应当处理命令也不应当向Completion Queue中写入Completion。

当这一位从1变为0时,controller应当重启,从起应当删除所有的IO SQ/CQ,重置Admin SQ/CQ,使Hardware处于一个Idle状态。Reset不会影响PCIE Register,也不会影响Admin Queue Register。所有其他的Controller寄存器和内部状态,包括5.21.1的未保存Feature值,都应当被Reset。Controller再重启之前,应该确认所有的已完成的命令没有数据丢失。Reset详情参见7.3。

当这一位清0时,controller一旦准备好被再次使能,那么CSTS.RDY会被清0。当这一位置1时,当Controller准备好处理命令后,CSTS.RDY被设置为1,这个时候Namespace可能还没准备好被存取。

Admin Queue Register(AQA,ASQ,ACQ)只能在CC.EN清0时被修改。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值