Re: [PATCH 1/1] Bluetooth: btrtl: Firmware format v2 support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on bluetooth/master]
[also build test WARNING on bluetooth-next/master linus/master v6.2-rc4 next-20230119]
[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#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/max-chou-realtek-com/Bluetooth-btrtl-Firmware-format-v2-support/20230119-155205
base:   https://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth.git master
patch link:    https://lore.kernel.org/r/20230119074714.156283-1-max.chou%40realtek.com
patch subject: [PATCH 1/1] Bluetooth: btrtl: Firmware format v2 support
config: csky-randconfig-s043-20230119 (https://download.01.org/0day-ci/archive/20230120/202301200134.RGBBGiDD-lkp@xxxxxxxxx/config)
compiler: csky-linux-gcc (GCC) 12.1.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # apt-get install sparse
        # sparse version: v0.6.4-39-gce1a6720-dirty
        # https://github.com/intel-lab-lkp/linux/commit/ffdaef9bef66fbba642b544b0a1f35217dc17d6a
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review max-chou-realtek-com/Bluetooth-btrtl-Firmware-format-v2-support/20230119-155205
        git checkout ffdaef9bef66fbba642b544b0a1f35217dc17d6a
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=csky olddefconfig
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=csky SHELL=/bin/bash drivers/bluetooth/

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@xxxxxxxxx>

sparse warnings: (new ones prefixed by >>)
>> drivers/bluetooth/btrtl.c:893:22: sparse: sparse: cast to restricted __le16
   drivers/bluetooth/btrtl.c:899:27: sparse: sparse: cast to restricted __le16
   drivers/bluetooth/btrtl.c: note: in included file:
   drivers/bluetooth/btrtl.h:47:45: sparse: sparse: array of flexible structures

vim +893 drivers/bluetooth/btrtl.c

   865	
   866	struct btrtl_device_info *btrtl_initialize(struct hci_dev *hdev,
   867						   const char *postfix)
   868	{
   869		struct btrtl_device_info *btrtl_dev;
   870		struct sk_buff *skb;
   871		struct hci_rp_read_local_version *resp;
   872		char cfg_name[40];
   873		u16 hci_rev, lmp_subver;
   874		u8 hci_ver;
   875		u8 lmp_ver;
   876		int ret;
   877		u16 opcode;
   878		u8 cmd[2];
   879		u8 reg_val[2];
   880	
   881		btrtl_dev = kzalloc(sizeof(*btrtl_dev), GFP_KERNEL);
   882		if (!btrtl_dev) {
   883			ret = -ENOMEM;
   884			goto err_alloc;
   885		}
   886	
   887		INIT_LIST_HEAD(&btrtl_dev->patch_subsecs);
   888	
   889	check_version:
   890		ret = btrtl_vendor_read_reg16(hdev, RTL_CHIP_SUBVER, reg_val);
   891		if (ret < 0)
   892			goto err_free;
 > 893		lmp_subver = le16_to_cpu(*((u16 *)reg_val));
   894	
   895		if (lmp_subver == RTL_ROM_LMP_8822B) {
   896			ret = btrtl_vendor_read_reg16(hdev, RTL_CHIP_REV, reg_val);
   897			if (ret < 0)
   898				goto err_free;
   899			hci_rev = le16_to_cpu(*((u16 *)reg_val));
   900	
   901			/* 8822E */
   902			if (hci_rev == 0x000e) {
   903				hci_ver = 0x0c;
   904				lmp_ver = 0x0c;
   905				btrtl_dev->ic_info = btrtl_match_ic(lmp_subver, hci_rev,
   906								    hci_ver, hdev->bus);
   907				goto next;
   908			}
   909		}
   910	
   911		skb = btrtl_read_local_version(hdev);
   912		if (IS_ERR(skb)) {
   913			ret = PTR_ERR(skb);
   914			goto err_free;
   915		}
   916		resp = (struct hci_rp_read_local_version *)skb->data;
   917	
   918		hci_ver    = resp->hci_ver;
   919		hci_rev    = le16_to_cpu(resp->hci_rev);
   920		lmp_ver    = resp->lmp_ver;
   921		lmp_subver = le16_to_cpu(resp->lmp_subver);
   922	
   923		kfree_skb(skb);
   924	
   925		btrtl_dev->ic_info = btrtl_match_ic(lmp_subver, hci_rev, hci_ver,
   926						    hdev->bus);
   927	
   928	next:
   929		rtl_dev_info(hdev, "examining hci_ver=%02x hci_rev=%04x lmp_ver=%02x lmp_subver=%04x",
   930			     hci_ver, hci_rev,
   931			     lmp_ver, lmp_subver);
   932	
   933		if (!btrtl_dev->ic_info && !btrtl_dev->drop_fw)
   934			btrtl_dev->drop_fw = true;
   935		else
   936			btrtl_dev->drop_fw = false;
   937	
   938		if (btrtl_dev->drop_fw) {
   939			opcode = hci_opcode_pack(0x3f, 0x66);
   940			cmd[0] = opcode & 0xff;
   941			cmd[1] = opcode >> 8;
   942	
   943			skb = bt_skb_alloc(sizeof(cmd), GFP_KERNEL);
   944			if (!skb)
   945				goto err_free;
   946	
   947			skb_put_data(skb, cmd, sizeof(cmd));
   948			hci_skb_pkt_type(skb) = HCI_COMMAND_PKT;
   949	
   950			ret = hdev->send(hdev, skb);
   951			if (ret < 0) {
   952				bt_dev_err(hdev, "sending frame failed (%d)", ret);
   953				kfree_skb(skb);
   954				goto err_free;
   955			}
   956	
   957			/* Ensure the above vendor command is sent to controller and
   958			 * process has done.
   959			 */
   960			msleep(200);
   961	
   962			goto check_version;
   963		}
   964	
   965		if (!btrtl_dev->ic_info) {
   966			rtl_dev_info(hdev, "unknown IC info, lmp subver %04x, hci rev %04x, hci ver %04x",
   967				    lmp_subver, hci_rev, hci_ver);
   968			return btrtl_dev;
   969		}
   970	
   971		if (btrtl_dev->ic_info->has_rom_version) {
   972			ret = rtl_read_rom_version(hdev, &btrtl_dev->rom_version);
   973			if (ret)
   974				goto err_free;
   975		}
   976	
   977		btrtl_dev->fw_len = rtl_load_file(hdev, btrtl_dev->ic_info->fw_name,
   978						  &btrtl_dev->fw_data);
   979		if (btrtl_dev->fw_len < 0) {
   980			rtl_dev_err(hdev, "firmware file %s not found",
   981				    btrtl_dev->ic_info->fw_name);
   982			ret = btrtl_dev->fw_len;
   983			goto err_free;
   984		}
   985	
   986		if (btrtl_dev->ic_info->cfg_name) {
   987			if (postfix) {
   988				snprintf(cfg_name, sizeof(cfg_name), "%s-%s.bin",
   989					 btrtl_dev->ic_info->cfg_name, postfix);
   990			} else {
   991				snprintf(cfg_name, sizeof(cfg_name), "%s.bin",
   992					 btrtl_dev->ic_info->cfg_name);
   993			}
   994			btrtl_dev->cfg_len = rtl_load_file(hdev, cfg_name,
   995							   &btrtl_dev->cfg_data);
   996			if (btrtl_dev->ic_info->config_needed &&
   997			    btrtl_dev->cfg_len <= 0) {
   998				rtl_dev_err(hdev, "mandatory config file %s not found",
   999					    btrtl_dev->ic_info->cfg_name);
  1000				ret = btrtl_dev->cfg_len;
  1001				goto err_free;
  1002			}
  1003		}
  1004	
  1005		/* The following chips supports the Microsoft vendor extension,
  1006		 * therefore set the corresponding VsMsftOpCode.
  1007		 */
  1008		if (btrtl_dev->ic_info->has_msft_ext)
  1009			hci_set_msft_opcode(hdev, 0xFCF0);
  1010	
  1011		return btrtl_dev;
  1012	
  1013	err_free:
  1014		btrtl_free(btrtl_dev);
  1015	err_alloc:
  1016		return ERR_PTR(ret);
  1017	}
  1018	EXPORT_SYMBOL_GPL(btrtl_initialize);
  1019	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests



[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux