全志T113i移植LAN8720指南

1、根据硬件修改设备树

gmac0_pins_a: gmac@0 {
        allwinner,pins = "PG0", "PG1", "PG2", "PG3", "PG4",
                 "PG5", "PG11", "PG12", "PG13", "PG14", "PG15";
        allwinner,function = "gmac0";
        allwinner,muxsel = <4>;
        allwinner,drive = <1>;
        allwinner,pull = <0>;
    };

    gmac0_pins_b: gmac@1 {
        allwinner,pins = "PG0", "PG1", "PG2", "PG3", "PG4",
                 "PG5", "PG11", "PG12", "PG13", "PG14", "PG15";
        allwinner,function = "gpio_in";
        allwinner,muxsel = <0>;
        allwinner,drive = <1>;
        allwinner,pull = <0>;
    };

&gmac0 {
    pinctrl-0 = <&gmac0_pins_a>;
    pinctrl-1 = <&gmac0_pins_b>;
    pinctrl-names = "default", "sleep";
    phy-mode = "rmii";
    use_ephy25m = <1>; /* 这里我用的是cpu提供的25M时钟给LAN8720使用 */
    tx-delay = <7>;
    rx-delay = <31>;
    phy-rst = <&pio PE 1 GPIO_ACTIVE_HIGH>;
    status = "okay";
};

加上复位引脚总共用到了12个引脚,如果不使用CPU提供的25M时钟则只要11个引脚,功能引脚定义如下图所示(不包含复位引脚):

 

2、修改以太网驱动代码

将kernel/linux-5.4/drivers/net/ethernet/allwinner/sunxi-gmac.c文件的第779行注释掉。

 

注释这行代码的原因是我用的这版本的SDK编译以太网驱动有BUG,不改的话移植LAN8720会出现了错误,错误信息为“/# Generic PHY 4500000.eth-0:00: Master/Slave resolution failed, maybe conflicting manual settings?”,排查内核代码发现错误产生在phy_device.c文件的genphy_read_lpa函数,这个函数的作用是读取LPA寄存器的值,错误原因是is_gigabit_capable变量置1了,导致程序一直读取千兆口才有的寄存器,进而报错,进一步排查发现is_gigabit_capable变量在phy初始化的时候都还是0,但是经过 sunxi-gmac.c文件中的geth_phy_init函数就变为1了,函数中显式的将该变量置为1了。最后注释掉这个语句,网口通信正常了,移植时可以先不修改代码,看看运行报不报错,可能后续版本的SDK不存在该问题。

 

3、修改内核驱动配置文件

把make kernel_menuconfig -> Device Drivers -> Network device support的PHY Device support and infrastructure->SMSC PHYs选上,重新编译内核就可以

问题排查方法:

1、首先排查25M的时钟和50M的时钟,正常情况下这两个时钟会一直输出。

2、排查设备树配置,每个引脚都需要配置。

3、检查硬件LAN8720的功能配置引脚

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值