[bug report] drm/amd/display: Add DCN35 CLK_MGR
Dan Carpenter
dan.carpenter at linaro.org
Wed Sep 6 10:50:23 UTC 2023
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
More information about the amd-gfx
mailing list