I’ve configured a Orin AGX to boot via httpv4 boot method and running Jetpack 5. I tried to perform a capsule update on it to upgrade it to Jetpack 6 and after the upgrade, I noticed that it prefers to drop into UEFI Shell before http boot.
After some digging into the edk2 code, I believe this is because the ethernet base memory address changed from 0x6810000 → 0x6800000, so UEFI boot (EfiBootManagerRefreshAllBootOption) deletes the “stale” option and inserts the “new” one at the back of the boot order behind local disk and UEFI shell.
How can I be sure that the preferred boot order is preserved during a capsule update?
I don’t see example for the HTTPv4 boot flow in the image-based OTA, so I have adapted the scripts there for my httpv4 boot flow. I’m able to ensure that kernel/userspace versions match after the capsule update. I see that image-based OTA scripts also do capsule update for the bootloader.
With respect to UEFI boot order, does image-based OTA do additional steps compared to only a capsule update?
I can confirm bootloader, kernel, and rootfs are from same release. I’m observing the boot issue.
I’ve dug into the edk2 sources and I’m confident that the issue is within EfiBootManagerRefreshAllBootOption() function. It looks for stale boot options, removes them, and then adds new boot options. I haven’t found any logic that is aware to preserve the boot order for changed base address of ethernet port. My workaround is to patch SetBootOrder() in edk2-nvidia/Silicon/NVIDIA/Library/PlatformBootOrderLib/PlatformBootOrderLib.c by removing the PlatformBootOrderSet variable and thus always apply the default boot priority. I’m curious if this is a known issue and there is a better solution/approach.