《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 業(yè)界動態(tài) > Keystone I 以太網(wǎng)子系統(tǒng)調(diào)試手冊

Keystone I 以太網(wǎng)子系統(tǒng)調(diào)試手冊

2015-05-22

  摘要
  Keystone I 系列芯片 (C6670,C6671,C6672,C6674,C6678, TCI6614) 的以太網(wǎng)子系統(tǒng)可以劃分為三個功能實體:內(nèi)部Switch(SGMII Serdes/SGMII/EMAC/CPSW), PA(包加速器),SA(安全加速器)。 該子系統(tǒng)因為包含的子模塊多,相對較為復(fù)雜,相關(guān)的四本用戶手冊內(nèi)容組織并不是很容易理解,不少用戶在開發(fā)過程中都遇到了一些技術(shù)難題。本手冊總結(jié)實際應(yīng)用中遇到的部分典型的技術(shù)問題和各種問題的調(diào)試方法,同時也提供以太網(wǎng)子系統(tǒng)的各種實用配置和建議。對于具備基本Keystone I 以太網(wǎng)知識的用戶,本手冊可以作為用戶手冊的有力補充。 期望讀者在初步閱讀user guide 和具備基本的PA LLD/SA LLD 開發(fā)經(jīng)驗以后再查閱本文。
  1.  以太網(wǎng)子系統(tǒng)說明
 

QQ截圖20150522194719.png

  在用戶手冊中,以太網(wǎng)子系統(tǒng)可以稱為網(wǎng)絡(luò)協(xié)處理器子系統(tǒng)(NETCP),其主要構(gòu)成模塊有:
  1.以太網(wǎng)交換部分
  主要模塊有Serdes,SGMII, EMAC,三端口交換機等
  2.包加速器
  主要模塊有6 個PDSP,3 個一級的查找表,1 個二級的查找表,對應(yīng)的Packet DMA 等
  3.安全加速器
  主要模塊有2 個PDSP,加解密和鑒權(quán)引擎等
  注意:
  以太網(wǎng)子系統(tǒng)的整個初始化過程,一般推薦采用從內(nèi)到外的次序:
  PA PAKET DMA->PA PDSP->3 port switch/CPSW->EMAC->SGMII->SGMII Serdes
  2.  SGMII
  2.1 SGMII SerDes 配置
  Serdes 的配置主要與供給的Serdes 時鐘相關(guān),下面給出一個對應(yīng)不同時鐘頻率的配置示例:
  312.5MHz-> SGMII PLL Configuration Register 0x41,
  250MHz-> SGMII PLL Configuration Register 0x51,
  156.25MHz-> SGMII PLL Configuration Register 0x81
  配置完畢以后,請注意檢查SGMII SerDes Status Register (SGMII_SERDES_STS)的最低Lock 位是否為1。
  2.2 SGMII 與PHY的連接
  當(dāng)SGMII 與PHY 連接的時候,SGMII 一定是Slave 模式,一般情況下同時使能自協(xié)商。
  2.3 SGMII 與Switch的連接
  對于支持 SGMII 標準的外部 switch 與 Keystone I 芯片連接的時候,可以一端配置為master,另一端配置為slave,同時使能自協(xié)商模式。但是對于只支持1000BASE-X 的switch 與Keystone I 芯片連接的時候,應(yīng)該將兩端都設(shè)置為master 模式,并禁止自協(xié)商,強制為1000M 全雙工。
  2.4 MDIO接口與PHY的控制
  通過MDIO 控制寄存器MDIO_CONTROL 可以對外接的PHY 進行控制,按照用戶手冊的建議配置到2.5MHz。需要注意的是:
  1.MDIO 模塊初始化后,應(yīng)該先通過MDIO 讀取PHY 的ID 寄存器,確認該連接是否正常。
  2.讀取MDIO 模塊的PHY Alive Status Register (ALIVE)獲取PHY ID (注意PHY ID 是0~31)
  3.將第二步讀到的PHY ID 作為PHY address  寫到MDIO User Access Register 0 (USERACCESS0)或者MDIO User Access Register 1 (USERACCESS1)中訪問對應(yīng)的PHY 寄存器
  2.5 1000M半雙工的問題說明
  Keystone I 不支持1000M 半雙工的應(yīng)用,當(dāng)外接的PHY 或者是switch 支持1000M 半雙工時,可能會對keystone I 的網(wǎng)絡(luò)功能造成影響。特別是當(dāng)某些PHY 在復(fù)位過程中,可能會發(fā)起1000M 半雙工的請求,這種情況下,請在系統(tǒng)上電初始化時先通過MDIO 接口關(guān)閉PHY 的1000M 半雙工協(xié)商能力。
  3.  EMAC
  3.1 VLAN aware模式和VLAN unaware模式
  1.VLAN unaware 模式下所有的包不會被改變
  2.VLAN aware 模式的配置步驟:
  A.配置GbE switch Control 寄存器(CPSW_CONTROL)的VLAN_AWARE 比特
  B.配置ALE Control 寄存器(ALE_CONTROL)的ALE_VLAN_AWARE 比特
  C.配置P0_PORT_VLAN, P1_PORT_VLAN 和P2_PORT_VLAN 寄存器
  3.VLAN aware 模式對不同包的不同策略:
  A.對于untagged 包,插入端口所配置的VLAN 頭
  B.對于priority tagged 包,根據(jù)CPSW_CONTROL 中的 P0_PASS_PRI_TAGGED/P1_PASS_PRI_TAGGED/P2_PASS_PRI_TAGGED  配置,如果該位為 0(default),則該端口上收到的priority tagged 包中的VLAN ID 會被替換為該端口配置的VLAN ID。
  C.對于VLAN tagged 包,包中的VLAN 優(yōu)先級會被替換為該端口配置的VLAN 優(yōu)先級,VLAN ID 不變。
  3.2    EMAC 的復(fù)位
  EMAC 模塊提供了一個軟復(fù)位的寄存器,一般情況下在芯片上電復(fù)位啟動后,不建議使用該寄存器對EMAC 模塊做單獨的復(fù)位操作,該復(fù)位操作后可能會引起以太網(wǎng)包收發(fā)異常,請謹慎使用。
  3.3    MAC地址的說明
  對于Keystone I 的芯片來說,一般可以配置3 個MAC 地址。以C6678 為例,
  MACID1 (0x02620110) 和MACID2 (0x02600114)
  該MAC 地址是出廠時,TI 寫到芯片的Efuse 里的,類似于一個芯片ID,只讀不可修改。如果芯片選擇以太網(wǎng)boot 方式,芯片會以該地址發(fā)出bootp 的報文(Ethernet ready announcement)
  MAC1_SA_LO (0x2090870)和MAC1_SA_HI (0x2090874)
  MAC2_SA_LO (0x20908A0)和MAC2_SA_HI (0x20908A4)
  以上兩個MAC 地址是分別配置給兩個EMAC 端口的,但該地址的作用僅限于使能以太網(wǎng)Rx 流控以后,封裝發(fā)到網(wǎng)絡(luò)上的流控幀,并不按MAC 地址過濾以太網(wǎng)包。
  因為Keystone 芯片有包加速器(PA),MAC 地址的過濾應(yīng)該由配置PA 來完成,所以可以認為Keystone I 的EMAC 模塊工作在混雜模式(Promiscuous mode)。 換句話講,所有的報文都會接收并到PA 進行過濾,從業(yè)務(wù)層面,對于一顆Keystone I 的芯片理論上最大可以配置64 個MAC 地址(LUT1-0 有64個表項)。
  4.  CPSW
  4.1 ALE 模塊的注意事項
  4.1.1 MAC地址的老化問題
  因為 ALE 只有 1K 個表項,且硬件沒有提供內(nèi)部的 timer 來自動維護一個老化周期,所以應(yīng)用程序需要自己維護一個 timer。 Time 第一次超時,應(yīng)用程序?qū)LE_CONTROL 寄存器的AGE_OUT_NOW 比特置位,會導(dǎo)致所有ageable  的ALE Entry 被設(shè)置為untouched;  第二次timer 超時,再次設(shè)置ALE_CONTROL 寄存器的 AGE_OUT_NOW 比特,在兩次超時之間仍保持為 untouched 的表項將會被清除。如果在兩次超時之間,有包交換并重新touched 的表項將會被保留。
  4.1.2 ALE Bypass
  設(shè)置 ALE bypass 只是表明從網(wǎng)絡(luò)外發(fā)到芯片的包,將不會通過查找 ALE 再交換,而是無條件發(fā)送到HOST port。 而從HOST port 發(fā)送到外部的網(wǎng)絡(luò)的包仍然要通過ALE 交換。
  4.1.3 未知的單播,多播,廣播包
  1.在某一個端口收到的,ALE 中無法匹配的多播和廣播包會被廣播到另兩個端口。
  2.在HOST 端口收到的,ALE 中無法匹配的單播包,會被發(fā)送到兩個SGMII 端口。
  3.在某SGMII 端口收到的,ALE 中無法匹配的單播包,只會被發(fā)送另一個SGMII 端口。
  4.2 以太網(wǎng)子系統(tǒng)環(huán)回配置及其應(yīng)用
  

QQ截圖20150522200804.png

  以太網(wǎng)子系統(tǒng)提供如圖的SGMII Serdes 環(huán)回,SGMII digital 環(huán)回,CPSW FIFO 環(huán)回。
  注意環(huán)回的方向,SerDes 環(huán)回,SGMII digital 環(huán)回和CPSW FIFO 環(huán)回都有內(nèi)環(huán)的功能,也就是芯片內(nèi)的CPU(包括DSP core, ARM core)向外發(fā)的包會被環(huán)回到芯片。因為發(fā)生環(huán)回的節(jié)點不一樣,所以可以利用這幾種環(huán)回來定位以太網(wǎng)配置問題。示例:
  1.CPSWFIFO 環(huán)回成功,而Serdes 環(huán)回和digital 環(huán)回失敗,基本可以判定EMAC/SGMII 配置有問題
  2.CPSWFIFO 環(huán)回和digital 環(huán)回成功,而Serdes 環(huán)回失敗,基本可以判定SGMII Serdes 配置有問題
  3.CPSWFIFO 環(huán)回,digital 環(huán)回和CPSW FIFO 環(huán)回都成功,說明CPSW 以下層的配置在基本是正確的
  CPSW FIFO 環(huán)回還包含了外環(huán)的功能,也就是從外部網(wǎng)絡(luò)(PHY/Switch)進入芯片的包會被環(huán)回到外部網(wǎng)絡(luò),芯片內(nèi)的 CPU core 將無法收到這些包。這個功能可以用以判定 PHY/switch 與keystone I 的連接配置是否正確。注意CPSW FIFO 環(huán)回只能用于debug, 使能以后不能動態(tài)的去使能,也就是說使能以后若想恢復(fù)正常狀態(tài),必須對整個SoC 下電,重新上電復(fù)位。
  4.3 以太網(wǎng)流控
  Rx 流控的意義是CPSW 檢測到FIFO 超過一定的門限以后,該端口主動向網(wǎng)絡(luò)外發(fā)出以太網(wǎng)流控幀。該流控幀的發(fā)送量是30pps。
  Tx 流控的意義是CPSW 檢測到網(wǎng)絡(luò)對端發(fā)出的流控幀,報告給HOST(DSP/ARM),由HOST 軟件來裁決減少發(fā)送的網(wǎng)絡(luò)流量。
  需要注意的是,如果Rx FIFO 的占用情況一直滿足Rx 流控的檢測條件,Rx flow control 幀會不斷的發(fā)送到網(wǎng)絡(luò)上,這種情況多出現(xiàn)在上層軟件或者PA/SA 出現(xiàn)某種異常的場景下。
  4.4 CPSW的統(tǒng)計寄存器
  1.寄存器實際都是R/W 屬性,比如當(dāng)你讀到一個寄存器的值為0x80,回寫大于0x80 的數(shù)字,會導(dǎo)致該寄存器的值清0。 實際對該組寄存器的寫操作是減法關(guān)系,如果該寄存器正在動態(tài)變化中,對它進行寫操作并不會導(dǎo)致統(tǒng)計值的丟失。比如當(dāng)你讀到一個寄存器的值為0x80,回寫0x80 的時刻該寄存器實際的值已經(jīng)變?yōu)?x90(因為該時刻有包的收發(fā)),則此時寫0x80 的結(jié)果是該寄存器的值變?yōu)?x90-0x80=0x10。
  2.CPSW 的統(tǒng)計寄存器有兩組,其中STATA 是對應(yīng)于HOST port, STATB 是兩個SGMII port 的和
  3.對于統(tǒng)計寄存器中的Rx,Tx 分別都是站在CPSW 模塊的角度統(tǒng)計的結(jié)果,換句話說,統(tǒng)計STATA中的Rx 表示的是HOST port 從DSP/ARM cores 收進CPSW 的包,Tx 表示的是從HOST port 發(fā)出CPSW 到DSP/ARM core 的包;而統(tǒng)計STATB 中的Rx 表示的是兩個SGMII 端口從網(wǎng)絡(luò)收進來的包,Tx 表示的是從兩個SGMII 端口發(fā)送到外部網(wǎng)絡(luò)的包。
  簡單的示例:
  1)如果一個包從網(wǎng)絡(luò)外發(fā)送到Keystone I 芯片,DSP/ARM core 沒有收到
  A.檢查STATB 的Rx 寄存器
  B.檢查STATA 的TX 寄存器
  2)如果一個包從DSP/ARM core 發(fā)送到網(wǎng)絡(luò)外,網(wǎng)絡(luò)上沒有收到
  A.檢查STATA 的Rx 寄存器
  B.檢查STATB 的TX 寄存器
  4.一般情況下RXSOFOVERRUNS/ RXMOFOVERRUNS/ RXDMAOVERRUNS 寄存器都為0,在某些特定條件下,如以太網(wǎng)子系統(tǒng)reset 過程中收到包,這些寄存器出現(xiàn)較小的值且不增加是正常的。但如果這些寄存器出現(xiàn)不斷增加且收包流量并不大,這種情況一般說明以太網(wǎng)收包異常,通常異常是由于收包的軟件模塊異?;蛘逷A 子系統(tǒng)異常造成的。
  4.5   802.1P VLAN QoS 的配置
  

QQ截圖20150522200902.png

  每個CPSW EMAC 端口都有收發(fā)的 FIFO,收發(fā)的總memory 數(shù)為20 個4K block。  Rx/Tx 的收發(fā)block數(shù)可以通過P1_MAX_BLKS 和P2_MAX_BLKS 寄存器配置。其中Tx FIFO 分為四個 優(yōu)先級隊列(priority queue),優(yōu)先級0 到3,其中3 的優(yōu)先級最高。配置過程為:
  1.配置packet priority to header packet priority mapping register(P0_RX_PRI_MAP 和兩個EMAC 的 MAC_RX_PRI_MAP),將實際的VLAN 包的8 個優(yōu)先級映射到芯片內(nèi)部包頭的優(yōu)先級
  2.配置header priority to switch priority mapping register (P1_TX_PRI_MAP 和P2_TX_PRI_MAP),將內(nèi)部包頭的優(yōu)先級映射到4 個優(yōu)先級隊列
  注意:
  a.對于untagged VLAN包,映射所要用的VLAN優(yōu)先級將使用端口的VLAN優(yōu)先級。在P0_PORT_VLAN, P1_PORT_VLAN和P2_PORT_VLAN寄存器中配置
  b.當(dāng)只使用0~3四個優(yōu)先級隊列中的部分時,必須從優(yōu)先級最高的隊列3開始分配。比如只使用兩個隊列,則應(yīng)該用3和2。
  c.端口0代表HOST port,端口0收到的包都會通過ALE交換后從兩個EMAC端口發(fā)送出去,所以端口0只需要配置packet priority to header packet priority mapping register,而沒有header priority to switch priority mapping register。
  下面是三個VLAN映射的示例:

QQ截圖20150522201001.png

  5.  PA
  5.1 PA PLL配置
  根據(jù)data sheet(參考SPRS671D TMS320TCI6614  Data Manual Figure 8-25 PASS PLL Block Diagram), PA 子系統(tǒng)的時鐘可以選擇兩個來源,一個是PASS PLLOUT,另一個是從SYSCLK1 固定的三分頻。當(dāng)芯片的主頻配置為1GHz 時,如果選擇SYSCLK1,則PA 子系統(tǒng)工作頻率是333MHz,可以選擇PASS PLLOUT 方式,通過PA PLL 配置子系統(tǒng)工作于350MHz。 但是對于主頻為1.2GHz 的芯片,只能選擇PASS PLLOUT 方式,通過PA PLL 配置子系統(tǒng)工作于350MHz,不能支持SYSCLK1 三分頻到400MHz。
  5.2   PA的Packet DMA模塊
  1.PA 的packet DMA 模塊有9 個Tx 通道和24 個Rx channel,注意這些通道在硬件上都有固定的映射關(guān)系,請在使能PA 子系統(tǒng)的時候,使能所有的通道。
  2.PA 的packet DMA 模塊有32 個Rx flow。    實際應(yīng)用中經(jīng)常見到做法是所有用到Rx Flow/FDQ  的地方都配置同一個 Rx Flow/FDQ,這樣的做法雖然最簡單,但是一旦出現(xiàn)問題則很容易導(dǎo)致該 FDQ的描述符迅速耗盡,而且很難定位導(dǎo)致問題的點。
  3.一般來說在 PA 與其他的硬件模塊(特別是 SA)數(shù)據(jù)交互過程都非常的快,而 PA 將分類好的數(shù)據(jù)交給 HOST queue,因為有軟件的處理所以較慢。故而推薦分開靈活配置不同的 Rx Flow(FDQ): 硬件模塊交互間的 FDQ 一般包含 16 個描述符/buffer 就足夠了,而最后到 HOST queue 的 Rx Flow/FDQ 可以根據(jù)實際軟件的處理速度來配置更多的個描述符/buffer。
  4.分開配置不同的Rx Flow/FDQ 帶來的另一個好處是,配置到HOST queue 的RX flow/FDQ 里的描述符耗盡,也不會影響到硬件的處理。而且因為FDQ 根據(jù)不同的功能和包處理流程做了不同的配置,在定位某些網(wǎng)絡(luò)處理問題的時候更加容易。比如在某一個FDQ 里的描述符用盡時,基本可以確定是該級的相關(guān)模塊處理的問題,更容易縮小問題定位的范圍。
  下面是兩個的配置實例:
  IPSec ESP 隧道模式
  1.當(dāng) PDSP1 根據(jù) IPSec ESP  的 SPI 將包分類并路由到 SA 的時候,將需要一個 Rx Flow 的配置(在LUT1-1 的配置),假定配置為Rx Flow No.1 (FDQ No.1000,包含空閑描述符/buffer 16 個) 。
  2.當(dāng)SA 對IPSec ESP 報文解密完畢,并送到PDSP2 做內(nèi)層IP 分類的時候,配置Rx Flow No.2 (FDQ No.1001,包含空閑描述符/buffer 16 個) 。
  3.當(dāng)PDSP3 做完L4/L5 分類以后,將包送到HOST queue 時配置Rx Flow No.3  (FDQ No.1002,包含空閑描述符/buffer  8K 個)。
  IPSec AH+ESP 隧道模式
  1.當(dāng) PDSP1 根據(jù) IPSec AH  的 SPI 將包分類并路由到 SA 的時候,將需要一個 Rx Flow 的配置(在LUT1-1 的配置),假定配置為Rx Flow No.1 (FDQ No.1000,包含空閑描述符/buffer 16 個) 。
  2.當(dāng)SA 對IPSec AH 報文鑒權(quán)校驗完畢,并送回PDSP1 做IPSec ESP SPI 分類的時候,配置Rx Flow No.4 (FDQ No.1003,包含空閑描述符/buffer 16 個)。
  3.當(dāng)PDSP1 根據(jù)IPSec ESP 的SPI 將包分類并路由到SA 的時候,配置Rx Flow No.1 (FDQ No.1000,包含空閑描述符/buffer 16 個) 。
  4.當(dāng)SA 對IPSec ESP 報文解密完畢,并送到PDSP2 做內(nèi)層IP 分類的時候,配置Rx Flow No.2 (FDQ No.1001,包含空閑描述符/buffer 16 個) 。
  5.當(dāng)PDSP3 做完L4/L5 分類以后,將包送到HOST queue 時配置Rx Flow No.3 (FDQ No.1002,包含空閑描述符/buffer 8K 個) 。
  為了更好的定位在開發(fā)過程中遇到的網(wǎng)絡(luò)問題,比如丟包,packet DMA 隊列卡死,描述符丟失等等,推薦在應(yīng)用軟件側(cè)做一些描述符的輔助定位手段:
  1.當(dāng)描述符初始化以后,記錄下所有的描述符首指針。
  2.查詢/掃描PA Packet DMA Tx 隊列No. 640~648 中描述符個數(shù)
  3.當(dāng)發(fā)現(xiàn)隊列No. 640~648 隊列中有包擁塞時(正常情況下該隊列中的描述符個數(shù)不會超過64 個),停止包的收發(fā)
  4.將在步驟1 記錄的描述符地址與FDQ 殘留的和隊列No. 640~648 隊列中擁塞的做比較
  5.發(fā)現(xiàn)丟失的描述符,并檢查其內(nèi)容,特別是檢查是否有描述符的packet length 超過其鏈接的所有分片的buffer length 總和的情況

QQ截圖20150522201045.png

  5.3 PA Bypass
  芯片可以配置為bypass 整個PA 子系統(tǒng)。PA bypass 的實質(zhì)是忽略所有的PA 模塊(PDSP/LUT)的處理,從SGMII 端口收到的包經(jīng)過內(nèi)部的packet stream switch 直接通過PA PKTDMA 模塊傳輸?shù)紿OST queue。 其配置過程為:
  1.配置CPSW Configuration Register (CPSW_CFG_REG)為0x606(參考sprugz6 Network Coprocessor (NETCP) User Guide)
  2.初始化并配置PA Packet DMA 模塊
  3.配置PA Packet DMA 的Rx flow No.22 和Rx flow No.23,其中Rx flow No.22 中的destination queue代表了從SGMII0 收到的包所要放到的目的隊列,Rx flow No.23 中的destination queue 代表了從SGMII1收到的包所要放到的目的隊列。
  注意:PA bypass 以后,由于所有的包未經(jīng)過PA 子系統(tǒng)的過濾直接進入到HOST 隊列中,流量較大的情況下,很容易造成FDQ 的描述符耗盡。而且容易造成軟件協(xié)議棧loading 過高,容易遭受網(wǎng)絡(luò)攻擊。另由于在芯片設(shè)計中,PA 可以直接與SA 進行數(shù)據(jù)傳輸,特別是在from network 方向上對加密的包進行解密以后在送到HOST queue,而 PA bypass 以后,對于加密包的解密處理將增加HOST 側(cè)的CPU 負荷。
  5.4 PA的固件和Low level driver
  PA 的固件有三個文件,位于PDK 安裝目錄\pdk_C6678_x_x_x_xx\packages\ti\drv\pa\fw (x_x_x_xx 為版本號) ,PDSP0~PDSP2 共用一個文件(classify1_bin.c),PDSP3 用一個文件(classify2_bin.c),PDSP4 和PDSP5 共用一個文件(pam_bin.c)。PA 子系統(tǒng)運行于大端序,所以固件都是大端序。 注意固件版本和 LLD 版本一定要一致。固件的版本號可以從上述 C 文件的數(shù)組中讀到,第三個 32  bit WORD 就是版本號。
  如上例固件版本號為1.3.0.7
  PA LLD 的版本號可以從 PA LLD 安裝目錄的 paver.h 中得到 (PA_LLD_VERSION_ID 和PA_LLD_VERSION_STR) 。
  PA LLD 中的函數(shù)Pa_downloadImage 是下載PDSP 固件的,注意其中每個PDSP 的常量表定義pap_pdsp_const_reg_map,不同的版本這些值可能不同。對于某些有ARM core 的Keystone I 芯片,該常量表不是通過 PA LLD 函數(shù)來賦值而是Linux kernel 代碼直接賦值的,所以必須跟各個版本的固件對應(yīng)。如果常量表和固件,LLD 的版本不匹配,可能會有某些功能異常。
  5.5 PA LUT1表項增加的策略
  LUT1 是線性查找表,也就說,配置的表項從下標No. 0 一直找到No.63。 因為不同的表項內(nèi)容間可能有包含關(guān)系,比如某一項A 只要求匹配目的IP 地址,另一項B 配置了同樣的目的IP 地址,同時也配置了源IP 地址。這樣其實是B 的條件比A 更加嚴格,那么嚴格的表項B 應(yīng)該比寬松的A 下標小。比如配置A 在No.1, B 在No.0, 只有這樣B 才能有被匹配的可能性。
  注意:PA LLD 提供的函數(shù)如Pa_addIp,Pa_addMac 等,都提供了不指定下標的方式添加表項,函數(shù)的參數(shù)為不指定下標的時候,PA LLD 的處理為從下標較大的開始添加。例如當(dāng)某個64 表項的表為空,而兩次調(diào)用Pa_addIp 添加表項并不指定表項位置的時候,第一次添加的表項在No.63 的位置,第二次添加的表項在No.62 位置。
  5.6 PA相關(guān)的調(diào)式
  5.6.1 Device simulator 輔助調(diào)試
  由于PA 子系統(tǒng)主要由硬件模塊組成,提供的寄存器有限,對于復(fù)雜的功能來說,調(diào)試相對比較困難。但是TI 的芯片simulator 上對該子系統(tǒng)進行了充分的支持,在初期開發(fā)階段,simulator上調(diào)試PA 更加方便。
  下面是一個在TCI6608 的simulator 上使能PA 調(diào)試和Log 輸出的例子:
  1.CCS 安裝路徑\simulation_csp_ny\bin\configurations\tisim_tci6608_pv.cfg 如果該行被注釋,請解注釋     INPUT5 log_file,      pass.log;
  2.在軟件初始化中加入下面的代碼

QQ截圖20150522201133.png

  3.上兩步的初始化過程將在simulator 的安裝路徑(如CCS 安裝路徑
  \simulation_csp_ny\env\ccs\drivers\pass.log)下產(chǎn)生名為Pass.log 的詳細log 文件
  該文件包含LUT 表項的添加過程,LUT 表項每一級的匹配過程等等詳細的內(nèi)容。
  注意這個方法非常適合診斷某些包未按照預(yù)想的規(guī)則匹配/路由的情況,軟件只需要將測試包發(fā)到640 隊列(忽略以太網(wǎng)子系統(tǒng)其他的模塊的初始化過程)就可以開始測試。但是對于發(fā)包量比較大的測試,產(chǎn)生的Log 文件可能過于龐大。
  5.6.2 PA子系統(tǒng)提供的系統(tǒng)統(tǒng)計
  用PA LLD 提供的Pa_requestStats 和Pa_formatStatsReply 函數(shù)可以提取PA 子系統(tǒng)給出的統(tǒng)計計數(shù)器,這些統(tǒng)計計數(shù)器在系統(tǒng)運行過程中可以診斷部分的包匹配,包錯誤等問題。下面是對這些計數(shù)器的詳細說明。

QQ截圖20150522201214.png

  5.6.3 輔助調(diào)試的寄存器
  利用PDSP所提供的一些輔助計數(shù)器/寄存器可以更容易的在運行時定位問題。比如下面的計數(shù)器
  0x2000000 + 0x10*n PDSPn 收到的包數(shù)(包括配置命令和數(shù)據(jù)包)
  0x2000008 + 0x10*n PDSPn收到的配置命令數(shù)
  舉例說明其用法:
  1.如果讀到0x2000000為0xa,0x2000008為0x1,代表PDSP0收到了9個數(shù)據(jù)包和1個配置命令
  2.在第一步的基礎(chǔ)上繼續(xù)讀到 0x2000010為0x3,0x2000018為0x1, 代表PDSP1收到了2個數(shù)據(jù)包和1個配置命令
  3.根據(jù)前兩步的結(jié)果,我們可以知道,有2個數(shù)據(jù)包在PDSP0收到后繼續(xù)傳給了PDSP1
  

QQ截圖20150522201250.png

  PDSP control register: PDSP 寄存器,控制PDSP 的運行狀態(tài)。
  PDSP status register: PDSP 狀態(tài)寄存器,其實是PDSP 固件的PC 值,該值不恒定,如果該值一直不變化,可以確定是PDSP 固件crash。
  PDSP instruction RAM: PDSP 指令空間,設(shè)置PDSP control register 為1,可以將PDSP halt,同時查看PDSP 的指令空間。在某些功能異常的時候,可以回讀PDSP 指令空間,特別是固件的版本號,看看是否與期望的一致。
  PDSP debug register: PDSP 的調(diào)試寄存器。
  LUT table bit map: 查找表的占用狀態(tài)。每個查找表的表項在占用后,PDSP 都會對該表項對應(yīng)的位域置位。這個位表中保存的是PDSP/硬件所維護的查找表狀態(tài),應(yīng)用軟件可以將其回讀來與自己所保存的比較,看看是否有不一致的情況發(fā)生。理論上軟硬件應(yīng)該是同步的。
  LUT table route info:  根據(jù)LUT table bit map 所查找到的對應(yīng)表項下標,乘以64 字節(jié)的偏移量,可以找到該表項匹配后對應(yīng)的路由信息,該信息是由軟件配置的。同樣可以回讀,看看是否與期望的一致。
  5.6.4 PDSP 的單步跟蹤
  在某些PDSP 相關(guān)的問題定位過程中,可能需要對PDSP 做單步跟蹤。該方法主要適用于在simulator 的方式下無法重現(xiàn)的功能問題,比如表項匹配失敗失敗,路由錯誤等等。獲得的信息可以交由TI 進行分析。

QQ截圖20150522201331.png

  調(diào)用示例:單步跟蹤PDSP1,600 步

QQ截圖20150522201408.png

  6.  SA
  SA 調(diào)試的過程中,請充分利用SA 提供的相關(guān)統(tǒng)計信息:
  6.1   系統(tǒng)統(tǒng)計

QQ截圖20150522201438.png

  注意:
  描述符中提供了PS_flag 字段,可以指定該描述符所發(fā)向的目的SGMII 端口(direct packet mode),但是當(dāng)該描述符要先經(jīng)過SA 的時候,請清空該字段,否則SA 對該包的處理導(dǎo)致安全上下文的錯誤(errCtx)。在經(jīng)過SA 處理后的包仍需要指定對應(yīng)的SGMII 端口的情況,配置該包從SA輸出以后的路由到645 隊列/PDSP5,并用PA 的Next route 命令指定到以太網(wǎng)以及對應(yīng)的SGMII端口號.
  6.2 通道統(tǒng)計
  

QQ截圖20150522201651.png

  注意:
  取通道統(tǒng)計應(yīng)該在調(diào)用完SA API Sa_chanReceiveData或Sa_chanSendData以后,而這兩個API本身有部分加解密的初步檢查作用,應(yīng)用程序必須要對返回值進行判斷。如果它們返回錯誤,則應(yīng)該終止向SA發(fā)包的過程,并根據(jù)返回值來檢查自身應(yīng)用軟件的錯誤。何時調(diào)用這兩個API是需要注意的另一個問題,在IPsec/SRTP的場景下,TX側(cè)代表to network方向,即加密方向,需要調(diào)用調(diào)用Sa_chanSendData;Rx側(cè)代表from network方向,即解密方向,需要調(diào)用Sa_chanReceiveData。對于air cipher的場景, TX側(cè)對于空中接口來說實際為from air方向, 即解密方向,需要調(diào)用調(diào)用Sa_chanReceiveData;Rx側(cè)代表to air方向,即加密方向,需要調(diào)用Sa_chanSendData。
  6.3 輔助寄存器
  SA 的輔助寄存器主要用來定位SA 相關(guān)的硬件錯誤,當(dāng)然該硬件錯誤可能是由軟件的非法操作導(dǎo)致的。下面是常用的輔助寄存器列表,表中標注了正常情況下所期望的值。特別請注意CMD_STATUS 寄存器,在運行時間的SA 異常情況,常能夠反映到該寄存器中。其具體的含義請參考SA 用戶手冊。
  

QQ截圖20150522201721.png

  7.  總結(jié)
  本文主要總結(jié)了目前為止中國區(qū)用戶在開發(fā)Keystone I 系列芯片的時候,所遇到的以太網(wǎng)子系統(tǒng)相關(guān)的典型技術(shù)問題,以及閱讀user guide 時一些較為集中的疑問。很多用戶在開發(fā)過程中容易忽略的問題本文都做了強調(diào)。PA 子系統(tǒng)部分的調(diào)試辦法基本可以覆蓋開發(fā)過程中所遇到的所有問題。文檔中給出的各種寄存器配置以及示例程序,都在實際開發(fā)中有使用。
  參考文獻
  1.KeyStone Architecture Network Coprocessor (NETCP) User Guide (SPRUGZ6)
  2.KeyStone Architecture Gigabit Ethernet (GbE) Switch Subsystem User Guide (SPRUGV9A)
  3.KeyStone Architecture Packet Accelerator (PA) User Guide (SPRUGS4)
  4.KeyStone Architecture Security Accelerator (SA) User Guide (SPRUGY6)

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。