[bug report] soc: qcom: smem: Expose DDR data from SMEM

Dan Carpenter <[email protected]>
Newsgroups org.kernel.vger.linux-arm-msm
Message-ID <[email protected]>
Hello Konrad Dybcio,

Commit 1d234eeafc56 ("soc: qcom: smem: Expose DDR data from SMEM")
from Jul 27, 2026 (linux-next), leads to the following Smatch static
checker warning:

	drivers/soc/qcom/smem_dramc.c:341 smem_dram_infer_struct_version()
	warn: duplicate check 'size == 264 + 6 * 40 + 44 + 68' (previous on line 326)

drivers/soc/qcom/smem_dramc.c
    291 static int smem_dram_infer_struct_version(size_t size)
    292 {
    293         /* Some early versions provided less bytes of less useful data */
    294         if (size < sizeof(struct ddr_details_v3))
    295                 return -EINVAL;
    296 
    297         if (size == sizeof(struct ddr_details_v3))
    298                 return INFO_V3;
    299 
    300         if (size == sizeof(struct ddr_details_v3_14freqs))
    301                 return INFO_V3_WITH_14_FREQS;
    302 
    303         if (size == sizeof(struct ddr_details_v4))
    304                 return INFO_V4;
    305 
    306         if (size == sizeof(struct ddr_details_v5) +
    307                     4 * sizeof(struct ddr_region_v5))
    308                 return INFO_V5;
    309 
    310         if (size == sizeof(struct ddr_details_v5) +
    311                     4 * sizeof(struct ddr_region_v5) +
    312                     sizeof(struct ddr_xbl2quantum_smem_data) +
    313                     sizeof(struct shub_freq_plan_entry))
    314                 return INFO_V5;
    315 
    316         if (size == sizeof(struct ddr_details_v5) +
    317                     6 * sizeof(struct ddr_region_v5))
    318                 return INFO_V5_WITH_6_REGIONS;
    319 
    320         if (size == sizeof(struct ddr_details_v5) +
    321                     6 * sizeof(struct ddr_region_v5) +
    322                     sizeof(struct ddr_xbl2quantum_smem_data) +
    323                     sizeof(struct shub_freq_plan_entry))
    324                 return INFO_V5_WITH_6_REGIONS;
    325 
    326         if (size == sizeof(struct ddr_details_v5) +
    327                     6 * sizeof(struct ddr_region_v5) +
    328                     sizeof(struct ddr_misc_info_v6) +
    329                     sizeof(struct shub_freq_plan_entry))
    330                 return INFO_V6;
                        ^^^^^^^^^^^^^^^

    331 
    332         if (size == sizeof(struct ddr_details_v7) +
    333                     4 * sizeof(struct ddr_region_v5) +
    334                     sizeof(struct ddr_misc_info_v6) +
    335                     sizeof(struct shub_freq_plan_entry))
    336                 return INFO_V7;
    337 
    338         if (size == sizeof(struct ddr_details_v7) +
    339                     6 * sizeof(struct ddr_region_v5) +
    340                     sizeof(struct ddr_misc_info_v6) +
--> 341                     sizeof(struct shub_freq_plan_entry))
    342                 return INFO_V7_WITH_6_REGIONS;

This is dead code.  These sizes are the same.  was _v7 intended
instead of ddr_region_v5?

    343 
    344         return INFO_UNKNOWN;
    345 }

This email is a free service from the Smatch-CI project [smatch.sf.net].

regards,
dan carpenter
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.