首页 理论教育PCIExpress状态迁移考析

PCIExpress状态迁移考析

【摘要】:如图8-16所示,PCIe设备可以进行D-State的状态迁移。大多数D-State的状态迁移都是系统软件通过修改PMCSR寄存器的PowerState字段实现的,但是仍然有些状态迁移采用了其他方式。表8-3 D-State状态与PCIe链路状态的对应关系由上表可以发现,上游设备所处的D-State等级小于或等于下游设备的休眠等级。PCIe设备其他D-State状态的迁移过程与此大同小异,详见PCIe总线规范,本节对此不做进一步描述。

如图8-16所示,PCIe设备可以进行D-State的状态迁移。大多数D-State的状态迁移都是系统软件通过修改PMCSR寄存器的PowerState字段实现的,但是仍然有些状态迁移采用了其他方式。

●使能Command寄存器的命令位,可以使设备从D0uninitializated状态迁移到D0active状态。

●PCIe设备的Vcc被移除时,D3hot状态将迁移到D3cold状态。

●当PCIe被唤醒,Vcc重新上电之后,PCIe设备将从D3cold状态迁移到D0uninitializated状态。

当PCIe设备进行D-State状态迁移时,PCIe链路的状态也可能随之变化。PCIe设备的D-State状态与PCIe链路状态的对应关系如表8-3所示。

表8-3 D-State状态与PCIe链路状态的对应关系

978-7-111-29822-9-Part02-112.jpg

由上表可以发现,上游设备所处的D-State等级小于或等于下游设备的休眠等级。如下游设备处于D1状态时,上游设备不能处于比D1更高的休眠等级,如D2或者D3状态。

当设备处于D0~D3cold状态时,ASPM机制可以根据链路的使用情况进行链路状态的迁移,而无需软件的干预。下文以PCIe设备从D0迁移到D1说明D-State进行状态迁移时,PCIe链路如何进行状态迁移。

当系统软件修改PMCSR寄存器的Power State字段,将PCIe设备从D0迁移到D1状态时,上游设备与下游设备将协调工作,完成PCIe设备的状态切换,并改变链路的状态,其实现过程如图8-17所示。

978-7-111-29822-9-Part02-113.jpg(www.chuimin.cn)

图8-17 PCIe设备从D0到D1的状态迁移

(1)上游设备向下游设备发送配置写请求,改变下游设备PMCSR寄存器的Power State字段,从而使下游设备从D0状态迁移到D1状态。

(2)下游设备收到这个配置写请求TLP后,将改变PMCSR寄存器的Power State字段,并向上游设备发送配置写完成TLP。这个配置写完成TLP首先需要经过数据链路层,并从对端获得足够的发送Credit[59]后,将这个配置写完成TLP通过数据链路层发送到对端。

(3)下游设备的事务层收到数据链路层的确认后,得知配置写完成TLP已经被上游设备正确接收后(详见ACK/NAK协议),将挂起下游设备的事务层。并向上游设备连续发送PM_Enter_L1 DLLP,同时等待来自上游设备的PM_Request_Ack报文。

(4)上游设备收到下游设备的PM_Enter_L1 DLLP后,首先禁止发送新的TLP,并等待之前发送的Non-Post TLP得到确认后,挂起上游设备的事务层,并向下游设备连续发送PM_Request_Ack DLLP。

(5)下游设备在没有收到上游设备的PM_Request_Ack DLLP之前,虽然事务层已经被挂起,但是数据链路层和物理层仍然可以正常工作,此时数据链路层可以正确接收来自上游端口的DLLP,并发送ACK/NAK和流量控制相关的一些DLLP。

(6)当下游设备收到PM_Request_Ack DLLP后,将停止发送PM_Enter_L1 DLLP,挂起数据链路层,然后将物理层置为Electrical Idle状态。

(7)上游设备发现其接收链路处于Electrical Idle状态时,将停止发送PM_Request_Ack DLLP,并挂起数据链路层,然后将物理层置为Electrical Idle状态。此时PCIe链路将进入L1状态。

当PCIe链路处于L1状态时,如果系统软件需要改变下游PCIe设备PMCSR寄存器的Power State字段,PCIe链路需要首先从L1状态迁移到正常工作状态L0,下游设备才能接收这个配置写请求TLP。

PCIe设备其他D-State状态的迁移过程与此大同小异,详见PCIe总线规范,本节对此不做进一步描述。