Lost Ethernet on upgrade from r32.4.3 to r37.7.1

The vendor of my carrier board only provides a BSP for r32.4.3 which is a few years old at this point. I attempted to upgrade to the newer r32.7 release and re-use the vendor-provided DTB, and found mixed success.

I installed r32.7.2 but due to this issue with Cboot I downgraded to r32.7.1 but I still could not get the FDT option to work.

I then dd’d the vendor-provided DTB to the kernel-dtb partition and the device did boot and some hardware-specific functionality returned including USB device enumeration.

However, one of my Ethernet interfaces is missing. I suspect that this message is relevant:

eqos 2490000.ether_qos: invalid settings : rx-frames must be enabled along with use_riwt in DT

A few threads here that mention a similar issue conclude that the kernel and DTB are mismatched versions. It’s unclear to me if this problem is resolved just by using the official flash.sh tool with the same DTB, or if I need to rebuild the DTB.

If I need to rebuild the DTB, how does this work? The vendor provides a modified version of tegra194-p2888-0006-p2822-0000.dtb. I could diff this with the mainline version and see what customizations were made. Where do I find the .dts[i] files and build instructions to recreate this file?

Hi,

There are some problems here and I need to clarify before next step.

  1. Actually, this error is just one parameter missing in eqos part in the device tree.

  2. If this problem happened after you add the “vendor dtb”, it means your vendor’s dtb hasn’t been changed for a while. Or you are totally using a device tree from old version. This " rx-frames must be enabled along with use_riwt in DT" change has been added to kernel for long time ago. IIRC, it was added in rel-32.5.
    Please tell the vendor to provide a upgraded dtb for you. I don’t think it should be a job for end user to do by yourself.

  3. If you only want to fix the ethernet issue, check the latest dtb from jetpack and compare only the eqos device tree part. Add that to your current dtb file. But as I said, your dtb seems out-of-date. It may not be safe to keep using this dtb in new kernel anymore. DTB and kernel are a set. When kernel gets upgraded, dtb should follow too.

  4. The whole dts files are included in the L4T public source in each release. But I don’t think you need all of them.
    Jetson Linux Archive | NVIDIA Developer

Thank you. Yes, this is an old DTB that is mismatched to the version of L4T I have installed.

I was able to use dtc to decompile, modify, then recompile the DTB and correct the issue. Under the ether_qos@2490000 section I added

nvidia,rx_frames = <16>;

which is found in the DTB sources for R32.7.1. There were some other modifications around there, like a different value for nvidia,rx_riwt, but I left it alone to make the change minimal.

This did get the eth0 interface to appear though it is not quite functional yet.

I agree that the vendor should update the DTB; I have contacted them requesting that they provide an update.

To answer my earlier question about rebuilding the DTBs, you can do something like this:

./source_sync.sh -k tegra-l4t-r32.4.3 -d sources_r32.4.3
cd sources_r32.4.3/kernel/kernel-4.9
TEGRA_KERNEL_OUT="$(pwd)/build"
mkdir -p "${TEGRA_KERNEL_OUT}"
make ARCH=arm64 O="${TEGRA_KERNEL_OUT}" tegra_defconfig
make ARCH=arm64 O="${TEGRA_KERNEL_OUT}" dtbs

But it turns out to be quite difficult to reverse engineer what a vendor has customized from a decompiled DTB; there are zillions of unrelated changes.

1 Like