drivers/net/wireless/ath/wcn36xx/smd.c:943:33: sparse: sparse: cast truncates bits from constant value (780 becomes 80)

From: kernel test robot
Date: Wed Dec 01 2021 - 15:57:40 EST


tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 58e1100fdc5990b0cc0d4beaf2562a92e621ac7d
commit: d707f812bb0513ea0030d0c9fe2a456bae5a4583 wcn36xx: Channel list update before hardware scan
date: 5 weeks ago
config: riscv-randconfig-s031-20211201 (https://download.01.org/0day-ci/archive/20211202/202112020449.FNKDxUVp-lkp@xxxxxxxxx/config)
compiler: riscv32-linux-gcc (GCC) 11.2.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-dirty
# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d707f812bb0513ea0030d0c9fe2a456bae5a4583
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus master
git checkout d707f812bb0513ea0030d0c9fe2a456bae5a4583
# save the config file to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=riscv SHELL=/bin/bash drivers/net/wireless/ath/wcn36xx/

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


sparse warnings: (new ones prefixed by >>)
>> drivers/net/wireless/ath/wcn36xx/smd.c:943:33: sparse: sparse: cast truncates bits from constant value (780 becomes 80)

vim +943 drivers/net/wireless/ath/wcn36xx/smd.c

931
932 int wcn36xx_smd_update_channel_list(struct wcn36xx *wcn, struct cfg80211_scan_request *req)
933 {
934 struct wcn36xx_hal_update_channel_list_req_msg *msg_body;
935 int ret, i;
936
937 msg_body = kzalloc(sizeof(*msg_body), GFP_KERNEL);
938 if (!msg_body)
939 return -ENOMEM;
940
941 INIT_HAL_MSG((*msg_body), WCN36XX_HAL_UPDATE_CHANNEL_LIST_REQ);
942
> 943 msg_body->num_channel = min_t(u8, req->n_channels, sizeof(msg_body->channels));
944 for (i = 0; i < msg_body->num_channel; i++) {
945 struct wcn36xx_hal_channel_param *param = &msg_body->channels[i];
946 u32 min_power = WCN36XX_HAL_DEFAULT_MIN_POWER;
947 u32 ant_gain = WCN36XX_HAL_DEFAULT_ANT_GAIN;
948
949 param->mhz = req->channels[i]->center_freq;
950 param->band_center_freq1 = req->channels[i]->center_freq;
951 param->band_center_freq2 = 0;
952
953 if (req->channels[i]->flags & IEEE80211_CHAN_NO_IR)
954 param->channel_info |= WCN36XX_HAL_CHAN_INFO_FLAG_PASSIVE;
955
956 if (req->channels[i]->flags & IEEE80211_CHAN_RADAR)
957 param->channel_info |= WCN36XX_HAL_CHAN_INFO_FLAG_DFS;
958
959 if (req->channels[i]->band == NL80211_BAND_5GHZ) {
960 param->channel_info |= WCN36XX_HAL_CHAN_INFO_FLAG_HT;
961 param->channel_info |= WCN36XX_HAL_CHAN_INFO_FLAG_VHT;
962 param->channel_info |= WCN36XX_HAL_CHAN_INFO_PHY_11A;
963 } else {
964 param->channel_info |= WCN36XX_HAL_CHAN_INFO_PHY_11BG;
965 }
966
967 if (min_power > req->channels[i]->max_power)
968 min_power = req->channels[i]->max_power;
969
970 if (req->channels[i]->max_antenna_gain)
971 ant_gain = req->channels[i]->max_antenna_gain;
972
973 u32p_replace_bits(&param->reg_info_1, min_power,
974 WCN36XX_HAL_CHAN_REG1_MIN_PWR_MASK);
975 u32p_replace_bits(&param->reg_info_1, req->channels[i]->max_power,
976 WCN36XX_HAL_CHAN_REG1_MAX_PWR_MASK);
977 u32p_replace_bits(&param->reg_info_1, req->channels[i]->max_reg_power,
978 WCN36XX_HAL_CHAN_REG1_REG_PWR_MASK);
979 u32p_replace_bits(&param->reg_info_1, 0,
980 WCN36XX_HAL_CHAN_REG1_CLASS_ID_MASK);
981 u32p_replace_bits(&param->reg_info_2, ant_gain,
982 WCN36XX_HAL_CHAN_REG2_ANT_GAIN_MASK);
983
984 wcn36xx_dbg(WCN36XX_DBG_HAL,
985 "%s: freq=%u, channel_info=%08x, reg_info1=%08x, reg_info2=%08x\n",
986 __func__, param->mhz, param->channel_info, param->reg_info_1,
987 param->reg_info_2);
988 }
989
990 mutex_lock(&wcn->hal_mutex);
991
992 PREPARE_HAL_BUF(wcn->hal_buf, (*msg_body));
993
994 ret = wcn36xx_smd_send_and_wait(wcn, msg_body->header.len);
995 if (ret) {
996 wcn36xx_err("Sending hal_update_channel_list failed\n");
997 goto out;
998 }
999
1000 ret = wcn36xx_smd_rsp_status_check(wcn->hal_buf, wcn->hal_rsp_len);
1001 if (ret) {
1002 wcn36xx_err("hal_update_channel_list response failed err=%d\n", ret);
1003 goto out;
1004 }
1005
1006 out:
1007 kfree(msg_body);
1008 mutex_unlock(&wcn->hal_mutex);
1009 return ret;
1010 }
1011

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx