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: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> Reviewed-by: Sun peng Li <Sunpeng.Li@amd.com> Acked-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
46250a0cba
commit
56fc13fe6c
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue