Kernel 4.4.38 on old U-Boot

I’m trying to get the new 4.4.38 kernel to run with the original U-Boot. (I don’t want to upgrade the U-Boot because the USB-OTG port is busted on my Jetson so I have no way of recovering if I botch the upgrade…)

The first issue was that the new kernel comes with a DTB file which has dual EMC-tables, whereas U-Boot expects to fill in only one table. This was easy enough to fix: Just remove the “use-ram-code” property and move the contents of emc-table@0 out into the memory-controller@7001b000 node, and then remove both emc-table@0 and emc-table@1. The new kernel still supports the single emc-table setup, so no problem there.

After this the kernel boots up fine, but I’m missing ethernet. This turns out to be because the USB device is not found. External USB units connected via a USB 2.0 hub work fine, so it seems to be a problem with superspeed units only?

The only message I can find in dmesg which seems relevant is this:

[ 5.908591] xhci-tegra 70090000.xusb: can’t get usb3-0 phy (-517)

Is there some change related to USB3 in the bootloader that I need to work around as well?

Complete dmesg is here: https://pastebin.com/DsHsLBwS

Thanks

An additional note, not sufficient to answer: USB3 is not supported in any of the U-Boot versions. Device tree would have to be correct for USB3, along with the kernel command line. In R28.1 much of the device tree was put into the U-Boot phase for inheriting as the kernel loads, versus a separate device tree file. A large chunk of the kernel command line was also put into U-Boot, then inherited via environment variable, which is new. Both device tree and kernel command line would need to be correct.

Your command line (extlinux.conf “APPEND”) should look something like this (most of this is not for USB, some is):

root=/dev/mmcblk0p1 rw rootwait console=ttyS0,115200n8 console=tty0 OS=l4t fbcon=map:0 net.ifnames=0 memtype=0 video=tegrafb no_console_suspend=1 earlycon=uart8250,mmio32,0x03100000 nvdumper_reserved=0x2772e0000 gpt tegraid=18.1.2.0.0 tegra_keep_boot_clocks maxcpus=6 androidboot.serialno=0334916010131 bl_prof_dataptr=0x10000@0x277240000 sdhci_tegra.en_boot_part_access=1 root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4

I’m not sure what the best way would be to deal with device tree. I don’t know if the reasons for putting most of the tree into U-Boot had to do with kernel changes, or if it was instead related to making U-Boot compatible with both a TX1 and TX2 (I suspect it was more of the latter than of the former). If it is possible to post a device tree I will try to attach an extracted (live) dts of an R28.1 TX1 for you to compare (the forum might refuse the attachment, we’ll see).
extracted_tx1-4.4.38-tegra.txt.gz (62.5 KB)

I’ve done a lot of experimenting with this, mainly because the bootloader updates in R28.1 break the bootloader redundancy support that was available in R24.2.

I didn’t have much luck with it, either. Near as I can make out, the 4.4 kernel depends on functions provided by the updated BPMP firmware and TZ image that come with R28.1. There are some driver dependencies on cboot’s device tree fixups (for handling /chosen and overlays), which I think differ slightly from the way the old U-Boot did them. There may also be some dependencies on hardware initialization that is now done by cboot, too.

Thank you linuxdev. I tried with your commandline and DTS (minus some nodes in /chosen that U-Boot insisted on being allowed to create itself), but alas there was no change.

So it seems to be as madisox suspects that the difference is in some HW init rather than in cmdline or FDT. :-(