LAN7800 support
-
Hello, I'm trying to use LAN7800 with a VOXL2. I'm on SDK 1.4 with an EVB-LAN7800LC-1 evaluation board.
I've seen that the lan78xx driver requires Linux kernel 4.3+ but even though the VOXL is on 4.19.125, it looks like there's support for lan78xx?
I've confirmed that the adapter works on my Windows laptop, but the following is what happens when I connect it to the VOXL2 on the M0151's port
voxl2:/$ dmesg | grep lan78 [ 1.869189] usbcore: registered new interface driver lan78xx [ 3.326980] libphy: lan78xx-mdiobus: probed [ 4.342277] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000120. ret = -19 [ 4.342307] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000120. ret = -19 [ 4.342340] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000098. ret = -19 [ 4.342365] lan78xx 2-1:1.0 eth0: Failed to write register index 0x00000098. ret = -19 [ 4.342462] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000098. ret = -19 [ 4.342487] lan78xx 2-1:1.0 eth0: Failed to write register index 0x00000098. ret = -19 [ 4.342520] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000120. ret = -19 [ 4.869096] libphy: lan78xx-mdiobus: probed [ 12.810643] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000120. ret = -19 [ 12.810685] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000120. ret = -19 [ 12.810735] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000098. ret = -19 [ 12.810772] lan78xx 2-1:1.0 eth0: Failed to write register index 0x00000098. ret = -19 [ 12.810881] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000120. ret = -19 [ 12.810931] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000098. ret = -19 [ 12.810966] lan78xx 2-1:1.0 eth0: Failed to write register index 0x00000098. ret = -19 [ 12.811009] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000120. ret = -19 [ 13.329593] libphy: lan78xx-mdiobus: probed [ 27.122628] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000120. ret = -19 [ 27.122673] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000120. ret = -19 [ 27.122727] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000098. ret = -19 [ 27.122818] lan78xx 2-1:1.0 eth0: Failed to write register index 0x00000098. ret = -19 [ 27.123017] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000098. ret = -19 [ 27.123056] lan78xx 2-1:1.0 eth0: Failed to write register index 0x00000098. ret = -19 [ 27.123108] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000120. ret = -19 [ 27.657519] libphy: lan78xx-mdiobus: probed [ 28.098415] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000120. ret = -19 [ 28.098467] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000120. ret = -19 [ 28.098525] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000098. ret = -19 [ 28.098569] lan78xx 2-1:1.0 eth0: Failed to write register index 0x00000098. ret = -19 [ 28.098727] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000098. ret = -19 [ 28.098770] lan78xx 2-1:1.0 eth0: Failed to write register index 0x00000098. ret = -19 [ 28.098827] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000120. ret = -19 [ 28.610233] libphy: lan78xx-mdiobus: probed [ 30.898654] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000120. ret = -19 [ 30.898721] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000120. ret = -19 [ 30.898781] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000098. ret = -19 [ 30.898821] lan78xx 2-1:1.0 eth0: Failed to write register index 0x00000098. ret = -19 [ 30.898994] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000120. ret = -19 [ 30.899056] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000098. ret = -19 [ 30.899097] lan78xx 2-1:1.0 eth0: Failed to write register index 0x00000098. ret = -19 [ 30.899146] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000120. ret = -19 [ 31.412477] libphy: lan78xx-mdiobus: probed [ 32.814550] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000120. ret = -19 [ 32.814604] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000120. ret = -19 [ 32.814662] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000098. ret = -19 [ 32.814832] lan78xx 2-1:1.0 eth0: Failed to write register index 0x00000098. ret = -19 [ 32.814989] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000098. ret = -19 [ 32.815030] lan78xx 2-1:1.0 eth0: Failed to write register index 0x00000098. ret = -19 [ 32.815088] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000120. ret = -19 [ 33.326810] libphy: lan78xx-mdiobus: probed [ 33.476910] lan78xx 2-1:1.0 eth0: Failed to write register index 0x00000424. ret = -71 [ 33.477263] lan78xx 2-1:1.0 eth0: Failed to write register index 0x00000420. ret = -71 . . . [ 42.338752] lan78xx 2-1:1.0 eth0: Failed to write register index 0x00000098. ret = -19 [ 42.339081] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000098. ret = -19 [ 42.339126] lan78xx 2-1:1.0 eth0: Failed to write register index 0x00000098. ret = -19 [ 42.339185] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000120. ret = -19 [ 42.863468] libphy: lan78xx-mdiobus: probed [ 44.298561] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000120. ret = -19 [ 44.298614] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000120. ret = -19 [ 44.298674] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000098. ret = -19 [ 44.298720] lan78xx 2-1:1.0 eth0: Failed to write register index 0x00000098. ret = -19 [ 44.298867] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000098. ret = -19 [ 44.298911] lan78xx 2-1:1.0 eth0: Failed to write register index 0x00000098. ret = -19 [ 44.298966] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000120. ret = -19 [ 44.813080] libphy: lan78xx-mdiobus: probed [ 45.258417] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000120. ret = -19 [ 45.258469] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000120. ret = -19 [ 45.258651] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000098. ret = -19 [ 45.258697] lan78xx 2-1:1.0 eth0: Failed to write register index 0x00000098. ret = -19 [ 45.258842] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000098. ret = -19 [ 45.258886] lan78xx 2-1:1.0 eth0: Failed to write register index 0x00000098. ret = -19 [ 45.258942] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000120. ret = -19 [ 45.774138] libphy: lan78xx-mdiobus: probed [ 46.226421] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000120. ret = -19 [ 46.226472] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000120. ret = -19 [ 46.226529] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000098. ret = -19 [ 46.226572] lan78xx 2-1:1.0 eth0: Failed to write register index 0x00000098. ret = -19 [ 46.226716] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000098. ret = -19 [ 46.226759] lan78xx 2-1:1.0 eth0: Failed to write register index 0x00000098. ret = -19 [ 46.226814] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000120. ret = -19 [ 46.741781] libphy: lan78xx-mdiobus: probed [ 50.346684] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000120. ret = -19 [ 50.346739] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000120. ret = -19 [ 50.346801] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000098. ret = -19 [ 50.346847] lan78xx 2-1:1.0 eth0: Failed to write register index 0x00000098. ret = -19 [ 50.346991] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000120. ret = -19 [ 50.347061] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000098. ret = -19 [ 50.347107] lan78xx 2-1:1.0 eth0: Failed to write register index 0x00000098. ret = -19 [ 50.347164] lan78xx 2-1:1.0 eth0: Failed to read register index 0x00000120. ret = -19 [ 50.607172] lan78xx 2-1:1.0 (unnamed net_device) (uninitialized): Failed to read register index 0x00000098. ret = -71 [ 50.607688] lan78xx 2-1:1.0 (unnamed net_device) (uninitialized): Failed to read register index 0x00000098. ret = -71 [ 50.608208] lan78xx 2-1:1.0 (unnamed net_device) (uninitialized): Failed to read register index 0x00000010. ret = -71 [ 50.608668] lan78xx 2-1:1.0 (unnamed net_device) (uninitialized): Failed to write register index 0x00000010. ret = -71 [ 50.610775] lan78xx 2-1:1.0 (unnamed net_device) (uninitialized): Failed to read register index 0x00000010. ret = -71 [ 50.612909] lan78xx 2-1:1.0 (unnamed net_device) (uninitialized): Failed to read register index 0x00000010. ret = -71 [ 50.615291] lan78xx 2-1:1.0 (unnamed net_device) (uninitialized): Failed to read register index 0x00000010. ret = -71 [ 50.617395] lan78xx 2-1:1.0 (unnamed net_device) (uninitialized): Failed to read register index 0x00000010. ret = -71 [ 50.619530] lan78xx 2-1:1.0 (unnamed net_device) (uninitialized): Failed to read register index 0x00000010. ret = -71 [ 50.621638] lan78xx 2-1:1.0 (unnamed net_device) (uninitialized): Failed to read register index 0x00000010. ret = -71 [ 50.624239] lan78xx 2-1:1.0 (unnamed net_device) (uninitialized): Failed to read register index 0x00000010. ret = -71 [ 50.626414] lan78xx 2-1:1.0 (unnamed net_device) (uninitialized): Failed to read register index 0x00000010. ret = -71 [ 50.628507] lan78xx 2-1:1.0 (unnamed net_device) (uninitialized): Failed to read register index 0x00000010. ret = -71 [ 50.630636] lan78xx 2-1:1.0 (unnamed net_device) (uninitialized): Failed to read register index 0x00000010. ret = -71 [ 50.632776] lan78xx 2-1:1.0 (unnamed net_device) (uninitialized): Failed to read register index 0x00000010. ret = -71 [ 50.635169] lan78xx 2-1:1.0 (unnamed net_device) (uninitialized): Failed to read register index 0x00000010. ret = -71 [ 50.637805] lan78xx 2-1:1.0 (unnamed net_device) (uninitialized): Failed to read register index 0x00000010. ret = -71 [ 50.639887] lan78xx 2-1:1.0 (unnamed net_device) (uninitialized): Failed to read register index 0x00000010. ret = -71 [ 50.642301] lan78xx 2-1:1.0 (unnamed net_device) (uninitialized): Failed to read register index 0x00000010. ret = -71 [ 50.644417] lan78xx 2-1:1.0 (unnamed net_device) (uninitialized): Failed to read register index 0x00000010. ret = -71 [ 50.646512] lan78xx 2-1:1.0 (unnamed net_device) (uninitialized): Failed to read register index 0x00000010. ret = -71 [ 50.648658] lan78xx 2-1:1.0 (unnamed net_device) (uninitialized): Failed to read register index 0x00000010. ret = -71 [ 50.650747] lan78xx 2-1:1.0 (unnamed net_device) (uninitialized): Failed to read register index 0x00000010. ret = -71 [ 50.653185] lan78xx 2-1:1.0 (unnamed net_device) (uninitialized): Failed to read register index 0x00000010. ret = -71 [ 50.655546] lan78xx 2-1:1.0 (unnamed net_device) (uninitialized): Failed to read register index 0x00000010. ret = -71 [ 50.657652] lan78xx 2-1:1.0 (unnamed net_device) (uninitialized): Failed to read register index 0x00000010. ret = -71 [ 50.659752] lan78xx 2-1:1.0 (unnamed net_device) (uninitialized): Failed to read register index 0x00000010. ret = -71 . . . [ 51.611757] lan78xx 2-1:1.0 (unnamed net_device) (uninitialized): Failed to read register index 0x00000010. ret = -71 [ 51.614032] lan78xx 2-1:1.0 (unnamed net_device) (uninitialized): Failed to read register index 0x00000010. ret = -71 [ 51.614038] lan78xx 2-1:1.0 (unnamed net_device) (uninitialized): timeout on completion of LiteReset [ 51.614043] lan78xx 2-1:1.0 (unnamed net_device) (uninitialized): Registers INIT FAILED.... [ 51.614089] lan78xx 2-1:1.0 (unnamed net_device) (uninitialized): Bind routine FAILED [ 51.615072] lan78xx: probe of 2-1:1.0 failed with error -5
-
Hi @jcai ,
I am not sure about this one.. If a higher kernel version is required and the existing driver does not actually work, then maybe it is not a big surprise!
the kernel module is in the build, as specified in the config file here : https://gitlab.com/voxl-public/system-image-build/qrb5165-kernel/-/blob/qrb5165-ubun1.0-14.1a/arch/arm64/configs/vendor/kona-perf_defconfig#L328
Some info about the driver : https://gitlab.com/voxl-public/system-image-build/qrb5165-kernel/-/blob/qrb5165-ubun1.0-14.1a/arch/arm64/boot/dts/vendor/bindings/net/microchip,lan78xx.txt
You could try to pull source code from updated driver for this device from a newer kernel, drop it into the voxl2 kernel build and build the kernel with new driver. I think some users on this forum were able to do something similar with another device (not ethernet adapter).
Maybe try another ethernet adapter?
For example,
voxl2-mini:/$ lsusb -t /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 10000M |__ Port 1: Dev 2, If 0, Class=Vendor Specific Class, Driver=ax88179_178a, 5000M
voxl2-mini:/$ ethtool eth0 Settings for eth0: Supported ports: [ TP MII ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Half 1000baseT/Full ... Speed: 1000Mb/s Duplex: Full ...
voxl2-mini:/$ iperf -c <my desktop machine ip> ------------------------------------------------------------ Client connecting to <my desktop machine ip>, TCP port 5001 TCP window size: 85.0 KByte (default) ------------------------------------------------------------ [ 3] local <my voxl2 local ip> port 52708 connected with <my desktop machine ip> port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 339 MBytes 284 Mbits/sec
Did not quite get 1 gig (about 300Mbit/s), maybe there is a bottleneck somewhere, but maybe that will work for you..
Alex