2021-08-23 09:00:45

by Zijun Hu

[permalink] [raw]
Subject: [PATCH v4] Bluetooth: btusb: Add support using different nvm for variant WCN6855 controller

From: Tim Jiang <[email protected]>

we have variant wcn6855 soc chip from different vendors, so we should
use different nvm file with suffix to distinguish them.

Signed-off-by: Tim Jiang <[email protected]>
---
drivers/bluetooth/btusb.c | 46 ++++++++++++++++++++++++++++++++++++----------
1 file changed, 36 insertions(+), 10 deletions(-)

diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index 60d2fce59a71..9b4408307138 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -3141,6 +3141,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;
@@ -3172,6 +3175,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,
@@ -3326,22 +3330,24 @@ static int btusb_setup_qca_load_rampatch(struct hci_dev *hdev,
return err;
}

-static int btusb_setup_qca_load_nvm(struct hci_dev *hdev,
- struct qca_version *ver,
- const struct qca_device_info *info)
+static void btusb_generate_qca_nvm_name(char **fwname,
+ int max_size,
+ struct qca_version *ver,
+ char *separator,
+ char *vendor)
{
- const struct firmware *fw;
- 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) {
- snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x.bin",
- le32_to_cpu(ver->rom_version));
+ snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x%s%s.bin",
+ le32_to_cpu(ver->rom_version),
+ separator,
+ vendor);
} else {
- snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x_%04x.bin",
+ snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x%s%s%04x.bin",
le32_to_cpu(ver->rom_version),
+ separator,
+ vendor,
le16_to_cpu(ver->board_id));
}
} else {
@@ -3349,6 +3355,26 @@ static int btusb_setup_qca_load_nvm(struct hci_dev *hdev,
le32_to_cpu(ver->rom_version));
}

+}
+
+static int btusb_setup_qca_load_nvm(struct hci_dev *hdev,
+ struct qca_version *ver,
+ const struct qca_device_info *info)
+{
+ const struct firmware *fw;
+ char fwname[64];
+ int err;
+
+ switch (ver->ram_version) {
+ case WCN6855_2_0_RAM_VERSION_GF:
+ case WCN6855_2_1_RAM_VERSION_GF:
+ btusb_generate_qca_nvm_name(&fwname, sizeof(fwname), ver, "_", "gf");
+ break;
+ default:
+ btusb_generate_qca_nvm_name(&fwname, sizeof(fwname), ver, NULL, NULL);
+ break;
+ }
+
err = request_firmware(&fw, fwname, &hdev->dev);
if (err) {
bt_dev_err(hdev, "failed to request NVM file: %s (%d)",
--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project


2021-08-23 10:07:21

by bluez.test.bot

[permalink] [raw]
Subject: RE: [v4] Bluetooth: btusb: Add support using different nvm for variant WCN6855 controller

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=535741

---Test result---

Test Summary:
CheckPatch PASS 0.68 seconds
GitLint FAIL 0.15 seconds
BuildKernel FAIL 434.73 seconds
TestRunner: Setup PASS 466.74 seconds
TestRunner: l2cap-tester PASS 3.32 seconds
TestRunner: bnep-tester PASS 2.24 seconds
TestRunner: mgmt-tester PASS 34.76 seconds
TestRunner: rfcomm-tester PASS 2.55 seconds
TestRunner: sco-tester PASS 2.42 seconds
TestRunner: smp-tester FAIL 2.49 seconds
TestRunner: userchan-tester PASS 2.27 seconds

Details
##############################
Test: CheckPatch - PASS - 0.68 seconds
Run checkpatch.pl script with rule in .checkpatch.conf


##############################
Test: GitLint - FAIL - 0.15 seconds
Run gitlint with rule in .gitlint
Bluetooth: btusb: Add support using different nvm for variant WCN6855 controller
1: T1 Title exceeds max length (80>72): "Bluetooth: btusb: Add support using different nvm for variant WCN6855 controller"


##############################
Test: BuildKernel - FAIL - 434.73 seconds
Build Kernel with minimal configuration supports Bluetooth
drivers/bluetooth/btusb.c: In function ‘btusb_generate_qca_nvm_name’:
drivers/bluetooth/btusb.c:3344:27: warning: argument to ‘sizeof’ in ‘snprintf’ call is the same expression as the destination; did you mean to provide an explicit length? [-Wsizeof-pointer-memaccess]
3344 | snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x%s%s.bin",
| ^
drivers/bluetooth/btusb.c:3344:13: error: passing argument 1 of ‘snprintf’ from incompatible pointer type [-Werror=incompatible-pointer-types]
3344 | snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x%s%s.bin",
| ^~~~~~
| |
| char **
In file included from ./include/linux/list.h:9,
from ./include/linux/dmi.h:5,
from drivers/bluetooth/btusb.c:9:
./include/linux/kernel.h:204:20: note: expected ‘char *’ but argument is of type ‘char **’
204 | int snprintf(char *buf, size_t size, const char *fmt, ...);
| ~~~~~~^~~
drivers/bluetooth/btusb.c:3349:27: warning: argument to ‘sizeof’ in ‘snprintf’ call is the same expression as the destination; did you mean to provide an explicit length? [-Wsizeof-pointer-memaccess]
3349 | snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x%s%s%04x.bin",
| ^
drivers/bluetooth/btusb.c:3349:13: error: passing argument 1 of ‘snprintf’ from incompatible pointer type [-Werror=incompatible-pointer-types]
3349 | snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x%s%s%04x.bin",
| ^~~~~~
| |
| char **
In file included from ./include/linux/list.h:9,
from ./include/linux/dmi.h:5,
from drivers/bluetooth/btusb.c:9:
./include/linux/kernel.h:204:20: note: expected ‘char *’ but argument is of type ‘char **’
204 | int snprintf(char *buf, size_t size, const char *fmt, ...);
| ~~~~~~^~~
drivers/bluetooth/btusb.c:3356:26: warning: argument to ‘sizeof’ in ‘snprintf’ call is the same expression as the destination; did you mean to provide an explicit length? [-Wsizeof-pointer-memaccess]
3356 | snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x.bin",
| ^
drivers/bluetooth/btusb.c:3356:12: error: passing argument 1 of ‘snprintf’ from incompatible pointer type [-Werror=incompatible-pointer-types]
3356 | snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x.bin",
| ^~~~~~
| |
| char **
In file included from ./include/linux/list.h:9,
from ./include/linux/dmi.h:5,
from drivers/bluetooth/btusb.c:9:
./include/linux/kernel.h:204:20: note: expected ‘char *’ but argument is of type ‘char **’
204 | int snprintf(char *buf, size_t size, const char *fmt, ...);
| ~~~~~~^~~
drivers/bluetooth/btusb.c: In function ‘btusb_setup_qca_load_nvm’:
drivers/bluetooth/btusb.c:3373:32: error: passing argument 1 of ‘btusb_generate_qca_nvm_name’ from incompatible pointer type [-Werror=incompatible-pointer-types]
3373 | btusb_generate_qca_nvm_name(&fwname, sizeof(fwname), ver, "_", "gf");
| ^~~~~~~
| |
| char (*)[64]
drivers/bluetooth/btusb.c:3335:48: note: expected ‘char **’ but argument is of type ‘char (*)[64]’
3335 | static void btusb_generate_qca_nvm_name(char **fwname,
| ~~~~~~~^~~~~~
drivers/bluetooth/btusb.c:3376:32: error: passing argument 1 of ‘btusb_generate_qca_nvm_name’ from incompatible pointer type [-Werror=incompatible-pointer-types]
3376 | btusb_generate_qca_nvm_name(&fwname, sizeof(fwname), ver, NULL, NULL);
| ^~~~~~~
| |
| char (*)[64]
drivers/bluetooth/btusb.c:3335:48: note: expected ‘char **’ but argument is of type ‘char (*)[64]’
3335 | static void btusb_generate_qca_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 - 466.74 seconds
Setup environment for running Test Runner


##############################
Test: TestRunner: l2cap-tester - PASS - 3.32 seconds
Run test-runner with l2cap-tester
Total: 40, Passed: 40 (100.0%), Failed: 0, Not Run: 0

##############################
Test: TestRunner: bnep-tester - PASS - 2.24 seconds
Run test-runner with bnep-tester
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0

##############################
Test: TestRunner: mgmt-tester - PASS - 34.76 seconds
Run test-runner with mgmt-tester
Total: 448, Passed: 445 (99.3%), Failed: 0, Not Run: 3

##############################
Test: TestRunner: rfcomm-tester - PASS - 2.55 seconds
Run test-runner with rfcomm-tester
Total: 9, Passed: 9 (100.0%), Failed: 0, Not Run: 0

##############################
Test: TestRunner: sco-tester - PASS - 2.42 seconds
Run test-runner with sco-tester
Total: 8, Passed: 8 (100.0%), Failed: 0, Not Run: 0

##############################
Test: TestRunner: smp-tester - FAIL - 2.49 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.028 seconds

##############################
Test: TestRunner: userchan-tester - PASS - 2.27 seconds
Run test-runner with userchan-tester
Total: 3, Passed: 3 (100.0%), Failed: 0, Not Run: 0



---
Regards,
Linux Bluetooth


Attachments:
l2cap-tester.log (43.34 kB)
bnep-tester.log (3.51 kB)
mgmt-tester.log (602.41 kB)
rfcomm-tester.log (11.44 kB)
sco-tester.log (9.71 kB)
smp-tester.log (11.47 kB)
userchan-tester.log (5.36 kB)
Download all attachments