Hello Qingqing Zhuo,

This is a semi-automatic email about new static checker warnings.

The patch 8774029f76b9: "drm/amd/display: Add DCN35 CLK_MGR" from Aug
2, 2023, leads to the following Smatch complaint:

    drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn35/dcn35_clk_mgr.c:980 
dcn35_clk_mgr_construct()
    warn: variable dereferenced before check 'ctx->dc_bios->integrated_info' 
(see line 913)

drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn35/dcn35_clk_mgr.c
   912  
   913                  if (ctx->dc_bios->integrated_info->memory_type == 
LpDdr5MemType) {
                            ^^^^^^^^^^^^
Unchecked dereference.  Also why is does AMD code have weird indenting
like this?  It's totally unique to AMD.  I guess there was an if
statement which was deleted or maybe this is autogenerated somehow?

   914                          dcn35_bw_params.wm_table = lpddr5_wm_table;
   915                  } else {
   916                          dcn35_bw_params.wm_table = ddr5_wm_table;
   917                  }
   918                  /* Saved clocks configured at boot for debug purposes */
   919                   
dcn35_dump_clk_registers(&clk_mgr->base.base.boot_snapshot, 
&clk_mgr->base.base, &log_info);
   920  
   921          clk_mgr->base.base.dprefclk_khz = 
dcn35_smu_get_dprefclk(&clk_mgr->base);
   922          clk_mgr->base.base.clks.ref_dtbclk_khz = 
dcn35_smu_get_dtbclk(&clk_mgr->base);
   923  
   924          if (!clk_mgr->base.base.clks.ref_dtbclk_khz)
   925                  dcn35_smu_set_dtbclk(&clk_mgr->base, true);
   926  
   927          clk_mgr->base.base.clks.dtbclk_en = true;
   928          dce_clock_read_ss_info(&clk_mgr->base);
   929          /*when clk src is from FCH, it could have ss, same clock src as 
DPREF clk*/
   930  
   931          dcn35_read_ss_info_from_lut(&clk_mgr->base);
   932          clk_mgr->base.base.dprefclk_khz =
   933                  dce_adjust_dp_ref_freq_for_ss(&clk_mgr->base, 
clk_mgr->base.base.dprefclk_khz);
   934  
   935          clk_mgr->base.base.bw_params = &dcn35_bw_params;
   936  
   937          if (clk_mgr->base.base.ctx->dc->debug.pstate_enabled) {
   938                  int i;
   939                  dcn35_get_dpm_table_from_smu(&clk_mgr->base, 
&smu_dpm_clks);
   940                  DC_LOG_SMU("NumDcfClkLevelsEnabled: %d\n"
   941                                     "NumDispClkLevelsEnabled: %d\n"
   942                                     "NumSocClkLevelsEnabled: %d\n"
   943                                     "VcnClkLevelsEnabled: %d\n"
   944                                     "NumDfPst atesEnabled: %d\n"
   945                                     "MinGfxClk: %d\n"
   946                                     "MaxGfxClk: %d\n",
   947                                     
smu_dpm_clks.dpm_clks->NumDcfClkLevelsEnabled,
   948                                     
smu_dpm_clks.dpm_clks->NumDispClkLevelsEnabled,
   949                                     
smu_dpm_clks.dpm_clks->NumSocClkLevelsEnabled,
   950                                     
smu_dpm_clks.dpm_clks->VcnClkLevelsEnabled,
   951                                     
smu_dpm_clks.dpm_clks->NumDfPstatesEnabled,
   952                                     smu_dpm_clks.dpm_clks->MinGfxClk,
   953                                     smu_dpm_clks.dpm_clks->MaxGfxClk);
   954                  for (i = 0; i < 
smu_dpm_clks.dpm_clks->NumDcfClkLevelsEnabled; i++) {
   955                          
DC_LOG_SMU("smu_dpm_clks.dpm_clks->DcfClocks[%d] = %d\n",
   956                                             i,
   957                                             
smu_dpm_clks.dpm_clks->DcfClocks[i]);
   958                  }
   959                  for (i = 0; i < 
smu_dpm_clks.dpm_clks->NumDispClkLevelsEnabled; i++) {
   960                          
DC_LOG_SMU("smu_dpm_clks.dpm_clks->DispClocks[%d] = %d\n",
   961                                             i, 
smu_dpm_clks.dpm_clks->DispClocks[i]);
   962                  }
   963                  for (i = 0; i < 
smu_dpm_clks.dpm_clks->NumSocClkLevelsEnabled; i++) {
   964                          
DC_LOG_SMU("smu_dpm_clks.dpm_clks->SocClocks[%d] = %d\n",
   965                                             i, 
smu_dpm_clks.dpm_clks->SocClocks[i]);
   966                  }
   967                  for (i = 0; i < NUM_SOC_VOLTAGE_LEVELS; i++)
   968                          
DC_LOG_SMU("smu_dpm_clks.dpm_clks->SocVoltage[%d] = %d\n",
   969                                             i, 
smu_dpm_clks.dpm_clks->SocVoltage[i]);
   970  
   971                  for (i = 0; i < NUM_DF_PSTATE_LEVELS; i++) {
   972                          
DC_LOG_SMU("smu_dpm_clks.dpm_clks.DfPstateTable[%d].FClk = %d\n"
   973                                             
"smu_dpm_clks.dpm_clks->DfPstateTable[%d].MemClk= %d\n"
   974                                             
"smu_dpm_clks.dpm_clks->DfPstateTable[%d].Voltage = %d\n",
   975                                             i, 
smu_dpm_clks.dpm_clks->DfPstateTable[i].FClk,
   976                                             i, 
smu_dpm_clks.dpm_clks->DfPstateTable[i].MemClk,
   977                                             i, 
smu_dpm_clks.dpm_clks->DfPstateTable[i].Voltage);
   978                  }
   979  
   980                  if (ctx->dc_bios && ctx->dc_bios->integrated_info && 
ctx->dc->config.use_default_clock_table == false) {
                            ^^^^^^^^^^^^
This NULL check is too late.  It will already have crashed.

   981                          dcn35_clk_mgr_helper_populate_bw_params(
   982                                          &clk_mgr->base,

regards,
dan carpenter

Reply via email to