ttyS0 and ttyTHS1


I am confused with ttyS0 and ttyTHS1. According to /sys/class/tty, ttyS0 is on address 0x3100000 and ttyTHS1 is on 0x3110000, they should be different UART. And the debug console port is on J21, I loopback pin8/10, ttyS0 can receive what I sent out. So my understanding is UART0(H12/G12) is ttyS0 on system.

The my question is what is ttyTHS1? Which UART it is? Some articles said it is debug console. Does it connect to any header on board?

And I also tested J17, UART1, it should be ttyHS2, correct me if wrong. Which UART maps to ttyTHS3? UART3(H9/H10)?

I can’t answer all of it (I don’t know what might be using the UART), but any “ttyTHS#” with the same “#” in “ttyS#” is the same UART controller hardware, but with different drivers. The “ttyTHS#” uses DMA, the “ttyS#” does not use DMA.

To see more you might look at:

sudo -s
find /sys -name '*uart*'

In the case of the “devices” subdirectory the UART will be named along with a controller address (plus “.serial” appended). I see “./devices/3110000.serial/tty/ttyTHS1/uartclk”, so ttyTHS1 is from the controller at address 0x3110000.

If I go to the TRM I find address 0x03110000 is associated with “UARTB”. So I can’t tell you what the UART is being used for, but it is “UARTB” in both “/sys” and the TRM.

If you want to see device tree settings, then I see this after extracting the running system’s device tree:

serial@3110000 {
                reg = <0x0 0x3110000 0x0 0x40>;
                dmas = <0x19 0x9 0x19 0x9>;
                interrupts = <0x0 0x71 0x4>;
                reg-shift = <0x2>;
                compatible = "nvidia,tegra186-hsuart";
                clock-names = "serial", "parent";
                reset-names = "serial";
                nvidia,adjust-baud-rates = <0x1c200 0x1c200 0x64>;
                clocks = <0xd 0x38 0xd 0x10d>;
                resets = <0xd 0x30>;
                nvidia,memory-clients = <0xe>;
                status = "okay";
                phandle = <0x81>;
                #stream-id-cells = <0x1>;
                dma-names = "rx", "tx";
                linux,phandle = <0x81>;