From: kernel test robot <lkp@intel.com>
To: Konrad Dybcio <konradybcio@kernel.org>,
Bjorn Andersson <andersson@kernel.org>,
Kees Cook <kees@kernel.org>,
"Gustavo A. R. Silva" <gustavoars@kernel.org>,
Rob Clark <robin.clark@oss.qualcomm.com>,
Sean Paul <sean@poorly.run>,
Akhil P Oommen <akhilpo@oss.qualcomm.com>,
Dmitry Baryshkov <lumag@kernel.org>,
Abhinav Kumar <abhinav.kumar@linux.dev>,
Jessica Zhang <jesszhan0024@gmail.com>,
Marijn Suijten <marijn.suijten@somainline.org>,
David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>
Cc: oe-kbuild-all@lists.linux.dev, linux-kernel@vger.kernel.org,
linux-arm-msm@vger.kernel.org, linux-hardening@vger.kernel.org,
dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org
Subject: Re: [PATCH v3 1/3] soc: qcom: smem: Expose DDR data from SMEM
Date: Thu, 15 Jan 2026 00:36:02 +0800 [thread overview]
Message-ID: <202601150105.Pod3agMP-lkp@intel.com> (raw)
In-Reply-To: <20260108-topic-smem_dramc-v3-1-6b64df58a017@oss.qualcomm.com>
Hi Konrad,
kernel test robot noticed the following build warnings:
[auto build test WARNING on fc4e91c639c0af93d63c3d5bc0ee45515dd7504a]
url: https://github.com/intel-lab-lkp/linux/commits/Konrad-Dybcio/soc-qcom-smem-Expose-DDR-data-from-SMEM/20260108-222445
base: fc4e91c639c0af93d63c3d5bc0ee45515dd7504a
patch link: https://lore.kernel.org/r/20260108-topic-smem_dramc-v3-1-6b64df58a017%40oss.qualcomm.com
patch subject: [PATCH v3 1/3] soc: qcom: smem: Expose DDR data from SMEM
config: m68k-allyesconfig (https://download.01.org/0day-ci/archive/20260115/202601150105.Pod3agMP-lkp@intel.com/config)
compiler: m68k-linux-gcc (GCC) 15.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260115/202601150105.Pod3agMP-lkp@intel.com/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@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202601150105.Pod3agMP-lkp@intel.com/
All warnings (new ones prefixed by >>):
In function 'smem_dram_parse_v3_data',
inlined from 'smem_dram_parse' at drivers/soc/qcom/smem_dramc.c:380:3:
>> drivers/soc/qcom/smem_dramc.c:216:31: warning: iteration 13 invokes undefined behavior [-Waggressive-loop-optimizations]
216 | if (freq_entry->freq_khz && freq_entry->enabled)
| ~~~~~~~~~~^~~~~~~~~~
drivers/soc/qcom/smem_dramc.c:213:27: note: within this loop
213 | for (int i = 0; i < num_freq_entries; i++) {
| ~~^~~~~~~~~~~~~~~~~~
--
>> Warning: drivers/soc/qcom/smem.c:293 struct member 'debugfs_dir' not described in 'qcom_smem'
>> Warning: drivers/soc/qcom/smem.c:293 struct member 'debugfs_dir' not described in 'qcom_smem'
vim +216 drivers/soc/qcom/smem_dramc.c
203
204 static void smem_dram_parse_v3_data(struct smem_dram *dram, void *data, bool additional_freq_entry)
205 {
206 /* This may be 13 or 14 */
207 int num_freq_entries = MAX_DDR_FREQ_NUM_V3;
208 struct ddr_details_v3 *details = data;
209
210 if (additional_freq_entry)
211 num_freq_entries++;
212
213 for (int i = 0; i < num_freq_entries; i++) {
214 struct ddr_freq_table *freq_entry = &details->ddr_freq_tbl.ddr_freq[i];
215
> 216 if (freq_entry->freq_khz && freq_entry->enabled)
217 dram->frequencies[dram->num_frequencies++] = 1000 * freq_entry->freq_khz;
218 }
219 }
220
221 static void smem_dram_parse_v4_data(struct smem_dram *dram, void *data)
222 {
223 struct ddr_details_v4 *details = data;
224
225 /* Rank 0 channel 0 entry holds the correct value */
226 dram->hbb = details->highest_bank_addr_bit[0][0];
227
228 for (int i = 0; i < MAX_DDR_FREQ_NUM_V3; i++) {
229 struct ddr_freq_table *freq_entry = &details->ddr_freq_tbl.ddr_freq[i];
230
231 if (freq_entry->freq_khz && freq_entry->enabled)
232 dram->frequencies[dram->num_frequencies++] = 1000 * freq_entry->freq_khz;
233 }
234 }
235
236 static void smem_dram_parse_v5_data(struct smem_dram *dram, void *data)
237 {
238 struct ddr_details_v5 *details = data;
239 struct ddr_regions_v5 *region = &details->ddr_regions;
240
241 dram->hbb = region[0].highest_bank_addr_bit;
242
243 for (int i = 0; i < MAX_DDR_FREQ_NUM_V5; i++) {
244 struct ddr_freq_table *freq_entry = &details->ddr_freq_tbl.ddr_freq[i];
245
246 if (freq_entry->freq_khz && freq_entry->enabled)
247 dram->frequencies[dram->num_frequencies++] = 1000 * freq_entry->freq_khz;
248 }
249 }
250
251 static void smem_dram_parse_v7_data(struct smem_dram *dram, void *data)
252 {
253 struct ddr_details_v7 *details = data;
254 struct ddr_regions_v5 *region = &details->ddr_regions;
255
256 dram->hbb = region[0].highest_bank_addr_bit;
257
258 for (int i = 0; i < MAX_DDR_FREQ_NUM_V5; i++) {
259 struct ddr_freq_table *freq_entry = &details->ddr_freq_tbl.ddr_freq[i];
260
261 if (freq_entry->freq_khz && freq_entry->enabled)
262 dram->frequencies[dram->num_frequencies++] = 1000 * freq_entry->freq_khz;
263 }
264 }
265
266 /* The structure contains no version field, so we have to perform some guesswork.. */
267 static int smem_dram_infer_struct_version(size_t size)
268 {
269 /* Some early versions provided less bytes of less useful data */
270 if (size < sizeof(struct ddr_details_v3))
271 return -EINVAL;
272
273 if (size == sizeof(struct ddr_details_v3))
274 return INFO_V3;
275
276 if (size == sizeof(struct ddr_details_v3)
277 + sizeof(struct ddr_freq_table))
278 return INFO_V3_WITH_14_FREQS;
279
280 if (size == sizeof(struct ddr_details_v4))
281 return INFO_V4;
282
283 if (size == sizeof(struct ddr_details_v5)
284 + 4 * sizeof(struct ddr_region_v5))
285 return INFO_V5;
286
287 if (size == sizeof(struct ddr_details_v5)
288 + 4 * sizeof(struct ddr_region_v5)
289 + sizeof(struct ddr_xbl2quantum_smem_data)
290 + sizeof(struct shub_freq_plan_entry))
291 return INFO_V5;
292
293 if (size == sizeof(struct ddr_details_v5)
294 + 6 * sizeof(struct ddr_region_v5))
295 return INFO_V5_WITH_6_REGIONS;
296
297 if (size == sizeof(struct ddr_details_v5)
298 + 6 * sizeof(struct ddr_region_v5)
299 + sizeof(struct ddr_xbl2quantum_smem_data)
300 + sizeof(struct shub_freq_plan_entry))
301 return INFO_V5_WITH_6_REGIONS;
302
303 if (size == sizeof(struct ddr_details_v5)
304 + 6 * sizeof(struct ddr_region_v5)
305 + sizeof(struct ddr_misc_info_v6)
306 + sizeof(struct shub_freq_plan_entry))
307 return INFO_V6;
308
309 if (size == sizeof(struct ddr_details_v7)
310 + 4 * sizeof(struct ddr_region_v5)
311 + sizeof(struct ddr_misc_info_v6)
312 + sizeof(struct shub_freq_plan_entry))
313 return INFO_V7;
314
315 if (size == sizeof(struct ddr_details_v7)
316 + 6 * sizeof(struct ddr_region_v5)
317 + sizeof(struct ddr_misc_info_v6)
318 + sizeof(struct shub_freq_plan_entry))
319 return INFO_V7_WITH_6_REGIONS;
320
321 return INFO_UNKNOWN;
322 }
323
324 static int smem_dram_frequencies_show(struct seq_file *s, void *unused)
325 {
326 struct smem_dram *dram = s->private;
327
328 for (int i = 0; i < dram->num_frequencies; i++)
329 seq_printf(s, "%lu\n", dram->frequencies[i]);
330
331 return 0;
332 }
333 DEFINE_SHOW_ATTRIBUTE(smem_dram_frequencies);
334
335 static int smem_hbb_show(struct seq_file *s, void *unused)
336 {
337 struct smem_dram *dram = s->private;
338
339 if (!dram->hbb)
340 return -EINVAL;
341
342 seq_printf(s, "%d\n", dram->hbb);
343
344 return 0;
345 }
346 DEFINE_SHOW_ATTRIBUTE(smem_hbb);
347
348 struct dentry *smem_dram_parse(struct device *dev)
349 {
350 struct dentry *debugfs_dir;
351 enum ddr_info_version ver;
352 struct smem_dram *dram;
353 size_t actual_size;
354 void *data = NULL;
355
356 /* No need to check qcom_smem_is_available(), this func is called by the SMEM driver */
357 data = qcom_smem_get(QCOM_SMEM_HOST_ANY, SMEM_DDR_INFO_ID, &actual_size);
358 if (IS_ERR_OR_NULL(data))
359 return ERR_PTR(-ENODATA);
360
361 ver = smem_dram_infer_struct_version(actual_size);
362 if (ver < 0) {
363 /* Some SoCs don't provide data that's useful for us */
364 return ERR_PTR(-ENODATA);
365 } else if (ver == INFO_UNKNOWN) {
366 /* In other cases, we may not have added support for a newer struct revision */
367 pr_err("Found an unknown type of DRAM info struct (size = %zu)\n", actual_size);
368 return ERR_PTR(-EINVAL);
369 }
370
371 dram = devm_kzalloc(dev, sizeof(*dram), GFP_KERNEL);
372 if (!dram)
373 return ERR_PTR(-ENOMEM);
374
375 switch (ver) {
376 case INFO_V3:
377 smem_dram_parse_v3_data(dram, data, false);
378 break;
379 case INFO_V3_WITH_14_FREQS:
> 380 smem_dram_parse_v3_data(dram, data, true);
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
next prev parent reply other threads:[~2026-01-14 16:37 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-08 14:21 [PATCH v3 0/3] Retrieve information about DDR from SMEM Konrad Dybcio
2026-01-08 14:21 ` [PATCH v3 1/3] soc: qcom: smem: Expose DDR data " Konrad Dybcio
2026-01-09 13:36 ` Mukesh Ojha
2026-01-27 14:22 ` Konrad Dybcio
2026-01-09 18:08 ` Bjorn Andersson
2026-01-14 16:36 ` kernel test robot [this message]
2026-01-08 14:21 ` [PATCH v3 2/3] soc: qcom: ubwc: Get HBB " Konrad Dybcio
2026-01-08 14:45 ` Dmitry Baryshkov
2026-01-08 17:49 ` Bjorn Andersson
2026-01-09 3:21 ` Dmitry Baryshkov
2026-01-09 17:50 ` Bjorn Andersson
2026-01-10 10:45 ` Dmitry Baryshkov
2026-01-13 15:31 ` Konrad Dybcio
2026-01-13 16:29 ` Dmitry Baryshkov
2026-02-17 12:59 ` Konrad Dybcio
2026-02-17 22:53 ` Dmitry Baryshkov
2026-02-17 23:08 ` Rob Clark
2026-01-13 15:36 ` Konrad Dybcio
2026-01-08 14:21 ` [PATCH v3 3/3] drm/msm/adreno: Trust the SSoT UBWC config Konrad Dybcio
2026-01-08 14:46 ` Dmitry Baryshkov
2026-01-16 18:32 ` Rob Clark
2026-02-28 22:16 ` Val Packett
2026-01-09 8:20 ` [PATCH v3 0/3] Retrieve information about DDR from SMEM Neil Armstrong
2026-01-09 10:15 ` Konrad Dybcio
2026-01-09 8:31 ` Neil Armstrong
2026-01-09 19:11 ` Connor Abbott
2026-01-09 20:41 ` Rob Clark
2026-01-09 21:03 ` Connor Abbott
2026-01-10 4:17 ` Rob Clark
2026-02-17 11:23 ` Konrad Dybcio
2026-02-18 15:58 ` Connor Abbott
2026-01-10 10:49 ` Dmitry Baryshkov
2026-01-13 15:31 ` Konrad Dybcio
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202601150105.Pod3agMP-lkp@intel.com \
--to=lkp@intel.com \
--cc=abhinav.kumar@linux.dev \
--cc=airlied@gmail.com \
--cc=akhilpo@oss.qualcomm.com \
--cc=andersson@kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=freedreno@lists.freedesktop.org \
--cc=gustavoars@kernel.org \
--cc=jesszhan0024@gmail.com \
--cc=kees@kernel.org \
--cc=konradybcio@kernel.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-hardening@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lumag@kernel.org \
--cc=marijn.suijten@somainline.org \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=robin.clark@oss.qualcomm.com \
--cc=sean@poorly.run \
--cc=simona@ffwll.ch \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox