天天看點

PCIe 複位:Clod reset、warm reset、Hot reset、Function level reset

 PCIe總線規定了兩個複位方式:conventional Reset和FLR (FunctionLevel Reset),而Conventional Reset由進一步分為兩大類:Fundamental Reset和Non-Fundamental Reset。Fundamental Reset方式包括Cold和Warm Reset方式,可以将PCIe将裝置中的絕大多數内部寄存器和内部狀态都恢複成初始值;而Non-FundamentalReset方式為Hot Reset方式。

1.1   傳統複位方式(conventional)

傳統的複位方式分為Cold、Warm和Hot Reset。PCIe裝置可以根據目前的裝置的運作狀态選擇合适的複位方式,PCIe總線提供多種複位方式的主要原因是減小PCIe裝置的複位延時。其中傳統複位方式的延時大于FLR方式。使用傳統複位方式時,Cold  Reset使用的時間最長,而Hot  Reset使用的時間最短。

1.2   Cold Reset

當一個PCIe裝置的Vcc電源上電後,處理器系統将置該裝置的PERST#信号為有效,此時将引發PCIe裝置的複位方式,這種方式屬于Fundamental Reset。PCIe裝置進行Clod Reset時,所有使用Vcc進行供電的寄存器和PCIe端口邏輯将無條件進入初始狀态。但是使用這種方式依然無法複用使用Vaux(備用電源)供電的寄存器和邏輯,這些寄存器和邏輯隻能在處理器完全掉電時徹底複位。

1.3   Warm Reset

在PCIe的裝置完成上電後,也可能重新進行Fundamental Reset,這種複位方式也被稱為Warm Reset。PCIe并沒有定義WarmReset的具體實作方式。

1.4   Hot Reset

當PCIe裝置出現某種異常時,可以使用軟體手段對該裝置進行複位。如系統軟體将Bridge Control Register 的Secondary Bus Reset位置為1,該橋片将secondary總線上的PCI/PCIe裝置進行Hot Reset。CPIe總線将通過TS1和TS2序列對下遊裝置進行Hot Reset。

在TS1和TS2序列中包含一個Hot Reset位。當下遊裝置收到一個TS1和TS2序列,而且Hot Reset位為1時,下遊裝置将使用HotReset方式進行複位操作。

    HotReset方式并不屬于FundamentalReset。PCIe裝置進行Hot Reset方式時,也可以将PCIe裝置的多數寄存器和狀态恢複為初始值。

同時,在PCIe總線中,如果需要對鍊路的Link Width進行改變時,也将會用到Hot Reset。具體的流程如下:

1. Ensurethe Link is in the L0 LTSSM state

2. Program the 6-bit “Link Mode Enable” field of the “Port LinkControl Register” on page 732. This isusedby the LTSSM in DETECT

3. Programthe 9-bit “Predetermined Number of Lanes” field of the “Gen2 Control Register” on

page 771. Thisindicates to the LTSSM, the number of lanes to check for exiting from L2.IDLE or

POLLING.ACTIVE

4. Trigger aHot Reset, by setting the Secondary Bus Reset bit in the RC Bridge ControlRegister (of the Type 1 PCI Configuration Space Header) to 1

5. Wait for2 mS. The core’s LTSSM will transition from L0 -> RCVRY -> HOTRESET

6. Clear theSecondary Bus Reset bit. The core’s LTSSM will transition from HOTRESET -> DETECT

1.5   FLR(Function Level Reset)

      除了傳統的複位方式之外,PCIe總線還提供了FLR方式。系統軟體通過填寫某些寄存器,如synosys 的PCIe的IP是可以PCIeExpress Capability 的Device Control Register的第16bit完成FLR。支援FLR方式的PCIe裝置需要在其BAR空間中提供一個寄存器,當系統軟體對該寄存器的Function LevelReset位寫1時,PCIe裝置将使用FLR方式複位PCIe裝置的内部邏輯。FLR方式對PCIe裝置是可選的。

       在一個大規模的并行處理系統中,系統軟體使用分區的概念管理是以硬體資源,包括處理器資源和是以IO資源,這些IO資源中通常會包含PCIe裝置。在這種處理器系統中,任務在指定的分區中運作,當這個任務執行完畢後,系統軟體需要調整硬體資源的分區。此時受到影響的PCIe裝置需要使用FLR方式複位内部的邏輯,以免造成對新的分區的資源污染,并保護之前任務的結果。

當PCIe裝置使用FLR方式進行複位時,有些與PCIe鍊路相關的狀态和寄存器并不會被複位:

Ø  Sticky Registers。與傳統的複位方式相同,FLR方式不能複位這些寄存器,但是系統軟體對部分Sticky Registers進行修改。當Vaux(備用電源)被移除後,這些寄存器中的儲存的資料才會丢失。

Ø  HwIint類型的寄存器。在PCIe裝置中,有效配置寄存器的屬性為HwIint,這些寄存器的值由晶片的配置引腳決定,後者上電複位後從EEPROM中擷取。Cold和Warm Reset可以複位這些寄存器,然後從EEPROM中從新擷取資料,但是使用FLR方式不能複位這些寄存器。

Ø  此外,還有一些特殊的配置寄存器不能被FLR方式複位,如Max_Payload_Size、RCB和一些與電源管理、流量控制和鍊路控制直接相關的寄存器。

Ø  FLR方式不會影響LTSSM狀态機。

以上内容大部分為王齊老師《PCI Express 體系結構導讀》中摘錄。

本文轉載:https://blog.csdn.net/yijingjijng/article/details/48246593

繼續閱讀