/***************************************************************************
*         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不通
  进行如下尝试: .首先关闭电脑和板子上的防火墙。
  
.板子添加默认网关  
    route add default gw 192.168.2.1 netmask 255.255.255.0
  
.查看电脑上是否有到板子的arp表项。
arp -a
接口: 192.168.2.110 --- 0xb
Internet 地址 物理地址 类型
224.0.0.2 --5e--- 静态
224.0.0.22 --5e--- 静态
224.0.0.251 --5e---fb 静态
224.0.0.252 --5e---fc 静态
239.255.255.250 --5e-7f-ff-fa 静态   如果没有,在windows上添加静态arp。
  使用 netsh i i show in 命令 查看 本地连接的idx编号
    
C:\Windows\system32>netsh i i show in Idx Met MTU 状态 名称
--- ---------- ---------- ------------ ---------------------------
connected Loopback Pseudo-Interface
connected 本地连接
connected 本地连接
connected VMware Network Adapter VMnet1
connected VMware Network Adapter VMnet8
  使用 netsh -c "i i" add neighbors 本地连接的idx “网关IP” “网关mac” 命令绑定。
    网关mac是板子的mac。
    netsh -c "i i" add neighbors "192.168.2.1" "1e-ed-19-27-1a-b3"
  查看结果:
接口: 192.168.2.110 --- 0xb
Internet 地址 物理地址 类型
192.168.2.1 1e-ed---1a-b3 静态
224.0.0.2 --5e--- 静态
224.0.0.22 --5e--- 静态
224.0.0.251 --5e---fb 静态
224.0.0.252 --5e---fc 静态
239.255.255.250 --5e-7f-ff-fa 静态 二、板子通过交换机可以ping同电脑。 、板子的phy是ar8031,连接交换机之后,可以ping通电脑。怀疑可能线序有问题,所以采用交叉线进行直连,也不能ping通。
、交换机只支持10M/100M,查看PC网卡属性,链接速度也自协商到100M,而此时板子上的网络也是100M,所以能够ping通。初步分析,直连情况下,电脑网卡和板子上phy自协商失败。
、直连情况下,将电脑的网卡速率强制设置为10M全双工/半双工,板子网络也变为10M半双工,说明自协商成功,只是在1000M的状态被限制了。
更改电脑网卡速率,板子串口输出。
PHY: : - Link is Down
PHY: : - Link is Up - /Half
三、代码跟踪
、可能是phy设置有误,上网查看,设置的内容都一样,更改phy设置没有生效。
、查看驱动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 &= ~( << );
}
else {
val |= ( << );
}
  ... ... ...  
  //说明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 << ); //使能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 << );
/* enable ENET store and forward mode */
writel(0x1 << , 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\网络连接。右键网卡,属性->配置->高级,如下图所示。

imx6 ar8031 千兆网卡不能用的更多相关文章

  1. I.MX6 开启 1000Mb/s interface

    /*********************************************************************** * I.MX6 开启 1000Mb/s interfa ...

  2. imx6 fec分析

    /***************************************************************************** * imx6 fec分析 * 本文主要分析 ...

  3. imx6 matrix keyboard

    imx6需要添加4x4的矩阵键盘.本文记录添加方法. 参考链接 http://processors.wiki.ti.com/index.php/TI-Android-JB-PortingGuide h ...

  4. imx6 关闭调试串口

    需要关闭imx6调试串口,用作普通的串口使用. 参考链接 http://blog.csdn.net/neiloid/article/details/7585876 http://www.cnblogs ...

  5. imx6 Image Vector Table (IVT)

    imx6开启启动之后,运行板子上的ROM程序.ROM确定启动的设备,进行一些初始化,然后读取IVT,进行寄存器初始化,最后运行uboot/cpu/arm_cortexa8/start.S中的_star ...

  6. imx6 usb otg config 配置

    imx6 usb的host和slave配置,配置之后,安装gadget模块,就能够在host和slave之间切换. 参考文档: i.MX 6Dual/6Quad Linux Reference Man ...

  7. imx6 gpio irq

    /***************************************************************** * gpio irq * * 一直以来都没了解过gpio的irq, ...

  8. imx6 otg host support

    本文记录添加imx6 otg host支持的过程. 参考链接 http://www.cnblogs.com/helloworldtoyou/p/6108560.html https://communi ...

  9. imx6 RGB LCD

    imx6dl需要支持lcd接口的屏,imx6dl的datasheet并没有明确的说明lcd相关的配置,只在Display Content Integrity Checker (DCIC)一章中介绍.本 ...

随机推荐

  1. Windows 7 64bit上安装Oracle Database 12c [INS-30131] 错误的解决方法

    Windows 7 64bit上安装Oracle Database 12c,出现以下错误: 解决方法: 第一步:控制面板>所有控制面板项>管理工具>服务>SERVER  启动 ...

  2. QListWidget加入小控件

    在写一个简单的文件浏览器时,遇到一个问题.想实现新建目录时能像一般的文件管理器那样,目录图标以下有一个编辑框提示用户给目录命名(例如以下图),可是不知道怎么给单元项QListWidgetItem加入Q ...

  3. unity + win8.1 apps 小游戏demo

    unity3d用的人挺多. . .本来想写个3d游戏试试. .额..貌似挺麻烦.. . .. ..先用unity写个简单的2d游戏吧.. (adsw回车  或者  触摸屏虚拟摇杆) 开发环境 unit ...

  4. CSS实现超级链接需要通过双击后跳转

    超级链接需要双击后跳转如何实现. CSS代码.test3 span { position: relative;}.test3 span a { position: relative;z-index: ...

  5. 【Android】19.2 ShareActionProvider类—帮你把信息分享出去

    分类:C#.Android.VS2015: 创建日期:2016-03-06 一.简介 共享操作提供程序类(ShareActionProvider)简化了你希望与其他人(或者其他应用程序)共享或分享出来 ...

  6. 转:python常用运维脚本实例

    python常用运维脚本实例 转载  file是一个类,使用file('file_name', 'r+')这种方式打开文件,返回一个file对象,以写模式打开文件不存在则会被创建.但是更推荐使用内置函 ...

  7. Java NIO- Selector 使用示例

    Selector selector = Selector.open(); channel.configureBlocking(false); SelectionKey key = channel.re ...

  8. linux命令(32):cat

    1.cat 显示文件连接文件内容的工具: cat 是一个文本文件查看和连接工具.查看一个文件的内容,用cat比较简单,就是cat 后面直接接文件名. 比如: [root@localhost ~]# c ...

  9. django数据库基本操作-增删改查(tip)-基本

    补充:django外键保存 #外键保存 form_data = Form_Data() project, is_created = Project_Name.objects.get_or_create ...

  10. Zabbix添加自定义监控项(一)

    前言:由于Zabbix提供的项目和模板有限,有时我们需要自定义监控项,下面以监控磁盘I/O使用率为例,创建自动发现规则,并配置图形. (1)Zabbix_agentd端自动发现脚本,zabbix要求返 ...