ASSERT TerminalConIn.c(2078): ((BOOLEAN)(0==1))

Hi all,

I have a Xavier NX that sometimes (1 out of 5) reboots will go into recovery mode. I have the log file here
Kernel_assert_log (16.3 KB)
I see this ASSERT [TerminalDxe] /out/nvidia/bootloader/uefi/Jetson_RELEASE/edk2/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConIn.c(2078): ((BOOLEAN)(0==1)) and then it reboots and heads into recovery mode.
I am using BSP 35.2.1 and ive seen on another post UEFI Error thats it should be a known issue. But I only have this issue randomly, and not on all my jetsons that run 3.5.2.1

Am I experiencing this same known issue or is it something else?

Thanks

Hi,

as you saw in the post, this is fixed in newer versions of L4T (35.3.1 and later), and if you don’t want to upgrade, you can also manually build the UEFI binary and update the bootloader partition only:

sudo ./flash.sh -k A_cpu-bootloader jetson-xavier-nx-devkit mmcblk0p1

I have updated the version to 35.3.1 but the issue still happens. How can I fix it?

Hi,

are you using a custom board or the official DevKit?
What does cat /etc/nv_tegra_release/ give you?

Using a custom board. UEFI version:
Jetson UEFI firmware (version 3.1-32827747 built on 2023-03-19T14:56:32+00:00)
Tegra release:
# R35 (release), REVISION: 3.1, GCID: 32827747, BOARD: t186ref, EABI: aarch64, DATE: Sun Mar 19 15:19:21 UTC 2023

Does your custom board have any UART usecase that is added by you and not exist on devkit?

I think so, not sure. I might have found the solution. Or atleast it looks like it.
We are sending data over THS1, ive noticed if we dont do this we have no recovery boot issues. Also when booting into recovery mode (im not sure what the name is) but the debug port displays a bios like screen, when we send data over THS1 this screen will go crazy, the cursor will select random settings as if its taking the data as input. When we stop sending data the screen goes back to normal. Its fairly easy to reproduce, not sure if its a bug or its normal that the UEFI reacts on messages from THS1. Since the debug UART and THS1 are completely separated.

UEFI device tree could be separate from kernel.

If your issue is on UEFI, disable that uart in the uefi device tree first and keep it working in kernel device tree.

It shall make this error bypassed.

How can I do this?
The issue is only on UEFI.
But this shouldnt be normal right? Since uart shouldnt interfere with UEFI…

Did you ever play around with any kind of device tree before?
I mean you made a custom board so at least you know how to modify device tree, right?

But this shouldnt be normal right? Since uart shouldnt interfere with UEFI…

it is hard to say. Since UEFI enables UART driver on it device tree as well, the corresponding driver got enabled at that time.

Yes I know how to make device tree changes, just not sure where to find the UEFI device tree

Check your board config file. There is one bl dtb option just similar to your kernel dtb option.

By default, they are using same file. But now you need to let them use separate one.

I dont see a second UEFI DTB option, what am I missing?
I am checking in jetson-xavier-nx-devkit-emmc.conf as I am using this one

board config is just like a code. It includes p3668.conf.common.

So you have more than one file to check

Please check TBCDTB_FILE.

Ah yes, thanks. Was looking for something named UEFI*.
I will try it with this one. Thanks!

Ive made the necessary changes and it seems to work better.
However I would like to get into this boot menu to verify it.

Can you tell me how I can manually get into this boot menu?

I got into the UEFI boot menu. But when I start sending data again during this screen it will do weird stuff again. I thought UART was switched off. How can I check that the correct device tree is loaded in UEFI?

EDIT: I have disabled all uart ports. Would this somehow conflict with the uart port used for the debug?
EDIT: I have also disabled the uart ports in the kernel dtb file just for testing. But I am still having weird issues in the UEFI screen.

When sending data over uart I see the exact same text as Xavier AGX boot failure: ASSERT - #2 by bruce4243
What else should I do to disable the uart ports?

Hi,

Just to clarify. I only care about the error “ASSERT [TerminalDxe] /out/nvidia/bootloader/uefi/Jetson_RELEASE/edk2/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConIn.c(2078): ((BOOLEAN)(0==1))”.

I don’t know what is “weird thing on screen” as you said.

If you are talking about same thing, then please tell us how did you modify your device tree.

I am not sure if the ASSERT is still happening. But it is still taking the uart data as serial input like a mouse/keyboard and on boot it still sometimes enters the UEFI menu. Once in the menu it is using the uart data like mouse/keyboard input and it is scrolling through the menu. Even though I have turned off the uarts in the device tree of the UEFI.

Can you give me a way to check which dtb is loaded for the UEFI?