SAS驅動中PHY和PORT的介紹

SAS驅動中PHY和PORT的介紹

v0.1 20170412 Felix: Init

這篇文檔是基於內核Linux-v4.10, hisi_sas驅動,介紹phy,port,及其之間的關係。

1、PHY的介紹

1.1、整體理解PHY

SAS協議共有6層,從上到下依次爲: 應用層(application layer), 傳輸層(transport layer),端口層(port layer), 鏈路層(link layer), phy層(phy layer), 物理層(physical layer)。

PHY層定義了8b10b編碼和解碼方式、組成dwords、OOB信號、PHY reset以及速率協商等過程。PHY層的主要作用是實現phy reset系列以及dword的同步。

8b10b編解碼:目的是”直流平衡”,爲的是不出現大量連續的0和1.
Dwords: 有4個字符組成。
OOB信號:是一個不出現在數據幀中的低速信號。包括COMMINIT、COMSAS、COMWAKE三種信號。其中COMWAKE用於SATA與SATA設備、SATA與SAS設備,COMSAS用於SAS設備之間的交互,COMMINIT則是通用語言。

1.2、軟件是怎麼定義PHY

libsas層的phy定義成struct asd_sas_phy。
LLDD層的phy則是對libsas phy做了封裝,定義成struct hisi_sas_phy。

SAS控制器一般支持8個PHY,放在hisi_hba中,HBA初始化的時候統一分配內存,並初始化。在phyup中斷後,會找一個port進行綁定。phydown之後,則與port解綁定。
8個PHY對應的asd_sas_phy及hisi_sas_phy內存是固定的,PHY的下標(0~7)就存在asd_sas_phy中。

小竅門:所有libsas接口用到的phy,都是struct asd_sas_phy,對port也適用。

2.PORT的介紹

1.1、整體理解PORT

端口層實際上起從傳輸層到鏈路層的承接作用。一個或多個phy可以構成一個端口。
硬盤掛是在port上的,可以共享port下面所有的phy資源。還沒弄清楚,一次傳輸具體是使用哪個phy,或者是說phy的選擇是在邏輯上實現的?

2.2、軟件是怎麼定義PORT

與phy的定義類似:
libsas層的port定義成struct asd_sas_port。
LLDD層的port則是對libsas port做了封裝,定義成struct hisi_sas_port。

HBA初始化的時候也分配了8個port的內存,都標記爲未使用,sas_form_port會爲新上來的phy分配port,並調用lldd_port_form()進行綁定。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章