Received: by 2002:ac0:8c9a:0:0:0:0:0 with SMTP id r26csp333101ima; Fri, 1 Feb 2019 04:08:51 -0800 (PST) X-Google-Smtp-Source: ALg8bN76cIS5CRPizVw7VDcH6bPC0gFMFPxFrHyGpc2+x1BdgVJYMCZEVAaC5CA8cqYeJs1poCD+ X-Received: by 2002:a62:e0d8:: with SMTP id d85mr38377263pfm.214.1549022931931; Fri, 01 Feb 2019 04:08:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1549022931; cv=none; d=google.com; s=arc-20160816; b=rAwnLnkCtc64lINyVZJ8ijo4zCdieq7wHK4FnUMdaivzjTi9OCAYEKtEnbBgE+SsLb mKPJ9SyW85HrBfeFrjiRYCFZEt/wYSxTA82xQdB+521r9wzQJPh4ebvEIo+0btK+E3vl JHD86caAy+m4HO6j99fBBHQj4RrnYiZxCw2Bw9AWjVWfy5UDd5Bhxfw93KGblG8pjEp0 uAemgPG+GQ3ZYq+/t7ax1IUHpuDsYZDtBdOJnoA3keWyNeklua5ydK9OCQX0P8L+lgLE DueocGrVP4VUEhs+mEKsUIBdSkhDEvcS5B/klHjBgaMWc1wtZozM+09P0fscgXbc2r3p EbDQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:message-id:references :in-reply-to:subject:cc:to:from:date:content-transfer-encoding :mime-version:dkim-signature:dkim-signature; bh=6ZVEou/rUYUEdNqvJrMYQoV9oZ9EDQR50HWAjd27bWg=; b=zYYIl+uGpiej9IVoCL11XyB/92G/Zjd6mKI7lHcg5Sh5abyw5a1WrPnF7RC1DtB70M U2+aU3ossqCQ1CUSXg0/WdNewHQy5pdXygDW6O1sg50wIIp19PxMSzWbjNKXu2MnBifK t3B1/neOK+2nWjcFe02ADxKQIwiSJnMY0/ziRHvab8uN3JaUbSW3HZPvbTfdK+0TiF6C uOoGyObZx1LNTdazPVbe1sbxRpELCp9rP4EYLVqmZO5SyDYHxI/P5aGTSH7b2OLb3ky5 RwxLloAMlTzeX6p1UBxZmLtUF223YgXRITDfBpD5ojBgbtszntB7TqmqpV/H+SCl5mb+ DPiw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@codeaurora.org header.s=default header.b=pMg4kouD; dkim=pass header.i=@codeaurora.org header.s=default header.b=AgN2AW1f; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 133si633518pgc.588.2019.02.01.04.08.36; Fri, 01 Feb 2019 04:08:51 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@codeaurora.org header.s=default header.b=pMg4kouD; dkim=pass header.i=@codeaurora.org header.s=default header.b=AgN2AW1f; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728571AbfBALkP (ORCPT + 99 others); Fri, 1 Feb 2019 06:40:15 -0500 Received: from smtp.codeaurora.org ([198.145.29.96]:48564 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726330AbfBALkO (ORCPT ); Fri, 1 Feb 2019 06:40:14 -0500 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id EB7D160398; Fri, 1 Feb 2019 11:40:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1549021213; bh=IP+poZF0mbxXJzUpkT/Te60hF3Qk4fALjWJMwBcOJZE=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=pMg4kouDVbZySoyiHi5zN+iaqLiw9JYVwhgHBlJq87AUkcfUSttRqIad1inIcO6ky yVKJ1T/OWZnwB8YktzOx4DNKh79m8kEMjUq+TZ0Yd7GhSFJ+owWXBLSa6Iij64Erm2 +7FwqTUUQCFNCrRtahmRlD4pTsyXe5O8feh/ew+8= X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on pdx-caf-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.7 required=2.0 tests=ALL_TRUSTED,BAYES_00, DKIM_INVALID,DKIM_SIGNED autolearn=no autolearn_force=no version=3.4.0 Received: from mail.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.codeaurora.org (Postfix) with ESMTP id EFC0B60398; Fri, 1 Feb 2019 11:40:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1549021212; bh=IP+poZF0mbxXJzUpkT/Te60hF3Qk4fALjWJMwBcOJZE=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=AgN2AW1fzVzzz0jvPKZ09fQA4j6E0aO5Ww8ne+8LzBYYS36+f/SHxYz849kgh6oM4 OjO6k3hPhR2IxzRyg4pSeRcNAmTBcfFfaWa9B65R19m4IeVqUIILYIYrmoBqYAE9Oz f4ZRtNRFY5xkry6/rOm1EM9x1q1mghnIEeaePuF0= MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Date: Fri, 01 Feb 2019 17:10:11 +0530 From: Balakrishna Godavarthi To: Matthias Kaehlcke Cc: marcel@holtmann.org, johan.hedberg@gmail.com, johan@kernel.org, linux-kernel@vger.kernel.org, linux-bluetooth@vger.kernel.org, hemantg@codeaurora.org, linux-arm-msm@vger.kernel.org Subject: Re: [PATCH v9 3/3] Bluetooth: hci_qca: Disable IBS state machine and flush Tx buffer In-Reply-To: <20190125005534.GC81583@google.com> References: <20190124120808.8275-1-bgodavar@codeaurora.org> <20190124120808.8275-4-bgodavar@codeaurora.org> <20190125005534.GC81583@google.com> Message-ID: <75923da910c43e7e5e033f4ff4360a90@codeaurora.org> X-Sender: bgodavar@codeaurora.org User-Agent: Roundcube Webmail/1.2.5 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Matthias, On 2019-01-25 06:25, Matthias Kaehlcke wrote: > On Thu, Jan 24, 2019 at 05:38:08PM +0530, Balakrishna Godavarthi wrote: >> During hci down we observed IBS sleep commands are queued in the Tx >> buffer and hci_uart_write_work is sending data to the chip which is >> not required as the chip is powered off. This patch will disable IBS >> and flush the Tx buffer before we turn off the chip. >> >> Signed-off-by: Balakrishna Godavarthi >> --- >> Changes v9: >> * added lock while disabling the IBS state machine. >> >> --- >> drivers/bluetooth/hci_qca.c | 17 +++++++++++++++-- >> 1 file changed, 15 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c >> index 6b5bcd44e24c..99ddc35f08c6 100644 >> --- a/drivers/bluetooth/hci_qca.c >> +++ b/drivers/bluetooth/hci_qca.c >> @@ -771,16 +771,17 @@ static int qca_enqueue(struct hci_uart *hu, >> struct sk_buff *skb) >> /* Prepend skb with frame type */ >> memcpy(skb_push(skb, 1), &hci_skb_pkt_type(skb), 1); >> >> + spin_lock_irqsave(&qca->hci_ibs_lock, flags); >> + >> /* Don't go to sleep in middle of patch download or >> * Out-Of-Band(GPIOs control) sleep is selected. >> */ >> if (!test_bit(STATE_IN_BAND_SLEEP_ENABLED, &qca->flags)) { >> skb_queue_tail(&qca->txq, skb); >> + spin_unlock_irqrestore(&qca->hci_ibs_lock, flags); >> return 0; >> } >> >> - spin_lock_irqsave(&qca->hci_ibs_lock, flags); >> - >> /* Act according to current state */ >> switch (qca->tx_ibs_state) { >> case HCI_IBS_TX_AWAKE: >> @@ -1273,6 +1274,18 @@ static const struct qca_vreg_data qca_soc_data >> = { >> >> static void qca_power_shutdown(struct hci_uart *hu) >> { >> + struct qca_data *qca = hu->priv; >> + unsigned long flags; >> + >> + /* From this point we go into power off state. But serial port is >> + * still open, stop queueing the IBS data and flush all the buffered >> + * data in skb's. >> + */ >> + spin_lock_irqsave(&qca->hci_ibs_lock, flags); >> + clear_bit(STATE_IN_BAND_SLEEP_ENABLED, &qca->flags); >> + qca_flush(hu); >> + spin_unlock_irqrestore(&qca->hci_ibs_lock, flags); >> + >> host_set_baudrate(hu, 2400); >> qca_send_power_pulse(hu, QCA_WCN3990_POWEROFF_PULSE); >> qca_power_setup(hu, false); > > I was about to add my 'Reviewed-by' tag, but I'm still left with a > doubt. This patch certainly improves the situation by clearing the IBS > bit and flushing the buffered data, however IIUC new data could still > be added to the TX queue after releasing the spinlock: > > static int qca_enqueue(struct hci_uart *hu, struct sk_buff *skb) > { > ... > > if (!test_bit(STATE_IN_BAND_SLEEP_ENABLED, &qca->flags)) { > skb_queue_tail(&qca->txq, skb); > > ... > } > > To prevent this a boolean/bit like 'shutting_down' or similar would be > needed (I don't think there is something common in the HCI core), > which is set in qca_power_shutdown(). If the bit is set qca_enqueue() > discards the data. > > Not sure how important this is, and I don't want to add necessarily > more revisions to this series. If it is preferable to have an empty > queue after shutdown maybe it can be done in a follow up patch. > > Thanks > > Matthias [Bala]: during shutdown Bt stack will not send any data to the Bt kernel Tx path. so this call may not be called. once we shutdown chip. -- Regards Balakrishna.