Hello Alex Hung,

Commit 0e967e086e75 ("drm/amd/display: Extract connector and encoder
code to amdgpu_dm_connector") from Apr 27, 2026, leads to the
following Smatch complaint:

    drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_connector.c:1278 
apply_dsc_policy_for_stream()
    warn: variable dereferenced before check 'aconnector->dc_link' (see line 
1221)

drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_connector.c
  1220          link_bandwidth_kbps = 
dc_link_bandwidth_kbps(aconnector->dc_link,
                                                             ^^^^^^^^^^^^^^^^^^^
Unchecked dereference

  1221                                                          
dc_link_get_link_cap(aconnector->dc_link));
  1222  
  1223          /* Set DSC policy according to dsc_clock_en */
  1224          dc_dsc_policy_set_enable_dsc_when_not_needed(
  1225                  aconnector->dsc_settings.dsc_force_enable == 
DSC_CLK_FORCE_ENABLE);
  1226  
  1227          if (sink->sink_signal == SIGNAL_TYPE_EDP &&
  1228              !aconnector->dc_link->panel_config.dsc.disable_dsc_edp &&

Lots of unchecked dereferefences really...

  1229              dc->caps.edp_dsc_support && 
aconnector->dsc_settings.dsc_force_enable != DSC_CLK_FORCE_DISABLE) {
  1230  
  1231                  apply_dsc_policy_for_edp(aconnector, sink, stream, 
dsc_caps, max_dsc_target_bpp_limit_override);
  1232  
  1233          } else if (sink->sink_signal == SIGNAL_TYPE_DISPLAY_PORT) {
  1234                  if (sink->link->dpcd_caps.dongle_type == 
DISPLAY_DONGLE_NONE) {
  1235                          if 
(dc_dsc_compute_config(aconnector->dc_link->ctx->dc->res_pool->dscs[0],
  1236                                                  dsc_caps,
  1237                                                  &dsc_options,
  1238                                                  link_bandwidth_kbps,
  1239                                                  &stream->timing,
  1240                                                  
dc_link_get_highest_encoding_format(aconnector->dc_link),
  1241                                                  
&stream->timing.dsc_cfg)) {
  1242                                  stream->timing.flags.DSC = 1;
  1243                                  drm_dbg_driver(drm_connector->dev, "%s: 
SST_DSC [%s] DSC is selected from SST RX\n",
  1244                                                          __func__, 
drm_connector->name);
  1245                          }
  1246                  } else if (sink->link->dpcd_caps.dongle_type == 
DISPLAY_DONGLE_DP_HDMI_CONVERTER) {
  1247                          timing_bw_in_kbps = 
dc_bandwidth_in_kbps_from_timing(&stream->timing,
  1248                                          
dc_link_get_highest_encoding_format(aconnector->dc_link));
  1249                          converter_bw_in_kbps = 
aconnector->dc_link->dpcd_caps.dongle_caps.dp_hdmi_frl_max_link_bw_in_kbps;
  1250                          sink_bw_in_kbps = 
dc_link_bw_kbps_from_raw_frl_link_rate_data(dc, sink->edid_caps.max_frl_rate);
  1251                          dsc_sink_bw_in_kbps = 
dc_link_bw_kbps_from_raw_frl_link_rate_data(dc, 
sink->edid_caps.frl_dsc_max_frl_rate);
  1252  
  1253                          if (dsc_caps->is_frl) {
  1254                                  max_supported_bw_in_kbps = 
min(link_bandwidth_kbps, converter_bw_in_kbps);
  1255                                  max_supported_bw_in_kbps = 
min(max_supported_bw_in_kbps, sink_bw_in_kbps);
  1256                                  dsc_max_supported_bw_in_kbps = 
min(max_supported_bw_in_kbps, dsc_sink_bw_in_kbps);
  1257                          } else {
  1258                                  max_supported_bw_in_kbps = 
link_bandwidth_kbps;
  1259                                  dsc_max_supported_bw_in_kbps = 
link_bandwidth_kbps;
  1260                          }
  1261  
  1262                          if (timing_bw_in_kbps > 
max_supported_bw_in_kbps &&
  1263                                          max_supported_bw_in_kbps > 0 &&
  1264                                          dsc_max_supported_bw_in_kbps > 
0)
  1265                                  if 
(dc_dsc_compute_config(aconnector->dc_link->ctx->dc->res_pool->dscs[0],
  1266                                                  dsc_caps,
  1267                                                  &dsc_options,
  1268                                                  
dsc_max_supported_bw_in_kbps,
  1269                                                  &stream->timing,
  1270                                                  
dc_link_get_highest_encoding_format(aconnector->dc_link),
  1271                                                  
&stream->timing.dsc_cfg)) {
  1272                                          stream->timing.flags.DSC = 1;
  1273                                          
drm_dbg_driver(drm_connector->dev, "%s: SST_DSC [%s] DSC is selected from %s\n",
  1274                                                          __func__, 
drm_connector->name,
  1275                                                          
(dsc_caps->is_frl == 1) ? "HDMI FRL RX" : "DP-HDMI PCON");
  1276                                  }
  1277                  }
  1278          } else if (aconnector->dc_link && sink->sink_signal == 
SIGNAL_TYPE_HDMI_FRL) {
                           ^^^^^^^^^^^^^^^^^^^
Checked too late.

  1279                  struct dc_dsc_policy dsc_policy = {0};
  1280  

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

regards,
dan carpenter

Reply via email to