From patchwork Sun May 12 03:19:08 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rocky Liao X-Patchwork-Id: 10939847 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 31EFB76 for ; Sun, 12 May 2019 03:19:24 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1604521BED for ; Sun, 12 May 2019 03:19:24 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 07AD926242; Sun, 12 May 2019 03:19:24 +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 D3B3021BED for ; Sun, 12 May 2019 03:19:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726130AbfELDTV (ORCPT ); Sat, 11 May 2019 23:19:21 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:34212 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726104AbfELDTV (ORCPT ); Sat, 11 May 2019 23:19:21 -0400 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id B5D42607F4; Sun, 12 May 2019 03:19:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1557631159; bh=tmxQEOmvJjM/nDGQA1d/g0tOTi6yMATlFhpV/M7iJQM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=MR+xIRek1S7KfeZA+ImdPQ629yFO+iZisUQYGP7ax3JtGUuOhS1CdBcQi4Mn+71wN fbAfsOl+V7bC8otTmoke9Sqq8Bk+rUpDFCXblHH50bBPvk2hyYXdCU3edqhbGTi6yJ c+lsvNjacDcPPhU4KDPp+dntPG+FaP8bj/RvcWrc= Received: from rocky-HP-EliteBook-8460p.wlan.qualcomm.com (tpe-colo-wan-fw-bordernet.qualcomm.com [103.229.16.4]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: rjliao@codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id A491660736; Sun, 12 May 2019 03:19:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1557631158; bh=tmxQEOmvJjM/nDGQA1d/g0tOTi6yMATlFhpV/M7iJQM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=cEFxp6cDs1ARsBipgTpo02NfFxz49PrTLx6raTzrRUsxMK1wncp2vyrEv+Ky+XvOU Sgx4rCjoxJfO8BsRa2EgvY9X/d1X6wevd/2lmZErctBfjMeI9DmpUQfzK+gJ98g+iv RNrygS7EfUr7N+kPDf5Q+znkjUWGhIzpW+1h4/d4= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org A491660736 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=rjliao@codeaurora.org From: Rocky Liao To: robh+dt@kernel.org, mark.rutland@arm.com, marcel@holtmann.org, johan.hedberg@gmail.com, thierry.escande@linaro.org Cc: netdev@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-bluetooth@vger.kernel.org, linux-arm-msm@vger.kernel.org, bgodavar@codeaurora.org, Rocky Liao Subject: [PATCH v4 1/2] Bluetooth: hci_qca: Load customized NVM based on the device property Date: Sun, 12 May 2019 11:19:08 +0800 Message-Id: <1557631148-5120-1-git-send-email-rjliao@codeaurora.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1554888451-17518-1-git-send-email-rjliao@codeaurora.org> References: <1554888451-17518-1-git-send-email-rjliao@codeaurora.org> 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 QCA BTSOC NVM is a customized firmware file and different vendors may want to have different BTSOC configuration (e.g. Configure SCO over PCM or I2S, Setting Tx power, etc.) via this file. This patch will allow vendors to download different NVM firmware file by reading a device property "firmware-name". Signed-off-by: Rocky Liao --- Changes in v4: * rebased the code base and merge with latest code --- drivers/bluetooth/btqca.c | 14 ++++++++++---- drivers/bluetooth/btqca.h | 6 ++++-- drivers/bluetooth/hci_qca.c | 19 ++++++++++++++++++- 3 files changed, 32 insertions(+), 7 deletions(-) diff --git a/drivers/bluetooth/btqca.c b/drivers/bluetooth/btqca.c index cc12eec..0ea690a 100644 --- a/drivers/bluetooth/btqca.c +++ b/drivers/bluetooth/btqca.c @@ -332,7 +332,8 @@ int qca_set_bdaddr_rome(struct hci_dev *hdev, const bdaddr_t *bdaddr) EXPORT_SYMBOL_GPL(qca_set_bdaddr_rome); int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate, - enum qca_btsoc_type soc_type, u32 soc_ver) + enum qca_btsoc_type soc_type, u32 soc_ver, + const char *firmware_name) { struct rome_config config; int err; @@ -368,9 +369,14 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate, if (qca_is_wcn399x(soc_type)) snprintf(config.fwname, sizeof(config.fwname), "qca/crnv%02x.bin", rom_ver); - else - snprintf(config.fwname, sizeof(config.fwname), - "qca/nvm_%08x.bin", soc_ver); + else { + if (firmware_name) + snprintf(config.fwname, sizeof(config.fwname), + "qca/%s", firmware_name); + else + snprintf(config.fwname, sizeof(config.fwname), + "qca/nvm_%08x.bin", soc_ver); + } err = qca_download_firmware(hdev, &config); if (err < 0) { diff --git a/drivers/bluetooth/btqca.h b/drivers/bluetooth/btqca.h index 4c4fe2b..8c037bb 100644 --- a/drivers/bluetooth/btqca.h +++ b/drivers/bluetooth/btqca.h @@ -140,7 +140,8 @@ enum qca_btsoc_type { int qca_set_bdaddr_rome(struct hci_dev *hdev, const bdaddr_t *bdaddr); int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate, - enum qca_btsoc_type soc_type, u32 soc_ver); + enum qca_btsoc_type soc_type, u32 soc_ver, + const char *firmware_name); int qca_read_soc_version(struct hci_dev *hdev, u32 *soc_version); int qca_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr); static inline bool qca_is_wcn399x(enum qca_btsoc_type soc_type) @@ -155,7 +156,8 @@ static inline int qca_set_bdaddr_rome(struct hci_dev *hdev, const bdaddr_t *bdad } static inline int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate, - enum qca_btsoc_type soc_type, u32 soc_ver) + enum qca_btsoc_type soc_type, u32 soc_ver, + const char *firmware_name) { return -EOPNOTSUPP; } diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c index 57322c4..9590602 100644 --- a/drivers/bluetooth/hci_qca.c +++ b/drivers/bluetooth/hci_qca.c @@ -169,6 +169,7 @@ struct qca_serdev { struct qca_power *bt_power; u32 init_speed; u32 oper_speed; + const char *firmware_name; }; static int qca_power_setup(struct hci_uart *hu, bool on); @@ -190,6 +191,17 @@ static enum qca_btsoc_type qca_soc_type(struct hci_uart *hu) return soc_type; } +static const char *qca_get_firmware_name(struct hci_uart *hu) +{ + if (hu->serdev) { + struct qca_serdev *qsd = serdev_device_get_drvdata(hu->serdev); + + return qsd->firmware_name; + } else { + return NULL; + } +} + static void __serial_clock_on(struct tty_struct *tty) { /* TODO: Some chipset requires to enable UART clock on client @@ -1195,6 +1207,7 @@ static int qca_setup(struct hci_uart *hu) struct qca_data *qca = hu->priv; unsigned int speed, qca_baudrate = QCA_BAUDRATE_115200; enum qca_btsoc_type soc_type = qca_soc_type(hu); + const char *firmware_name = qca_get_firmware_name(hu); int ret; int soc_ver = 0; @@ -1245,7 +1258,8 @@ static int qca_setup(struct hci_uart *hu) bt_dev_info(hdev, "QCA controller version 0x%08x", soc_ver); /* Setup patch / NVM configurations */ - ret = qca_uart_setup(hdev, qca_baudrate, soc_type, soc_ver); + ret = qca_uart_setup(hdev, qca_baudrate, soc_type, soc_ver, + firmware_name); if (!ret) { set_bit(QCA_IBS_ENABLED, &qca->flags); qca_debugfs_init(hdev); @@ -1477,6 +1491,9 @@ static int qca_serdev_probe(struct serdev_device *serdev) return PTR_ERR(qcadev->bt_en); } + device_property_read_string(&serdev->dev, "firmware-name", + &qcadev->firmware_name); + qcadev->susclk = devm_clk_get(&serdev->dev, NULL); if (IS_ERR(qcadev->susclk)) { dev_err(&serdev->dev, "failed to acquire clk\n"); From patchwork Sun May 12 03:19:45 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rocky Liao X-Patchwork-Id: 10939849 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 6151D112C for ; Sun, 12 May 2019 03:20:00 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4DF8823201 for ; Sun, 12 May 2019 03:20:00 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 39B9626242; Sun, 12 May 2019 03:20:00 +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 DB58121BED for ; Sun, 12 May 2019 03:19:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726461AbfELDTw (ORCPT ); Sat, 11 May 2019 23:19:52 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:34434 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726104AbfELDTw (ORCPT ); Sat, 11 May 2019 23:19:52 -0400 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 52A816076C; Sun, 12 May 2019 03:19:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1557631191; bh=TeR6kCs8VrGftf636+9F8hCLPirBITpiLkVcR7XxvXM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=MrhPPpm5YA0G8IKXR06G3lxYMj90NMKADX9CIF+2xqSkTW4gBd7+xxlG1lJlkv5rJ vtqBT4EyGKAIARnDM3v9ItGPjpP5+EYxgxFsMTOGoVGnkQElK25DiTMuurGxs/SwjS KCSP4ygI3Me9+Vy+LWFukcN+5maIPlaz60Ufh0ho= Received: from rocky-HP-EliteBook-8460p.wlan.qualcomm.com (tpe-colo-wan-fw-bordernet.qualcomm.com [103.229.16.4]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: rjliao@codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 6106360769; Sun, 12 May 2019 03:19:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1557631190; bh=TeR6kCs8VrGftf636+9F8hCLPirBITpiLkVcR7XxvXM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=aGWySsKUOAIsFaN/ZgDX9Smvd5cO8OBBRkh+VXAmFTjN5ifasUnFMQR0USvIkuP3i Q25IvOXOjrUejjIryPzo1cRm8SRcli4dcr7bfL04FvJ9xzFF0o9tGoVSlvaWNgxN6Z c1jVuwPin8SHN7laXOlba3eEoD+7LCQqQ/jz8IyA= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 6106360769 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=rjliao@codeaurora.org From: Rocky Liao To: robh+dt@kernel.org, mark.rutland@arm.com, marcel@holtmann.org, johan.hedberg@gmail.com, thierry.escande@linaro.org Cc: netdev@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-bluetooth@vger.kernel.org, linux-arm-msm@vger.kernel.org, bgodavar@codeaurora.org, Rocky Liao Subject: [PATCH v4 2/2] dt-bindings: net: bluetooth: Add device property firmware-name for QCA6174 Date: Sun, 12 May 2019 11:19:45 +0800 Message-Id: <1557631185-5167-1-git-send-email-rjliao@codeaurora.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1554888476-17560-1-git-send-email-rjliao@codeaurora.org> References: <1554888476-17560-1-git-send-email-rjliao@codeaurora.org> 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 adds an optional device property "firmware-name" to allow the driver to load customized nvm firmware file based on this property. Signed-off-by: Rocky Liao Reviewed-by: Rob Herring --- Changes in v4: * rebased the code base and merge with latest code --- Documentation/devicetree/bindings/net/qualcomm-bluetooth.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Documentation/devicetree/bindings/net/qualcomm-bluetooth.txt b/Documentation/devicetree/bindings/net/qualcomm-bluetooth.txt index 7ef6118..7a3eda7 100644 --- a/Documentation/devicetree/bindings/net/qualcomm-bluetooth.txt +++ b/Documentation/devicetree/bindings/net/qualcomm-bluetooth.txt @@ -17,6 +17,7 @@ Optional properties for compatible string qcom,qca6174-bt: - enable-gpios: gpio specifier used to enable chip - clocks: clock provided to the controller (SUSCLK_32KHZ) + - firmware-name: specify the name of nvm firmware to load Required properties for compatible string qcom,wcn399x-bt: @@ -40,6 +41,7 @@ serial@7570000 { enable-gpios = <&pm8994_gpios 19 GPIO_ACTIVE_HIGH>; clocks = <&divclk4>; + firmware-name = "nvm_00440302.bin"; }; };