Orin RGMII with Jetson Linux 35.1 troubleshooting

Hi Folks -

We are unable to get RGMII working with Orin and L4T 35.1.

There are many posts on the forum about this topic already:

Following these posts and the adaptation guide, we are still unable to get the RGMII to work. Any advice for further troubleshooting will be very welcome.

DETAILS

  1. We have a custom carrier board with the Marvel 88E1512 Phy connected exactly as the Xavier Carrier Board. The carrier ethernet has been validated with a Xavier and L4T32.6.1.
  2. We build the kernel following the developers guide, with source_synced to tag jetson_35.1
  3. We modify the ODMDATA field to disable the 10G ethernet and allow the Orin to boot.
  4. We update the UEFI with the debug version following the instructions on the github wiki (and other forum posts)
  5. We modify the pinmux as suggested in the developers guide. (There are errors in the current version of the guide).
  6. We modify the device tree as suggested in the developers guide.

RESULTS
A bunch of the relevant log files:

The key error message seems to come from the bootlog UEFI showing a failure to reset the PHY:

PROGRESS CODE: V03040003 I0
add-symbol-file /build/git/edkrepo/nvidia-uefi/Build/Jetson/DEBUG_GCC5/AARCH64/Silicon/NVIDIA/Drivers/EqosDeviceDxe/EqosDeviceDxe/DEBUG/EqosDeviceDxe.dll 0x804232000
Loading driver at 0x00804231000 EntryPoint=0x0080424A384 EqosDeviceDxe.efi
PROGRESS CODE: V03040002 I0

SNP:PHY: PhyDxeInitialization () Failed to reset Phy
DeviceDiscoveryBindingStart, driver returned Device Error to start notification
SNP:PHY: PhyDxeInitialization () Failed to reset Phy
DeviceDiscoveryBindingStart, driver returned Device Error to start notification

It is also worth noting that the UEFI boot process hangs for a long time here.

Once the device boots, we checked all the pin configurations using busybox. For example:

busybox devmem 0x2445000 
0x2400
busybox devmem 0x2445020
0x2458
busybox devmem 0x2434070
0x0058
busybox devmem 0x2434078 
0x0000

All of the EQOS “T” pins are 0x2400 which translates to SFIO and COMP_DRIVE_2X. All the EQOS “R” pins are 0x2458, corresponds to SFIO, COMP_DRIVE_2X, INPUT, TRISTATE, and PULL UP. The ENET_INT and ENET_RST_N are INPUT with Pull Down and OUTPUT with None, repectively.

We put a scope probe on the ENET_RST_N line and do not see any signals, nor do we see any clock on TXC_0.

As far as we can tell, the pinmux and the device tree are configured correctly but the UEFI driver is not finding or initializing the 88E1512.

Any help or suggestions would be greatly appreciated.
-s

BTW, regarding the typo in the Developers Guide. From: Jetson AGX Orin Platform Adaptation and Bring-Up — Jetson Linux<br/>Developer Guide 34.1 documentation

This looks like a copy and paste error – the RX is the same as the TX, unlike all of the forum posts on the topic and the L4T32.6.1 configuration.

Also,


Most of the “$” should be “@” and the reset GPIO should have a “5”

The developers guide does not include a default state for the ENET_RST_N. We have tried it a couple of ways but it doesn’t seem to work.

I guess the interrupt of ethernet was not asserted after you boot up and up the link right?

cat /proc/interrupts |grep eth