Hi Christian, + Max Chou as the author of commit 848fc6164158 ("Bluetooth: hci_h5: btrtl: Add support for RTL8822C") On Tue, Feb 21, 2023 at 8:13 AM Christian Hewitt <christianshewitt@xxxxxxxxx> wrote: [...] > I can also use the oldest upstream firmware with the Armbian config: > > [ 7.315358] Bluetooth: hci0: RTL: examining hci_ver=0a hci_rev=000c lmp_ver=0a lmp_subver=8822 > [ 7.318754] Bluetooth: hci0: RTL: rom_version status=0 version=3 > [ 7.318772] Bluetooth: hci0: RTL: loading rtl_bt/rtl8822cs_fw.bin > [ 7.319680] Bluetooth: hci0: RTL: loading rtl_bt/rtl8822cs_config.bin > [ 7.341340] Bluetooth: hci0: RTL: cfg_sz 73, total sz 30817 > [ 7.612533] Bluetooth: hci0: RTL: fw version 0x05990d54 > > The config file Armbian are using [0] is sourced from an Amlogic (Android) BSP > repo shared to manufacturer Jethome (Vyacheslav on CC). There is no obvious > version info. There are newer (more recently committed) config files available > in updates to the Amlogic repo (alongside older 0599_0D54 firmware) and all work > with any upstream firmware file. I did compare the two config files and they differ in certain areas. - upstream config: 1500000 baud, flow control is disabled - Armbian config: 2000000 baud, flow control is enabled Seeing that the Armbian config works with a higher baud rate my guess is that there's some issue with flow control instead. For those who are interested, here's the raw data provided by the rtlfw tool from [0]. Armbian (= working) config: Signature: 0x8723ab55 Data len: 67 len=16 offset=000c,{ 02 50 00 00 50 c5 ea 19 e1 1b fd af 5f 01 a4 0b },UART_CONFIG len=2 offset=01be,{ 1a 19 } len=1 offset=01bb,{ 3d } len=4 offset=01c0,{ 10 00 60 01 } len=11 offset=1000,{ 00 ff 04 5d 00 03 00 ff ff ff ff } len=11 offset=1040,{ 28 08 30 30 00 ff ff ff ff ff ff } len=1 offset=01c4,{ 02 } upstream (= non-working) config: Signature: 0x8723ab55 Data len: 27 len=16 offset=000c,{ 02 80 92 04 50 c5 ea 19 e1 1b fd af 5b 01 a4 0b },UART_CONFIG len=1 offset=007a,{ 37 } len=1 offset=00d9,{ 0f } The baud rate is encoded in the first four bytes and can be decoded with the help of btrtl_convert_baudrate() from Linux' drivers/bluetooth/btrtl.c Flow control is encoded as BIT(2) in data[12]. I am hoping that Hilda and/or Max can provide some ideas on how to solve this issue. Best regards, Martin [0] https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/tools/rtlfw.c?id=5d347b54714e0f2d750253be09b68b0c3119dd0a