UART0 flow control

Hi,

I am working with the Jetson Orin Nano Developer Kit running JetPack/L4T R36.5.0.
I would like to port the Telit WE310K6-P Wi-Fi/BT module.
While Wi-Fi is working properly, the Bluetooth initialization fails.
Please see the error messages below regarding the Bluetooth initialization.

p@p-desktop:~$ sudo /usr/sbin/rtk_hciattach -n -s 115200 /dev/ttyTHS3 rtk_h5
Realtek Bluetooth :rtk_hciattach BUILD Jun 10 2026 15:39:29
Realtek Bluetooth :Realtek Bluetooth init uart with init speed:115200, type:HCI UART H5
Realtek Bluetooth :Realtek hciattach version 3.1.4b4662d.20240527-172150

Realtek Bluetooth :Use epoll
Realtek Bluetooth :[SYNC] Get SYNC Resp Pkt
Realtek Bluetooth :[CONFIG] Get SYNC pkt
Realtek Bluetooth :[CONFIG] Get CONFG pkt
Realtek Bluetooth :[CONFIG] Get CONFG resp pkt
Realtek Bluetooth :dic is 1, cfg field 0x14
Realtek Bluetooth :H5 init finished

Realtek Bluetooth :Realtek H5 IC
Realtek Bluetooth :Receive cmd complete event of command: fc61
Realtek Bluetooth :LMP Subversion 0xbeef
Realtek Bluetooth :Receive cmd complete event of command: 1001
Realtek Bluetooth :HCI Version 0x0b
Realtek Bluetooth :HCI Revision 0x000b
Realtek Bluetooth :LMP Subversion 0x8852
Realtek Bluetooth :Receive cmd complete event of command: fc6d
Realtek Bluetooth :Read ROM version 01
Realtek Bluetooth :LMP Subversion 0x8852
Realtek Bluetooth :EVersion 1
Realtek Bluetooth :Receive cmd complete event of command: fc61
Realtek Bluetooth :Read chip type 00
Realtek Bluetooth :Read chip ver 00
Realtek Bluetooth :IC: RTL8852BS, chip_type 0x00
Realtek Bluetooth :Firmware/config: rtl8852bs_fw, rtl8852bs_config
Realtek Bluetooth :Couldnt open extra config /opt/rtk_btconfig.txt, No such file or directory
Realtek Bluetooth :Couldnt open BT MAC file /opt/bdaddr, No such file or directory
Realtek Bluetooth :Origin cfg len 42
Realtek Bluetooth :55 ab 23 87 24 00 0c 00 10 02 80 92 04 50 c5 ea
Realtek Bluetooth :19 e1 1b fd af 5f 01 a4 0b 8d 00 01 fa 8f 00 01
Realtek Bluetooth :bf 42 00 02 01 5f d8 00 01 80
Realtek Bluetooth :Config baudrate: 04928002
Realtek Bluetooth :uart flow ctrl: 1
Realtek Bluetooth :Vendor baud from Config file: 04928002
Realtek Bluetooth :New cfg len 42
Realtek Bluetooth :55 ab 23 87 24 00 0c 00 10 02 80 92 04 50 c5 ea
Realtek Bluetooth :19 e1 1b fd af 5f 01 a4 0b 8d 00 01 fa 8f 00 01
Realtek Bluetooth :bf 42 00 02 01 5f d8 00 01 80
Realtek Bluetooth :Load FW /lib/firmware/rtlbt/rtl8852bs_fw OK, size 117069
Realtek Bluetooth :rtb_get_fw_project_id: opcode 0, len 1, data 20
Realtek Bluetooth :Receive cmd complete event of command: fc61
Realtek Bluetooth :rtb_get_final_patch: key id 0
Realtek Bluetooth :FW version 0x8f,d8,34,01,21,0f,02,00
Realtek Bluetooth :opcode 0x0001
Realtek Bluetooth :number 0x0002
Realtek Bluetooth :eco 0x01, Eversion:01
Realtek Bluetooth :Patch length 0x1015d
Realtek Bluetooth :eco 0x02, Eversion:01
Realtek Bluetooth :Pri:15, Patch length 0xc7ad
Realtek Bluetooth :opcode 0x0008
Realtek Bluetooth :Unknown Opcode. Ignore
Realtek Bluetooth :len = 0xc7ad
Realtek Bluetooth :len = 0xc7ad
Realtek Bluetooth :FW  exists, Config file  exists
Realtek Bluetooth :Total len 51159 for fwc
Realtek Bluetooth :baudrate in change speed command: 0x02 0x80 0x92 0x04
Realtek Bluetooth :Receive cmd complete event of command: fc17
Realtek Bluetooth :Received cc of vendor change baud
Realtek Bluetooth :Final speed 1500000
Realtek Bluetooth :end_idx: 203, lp_len: 3, additional pkts: 5

Realtek Bluetooth :Start downloading...
Realtek Bluetooth :Send additional packet 77
Realtek Bluetooth :Send additional packet 78
Realtek Bluetooth :Send additional packet 79
Realtek Bluetooth :Send additional packet 80
Realtek Bluetooth :Last packet 209
Realtek Bluetooth :Send last pkt
Realtek Bluetooth :Enable host hw flow control
Realtek Bluetooth :h5_hci_reset: Issue hci reset cmd
Realtek Bluetooth ERROR: Out-of-order packet arrived, got(6)expected(7)
Realtek Bluetooth ERROR: Out-of-order packet arrived, got(6)expected(7)
Realtek Bluetooth ERROR: Out-of-order packet arrived, got(6)expected(7)
Realtek Bluetooth ERROR: Out-of-order packet arrived, got(6)expected(7)
Realtek Bluetooth ERROR: Out-of-order packet arrived, got(6)expected(7)
Realtek Bluetooth ERROR: Out-of-order packet arrived, got(6)expected(7)
Realtek Bluetooth ERROR: Out-of-order packet arrived, got(6)expected(7)
Realtek Bluetooth ERROR: Out-of-order packet arrived, got(6)expected(7)
Realtek Bluetooth ERROR: Out-of-order packet arrived, got(6)expected(7)
Realtek Bluetooth ERROR: Out-of-order packet arrived, got(6)expected(7)
Realtek Bluetooth ERROR: Out-of-order packet arrived, got(6)expected(7)
Realtek Bluetooth WARN: OP_HCI_RESET Transmission timeout
Realtek Bluetooth ERROR: Out-of-order packet arrived, got(6)expected(7)
Realtek Bluetooth ERROR: Out-of-order packet arrived, got(6)expected(7)
Realtek Bluetooth ERROR: Out-of-order packet arrived, got(6)expected(7)
Realtek Bluetooth ERROR: Out-of-order packet arrived, got(6)expected(7)
Realtek Bluetooth ERROR: Out-of-order packet arrived, got(6)expected(7)
Realtek Bluetooth ERROR: Out-of-order packet arrived, got(6)expected(7)
Realtek Bluetooth ERROR: Out-of-order packet arrived, got(6)expected(7)
Realtek Bluetooth ERROR: Out-of-order packet arrived, got(6)expected(7)
Realtek Bluetooth ERROR: Out-of-order packet arrived, got(6)expected(7)
Realtek Bluetooth ERROR: Out-of-order packet arrived, got(6)expected(7)
Realtek Bluetooth ERROR: Out-of-order packet arrived, got(6)expected(7)
Realtek Bluetooth ERROR: Out-of-order packet arrived, got(6)expected(7)
Realtek Bluetooth WARN: OP_HCI_RESET Transmission timeout
Realtek Bluetooth ERROR: Retransmission exhausts
p@p-desktop:~$

It seems like there is an issue with the UART0 flow control.
Bluetooth initialization succeeds if I disable flow control within the Bluetooth firmware; however, the Bluetooth audio becomes choppy and keeps cutting in and out. Therefore, disabling flow control is not a viable option.

Below are the changes I made:

diff --git a/sources/hardware/nvidia/t23x/nv-public/nv-platform/tegra234-b442+p3767-0005-nv.dts b/sources/hardware/nvidia/t23x/nv-public/nv-platform/tegra234-b442+p3767-0005-nv.dts
index e23a4b8da..046d55725 100644
--- a/sources/hardware/nvidia/t23x/nv-public/nv-platform/tegra234-b442+p3767-0005-nv.dts
+++ b/sources/hardware/nvidia/t23x/nv-public/nv-platform/tegra234-b442+p3767-0005-nv.dts
@@ -3,6 +3,8 @@

 /dts-v1/;

+#include <dt-bindings/pinctrl/pinctrl-tegra.h>
+#include <dt-bindings/sound/rt5640.h>
 #include "tegra234-p3768-0000+p3767-0005.dts"
 #include "tegra234-p3768-0000+p3767-xxxx-nv-common.dtsi"

@@ -220,6 +222,42 @@
                                        nvidia,enable-input = <TEGRA_PIN_ENABLE>;
                                        nvidia,lpdr = <TEGRA_PIN_DISABLE>;
                                };
+                               uart2_tx_px4 {
+                                       nvidia,pins = "uart2_tx_px4";
+                                       nvidia,function = "uartb";
+                                       nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                                       nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                                       nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                                       nvidia,lpdr = <TEGRA_PIN_DISABLE>;
+                               };
+
+                               uart2_rx_px5 {
+                                       nvidia,pins = "uart2_rx_px5";
+                                       nvidia,function = "uartb";
+                                       nvidia,pull = <TEGRA_PIN_PULL_UP>;
+                                       nvidia,tristate = <TEGRA_PIN_ENABLE>;
+                                       nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                                       nvidia,lpdr = <TEGRA_PIN_DISABLE>;
+                               };
+
+                               uart2_rts_px6 {
+                                       nvidia,pins = "uart2_rts_px6";
+                                       nvidia,function = "uartb";
+                                       nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                                       nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                                       nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                                       nvidia,lpdr = <TEGRA_PIN_DISABLE>;
+                               };
+
+                               uart2_cts_px7 {
+                                       nvidia,pins = "uart2_cts_px7";
+                                       nvidia,function = "uartb";
+                                       nvidia,pull = <TEGRA_PIN_PULL_UP>;
+                                       nvidia,tristate = <TEGRA_PIN_ENABLE>;
+                                       nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                                       nvidia,lpdr = <TEGRA_PIN_DISABLE>;
+                               };
+
                                hdr40-pin19 {
                                        nvidia,pins = "spi1_mosi_pz5";
                                        nvidia,function = "spi1";
@@ -257,6 +295,10 @@
                         };
                 };

+               serial@3110000 {
+                       status = "okay";
+               };
+
        };

        sp330_device {
diff --git a/sources/hardware/nvidia/t23x/nv-public/nv-platform/tegra234-p3768-0000+p3767-xxxx-nv-common.dtsi b/sources/hardware/nvidia/t23x/nv-public/nv-platform/tegra234-p3768-0000+p3767-xxxx-nv-common.dtsi
index cb76d5711..f877b8a06 100644
--- a/sources/hardware/nvidia/t23x/nv-public/nv-platform/tegra234-p3768-0000+p3767-xxxx-nv-common.dtsi
+++ b/sources/hardware/nvidia/t23x/nv-public/nv-platform/tegra234-p3768-0000+p3767-xxxx-nv-common.dtsi
@@ -13,6 +13,7 @@
        aliases {
                serial1 = &uarta;
                serial2 = &uarte;
+               serial3 = "/bus@0/serial@3110000";
        };

        bpmp {
@@ -322,6 +323,11 @@
                pcie@14100000 {
                        nvidia,pex-wake-gpios = <&gpio TEGRA234_MAIN_GPIO(L, 2) GPIO_ACTIVE_LOW>;
                };
+
+               serial@3110000 {
+                       compatible = "nvidia,tegra194-hsuart";
+                       reset-names = "serial";
+               };
        };

        cpus {
pcp@pcp-yen-linux:/media/pcp/YEN_P1/work/nvidia/R36.5/jetson-linux-r36-5_B442$

Is there anything else I might have missed?

dts.txt (323.0 KB)
dmesg.txt (65.1 KB)

Thx
Yen

Hi yenchao,

Is your WiFi/BT module connected on M.2 Key E while BT is used through UART-B interface?

I would suggest configuring pinmux spreadsheet to update the pinmux dtsi to be loaded in MB1.

Have you tried adding dma related property for 3110000.serial to run with DMA mode instead of PIO mode?

Please measure UART0 RTS via oscilloscope and verify BT requirements with the vendor.

diff --git a/sources/hardware/nvidia/t23x/nv-public/nv-platform/tegra234-b442+p3767-0005-nv.dts b/sources/hardware/nvidia/t23x/nv-public/nv-platform/tegra234-b442+p3767-0005-nv.dts
index e23a4b8da..046d55725 100644
--- a/sources/hardware/nvidia/t23x/nv-public/nv-platform/tegra234-b442+p3767-0005-nv.dts
+++ b/sources/hardware/nvidia/t23x/nv-public/nv-platform/tegra234-b442+p3767-0005-nv.dts
@@ -3,6 +3,8 @@

 /dts-v1/;

+#include <dt-bindings/pinctrl/pinctrl-tegra.h>
+#include <dt-bindings/sound/rt5640.h>
 #include "tegra234-p3768-0000+p3767-0005.dts"
 #include "tegra234-p3768-0000+p3767-xxxx-nv-common.dtsi"

@@ -257,6 +295,10 @@
                         };
                 };

+               serial@3110000 {
+                       status = "okay";
+               };
+
        };

 
diff --git a/sources/hardware/nvidia/t23x/nv-public/nv-platform/tegra234-p3768-0000+p3767-xxxx-nv-common.dtsi b/sources/hardware/nvidia/t23x/nv-public/nv-platform/tegra234-p3768-0000+p3767-xxxx-nv-common.dtsi
index cb76d5711..f877b8a06 100644
--- a/sources/hardware/nvidia/t23x/nv-public/nv-platform/tegra234-p3768-0000+p3767-xxxx-nv-common.dtsi
+++ b/sources/hardware/nvidia/t23x/nv-public/nv-platform/tegra234-p3768-0000+p3767-xxxx-nv-common.dtsi
@@ -13,6 +13,7 @@
        aliases {
                serial1 = &uarta;
                serial2 = &uarte;
+               serial3 = "/bus@0/serial@3110000";
        };

        bpmp {
@@ -322,6 +323,11 @@
                pcie@14100000 {
                        nvidia,pex-wake-gpios = <&gpio TEGRA234_MAIN_GPIO(L, 2) GPIO_ACTIVE_LOW>;
                };
+
+               serial@3110000 {
+                       compatible = "nvidia,tegra194-hsuart";
+                       reset-names = "serial";
+               };
        };

        cpus {
pcp@pcp-yen-linux:/media/pcp/YEN_P1/work/nvidia/R36.5/jetson-linux-r36-5_B442$

Just for the record

— 🤖 This is an automated AI response. I’m here to help, but please verify important details! —

The issue you’re experiencing with the UART0 flow control on the Jetson Orin Nano Developer Kit running JetPack/L4T R36.5.0, specifically with the Telit WE310K6-P Wi-Fi/BT module, seems to be related to the configuration of the UART pins and the flow control settings.

According to the provided context, the Jetson Orin Nano’s UART0 is not natively capable of half-duplex operation, which might be a requirement for your specific use case. However, you’ve attempted to configure the flow control by modifying the device tree files (tegra234-b442+p3767-0005-nv.dts and tegra234-p3768-0000+p3767-xxxx-nv-common.dtsi) to enable the RTS and CTS lines.

The error messages you’ve provided indicate issues with the out-of-order packet arrival and transmission timeouts, which could be related to the flow control configuration.

To further troubleshoot this issue, you may want to verify that the UART configuration and flow control settings are correctly applied and that there are no conflicts with other device configurations.

Additionally, you can try to disable the flow control within the Bluetooth firmware, as you’ve mentioned that it succeeds in initializing Bluetooth but results in choppy audio. However, please note that disabling flow control might not be a viable option for your specific use case.

It’s also recommended to consult the Telit WE310K6-P Wi-Fi/BT module documentation and the Jetson Orin Nano’s technical documentation to ensure that the UART configuration and flow control settings are compatible and correctly implemented.

If you’re still experiencing issues, you may want to consider seeking further assistance from NVIDIA support or the Jetson Orin Nano community forums, as they may be able to provide more specific guidance or troubleshooting steps tailored to your particular setup and requirements.

— We support team will also look into your issue to have further suggestions soon. please stay tuned. —