From patchwork Tue Nov 6 12:05:25 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Balakrishna Godavarthi X-Patchwork-Id: 10670193 X-Patchwork-Delegate: agross@codeaurora.org Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id F3B1315E9 for ; Tue, 6 Nov 2018 12:06:08 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E34F126255 for ; Tue, 6 Nov 2018 12:06:08 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D76AF2927F; Tue, 6 Nov 2018 12:06:08 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7AD8126255 for ; Tue, 6 Nov 2018 12:06:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730760AbeKFVah (ORCPT ); Tue, 6 Nov 2018 16:30:37 -0500 Received: from smtp.codeaurora.org ([198.145.29.96]:51888 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726976AbeKFVah (ORCPT ); Tue, 6 Nov 2018 16:30:37 -0500 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id D7244605A2; Tue, 6 Nov 2018 12:05:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1541505942; bh=mLG9ZCaIJ8+4gofyelc0OXDiSRL2Xx/TlW0/WvtaCfI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=LDh/WAIc36pStvXStyp5aKItL1+qEe42g4o33cW5SYFlwbLhqcdIbLah3z+fD/bHA hLU+dXrnQKNRr8I6vskFfDiB1ePIEkhsVsh+aIvRXLlQgMWwCqycwURP+CZw9zeBrj L3szbsqh0oGjO8FD1/uBsOR7+I24bOZYrdAMP5J4= Received: from bgodavar-linux.qualcomm.com (blr-c-bdr-fw-01_globalnat_allzones-outside.qualcomm.com [103.229.19.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: bgodavar@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id A9F6960591; Tue, 6 Nov 2018 12:05:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1541505942; bh=mLG9ZCaIJ8+4gofyelc0OXDiSRL2Xx/TlW0/WvtaCfI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=LDh/WAIc36pStvXStyp5aKItL1+qEe42g4o33cW5SYFlwbLhqcdIbLah3z+fD/bHA hLU+dXrnQKNRr8I6vskFfDiB1ePIEkhsVsh+aIvRXLlQgMWwCqycwURP+CZw9zeBrj L3szbsqh0oGjO8FD1/uBsOR7+I24bOZYrdAMP5J4= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org A9F6960591 Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=bgodavar@codeaurora.org From: Balakrishna Godavarthi To: marcel@holtmann.org, johan.hedberg@gmail.com Cc: mka@chromium.org, linux-kernel@vger.kernel.org, linux-bluetooth@vger.kernel.org, hemantg@codeaurora.org, linux-arm-msm@vger.kernel.org, Balakrishna Godavarthi Subject: [PATCH v1 1/4] Bluetooth: hci_qca: use wait_until_sent() for power pulses Date: Tue, 6 Nov 2018 17:35:25 +0530 Message-Id: <20181106120528.30342-2-bgodavar@codeaurora.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181106120528.30342-1-bgodavar@codeaurora.org> References: <20181106120528.30342-1-bgodavar@codeaurora.org> MIME-Version: 1.0 Sender: linux-arm-msm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP wcn3990 requires a power pulse to turn ON/OFF along with regulators. Sometimes we are observing the power pulses are sent out with some time delay, due to queuing these commands. This is causing synchronization issues with chip, which intern delay the chip setup or may end up with communication issues. Signed-off-by: Balakrishna Godavarthi --- drivers/bluetooth/hci_qca.c | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c index f72ded4ec9ae..051f081d1835 100644 --- a/drivers/bluetooth/hci_qca.c +++ b/drivers/bluetooth/hci_qca.c @@ -1016,8 +1016,7 @@ static inline void host_set_baudrate(struct hci_uart *hu, unsigned int speed) static int qca_send_power_pulse(struct hci_dev *hdev, u8 cmd) { struct hci_uart *hu = hci_get_drvdata(hdev); - struct qca_data *qca = hu->priv; - struct sk_buff *skb; + int ret; /* These power pulses are single byte command which are sent * at required baudrate to wcn3990. On wcn3990, we have an external @@ -1030,18 +1029,14 @@ static int qca_send_power_pulse(struct hci_dev *hdev, u8 cmd) * sending power pulses to SoC. */ bt_dev_dbg(hdev, "sending power pulse %02x to SoC", cmd); - - skb = bt_skb_alloc(sizeof(cmd), GFP_KERNEL); - if (!skb) - return -ENOMEM; - hci_uart_set_flow_control(hu, true); + ret = serdev_device_write(hu->serdev, &cmd, sizeof(cmd), 0); + if (ret < 0) { + bt_dev_err(hdev, "failed to send power pulse %02x to SoC", cmd); + return ret; + } - skb_put_u8(skb, cmd); - hci_skb_pkt_type(skb) = HCI_COMMAND_PKT; - - skb_queue_tail(&qca->txq, skb); - hci_uart_tx_wakeup(hu); + serdev_device_wait_until_sent(hu->serdev, 0); /* Wait for 100 uS for SoC to settle down */ usleep_range(100, 200); @@ -1283,7 +1278,8 @@ static void qca_power_shutdown(struct hci_uart *hu) host_set_baudrate(hu, 2400); hci_uart_set_flow_control(hu, true); - serdev_device_write_buf(serdev, &cmd, sizeof(cmd)); + serdev_device_write(serdev, &cmd, sizeof(cmd), 0); + serdev_device_wait_until_sent(serdev, 0); hci_uart_set_flow_control(hu, false); qca_power_setup(hu, false); } From patchwork Tue Nov 6 12:05:26 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Balakrishna Godavarthi X-Patchwork-Id: 10670191 X-Patchwork-Delegate: agross@codeaurora.org Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1938C13A4 for ; Tue, 6 Nov 2018 12:06:07 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 08CE826255 for ; Tue, 6 Nov 2018 12:06:07 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id F10712927F; Tue, 6 Nov 2018 12:06:06 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9155526255 for ; Tue, 6 Nov 2018 12:06:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730778AbeKFVal (ORCPT ); Tue, 6 Nov 2018 16:30:41 -0500 Received: from smtp.codeaurora.org ([198.145.29.96]:52004 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726976AbeKFVak (ORCPT ); Tue, 6 Nov 2018 16:30:40 -0500 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 70A9060741; Tue, 6 Nov 2018 12:05:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1541505946; bh=dYAMOUS13Op6H/79Zd5PyiWJiNNUXGEEFDZk0+TDHy8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QSfUwFcFnEm75roDyzPzvFkZFYVGHjvplUii4EX25pVdq9J5v7pcunDAoLPpFR2eR 5UDETHaf+csU89zLnpE3pj/SMO9Z1Rg9dxBnRkWOJLDefcoFIg3eHSjmiVqeYx5VXp ZR4lPQZzJ55FUbyn5dgJoHafEj9N9cl9YBW33l2U= Received: from bgodavar-linux.qualcomm.com (blr-c-bdr-fw-01_globalnat_allzones-outside.qualcomm.com [103.229.19.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: bgodavar@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 9BA176053D; Tue, 6 Nov 2018 12:05:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1541505945; bh=dYAMOUS13Op6H/79Zd5PyiWJiNNUXGEEFDZk0+TDHy8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=K06DETsKuC7XfOk7JGZiCZ7jHvcbfcfGQSurxZHjLanZeEXkhP8pq1k0QajgQfOnR Duo7D+KDGMJd5VF0Er/9rQLC72HDWEXJpO3iil7pn+DDcoWX65Y2ZW4xgkp1ClTJvj DNJe6qW2u2TQaTsaKMXwgmlAqbj4tT+Fcw1cL62U= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 9BA176053D Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=bgodavar@codeaurora.org From: Balakrishna Godavarthi To: marcel@holtmann.org, johan.hedberg@gmail.com Cc: mka@chromium.org, linux-kernel@vger.kernel.org, linux-bluetooth@vger.kernel.org, hemantg@codeaurora.org, linux-arm-msm@vger.kernel.org, Balakrishna Godavarthi Subject: [PATCH v1 2/4] Bluetooth: hci_qca: Pull RTS line high for baudrate change command Date: Tue, 6 Nov 2018 17:35:26 +0530 Message-Id: <20181106120528.30342-3-bgodavar@codeaurora.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181106120528.30342-1-bgodavar@codeaurora.org> References: <20181106120528.30342-1-bgodavar@codeaurora.org> MIME-Version: 1.0 Sender: linux-arm-msm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP This patch will pull the RTS line high instead of turning off the flow control, while changing baudrate of host and chip. Signed-off-by: Balakrishna Godavarthi Tested-by: Matthias Kaehlcke --- drivers/bluetooth/hci_qca.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c index 051f081d1835..8301663f0004 100644 --- a/drivers/bluetooth/hci_qca.c +++ b/drivers/bluetooth/hci_qca.c @@ -963,7 +963,6 @@ static int qca_set_baudrate(struct hci_dev *hdev, uint8_t baudrate) struct hci_uart *hu = hci_get_drvdata(hdev); struct qca_data *qca = hu->priv; struct sk_buff *skb; - struct qca_serdev *qcadev; u8 cmd[] = { 0x01, 0x48, 0xFC, 0x01, 0x00 }; if (baudrate > QCA_BAUDRATE_3200000) @@ -977,13 +976,6 @@ static int qca_set_baudrate(struct hci_dev *hdev, uint8_t baudrate) return -ENOMEM; } - /* Disabling hardware flow control is mandatory while - * sending change baudrate request to wcn3990 SoC. - */ - qcadev = serdev_device_get_drvdata(hu->serdev); - if (qcadev->btsoc_type == QCA_WCN3990) - hci_uart_set_flow_control(hu, true); - /* Assign commands to change baudrate and packet type. */ skb_put_data(skb, cmd, sizeof(cmd)); hci_skb_pkt_type(skb) = HCI_COMMAND_PKT; @@ -999,9 +991,6 @@ static int qca_set_baudrate(struct hci_dev *hdev, uint8_t baudrate) schedule_timeout(msecs_to_jiffies(BAUDRATE_SETTLE_TIMEOUT_MS)); set_current_state(TASK_RUNNING); - if (qcadev->btsoc_type == QCA_WCN3990) - hci_uart_set_flow_control(hu, false); - return 0; } @@ -1086,6 +1075,7 @@ static int qca_check_speeds(struct hci_uart *hu) static int qca_set_speed(struct hci_uart *hu, enum qca_speed_type speed_type) { unsigned int speed, qca_baudrate; + struct qca_serdev *qcadev; int ret; if (speed_type == QCA_INIT_SPEED) { @@ -1097,6 +1087,14 @@ static int qca_set_speed(struct hci_uart *hu, enum qca_speed_type speed_type) if (!speed) return 0; + /* Pulling RTS line to high is mandatory while sending change + * baudrate request to SoC and also while setting the host + * baudrate. + */ + qcadev = serdev_device_get_drvdata(hu->serdev); + if (qcadev->btsoc_type == QCA_WCN3990) + serdev_device_set_rts(hu->serdev, false); + qca_baudrate = qca_get_baudrate_value(speed); bt_dev_dbg(hu->hdev, "Set UART speed to %d", speed); ret = qca_set_baudrate(hu->hdev, qca_baudrate); @@ -1104,6 +1102,9 @@ static int qca_set_speed(struct hci_uart *hu, enum qca_speed_type speed_type) return ret; host_set_baudrate(hu, speed); + + if (qcadev->btsoc_type == QCA_WCN3990) + serdev_device_set_rts(hu->serdev, true); } return 0; From patchwork Tue Nov 6 12:05:27 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Balakrishna Godavarthi X-Patchwork-Id: 10670187 X-Patchwork-Delegate: agross@codeaurora.org Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 7976013A4 for ; Tue, 6 Nov 2018 12:05:54 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 68BEC26255 for ; Tue, 6 Nov 2018 12:05:54 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5C5572927F; Tue, 6 Nov 2018 12:05:54 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0DF7D26255 for ; Tue, 6 Nov 2018 12:05:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730815AbeKFVan (ORCPT ); Tue, 6 Nov 2018 16:30:43 -0500 Received: from smtp.codeaurora.org ([198.145.29.96]:52074 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726976AbeKFVam (ORCPT ); Tue, 6 Nov 2018 16:30:42 -0500 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 190CF60B7A; Tue, 6 Nov 2018 12:05:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1541505949; bh=f2vsGCrqV2dWHoMY3RT2mpv+RFW38Gde5kOkwGwavd4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=LI3Ry9XgzS9ZC+P5xacSCMEmIULNpV+yE+EOvjB+S8NRzYjK38Hc/f6WppgC8lRU/ xE5kAYOM6WQTH2tkZido06uonLJkAhuuiKkdr5zZoe97kwz9rJYYN1SnMp9yNQlytm bqfuwjcxqh4uZVNi+FYxHlFgdJzB1nDLOyt7K6Jg= Received: from bgodavar-linux.qualcomm.com (blr-c-bdr-fw-01_globalnat_allzones-outside.qualcomm.com [103.229.19.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: bgodavar@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id B72BF60B62; Tue, 6 Nov 2018 12:05:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1541505948; bh=f2vsGCrqV2dWHoMY3RT2mpv+RFW38Gde5kOkwGwavd4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=j76rsqNgzdzSfsY8kqD0XBbIylLXNhoNgvIRE1wVV0JC3yrIXevafBQzzYQt7SSxF AidM/jQZqQxVmNNViZ+LAGZF8PtuPzyLZbwxPvdrZG4YkTh1RwisrmjNHFNoAw4XJy PQ7tAFi5CDc1lggFRvBB6RHzCqFFTqgeRnea3snE= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org B72BF60B62 Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=bgodavar@codeaurora.org From: Balakrishna Godavarthi To: marcel@holtmann.org, johan.hedberg@gmail.com Cc: mka@chromium.org, linux-kernel@vger.kernel.org, linux-bluetooth@vger.kernel.org, hemantg@codeaurora.org, linux-arm-msm@vger.kernel.org, Balakrishna Godavarthi Subject: [PATCH v1 3/4] Bluetooth: hci_qca: clear HCI_QUIRK_RESET_ON_CLOSE flag Date: Tue, 6 Nov 2018 17:35:27 +0530 Message-Id: <20181106120528.30342-4-bgodavar@codeaurora.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181106120528.30342-1-bgodavar@codeaurora.org> References: <20181106120528.30342-1-bgodavar@codeaurora.org> MIME-Version: 1.0 Sender: linux-arm-msm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP During hci down we are sending reset command to chip, which is not required for wcn3990, as hdev->shutdown() will turn off the regulators. Signed-off-by: Balakrishna Godavarthi --- drivers/bluetooth/hci_qca.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c index 8301663f0004..97b57e0f4725 100644 --- a/drivers/bluetooth/hci_qca.c +++ b/drivers/bluetooth/hci_qca.c @@ -1190,6 +1190,7 @@ static int qca_setup(struct hci_uart *hu) */ set_bit(HCI_QUIRK_NON_PERSISTENT_SETUP, &hdev->quirks); set_bit(HCI_QUIRK_USE_BDADDR_PROPERTY, &hdev->quirks); + clear_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks); hu->hdev->shutdown = qca_power_off; ret = qca_wcn3990_init(hu); if (ret) From patchwork Tue Nov 6 12:05:28 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Balakrishna Godavarthi X-Patchwork-Id: 10670189 X-Patchwork-Delegate: agross@codeaurora.org Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 44F7E13A4 for ; Tue, 6 Nov 2018 12:06:01 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 358C226255 for ; Tue, 6 Nov 2018 12:06:01 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 292DB2927F; Tue, 6 Nov 2018 12:06:01 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B6E7126255 for ; Tue, 6 Nov 2018 12:06:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387567AbeKFVas (ORCPT ); Tue, 6 Nov 2018 16:30:48 -0500 Received: from smtp.codeaurora.org ([198.145.29.96]:52196 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726976AbeKFVar (ORCPT ); Tue, 6 Nov 2018 16:30:47 -0500 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 8823160741; Tue, 6 Nov 2018 12:05:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1541505953; bh=4WiXbwc0e4U0WOflxnS1rA4ueY5zCIJjjTBvbcP1RIg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Wx40riLZjwVGh2j63lEFcG5DLXz5P98dgxUzNXt2SitZON8HlS++JCND2RGs6HP4l ucoqel0vR3bQ8LSz6ekEWaknJOOkLzZr4fL3wRvSbJ3DOtcEg1oNfwNltGSBV7z4sT Dy9z33vIc1gs7MhscnQ5p8YTxNkJxCuvxyjisFGQ= Received: from bgodavar-linux.qualcomm.com (blr-c-bdr-fw-01_globalnat_allzones-outside.qualcomm.com [103.229.19.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: bgodavar@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id D1E0C60B7F; Tue, 6 Nov 2018 12:05:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1541505951; bh=4WiXbwc0e4U0WOflxnS1rA4ueY5zCIJjjTBvbcP1RIg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=J7y0Uomds4pxJpILGVnk2WK16badwXtYEILlkU/OJtlUEjL3L3ERshLfLIjkE/nre HitBKK+PkHbtpoLHMqkrTpXnMypFtM7UEAmEQcp2ESSZy1oBIs1bpaf9E5vfMRq5bu xWs3RWGNvguRw1w7iviCyrkaBApEeSTk3L2csB8E= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org D1E0C60B7F Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=bgodavar@codeaurora.org From: Balakrishna Godavarthi To: marcel@holtmann.org, johan.hedberg@gmail.com Cc: mka@chromium.org, linux-kernel@vger.kernel.org, linux-bluetooth@vger.kernel.org, hemantg@codeaurora.org, linux-arm-msm@vger.kernel.org, Balakrishna Godavarthi Subject: [PATCH v1 4/4] Bluetooth: hci_qca: Fix frame reassembly errors for wcn3990 Date: Tue, 6 Nov 2018 17:35:28 +0530 Message-Id: <20181106120528.30342-5-bgodavar@codeaurora.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181106120528.30342-1-bgodavar@codeaurora.org> References: <20181106120528.30342-1-bgodavar@codeaurora.org> MIME-Version: 1.0 Sender: linux-arm-msm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP [ 176.929612] Bluetooth: hci_qca.c:qca_recv() hci0: Frame reassembly failed (-84) [ 176.945734] Bluetooth: hci_qca.c:qca_recv() hci0: Frame reassembly failed (-84) [ 176.953298] Bluetooth: hci_qca.c:qca_recv() hci0: Frame reassembly failed (-84) [ 177.010660] Bluetooth: hci_qca.c:qca_recv() hci0: Frame reassembly failed (-84) [ 177.067633] Bluetooth: hci_qca.c:qca_recv() hci0: Frame reassembly failed (-84) The above errors log on console due to receiving of stray bytes when wcn3990 boot up's i.e. when during initial setup procedure. Signed-off-by: Balakrishna Godavarthi Tested-by: Matthias Kaehlcke --- drivers/bluetooth/hci_qca.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c index 97b57e0f4725..341f80606574 100644 --- a/drivers/bluetooth/hci_qca.c +++ b/drivers/bluetooth/hci_qca.c @@ -56,6 +56,7 @@ /* Controller states */ #define STATE_IN_BAND_SLEEP_ENABLED 1 +#define STATE_DISCARD_RX 2 #define IBS_WAKE_RETRANS_TIMEOUT_MS 100 #define IBS_TX_IDLE_TIMEOUT_MS 2000 @@ -511,6 +512,7 @@ static int qca_open(struct hci_uart *hu) } else { hu->init_speed = qcadev->init_speed; hu->oper_speed = qcadev->oper_speed; + set_bit(STATE_DISCARD_RX, &qca->flags); ret = qca_power_setup(hu, true); if (ret) { destroy_workqueue(qca->workqueue); @@ -903,6 +905,13 @@ static int qca_recv(struct hci_uart *hu, const void *data, int count) if (!test_bit(HCI_UART_REGISTERED, &hu->flags)) return -EUNATCH; + /* We discard Rx data received while device is in booting + * stage, this is due multiple baudrate switch is causing + * UART to read some garbage data. + */ + if (test_bit(STATE_DISCARD_RX, &qca->flags)) + return 0; + qca->rx_skb = h4_recv_buf(hu->hdev, qca->rx_skb, data, count, qca_recv_pkts, ARRAY_SIZE(qca_recv_pkts)); if (IS_ERR(qca->rx_skb)) { @@ -1192,10 +1201,12 @@ static int qca_setup(struct hci_uart *hu) set_bit(HCI_QUIRK_USE_BDADDR_PROPERTY, &hdev->quirks); clear_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks); hu->hdev->shutdown = qca_power_off; + ret = qca_wcn3990_init(hu); if (ret) return ret; + clear_bit(STATE_DISCARD_RX, &qca->flags); ret = qca_read_soc_version(hdev, &soc_ver); if (ret) return ret; @@ -1278,8 +1289,15 @@ static void qca_power_shutdown(struct hci_uart *hu) struct serdev_device *serdev = hu->serdev; unsigned char cmd = QCA_WCN3990_POWEROFF_PULSE; - host_set_baudrate(hu, 2400); + /* From this point we go into power off state, + * disable IBS and discard all the queued data. + */ + clear_bit(STATE_IN_BAND_SLEEP_ENABLED, &qca->flags); + set_bit(STATE_DISCARD_RX, &qca->flags); + qca_flush(hu); + hci_uart_set_flow_control(hu, true); + host_set_baudrate(hu, 2400); serdev_device_write(serdev, &cmd, sizeof(cmd), 0); serdev_device_wait_until_sent(serdev, 0); hci_uart_set_flow_control(hu, false);