AnsweredAssumed Answered

KSZ9031 on a SabreSD based board

Question asked by Durmuş Kurtuluş on Apr 14, 2015
Latest reply on Apr 27, 2016 by S R

Hello all,


I'm working on a custom i.MX6 board based on SabreSD.

I've been struggling with making the ethernet connection work for a couple of days now.


We're using KSZ9031RNX from Micrel as the PHY.


- Pin configuration is the same: RGMII, nRST, INT, CLK, etc.

- AVDDH = 3.3V, DVDDH = 2.5V, core = 1.2V using external regulator (MMPF0100 actually)

- Strappings:

     PHY_ADD = 1

     Mode = 1111: RGMII - advertise all capabilities

     CLK125_EN: enabled

     LED_MODE: tri-color dual mode


In U-Boot;

- I removed AR8031 related "mx6_rgmii_rework" lines and modified it for KSZ9031 using

the skew settings from another board with more or less the same length RGMII signals.


The link does not come up.


Then I tested the PHY in local loopback mode. After setting up the necessary registers (using mii

commands) and setting valid ipaddr and ethaddr parameters, I pinged my own address and it

seems to be OK.


=> mii write 1 9 1300

=> mii write 1 0 4140

=> ping

Using FEC device

host is alive


So, does that mean RGMII interface is OK?


In kernel;

- I enabled Micrel PHY driver support from menuconfig and compiled that way. Other than that,

no changes really. No link again.

The following lines comes up in the console:


Configuring network interfaces... fec 2188000.ethernet eth0: Freescale FEC PHY driver [Micrel KSZ9031 Gigabit PHY] (mii_bus:phy_addr=2188000.ethernet:01, irq=-1)

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


And the following is the ifconfig output:


root@imx6qdlsolo:/# ifconfig

eth0      Link encap:Ethernet  HWaddr BA:74:F7:68:38:76

          inet addr:  Bcast:  Mask:

          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)



lo        Link encap:Local Loopback

          inet addr:  Mask:

          inet6 addr: ::1/128 Scope:Host

          UP LOOPBACK RUNNING  MTU:65536  Metric:1

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

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

          collisions:0 txqueuelen:0

          RX bytes:700 (700.0 B)  TX bytes:700 (700.0 B)


Also, one funny thing is that when I make the PHY enter reset state, it says the link is up.


root@imx6qdlsolo:/# cd sys/class/gpio/

root@imx6qdlsolo:/sys/class/gpio# echo 25 > export

root@imx6qdlsolo:/sys/class/gpio# cd gpio25

root@imx6qdlsolo:/sys/class/gpio/gpio25# echo out > direction        (the value seems to 0 by default)

root@imx6qdlsolo:/sys/class/gpio/gpio25# libphy: 2188000.ethernet:01 - Link is Up - 1000/Full

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


Of course, actually it does not come up. What's up with that?


I can't locate the problem. Any help is appreciated.


Thanks in advance.