aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4494-drm-amd-display-Don-t-spin-forever-waiting-for-DMCUB.patch
diff options
context:
space:
mode:
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.patch68
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
+