RGMII not working on R36.3

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.

As the document mentioned, could you make sure of below first?

**Ensure that PHY comes out of reset mode and is in a ready state when the PHY reset GPIO is toggled.

Thank you for replying,

I had our lead electrical engineer check with the oscilloscope and we did see the PHY come out of reset mode. We also saw two different toggles of gpio resets, one occurring when the UEFI was booting up (MB1) and the second occurring at MB2 when the main operating system was booting up.

I’ve made some modifications to my pinmux file and no longer get errors regarding phy.c. I am still not able to connect to eth1. I am still seeing eth1 receiving packets but no transmissions, mdio is still able to communicate to the Marvell phy, and the phy still is stuck in auto-negotiation.

New dmesg after device tree modifications:
dmesg.txt (59.9 KB)

This is what happens when I run ethtool.

test@test-desktop:~/Downloads$ sudo ethtool eth1
Settings for eth1:
	Supported ports: [ TP	 MII	 FIBRE ]
	Supported link modes:   10baseT/Half 10baseT/Full
	                        100baseT/Half 100baseT/Full
	                        1000baseT/Half 1000baseT/Full
	Supported pause frame use: Symmetric Receive-only
	Supports auto-negotiation: Yes
	Supported FEC modes: Not reported
	Advertised link modes:  10baseT/Half 10baseT/Full
	                        100baseT/Half 100baseT/Full
	                        1000baseT/Half 1000baseT/Full
	Advertised pause frame use: No
	Advertised auto-negotiation: Yes
	Advertised FEC modes: Not reported
	Speed: Unknown!
	Duplex: Unknown! (255)
	Auto-negotiation: on
	Port: Twisted Pair
	PHYAD: 0
	Transceiver: external
	MDI-X: Unknown
	Supports Wake-on: pg
	Wake-on: d
        Current message level: 0x00000000 (0)
                              
	Link detected: no

lshw:

test@test-desktop:~/Downloads$ sudo lshw -c network
  *-network:0 DISABLED      
       description: Ethernet interface
       physical id: d
       logical name: eth0
       serial: 48:b0:2d:f1:c5:81
       capabilities: ethernet physical
       configuration: broadcast=yes driver=nvethernet driverversion=5.15.136-tegra link=no multicast=yes
  *-network:1
       description: Ethernet interface
       physical id: e
       logical name: eth1
       serial: 48:b0:2d:f1:c5:80
       capacity: 1Gbit/s
       capabilities: ethernet physical tp mii fibre 10bt 10bt-fd 100bt 100bt-fd 1000bt 1000bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=nvethernet driverversion=5.15.136-tegra link=no multicast=yes port=twisted pair

There is no update from you for a period, assuming this is not an issue anymore.
Hence, we are closing this topic. If need further support, please open a new one.
Thanks

Is this still an issue to support? Any result can be shared?