public inbox for stable@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v1] Bluetooth: qca: Fix BT enable failure again for QCA6390 after warm reboot
@ 2024-05-02 14:06 Zijun Hu
  2024-05-03 10:16 ` Krzysztof Kozlowski
  2024-05-03 19:22 ` Luiz Augusto von Dentz
  0 siblings, 2 replies; 11+ messages in thread
From: Zijun Hu @ 2024-05-02 14:06 UTC (permalink / raw)
  To: luiz.dentz, luiz.von.dentz, marcel
  Cc: quic_zijuhu, linux-bluetooth, wt, regressions, stable

Commit 272970be3dab ("Bluetooth: hci_qca: Fix driver shutdown on closed
serdev") will cause below regression issue:

BT can't be enabled after below steps:
cold boot -> enable BT -> disable BT -> warm reboot -> BT enable failure
if property enable-gpios is not configured within DT|ACPI for QCA6390.

The commit is to fix a use-after-free issue within qca_serdev_shutdown()
during reboot, but also introduces this regression issue regarding above
steps since the VSC is not sent to reset controller during warm reboot.

Fixed by sending the VSC to reset controller within qca_serdev_shutdown()
once BT was ever enabled, and the use-after-free issue is also be fixed
by this change since serdev is still opened when send to serdev.

Fixes: 272970be3dab ("Bluetooth: hci_qca: Fix driver shutdown on closed serdev")
Cc: stable@vger.kernel.org
Reported-by: Wren Turkal <wt@penguintechs.org>
Closes: https://bugzilla.kernel.org/show_bug.cgi?id=218726
Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
Tested-by: Wren Turkal <wt@penguintechs.org>
---
 drivers/bluetooth/hci_qca.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c
index 0c9c9ee56592..8e35c9091486 100644
--- a/drivers/bluetooth/hci_qca.c
+++ b/drivers/bluetooth/hci_qca.c
@@ -2450,13 +2450,12 @@ static void qca_serdev_shutdown(struct device *dev)
 	struct qca_serdev *qcadev = serdev_device_get_drvdata(serdev);
 	struct hci_uart *hu = &qcadev->serdev_hu;
 	struct hci_dev *hdev = hu->hdev;
-	struct qca_data *qca = hu->priv;
 	const u8 ibs_wake_cmd[] = { 0xFD };
 	const u8 edl_reset_soc_cmd[] = { 0x01, 0x00, 0xFC, 0x01, 0x05 };
 
 	if (qcadev->btsoc_type == QCA_QCA6390) {
-		if (test_bit(QCA_BT_OFF, &qca->flags) ||
-		    !test_bit(HCI_RUNNING, &hdev->flags))
+		if (test_bit(HCI_QUIRK_NON_PERSISTENT_SETUP, &hdev->quirks) ||
+		    hci_dev_test_flag(hdev, HCI_SETUP))
 			return;
 
 		serdev_device_write_flush(serdev);
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2024-05-11  4:11 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-05-02 14:06 [PATCH v1] Bluetooth: qca: Fix BT enable failure again for QCA6390 after warm reboot Zijun Hu
2024-05-03 10:16 ` Krzysztof Kozlowski
2024-05-03 18:49   ` quic_zijuhu
2024-05-10 19:49   ` Wren Turkal
2024-05-03 19:22 ` Luiz Augusto von Dentz
2024-05-03 20:18   ` quic_zijuhu
2024-05-03 21:25     ` Luiz Augusto von Dentz
2024-05-03 21:51       ` quic_zijuhu
2024-05-07 13:48         ` Lk Sii
2024-05-10 20:45           ` Wren Turkal
2024-05-11  4:09             ` Lk Sii

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox