Re: [PATCH v1] Bluetooth: hci_qca: Increase SSR delay for rampatch and NVM loading

From: Shuai Zhang

Date: Mon May 25 2026 - 00:54:47 EST


Hi Paul

Thanks for your review and suggestions.

On 5/22/2026 10:50 PM, Paul Menzel wrote:
Dear Shuai,


Thank you for your patch. Please mention the delay in the summary/title. Maybe:

Use 100 ms SSR delay for rampatch and NVM loading

Am 22.05.26 um 13:08 schrieb Shuai Zhang:
When bt_en is pulled high by hardware, the host does not re-download
the firmware after SSR. The controller loads the rampatch and NVM
internally.

On HMT chip, due to the large firmware file size, the

Please document the size (> X MB)


On HMT chip, the rampatch size is ~264 KB and the NVM is ~9.4 KB.
I will update this information in the next version of the patch.


loading process takes approximately 70ms. The previous 50ms delay is
too short, causing the controller to not respond to the reset command
sent by the host, which leads to BT initialization failure.

Maybe paste the log?


 Bluetooth: hci0: QCA memdump Done, received 458752, total 458752
 Bluetooth: hci0: mem_dump_status: 2
 Bluetooth: hci0: Opcode 0x0c03 failed: -110

I will update this information in the next version of the patch.



Increase the delay to 100ms to ensure the controller has finished
loading the firmware before the host sends commands.

Why can’t it be increased to 1 s?

Steps to reproduce:
1. Trigger SSR and wait for SSR to complete:
    hcitool cmd 0x3f 0c 26
2. Run "bluetoothctl power on" and observe that BT fails to start.

Fixes: fce1a9244a0f ("Bluetooth: hci_qca: Fix SSR (SubSystem Restart) fail when BT_EN is pulled up by hw")
Cc: stable@xxxxxxxxxxxxxxx
Signed-off-by: Shuai Zhang <shuai.zhang@xxxxxxxxxxxxxxxx>
---
  drivers/bluetooth/hci_qca.c | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c
index ed280399b..184f52f9c 100644
--- a/drivers/bluetooth/hci_qca.c
+++ b/drivers/bluetooth/hci_qca.c
@@ -1680,8 +1680,8 @@ static void qca_hw_error(struct hci_dev *hdev, u8 code)
          mod_timer(&qca->tx_idle_timer, jiffies +
                    msecs_to_jiffies(qca->tx_idle_delay));
  -        /* Controller reset completion time is 50ms */
-        msleep(50);
+        /* Wait for the controller to load the rampatch and NVM.*/

Missing space at the end.

+        msleep(100);
            clear_bit(QCA_SSR_TRIGGERED, &qca->flags);
          clear_bit(QCA_IBS_DISABLED, &qca->flags);

Is the time it took to load the rampatch and NVM visible in the logs?


No, the loading time of the rampatch and NVM is not visible in the host logs,

as the firmware is loaded internally by the controller.




Kind regards,

Paul


Thanks,

Shuai