Skip to content

Commit cab8484

Browse files
shuaz-shuaiche-jiang
authored andcommitted
UPSTREAM: Bluetooth: hci_qca: Use 100 ms SSR delay for rampatch and NVM loading
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 WCN7850 chip, the rampatch is ~264 KB and the NVM is ~9.4 KB. The loading process takes approximately 70 ms. The previous 50 ms delay is too short, causing the controller to not respond to the reset command sent by the host, which leads to BT initialization failure: Bluetooth: hci0: QCA memdump Done, received 458752, total 458752 Bluetooth: hci0: mem_dump_status: 2 Bluetooth: hci0: Opcode 0x0c03 failed: -110 Increase the delay to 100 ms, which was confirmed as a safe value by the controller, to ensure the controller has finished loading the firmware before the host sends commands. 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: fce1a92 ("Bluetooth: hci_qca: Fix SSR (SubSystem Restart) fail when BT_EN is pulled up by hw") Cc: stable@vger.kernel.org Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> Link: https://lore.kernel.org/r/20260525065156.2213123-1-shuai.zhang@oss.qualcomm.com Signed-off-by: Shuai Zhang <shuai.zhang@oss.qualcomm.com>
1 parent 9cca493 commit cab8484

1 file changed

Lines changed: 2 additions & 2 deletions

File tree

drivers/bluetooth/hci_qca.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1680,8 +1680,8 @@ static void qca_hw_error(struct hci_dev *hdev, u8 code)
16801680
mod_timer(&qca->tx_idle_timer, jiffies +
16811681
msecs_to_jiffies(qca->tx_idle_delay));
16821682

1683-
/* Controller reset completion time is 50ms */
1684-
msleep(50);
1683+
/* Wait for the controller to load the rampatch and NVM. */
1684+
msleep(100);
16851685

16861686
clear_bit(QCA_SSR_TRIGGERED, &qca->flags);
16871687
clear_bit(QCA_IBS_DISABLED, &qca->flags);

0 commit comments

Comments
 (0)