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