新聞中心

EEPW首頁(yè) > 設(shè)計(jì)應(yīng)用 > Keystone I以太網(wǎng)子系統(tǒng)調(diào)試手冊(cè)

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

作者: 時(shí)間:2016-10-10 來(lái)源:網(wǎng)絡(luò) 收藏

摘要

本文引用地址:http://m.butianyuan.cn/article/201610/306215.htm

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

1.以太網(wǎng)子系統(tǒng)說(shuō)明

圖1 以太網(wǎng)子系統(tǒng)框圖

在用戶手冊(cè)中,以太網(wǎng)子系統(tǒng)可以稱為網(wǎng)絡(luò)協(xié)處理器子系統(tǒng)(NETCP),其主要構(gòu)成模塊有:

1.以太網(wǎng)交換部分

主要模塊有Serdes,SGMII, EMAC,三端口交換機(jī)等

2.包加速器

主要模塊有6個(gè)PDSP,3個(gè)一級(jí)的查找表,1個(gè)二級(jí)的查找表,對(duì)應(yīng)的Packet DMA等

3.安全加速器

主要模塊有2個(gè)PDSP,加解密和鑒權(quán)引擎等

注意:

以太網(wǎng)子系統(tǒng)的整個(gè)初始化過(guò)程,一般推薦采用從內(nèi)到外的次序:

PA PAKET DMA->PA PDSP->3 port switch/CPSW->EMAC->SGMII->SGMII Serdes

2.SGMII

2.1 SGMII SerDes配置

Serdes的配置主要與供給的Serdes時(shí)鐘相關(guān),下面給出一個(gè)對(duì)應(yīng)不同時(shí)鐘頻率的配置示例:

312.5MHz->SGMII PLL Configuration Register 0x41,

250MHz-> SGMII PLL Configuration Register 0x51,

156.25MHz-> SGMII PLL Configuration Register 0x81

配置完畢以后,請(qǐng)注意檢查SGMII SerDes Status Register(SGMII_SERDES_STS)的最低Lock 位是否為1。

2.2 SGMII與PHY的連接

當(dāng)SGMII與PHY連接的時(shí)候,SGMII一定是Slave模式,一般情況下同時(shí)使能自協(xié)商。

2.3 SGMII與Switch的連接

對(duì)于支持SGMII標(biāo)準(zhǔn)的外部switch與Keystone I芯片連接的時(shí)候,可以一端配置為master,另一端配置為slave,同時(shí)使能自協(xié)商模式。但是對(duì)于只支持1000BASE-X的switch與Keystone I芯片連接的時(shí)候,應(yīng)該將兩端都設(shè)置為master模式,并禁止自協(xié)商,強(qiáng)制為1000M全雙工。

2.4 MDIO接口與PHY的控制

通過(guò)MDIO控制寄存器MDIO_CONTROL可以對(duì)外接的PHY進(jìn)行控制,按照用戶手冊(cè)的建議配置到2.5MHz。需要注意的是:

1.MDIO模塊初始化后,應(yīng)該先通過(guò)MDIO讀取PHY的ID寄存器,確認(rèn)該連接是否正常。

2.讀取MDIO模塊的PHY Alive Status Register(ALIVE)獲取PHY ID(注意PHY ID是0~31)

3.將第二步讀到的PHY ID作為PHY address寫(xiě)到MDIO User Access Register 0 (USERACCESS0)或者M(jìn)DIO User Access Register 1(USERACCESS1)中訪問(wèn)對(duì)應(yīng)的PHY寄存器

2.5 1000M半雙工的問(wèn)題說(shuō)明

不支持1000M半雙工的應(yīng)用,當(dāng)外接的PHY或者是switch支持1000M半雙工時(shí),可能會(huì)對(duì)keystone I的網(wǎng)絡(luò)功能造成影響。特別是當(dāng)某些PHY在復(fù)位過(guò)程中,可能會(huì)發(fā)起1000M半雙工的請(qǐng)求,這種情況下,請(qǐng)?jiān)谙到y(tǒng)上電初始化時(shí)先通過(guò)MDIO接口關(guān)閉PHY的1000M半雙工協(xié)商能力。

3.EMAC

3.1 VLAN aware模式和VLAN unaware模式

1.VLAN unaware模式下所有的包不會(huì)被改變

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模式對(duì)不同包的不同策略:

A.對(duì)于untagged包,插入端口所配置的VLAN頭

B.對(duì)于priority tagged包,根據(jù)CPSW_CONTROL中的 P0_PASS_PRI_TAGGED/P1_PASS_PRI_TAGGED/P2_PASS_PRI_TAGGED配置,如果該位為 0(default),則該端口上收到的priority tagged包中的VLAN ID會(huì)被替換為該端口配置的VLAN ID。

C.對(duì)于VLAN tagged包,包中的VLAN優(yōu)先級(jí)會(huì)被替換為該端口配置的VLAN優(yōu)先級(jí),VLAN ID 不變。

3.2 EMAC的復(fù)位

EMAC模塊提供了一個(gè)軟復(fù)位的寄存器,一般情況下在芯片上電復(fù)位啟動(dòng)后,不建議使用該寄存器對(duì)EMAC模塊做單獨(dú)的復(fù)位操作,該復(fù)位操作后可能會(huì)引起以太網(wǎng)包收發(fā)異常,請(qǐng)謹(jǐn)慎使用。

3.3 MAC地址的說(shuō)明

對(duì)于的芯片來(lái)說(shuō),一般可以配置3個(gè)MAC地址。以C6678為例,

MACID1(0x02620110)和MACID2(0x02600114)

該MAC地址是出廠時(shí),TI寫(xiě)到芯片的Efuse里的,類(lèi)似于一個(gè)芯片ID,只讀不可修改。如果芯片選擇以太網(wǎng)boot方式,芯片會(huì)以該地址發(fā)出bootp的報(bào)文(Ethernet ready announcement)

MAC1_SA_LO(0x2090870)和MAC1_SA_HI(0x2090874)

MAC2_SA_LO(0x20908A0)和MAC2_SA_HI(0x20908A4)

以上兩個(gè)MAC地址是分別配置給兩個(gè)EMAC端口的,但該地址的作用僅限于使能以太網(wǎng)Rx流控以后,封裝發(fā)到網(wǎng)絡(luò)上的流控幀,并不按MAC地址過(guò)濾以太網(wǎng)包。

因?yàn)镵eystone芯片有包加速器(PA),MAC地址的過(guò)濾應(yīng)該由配置PA來(lái)完成,所以可以認(rèn)為Keystone I的EMAC模塊工作在混雜模式(Promiscuous mode)。換句話講,所有的報(bào)文都會(huì)接收并到PA進(jìn)行過(guò)濾,從業(yè)務(wù)層面,對(duì)于一顆Keystone I的芯片理論上最大可以配置64個(gè)MAC地址(LUT1-0有64個(gè)表項(xiàng))。

4.CPSW

4.1 ALE模塊的注意事項(xiàng)

4.1.1 MAC地址的老化問(wèn)題

因?yàn)锳LE只有1K個(gè)表項(xiàng),且硬件沒(méi)有提供內(nèi)部的timer來(lái)自動(dòng)維護(hù)一個(gè)老化周期,所以應(yīng)用程序需要自己維護(hù)一個(gè)timer。Time第一次超時(shí),應(yīng)用程序?qū)LE_CONTROL寄存器的AGE_OUT_NOW比特置位,會(huì)導(dǎo)致所有ageable的ALE Entry被設(shè)置為untouched;第二次timer超時(shí),再次設(shè)置ALE_CONTROL寄存器的AGE_OUT_NOW比特,在兩次超時(shí)之間仍保持為 untouched的表項(xiàng)將會(huì)被清除。如果在兩次超時(shí)之間,有包交換并重新touched的表項(xiàng)將會(huì)被保留。

4.1.2 ALE Bypass

設(shè)置ALE bypass只是表明從網(wǎng)絡(luò)外發(fā)到芯片的包,將不會(huì)通過(guò)查找ALE再交換,而是無(wú)條件發(fā)送到HOST port。而從HOST port發(fā)送到外部的網(wǎng)絡(luò)的包仍然要通過(guò)ALE交換。

4.1.3 未知的單播,多播,廣播包

1.在某一個(gè)端口收到的,ALE中無(wú)法匹配的多播和廣播包會(huì)被廣播到另兩個(gè)端口。

2.在HOST端口收到的,ALE中無(wú)法匹配的單播包,會(huì)被發(fā)送到兩個(gè)SGMII端口。

3.在某SGMII端口收到的,ALE中無(wú)法匹配的單播包,只會(huì)被發(fā)送另一個(gè)SGMII端口。

4.2以太網(wǎng)子系統(tǒng)環(huán)回配置及其應(yīng)用

圖2 以太網(wǎng)子系統(tǒng)環(huán)回

以太網(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ì)被環(huán)回到芯片。因?yàn)榘l(fā)生環(huán)回的節(jié)點(diǎn)不一樣,所以可以利用這幾種環(huán)回來(lái)定位以太網(wǎng)配置問(wèn)題。示例:

1.CPSWFIFO環(huán)回成功,而Serdes環(huán)回和digital環(huán)回失敗,基本可以判定EMAC/SGMII配置有問(wèn)題

2.CPSWFIFO環(huán)回和digital環(huán)回成功,而Serdes環(huán)回失敗,基本可以判定SGMII Serdes配置有問(wèn)題

3.CPSWFIFO環(huán)回,digital環(huán)回和CPSW FIFO環(huán)回都成功,說(shuō)明CPSW以下層的配置在基本是正確的

CPSW FIFO環(huán)回還包含了外環(huán)的功能,也就是從外部網(wǎng)絡(luò)(PHY/Switch)進(jìn)入芯片的包會(huì)被環(huán)回到外部網(wǎng)絡(luò),芯片內(nèi)的CPU core將無(wú)法收到這些包。這個(gè)功能可以用以判定 PHY/switch與keystone I的連接配置是否正確。注意CPSW FIFO環(huán)回只能用于debug,使能以后不能動(dòng)態(tài)的去使能,也就是說(shuō)使能以后若想恢復(fù)正常狀態(tài),必須對(duì)整個(gè)SoC下電,重新上電復(fù)位。

4.3 以太網(wǎng)流控

Rx流控的意義是CPSW檢測(cè)到FIFO超過(guò)一定的門(mén)限以后,該端口主動(dòng)向網(wǎng)絡(luò)外發(fā)出以太網(wǎng)流控幀。該流控幀的發(fā)送量是30pps。

Tx流控的意義是CPSW檢測(cè)到網(wǎng)絡(luò)對(duì)端發(fā)出的流控幀,報(bào)告給HOST(DSP/ARM),由HOST軟件來(lái)裁決減少發(fā)送的網(wǎng)絡(luò)流量。

需要注意的是,如果Rx FIFO的占用情況一直滿足Rx 流控的檢測(cè)條件,Rx flow control 幀會(huì)不斷的發(fā)送到網(wǎng)絡(luò)上,這種情況多出現(xiàn)在上層軟件或者PA/SA出現(xiàn)某種異常的場(chǎng)景下。

4.4 CPSW的統(tǒng)計(jì)寄存器

1.寄存器實(shí)際都是R/W屬性,比如當(dāng)你讀到一個(gè)寄存器的值為0x80,回寫(xiě)大于0x80的數(shù)字,會(huì)導(dǎo)致該寄存器的值清0。實(shí)際對(duì)該組寄存器的寫(xiě)操作是減法關(guān)系,如果該寄存器正在動(dòng)態(tài)變化中,對(duì)它進(jìn)行寫(xiě)操作并不會(huì)導(dǎo)致統(tǒng)計(jì)值的丟失。比如當(dāng)你讀到一個(gè)寄存器的值為0x80,回寫(xiě)0x80的時(shí)刻該寄存器實(shí)際的值已經(jīng)變?yōu)?x90(因?yàn)樵摃r(shí)刻有包的收發(fā)),則此時(shí)寫(xiě)0x80的結(jié)果是該寄存器的值變?yōu)?x90-0x80=0x10。

2.CPSW的統(tǒng)計(jì)寄存器有兩組,其中STATA是對(duì)應(yīng)于HOST port,STATB是兩個(gè)SGMII port的和

3.對(duì)于統(tǒng)計(jì)寄存器中的Rx,Tx分別都是站在CPSW模塊的角度統(tǒng)計(jì)的結(jié)果,換句話說(shuō),統(tǒng)計(jì)STATA中的Rx表示的是HOST port從DSP/ARM cores收進(jìn)CPSW的包,Tx表示的是從HOST port 發(fā)出CPSW到DSP/ARM core的包;而統(tǒng)計(jì)STATB中的Rx表示的是兩個(gè)SGMII端口從網(wǎng)絡(luò)收進(jìn)來(lái)的包,Tx表示的是從兩個(gè)SGMII端口發(fā)送到外部網(wǎng)絡(luò)的包。

簡(jiǎn)單的示例:

1)如果一個(gè)包從網(wǎng)絡(luò)外發(fā)送到Keystone I芯片,DSP/ARM core沒(méi)有收到

A.檢查STATB的Rx寄存器

B.檢查STATA的TX寄存器

2)如果一個(gè)包從DSP/ARM core發(fā)送到網(wǎng)絡(luò)外,網(wǎng)絡(luò)上沒(méi)有收到

A.檢查STATA的Rx寄存器

B.檢查STATB的TX寄存器

4.一般情況下RXSOFOVERRUNS/RXMOFOVERRUNS/ XDMAOVERRUNS寄存器都為0,在某些特定條件下,如以太網(wǎng)子系統(tǒng)reset過(guò)程中收到包,這些寄存器出現(xiàn)較小的值且不增加是正常的。但如果這些寄存器出現(xiàn)不斷增加且收包流量并不大,這種情況一般說(shuō)明以太網(wǎng)收包異常,通常異常是由于收包的軟件模塊異?;蛘逷A子系統(tǒng)異常造成的。

4.5 802.1P VLAN QoS的配置

圖3 CPSW FIFO示意圖

每個(gè)CPSW EMAC端口都有收發(fā)的FIFO,收發(fā)的總memory數(shù)為20個(gè)4K block。Rx/Tx的收發(fā)block數(shù)可以通過(guò)P1_MAX_BLKS和P2_MAX_BLKS寄存器配置。其中Tx FIFO分為四個(gè)優(yōu)先級(jí)隊(duì)列(priority queue),優(yōu)先級(jí)0到3,其中3的優(yōu)先級(jí)最高。配置過(guò)程為:

1.配置packet priority to header packet priority mapping register(P0_RX_PRI_MAP 和兩個(gè)EMAC的MAC_RX_PRI_MAP),將實(shí)際的VLAN包的8個(gè)優(yōu)先級(jí)映射到芯片內(nèi)部包頭的優(yōu)先級(jí)

2.配置header priority to switch priority mapping register(P1_TX_PRI_MAP和P2_TX_PRI_MAP),將內(nèi)部包頭的優(yōu)先級(jí)映射到4個(gè)優(yōu)先級(jí)隊(duì)列

注意:

a.對(duì)于untagged VLAN包,映射所要用的VLAN優(yōu)先級(jí)將使用端口的VLAN優(yōu)先級(jí)。在P0_PORT_VLAN,P1_PORT_VLAN和P2_PORT_VLAN寄存器中配置

b.當(dāng)只使用0~3四個(gè)優(yōu)先級(jí)隊(duì)列中的部分時(shí),必須從優(yōu)先級(jí)最高的隊(duì)列3開(kāi)始分配。比如只使用兩個(gè)隊(duì)列,則應(yīng)該用3和2。

c. 端口0代表HOST port,端口0收到的包都會(huì)通過(guò)ALE交換后從兩個(gè)EMAC端口發(fā)送出去,所以端口0只需要配置packet priority to header packet priority mapping register,而沒(méi)有header priority to switch priority mapping register。

下面是三個(gè)VLAN映射的示例:

5.PA

5.1 PA PLL配置

根據(jù)data sheet(參考SPRS671D TMS320TCI6614 Data Manual Figure 8-25 PASS PLL Block Diagram),PA子系統(tǒng)的時(shí)鐘可以選擇兩個(gè)來(lái)源,一個(gè)是PASS PLLOUT,另一個(gè)是從SYSCLK1固定的三分頻。當(dāng)芯片的主頻配置為1GHz時(shí),如果選擇SYSCLK1,則PA子系統(tǒng)工作頻率是333MHz,可以選擇PASS PLLOUT方式,通過(guò)PA PLL配置子系統(tǒng)工作于350MHz。但是對(duì)于主頻為1.2GHz的芯片,只能選擇PASS PLLOUT方式,通過(guò)PA PLL配置子系統(tǒng)工作于350MHz,不能支持SYSCLK1三分頻到400MHz。

5.2 PA的Packet DMA模塊

1.PA的packet DMA模塊有9個(gè)Tx通道和24個(gè)Rx channel,注意這些通道在硬件上都有固定的映射關(guān)系,請(qǐng)?jiān)谑鼓躊A子系統(tǒng)的時(shí)候,使能所有的通道。

2.PA的packet DMA模塊有32個(gè)Rx flow。實(shí)際應(yīng)用中經(jīng)常見(jiàn)到做法是所有用到Rx Flow/FDQ 的地方都配置同一個(gè)Rx Flow/FDQ,這樣的做法雖然最簡(jiǎn)單,但是一旦出現(xiàn)問(wèn)題則很容易導(dǎo)致該FDQ的描述符迅速耗盡,而且很難定位導(dǎo)致問(wèn)題的點(diǎn)。

3.一般來(lái)說(shuō)在PA與其他的硬件模塊(特別是SA)數(shù)據(jù)交互過(guò)程都非常的快,而PA將分類(lèi)好的數(shù)據(jù)交給HOST queue,因?yàn)橛熊浖奶幚硭暂^慢。故而推薦分開(kāi)靈活配置不同的Rx Flow(FDQ): 硬件模塊交互間的FDQ一般包含16個(gè)描述符/buffer就足夠了,而最后到HOST queue的Rx Flow/FDQ可以根據(jù)實(shí)際軟件的處理速度來(lái)配置更多的個(gè)描述符/buffer。

4.分開(kāi)配置不同的Rx Flow/FDQ帶來(lái)的另一個(gè)好處是,配置到HOST queue的RX flow/FDQ 里的描述符耗盡,也不會(huì)影響到硬件的處理。而且因?yàn)镕DQ根據(jù)不同的功能和包處理流程做了不同的配置,在定位某些網(wǎng)絡(luò)處理問(wèn)題的時(shí)候更加容易。比如在某一個(gè)FDQ里的描述符用盡時(shí),基本可以確定是該級(jí)的相關(guān)模塊處理的問(wèn)題,更容易縮小問(wèn)題定位的范圍。

下面是兩個(gè)的配置實(shí)例:

IPSec ESP隧道模式

1.當(dāng)PDSP1根據(jù)IPSec ESP的SPI將包分類(lèi)并路由到SA的時(shí)候,將需要一個(gè)Rx Flow的配置(在LUT1-1的配置),假定配置為Rx Flow No.1(FDQ No.1000,包含空閑描述符/buffer 16 個(gè))。

2.當(dāng)SA對(duì)IPSec ESP報(bào)文解密完畢,并送到PDSP2做內(nèi)層IP分類(lèi)的時(shí)候,配置Rx Flow No.2 (FDQ No.1001,包含空閑描述符/buffer 16個(gè)) 。

3.當(dāng)PDSP3做完L4/L5分類(lèi)以后,將包送到HOST queue時(shí)配置Rx Flow No.3(FDQ No.1002,包含空閑描述符/buffer 8K個(gè))。

IPSec AH+ESP隧道模式

1.當(dāng)PDSP1根據(jù)IPSec AH的SPI將包分類(lèi)并路由到SA的時(shí)候,將需要一個(gè)Rx Flow的配置(在LUT1-1的配置),假定配置為Rx Flow No.1(FDQ No.1000,包含空閑描述符/buffer 16個(gè)) 。

2.當(dāng)SA對(duì)IPSec AH報(bào)文鑒權(quán)校驗(yàn)完畢,并送回PDSP1做IPSec ESP SPI分類(lèi)的時(shí)候,配置Rx Flow No.4(FDQ No.1003,包含空閑描述符/buffer 16個(gè))。

3.當(dāng)PDSP1根據(jù)IPSec ESP的SPI將包分類(lèi)并路由到SA的時(shí)候,配置Rx Flow No.1(FDQ No.1000,包含空閑描述符/buffer 16個(gè))。

4.當(dāng)SA對(duì)IPSec ESP報(bào)文解密完畢,并送到PDSP2做內(nèi)層IP分類(lèi)的時(shí)候,配置Rx Flow No.2 (FDQ No.1001,包含空閑描述符/buffer 16個(gè))。

5.當(dāng)PDSP3做完L4/L5分類(lèi)以后,將包送到HOST queue時(shí)配置Rx Flow No.3 (FDQ No.1002,包含空閑描述符/buffer 8K個(gè))。

為了更好的定位在開(kāi)發(fā)過(guò)程中遇到的網(wǎng)絡(luò)問(wèn)題,比如丟包,packet DMA隊(duì)列卡死,描述符丟失等等,推薦在應(yīng)用軟件側(cè)做一些描述符的輔助定位手段:

1.當(dāng)描述符初始化以后,記錄下所有的描述符首指針。

2.查詢/掃描PA Packet DMA Tx隊(duì)列No. 640~648中描述符個(gè)數(shù)

3.當(dāng)發(fā)現(xiàn)隊(duì)列No. 640~648隊(duì)列中有包擁塞時(shí)(正常情況下該隊(duì)列中的描述符個(gè)數(shù)不會(huì)超過(guò)64個(gè)),停止包的收發(fā)

4.將在步驟1記錄的描述符地址與FDQ殘留的和隊(duì)列No. 640~648隊(duì)列中擁塞的做比較

5.發(fā)現(xiàn)丟失的描述符,并檢查其內(nèi)容,特別是檢查是否有描述符的packet length超過(guò)其鏈接的所有分片的buffer length總和的情況

5.3 PA Bypass

芯片可以配置為bypass整個(gè)PA子系統(tǒng)。PA bypass的實(shí)質(zhì)是忽略所有的PA模塊(PDSP/LUT)的處理,從SGMII端口收到的包經(jīng)過(guò)內(nèi)部的packet stream switch直接通過(guò)PA PKTDMA模塊傳輸?shù)紿OST queue。其配置過(guò)程為:

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收到的包所要放到的目的隊(duì)列,Rx flow No.23中的destination queue代表了從SGMII1收到的包所要放到的目的隊(duì)列。

注意:PA bypass以后,由于所有的包未經(jīng)過(guò)PA子系統(tǒng)的過(guò)濾直接進(jìn)入到HOST隊(duì)列中,流量較大的情況下,很容易造成FDQ的描述符耗盡。而且容易造成軟件協(xié)議棧loading過(guò)高,容易遭受網(wǎng)絡(luò)攻擊。另由于在芯片設(shè)計(jì)中,PA可以直接與SA進(jìn)行數(shù)據(jù)傳輸,特別是在from network方向上對(duì)加密的包進(jìn)行解密以后在送到HOST queue,而PA bypass以后,對(duì)于加密包的解密處理將增加HOST側(cè)的CPU負(fù)荷。

5.4 PA的固件和Low level driver

PA的固件有三個(gè)文件,位于PDK安裝目錄pdk_C6678_x_x_x_xxpackagestidrvpafw (x_x_x_xx 為版本號(hào)) ,PDSP0~PDSP2共用一個(gè)文件(classify1_bin.c),PDSP3用一個(gè)文件(classify2_bin.c),PDSP4和PDSP5共用一個(gè)文件(pam_bin.c)。PA子系統(tǒng)運(yùn)行于大端序,所以固件都是大端序。注意固件版本和LLD版本一定要一致。固件的版本號(hào)可以從上述C文件的數(shù)組中讀到,第三個(gè)32bit WORD就是版本號(hào)。

如上例固件版本號(hào)為1.3.0.7

PA LLD的版本號(hào)可以從PA LLD安裝目錄的paver.h中得到(PA_LLD_VERSION_ID和PA_LLD_VERSION_STR)。

PA LLD中的函數(shù)Pa_downloadImage是下載PDSP固件的,注意其中每個(gè)PDSP的常量表定義pap_pdsp_const_reg_map,不同的版本這些值可能不同。對(duì)于某些有ARM core的Keystone I芯片,該常量表不是通過(guò)PA LLD函數(shù)來(lái)賦值而是Linux kernel代碼直接賦值的,所以必須跟各個(gè)版本的固件對(duì)應(yīng)。如果常量表和固件,LLD的版本不匹配,可能會(huì)有某些功能異常。

5.5 PA LUT1表項(xiàng)增加的策略

LUT1是線性查找表,也就說(shuō),配置的表項(xiàng)從下標(biāo)No. 0一直找到No.63。因?yàn)椴煌谋眄?xiàng)內(nèi)容間可能有包含關(guān)系,比如某一項(xiàng)A只要求匹配目的IP地址,另一項(xiàng)B配置了同樣的目的IP 地址,同時(shí)也配置了源IP地址。這樣其實(shí)是B的條件比A更加嚴(yán)格,那么嚴(yán)格的表項(xiàng)B應(yīng)該比寬松的A下標(biāo)小。比如配置A在No.1,B在No.0,只有這樣B才能有被匹配的可能性。

注意:PA LLD提供的函數(shù)如Pa_addIp,Pa_addMac等,都提供了不指定下標(biāo)的方式添加表項(xiàng),函數(shù)的參數(shù)為不指定下標(biāo)的時(shí)候,PA LLD的處理為從下標(biāo)較大的開(kāi)始添加。例如當(dāng)某個(gè)64表項(xiàng)的表為空,而兩次調(diào)用Pa_addIp添加表項(xiàng)并不指定表項(xiàng)位置的時(shí)候,第一次添加的表項(xiàng)在No.63的位置,第二次添加的表項(xiàng)在No.62位置。

5.6 PA相關(guān)的調(diào)式

5.6.1 Device simulator輔助調(diào)試

由于PA子系統(tǒng)主要由硬件模塊組成,提供的寄存器有限,對(duì)于復(fù)雜的功能來(lái)說(shuō),調(diào)試相對(duì)比較困難。但是TI的芯片simulator上對(duì)該子系統(tǒng)進(jìn)行了充分的支持,在初期開(kāi)發(fā)階段,simulator上調(diào)試PA更加方便。

下面是一個(gè)在TCI6608的simulator上使能PA調(diào)試和Log輸出的例子:

1.CCS安裝路徑simulation_csp_nybinconfigurationstisim_tci6608_pv.cfg如果該行被注釋?zhuān)?qǐng)解注釋INPUT5 log_file,pass.log;

2.在軟件初始化中加入下面的代碼

3.上兩步的初始化過(guò)程將在simulator的安裝路徑(如CCS安裝路徑

simulation_csp_nyenvccsdriverspass.log)下產(chǎn)生名為Pass.log的詳細(xì)log文件

該文件包含LUT表項(xiàng)的添加過(guò)程,LUT表項(xiàng)每一級(jí)的匹配過(guò)程等等詳細(xì)的內(nèi)容。

注意這個(gè)方法非常適合診斷某些包未按照預(yù)想的規(guī)則匹配/路由的情況,軟件只需要將測(cè)試包發(fā)到640隊(duì)列(忽略以太網(wǎng)子系統(tǒng)其他的模塊的初始化過(guò)程)就可以開(kāi)始測(cè)試。但是對(duì)于發(fā)包量比較大的測(cè)試,產(chǎn)生的Log文件可能過(guò)于龐大。

5.6.2 PA子系統(tǒng)提供的系統(tǒng)統(tǒng)計(jì)

用PA LLD提供的Pa_requestStats和Pa_formatStatsReply函數(shù)可以提取PA子系統(tǒng)給出的統(tǒng)計(jì)計(jì)數(shù)器,這些統(tǒng)計(jì)計(jì)數(shù)器在系統(tǒng)運(yùn)行過(guò)程中可以診斷部分的包匹配,包錯(cuò)誤等問(wèn)題。下面是對(duì)這些計(jì)數(shù)器的詳細(xì)說(shuō)明。

5.6.3 輔助調(diào)試的寄存器

利用PDSP所提供的一些輔助計(jì)數(shù)器/寄存器可以更容易的在運(yùn)行時(shí)定位問(wèn)題。比如下面的計(jì)數(shù)器

0x2000000+0x10*n PDSPn收到的包數(shù)(包括配置命令和數(shù)據(jù)包)

0x2000008+0x10*n PDSPn收到的配置命令數(shù)

舉例說(shuō)明其用法:

1.如果讀到0x2000000為0xa,0x2000008為0x1,代表PDSP0收到了9個(gè)數(shù)據(jù)包和1個(gè)配置命令

2. 在第一步的基礎(chǔ)上繼續(xù)讀到0x2000010為0x3,0x2000018為0x1,代表PDSP1收到了2個(gè)數(shù)據(jù)包和1個(gè)配置命令

3.根據(jù)前兩步的結(jié)果,我們可以知道,有2個(gè)數(shù)據(jù)包在PDSP0收到后繼續(xù)傳給了PDSP1

表1 PDSP輔助寄存器列表

PDSP control register:PDSP寄存器,控制PDSP的運(yùn)行狀態(tài)。

PDSP status register:PDSP狀態(tài)寄存器,其實(shí)是PDSP固件的PC值,該值不恒定,如果該值一直不變化,可以確定是PDSP固件crash。

PDSP instruction RAM:PDSP指令空間,設(shè)置PDSP control register為1,可以將PDSP halt,同時(shí)查看PDSP的指令空間。在某些功能異常的時(shí)候,可以回讀PDSP指令空間,特別是固件的版本號(hào),看看是否與期望的一致。

PDSP debug register:PDSP的調(diào)試寄存器。

LUT table bit map:查找表的占用狀態(tài)。每個(gè)查找表的表項(xiàng)在占用后,PDSP都會(huì)對(duì)該表項(xiàng)對(duì)應(yīng)的位域置位。這個(gè)位表中保存的是PDSP/硬件所維護(hù)的查找表狀態(tài),應(yīng)用軟件可以將其回讀來(lái)與自己所保存的比較,看看是否有不一致的情況發(fā)生。理論上軟硬件應(yīng)該是同步的。

LUT table route info:根據(jù)LUT table bit map所查找到的對(duì)應(yīng)表項(xiàng)下標(biāo),乘以64字節(jié)的偏移量,可以找到該表項(xiàng)匹配后對(duì)應(yīng)的路由信息,該信息是由軟件配置的。同樣可以回讀,看看是否與期望的一致。

5.6.4 PDSP的單步跟蹤

在某些PDSP相關(guān)的問(wèn)題定位過(guò)程中,可能需要對(duì)PDSP做單步跟蹤。該方法主要適用于在simulator的方式下無(wú)法重現(xiàn)的功能問(wèn)題,比如表項(xiàng)匹配失敗失敗,路由錯(cuò)誤等等。獲得的信息可以交由TI進(jìn)行分析。

調(diào)用示例:?jiǎn)尾礁橮DSP1,600步

6.SA

SA調(diào)試的過(guò)程中,請(qǐng)充分利用SA提供的相關(guān)統(tǒng)計(jì)信息:

6.1 系統(tǒng)統(tǒng)計(jì)

注意:

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

6.2 通道統(tǒng)計(jì)

6.2.1 SRTP

6.2.2 IPSec

6.2.3 Air Cipher

注意:

取通道統(tǒng)計(jì)應(yīng)該在調(diào)用完SA API Sa_chanReceiveData或Sa_chanSendData以后,而這兩個(gè)API本身有部分加解密的初步檢查作用,應(yīng)用程序必須要對(duì)返回值進(jìn)行判斷。如果它們返回錯(cuò)誤,則應(yīng)該終止向SA發(fā)包的過(guò)程,并根據(jù)返回值來(lái)檢查自身應(yīng)用軟件的錯(cuò)誤。何時(shí)調(diào)用這兩個(gè)API是需要注意的另一個(gè)問(wèn)題,在IPsec/SRTP的場(chǎng)景下,TX側(cè)代表to network方向,即加密方向,需要調(diào)用調(diào)用Sa_chanSendData;Rx側(cè)代表from network方向,即解密方向,需要調(diào)用Sa_chanReceiveData。對(duì)于air cipher的場(chǎng)景, TX側(cè)對(duì)于空中接口來(lái)說(shuō)實(shí)際為from air方向, 即解密方向,需要調(diào)用調(diào)用Sa_chanReceiveData;Rx側(cè)代表to air方向,即加密方向,需要調(diào)用Sa_chanSendData。

6.3 輔助寄存器

SA的輔助寄存器主要用來(lái)定位SA相關(guān)的硬件錯(cuò)誤,當(dāng)然該硬件錯(cuò)誤可能是由軟件的非法操作導(dǎo)致的。下面是常用的輔助寄存器列表,表中標(biāo)注了正常情況下所期望的值。特別請(qǐng)注意CMD_STATUS寄存器,在運(yùn)行時(shí)間的SA異常情況,常能夠反映到該寄存器中。其具體的含義請(qǐng)參考SA用戶手冊(cè)。

 SA調(diào)試寄存器列表

表2 SA調(diào)試寄存器列表

7.總結(jié)

本文主要總結(jié)了目前為止中國(guó)區(qū)用戶在開(kāi)發(fā)Keystone I系列芯片的時(shí)候,所遇到的以太網(wǎng)子系統(tǒng)相關(guān)的典型技術(shù)問(wèn)題,以及閱讀user guide時(shí)一些較為集中的疑問(wèn)。很多用戶在開(kāi)發(fā)過(guò)程中容易忽略的問(wèn)題本文都做了強(qiáng)調(diào)。PA子系統(tǒng)部分的調(diào)試辦法基本可以覆蓋開(kāi)發(fā)過(guò)程中所遇到的所有問(wèn)題。文檔中給出的各種寄存器配置以及示例程序,都在實(shí)際開(kāi)發(fā)中有使用。

參考文獻(xiàn)

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)



評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉