imx6 ar8031 千兆網卡不能用


/***************************************************************************
 *         imx6 ar8031 千兆網卡不能用
 * imx6無論是運行linux還是android都無法ping通直連的pc,但是配置成dhcp卻能夠正常上網。
 * 本文記錄解決過程。
 *
 *                                     Tony Liu, 2016-4-19, Shenzhen                              
 ***************************************************************************/
參考:
  交叉線,直通線區別:
  http://www.admin10000.com/document/3946.html
  nxp論壇中的討論:
  http://www.nxpic.org/module/forum/forum.php?mod=viewthread&tid=595457&extra=&highlight=ping%2B%E4%B8%8D%E9%80%9A&page=3
  mac配置中的宏:
  http://lists.infradead.org/pipermail/linux-arm-kernel/2014-July/270174.html 一、ping不通   進行如下嘗試:
1.首先關閉電腦和板子上的防火牆。    2.板子添加默認網關       route add default gw 192.168.2.1 netmask 255.255.255.0    3.查看電腦上是否有到板子的arp表項。 arp -a 接口: 192.168.2.110 --- 0xb Internet 地址 物理地址 類型 224.0.0.2 01-00-5e-00-00-02 靜態 224.0.0.22 01-00-5e-00-00-16 靜態 224.0.0.251 01-00-5e-00-00-fb 靜態 224.0.0.252 01-00-5e-00-00-fc 靜態 239.255.255.250 01-00-5e-7f-ff-fa 靜態   如果沒有,在windows上添加靜態arp。   使用 netsh i i show in 命令 查看 本地連接的idx編號      C:\Windows\system32>netsh i i show in Idx Met MTU 狀態 名稱 --- ---------- ---------- ------------ --------------------------- 1 50 4294967295 connected Loopback Pseudo-Interface 1 11 10 1500 connected 本地連接 13 20 1500 connected 本地連接 2 14 20 1500 connected VMware Network Adapter VMnet1 15 20 1500 connected VMware Network Adapter VMnet8   使用 netsh -c "i i" add neighbors 本地連接的idx “網關IP” “網關mac” 命令綁定。     網關mac是板子的mac。     netsh -c "i i" add neighbors 11 "192.168.2.1" "1e-ed-19-27-1a-b3"   查看結果: 接口: 192.168.2.110 --- 0xb Internet 地址 物理地址 類型 192.168.2.1 1e-ed-19-27-1a-b3 靜態 224.0.0.2 01-00-5e-00-00-02 靜態 224.0.0.22 01-00-5e-00-00-16 靜態 224.0.0.251 01-00-5e-00-00-fb 靜態 224.0.0.252 01-00-5e-00-00-fc 靜態 239.255.255.250 01-00-5e-7f-ff-fa 靜態 二、板子通過交換機可以ping同電腦。 1、板子的phy是ar8031,連接交換機之后,可以ping通電腦。懷疑可能線序有問題,所以采用交叉線進行直連,也不能ping通。 2、交換機只支持10M/100M,查看PC網卡屬性,鏈接速度也自協商到100M,而此時板子上的網絡也是100M,所以能夠ping通。初步分析,直連情況下,電腦網卡和板子上phy自協商失敗。 3、直連情況下,將電腦的網卡速率強制設置為10M全雙工/半雙工,板子網絡也變為10M半雙工,說明自協商成功,只是在1000M的狀態被限制了。 更改電腦網卡速率,板子串口輸出。 PHY: 1:01 - Link is Down PHY: 1:01 - Link is Up - 10/Half 三、代碼跟蹤 1、可能是phy設置有誤,上網查看,設置的內容都一樣,更改phy設置沒有生效。 2、查看驅動kernel/driver/net/fec.c     在驅動中進行調試。由於每次網絡斷開,直連的后都會有輸出。

static void 
fec_restart(struct net_device *dev, int duplex)函數。

    添加調試,發現板子自協商的時候,直連電腦的網卡是1G或者自協商時,都只進入10M/100M的配置。
        /* 10M or 100M */
        if (fep->phy_dev && fep->phy_dev->speed == SPEED_100) {
            val &= ~(1 << 9);
        }
        else {
            val |= (1 << 9);
        }
  ... ... ...  
  //說明if的條件里面沒有都滿足。
  /* if phy work at 1G mode, set ENET RGMII speed to 1G */ if (fep->phy_dev && (fep->phy_dev->supported & (SUPPORTED_1000baseT_Half | SUPPORTED_1000baseT_Full)) && fep->phy_interface == PHY_INTERFACE_MODE_RGMII && fep->phy_dev->speed == SPEED_1000) { val |= (0x1 << 5); //使能1000M模式 } /* RX FIFO threshold setting for ENET pause frame feature * Only set the parameters after ticket TKT116501 fixed. * The issue has been fixed on Rigel TO1.1 and Arik TO1.2 */ if ((cpu_is_mx6q() && (mx6q_revision() >= IMX_CHIP_REVISION_1_2)) || (cpu_is_mx6dl() && (mx6dl_revision() >= IMX_CHIP_REVISION_1_1))) { writel(FEC_ENET_RSEM_V, fep->hwp + FEC_R_FIFO_RSEM); writel(FEC_ENET_RSFL_V, fep->hwp + FEC_R_FIFO_RSFL); writel(FEC_ENET_RAEM_V, fep->hwp + FEC_R_FIFO_RAEM); writel(FEC_ENET_RAFL_V, fep->hwp + FEC_R_FIFO_RAFL); /* OPD */ writel(FEC_ENET_OPD_V, fep->hwp + FEC_OPD); } if (cpu_is_mx6q() || cpu_is_mx6dl()) { /* enable endian swap */ val |= (0x1 << 8); /* enable ENET store and forward mode */ writel(0x1 << 8, fep->hwp + FEC_X_WMRK); } writel(val, fep->hwp + FEC_ECNTRL);    //使能Ethernet Control Register static int fec_enet_mii_probe(struct net_device *ndev)函數: 查看初始化,反向芯片選擇這里只打開了10M/100M的支持,沒有打開1000M支持。導致MAC寄存器沒有使能1000M功能。
  將PHY_BASIC_FEATURES更改為PHY_GBIT_FEATURES。問題解決。
  如下所示。
/* mask with MAC supported features */ if (cpu_is_mx6q() || cpu_is_mx6dl()) // phy_dev->supported &= PHY_BASIC_FEATURES; phy_dev->supported &= PHY_GBIT_FEATURES; else phy_dev->supported &= PHY_BASIC_FEATURES; 宏定義如下: #define PHY_BASIC_FEATURES (SUPPORTED_10baseT_Half | \ SUPPORTED_10baseT_Full | \ SUPPORTED_100baseT_Half | \ SUPPORTED_100baseT_Full | \ SUPPORTED_Autoneg | \ SUPPORTED_TP | \ SUPPORTED_MII) #define PHY_GBIT_FEATURES (PHY_BASIC_FEATURES | \ SUPPORTED_1000baseT_Half | \ SUPPORTED_1000baseT_Full)

網卡速率調整: 控制面板\網絡和 Internet\網絡連接。右鍵網卡,屬性->配置->高級,如下圖所示。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM