Message ID | 1629709100-9099-1-git-send-email-zijuhu@codeaurora.org (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | [v4] Bluetooth: btusb: Add support using different nvm for variant WCN6855 controller | expand |
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
Hi Zijun, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on bluetooth-next/master] [also build test WARNING on linus/master v5.14-rc7 next-20210823] [cannot apply to linux/master bluetooth/master] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Zijun-Hu/Bluetooth-btusb-Add-support-using-different-nvm-for-variant-WCN6855-controller/20210823-170111 base: https://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git master config: alpha-allyesconfig (attached as .config) compiler: alpha-linux-gcc (GCC) 11.2.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/0day-ci/linux/commit/0e2a1544bcc7d3ffac1bd4c27614c8d892933ed3 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Zijun-Hu/Bluetooth-btusb-Add-support-using-different-nvm-for-variant-WCN6855-controller/20210823-170111 git checkout 0e2a1544bcc7d3ffac1bd4c27614c8d892933ed3 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross ARCH=alpha If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> All warnings (new ones prefixed by >>): drivers/bluetooth/btusb.c: In function 'btusb_generate_qca_nvm_name': >> drivers/bluetooth/btusb.c:3342:48: 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] 3342 | snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x%s%s.bin", | ^ drivers/bluetooth/btusb.c:3342:34: error: passing argument 1 of 'snprintf' from incompatible pointer type [-Werror=incompatible-pointer-types] 3342 | 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:3347:48: 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] 3347 | snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x%s%s%04x.bin", | ^ drivers/bluetooth/btusb.c:3347:34: error: passing argument 1 of 'snprintf' from incompatible pointer type [-Werror=incompatible-pointer-types] 3347 | 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:3354:40: 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] 3354 | snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x.bin", | ^ drivers/bluetooth/btusb.c:3354:26: error: passing argument 1 of 'snprintf' from incompatible pointer type [-Werror=incompatible-pointer-types] 3354 | 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:3371:53: error: passing argument 1 of 'btusb_generate_qca_nvm_name' from incompatible pointer type [-Werror=incompatible-pointer-types] 3371 | btusb_generate_qca_nvm_name(&fwname, sizeof(fwname), ver, "_", "gf"); | ^~~~~~~ | | | char (*)[64] drivers/bluetooth/btusb.c:3333:48: note: expected 'char **' but argument is of type 'char (*)[64]' 3333 | static void btusb_generate_qca_nvm_name(char **fwname, | ~~~~~~~^~~~~~ drivers/bluetooth/btusb.c:3374:53: error: passing argument 1 of 'btusb_generate_qca_nvm_name' from incompatible pointer type [-Werror=incompatible-pointer-types] 3374 | btusb_generate_qca_nvm_name(&fwname, sizeof(fwname), ver, NULL, NULL); | ^~~~~~~ | | | char (*)[64] drivers/bluetooth/btusb.c:3333:48: note: expected 'char **' but argument is of type 'char (*)[64]' 3333 | static void btusb_generate_qca_nvm_name(char **fwname, | ~~~~~~~^~~~~~ cc1: some warnings being treated as errors vim +3342 drivers/bluetooth/btusb.c 3332 3333 static void btusb_generate_qca_nvm_name(char **fwname, 3334 int max_size, 3335 struct qca_version *ver, 3336 char *separator, 3337 char *vendor) 3338 { 3339 if (((ver->flag >> 8) & 0xff) == QCA_FLAG_MULTI_NVM) { 3340 /* if boardid equal 0, use default nvm without surfix */ 3341 if (le16_to_cpu(ver->board_id) == 0x0) { > 3342 snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x%s%s.bin", 3343 le32_to_cpu(ver->rom_version), 3344 separator, 3345 vendor); 3346 } else { 3347 snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x%s%s%04x.bin", 3348 le32_to_cpu(ver->rom_version), 3349 separator, 3350 vendor, 3351 le16_to_cpu(ver->board_id)); 3352 } 3353 } else { 3354 snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x.bin", 3355 le32_to_cpu(ver->rom_version)); 3356 } 3357 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
Hi Zijun, Thank you for the patch! Yet something to improve: [auto build test ERROR on bluetooth-next/master] [also build test ERROR on linus/master v5.14-rc7 next-20210823] [cannot apply to linux/master bluetooth/master] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Zijun-Hu/Bluetooth-btusb-Add-support-using-different-nvm-for-variant-WCN6855-controller/20210823-170111 base: https://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git master config: arc-allyesconfig (attached as .config) compiler: arceb-elf-gcc (GCC) 11.2.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/0day-ci/linux/commit/0e2a1544bcc7d3ffac1bd4c27614c8d892933ed3 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Zijun-Hu/Bluetooth-btusb-Add-support-using-different-nvm-for-variant-WCN6855-controller/20210823-170111 git checkout 0e2a1544bcc7d3ffac1bd4c27614c8d892933ed3 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross ARCH=arc If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> All errors (new ones prefixed by >>): drivers/bluetooth/btusb.c: In function 'btusb_generate_qca_nvm_name': >> drivers/bluetooth/btusb.c:3342:34: error: passing argument 1 of 'snprintf' from incompatible pointer type [-Werror=incompatible-pointer-types] 3342 | 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:3347:34: error: passing argument 1 of 'snprintf' from incompatible pointer type [-Werror=incompatible-pointer-types] 3347 | 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:3354:26: error: passing argument 1 of 'snprintf' from incompatible pointer type [-Werror=incompatible-pointer-types] 3354 | 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:3371:53: error: passing argument 1 of 'btusb_generate_qca_nvm_name' from incompatible pointer type [-Werror=incompatible-pointer-types] 3371 | btusb_generate_qca_nvm_name(&fwname, sizeof(fwname), ver, "_", "gf"); | ^~~~~~~ | | | char (*)[64] drivers/bluetooth/btusb.c:3333:48: note: expected 'char **' but argument is of type 'char (*)[64]' 3333 | static void btusb_generate_qca_nvm_name(char **fwname, | ~~~~~~~^~~~~~ drivers/bluetooth/btusb.c:3374:53: error: passing argument 1 of 'btusb_generate_qca_nvm_name' from incompatible pointer type [-Werror=incompatible-pointer-types] 3374 | btusb_generate_qca_nvm_name(&fwname, sizeof(fwname), ver, NULL, NULL); | ^~~~~~~ | | | char (*)[64] drivers/bluetooth/btusb.c:3333:48: note: expected 'char **' but argument is of type 'char (*)[64]' 3333 | static void btusb_generate_qca_nvm_name(char **fwname, | ~~~~~~~^~~~~~ cc1: some warnings being treated as errors vim +/snprintf +3342 drivers/bluetooth/btusb.c 3332 3333 static void btusb_generate_qca_nvm_name(char **fwname, 3334 int max_size, 3335 struct qca_version *ver, 3336 char *separator, 3337 char *vendor) 3338 { 3339 if (((ver->flag >> 8) & 0xff) == QCA_FLAG_MULTI_NVM) { 3340 /* if boardid equal 0, use default nvm without surfix */ 3341 if (le16_to_cpu(ver->board_id) == 0x0) { > 3342 snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x%s%s.bin", 3343 le32_to_cpu(ver->rom_version), 3344 separator, 3345 vendor); 3346 } else { 3347 snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x%s%s%04x.bin", 3348 le32_to_cpu(ver->rom_version), 3349 separator, 3350 vendor, 3351 le16_to_cpu(ver->board_id)); 3352 } 3353 } else { 3354 snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x.bin", 3355 le32_to_cpu(ver->rom_version)); 3356 } 3357 3358 } 3359 3360 static int btusb_setup_qca_load_nvm(struct hci_dev *hdev, 3361 struct qca_version *ver, 3362 const struct qca_device_info *info) 3363 { 3364 const struct firmware *fw; 3365 char fwname[64]; 3366 int err; 3367 3368 switch (ver->ram_version) { 3369 case WCN6855_2_0_RAM_VERSION_GF: 3370 case WCN6855_2_1_RAM_VERSION_GF: > 3371 btusb_generate_qca_nvm_name(&fwname, sizeof(fwname), ver, "_", "gf"); 3372 break; 3373 default: 3374 btusb_generate_qca_nvm_name(&fwname, sizeof(fwname), ver, NULL, NULL); 3375 break; 3376 } 3377 3378 err = request_firmware(&fw, fwname, &hdev->dev); 3379 if (err) { 3380 bt_dev_err(hdev, "failed to request NVM file: %s (%d)", 3381 fwname, err); 3382 return err; 3383 } 3384 3385 bt_dev_info(hdev, "using NVM file: %s", fwname); 3386 3387 err = btusb_setup_qca_download_fw(hdev, fw, info->nvm_hdr); 3388 3389 release_firmware(fw); 3390 3391 return err; 3392 } 3393 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
On Mon, Aug 23, 2021 at 04:58:20PM +0800, Zijun Hu wrote: > From: Tim Jiang <tjiang@codeaurora.org> > > we have variant wcn6855 soc chip from different vendors, so we should > use different nvm file with suffix to distinguish them. I think the concept of 'vendor' (or 'factory' as it was named earlier) needs more clarification. Are we talking about USB BT modules with a the wcn6855 that are marketed by the 'vendor'? If so, could the USB vendor it be used to determine the vendor? Could modules from different vendors use the same firmware, even though it's not the same for all vendors?. > Signed-off-by: Tim Jiang <tjiang@codeaurora.org> Please also add your own Signed-off-by tag, even when sending unmodified patches on behalf of others. In this case you are making changes to the original patch and are effectively a co-author, which is another important reason for adding the tag. > --- > 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, 'separator' is part of the internal logic of this function, the caller shouldn't have to care about it. Define it as a local variable instead and initialize it to ''. If 'vendor' (or whatever it is called) is not NULL assign 'separator' to '_'. > + char *vendor) > { > - const struct firmware *fw; > - char fwname[64]; > - int err; > - u16 board_id = le16_to_cpu(ver->board_id); u32 rom_version = le32_to_cpu(ver->rom_version)); Then use these local variable instead of doing the endianness conversion over and over again. > 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 >
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)",