Closed picanteAvi closed 1 year ago
Does it work as intended if you use PREFERRED_PROVIDER_virtual/bootloader = "edk2-firmware-tegra"
? The reason I ask is that on Xavier systems, the initialization of the display isn't handled by UEFI, but by a preloader based on the old cboot code that is basically just prepended on the bootloader binary. It's been a while since I've looked at this, but I wonder if maybe the prebuilt UEFI doesn't get this treatment.
No it doesn't. edk2-firmware-tegra
is what the project uses as default currently. The prebuilt binary also uses the nvdisp preloader (according to the logs anyway)
There is also some discussion here but i dont think there was any real solution other than upgrading jetpack. https://forums.developer.nvidia.com/t/replace-uefi-boot-splash-screen-logo-jetpack-5-0-1-r35-1/240365/34
Maybe a build issue? I haven't been able to resolve it by building the uefi binary seperatly and then copying it over to the tegra-flash package either.
I see it in your logs now. nvdisp-init recognizes and initializes the display for both, to 1024x768@65hz
I wonder if UEFI is choking on that resolution? You might have a look at the logic to see how it chooses logos from edk2-nvidia/Silicon/NVIDIA/Assets/*.bmp
to put on the screen. It is curious that it would work with stock Jetpack, does nvdisp-init in there set the display with a different resolution?
In my case, I'm customizing by replacing 1080p, 720p, and 640x480 bitmaps in this location, and it does work.
Looks like the nvdisp that comes with prebuilt package is setting it to 1024x768, but the locally built one is setting it to 640x480. The image for 640 exists in the path you mentioned though.
prebuilt (working):
[0003.453] I> width = 640, height = 480, frequency = 25174825
[0003.454] I> width = 640, height = 480, frequency = 25174825
[0003.454] I> width = 1024, height = 768, frequency = 65000000
[0003.455] I> width = 1024, height = 768, frequency = 65000000
[0003.459] I> width = 1600, height = 1200, frequency = 162000000
[0003.464] I> Best mode Width = 1024, Height = 768, freq = 65000000
local build:
[0003.495] I> width = 640, height = 480, frequency = 25174825
[0003.496] I> width = 640, height = 480, frequency = 25174825
[0003.496] I> width = 1600, height = 1200, frequency = 162000000
[0003.496] I> Best mode Width = 640, Height = 480, freq = 25174825
Have you tried it using the stock NVIDIA images? Does it work for you with the edk2-firmware-tegra
build? Is changing the logo images the only modification you made? That seems odd.
I’ve only been using the source build, and as far as uefi goes replacing the bitmaps was my only change.
My nvdisp-init probably does follow a different path, because I have some minor modifications to get the display set up on DisplayPort. This precludes me from using my system’s display with stock jetpack. That said, at the point where edk2 gets the frame buffer, I doubt it knows the difference.
Hopefully someone else can pitch in here with additional data points. Have you tried a different display?
I think i resolved it. 0005-nvdisp-init.patch
needs to updated. Below patch is from the jetpack 35.3.1 release and it includes updates to hdmi modes and minimum resolution uefi supports
nvdisp-init-patch.txt
Thanks, @picanteAvi ... I've refreshed that patch in the R35.3.1-based branches in meta-tegra, and it will get picked up on the next submodule update here in the distro.
Firstly, thank you for all the effort in putting this BSP together! I am trying to investigate an issue where the UEFI boot screen will not display at bootup. I am creating this issue here as it's reproducable on the devkits as well. I can move it to the meta-tegra project if desired.
Hardware is
jetson-xavier-nx-devkit
with sd card. I am currently on thekirkstone
branch that uses jetpack35.3.1
version. I builtdemo-image-base
without any modifications; it boots up fine but i do not see the Nvidia bootlogo at startup. Using the UEFI prebuilt binary from Nvidia works. Basically just adding this todemo-image-base.bb
:PREFERRED_PROVIDER_virtual/bootloader = "tegra-uefi-prebuilt"
So seems like the default
edk2-firmware-tegra
bootloader provider is broken somewhere. Any workarounds/fixes? I need to modify the UEFI source to implement drivers for our custom board, which i have completed. This is one last remaining features i am trying to get to work.Thank you for all your effort. I have attached the logs here which seem identical between prebuilt and locally built uefi bin. By locally i mean using the default settings in
tegra-common.inc
:PREFERRED_PROVIDER_virtual/bootloader ?= "edk2-firmware-tegra"
log_kirk-demo_Uefi-prebuilt_Kern-stock_devkit.log log_kirk-demo_Uefi-local_Kern-stock_devkit.log