[bug report] drm/amd/display: move wm ranges reporting to end of init hw

Dan Carpenter dan.carpenter at oracle.com
Tue Oct 29 18:30:22 UTC 2019


Hello Eric Yang,

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

The patch 622a88c8259e: "drm/amd/display: move wm ranges reporting to 
end of init hw" from Sep 24, 2019, leads to the following Smatch 
complaint:

    drivers/gpu/drm/amd/amdgpu/../display/dc/dcn10/dcn10_hw_sequencer.c:1308 dcn10_init_hw()
    error: we previously assumed 'dc->clk_mgr' could be null (see line 1188)

drivers/gpu/drm/amd/amdgpu/../display/dc/dcn10/dcn10_hw_sequencer.c
  1187	
  1188		if (dc->clk_mgr && dc->clk_mgr->funcs->init_clocks)
                    ^^^^^^^^^^^
The existing code assumed this could be NULL.  (Probably we should
remove this check?).

  1189			dc->clk_mgr->funcs->init_clocks(dc->clk_mgr);
  1190	
  1191		// Initialize the dccg
  1192		if (dc->res_pool->dccg && dc->res_pool->dccg->funcs->dccg_init)
  1193			dc->res_pool->dccg->funcs->dccg_init(res_pool->dccg);
  1194	
  1195		if (IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) {
  1196	
  1197			REG_WRITE(REFCLK_CNTL, 0);
  1198			REG_UPDATE(DCHUBBUB_GLOBAL_TIMER_CNTL, DCHUBBUB_GLOBAL_TIMER_ENABLE, 1);
  1199			REG_WRITE(DIO_MEM_PWR_CTRL, 0);
  1200	
  1201			if (!dc->debug.disable_clock_gate) {
  1202				/* enable all DCN clock gating */
  1203				REG_WRITE(DCCG_GATE_DISABLE_CNTL, 0);
  1204	
  1205				REG_WRITE(DCCG_GATE_DISABLE_CNTL2, 0);
  1206	
  1207				REG_UPDATE(DCFCLK_CNTL, DCFCLK_GATE_DIS, 0);
  1208			}
  1209	
  1210			//Enable ability to power gate / don't force power on permanently
  1211			dc->hwss.enable_power_gating_plane(hws, true);
  1212	
  1213			return;
  1214		}
  1215	
  1216		if (!dcb->funcs->is_accelerated_mode(dcb))
  1217			dc->hwss.disable_vga(dc->hwseq);
  1218	
  1219		dc->hwss.bios_golden_init(dc);
  1220		if (dc->ctx->dc_bios->fw_info_valid) {
  1221			res_pool->ref_clocks.xtalin_clock_inKhz =
  1222					dc->ctx->dc_bios->fw_info.pll_info.crystal_frequency;
  1223	
  1224			if (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) {
  1225				if (res_pool->dccg && res_pool->hubbub) {
  1226	
  1227					(res_pool->dccg->funcs->get_dccg_ref_freq)(res_pool->dccg,
  1228							dc->ctx->dc_bios->fw_info.pll_info.crystal_frequency,
  1229							&res_pool->ref_clocks.dccg_ref_clock_inKhz);
  1230	
  1231					(res_pool->hubbub->funcs->get_dchub_ref_freq)(res_pool->hubbub,
  1232							res_pool->ref_clocks.dccg_ref_clock_inKhz,
  1233							&res_pool->ref_clocks.dchub_ref_clock_inKhz);
  1234				} else {
  1235					// Not all ASICs have DCCG sw component
  1236					res_pool->ref_clocks.dccg_ref_clock_inKhz =
  1237							res_pool->ref_clocks.xtalin_clock_inKhz;
  1238					res_pool->ref_clocks.dchub_ref_clock_inKhz =
  1239							res_pool->ref_clocks.xtalin_clock_inKhz;
  1240				}
  1241			}
  1242		} else
  1243			ASSERT_CRITICAL(false);
  1244	
  1245		for (i = 0; i < dc->link_count; i++) {
  1246			/* Power up AND update implementation according to the
  1247			 * required signal (which may be different from the
  1248			 * default signal on connector).
  1249			 */
  1250			struct dc_link *link = dc->links[i];
  1251	
  1252			link->link_enc->funcs->hw_init(link->link_enc);
  1253	
  1254			/* Check for enabled DIG to identify enabled display */
  1255			if (link->link_enc->funcs->is_dig_enabled &&
  1256				link->link_enc->funcs->is_dig_enabled(link->link_enc))
  1257				link->link_status.link_active = true;
  1258		}
  1259	
  1260		/* Power gate DSCs */
  1261	#ifdef CONFIG_DRM_AMD_DC_DSC_SUPPORT
  1262		for (i = 0; i < res_pool->res_cap->num_dsc; i++)
  1263			if (dc->hwss.dsc_pg_control != NULL)
  1264				dc->hwss.dsc_pg_control(hws, res_pool->dscs[i]->inst, false);
  1265	#endif
  1266	
  1267		/* If taking control over from VBIOS, we may want to optimize our first
  1268		 * mode set, so we need to skip powering down pipes until we know which
  1269		 * pipes we want to use.
  1270		 * Otherwise, if taking control is not possible, we need to power
  1271		 * everything down.
  1272		 */
  1273		if (dcb->funcs->is_accelerated_mode(dcb) || dc->config.power_down_display_on_boot) {
  1274			dc->hwss.init_pipes(dc, dc->current_state);
  1275		}
  1276	
  1277		for (i = 0; i < res_pool->audio_count; i++) {
  1278			struct audio *audio = res_pool->audios[i];
  1279	
  1280			audio->funcs->hw_init(audio);
  1281		}
  1282	
  1283		if (abm != NULL) {
  1284			abm->funcs->init_backlight(abm);
  1285			abm->funcs->abm_init(abm);
  1286		}
  1287	
  1288		if (dmcu != NULL)
  1289			dmcu->funcs->dmcu_init(dmcu);
  1290	
  1291		if (abm != NULL && dmcu != NULL)
  1292			abm->dmcu_is_running = dmcu->funcs->is_dmcu_initialized(dmcu);
  1293	
  1294		/* power AFMT HDMI memory TODO: may move to dis/en output save power*/
  1295		REG_WRITE(DIO_MEM_PWR_CTRL, 0);
  1296	
  1297		if (!dc->debug.disable_clock_gate) {
  1298			/* enable all DCN clock gating */
  1299			REG_WRITE(DCCG_GATE_DISABLE_CNTL, 0);
  1300	
  1301			REG_WRITE(DCCG_GATE_DISABLE_CNTL2, 0);
  1302	
  1303			REG_UPDATE(DCFCLK_CNTL, DCFCLK_GATE_DIS, 0);
  1304		}
  1305	
  1306		dc->hwss.enable_power_gating_plane(dc->hwseq, true);
  1307	
  1308		if (dc->clk_mgr->funcs->notify_wm_ranges)
                    ^^^^^^^^^^^^^
The patch adds a new unconditional dereference.

  1309			dc->clk_mgr->funcs->notify_wm_ranges(dc->clk_mgr);
  1310	

regards,
dan carpenter


More information about the amd-gfx mailing list