Problem with RGMII Ethernet (88E1512) with JP 5.1.0 on AGX Orin (was working with JP 5.0.1DP and on Xavier)

I am working on a custom baseboard with a Marvell 88E1512 PHY and I am trying to get it working with AGX Orin. I was following the adaption guide (device enabled ethernet@2310000, custom pinmux, disabled MGBE using ODMDATA).

My implementation was working with JP 5.0.1DP, but not anymore with JP 5.0.2GA. See my post here:

I had put it aside for a while, but now I need to finally solve it. I tried again with JP 5.1.0 and I still see the same problem. I do see eth0 with the correct MAC address and link negotiation. ifconfig also reports some rx and tx packets, but the communication doesn’t actually work. (e.g. DHCP, no ARP neighbors, etc…)
tcpdump suggests that inbound packets at least partially are working.

I found that ethtool -t eth0 also reports a PHY loopback error:

The test result is FAIL
The test extra info:
 1. MAC Loopback			 0
 2. PHY Loopback			 -110
 3. MMC Counters			 0

Altough @WayneWWW wrote in my previous post, that nothing changed between 5.0.1DP and 5.0.2, I do see different configuration for the DMA interconnects. (e.g. interconnects, interconnect-names entries). I can provide the device-tree dump from 5.0.1DP if that helps.

I tried also with the AGX Xavier, and it is working fine with JP 5.1.0 on the same hardware. Thus it works with Xavier on 5.1.0 and Orin on JP 5.0.1DP, but not with Orin JP 5.1.0.

Device-Tree overlay to add RGMII Ethernet. (Overlay does get applied, see device tree dump later):

    /* Disable MGBE Ethernet */
    fragment@3 {
		target-path = "/";
		__overlay__ {
			ethernet@6810000 {
				status = "disabled";
			};
            ethernet@6910000 {
				status = "disabled";
			};
            ethernet@6A10000 {
				status = "disabled";
			};
            ethernet@6B10000 {
				status = "disabled";
			};
		};
	};

    /* Add RGMII Ethernet */
    fragment@4 {
		target-path = "/";
		__overlay__ {
			ethernet@2310000 {
                status = "okay";
                nvidia,mac-addr-idx = <0>;
                nvidia,phy-reset-gpio = <&tegra_main_gpio TEGRA234_MAIN_GPIO(G, 5) 0>;
                phy-mode = "rgmii-id";
                phy-handle = <&phy>;
                nvidia,max-platfrom-mtu = <8000>;
                nvidia,pause_frames = <0>;  /* 0=enable, 1=disable */

                mdio {
                    compatible = "nvidia,eqos-mdio";
                    #address-cells = <1>;
                    #size-cells = <0>;

                    phy: phy@1 {
                        reg = <0>;
                        nvidia,phy-rst-pdelay-msec = <224>; /* msec */
                        nvidia,phy-rst-duration-usec = <10000>; /* usec */
                        interrupt-parent = <&tegra_main_gpio>;
                        interrupts = <TEGRA234_MAIN_GPIO(G, 4) IRQ_TYPE_LEVEL_LOW>;
                        marvell,copper-mode;
                        /* Setup LED[2] as interrupt pin (active low) */
				        marvell,reg-init = <0x03 0x12 0x7fff 0x880>;
                    };

                };
            };
		};
	};

Pinmux (extract, see full files below)

	eqos_txc_pe0 {
		nvidia,pins = "eqos_txc_pe0";
		nvidia,function = "eqos";
		nvidia,pull = <TEGRA_PIN_PULL_NONE>;
		nvidia,tristate = <TEGRA_PIN_DISABLE>;
		nvidia,enable-input = <TEGRA_PIN_DISABLE>;
	};

	eqos_td0_pe1 {
		nvidia,pins = "eqos_td0_pe1";
		nvidia,function = "eqos";
		nvidia,pull = <TEGRA_PIN_PULL_NONE>;
		nvidia,tristate = <TEGRA_PIN_DISABLE>;
		nvidia,enable-input = <TEGRA_PIN_DISABLE>;
	};

	eqos_td1_pe2 {
		nvidia,pins = "eqos_td1_pe2";
		nvidia,function = "eqos";
		nvidia,pull = <TEGRA_PIN_PULL_NONE>;
		nvidia,tristate = <TEGRA_PIN_DISABLE>;
		nvidia,enable-input = <TEGRA_PIN_DISABLE>;
	};

	eqos_td2_pe3 {
		nvidia,pins = "eqos_td2_pe3";
		nvidia,function = "eqos";
		nvidia,pull = <TEGRA_PIN_PULL_NONE>;
		nvidia,tristate = <TEGRA_PIN_DISABLE>;
		nvidia,enable-input = <TEGRA_PIN_DISABLE>;
	};

	eqos_td3_pe4 {
		nvidia,pins = "eqos_td3_pe4";
		nvidia,function = "eqos";
		nvidia,pull = <TEGRA_PIN_PULL_NONE>;
		nvidia,tristate = <TEGRA_PIN_DISABLE>;
		nvidia,enable-input = <TEGRA_PIN_DISABLE>;
	};

	eqos_tx_ctl_pe5 {
		nvidia,pins = "eqos_tx_ctl_pe5";
		nvidia,function = "eqos";
		nvidia,pull = <TEGRA_PIN_PULL_NONE>;
		nvidia,tristate = <TEGRA_PIN_DISABLE>;
		nvidia,enable-input = <TEGRA_PIN_DISABLE>;
	};

	eqos_rd0_pe6 {
		nvidia,pins = "eqos_rd0_pe6";
		nvidia,function = "eqos";
		nvidia,pull = <TEGRA_PIN_PULL_UP>;
		nvidia,tristate = <TEGRA_PIN_ENABLE>;
		nvidia,enable-input = <TEGRA_PIN_ENABLE>;
	};

	eqos_rd1_pe7 {
		nvidia,pins = "eqos_rd1_pe7";
		nvidia,function = "eqos";
		nvidia,pull = <TEGRA_PIN_PULL_UP>;
		nvidia,tristate = <TEGRA_PIN_ENABLE>;
		nvidia,enable-input = <TEGRA_PIN_ENABLE>;
	};

	eqos_rd2_pf0 {
		nvidia,pins = "eqos_rd2_pf0";
		nvidia,function = "eqos";
		nvidia,pull = <TEGRA_PIN_PULL_UP>;
		nvidia,tristate = <TEGRA_PIN_ENABLE>;
		nvidia,enable-input = <TEGRA_PIN_ENABLE>;
	};

	eqos_rd3_pf1 {
		nvidia,pins = "eqos_rd3_pf1";
		nvidia,function = "eqos";
		nvidia,pull = <TEGRA_PIN_PULL_UP>;
		nvidia,tristate = <TEGRA_PIN_ENABLE>;
		nvidia,enable-input = <TEGRA_PIN_ENABLE>;
	};

	eqos_rx_ctl_pf2 {
		nvidia,pins = "eqos_rx_ctl_pf2";
		nvidia,function = "eqos";
		nvidia,pull = <TEGRA_PIN_PULL_UP>;
		nvidia,tristate = <TEGRA_PIN_ENABLE>;
		nvidia,enable-input = <TEGRA_PIN_ENABLE>;
	};

	eqos_rxc_pf3 {
		nvidia,pins = "eqos_rxc_pf3";
		nvidia,function = "eqos";
		nvidia,pull = <TEGRA_PIN_PULL_UP>;
		nvidia,tristate = <TEGRA_PIN_ENABLE>;
		nvidia,enable-input = <TEGRA_PIN_ENABLE>;
	};

	eqos_sma_mdio_pf4 {
		nvidia,pins = "eqos_sma_mdio_pf4";
		nvidia,function = "eqos";
		nvidia,pull = <TEGRA_PIN_PULL_NONE>;
		nvidia,tristate = <TEGRA_PIN_DISABLE>;
		nvidia,enable-input = <TEGRA_PIN_ENABLE>;
	};

	eqos_sma_mdc_pf5 {
		nvidia,pins = "eqos_sma_mdc_pf5";
		nvidia,function = "eqos";
		nvidia,pull = <TEGRA_PIN_PULL_NONE>;
		nvidia,tristate = <TEGRA_PIN_DISABLE>;
		nvidia,enable-input = <TEGRA_PIN_DISABLE>;
	};

Custom board configuration:

# This is the default Devkit (64GB) module. We'll update to the 32GB with the
# change in update_flash_args_common()
DTB_FILE="tegra234-p3701-0000-p3737-0000.dtb";
TBCDTB_FILE="tegra234-p3701-0000-p3737-0000.dtb";
EMMC_CFG="flash_t234_qspi_sdmmc.xml";

PINMUX_CONFIG="Orin-galaxy-pinmux.dtsi";
PMC_CONFIG="Orin-galaxy-padvoltage-default.dtsi";
OVERLAY_DTB_FILE="tegra234-galaxy-overlay.dtbo";
ODMDATA="gbe-uphy-config-0,hsstp-lane-map-3,nvhs-uphy-config-0,hsio-uphy-config-0";
MB2_BCT="tegra234-mb2-bct-misc-galaxy-orin.dts";

Pinmux:
Orin-galaxy-pinmux.dtsi (64.6 KB)
Orin-galaxy-gpio-default.dtsi (3.9 KB)
Orin-galaxy-padvoltage-default.dtsi (1.4 KB)

Flashing confirms that the pinmux is written:
flash.log (473.1 KB)

Dumped device-tree:
device-tree-dump.txt (523.1 KB)

Debug outputs:
dmesg.txt (65.8 KB)
ifconfig.txt (1.3 KB)
link.txt (500 Bytes)
ethtool.txt (1.1 KB)
ethtool_t.txt (133 Bytes)
ethtool_S.txt (8.9 KB)
interrupts.txt (21.3 KB)
gpio.txt (7.2 KB)
pinctrl-maps.txt (3.6 KB)
pinctrl-handles.txt (2.8 KB)

Any inputs are welcome! Thank you

Hi,

There is a common problem that we have some early stage module and later production module. It could be that you are not using production or the pinmux and dtb are not matching. This issue got fixed in jp5.1.

But looks like you manually modify the file name in board config by yourself. Which leads to a unknown situation to me.

Firstly, clarify which module is in use first.

cat /etc/nv_boot_control.conf

I am testing with 2 different modules.

Are you referring to this section of jetson-agx-orin-devkit.conf?

# update pinmux for concord
	if [ "${board_sku}" != "0005" ]; then
		if [ "${chip_SKU}" = "00" ] || [ "${chip_SKU}" = "D0" ]; then
			if [ "${board_FAB}" = "TS1" ] || [ "${board_FAB}" = "TS2" ] ||
			[ "${board_FAB}" = "TS3" ] || [ "${board_FAB}" = "EB1" ] ||
			[ "${board_FAB}" = "EB2" ] || [ "${board_FAB}" = "EB3" ] ||
			[ "${board_FAB}" = "000" ] || [ "${board_FAB}" = "100" ] ||
			[ "${board_FAB}" = "200" ]; then
				PINMUX_CONFIG="tegra234-mb1-bct-pinmux-p3701-0000.dtsi";
				PMC_CONFIG="tegra234-mb1-bct-padvoltage-p3701-0000.dtsi";
			fi
		fi
	fi

	if [ "${board_sku}" = "0001" ] || [ "${board_sku}" = "0002" ]; then
		DTB_FILE=tegra234-p3701-0000-p3737-0000.dtb;
		TBCDTB_FILE=tegra234-p3701-0000-p3737-0000.dtb;
		BPFDTB_FILE=tegra234-bpmp-3701-0000-3737-0000.dtb;
	fi

None of those conditions apply to my modules.

32GB production module:

TNSPEC 3701-500-0004-G.0-1-1-galaxy-orin-
COMPATIBLE_SPEC 3701--0004--1--galaxy-orin-
TEGRA_LEGACY_UPDATE false
TEGRA_BOOT_STORAGE mmcblk0
TEGRA_EMMC_ONLY false
TEGRA_CHIPID 0x23
TEGRA_OTA_BOOT_DEVICE /dev/mtdblock0
TEGRA_OTA_GPT_DEVICE /dev/mtdblock0
board_sku=0004, chip_SKU=D2, board_FAB=500

64GB module from early dev-kit:

TNSPEC 3701-500-0000-H.0-1-1-galaxy-orin-
COMPATIBLE_SPEC 3701--0000--1--galaxy-orin-
TEGRA_LEGACY_UPDATE false
TEGRA_BOOT_STORAGE mmcblk0
TEGRA_EMMC_ONLY false
TEGRA_CHIPID 0x23
TEGRA_OTA_BOOT_DEVICE /dev/mtdblock0
TEGRA_OTA_GPT_DEVICE /dev/mtdblock0
board_sku=0000, chip_SKU=D0, board_FAB=500

HI,

Just to make it easier to understand,

jp5.1 → by default all using 0004-* files. Only old device will use 0000 files.

jp5.0.2 → there is problem, no matter what board in use, it will use 0000 files.

JP5.1 is the correct behavior.

Are you referring to the dtb files only? A lot of the files only exist as 0000 files.
My understanding was that p3701-0000 refers to the 64GB (devkit) module and p3701-0004 to the 32GB module. As you can see, I am testing with both of those modules.

Here is the list of files used for my 32GB module:

Copy /home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/kernel/dtb/tegra234-p3701-0004-p3737-0000.dtb to /home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/kernel/dtb/tegra234-p3701-0004-p3737-0000.dtb.rec
copying bctfile(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/t186ref/BCT/tegra234-p3701-0000-sdram-l4t.dts)... done.
copying minratchet_config(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/t186ref/BCT/tegra234-mb1-bct-ratchet-p3701-0000.dts)... done.
copying device_config(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/t186ref/BCT/tegra234-mb1-bct-device-p3701-0000.dts)... done.
copying misc_config(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/t186ref/BCT/tegra234-mb1-bct-misc-p3701-0000.dts)... done.
copying pinmux_config(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/t186ref/BCT/Orin-galaxy-pinmux.dtsi)... done.
copying gpioint_config(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/t186ref/BCT/tegra234-mb1-bct-gpioint-p3701-0000.dts)... done.
copying pmic_config(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/t186ref/BCT/tegra234-mb1-bct-pmic-p3701-0000.dts)... done.
copying pmc_config(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/t186ref/BCT/Orin-galaxy-padvoltage-default.dtsi)... done.
copying deviceprod_config(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/t186ref/BCT/tegra234-mb1-bct-cprod-p3701-0000.dts)... done.
copying prod_config(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/t186ref/BCT/tegra234-mb1-bct-prod-p3701-0000.dts)... done.
copying scr_config(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/t186ref/BCT/tegra234-mb2-bct-scr-p3701-0000.dts)... done.
copying wb0sdram(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/t186ref/BCT/tegra234-p3701-0000-wb0sdram-l4t.dts)... done.
copying bootrom_config(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/t186ref/BCT/tegra234-mb1-bct-reset-p3701-0000.dts)... done.
copying dev_params(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/t186ref/BCT/tegra234-br-bct-p3701-0000.dts)... done.
copying dev_params_b(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/t186ref/BCT/tegra234-br-bct_b-p3701-0000.dts)... done.
copying mb2bct_cfg(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/t186ref/BCT/tegra234-mb2-bct-misc-galaxy-orin.dts)... done.
Existing pscfwfile(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/pscfw_t234_prod.bin) reused.
Existing pscbl1file(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/psc_bl1_t234_prod.bin) reused.
Existing mtsmcefile(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/mce_flash_o10_cr_prod.bin) reused.
Existing mb2applet(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/applet_t234.bin) reused.
Existing bootloader(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/mb2_t234.bin) reused.
copying initrd(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/l4t_initrd.img)... done.

Those bct file do not matter. No worry about it. Just focus on your issue and your issue only related to bootloader dtb, kernel dtb and pinmux file.

Thank you.
The custom pinmux was attached on my 1st post.
As you can see in the post above, I was using tegra234-p3701-0004-p3737-0000.dtb for the 32GB module. I have only used one custom overlay. I have attached the overlay here:
tegra234-galaxy-overlay.dts (45.3 KB)

I have not modified anything for the bootloader dtb (and it uses the -0004- version for the 32GB module).

My previous post did not include all the relevant output from flash.sh. See the remaining part here.

copying recdtbfile(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/kernel/dtb/tegra234-p3701-0004-p3737-0000.dtb.rec)... done.
Existing sosfile(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/mb1_t234_prod.bin) reused.
Existing tegraboot(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/mb2_t234.bin) reused.
Existing cpu_bootloader(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/mb2_t234.bin) reused.
Existing mb2blfile(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/mb2_t234.bin) reused.
Existing xusbfile(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/xusb_t234_prod.bin) reused.
Existing dcefile(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/display-t234-dce.bin) reused.
Existing nvdecfile(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/nvdec_t234_prod.fw) reused.
Existing psc_rf(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/psc_rf_t234_prod.bin) reused.
Existing mb2_rf(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/mb2rf_t234.bin) reused.
Existing mb1file(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/mb1_t234_prod.bin) reused.
Existing bpffile(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/bpmp_t234-TE990M-A1_prod.bin) reused.
copying bpfdtbfile(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/t186ref/tegra234-bpmp-3701-0004-3737-0000.dtb)... done.
Existing scefile(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/camera-rtcpu-sce.img) reused.
Existing camerafw(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/camera-rtcpu-t234-rce.img) reused.
Existing apefile(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/adsp-fw.bin) reused.
Existing spefile(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/spe_t234.bin) reused.
Existing wb0boot(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/sc7_t234_prod.bin) reused.
Existing tosfile(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/tos-optee_t234.img) reused.
Existing eksfile(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/eks_t234.img) reused.
copying dtbfile(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/kernel/dtb/tegra234-p3701-0004-p3737-0000.dtb)... done.
Copying nv_boot_control.conf to rootfs
	populating kernel to rootfs... done.
	populating initrd to rootfs... done.
	populating kernel_tegra234-p3701-0004-p3737-0000.dtb to rootfs... done.
Making system.img... 
	Setting "FDT /boot/dtb/kernel_tegra234-p3701-0004-p3737-0000.dtb" successfully in the extlinux.conf...done.
	populating rootfs from /home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/rootfs ... 	populating /boot/extlinux/extlinux.conf ... done.
	Sync'ing system.img ... done.
	Converting RAW image to Sparse image... done.
system.img built successfully. 
Not signing of kernel-dtb
Existing tbcfile(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/uefi_jetson.bin) reused.
	Sync'ing esp.img ... done.
copying tbcdtbfile(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/kernel/dtb/tegra234-p3701-0004-p3737-0000.dtb)... done.
copying cfgfile(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/t186ref/cfg/flash_t234_qspi_sdmmc.xml) to flash.xml... done.
Existing flashapp(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/tegraflash.py) reused.
copying overlay_dtb(/home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/kernel/dtb/tegra234-galaxy-overlay.dtbo)... done.
./tegraflash.py  --bl uefi_jetson_with_dtb.bin  --odmdata gbe-uphy-config-0,hsstp-lane-map-3,nvhs-uphy-config-0,hsio-uphy-config-0  --overlay_dtb tegra234-galaxy-overlay.dtbo,  --bldtb tegra234-p3701-0004-p3737-0000.dtb --applet mb1_t234_prod.bin --cmd "flash; reboot"  --cfg flash.xml --chip 0x23 --concat_cpubl_bldtb --cpubl uefi_jetson.bin --minratchet_config tegra234-mb1-bct-ratchet-p3701-0000.dts --device_config tegra234-mb1-bct-device-p3701-0000.dts --misc_config tegra234-mb1-bct-misc-p3701-0000.dts --pinmux_config Orin-galaxy-pinmux.dtsi --gpioint_config tegra234-mb1-bct-gpioint-p3701-0000.dts --pmic_config tegra234-mb1-bct-pmic-p3701-0000.dts --pmc_config Orin-galaxy-padvoltage-default.dtsi --deviceprod_config tegra234-mb1-bct-cprod-p3701-0000.dts --prod_config tegra234-mb1-bct-prod-p3701-0000.dts --scr_config tegra234-mb2-bct-scr-p3701-0000.dts --wb0sdram_config tegra234-p3701-0000-wb0sdram-l4t.dts --br_cmd_config tegra234-mb1-bct-reset-p3701-0000.dts --dev_params tegra234-br-bct-p3701-0000.dts,tegra234-br-bct_b-p3701-0000.dts --mb2bct_cfg tegra234-mb2-bct-misc-galaxy-orin.dts  --bins "psc_fw pscfw_t234_prod.bin; mts_mce mce_flash_o10_cr_prod.bin; mb2_applet applet_t234.bin; mb2_bootloader mb2_t234.bin; xusb_fw xusb_t234_prod.bin; dce_fw display-t234-dce.bin; nvdec nvdec_t234_prod.fw; bpmp_fw bpmp_t234-TE990M-A1_prod.bin; bpmp_fw_dtb tegra234-bpmp-3701-0004-3737-0000.dtb; sce_fw camera-rtcpu-sce.img; rce_fw camera-rtcpu-t234-rce.img; ape_fw adsp-fw.bin; spe_fw spe_t234.bin; tos tos-optee_t234.img; eks eks_t234.img"  --sdram_config tegra234-p3701-0000-sdram-l4t.dts  --cust_info custinfo_out.bin  --secondary_gpt_backup  --bct_backup  --boot_chain A 
saving flash command in /home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/flashcmd.txt
saving Windows flash command to /home/mandre/nvidia/nvidia_sdk/JetPack_5.1_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/flash_win.bat

Are you suggesting that I use the wrong version of some of the files? Thank you!

1 Like

@WayneWWW do you have any additional inputs?

Are we sure that overlay is in use? How about we put them in the common dtb file first instead of dtbo?

Yes, I am sure. See also the device-tree-dump attached to the initial post. This dump was created on the running system using

dtc /sys/firmware/devicetree/base/

Sorry that I can only suggest you to looks into other user’s post and check what is missing on your side.

We’ve checked this 88E1512 on many other end users/partners already.

Hi Wayne
I have been doing all those changes and have it well document in my 1st post in this thread.
I went back and also confirmed the pinmux by reading some of the registers at runtime. As you can see the registers match the expectation (eqos mode, rsvd0 for interrupts, etc)

#eqos td3
sudo busybox devmem 0x02445000
0x00002400
#rst
sudo busybox devmem 0x02434070
0x00000058
#int
sudo busybox devmem 0x02434078
0x00000000

In my previous post you replied that there has been no change to RGMII between 5.0.1 and 5.0.2

I can only see that the device tree (read back from the device) is different. I especially see that >=5.0.2 I have “interconnects” nodes which I can’t see in 5.0.1. So at least something has changed.
I wonder if anything regarding the DMA architecture has changed…
Here is the device tree dump from 5.0.1:
dts.txt (328.9 KB)

Let me summarize my status:

  • I have confirmed that the pinmux and dtb get applied.
  • I can see the device being recognized (which to my understanding means that at least mdio is fine). Also I can see the connection status and it correctly negotiates the data rate.
  • I see the interrupts arriving
  • I see some packets being received and sent, but the actual communication doesn’t work.
  • The loopback test (ethertool -t) fails with -110 (timeout)
  • The very same hardware works with Xavier on JP 5.1 and on Orin with JP 5.0.1

My questions:

  • What can cause the packet counts (seen using ifconfig) rise while (not all?) packets are actually received
  • Again: What has changed from 5.0.1 to 5.0.2
  • How is the mechanism of moving the data from the phy to the system. Who triggers the DMA transfers. Is there any way to debug this?
  • Any suggestions for further debugging?

Thank you Marc

Hi Marc,

There is no direct answer from me about “what was changed”. I don’t think those changes here really matter to your issue. Most cases we helped to bring up RGMII is based on jp5.0.2. Please make sure your dtb change really follows the jp5.1 document (because jp5.0.2 doc has some problem in pinmux configuration).

or use this one instead. https://developer.nvidia.com/downloads/adaptation-and-bringup-jetson-agx-orinpdf

And Please make sure you did the full flash instead of only flash kernel or dtb.

I would like to confirm what is the exact issue we got here. For example, if just port to port connection, is this port able to ping another side? There is no error log from your dmesg.

Hi Wayne
I did all of that. This is also why I provide dtb dumps and read back the pinmux registers to confirm on the installed system that the changes were applied.

No, the port is not able to ping (and DHCP doesn’t work. I do see some random packets with tcpdump, but I couldn’t figure exactly what I see and what I don’t see.
The same setup (not changing a cable or anything…) works with 5.0.1 and Xavier.

See my note that even the ethertool -t fails. Thus I don’t think I have to search outside the Jetson/baseboard.

#ethtool -t eth0

The test result is FAIL
The test extra info:
 1. MAC Loopback			 0
 2. PHY Loopback			 -110
 3. MMC Counters			 0

Could you share the /proc/interrupts where your jp5.0.1 can work fine?

Here is the interrupts with jp5.0.1:
interrupts.txt (22.1 KB)
ethtool_t.txt (112 Bytes)

Interrupts with JP5.1:
interrupts.txt (21.3 KB)
ethtool_t.txt (133 Bytes)

Could you also provide the dts of jp5.1?

It is in the first post:
device-tree-dump.txt (523.1 KB)

What is the pin of this nvidia,phy-reset-gpio = <0x04 0x35 0x00>?

nvidia,phy-reset-gpio = <&tegra_main_gpio TEGRA234_MAIN_GPIO(G, 5) 0>;

interrupts = <TEGRA234_MAIN_GPIO(G, 4) IRQ_TYPE_LEVEL_LOW>;