imx6 ar8031 千兆网卡不能用

/***************************************************************************
 *         imx6 ar8031 千兆网卡不能用
 * imx6无论是运行linux还是android都无法ping通直连的pc,但是配置成dhcp却能够正常上网。
 * 本文记录解决过程。
 *
 *                                     Tony Liu, 2016-4-19, Shenzhen                              
 */
一、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 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)
时间: 2024-10-17 02:29:23

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

I.MX6 开启 1000Mb/s interface

/*********************************************************************** * I.MX6 开启 1000Mb/s interface * 说明: * 最近出现1000Mb/s网卡不用的现象,于是tony对这个问题进行了解决. * * 2016-4-20 深圳 南山平山村 曾剑锋 **********************************************************************/ 一.

[转] 千兆网卡如何才能达到全速

千兆网卡如何才能达到全速 博客分类: 架构研究 1000Mb网卡如何才能跑满,跑到100%? 作者:赵磊 博客:http://elf8848.iteye.com 千兆网卡理论最大传输速度是(1024Mbit/s=128MByte/s),注意b与B差了8倍. 要想达到最大传输速度要满足三个条件 : 1. 使用超五类双绞线,线序没什么变化,是568B. 2. 把电脑BIOS的SATA选项的IDE模式设置为AHCI)模式.我以前用 Think Pad T400笔记本运行Windows XP系统时,要先

IMX6 GPIO的定义

比如定义PAD_GPIO_19作为一个GPIO_4_5使用: #define  MX6Q_PAD_GPIO_19__GPIO_4_5     (_MX6Q_PAD_GPIO_19__GPIO_4_5 | MUX_PAD_CTRL(NO_PAD_CTRL)) 看上面的宏: _MX6Q_PAD_GPIO_19__GPIO_4_5 它的定义是: #define _MX6Q_PAD_GPIO_19__GPIO_4_5      IOMUX_PAD(0x0624, 0x0254, 5, 0x0000, 0

imx6中iomux IO复用

IOMUX Controller (IOMUXC) IO多路复用控制器1.overviewThe IOMUX Controller (IOMUXC), together with the IOMUX, enables the IC to share one pad to several functional blocks.IOMUXC和IOMUX使IMX6能够多个功能模块公用一个pad. 共用是通过对pad的输入/输出信号的多路复用技术来实现的.每一个模块需要一个特定的pad设置, 且对于每一个

I.MX6 AR8031 寄存器操作

/*************************************************************************** * I.MX6 AR8031 寄存器操作 * 说明: * 解读一下AR8031这颗PHY的寄存器要如何操作,了解PHY的MDIO是如何操作的. * * 2017-4-12 深圳 龙华民治樟坑村 曾剑锋 ************************************************************************

dell m630刀片服务器千兆网卡不能自适应

单位的新加了5台刀片服务卡器,3台M630以及2台M820.我系统都是装的windows 2008R2 其中一台M630今天临时说要连接公网而且要分配外网IP,做好网线和外网连接,用笔记本输入公网IP后测试都是正常,但是连上M630网卡连灯都不亮,那叫一个蛋疼. 折腾好久才发现原因: 我只管服务器不管网络,后来才发现外网的cisco交换机是100M口,而dell M630刀片是千兆网卡,而且是不会自适应降成100m,够任性的! 找网络工程师换个千兆交换机就OK了

I.MX6 Ar8031 device register hacking

/***************************************************************************** * I.MX6 Ar8031 device register hacking * 声明: * 主要是为了知道网卡的注册流程,如果需要对网卡中的一些需求进行修改时,能够 * 能够快速的对需求进行分析.修改. * * 2015-8-15 雨 深圳 南山区平山村 曾剑锋 **************************************

【转载】tslib移植_freescale imx6

本文来自网络:http://blog.csdn.net/xishuang_gongzi/article/details/49422879 环境:host:Ubuntu12.04target:freescale imx6交叉编译链:4.6.2tslib源代码:在https://github.com/kergoth/tslib下载到较新版本tslib安装目标路径:/imx_disk/xx/qt/tslib 安装步骤: 1.准备工作确保以下软件已安装 # apt-get install autocon

Imx6 spi时钟

阅读手册知,imx6 的 spi 时钟是针对某一个 spi 通道进行配置的.imx6下共有5个 spi通道,spi1 ~ spi5 以下为手册相关内容说明: CCGR1 寄存器相关内容