Re: [PATCH v2] interconnect: qcom: implement get_bw with rpmh_read

From: kernel test robot

Date: Wed Sep 09 2026 - 03:57:32 EST


Hi Neil,

kernel test robot noticed the following build warnings:

[auto build test WARNING on cee9395acd8043be0644b25c34bfa86623f2b935]

url: https://github.com/intel-lab-lkp/linux/commits/Neil-Armstrong/interconnect-qcom-implement-get_bw-with-rpmh_read/20260908-100915
base: cee9395acd8043be0644b25c34bfa86623f2b935
patch link: https://lore.kernel.org/r/20260908-topic-sm8x50-icc-read-rpmh-v2-1-b6f1c4205450%40linaro.org
patch subject: [PATCH v2] interconnect: qcom: implement get_bw with rpmh_read
config: arc-randconfig-r112-20260909 (https://download.01.org/0day-ci/archive/20260909/202609091547.IZVghFTg-lkp@xxxxxxxxx/config)
compiler: arc-linux-gcc (GCC) 10.5.0
sparse: v0.6.5-rc1
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260909/202609091547.IZVghFTg-lkp@xxxxxxxxx/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202609091547.IZVghFTg-lkp@xxxxxxxxx/

sparse warnings: (new ones prefixed by >>)
>> drivers/interconnect/qcom/icc-rpmh.c:169:35: sparse: sparse: invalid assignment: *=
drivers/interconnect/qcom/icc-rpmh.c:169:35: sparse: left side has type unsigned long long
drivers/interconnect/qcom/icc-rpmh.c:169:35: sparse: right side has type restricted __le32
>> drivers/interconnect/qcom/icc-rpmh.c:172:33: sparse: sparse: incorrect type in initializer (different base types) @@ expected unsigned int [usertype] __base @@ got restricted __le16 [usertype] width @@
drivers/interconnect/qcom/icc-rpmh.c:172:33: sparse: expected unsigned int [usertype] __base
drivers/interconnect/qcom/icc-rpmh.c:172:33: sparse: got restricted __le16 [usertype] width
drivers/interconnect/qcom/icc-rpmh.c:178:35: sparse: sparse: invalid assignment: *=
drivers/interconnect/qcom/icc-rpmh.c:178:35: sparse: left side has type unsigned long long
drivers/interconnect/qcom/icc-rpmh.c:178:35: sparse: right side has type restricted __le32
drivers/interconnect/qcom/icc-rpmh.c:181:33: sparse: sparse: incorrect type in initializer (different base types) @@ expected unsigned int [usertype] __base @@ got restricted __le16 [usertype] width @@
drivers/interconnect/qcom/icc-rpmh.c:181:33: sparse: expected unsigned int [usertype] __base
drivers/interconnect/qcom/icc-rpmh.c:181:33: sparse: got restricted __le16 [usertype] width
drivers/interconnect/qcom/icc-rpmh.c:231:28: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] unit @@ got unsigned int [usertype] @@
drivers/interconnect/qcom/icc-rpmh.c:231:28: sparse: expected restricted __le32 [usertype] unit
drivers/interconnect/qcom/icc-rpmh.c:231:28: sparse: got unsigned int [usertype]
drivers/interconnect/qcom/icc-rpmh.c:232:29: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le16 [usertype] width @@ got unsigned short [usertype] @@
drivers/interconnect/qcom/icc-rpmh.c:232:29: sparse: expected restricted __le16 [usertype] width
drivers/interconnect/qcom/icc-rpmh.c:232:29: sparse: got unsigned short [usertype]

vim +169 drivers/interconnect/qcom/icc-rpmh.c

138
139 static int qcom_icc_get_bw(struct icc_node *node, u32 *avg, u32 *peak)
140 {
141 struct qcom_icc_node *qn = node->data;
142 u32 avg_max = 0;
143 u32 peak_max = 0;
144 u64 x, y;
145 int i;
146
147 if (!qn->num_bcms) {
148 *avg = INT_MAX;
149 *peak = INT_MAX;
150
151 return 0;
152 }
153
154 for (i = 0; i < qn->num_bcms; ++i) {
155 struct qcom_icc_bcm *bcm = qn->bcms[i];
156
157 /* Use AMC vote for boot-up */
158 x = bcm->vote_x[QCOM_ICC_BUCKET_AMC];
159 y = bcm->vote_y[QCOM_ICC_BUCKET_AMC];
160
161 /* Consider enable mask and convert to INT_MAX */
162 if (bcm->enable_mask) {
163 if (x & bcm->enable_mask)
164 avg_max = INT_MAX;
165 if (y & bcm->enable_mask)
166 peak_max = INT_MAX;
167 } else {
168 if (x) {
> 169 x *= bcm->aux_data.unit;
170 do_div(x, bcm->vote_scale);
171 x *= qn->buswidth * qn->channels;
> 172 do_div(x, bcm->aux_data.width);
173
174 avg_max = max(avg_max, x);
175 }
176
177 if (y) {
178 y *= bcm->aux_data.unit;
179 do_div(y, bcm->vote_scale);
180 y *= qn->buswidth;
181 do_div(y, bcm->aux_data.width);
182
183 peak_max = max(peak_max, y);
184 }
185 }
186 }
187
188 *avg = avg_max;
189 *peak = peak_max;
190
191 return 0;
192 }
193

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