linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4] Bluetooth: btusb: Add support using different nvm for variant WCN6855 controller
@ 2021-08-23  8:58 Zijun Hu
  2021-08-23 13:58 ` kernel test robot
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Zijun Hu @ 2021-08-23  8:58 UTC (permalink / raw)
  To: marcel, johan.hedberg, luiz.dentz
  Cc: linux-kernel, linux-bluetooth, linux-arm-msm, bgodavar, c-hbandi,
	hemantg, mka, rjliao, zijuhu, tjiang

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.

Signed-off-by: Tim Jiang <tjiang@codeaurora.org>
---
 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


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v4] Bluetooth: btusb: Add support using different nvm for variant WCN6855 controller
  2021-08-23  8:58 [PATCH v4] Bluetooth: btusb: Add support using different nvm for variant WCN6855 controller Zijun Hu
@ 2021-08-23 13:58 ` kernel test robot
  2021-08-23 15:25 ` kernel test robot
  2021-08-23 17:43 ` Matthias Kaehlcke
  2 siblings, 0 replies; 4+ messages in thread
From: kernel test robot @ 2021-08-23 13:58 UTC (permalink / raw)
  To: Zijun Hu, marcel, johan.hedberg, luiz.dentz
  Cc: kbuild-all, linux-kernel, linux-bluetooth, linux-arm-msm,
	bgodavar, c-hbandi, hemantg, mka

[-- Attachment #1: Type: text/plain, Size: 7508 bytes --]

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

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 68259 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v4] Bluetooth: btusb: Add support using different nvm for variant WCN6855 controller
  2021-08-23  8:58 [PATCH v4] Bluetooth: btusb: Add support using different nvm for variant WCN6855 controller Zijun Hu
  2021-08-23 13:58 ` kernel test robot
@ 2021-08-23 15:25 ` kernel test robot
  2021-08-23 17:43 ` Matthias Kaehlcke
  2 siblings, 0 replies; 4+ messages in thread
From: kernel test robot @ 2021-08-23 15:25 UTC (permalink / raw)
  To: Zijun Hu, marcel, johan.hedberg, luiz.dentz
  Cc: kbuild-all, linux-kernel, linux-bluetooth, linux-arm-msm,
	bgodavar, c-hbandi, hemantg, mka

[-- Attachment #1: Type: text/plain, Size: 7478 bytes --]

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

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 68484 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v4] Bluetooth: btusb: Add support using different nvm for variant WCN6855 controller
  2021-08-23  8:58 [PATCH v4] Bluetooth: btusb: Add support using different nvm for variant WCN6855 controller Zijun Hu
  2021-08-23 13:58 ` kernel test robot
  2021-08-23 15:25 ` kernel test robot
@ 2021-08-23 17:43 ` Matthias Kaehlcke
  2 siblings, 0 replies; 4+ messages in thread
From: Matthias Kaehlcke @ 2021-08-23 17:43 UTC (permalink / raw)
  To: Zijun Hu
  Cc: marcel, johan.hedberg, luiz.dentz, linux-kernel, linux-bluetooth,
	linux-arm-msm, bgodavar, c-hbandi, hemantg, rjliao, tjiang

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
> 

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-08-23 17:43 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-23  8:58 [PATCH v4] Bluetooth: btusb: Add support using different nvm for variant WCN6855 controller Zijun Hu
2021-08-23 13:58 ` kernel test robot
2021-08-23 15:25 ` kernel test robot
2021-08-23 17:43 ` Matthias Kaehlcke

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).