diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4494-drm-amd-display-Don-t-spin-forever-waiting-for-DMCUB.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4494-drm-amd-display-Don-t-spin-forever-waiting-for-DMCUB.patch | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4494-drm-amd-display-Don-t-spin-forever-waiting-for-DMCUB.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4494-drm-amd-display-Don-t-spin-forever-waiting-for-DMCUB.patch new file mode 100644 index 00000000..e7f45eed --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4494-drm-amd-display-Don-t-spin-forever-waiting-for-DMCUB.patch @@ -0,0 +1,68 @@ +From 19ec27063b8d4efbfcd0c9f2c0399ce53b87a2bb Mon Sep 17 00:00:00 2001 +From: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> +Date: Mon, 4 Nov 2019 13:32:46 -0500 +Subject: [PATCH 4494/4736] 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> +--- + drivers/gpu/drm/amd/display/dc/dc_dmub_srv.c | 6 ++++-- + drivers/gpu/drm/amd/display/dmub/src/dmub_srv.c | 9 ++------- + 2 files changed, 6 insertions(+), 9 deletions(-) + +diff --git a/drivers/gpu/drm/amd/display/dc/dc_dmub_srv.c b/drivers/gpu/drm/amd/display/dc/dc_dmub_srv.c +index 61cefe0a3790..74ffe53eb49d 100644 +--- a/drivers/gpu/drm/amd/display/dc/dc_dmub_srv.c ++++ b/drivers/gpu/drm/amd/display/dc/dc_dmub_srv.c +@@ -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); ++ } + } +diff --git a/drivers/gpu/drm/amd/display/dmub/src/dmub_srv.c b/drivers/gpu/drm/amd/display/dmub/src/dmub_srv.c +index 5ae1906ff1b1..60c574a39c6a 100644 +--- a/drivers/gpu/drm/amd/display/dmub/src/dmub_srv.c ++++ b/drivers/gpu/drm/amd/display/dmub/src/dmub_srv.c +@@ -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, +-- +2.17.1 + |