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.

Diagram showing relationship of components of Tegra Combined UART system

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 <chip>. Default: T234

-i

Enables the patch for line ending. This allows some data streams to end lines with <lf> (Linux style) and others to end lines with <cr><lf> (Windows style). Disabling the patch impairs the usability of the nv_tcu_demuxer output and is not recommended

-u

Writes the CCPLEX data to one output stream that will be demultiplexed by uart_muxer.

-d <dev>

Specifies the device name of the host UART that receives debug data from the target. Defaults to /dev/ttyUSB3.

-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 <path>.

-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.

Diagram showing system-level data flow in the Jetson Thor UART Trace Controller

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#

Diagram of data flow within UART Trace Controller

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/ttyACM0 or /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_demuxer for 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 T264 flag is used with nv_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_demuxer instance for each die.

  • Each die requires its own UART connection and tool instance.