v0.1 20170412 felix: init
這篇文件是基於核心linux-v4.10, hisi_sas驅動,介紹phy,port,及其之間的關係。
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則是通用語言。
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也適用。
埠層實際上起從傳輸層到鏈路層的承接作用。乙個或多個phy可以構成乙個埠。
硬碟掛是在port上的,可以共享port下面所有的phy資源。還沒弄清楚,一次傳輸具體是使用哪個phy,或者是說phy的選擇是在邏輯上實現的?
與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()進行繫結。
一次PHY驅動的除錯有感
做為乙個驅動開發工程師,經常會碰到十分坑爹的問題.如果很快解決了還好,若是運氣不好一直找不到思路,那時候真是處理崩潰邊緣.有時候辛辛苦苦除錯了幾個月,最後知道是硬體問題,那時候真的是想罵娘.最近除錯bcm54285這個千兆phy驅動的時候,就悲催的碰到了這種狀況.通過mdio訪問phy晶元暫存器的時...
ftp的port和pasv模式
一 ftp的port和pasv模式的工作方式 ftp使用2個tcp埠,首先是建立乙個命令埠 控制埠 然後再產生乙個資料埠。國內很多教科書都講ftp使用21命令埠和20資料埠,這個應該是教書更新太慢的原因吧。實際上ftp分為主動模式和被動模式兩種,ftp工作在主動模式使用tcp 21和20兩個埠,而工...
SAS巨集中 if else和if else的區別
sas巨集中 if else和if else的區別 data a set x do m 1 to 3 do q 1 to 5 if x q nan and m id and x q id m q then do id m q 1 put 有值 且id相等 id x q id m q 上面 是正常的i...