| From 62fd55faf3d74325772a911cb601910256203d49 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 28 Jul 2020 21:23:00 +0530 |
| Subject: Bluetooth: hci_qca: Stop collecting memdump again for command timeout |
| during SSR |
| |
| From: Venkata Lakshmi Narayana Gubba <gubbaven@codeaurora.org> |
| |
| [ Upstream commit 58789a1990c1a849a461ac912e72a698a771951a ] |
| |
| Setting memdump state to idle prior to setting of callback function |
| pointer for command timeout to NULL,causing the issue.Now moved the |
| initialisation of memdump state to qca_setup(). |
| |
| Fixes: d841502c79e3 ("Bluetooth: hci_qca: Collect controller memory dump during SSR") |
| Signed-off-by: Venkata Lakshmi Narayana Gubba <gubbaven@codeaurora.org> |
| Signed-off-by: Marcel Holtmann <marcel@holtmann.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/bluetooth/hci_qca.c | 9 +++++---- |
| 1 file changed, 5 insertions(+), 4 deletions(-) |
| |
| diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c |
| index 9869ae0f7b71e..6a3c80e1b19cd 100644 |
| --- a/drivers/bluetooth/hci_qca.c |
| +++ b/drivers/bluetooth/hci_qca.c |
| @@ -1633,6 +1633,8 @@ static int qca_setup(struct hci_uart *hu) |
| bt_dev_info(hdev, "setting up %s", |
| qca_is_wcn399x(soc_type) ? "wcn399x" : "ROME"); |
| |
| + qca->memdump_state = QCA_MEMDUMP_IDLE; |
| + |
| retry: |
| ret = qca_power_on(hdev); |
| if (ret) |
| @@ -1776,9 +1778,6 @@ static void qca_power_shutdown(struct hci_uart *hu) |
| qca_flush(hu); |
| spin_unlock_irqrestore(&qca->hci_ibs_lock, flags); |
| |
| - hu->hdev->hw_error = NULL; |
| - hu->hdev->cmd_timeout = NULL; |
| - |
| /* Non-serdev device usually is powered by external power |
| * and don't need additional action in driver for power down |
| */ |
| @@ -1800,6 +1799,9 @@ static int qca_power_off(struct hci_dev *hdev) |
| struct qca_data *qca = hu->priv; |
| enum qca_btsoc_type soc_type = qca_soc_type(hu); |
| |
| + hu->hdev->hw_error = NULL; |
| + hu->hdev->cmd_timeout = NULL; |
| + |
| /* Stop sending shutdown command if soc crashes. */ |
| if (qca_is_wcn399x(soc_type) |
| && qca->memdump_state == QCA_MEMDUMP_IDLE) { |
| @@ -1807,7 +1809,6 @@ static int qca_power_off(struct hci_dev *hdev) |
| usleep_range(8000, 10000); |
| } |
| |
| - qca->memdump_state = QCA_MEMDUMP_IDLE; |
| qca_power_shutdown(hu); |
| return 0; |
| } |
| -- |
| 2.25.1 |
| |