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