All of lore.kernel.org
 help / color / mirror / Atom feed
From: Matthias Kaehlcke <mka@chromium.org>
To: Marcel Holtmann <marcel@holtmann.org>,
	Johan Hedberg <johan.hedberg@gmail.com>
Cc: linux-bluetooth@vger.kernel.org, linux-kernel@vger.kernel.org,
	Balakrishna Godavarthi <bgodavar@codeaurora.org>,
	Hemantg <hemantg@codeaurora.org>
Subject: Re: [PATCH 2/2] hci_qca: Reduce delay after sending baudrate request for WCN3990
Date: Tue, 26 Feb 2019 12:20:06 -0800	[thread overview]
Message-ID: <20190226202006.GA155681@google.com> (raw)
In-Reply-To: <20190226200848.154216-3-mka@chromium.org>

On Tue, Feb 26, 2019 at 12:08:48PM -0800, Matthias Kaehlcke wrote:
> The current 300ms delay after a baudrate change is extremely long.
> For WCM3990 it is sufficient to wait 10ms after the baudrate change
> request has been sent over the wire.
> 
> Signed-off-by: Matthias Kaehlcke <mka@chromium.org>
> ---
>  drivers/bluetooth/hci_qca.c | 28 +++++++++++++++++++++-------
>  1 file changed, 21 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c
> index 703e099515f24..fd018cc5605c6 100644
> --- a/drivers/bluetooth/hci_qca.c
> +++ b/drivers/bluetooth/hci_qca.c
> @@ -59,8 +59,7 @@
>  
>  #define IBS_WAKE_RETRANS_TIMEOUT_MS	100
>  #define IBS_TX_IDLE_TIMEOUT_MS		2000
> -#define BAUDRATE_SETTLE_TIMEOUT_MS	300
> -#define POWER_PULSE_TRANS_TIMEOUT_MS	100
> +#define CMD_TRANS_TIMEOUT_MS		100
>  
>  /* susclk rate */
>  #define SUSCLK_RATE_32KHZ	32768
> @@ -964,6 +963,7 @@ 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 qca_serdev *qcadev;
>  	struct sk_buff *skb;
>  	u8 cmd[] = { 0x01, 0x48, 0xFC, 0x01, 0x00 };
>  
> @@ -985,11 +985,25 @@ static int qca_set_baudrate(struct hci_dev *hdev, uint8_t baudrate)
>  	skb_queue_tail(&qca->txq, skb);
>  	hci_uart_tx_wakeup(hu);
>  
> -	/* wait 300ms to change new baudrate on controller side
> -	 * controller will come back after they receive this HCI command
> -	 * then host can communicate with new baudrate to controller
> +	qcadev = serdev_device_get_drvdata(hu->serdev);
> +
> +	/* Wait for the baudrate change command to be sent and
> +	 * processed by the controller.
>  	 */
> -	msleep(BAUDRATE_SETTLE_TIMEOUT_MS);
> +	if (qcadev->btsoc_type == QCA_WCN3990) {
> +		while (!skb_queue_empty(&qca->txq))
> +			usleep_range(100, 200);
> +
> +		serdev_device_wait_until_sent(hu->serdev,
> +			      msecs_to_jiffies(CMD_TRANS_TIMEOUT_MS));

note: the above could also be in the common path, personally I don't
have a strong preference.

> +
> +		/* Make sure there is enough time for the BT
> +		 * controller to process the baudrate change
> +		*/
> +		msleep(10);
> +	} else {
> +		msleep(300);

I wonder if the non-wcn3990 delay could be reduced too, 300ms seems an
eternity, however I don't have hardware to validate such a change.

That raises a question: how many different chips are actually
supported by this driver? In earlier reviews we were frequently
talking about the ROME family and I assumed it must be a larger
number, however there are only compatible strings for the qca6174 and
the wcn3990. If there is only one other controller (or a low number
of very similar ones that use the same compatible string?) maybe
Qualcomm could help with testing?

Thanks

Matthias

  reply	other threads:[~2019-02-26 20:20 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-02-26 20:08 [PATCH 0/2] Reduce delay after sending baudrate request for WCN3990 Matthias Kaehlcke
2019-02-26 20:08 ` [PATCH 1/2] hci_qca: Use msleep() instead of open coding it Matthias Kaehlcke
2019-02-26 20:08 ` [PATCH 2/2] hci_qca: Reduce delay after sending baudrate request for WCN3990 Matthias Kaehlcke
2019-02-26 20:20   ` Matthias Kaehlcke [this message]
2019-02-27  7:48 ` [PATCH 0/2] " Marcel Holtmann
2019-02-27 20:35   ` Matthias Kaehlcke

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190226202006.GA155681@google.com \
    --to=mka@chromium.org \
    --cc=bgodavar@codeaurora.org \
    --cc=hemantg@codeaurora.org \
    --cc=johan.hedberg@gmail.com \
    --cc=linux-bluetooth@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=marcel@holtmann.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.