Tegra Combined UART#
The Tegra Combined UART (TCU) is a system that multiplexes debug information from the processors in the CCPLEX cluster with information from other processors.
The multiplexing is accomplished in the Sensor Processing Engine (SPE) for NVIDIA® Jetson™ Orin and the UART Trace Controller (UTC) for NVIDIA® Jetson™ Thor. It involves all of the processors that supply information. The nv_tcu_demuxer utility runs on a host system and demultiplexes the debug information multiplexed by the TCU.
This diagram shows the relationship of the components for a native target.
nv_tcu_demuxer Utility#
The nv_tcu_demuxer binary is in the following SDK directory:
$ Linux_for_Tegra/tools/demuxer/
To run the binary, run the following command:
$ ./nv_tcu_demuxer <options>
Where <options> represents any meaningful combination of the following command-line options:
nv_tcu_demuxer writes a demultiplexed output to a set of consoles with device names in the /dev/pts/<n> form, where <n> is an integer. It lists the console’s device names, and the type of output is written to each device on stdout. Typically, you need to display each console output data stream with an instance of a terminal utility like minicom.
The following table describes the command-line options recognized by nv_tcu_demuxer:
Command line option |
Meaning |
|---|---|
-h |
Prints a help message that summarizes the command format and options. |
-m <chip> |
Sets the client/tag mapping for |
-i |
Enables the patch for line ending. This allows
some data streams to end lines with |
-u |
Writes the CCPLEX data to one output stream
that will be demultiplexed by |
-d <dev> |
Specifies the device name of the host UART that
receives debug data from the target. Defaults to
|
-r <rate> |
Specifies data rate of the UART in bits/second. Defaults to 115200. |
-s <path> |
Saves output streams to the directory specified by <path>. Each output stream is written to a .txt file whose name represents the source: SCE.txt, SPE.txt, etc. CCPLEX output is written to a single multiplexed file named CCPLEX.txt. |
-l <path> |
Saves the raw output with tags to the log file in
the directory specified by |
-t |
Prefixes the output with a timestamp. |
-p |
Set the timeout for output polling ready status. Defaults to 300 ms. |
Examples#
AGX Orin and Orin Nano#
Use the following example to write your own nv_tcu_demuxer commands. If you use a different port, replace ttyACM0 with the appropriate name.
$ cd Linux_for_Tegra/tools/demuxer
$ ./nv_tcu_demuxer -d /dev/ttyACM0 &
Here is the output:
/dev/pts/2 RCE
/dev/pts/3 FSI
/dev/pts/4 PSCFW
/dev/pts/5 DCE
/dev/pts/7 BPMP
/dev/pts/8 SCE
/dev/pts/9 SPE
/dev/pts/10 TZ
/dev/pts/11 CCPLEX: 0
You can use minicom to get only the specific console output. To get only SPE logs, run:
$ minicom -D /dev/pts/9
Jetson Thor#
Use the following example to write your own nv_tcu_demuxer commands. If you use a different port, replace ttyACM0 with the appropriate name.
$ cd Linux_for_Tegra/tools/demuxer
$ ./nv_tcu_demuxer -m T264 -d /dev/ttyACM0 &
Here is the output:
/dev/pts/1 RCE
/dev/pts/2 FSI
/dev/pts/3 PSCFW
/dev/pts/4 DCE
/dev/pts/5 BPMP
/dev/pts/6 AON-F1
/dev/pts/7 HPSE
/dev/pts/8 SB
/dev/pts/9 ADSP0
/dev/pts/10 ADSP1
/dev/pts/11 UTC0
/dev/pts/12 UTC1
/dev/pts/13 UTC2
/dev/pts/14 UTC3
/dev/pts/15 CCPLEX: 0
/dev/pts/16 TZ: 0
/dev/pts/17 RAW
You can use minicom to get only the specific console output. Examples:
FSI logs:
$ minicom -D /dev/pts/2
BPMP firmware logs:
$ minicom -D /dev/pts/5
Guest OS (CCPLEX) logs:
$ minicom -D /dev/pts/15
All raw output (undemuxed):
$ minicom -D /dev/pts/17
Save logs to files with timestamps:
$ ./nv_tcu_demuxer -m T264 -d /dev/ttyACM0 -s /tmp/thor_logs -t &
UART Trace Controller (UTC) Technical Details for Jetson Thor#
NVIDIA® Jetson™ Thor (T264) platforms use the UART Trace Controller (UTC) for hardware-based multiplexing, which is a significant improvement over the software-based approach used in Jetson Orin platforms.
UTC System-Level Data Flow#
Key Differences from Jetson Orin#
Aspect |
Jetson Orin (T234) |
Jetson Thor (T264) |
|---|---|---|
Multiplexing Method |
Software (SPE firmware) |
Hardware (UTC controller) |
Performance |
Limited by SPE processing |
Up to 36Mbps throughput |
Client Support |
8 main clients |
16 TX + 16 RX clients |
FIFO Size |
Software buffers |
128 bytes per client (hardware) |
Latency |
Higher (software processing) |
Lower (hardware acceleration) |
UTC Architecture#
UTC Block Diagram#
The UTC is located in the Always-On (AON) cluster and connects to the following:
AON Fabric: Via the AMBA Peripheral Bus (APB).
UART0 Controller: Direct APB connection for UART access.
16 Client FIFOs: Each has 128 bytes for TX and RX directions.
Client Mapping for Thor#
The following table shows the authoritative client mapping as defined in bug 3917973:
Client ID |
Tag |
T264 Processor |
Description |
|---|---|---|---|
Client 1 |
0xE1 |
CCPLEX |
Hypervisor/UEFI/Linux (default RX client) |
Client 2 |
0xE2 |
BPMP |
Boot and Power Management Processor |
Client 3 |
0xE3 |
AON-F1 |
Always-On Fabric 1 (replaces SCE from T234) |
Client 4 |
0xE4 |
TZ |
TrustZone |
Client 5 |
0xE5 |
RCE |
Real-time Camera Engine |
Client 6 |
0xE6 |
FSI |
Fabric Switch Interface |
Client 7 |
0xE7 |
PSC |
Platform Security Controller |
Client 8 |
0xE8 |
DCE |
Display Controller Engine |
Client 9 |
0xE9 |
HPSE |
High-Performance Security Engine |
Client 10 |
0xEA |
SB |
Secure Boot |
Client 11 |
0xEB |
ADSP0 |
Audio Digital Signal Processor 0 |
Client 12 |
0xEC |
ADSP1 |
Audio Digital Signal Processor 1 |
Clients 13–16 |
0xED-0xF0 |
CCPLEX |
HV/Guest VMs |
Note
The preceding client mapping is the final authoritative assignment. All unassigned FIFOs (Clients 13–16) are dedicated to HV/Guest VMs.
UTC Configuration#
UTC configuration is handled automatically by MB1 firmware. The following are the key parameters:
Parameter |
Description |
|---|---|
enable_utc |
Enable/disable UTC functionality (configured in MB1 BCT). |
disable_utc_fifo |
0: FIFO mode (default); 1: PIO mode. |
default_rx_client |
Default client ID for untagged RX data (1–16). Set to 1 (CCPLEX) per bug 3917973. |
Example DTS Configuration#
For custom UTC configurations, you can modify the MB1 BCT DTS files:
/dts-v1/;
/ {
mb1_bct {
utc_params {
enable_utc = <1>;
disable_utc_fifo = <0>; // 0: FIFO mode, 1: PIO mode
default_rx_client = <1>; // CCPLEX (Client 1) - default
};
};
};
Security and Safety Considerations#
Safety Platforms: UTC is disabled and outputs are clamped for safety compliance.
Virtualization: Each client has a separate 64-KB MMIO space for VM isolation.
Access Control: Firewall and hypervisor controls limit client access to authorized VMs only.
Advanced Usage for Jetson Thor#
Multi-Die Support (Super-Thor)#
For Super-Thor configurations with multiple dies, run separate nv_tcu_demuxer instances:
# Die 0
$ ./nv_tcu_demuxer -m T264 -d /dev/ttyACM0 -s /logs/die0/
# Die 1
$ ./nv_tcu_demuxer -m T264 -d /dev/ttyACM1 -s /logs/die1/
Performance Notes#
Throughput: UTC achieves approximately 30–36 Mbps (combined TX/RX).
Hardware Acceleration: Dedicated UTC IP provides lower latency than software solutions.
FIFO Mode: Preferred for high-performance applications over PIO mode.
Troubleshooting#
Common Issues for All Platforms#
- Tool not found
Verify that you’re in the correct directory:
Linux_for_Tegra/tools/demuxer/.Verify that the binary has execute permissions.
- No output or garbled output
Check UART device name (such as
/dev/ttyACM0or/dev/ttyUSB3, etc.).Verify that baud rate settings match the target configuration.
Ensure that target is actually outputting debug information.
Issues Specific to Jetson Thor#
- Console not responsive
Jetson Thor platforms require
nv_tcu_demuxerfor interactive console access.Use pseudo-terminal assigned to CCPLEX (typically
/dev/pts/15).For direct access without
nv_tcu_demuxer, UTC Client 1 (CCPLEX) is the default RX client.
- Missing client output
Verify that the correct
-m T264flag is used withnv_tcu_demuxer.Check that the expected processor is actually running and generating output.
Some clients might be disabled in certain build configurations.
- Performance issues
Check UART baud rate configuration (default: 115200).
Verify that FIFO mode is enabled for high-throughput applications.
Consider reducing debug verbosity if performance is critical.
- Multi-die debugging
Run a separate
nv_tcu_demuxerinstance for each die.Each die requires its own UART connection and tool instance.