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不通
进行如下尝试: .首先关闭电脑和板子上的防火墙。
.板子添加默认网关
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 千兆网卡不能用的更多相关文章
- I.MX6 开启 1000Mb/s interface
		
/*********************************************************************** * I.MX6 开启 1000Mb/s interfa ...
 - imx6 fec分析
		
/***************************************************************************** * imx6 fec分析 * 本文主要分析 ...
 - imx6 matrix keyboard
		
imx6需要添加4x4的矩阵键盘.本文记录添加方法. 参考链接 http://processors.wiki.ti.com/index.php/TI-Android-JB-PortingGuide h ...
 - imx6 关闭调试串口
		
需要关闭imx6调试串口,用作普通的串口使用. 参考链接 http://blog.csdn.net/neiloid/article/details/7585876 http://www.cnblogs ...
 - imx6 Image Vector Table (IVT)
		
imx6开启启动之后,运行板子上的ROM程序.ROM确定启动的设备,进行一些初始化,然后读取IVT,进行寄存器初始化,最后运行uboot/cpu/arm_cortexa8/start.S中的_star ...
 - imx6 usb otg config 配置
		
imx6 usb的host和slave配置,配置之后,安装gadget模块,就能够在host和slave之间切换. 参考文档: i.MX 6Dual/6Quad Linux Reference Man ...
 - imx6 gpio irq
		
/***************************************************************** * gpio irq * * 一直以来都没了解过gpio的irq, ...
 - imx6 otg host support
		
本文记录添加imx6 otg host支持的过程. 参考链接 http://www.cnblogs.com/helloworldtoyou/p/6108560.html https://communi ...
 - imx6 RGB LCD
		
imx6dl需要支持lcd接口的屏,imx6dl的datasheet并没有明确的说明lcd相关的配置,只在Display Content Integrity Checker (DCIC)一章中介绍.本 ...
 
随机推荐
- 【转】python2与python3的主要区别
			
摘自:http://www.cnblogs.com/codingmylife/archive/2010/06/06/1752807.html 1.性能 Py3.0运行 pystone benchmar ...
 - How to kill a process on a port on linux 怎么杀死 关掉一个端口
			
sudo kill `sudo lsof -t -i:9001`
 - linux命令行下使用反斜杠“\”调用别名的原命令
			
经常看到linux软件的作者在介绍安装软件时,在命令前面加一个反斜杠,不解其意,后来查阅资料才知道,这是为了取消别名的调用,使用原命令. alias是shell的内置命令,可以用来设置命令的别名,如使 ...
 - apache配置,禁止指定后缀访问
			
每天都有人来服务器上扫描点什么,想下载点数据库或者什么的 服务器是java的,没有asp或者mdb这样的访问 用一下配置,可以禁止asp或者mdb访问,也可以加上zip和rar禁止 <Direc ...
 - protobuf c++入门
			
1.在.proto文件中定义消息格式 2.使用protobuf编译器 3.使用c++ api来读写消息 0.为何使用protobuf? 1.原始内存数据结构,可以以二进制方式sent/save ...
 - linux 最常用的yum源remi
			
Remi repository是包含最新版本php和mysql包的linux源. . Enterprise Linux (with EPEL) x86_64 wget https://dl.fedor ...
 - 【转】转 Linux调优方案,sysctl.conf的设置
			
http://blog.sina.com.cn/s/blog_541086000100skq0.html proc/sys/net/ipv4/下各项的意义 http://blog.chinauni ...
 - Activiti工作流学习要点
			
1. 1个插件 在Eclipse中安装Activiti插件,让你可以在Eclipse中绘制Activiti工作流图 2. 1个引擎 ProcessEngine对象,Activiti工作流引擎.这是Ac ...
 - iOS导航栏背景,标题和返回按钮文字颜色
			
在iOS7下,默认导航栏背景,颜色是这样的,接下来我们就进行自定义,如果你仅仅是更改一下背景和颜色,代码会很简单,不需要很复杂的自定义View来替代leftBarItem 更改导航栏的背景和文字Col ...
 - 4款基于html5 canvas充满想象力的重力特效
			
今天给大家分享4个物理和重力实验,用来展示 html canvas 的强大.几年前,所有这些实验都必须使用 Java 或 Flash 才能做.在下面这些惊人的例子中,就个人而言,我比较喜欢仿真布料的那 ...