imx-3.14.28-1.0.0_ga -> LAN8720 network card driver's issue

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

imx-3.14.28-1.0.0_ga -> LAN8720 network card driver's issue

Jump to solution
6,377 Views
haibohe
Contributor II

Software versions:

repo init -u git://git.freescale.com/imx/fsl-arm-yocto-bsp.git -b imx-3.14.28-1.0.0_ga

U-Boot 2014.04-r0 <- imx-3.14.28-1.0.0_ga

Kernel 3.14.28-r0 <- imx-3.14.28-1.0.0_ga

arm-poky-linux-gnueabi-gcc-4.9.1

Ubuntu 14.04 OS

How to transplant LAN8720 network card driver

                                                      thanks

1 Solution
2,681 Views
Sasamy
Contributor IV

Hi haibo he,

in the linux kernel 3.14.28 enet_ref clock is set to 125M (RGMII)

http://git.freescale.com/git/cgit.cgi/imx/linux-2.6-imx.git/tree/arch/arm/mach-imx/clk-imx6q.c?h=imx...

    /*Set enet_ref clock to 125M to supply for RGMII tx_clk */

    clk_set_rate(clk[IMX6QDL_CLK_ENET_REF], 125000000);

   

in case of LAN8720 enet_ref clock 50M (RMII) is required

View solution in original post

8 Replies
2,681 Views
BiyongSUN
NXP Employee
NXP Employee

The BSP is for AR8031 ethernet PHY.

Also need to modify code to make it working on the customed board.

0 Kudos
2,681 Views
haibohe
Contributor II

Modify the contents of the following:

arch\arm\boot\dts\imx6qdl.dtsi

fec: ethernet@02188000 {

  compatible = "fsl,imx6q-fec";

  reg = <0x02188000 0x4000>;

  interrupts-extended =

  <&intc 0 118 IRQ_TYPE_LEVEL_HIGH>,

  <&intc 0 119 IRQ_TYPE_LEVEL_HIGH>;

  clocks = <&clks IMX6QDL_CLK_ENET>,

  <&clks IMX6QDL_CLK_ENET>,

  <&clks IMX6QDL_CLK_ENET_REF>;

  clock-names = "ipg", "ahb", "ptp";

  status = "disabled";

};

arch\arm\boot\dts\imx6q-pinfunc.h

#define MX6QDL_PAD_GPIO_16__ENET_REF_CLK            0x248 0x618 0x83c 0x12 0x1

arch\arm\boot\dts\imx6qdl-sabresd.dtsi

&fec {

  pinctrl-names = "default";

  pinctrl-0 = <&pinctrl_enet>;

  phy-mode = "rmii";

  phy-reset-gpios = <&gpio1 23 0>; /* GPIO1_23 */

  phy-reset-duration = <2>;

  fsl,magic-packet;

  status = "okay";

pinctrl_enet: enetgrp {

  fsl,pins = <

  /* MX6QDL_PAD_ENET_MDIO__ENET_MDIO 0x1b0b0

  MX6QDL_PAD_ENET_MDC__ENET_MDC 0x1b0b0

  MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x1b0b0

  MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x1b0b0

  MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x1b0b0

  MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x1b0b0

  MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x1b0b0

  MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0

  MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK 0x1b0b0

  MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b0b0

  MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x1b0b0

  MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x1b0b0

  MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b0b0

  MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b0b0

  MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0

  MX6QDL_PAD_GPIO_16__ENET_REF_CLK 0x4001b0a8 

  */

   MX6QDL_PAD_ENET_MDC__ENET_MDC         0x1b0b0

  MX6QDL_PAD_ENET_MDIO__ENET_MDIO       0x1b0b0

  MX6QDL_PAD_ENET_CRS_DV__ENET_RX_EN  0x1b0b0

  MX6QDL_PAD_ENET_RXD0__ENET_RX_DATA0  0x1b0b0

  MX6QDL_PAD_ENET_RXD1__ENET_RX_DATA1  0x1b0b0

  MX6QDL_PAD_ENET_TX_EN__ENET_TX_EN     0x1b0b0

  MX6QDL_PAD_ENET_TXD0__ENET_TX_DATA0   0x1b0b0

  MX6QDL_PAD_ENET_TXD1__ENET_TX_DATA1   0x1b0b0

  MX6QDL_PAD_GPIO_16__ENET_REF_CLK      0x4001b0b0

  MX6QDL_PAD_ENET_RX_ER__ENET_RX_ER     0x1b0b0

  MX6QDL_PAD_ENET_REF_CLK__GPIO1_IO23   0x80000000

  MX6QDL_PAD_GPIO_18__GPIO7_IO13        0x80000000

   >;

  };

root@meihuan:~# ethtool eth0

Settings for eth0:

        Supported ports: [ TP MII ]

        Supported link modes:   10baseT/Half 10baseT/Full

                                100baseT/Half 100baseT/Full

        Supported pause frame use: Symmetric

        Supports auto-negotiation: Yes

        Advertised link modes:  10baseT/Half 10baseT/Full

                                100baseT/Half 100baseT/Full

        Advertised pause frame use: Symmetric

        Advertised auto-negotiation: Yes

        Speed: 10Mb/s

        Duplex: Half

        Port: MII

        PHYAD: 0

        Transceiver: external

        Auto-negotiation: on

        Supports Wake-on: g

        Wake-on: d

        Link detected: no

root@meihuan:~# ifconfig

eth0      Link encap:Ethernet  HWaddr 00:00:00:00:00:03 

          UP BROADCAST MULTICAST  MTU:1500  Metric:1

          RX packets:0 errors:0 dropped:0 overruns:0 frame:0

          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth1      Link encap:Ethernet  HWaddr 0A:FF:D0:98:A3:48 

          inet addr:192.168.15.58  Bcast:192.168.15.255  Mask:255.255.255.0

          inet6 addr: fe80::8ff:d0ff:fe98:a348/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:31116 errors:0 dropped:0 overruns:0 frame:0

          TX packets:22303 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:36342916 (34.6 MiB)  TX bytes:3790876 (3.6 MiB)

lo        Link encap:Local Loopback 

          inet addr:127.0.0.1  Mask:255.0.0.0

          inet6 addr: ::1/128 Scope:Host

          UP LOOPBACK RUNNING  MTU:65536  Metric:1

          RX packets:8 errors:0 dropped:0 overruns:0 frame:0

          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0

          RX bytes:784 (784.0 B)  TX bytes:784 (784.0 B)

root@meihuan:~#

eth0-> LAN8720  Does not work, LED not lit
eth1-> Smsc95xx was turn USB network card, Normal working

0 Kudos
2,682 Views
Sasamy
Contributor IV

Hi haibo he,

in the linux kernel 3.14.28 enet_ref clock is set to 125M (RGMII)

http://git.freescale.com/git/cgit.cgi/imx/linux-2.6-imx.git/tree/arch/arm/mach-imx/clk-imx6q.c?h=imx...

    /*Set enet_ref clock to 125M to supply for RGMII tx_clk */

    clk_set_rate(clk[IMX6QDL_CLK_ENET_REF], 125000000);

   

in case of LAN8720 enet_ref clock 50M (RMII) is required

2,681 Views
marcocavallini
Contributor V

Great job Alexander!

I confirm that using LAN8720 you have to replace the hard-coded setting in arch/arm/mach-imx/clk-imx6q.c

//    clk_set_rate(clk[IMX6QDL_CLK_ENET_REF], 125000000);

    clk_set_rate(clk[IMX6QDL_CLK_ENET_REF],  50000000);

0 Kudos
2,681 Views
haibohe
Contributor II

Issue has been resolved

Thank you very much for your technical support.

0 Kudos
2,681 Views
florian_germain
Contributor II

Do you confirm that you modify dts?

arch\arm\boot\dts\imx6qdl.dtsi

fec: ethernet@02188000 {

  compatible = "fsl,imx6q-fec";

  reg = <0x02188000 0x4000>;

  interrupts-extended =

  <&intc 0 118 IRQ_TYPE_LEVEL_HIGH>,

  <&intc 0 119 IRQ_TYPE_LEVEL_HIGH>;

  clocks = <&clks IMX6QDL_CLK_ENET>,

  <&clks IMX6QDL_CLK_ENET>,

  <&clks IMX6QDL_CLK_ENET_REF>;

  clock-names = "ipg", "ahb", "ptp";

  status = "disabled";

};

You don't set IMX6QDL_CLK_ENET_125M?

If you use this configuration, why is there two IMX6QDL_CLK_ENET?

0 Kudos
2,681 Views
haibohe
Contributor II

modify are as follows

arch\arm\boot\dts\imx6qdl-sabresd.dtsi

&iomuxc {

  pinctrl-names = "default";

  pinctrl-0 = <&pinctrl_hog>;

  imx6qdl-sabresd {

  pinctrl_hog: hoggrp {

  fsl,pins = <

/*

  MX6QDL_PAD_NANDF_D0__GPIO2_IO00 0x80000000

  MX6QDL_PAD_NANDF_D1__GPIO2_IO01 0x80000000

  MX6QDL_PAD_NANDF_D2__GPIO2_IO02 0x80000000

  MX6QDL_PAD_NANDF_D3__GPIO2_IO03 0x80000000

  MX6QDL_PAD_GPIO_0__CCM_CLKO1    0x130b0

  MX6QDL_PAD_NANDF_CLE__GPIO6_IO07 0x80000000

  MX6QDL_PAD_NANDF_ALE__GPIO6_IO08 0x80000000

  MX6QDL_PAD_ENET_TXD1__GPIO1_IO29 0x80000000

  MX6QDL_PAD_EIM_D22__GPIO3_IO22  0x80000000

  MX6QDL_PAD_ENET_CRS_DV__GPIO1_IO25 0x80000000

  MX6QDL_PAD_EIM_D26__GPIO3_IO26 0x80000000

  MX6QDL_PAD_EIM_CS1__GPIO2_IO24 0x80000000

  MX6QDL_PAD_ENET_RXD0__GPIO1_IO27 0x80000000

  MX6QDL_PAD_EIM_A25__GPIO5_IO02 0x80000000

  MX6QDL_PAD_EIM_D23__GPIO3_IO23 0x80000000

  MX6QDL_PAD_EIM_EB3__GPIO2_IO31 0x80000000

  MX6QDL_PAD_SD1_CMD__GPIO1_IO18 0x80000000

  MX6QDL_PAD_EIM_D16__GPIO3_IO16 0x80000000

  MX6QDL_PAD_SD3_RST__GPIO7_IO08 0x80000000

  MX6QDL_PAD_GPIO_9__GPIO1_IO09  0x80000000

  MX6QDL_PAD_EIM_DA9__GPIO3_IO09 0x80000000

  MX6QDL_PAD_GPIO_1__WDOG2_B 0x80000000

  MX6QDL_PAD_NANDF_CS0__GPIO6_IO11 0x80000000

  MX6QDL_PAD_NANDF_CS1__GPIO6_IO14 0x80000000

*/

  MX6QDL_PAD_GPIO_4__GPIO1_IO04   0x80000000

  MX6QDL_PAD_EIM_BCLK__GPIO6_IO31 0x80000000

  MX6QDL_PAD_CSI0_DATA_EN__GPIO5_IO20 0x80000000

  MX6QDL_PAD_KEY_COL2__GPIO4_IO10 0x80000000

  MX6QDL_PAD_SD3_RST__GPIO7_IO08  0x80000000

  MX6QDL_PAD_EIM_D20__GPIO3_IO20  0x80000000

  MX6QDL_PAD_NANDF_D0__GPIO2_IO00 0x80000000

  MX6QDL_PAD_NANDF_D1__GPIO2_IO01 0x80000000

  MX6QDL_PAD_NANDF_D2__GPIO2_IO02 0x80000000

  MX6QDL_PAD_NANDF_D3__GPIO2_IO03 0x80000000

  MX6QDL_PAD_NANDF_ALE__GPIO6_IO08 0x80000000

  MX6QDL_PAD_NANDF_CLE__GPIO6_IO07 0x80000000

  MX6QDL_PAD_GPIO_0__CCM_CLKO1    0x130b0

  MX6QDL_PAD_NANDF_CS2__GPIO6_IO15 0x80000000

  MX6QDL_PAD_NANDF_CS3__GPIO6_IO16 0x80000000

  MX6QDL_PAD_EIM_A25__GPIO5_IO02 0x80000000

  MX6QDL_PAD_EIM_D23__GPIO3_IO23 0x80000000

  MX6QDL_PAD_EIM_D22__GPIO3_IO22  0x80000000

  MX6QDL_PAD_NANDF_CS0__GPIO6_IO11 0x80000000

  MX6QDL_PAD_NANDF_CS1__GPIO6_IO14 0x80000000

  MX6QDL_PAD_EIM_EB3__GPIO2_IO31 0x80000000

  MX6QDL_PAD_EIM_DA9__GPIO3_IO09 0x80000000

  MX6QDL_PAD_GPIO_9__GPIO1_IO09 0x80000000

  MX6QDL_PAD_GPIO_2__GPIO1_IO02 0x80000000

  MX6QDL_PAD_SD1_DAT1__GPIO1_IO17 0x80000000

  >;

  };

&fec {

  pinctrl-names = "default";

  pinctrl-0 = <&pinctrl_enet>;

  phy-mode = "rmii";

  phy-reset-gpios = <&gpio1 23 0>; /* GPIO1_23 */

  phy-reset-duration = <1>;

  fsl,magic-packet;

  status = "okay";

};

root@imx6solosabresd:~# ifconfig eth0

eth0      Link encap:Ethernet  HWaddr 00:6A:08:B0:AB:03 

          inet addr:192.168.15.221  Bcast:192.168.15.255  Mask:255.255.255.0

          inet6 addr: fe80::26a:8ff:feb0:ab03/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:15 errors:0 dropped:0 overruns:0 frame:0

          TX packets:45 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:1492 (1.4 KiB)  TX bytes:8222 (8.0 KiB)

Normal work  

issue is: 

TFTP and NFS server 

bootargs_nfs=setenv bootargs ${bootargs} root=/dev/nfs ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp

log info:

fec 2188000.ethernet eth0: Freescale FEC PHY driver [Generic PHY] (mii_bus:phy_addr=2188000.ethernet:00, irq=-1)

IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready

smsc95xx 1-1.1:1.0 eth1: hardware isn't capable of remote wakeup

IPv6: ADDRCONF(NETDEV_UP): eth1: link is not ready

libphy: 2188000.ethernet:00 - Link is Up - 100/Full

IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready

Sending DHCP requests .,

DHCP/BOOTP: Ignoring delayed packet

..,

usb 1-1.5: new high-speed USB device number 5 using ci_hdrc

DHCP/BOOTP: Ignoring delayed packet

.

There is no problem with the environment

0 Kudos
2,681 Views
haibohe
Contributor II

modify clk for 50M

eth0-> LAN8720 LED light

0 Kudos