Commit 56fc13fe authored by Nicholas Kazlauskas's avatar Nicholas Kazlauskas Committed by Alex Deucher
Browse files

drm/amd/display: Don't spin forever waiting for DMCUB phy/auto init



[Why]
It's an interface violation to use infinite loops within DMUB
service functions and we'll lock up the kernel by doing so.

[How]
Revert the function back to its intended functionality.
Move the infinite loops into DC/DM as necessary.

Signed-off-by: default avatarNicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Reviewed-by: default avatarSun peng Li <Sunpeng.Li@amd.com>
Acked-by: default avatarRodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 46250a0c
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -112,8 +112,10 @@ void dc_dmub_srv_wait_phy_init(struct dc_dmub_srv *dc_dmub_srv)
	struct dc_context *dc_ctx = dc_dmub_srv->ctx;
	enum dmub_status status;

	status = dmub_srv_wait_for_phy_init(dmub, 1000000);
	if (status != DMUB_STATUS_OK)
	status = dmub_srv_wait_for_phy_init(dmub, 10000000);
	if (status != DMUB_STATUS_OK) {
		DC_ERROR("Error waiting for DMUB phy init: status=%d\n",
			 status);
		ASSERT(0);
	}
}
+2 −7
Original line number Diff line number Diff line
@@ -400,19 +400,14 @@ enum dmub_status dmub_srv_wait_for_phy_init(struct dmub_srv *dmub,
	if (!dmub->hw_init || !dmub->hw_funcs.is_phy_init)
		return DMUB_STATUS_INVALID;

/*	for (i = 0; i <= timeout_us; i += 10) {
	for (i = 0; i <= timeout_us; i += 10) {
		if (dmub->hw_funcs.is_phy_init(dmub))
			return DMUB_STATUS_OK;

		udelay(10);
	}*/
	while (!dmub->hw_funcs.is_phy_init(dmub)) {
		ASSERT(i <= timeout_us);
		i += 10;
		udelay(10);
	}

	return DMUB_STATUS_OK;
	return DMUB_STATUS_TIMEOUT;
}

enum dmub_status dmub_srv_wait_for_idle(struct dmub_srv *dmub,