From: Tim Jiang <[email protected]>
we have different factory to produce wcn6855 soc chip, so we should
use different nvm file with suffix to distinguish them.
Signed-off-by: Tim Jiang <[email protected]>
---
drivers/bluetooth/btusb.c | 60 ++++++++++++++++++++++++++++++++++++++++-------
1 file changed, 51 insertions(+), 9 deletions(-)
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index b1a05bb9f4bf..d7b4e0f1c3e3 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -4013,6 +4013,9 @@ static int btusb_set_bdaddr_wcn6855(struct hci_dev *hdev,
#define QCA_DFU_TIMEOUT 3000
#define QCA_FLAG_MULTI_NVM 0x80
+#define WCN6855_2_0_RAM_VERSION_GF 0x400c1200
+#define WCN6855_2_1_RAM_VERSION_GF 0x400c1211
+
struct qca_version {
__le32 rom_version;
__le32 patch_version;
@@ -4044,6 +4047,7 @@ static const struct qca_device_info qca_devices_table[] = {
{ 0x00000302, 28, 4, 16 }, /* Rome 3.2 */
{ 0x00130100, 40, 4, 16 }, /* WCN6855 1.0 */
{ 0x00130200, 40, 4, 16 }, /* WCN6855 2.0 */
+ { 0x00130201, 40, 4, 16 }, /* WCN6855 2.1 */
};
static int btusb_qca_send_vendor_req(struct usb_device *udev, u8 request,
@@ -4198,6 +4202,39 @@ static int btusb_setup_qca_load_rampatch(struct hci_dev *hdev,
return err;
}
+static int btusb_setup_qca_form_nvm_name(char **fwname,
+ int max_size,
+ struct qca_version *ver,
+ char *factory)
+{
+ /* if boardid equal 0, use default nvm without suffix */
+ switch (le16_to_cpu(ver->board_id)) {
+ case 0x0:
+ /* we add suffix factory to distinguish with different factory. */
+ if (factory != NULL) {
+ snprintf(*fwname, max_size, "qca/nvm_usb_%08x_%s.bin",
+ le32_to_cpu(ver->rom_version),
+ factory);
+ } else {
+ snprintf(*fwname, max_size, "qca/nvm_usb_%08x.bin",
+ le32_to_cpu(ver->rom_version));
+ }
+ break;
+ default:
+ if (factory != NULL) {
+ snprintf(*fwname, max_size, "qca/nvm_usb_%08x_%s_%04x.bin",
+ le32_to_cpu(ver->rom_version),
+ factory,
+ le16_to_cpu(ver->board_id));
+ } else {
+ snprintf(*fwname, max_size, "qca/nvm_usb_%08x_%04x.bin",
+ le32_to_cpu(ver->rom_version),
+ le16_to_cpu(ver->board_id));
+ }
+ break;
+ }
+}
+
static int btusb_setup_qca_load_nvm(struct hci_dev *hdev,
struct qca_version *ver,
const struct qca_device_info *info)
@@ -4206,19 +4243,24 @@ static int btusb_setup_qca_load_nvm(struct hci_dev *hdev,
char fwname[64];
int err;
- if (((ver->flag >> 8) & 0xff) == QCA_FLAG_MULTI_NVM) {
- /* if boardid equal 0, use default nvm without surfix */
- if (le16_to_cpu(ver->board_id) == 0x0) {
+ switch (ver->ram_version) {
+ case WCN6855_2_0_RAM_VERSION_GF:
+ case WCN6855_2_1_RAM_VERSION_GF:
+ if (((ver->flag >> 8) & 0xff) == QCA_FLAG_MULTI_NVM) {
+ btusb_setup_qca_form_nvm_name(&fwname, sizeof(fwname), ver, "gf");
+ } else {
snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x.bin",
le32_to_cpu(ver->rom_version));
+ }
+ break;
+ default:
+ if (((ver->flag >> 8) & 0xff) == QCA_FLAG_MULTI_NVM) {
+ btusb_setup_qca_form_nvm_name(&fwname, sizeof(fwname), ver, NULL);
} else {
- snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x_%04x.bin",
- le32_to_cpu(ver->rom_version),
- le16_to_cpu(ver->board_id));
+ snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x.bin",
+ le32_to_cpu(ver->rom_version));
}
- } else {
- snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x.bin",
- le32_to_cpu(ver->rom_version));
+ break;
}
err = request_firmware(&fw, fwname, &hdev->dev);
--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
This is automated email and please do not reply to this email!
Dear submitter,
Thank you for submitting the patches to the linux bluetooth mailing list.
This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=530441
---Test result---
Test Summary:
CheckPatch PASS 0.50 seconds
GitLint FAIL 0.11 seconds
BuildKernel FAIL 413.33 seconds
TestRunner: Setup PASS 437.73 seconds
TestRunner: l2cap-tester PASS 3.08 seconds
TestRunner: bnep-tester PASS 2.14 seconds
TestRunner: mgmt-tester PASS 34.32 seconds
TestRunner: rfcomm-tester PASS 2.40 seconds
TestRunner: sco-tester PASS 2.35 seconds
TestRunner: smp-tester FAIL 2.41 seconds
TestRunner: userchan-tester PASS 2.13 seconds
Details
##############################
Test: CheckPatch - PASS - 0.50 seconds
Run checkpatch.pl script with rule in .checkpatch.conf
##############################
Test: GitLint - FAIL - 0.11 seconds
Run gitlint with rule in .gitlint
Bluetooth: btusb: Add support different nvm to distinguish different factory for WCN6855 controller
1: T1 Title exceeds max length (99>72): "Bluetooth: btusb: Add support different nvm to distinguish different factory for WCN6855 controller"
##############################
Test: BuildKernel - FAIL - 413.33 seconds
Build Kernel with minimal configuration supports Bluetooth
drivers/bluetooth/btusb.c: In function ‘btusb_setup_qca_form_nvm_name’:
drivers/bluetooth/btusb.c:3366:1: error: no return statement in function returning non-void [-Werror=return-type]
3366 | }
| ^
drivers/bluetooth/btusb.c: In function ‘btusb_setup_qca_load_nvm’:
drivers/bluetooth/btusb.c:3380:34: error: passing argument 1 of ‘btusb_setup_qca_form_nvm_name’ from incompatible pointer type [-Werror=incompatible-pointer-types]
3380 | btusb_setup_qca_form_nvm_name(&fwname, sizeof(fwname), ver, "gf");
| ^~~~~~~
| |
| char (*)[64]
drivers/bluetooth/btusb.c:3335:49: note: expected ‘char **’ but argument is of type ‘char (*)[64]’
3335 | static int btusb_setup_qca_form_nvm_name(char **fwname,
| ~~~~~~~^~~~~~
drivers/bluetooth/btusb.c:3388:34: error: passing argument 1 of ‘btusb_setup_qca_form_nvm_name’ from incompatible pointer type [-Werror=incompatible-pointer-types]
3388 | btusb_setup_qca_form_nvm_name(&fwname, sizeof(fwname), ver, NULL);
| ^~~~~~~
| |
| char (*)[64]
drivers/bluetooth/btusb.c:3335:49: note: expected ‘char **’ but argument is of type ‘char (*)[64]’
3335 | static int btusb_setup_qca_form_nvm_name(char **fwname,
| ~~~~~~~^~~~~~
cc1: some warnings being treated as errors
make[2]: *** [scripts/Makefile.build:271: drivers/bluetooth/btusb.o] Error 1
make[1]: *** [scripts/Makefile.build:514: drivers/bluetooth] Error 2
make: *** [Makefile:1841: drivers] Error 2
##############################
Test: TestRunner: Setup - PASS - 437.73 seconds
Setup environment for running Test Runner
##############################
Test: TestRunner: l2cap-tester - PASS - 3.08 seconds
Run test-runner with l2cap-tester
Total: 40, Passed: 40 (100.0%), Failed: 0, Not Run: 0
##############################
Test: TestRunner: bnep-tester - PASS - 2.14 seconds
Run test-runner with bnep-tester
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
##############################
Test: TestRunner: mgmt-tester - PASS - 34.32 seconds
Run test-runner with mgmt-tester
Total: 448, Passed: 445 (99.3%), Failed: 0, Not Run: 3
##############################
Test: TestRunner: rfcomm-tester - PASS - 2.40 seconds
Run test-runner with rfcomm-tester
Total: 9, Passed: 9 (100.0%), Failed: 0, Not Run: 0
##############################
Test: TestRunner: sco-tester - PASS - 2.35 seconds
Run test-runner with sco-tester
Total: 8, Passed: 8 (100.0%), Failed: 0, Not Run: 0
##############################
Test: TestRunner: smp-tester - FAIL - 2.41 seconds
Run test-runner with smp-tester
Total: 8, Passed: 7 (87.5%), Failed: 1, Not Run: 0
Failed Test Cases
SMP Client - SC Request 2 Failed 0.024 seconds
##############################
Test: TestRunner: userchan-tester - PASS - 2.13 seconds
Run test-runner with userchan-tester
Total: 3, Passed: 3 (100.0%), Failed: 0, Not Run: 0
---
Regards,
Linux Bluetooth
marcel:
could you help review this patch ? thank you.
tjiang
On 2021-08-12 16:50, Zijun Hu wrote:
> From: Tim Jiang <[email protected]>
>
> we have different factory to produce wcn6855 soc chip, so we should
> use different nvm file with suffix to distinguish them.
>
> Signed-off-by: Tim Jiang <[email protected]>
> ---
> drivers/bluetooth/btusb.c | 60
> ++++++++++++++++++++++++++++++++++++++++-------
> 1 file changed, 51 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
> index b1a05bb9f4bf..d7b4e0f1c3e3 100644
> --- a/drivers/bluetooth/btusb.c
> +++ b/drivers/bluetooth/btusb.c
> @@ -4013,6 +4013,9 @@ static int btusb_set_bdaddr_wcn6855(struct
> hci_dev *hdev,
> #define QCA_DFU_TIMEOUT 3000
> #define QCA_FLAG_MULTI_NVM 0x80
>
> +#define WCN6855_2_0_RAM_VERSION_GF 0x400c1200
> +#define WCN6855_2_1_RAM_VERSION_GF 0x400c1211
> +
> struct qca_version {
> __le32 rom_version;
> __le32 patch_version;
> @@ -4044,6 +4047,7 @@ static const struct qca_device_info
> qca_devices_table[] = {
> { 0x00000302, 28, 4, 16 }, /* Rome 3.2 */
> { 0x00130100, 40, 4, 16 }, /* WCN6855 1.0 */
> { 0x00130200, 40, 4, 16 }, /* WCN6855 2.0 */
> + { 0x00130201, 40, 4, 16 }, /* WCN6855 2.1 */
> };
>
> static int btusb_qca_send_vendor_req(struct usb_device *udev, u8
> request,
> @@ -4198,6 +4202,39 @@ static int btusb_setup_qca_load_rampatch(struct
> hci_dev *hdev,
> return err;
> }
>
> +static int btusb_setup_qca_form_nvm_name(char **fwname,
> + int max_size,
> + struct qca_version *ver,
> + char *factory)
> +{
> + /* if boardid equal 0, use default nvm without suffix */
> + switch (le16_to_cpu(ver->board_id)) {
> + case 0x0:
> + /* we add suffix factory to distinguish with different factory. */
> + if (factory != NULL) {
> + snprintf(*fwname, max_size, "qca/nvm_usb_%08x_%s.bin",
> + le32_to_cpu(ver->rom_version),
> + factory);
> + } else {
> + snprintf(*fwname, max_size, "qca/nvm_usb_%08x.bin",
> + le32_to_cpu(ver->rom_version));
> + }
> + break;
> + default:
> + if (factory != NULL) {
> + snprintf(*fwname, max_size, "qca/nvm_usb_%08x_%s_%04x.bin",
> + le32_to_cpu(ver->rom_version),
> + factory,
> + le16_to_cpu(ver->board_id));
> + } else {
> + snprintf(*fwname, max_size, "qca/nvm_usb_%08x_%04x.bin",
> + le32_to_cpu(ver->rom_version),
> + le16_to_cpu(ver->board_id));
> + }
> + break;
> + }
> +}
> +
> static int btusb_setup_qca_load_nvm(struct hci_dev *hdev,
> struct qca_version *ver,
> const struct qca_device_info *info)
> @@ -4206,19 +4243,24 @@ static int btusb_setup_qca_load_nvm(struct
> hci_dev *hdev,
> char fwname[64];
> int err;
>
> - if (((ver->flag >> 8) & 0xff) == QCA_FLAG_MULTI_NVM) {
> - /* if boardid equal 0, use default nvm without surfix */
> - if (le16_to_cpu(ver->board_id) == 0x0) {
> + switch (ver->ram_version) {
> + case WCN6855_2_0_RAM_VERSION_GF:
> + case WCN6855_2_1_RAM_VERSION_GF:
> + if (((ver->flag >> 8) & 0xff) == QCA_FLAG_MULTI_NVM) {
> + btusb_setup_qca_form_nvm_name(&fwname, sizeof(fwname), ver, "gf");
> + } else {
> snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x.bin",
> le32_to_cpu(ver->rom_version));
> + }
> + break;
> + default:
> + if (((ver->flag >> 8) & 0xff) == QCA_FLAG_MULTI_NVM) {
> + btusb_setup_qca_form_nvm_name(&fwname, sizeof(fwname), ver, NULL);
> } else {
> - snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x_%04x.bin",
> - le32_to_cpu(ver->rom_version),
> - le16_to_cpu(ver->board_id));
> + snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x.bin",
> + le32_to_cpu(ver->rom_version));
> }
> - } else {
> - snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x.bin",
> - le32_to_cpu(ver->rom_version));
> + break;
> }
>
> err = request_firmware(&fw, fwname, &hdev->dev);
Hi Tim,
> could you help review this patch ? thank you.
> tjiang
if the kernel test robot throws an error, I am not even looking at a patch. You need to fix these first.
Regards
Marcel