日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转载】88E6390端口Link问题(PHY一直link up)BUG解决

發布時間:2024/8/1 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转载】88E6390端口Link问题(PHY一直link up)BUG解决 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自:https://blog.csdn.net/ruolin0923/article/details/83817957

?

Marvell 88E6390是一款11端口全千兆以太網二層交換芯片,是一款較新的產品,芯片有原廠級別的BUG。我們的設備以交換芯片1port-8配置為千兆電口,port9-10千兆光口。光口在打包(滿速率很快,低速時間較長,跟報文的總數有關系)一段時候之后拔掉網線,端口的狀態仍然為Link,led燈閃爍,跟沒有拔出網線端口的狀態一樣。溝通原廠給了解決方案,這里分享出來,希望能夠幫助大家。

原廠的建議是在系統初始化的時候做如下配置:

?按照原廠這個建議在初始化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;
}
這樣配置之后,光口慢速率打包端口狀態正常了,但是環網測試倒換時間本來是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解决的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。