mbox series

[v3,0/5] Enable Bluetooth functinality for WCN6750

Message ID 1620322392-27148-1-git-send-email-gubbaven@codeaurora.org
Headers show
Series Enable Bluetooth functinality for WCN6750 | expand

Message

Venkata Lakshmi Narayana Gubba May 6, 2021, 5:33 p.m. UTC
These patches enables Bluetooth functinalties for new Qualcomm
Bluetooth SoC wcn6750.

Venkata Lakshmi Narayana Gubba (5):
  Bluetooth: hci_qca: Add support for QTI Bluetooth chip wcn6750
  Bluetooth: btqca: Add support for firmware image with mbn type for
    WCN6750
  Bluetooth: btqca: Moved extracting rom version info to common place
  dt-bindings: net: bluetooth: Convert Qualcomm BT binding to DT schema
  dt-bindings: net: bluetooth: Add device tree bindings for QTI chip
    wcn6750

 .../devicetree/bindings/net/qualcomm-bluetooth.txt |  69 --------
 .../bindings/net/qualcomm-bluetooth.yaml           | 182 +++++++++++++++++++++
 drivers/bluetooth/btqca.c                          |  91 ++++++++---
 drivers/bluetooth/btqca.h                          |  14 +-
 drivers/bluetooth/hci_qca.c                        | 114 ++++++++++---
 5 files changed, 354 insertions(+), 116 deletions(-)
 delete mode 100644 Documentation/devicetree/bindings/net/qualcomm-bluetooth.txt
 create mode 100644 Documentation/devicetree/bindings/net/qualcomm-bluetooth.yaml

Comments

Rob Herring May 7, 2021, 1:17 a.m. UTC | #1
On Thu, May 06, 2021 at 11:03:11PM +0530, Venkata Lakshmi Narayana Gubba wrote:
> Converted Qualcomm Bluetooth binidings to DT schema.
> 
> Signed-off-by: Venkata Lakshmi Narayana Gubba <gubbaven@codeaurora.org>
> ---
>  .../devicetree/bindings/net/qualcomm-bluetooth.txt |  69 -------------
>  .../bindings/net/qualcomm-bluetooth.yaml           | 111 +++++++++++++++++++++
>  2 files changed, 111 insertions(+), 69 deletions(-)
>  delete mode 100644 Documentation/devicetree/bindings/net/qualcomm-bluetooth.txt
>  create mode 100644 Documentation/devicetree/bindings/net/qualcomm-bluetooth.yaml


> diff --git a/Documentation/devicetree/bindings/net/qualcomm-bluetooth.yaml b/Documentation/devicetree/bindings/net/qualcomm-bluetooth.yaml
> new file mode 100644
> index 0000000..3f3ec4d
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/net/qualcomm-bluetooth.yaml
> @@ -0,0 +1,111 @@
> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/net/qualcomm-bluetooth.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Qualcomm Bluetooth Chips
> +
> +maintainers:
> +  - Marcel Holtmann <marcel@holtmann.org>

This should be someone who cares about Qcom BT.

Otherwise,

Reviewed-by: Rob Herring <robh@kernel.org>

> +
> +description:
> +  This binding describes Qualcomm UART-attached bluetooth chips.
> +
> +properties:
> +  compatible:
> +    enum:
> +      - qcom,qca6174-bt
> +      - qcom,qca9377-bt
> +      - qcom,wcn3990-bt
> +      - qcom,wcn3991-bt
> +      - qcom,wcn3998-bt
> +      - qcom,qca6390-bt
> +
> +  enable-gpios:
> +    maxItems: 1
> +    description: gpio specifier used to enable chip
> +
> +  clocks:
> +    maxItems: 1
> +    description: clock provided to the controller (SUSCLK_32KHZ)
> +
> +  vddio-supply:
> +    description: VDD_IO supply regulator handle
> +
> +  vddxo-supply:
> +    description: VDD_XO supply regulator handle
> +
> +  vddrf-supply:
> +    description: VDD_RF supply regulator handle
> +
> +  vddch0-supply:
> +    description: VDD_CH0 supply regulator handle
> +
> +  max-speed:
> +    description: see Documentation/devicetree/bindings/serial/serial.yaml
> +
> +  firmware-name:
> +    description: specify the name of nvm firmware to load
> +
> +  local-bd-address:
> +    description: see Documentation/devicetree/bindings/net/bluetooth.txt
> +
> +
> +required:
> +  - compatible
> +
> +additionalProperties: false
> +
> +allOf:
> +  - if:
> +      properties:
> +        compatible:
> +          contains:
> +            enum:
> +              - qcom,qca6174-bt
> +    then:
> +      required:
> +        - enable-gpios
> +        - clocks
> +
> +  - if:
> +      properties:
> +        compatible:
> +          contains:
> +            enum:
> +              - qcom,wcn3990-bt
> +              - qcom,wcn3991-bt
> +              - qcom,wcn3998-bt
> +    then:
> +      required:
> +        - vddio-supply
> +        - vddxo-supply
> +        - vddrf-supply
> +        - vddch0-supply
> +
> +examples:
> +  - |
> +    #include <dt-bindings/gpio/gpio.h>
> +    serial {
> +
> +        bluetooth {
> +            compatible = "qcom,qca6174-bt";
> +            enable-gpios = <&pm8994_gpios 19 GPIO_ACTIVE_HIGH>;
> +            clocks = <&divclk4>;
> +            firmware-name = "nvm_00440302.bin";
> +        };
> +    };
> +  - |
> +    serial {
> +
> +        bluetooth {
> +            compatible = "qcom,wcn3990-bt";
> +            vddio-supply = <&vreg_s4a_1p8>;
> +            vddxo-supply = <&vreg_l7a_1p8>;
> +            vddrf-supply = <&vreg_l17a_1p3>;
> +            vddch0-supply = <&vreg_l25a_3p3>;
> +            max-speed = <3200000>;
> +            firmware-name = "crnv21.bin";
> +        };
> +    };
> -- 
> QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member 
> of Code Aurora Forum, hosted by The Linux Foundation
>
Marcel Holtmann May 7, 2021, 6:55 a.m. UTC | #2
Hi Venkata,

>> Converted Qualcomm Bluetooth binidings to DT schema.
>> 
>> Signed-off-by: Venkata Lakshmi Narayana Gubba <gubbaven@codeaurora.org>
>> ---
>> .../devicetree/bindings/net/qualcomm-bluetooth.txt |  69 -------------
>> .../bindings/net/qualcomm-bluetooth.yaml           | 111 +++++++++++++++++++++
>> 2 files changed, 111 insertions(+), 69 deletions(-)
>> delete mode 100644 Documentation/devicetree/bindings/net/qualcomm-bluetooth.txt
>> create mode 100644 Documentation/devicetree/bindings/net/qualcomm-bluetooth.yaml
> 
> 
>> diff --git a/Documentation/devicetree/bindings/net/qualcomm-bluetooth.yaml b/Documentation/devicetree/bindings/net/qualcomm-bluetooth.yaml
>> new file mode 100644
>> index 0000000..3f3ec4d
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/net/qualcomm-bluetooth.yaml
>> @@ -0,0 +1,111 @@
>> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
>> +%YAML 1.2
>> +---
>> +$id: http://devicetree.org/schemas/net/qualcomm-bluetooth.yaml#
>> +$schema: http://devicetree.org/meta-schemas/core.yaml#
>> +
>> +title: Qualcomm Bluetooth Chips
>> +
>> +maintainers:
>> +  - Marcel Holtmann <marcel@holtmann.org>
> 
> This should be someone who cares about Qcom BT.

yes, please, assign this to someone that knows the hardware.

Rob, can we leave this out for now if there is no dedicated person?

Regards

Marcel
Marcel Holtmann May 7, 2021, 7 a.m. UTC | #3
Hi Venkata,

> 1. Added support to download firmware image with mbn type for wcn6750
>   as it supports mbn type image.
> 2. If mbn type image is not present then check for tlv type image.
> 3. Added debug logs for mbn type image.
> 
> Signed-off-by: Venkata Lakshmi Narayana Gubba <gubbaven@codeaurora.org>
> ---
> drivers/bluetooth/btqca.c | 69 +++++++++++++++++++++++++++++++++++------------
> drivers/bluetooth/btqca.h |  3 ++-
> 2 files changed, 54 insertions(+), 18 deletions(-)
> 
> diff --git a/drivers/bluetooth/btqca.c b/drivers/bluetooth/btqca.c
> index fce808c..320c555 100644
> --- a/drivers/bluetooth/btqca.c
> +++ b/drivers/bluetooth/btqca.c
> @@ -182,7 +182,8 @@ int qca_send_pre_shutdown_cmd(struct hci_dev *hdev)
> }
> EXPORT_SYMBOL_GPL(qca_send_pre_shutdown_cmd);
> 
> -static void qca_tlv_check_data(struct qca_fw_config *config,
> +static void qca_tlv_check_data(struct hci_dev *hdev,
> +			       struct qca_fw_config *config,
> 		const struct firmware *fw, enum qca_btsoc_type soc_type)
> {
> 	const u8 *data;
> @@ -194,19 +195,21 @@ static void qca_tlv_check_data(struct qca_fw_config *config,
> 	struct tlv_type_nvm *tlv_nvm;
> 	uint8_t nvm_baud_rate = config->user_baud_rate;
> 
> -	tlv = (struct tlv_type_hdr *)fw->data;
> -
> -	type_len = le32_to_cpu(tlv->type_len);
> -	length = (type_len >> 8) & 0x00ffffff;
> -
> -	BT_DBG("TLV Type\t\t : 0x%x", type_len & 0x000000ff);
> -	BT_DBG("Length\t\t : %d bytes", length);
> -
> 	config->dnld_mode = QCA_SKIP_EVT_NONE;
> 	config->dnld_type = QCA_SKIP_EVT_NONE;
> 
> 	switch (config->type) {
> +	case ELF_TYPE_PATCH:
> +		config->dnld_mode = QCA_SKIP_EVT_VSE_CC;
> +		config->dnld_type = QCA_SKIP_EVT_VSE_CC;
> +
> +		bt_dev_dbg(hdev, "File Class        : 0x%x", fw->data[4]);
> +		bt_dev_dbg(hdev, "Data Encoding     : 0x%x", fw->data[5]);
> +		bt_dev_dbg(hdev, "File version      : 0x%x", fw->data[6]);
> +		break;
> 	case TLV_TYPE_PATCH:
> +		tlv = (struct tlv_type_hdr *)fw->data;

Is this casting always necessary.

> +		type_len = le32_to_cpu(tlv->type_len);
> 		tlv_patch = (struct tlv_type_patch *)tlv->data;
> 
> 		/* For Rome version 1.1 to 3.1, all segment commands
> @@ -218,6 +221,7 @@ static void qca_tlv_check_data(struct qca_fw_config *config,
> 		config->dnld_mode = tlv_patch->download_mode;
> 		config->dnld_type = config->dnld_mode;
> 
> +		BT_DBG("TLV Type\t\t : 0x%x", type_len & 0x000000ff);
> 		BT_DBG("Total Length           : %d bytes",
> 		       le32_to_cpu(tlv_patch->total_size));
> 		BT_DBG("Patch Data Length      : %d bytes",
> @@ -243,6 +247,14 @@ static void qca_tlv_check_data(struct qca_fw_config *config,
> 		break;
> 
> 	case TLV_TYPE_NVM:
> +		tlv = (struct tlv_type_hdr *)fw->data;
> +
> +		type_len = le32_to_cpu(tlv->type_len);
> +		length = (type_len >> 8) & 0x00ffffff;
> +
> +		BT_DBG("TLV Type\t\t : 0x%x", type_len & 0x000000ff);
> +		BT_DBG("Length\t\t : %d bytes", length);
> +
> 		idx = 0;
> 		data = tlv->data;
> 		while (idx < length) {
> @@ -387,7 +399,8 @@ static int qca_inject_cmd_complete_event(struct hci_dev *hdev)
> 
> static int qca_download_firmware(struct hci_dev *hdev,
> 				 struct qca_fw_config *config,
> -				 enum qca_btsoc_type soc_type)
> +				 enum qca_btsoc_type soc_type,
> +				 u8 rom_ver)
> {
> 	const struct firmware *fw;
> 	const u8 *segment;
> @@ -397,12 +410,30 @@ static int qca_download_firmware(struct hci_dev *hdev,
> 
> 	ret = request_firmware(&fw, config->fwname, &hdev->dev);
> 	if (ret) {
> -		bt_dev_err(hdev, "QCA Failed to request file: %s (%d)",
> -			   config->fwname, ret);
> -		return ret;
> +		/* For WCN6750, if mbn file is not present then check for
> +		 * tlv file.
> +		 */
> +		if (soc_type == QCA_WCN6750 && config->type == ELF_TYPE_PATCH) {
> +			bt_dev_dbg(hdev, "QCA Failed to request file: %s (%d)",
> +				   config->fwname, ret);
> +			config->type = TLV_TYPE_PATCH;
> +			snprintf(config->fwname, sizeof(config->fwname),
> +				 "qca/msbtfw%02x.tlv", rom_ver);
> +			bt_dev_info(hdev, "QCA Downloading %s", config->fwname);
> +			ret = request_firmware(&fw, config->fwname, &hdev->dev);
> +			if (ret) {
> +				bt_dev_err(hdev, "QCA Failed to request file: %s (%d)",
> +					   config->fwname, ret);
> +				return ret;
> +			}
> +		} else {
> +			bt_dev_err(hdev, "QCA Failed to request file: %s (%d)",
> +				   config->fwname, ret);
> +			return ret;
> +		}
> 	}
> 
> -	qca_tlv_check_data(config, fw, soc_type);
> +	qca_tlv_check_data(hdev, config, fw, soc_type);
> 
> 	segment = fw->data;
> 	remain = fw->size;
> @@ -520,14 +551,18 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
> 	} else if (soc_type == QCA_WCN6750) {
> 		rom_ver = ((soc_ver & 0x00000f00) >> 0x04) |
> 			    (soc_ver & 0x0000000f);
> +		/* Choose mbn file by default.If mbn file is not found
> +		 * then choose tlv file
> +		 */
> +		config.type = ELF_TYPE_PATCH;
> 		snprintf(config.fwname, sizeof(config.fwname),
> -			 "qca/msbtfw%02x.tlv", rom_ver);
> +			 "qca/msbtfw%02x.mbn", rom_ver);
> 	} else {
> 		snprintf(config.fwname, sizeof(config.fwname),
> 			 "qca/rampatch_%08x.bin", soc_ver);
> 	}
> 
> -	err = qca_download_firmware(hdev, &config, soc_type);
> +	err = qca_download_firmware(hdev, &config, soc_type, rom_ver);
> 	if (err < 0) {
> 		bt_dev_err(hdev, "QCA Failed to download patch (%d)", err);
> 		return err;
> @@ -560,7 +595,7 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
> 		snprintf(config.fwname, sizeof(config.fwname),
> 			 "qca/nvm_%08x.bin", soc_ver);
> 
> -	err = qca_download_firmware(hdev, &config, soc_type);
> +	err = qca_download_firmware(hdev, &config, soc_type, rom_ver);
> 	if (err < 0) {
> 		bt_dev_err(hdev, "QCA Failed to download NVM (%d)", err);
> 		return err;
> diff --git a/drivers/bluetooth/btqca.h b/drivers/bluetooth/btqca.h
> index dd82d2c..5a5e699 100644
> --- a/drivers/bluetooth/btqca.h
> +++ b/drivers/bluetooth/btqca.h
> @@ -80,7 +80,8 @@ enum qca_tlv_dnld_mode {
> 
> enum qca_tlv_type {
> 	TLV_TYPE_PATCH = 1,
> -	TLV_TYPE_NVM
> +	TLV_TYPE_NVM,
> +	ELF_TYPE_PATCH
> };

If you end the enum in a , then future diffs only show a single line of addition. So please ELF_TYPE_PATCH,.

Regards

Marcel
Rob Herring May 7, 2021, 5:19 p.m. UTC | #4
On Fri, May 7, 2021 at 1:55 AM Marcel Holtmann <marcel@holtmann.org> wrote:
>

> Hi Venkata,

>

> >> Converted Qualcomm Bluetooth binidings to DT schema.

> >>

> >> Signed-off-by: Venkata Lakshmi Narayana Gubba <gubbaven@codeaurora.org>

> >> ---

> >> .../devicetree/bindings/net/qualcomm-bluetooth.txt |  69 -------------

> >> .../bindings/net/qualcomm-bluetooth.yaml           | 111 +++++++++++++++++++++

> >> 2 files changed, 111 insertions(+), 69 deletions(-)

> >> delete mode 100644 Documentation/devicetree/bindings/net/qualcomm-bluetooth.txt

> >> create mode 100644 Documentation/devicetree/bindings/net/qualcomm-bluetooth.yaml

> >

> >

> >> diff --git a/Documentation/devicetree/bindings/net/qualcomm-bluetooth.yaml b/Documentation/devicetree/bindings/net/qualcomm-bluetooth.yaml

> >> new file mode 100644

> >> index 0000000..3f3ec4d

> >> --- /dev/null

> >> +++ b/Documentation/devicetree/bindings/net/qualcomm-bluetooth.yaml

> >> @@ -0,0 +1,111 @@

> >> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)

> >> +%YAML 1.2

> >> +---

> >> +$id: http://devicetree.org/schemas/net/qualcomm-bluetooth.yaml#

> >> +$schema: http://devicetree.org/meta-schemas/core.yaml#

> >> +

> >> +title: Qualcomm Bluetooth Chips

> >> +

> >> +maintainers:

> >> +  - Marcel Holtmann <marcel@holtmann.org>

> >

> > This should be someone who cares about Qcom BT.

>

> yes, please, assign this to someone that knows the hardware.

>

> Rob, can we leave this out for now if there is no dedicated person?


No, it's required. It can be me if it comes to that. However, if no
one can be bothered to step up, then we should just remove it perhaps.
QCom is a big company, I'm sure they can find some name.

Rob
Venkata Lakshmi Narayana Gubba May 10, 2021, 5:16 p.m. UTC | #5
Hi Marcel,
On 2021-05-07 12:30, Marcel Holtmann wrote:
> Hi Venkata,

> 

>> 1. Added support to download firmware image with mbn type for wcn6750

>>   as it supports mbn type image.

>> 2. If mbn type image is not present then check for tlv type image.

>> 3. Added debug logs for mbn type image.

>> 

>> Signed-off-by: Venkata Lakshmi Narayana Gubba 

>> <gubbaven@codeaurora.org>

>> ---

>> drivers/bluetooth/btqca.c | 69 

>> +++++++++++++++++++++++++++++++++++------------

>> drivers/bluetooth/btqca.h |  3 ++-

>> 2 files changed, 54 insertions(+), 18 deletions(-)

>> 

>> diff --git a/drivers/bluetooth/btqca.c b/drivers/bluetooth/btqca.c

>> index fce808c..320c555 100644

>> --- a/drivers/bluetooth/btqca.c

>> +++ b/drivers/bluetooth/btqca.c

>> @@ -182,7 +182,8 @@ int qca_send_pre_shutdown_cmd(struct hci_dev 

>> *hdev)

>> }

>> EXPORT_SYMBOL_GPL(qca_send_pre_shutdown_cmd);

>> 

>> -static void qca_tlv_check_data(struct qca_fw_config *config,

>> +static void qca_tlv_check_data(struct hci_dev *hdev,

>> +			       struct qca_fw_config *config,

>> 		const struct firmware *fw, enum qca_btsoc_type soc_type)

>> {

>> 	const u8 *data;

>> @@ -194,19 +195,21 @@ static void qca_tlv_check_data(struct 

>> qca_fw_config *config,

>> 	struct tlv_type_nvm *tlv_nvm;

>> 	uint8_t nvm_baud_rate = config->user_baud_rate;

>> 

>> -	tlv = (struct tlv_type_hdr *)fw->data;

>> -

>> -	type_len = le32_to_cpu(tlv->type_len);

>> -	length = (type_len >> 8) & 0x00ffffff;

>> -

>> -	BT_DBG("TLV Type\t\t : 0x%x", type_len & 0x000000ff);

>> -	BT_DBG("Length\t\t : %d bytes", length);

>> -

>> 	config->dnld_mode = QCA_SKIP_EVT_NONE;

>> 	config->dnld_type = QCA_SKIP_EVT_NONE;

>> 

>> 	switch (config->type) {

>> +	case ELF_TYPE_PATCH:

>> +		config->dnld_mode = QCA_SKIP_EVT_VSE_CC;

>> +		config->dnld_type = QCA_SKIP_EVT_VSE_CC;

>> +

>> +		bt_dev_dbg(hdev, "File Class        : 0x%x", fw->data[4]);

>> +		bt_dev_dbg(hdev, "Data Encoding     : 0x%x", fw->data[5]);

>> +		bt_dev_dbg(hdev, "File version      : 0x%x", fw->data[6]);

>> +		break;

>> 	case TLV_TYPE_PATCH:

>> +		tlv = (struct tlv_type_hdr *)fw->data;

> 

> Is this casting always necessary.

> 

[Venkata]:
I see that this casting is required.
>> +		type_len = le32_to_cpu(tlv->type_len);

>> 		tlv_patch = (struct tlv_type_patch *)tlv->data;

>> 

>> 		/* For Rome version 1.1 to 3.1, all segment commands

>> @@ -218,6 +221,7 @@ static void qca_tlv_check_data(struct 

>> qca_fw_config *config,

>> 		config->dnld_mode = tlv_patch->download_mode;

>> 		config->dnld_type = config->dnld_mode;

>> 

>> +		BT_DBG("TLV Type\t\t : 0x%x", type_len & 0x000000ff);

>> 		BT_DBG("Total Length           : %d bytes",

>> 		       le32_to_cpu(tlv_patch->total_size));

>> 		BT_DBG("Patch Data Length      : %d bytes",

>> @@ -243,6 +247,14 @@ static void qca_tlv_check_data(struct 

>> qca_fw_config *config,

>> 		break;

>> 

>> 	case TLV_TYPE_NVM:

>> +		tlv = (struct tlv_type_hdr *)fw->data;

>> +

>> +		type_len = le32_to_cpu(tlv->type_len);

>> +		length = (type_len >> 8) & 0x00ffffff;

>> +

>> +		BT_DBG("TLV Type\t\t : 0x%x", type_len & 0x000000ff);

>> +		BT_DBG("Length\t\t : %d bytes", length);

>> +

>> 		idx = 0;

>> 		data = tlv->data;

>> 		while (idx < length) {

>> @@ -387,7 +399,8 @@ static int qca_inject_cmd_complete_event(struct 

>> hci_dev *hdev)

>> 

>> static int qca_download_firmware(struct hci_dev *hdev,

>> 				 struct qca_fw_config *config,

>> -				 enum qca_btsoc_type soc_type)

>> +				 enum qca_btsoc_type soc_type,

>> +				 u8 rom_ver)

>> {

>> 	const struct firmware *fw;

>> 	const u8 *segment;

>> @@ -397,12 +410,30 @@ static int qca_download_firmware(struct hci_dev 

>> *hdev,

>> 

>> 	ret = request_firmware(&fw, config->fwname, &hdev->dev);

>> 	if (ret) {

>> -		bt_dev_err(hdev, "QCA Failed to request file: %s (%d)",

>> -			   config->fwname, ret);

>> -		return ret;

>> +		/* For WCN6750, if mbn file is not present then check for

>> +		 * tlv file.

>> +		 */

>> +		if (soc_type == QCA_WCN6750 && config->type == ELF_TYPE_PATCH) {

>> +			bt_dev_dbg(hdev, "QCA Failed to request file: %s (%d)",

>> +				   config->fwname, ret);

>> +			config->type = TLV_TYPE_PATCH;

>> +			snprintf(config->fwname, sizeof(config->fwname),

>> +				 "qca/msbtfw%02x.tlv", rom_ver);

>> +			bt_dev_info(hdev, "QCA Downloading %s", config->fwname);

>> +			ret = request_firmware(&fw, config->fwname, &hdev->dev);

>> +			if (ret) {

>> +				bt_dev_err(hdev, "QCA Failed to request file: %s (%d)",

>> +					   config->fwname, ret);

>> +				return ret;

>> +			}

>> +		} else {

>> +			bt_dev_err(hdev, "QCA Failed to request file: %s (%d)",

>> +				   config->fwname, ret);

>> +			return ret;

>> +		}

>> 	}

>> 

>> -	qca_tlv_check_data(config, fw, soc_type);

>> +	qca_tlv_check_data(hdev, config, fw, soc_type);

>> 

>> 	segment = fw->data;

>> 	remain = fw->size;

>> @@ -520,14 +551,18 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t 

>> baudrate,

>> 	} else if (soc_type == QCA_WCN6750) {

>> 		rom_ver = ((soc_ver & 0x00000f00) >> 0x04) |

>> 			    (soc_ver & 0x0000000f);

>> +		/* Choose mbn file by default.If mbn file is not found

>> +		 * then choose tlv file

>> +		 */

>> +		config.type = ELF_TYPE_PATCH;

>> 		snprintf(config.fwname, sizeof(config.fwname),

>> -			 "qca/msbtfw%02x.tlv", rom_ver);

>> +			 "qca/msbtfw%02x.mbn", rom_ver);

>> 	} else {

>> 		snprintf(config.fwname, sizeof(config.fwname),

>> 			 "qca/rampatch_%08x.bin", soc_ver);

>> 	}

>> 

>> -	err = qca_download_firmware(hdev, &config, soc_type);

>> +	err = qca_download_firmware(hdev, &config, soc_type, rom_ver);

>> 	if (err < 0) {

>> 		bt_dev_err(hdev, "QCA Failed to download patch (%d)", err);

>> 		return err;

>> @@ -560,7 +595,7 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t 

>> baudrate,

>> 		snprintf(config.fwname, sizeof(config.fwname),

>> 			 "qca/nvm_%08x.bin", soc_ver);

>> 

>> -	err = qca_download_firmware(hdev, &config, soc_type);

>> +	err = qca_download_firmware(hdev, &config, soc_type, rom_ver);

>> 	if (err < 0) {

>> 		bt_dev_err(hdev, "QCA Failed to download NVM (%d)", err);

>> 		return err;

>> diff --git a/drivers/bluetooth/btqca.h b/drivers/bluetooth/btqca.h

>> index dd82d2c..5a5e699 100644

>> --- a/drivers/bluetooth/btqca.h

>> +++ b/drivers/bluetooth/btqca.h

>> @@ -80,7 +80,8 @@ enum qca_tlv_dnld_mode {

>> 

>> enum qca_tlv_type {

>> 	TLV_TYPE_PATCH = 1,

>> -	TLV_TYPE_NVM

>> +	TLV_TYPE_NVM,

>> +	ELF_TYPE_PATCH

>> };

> 

> If you end the enum in a , then future diffs only show a single line

> of addition. So please ELF_TYPE_PATCH,.

> 

[Venkata]:
Sure, I will update in next patchset.
> Regards

> 

> Marcel

Regards,
Lakshmi Narayana.
Marcel Holtmann May 13, 2021, 3:21 p.m. UTC | #6
Hi Rob,

>>>> Converted Qualcomm Bluetooth binidings to DT schema.

>>>> 

>>>> Signed-off-by: Venkata Lakshmi Narayana Gubba <gubbaven@codeaurora.org>

>>>> ---

>>>> .../devicetree/bindings/net/qualcomm-bluetooth.txt |  69 -------------

>>>> .../bindings/net/qualcomm-bluetooth.yaml           | 111 +++++++++++++++++++++

>>>> 2 files changed, 111 insertions(+), 69 deletions(-)

>>>> delete mode 100644 Documentation/devicetree/bindings/net/qualcomm-bluetooth.txt

>>>> create mode 100644 Documentation/devicetree/bindings/net/qualcomm-bluetooth.yaml

>>> 

>>> 

>>>> diff --git a/Documentation/devicetree/bindings/net/qualcomm-bluetooth.yaml b/Documentation/devicetree/bindings/net/qualcomm-bluetooth.yaml

>>>> new file mode 100644

>>>> index 0000000..3f3ec4d

>>>> --- /dev/null

>>>> +++ b/Documentation/devicetree/bindings/net/qualcomm-bluetooth.yaml

>>>> @@ -0,0 +1,111 @@

>>>> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)

>>>> +%YAML 1.2

>>>> +---

>>>> +$id: http://devicetree.org/schemas/net/qualcomm-bluetooth.yaml#

>>>> +$schema: http://devicetree.org/meta-schemas/core.yaml#

>>>> +

>>>> +title: Qualcomm Bluetooth Chips

>>>> +

>>>> +maintainers:

>>>> +  - Marcel Holtmann <marcel@holtmann.org>

>>> 

>>> This should be someone who cares about Qcom BT.

>> 

>> yes, please, assign this to someone that knows the hardware.

>> 

>> Rob, can we leave this out for now if there is no dedicated person?

> 

> No, it's required. It can be me if it comes to that. However, if no

> one can be bothered to step up, then we should just remove it perhaps.

> QCom is a big company, I'm sure they can find some name.


I hope so as well since my name is clearly the wrong one there. I have too little knowledge about that hardware and the platforms it is used in.

Regards

Marcel
Venkata Lakshmi Narayana Gubba May 18, 2021, 4:30 p.m. UTC | #7
Hi Marcel and Rob,

On 2021-05-13 20:51, Marcel Holtmann wrote:
> Hi Rob,
> 
>>>>> Converted Qualcomm Bluetooth binidings to DT schema.
>>>>> 
>>>>> Signed-off-by: Venkata Lakshmi Narayana Gubba 
>>>>> <gubbaven@codeaurora.org>
>>>>> ---
>>>>> .../devicetree/bindings/net/qualcomm-bluetooth.txt |  69 
>>>>> -------------
>>>>> .../bindings/net/qualcomm-bluetooth.yaml           | 111 
>>>>> +++++++++++++++++++++
>>>>> 2 files changed, 111 insertions(+), 69 deletions(-)
>>>>> delete mode 100644 
>>>>> Documentation/devicetree/bindings/net/qualcomm-bluetooth.txt
>>>>> create mode 100644 
>>>>> Documentation/devicetree/bindings/net/qualcomm-bluetooth.yaml
>>>> 
>>>> 
>>>>> diff --git 
>>>>> a/Documentation/devicetree/bindings/net/qualcomm-bluetooth.yaml 
>>>>> b/Documentation/devicetree/bindings/net/qualcomm-bluetooth.yaml
>>>>> new file mode 100644
>>>>> index 0000000..3f3ec4d
>>>>> --- /dev/null
>>>>> +++ b/Documentation/devicetree/bindings/net/qualcomm-bluetooth.yaml
>>>>> @@ -0,0 +1,111 @@
>>>>> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
>>>>> +%YAML 1.2
>>>>> +---
>>>>> +$id: http://devicetree.org/schemas/net/qualcomm-bluetooth.yaml#
>>>>> +$schema: http://devicetree.org/meta-schemas/core.yaml#
>>>>> +
>>>>> +title: Qualcomm Bluetooth Chips
>>>>> +
>>>>> +maintainers:
>>>>> +  - Marcel Holtmann <marcel@holtmann.org>
>>>> 
>>>> This should be someone who cares about Qcom BT.
>>> 
>>> yes, please, assign this to someone that knows the hardware.
>>> 
>>> Rob, can we leave this out for now if there is no dedicated person?
>> 
>> No, it's required. It can be me if it comes to that. However, if no
>> one can be bothered to step up, then we should just remove it perhaps.
>> QCom is a big company, I'm sure they can find some name.
> 
> I hope so as well since my name is clearly the wrong one there. I have
> too little knowledge about that hardware and the platforms it is used
> in.
> 
[Venkata]:
I will update maintainers names in next patchset.
> Regards
> 
> Marcel

Regards,
Venkata.