Hello,
I have custom board that is using a Marvell E88E1512 PHY that I am trying to use for RGMII (1 Gb/s). I had this working before on R35.4.1 with no issues but when I tried to upgrade to R36.3 now I can’t get it to work. I followed the guide provided by the online documentation for modifying the device tree table and this is what I have.
R36.3 Ethernet Device Table
ethernet@2310000 {
status = "okay";
nvidia,mac-addr-idx = <0>;
phy-mode = "rgmii-id";
phy-handle = <&phy>;
nvidia,phy-reset-gpio = <&gpio TEGRA234_MAIN_GPIO(G, 5) 0>;
nvidia, max-platform-mtu = <1683>;
mdio {
compatible = "nvidia,eqos-mdio";
#address-cells = <1>;
#size-cells = <0>;
phy: phy@0 {
reg = <0>;
nvidia,phy-rst-pdelay-msec = <224>; /* msec */
nvidia,phy-rst-duration-usec = <10000>; /* usec */
interrupt-parent = <&gpio>;
interrupts = <TEGRA234_MAIN_GPIO(G, 4) IRQ_TYPE_LEVEL_LOW>;
marvell,copper-mode; //PHY Driver
/* Setup LED[2] as interrupt pin (active low) */
marvell,reg-init = <0x03 0x12 0x7fff 0x880>, <0x12 0x14 0x0007 0x0000>, <0x12 0x14 0x8000 0x8000>;
};
};
};
I am using the exact same pinmux files between the two versions so I am pretty sure that is fine but here is the busybox results anyway (Both versions have the exact busybox results):
Busybox Results
test@test-desktop:~/Downloads$ sudo sh busybox.sh
Register : Data Read
0x02434070: 0x00000058
0x02434078: 0x00000000
0x02445058: 0x00002400
0x02445018: 0x00002400
0x02445010: 0x00002400
0x02445008: 0x00002400
0x02445000: 0x00002400
0x02445068: 0x00002400
0x02445040: 0x00002458
0x02445030: 0x00002458
0x02445028: 0x00002458
0x02445020: 0x00002458
0x02445070: 0x00002458
0x02445060: 0x00002458
0x02445038: 0x00002440
0x02445048: 0x00002400
0x02445050: 0x00002000
What is really strange is that when I run ifconfig it looks like I am seeing some RX traffic but nothing along TX for eth1 (1 Gb/s location I am trying to configure):
eth0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1466
ether 48:b0:2d:f1:c5:81 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth1: flags=4099<UP,BROADCAST,MULTICAST> mtu 1466
ether 48:b0:2d:f1:c5:80 txqueuelen 1000 (Ethernet)
RX packets 10132 bytes 526177 (526.1 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 1709 bytes 106390 (106.3 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1709 bytes 106390 (106.3 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
I can also see the device when I run mdio:
test@test-desktop:~$ sudo mdio
2310000.ethernet
6800000.ethernet
fixed-0
When I query the the device it looks like it is reporting the correct information but for some reason the device seems to be stuck in auto-negotiation.
test@test-desktop:~$ sudo mdio 2310000.ethernet 0x00
BMCR(0x00): 0x1140
flags: -reset -loopback +aneg-enable -power-down -isolate -aneg-restart
-collision-test
speed: 1000-full
BMSR(0x01): 0x796d
capabilities: -100-t4 +100-tx-f +100-tx-h +10-t-f +10-t-h -100-t2-f -100-t2-h
flags: +ext-status +aneg-complete -remote-fault +aneg-capable +link
-jabber +ext-register
ID(0x02/0x03): 0x01410dd1
ESTATUS(0x0F): 0x3000
capabilities: -1000-x-f -1000-x-h +1000-t-f +1000-t-h
The only major difference I see is inside dmesg where I am getting an error for the phy with R36.3 that I didn’t see in the previous version. I am concerned because I know that the UPHY controls the ethernet settings and can see that it reports that the marvell module is impacted by the phy error.
[ 11.836323] ------------[ cut here ]------------
[ 11.836337] WARNING: CPU: 0 PID: 298 at drivers/net/phy/phy.c:955 phy_error+0x20/0x70
[ 11.836368] Modules linked in: marvell ramoops reed_solomon snd_soc_tegra210_ope(O) snd_soc_tegra210_mixer(O) snd_soc_tegra186_asrc(O) snd_soc_tegra210_admaif(O) snd_soc_tegra186_arad(O) snd_soc_tegra_pcm sn0
[ 11.836468] i2c_nvvrs11(O) nvhost_isp5(O) nvhost_vi5(O) tegra_dce(O) nvhost_nvcsi_t194(O) libcomposite tegra_camera(O) v4l2_dv_timings nvhost_nvcsi(O) tegra_camera_platform(O) capture_ivc(O) tegra_camera_rt)
[ 11.836559] CPU: 0 PID: 298 Comm: kworker/u24:6 Tainted: G OE 5.15.136-tegra #1
[ 11.836563] Hardware name: NVIDIA NVIDIA Jetson AGX Orin Developer Kit/Jetson, BIOS 36.3.0-gcid-36191598 05/06/2024
[ 11.836566] Workqueue: events_power_efficient phy_state_machine
[ 11.836575] pstate: 60400009 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[ 11.836579] pc : phy_error+0x20/0x70
[ 11.836582] lr : phy_error+0x20/0x70
[ 11.836585] sp : ffff800009f7bd40
[ 11.836586] x29: ffff800009f7bd40 x28: 0000000000000000 x27: 0000000000000000
[ 11.836589] x26: ffff000080baeb74 x25: ffff00008001e005 x24: ffff00008000b0b0
[ 11.836592] x23: 00000000ffffffea x22: ffff00009325d488 x21: ffff00009325d4e0
[ 11.836595] x20: 0000000000000003 x19: ffff00009325d000 x18: ffffffffffffffff
[ 11.836598] x17: 0000000000000000 x16: ffff800008000000 x15: 0000000000000001
[ 11.836601] x14: ffffffffffffffff x13: 0000000000000030 x12: 0101010101010101
[ 11.836604] x11: 7f7f7f7f7f7f7f7f x10: fefefefefefefeff x9 : ffff000080baeb7c
[ 11.836607] x8 : fefefefefefefeff x7 : ffffa2e20b8da368 x6 : 0000000000006000
[ 11.836610] x5 : 0000000000006000 x4 : ffffa2e20b8da368 x3 : ffff000083d09f00
[ 11.836613] x2 : ffffa2e20a341e58 x1 : ffff000083d09f00 x0 : ffffa2e20a341e58
[ 11.836617] Call trace:
[ 11.836619] phy_error+0x20/0x70
[ 11.836622] phy_state_machine+0xac/0x280
[ 11.836625] process_one_work+0x208/0x4d0
[ 11.836635] worker_thread+0x144/0x490
[ 11.836639] kthread+0x184/0x190
[ 11.836641] ret_from_fork+0x10/0x20
[ 11.836649] ---[ end trace c888fcce1336ca53 ]---
If anyone could please help me determine if the phy error might be causing my issues or if I have something improperly configured I would highly appreciative!
full_dmesg.txt (59.0 KB)
serial_bootup.txt (86.7 KB)
Thank you.