【转载】88E6390端口Link问题(PHY一直link up)BUG解决
轉載自:https://blog.csdn.net/ruolin0923/article/details/83817957
?
Marvell 88E6390是一款11端口全千兆以太網(wǎng)二層交換芯片,是一款較新的產品,芯片有原廠級別的BUG。我們的設備以交換芯片1port-8配置為千兆電口,port9-10千兆光口。光口在打包(滿速率很快,低速時間較長,跟報文的總數(shù)有關系)一段時候之后拔掉網(wǎng)線,端口的狀態(tài)仍然為Link,led燈閃爍,跟沒有拔出網(wǎng)線端口的狀態(tài)一樣。溝通原廠給了解決方案,這里分享出來,希望能夠幫助大家。
原廠的建議是在系統(tǒng)初始化的時候做如下配置:
?按照原廠這個建議在初始化qdStart();初始化之做上述的配置時序代碼如下;
? ? /* load marvell chip driver */
? ? qdStart(gDevCpuPort, 0);
?
? ? /*init port patch ,zhoulinhua@2018-09-03*/
? ? init_each_port();
配置時序代碼:
/*init port patch,zhoulinhua@2018-09-03,*/
void init_each_port()
{
?? ?int port;
?? ?int buf;
?? ?
?? ?/*step1:portstate for each port to be configured to disable
?? ?*Port register 4 [1:0] = 0x0
?? ?*/
?? ?for(port=1;port <= MAX_PORT_NUM; port++)
?? ?{
?? ??? ?readPort(port,0x4,&buf);
?? ??? ?buf &= 0xfffc;
?? ??? ?//printf("%s %s %d: buf=0x%04x\r\n",__FILE__,__FUNCTION__,__LINE__,buf);//zhoulinhua@2018-09-26,test
?? ??? ?writePort(port,0x4,buf);
?? ?}
?
?? ?/*step2:
?? ?*For Port 9:
?? ?*?? ?Swith Port 5 register 0x1A = 0x01C0
?? ?*?? ?Swith Port 4 register 0x1A = 0xFD20
?? ?*/
?? ?writePort(0x5,0x1a,0x01C0);
?? ?writePort(0x4,0x1a,0xFD20);
?? ?
?? ?/*step3:
?? ?For Port 10:
?? ?*?? ?Swith Port 5 register 0x1A = 0x01C0
?? ?*?? ?Swith Port 4 register 0x1A = 0xFD40
?? ?*/
?? ?writePort(0x5,0x1a,0x01C0);
?? ?writePort(0x4,0x1a,0xFD40);
?? ?
?? ?/*step4: Preform a software reset of swtich core:
?? ?*?? ?Global 1 Register 4 .15 = 1
?? ?*/
?? ??? ?readGlobal(0x4,&buf);
?? ??? ?buf |= 0x8000;
?? ??? ?//printf("%s %s %d: buf=0x%04x\r\n",__FILE__,__FUNCTION__,__LINE__,buf);//zhoulinhua@2018-09-26,test
?? ??? ?writeGlobal(0x4,buf);
?? ??? ?
?? ?/*step5: Change the PortState for each port back to the forwarding state
?? ?*?? ?Port register 4 [1:0] = 0x3
?? ?*/
?? ?for(port=1;port <= MAX_PORT_NUM; port++)
?? ?{
?? ??? ?readPort(port,0x4,&buf);
?? ??? ?buf |= 0x3;
?? ??? ?//printf("%s %s %d: buf=0x%04x\r\n",__FILE__,__FUNCTION__,__LINE__,buf);//zhoulinhua@2018-09-26,test
?? ??? ?writePort(port,0x4,buf);
?? ?}
?? ?
?? ?return 0;
}
這樣配置之后,光口慢速率打包端口狀態(tài)正常了,但是環(huán)網(wǎng)測試倒換時間本來是ms級別變成了s級別,查看中斷沒有上來,讀取交換芯片的DevIntEn(Global 1 offset 0x4)位被置為0,中斷被關閉了。明明qdStart中有如下調用打開了中斷:
/* Enable phy interrupt for port link state changed */
? ? if((status=QDIntEnable(dev)) != GT_OK)
? ? {
? ? ? ? MSG_PRINT(("QDIntEnable return Failed\n"));
? ? ? ? return status;
? ? }
猜測可能software rest的時候被清,因此在調用 init_each_port()之后重新調用QDIntEnable(dev))得以解決、
以上是我分享的一點希望能幫到大家。
?
總結
以上是生活随笔為你收集整理的【转载】88E6390端口Link问题(PHY一直link up)BUG解决的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 算法——排序——冒泡排序图解动画
- 下一篇: D-S envidence theory