We have a custom carrier board with a Xavier NX production module. Since we needed more UARTs, we used the debug UART (uartc) as a UART and disabled the debug UART through modification of p3668.conf.common, tegra194-p3668-common.dtsi, tegra194-mb1-bct-misc-l4t.cfg, tegra194-mb1-soft-fuses-l4t.cfg and tegra194-a02-bpmp-p3668-a00.dtb, as well as disabling the nvgetty service. The net result of our changes was the elimination of /dev/ttyTCU0 and the introduction of a new HSUART, /dev/ttyTHS2. This all worked fine in JetPack 4.6.3.
However, when we have attempted to move to JetPack 5.1.1, I am finding that these same changes do not work. In fact, disabling the combined_uart causes the Jetson to not even boot. Instead it enters the UEFI shell. Unfortunately, uartc is connected to a peripheral so I cannot interact with the UEFI shell using a keyboard. If I make all my changes except disabling the combined_uart then the Jetson boots into Linux. However, uartc does not work reliably. It occasionally loses bytes, even at 115200 baud 8N1. This never happened with JetPack 4.6.3. My suspicion is that something in the system is still trying to interact with the debug UART and may be consuming some of the bytes from the UART. I have tried loopback tests on two other UARTs (at 3 Mbaud) and they work fine, with no issues (confirmed on a scope).
My question is: how do I disable the combined_uart completely in JetPack 5.1.1 like it was possible in JetPack 4.6.3 so that I know I have a dedicated serial port for uartc? I have listed the changes made to the device tree that I have made in JetPack 5.1.1 below for reference.
Any help is appreciated as this is the main issue preventing us from moving to JetPack 5.1.1.
Sincerely,
Dan
JetPack 5.1.1 Device Tree Changes
p3668.conf.common
Changed:
TBCDTB_FILE=tegra194-p3668-all-p3509-0000.dtb;
CMDLINE_ADD="console=ttyTCU0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0";
target_board="t186ref";
to:
TBCDTB_FILE=tegra194-p3668-all-p3509-0000.dtb;
CMDLINE_ADD="console=tty0 fbcon=map:0 net.ifnames=0";
target_board="t186ref";
tegra194-p3668-common.dtsi
Changed:
chosen {
bootargs ="console=ttyTCU0,115200";
board-has-eeprom;
nvidia,tegra-joint_xpu_rail;
};
to:
chosen {
/* DRM: removed console=ttyTCU0,115200 from bootargs */
bootargs ="";
board-has-eeprom;
nvidia,tegra-joint_xpu_rail;
};
and changed:
combined-uart {
console-port;
combined-uart;
status = "okay";
};
to:
/* DRM: Added serial port for UART2 (was debug serial port) */
serial@c280000 {
compatible = "nvidia,tegra186-hsuart";
status = "okay";
/delete-property/ resets;
/delete-property/ reset-names;
};
combined-uart {
/*
** DRM: Removed console port:
** console-port;
** Changed status to disabled from okay.
*/
combined-uart;
status = "disabled";
};
tegra194-soc-base.dtsi
Changed:
tegra_fiq_debugger {
compatible = "nvidia,fiq-debugger";
use-console-port;
interrupts = <0 17 0x4>;
};
to:
tegra_fiq_debugger {
compatible = "nvidia,fiq-debugger";
/* use-console-port; */
interrupts = <0 17 0x4>;
status = "disabled"; /* DRM: Disabled because it uses the console port */
};
tegra194-mb1-bct-misc-l4t.cfg (plus similar cfg files)
Changed:
enable_combined_uart = 1;
spe_uart_instance = 0x2;
to:
enable_combined_uart = 0; # DRM: Disable combined UART
spe_uart_instance = 0xFF; # DRM: Disable use of UART 2 for combined UART
tegra194-mb1-soft-fuses-l4t.cfg
Changed:
Verbosity = 4; # 0: Disabled: 1: Critical, 2: Error, 3: Warn, 4: Info, 5: Debug
UartInstance = 2;
to:
Verbosity = 0; # 0: Disabled: 1: Critical, 2: Error, 3: Warn, 4: Info, 5: Debug
UartInstance = 2;
tegra194-a02-bpmp-p3668-a00.dtb
Changed:
serial {
port = <0x3>;
has_input;
combined-uart {
enabled;
}
};
to:
serial {
port = <0xFF>; /* DRM: disable debugging to serial port */
has_input;
/*
* DRM: Deleted combined UART:
*
* combined-uart {
* enabled;
* };
*/
};
L4TConfiguration.dtbo
Changed:
gNVIDIATokenSpaceGuid {
DefaultBootPriority {
data = "usb,nvme,emmc,sd,ufs";
locked;
};
};
to:
gNVIDIATokenSpaceGuid {
DefaultBootPriority {
data = "usb,nvme,emmc,sd,ufs";
locked;
};
/* DRM: Disable UEFI debug serial port */
SerialPortConfig {
data = [ff];
non-volatile;
};
};