/***************************************************************************
*         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. HDU 3849 By Recognizing These Guys, We Find Social Networks Useful(双连通)

    HDU 3849 By Recognizing These Guys, We Find Social Networks Useful pid=3849" target="_blan ...

  2. [WARNING] mod_event_socket.c:2641 IP 172.18.1.112 Rejected by acl "loopback.auto"

    一.目标修改event_socket配置,使之能够建立远端ESL链接. 二.步骤 . vim ../autoload_configs/event_socket.conf.xml . 默认的监听地址配置 ...

  3. CSU1256 天朝的单行道(spfa)

    1256: 天朝的单行道 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 281  Solved: 92 [Submit][Status][pid=12 ...

  4. 利用WGET下载文件,并保存到指定目录

    wget是Linux上一个非常不错的下载指令,也算是Linux工作者常用的指令之一 而这个指令我想在各大系统都预设有提供,包括了Ubuntu.Fedora等,而一般来说,要使用wget下载档案,只需要 ...

  5. 【JEECG_3.7.1】列表多表头的设计

    先看下多表头的设计: 在这个多表头的表单当中,我们可以按照从上到下和从左往右的划分方式,将表头划分成三行十列,分别是: 列表标签 人员信息.部门信息.工资.入职状态.创建日期.操作 名称.年龄.性别. ...

  6. mysql 权限处理

    这是对mysql 业务用户在权限处理中遇到的坑: 之前在新建mysql 实例后会做两件事 1.增加业务库 2.为业务库增加一个与之对应的用户 create database appdb char se ...

  7. 使用jQuery的ajax同步请求吃过的亏

    jQuery是一个非经常常使用的js库.甚至我们开发不论什么一个项目都首先把jquery导入进行.jQuery太过强大,使用起来非常方便.可是在使用的过程中也遇到过非常多坑.我在这里分享一下.避免大家 ...

  8. 浅谈CPU,GPU,TPU,DPU,NPU,BPU

    https://www.sohu.com/a/191538165_777155 A12宣传的每秒5万亿次运算,用计算机语言描述就是5Tops. 麒麟970 NPU,根据资料是 1.92Tops. 麒麟 ...

  9. Mongodb查询引用

    var result = db.users.findOne({"name":"Tom Wu"},{"address_ids":1,_id:0 ...

  10. posix多线程--条件变量

    条件变量是用来通知共享数据状态信息的. 1.条件变量初始化两种方式:(1)静态初始化pthread_cond_t cond = PTHREAD_COND_INITIALIZER;代码示例如下: #in ...