tree:   https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git pending
head:   e7a96db0fc087f728af01fc0dea2ae4e90055d09
commit: 99df4b90a16df886e27c21a921f9be8abeec8b12 [23/35] ath10k: download 
firmware via diag Copy Engine for QCA6174 and QCA9377.
reproduce:
        # apt-get install sparse
        git checkout 99df4b90a16df886e27c21a921f9be8abeec8b12
        make ARCH=x86_64 allmodconfig
        make C=1 CF=-D__CHECK_ENDIAN__


sparse warnings: (new ones prefixed by >>)

   drivers/net/wireless/ath/ath10k/hw.c:679:20: sparse: expression using 
sizeof(void)
   drivers/net/wireless/ath/ath10k/hw.c:686:23: sparse: expression using 
sizeof(void)
   drivers/net/wireless/ath/ath10k/hw.c:692:23: sparse: expression using 
sizeof(void)
>> drivers/net/wireless/ath/ath10k/hw.c:1029:16: sparse: restricted __le32 
>> degrades to integer
>> drivers/net/wireless/ath/ath10k/hw.c:1047:27: sparse: incorrect type in 
>> assignment (different base types) @@    expected unsigned int [unsigned] 
>> [usertype] base_addr @@    got ed int [unsigned] [usertype] base_addr @@
   drivers/net/wireless/ath/ath10k/hw.c:1047:27:    expected unsigned int 
[unsigned] [usertype] base_addr
   drivers/net/wireless/ath/ath10k/hw.c:1047:27:    got restricted __le32 
[usertype] addr
>> drivers/net/wireless/ath/ath10k/hw.c:1048:26: sparse: incorrect type in 
>> assignment (different base types) @@    expected unsigned int [unsigned] 
>> [usertype] base_len @@    got ed int [unsigned] [usertype] base_len @@
   drivers/net/wireless/ath/ath10k/hw.c:1048:26:    expected unsigned int 
[unsigned] [usertype] base_len
   drivers/net/wireless/ath/ath10k/hw.c:1048:26:    got restricted __le32 
[usertype] length

vim +1029 drivers/net/wireless/ath/ath10k/hw.c

  1007  
  1008  int ath10k_hw_diag_fast_download(struct ath10k *ar,
  1009                                   u32 address,
  1010                                   const void *buffer,
  1011                                   u32 length)
  1012  {
  1013          const u8 *buf = buffer;
  1014          bool sgmt_end = false;
  1015          u32 base_addr = 0;
  1016          u32 base_len = 0;
  1017          u32 left = 0;
  1018          struct bmi_segmented_file_header *hdr;
  1019          struct bmi_segmented_metadata *metadata;
  1020          int ret = 0;
  1021  
  1022          if (length < sizeof(*hdr))
  1023                  return -EINVAL;
  1024  
  1025          /* check firmware header. If it has no correct magic number
  1026           * or it's compressed, returns error.
  1027           */
  1028          hdr = (struct bmi_segmented_file_header *)buf;
> 1029          if (hdr->magic_num != BMI_SGMTFILE_MAGIC_NUM) {
  1030                  ath10k_dbg(ar, ATH10K_DBG_BOOT,
  1031                             "Not a supported firmware, magic_num:0x%x\n",
  1032                             hdr->magic_num);
  1033                  return -EINVAL;
  1034          }
  1035  
  1036          if (hdr->file_flags != 0) {
  1037                  ath10k_dbg(ar, ATH10K_DBG_BOOT,
  1038                             "Not a supported firmware, 
file_flags:0x%x\n",
  1039                             hdr->file_flags);
  1040                  return -EINVAL;
  1041          }
  1042  
  1043          metadata = (struct bmi_segmented_metadata *)hdr->data;
  1044          left = length - sizeof(*hdr);
  1045  
  1046          while (left > 0) {
> 1047                  base_addr = metadata->addr;
> 1048                  base_len = metadata->length;
  1049                  buf = metadata->data;
  1050                  left -= sizeof(*metadata);
  1051  
  1052                  switch (base_len) {
  1053                  case BMI_SGMTFILE_BEGINADDR:
  1054                          /* base_addr is the start address to run */
  1055                          ret = ath10k_bmi_set_start(ar, base_addr);
  1056                          base_len = 0;
  1057                          break;
  1058                  case BMI_SGMTFILE_DONE:
  1059                          /* no more segment */
  1060                          base_len = 0;
  1061                          sgmt_end = true;
  1062                          ret = 0;
  1063                          break;
  1064                  case BMI_SGMTFILE_BDDATA:
  1065                  case BMI_SGMTFILE_EXEC:
  1066                          ath10k_warn(ar,
  1067                                      "firmware has unsupported 
segment:%d\n",
  1068                                      base_len);
  1069                          ret = -EINVAL;
  1070                          break;
  1071                  default:
  1072                          if (base_len > left) {
  1073                                  /* sanity check */
  1074                                  ath10k_warn(ar,
  1075                                              "firmware has invalid 
segment length, %d > %d\n",
  1076                                              base_len, left);
  1077                                  ret = -EINVAL;
  1078                                  break;
  1079                          }
  1080  
  1081                          ret = ath10k_hw_diag_segment_download(ar,
  1082                                                                buf,
  1083                                                                base_addr,
  1084                                                                base_len);
  1085  
  1086                          if (ret)
  1087                                  ath10k_warn(ar,
  1088                                              "failed to download 
firmware via diag interface:%d\n",
  1089                                              ret);
  1090                          break;
  1091                  }
  1092  
  1093                  if (ret || sgmt_end)
  1094                          break;
  1095  
  1096                  metadata = (struct bmi_segmented_metadata *)(buf + 
base_len);
  1097                  left -= base_len;
  1098          }
  1099  
  1100          if (ret == 0)
  1101                  ath10k_dbg(ar, ATH10K_DBG_BOOT,
  1102                             "boot firmware fast diag download 
successfully.\n");
  1103          return ret;
  1104  }
  1105  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

_______________________________________________
ath10k mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/ath10k

Reply via email to