• 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:Windowssystem32>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网络连接。右键网卡,属性->配置->高级,如下图所示。

  • 相关阅读:
    第十三周总结
    第十二周作业
    第十一周课程总结
    第十周课程总结
    第九周课程总结&实验报告(七)
    第八周课程总结&实验报告(六)
    第七周课程总结&实验报告(五)
    第六周&java实验报告四
    课程总结
    第二周课程总结
  • 原文地址:https://www.cnblogs.com/helloworldtoyou/p/5406913.html
Copyright © 2020-2023  润新知