aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/1264-drm-amd-display-send-pipe-set-command-to-dmcu-when-b.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/1264-drm-amd-display-send-pipe-set-command-to-dmcu-when-b.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.19.8/1264-drm-amd-display-send-pipe-set-command-to-dmcu-when-b.patch97
1 files changed, 97 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/1264-drm-amd-display-send-pipe-set-command-to-dmcu-when-b.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/1264-drm-amd-display-send-pipe-set-command-to-dmcu-when-b.patch
new file mode 100644
index 00000000..472f8318
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/1264-drm-amd-display-send-pipe-set-command-to-dmcu-when-b.patch
@@ -0,0 +1,97 @@
+From a99b4532a892bef4635391082047a3df2321e556 Mon Sep 17 00:00:00 2001
+From: Josip Pavic <Josip.Pavic@amd.com>
+Date: Wed, 30 Jan 2019 16:23:47 -0500
+Subject: [PATCH 1264/2940] drm/amd/display: send pipe set command to dmcu when
+ backlight is set
+
+[Why]
+Previously, a change removed code that would send a pipe set command
+to dmcu each time the backlight was set, as it was thought to be
+superfluous. However, it is possible for the backlight to be set
+before a valid pipe has been set, which causes DMCU to hang after a
+DPMS restore on some systems.
+
+[How]
+Send a pipe set command to DMCU prior to setting the backlight.
+
+Fixes: 4d3cb100431c ("drm/amd/display: send pipe set command to dmcu when backlight is set")
+Signed-off-by: Josip Pavic <Josip.Pavic@amd.com>
+Reviewed-by: Anthony Koo <Anthony.Koo@amd.com>
+Acked-by: Leo Li <sunpeng.li@amd.com>
+---
+ drivers/gpu/drm/amd/display/dc/dce/dce_abm.c | 45 ++++++++++----------
+ 1 file changed, 23 insertions(+), 22 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_abm.c b/drivers/gpu/drm/amd/display/dc/dce/dce_abm.c
+index a740bc3418a1..da96229db53a 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce/dce_abm.c
++++ b/drivers/gpu/drm/amd/display/dc/dce/dce_abm.c
+@@ -53,6 +53,27 @@
+
+ #define MCP_DISABLE_ABM_IMMEDIATELY 255
+
++static bool dce_abm_set_pipe(struct abm *abm, uint32_t controller_id)
++{
++ struct dce_abm *abm_dce = TO_DCE_ABM(abm);
++ uint32_t rampingBoundary = 0xFFFF;
++
++ REG_WAIT(MASTER_COMM_CNTL_REG, MASTER_COMM_INTERRUPT, 0,
++ 1, 80000);
++
++ /* set ramping boundary */
++ REG_WRITE(MASTER_COMM_DATA_REG1, rampingBoundary);
++
++ /* setDMCUParam_Pipe */
++ REG_UPDATE_2(MASTER_COMM_CMD_REG,
++ MASTER_COMM_CMD_REG_BYTE0, MCP_ABM_PIPE_SET,
++ MASTER_COMM_CMD_REG_BYTE1, controller_id);
++
++ /* notifyDMCUMsg */
++ REG_UPDATE(MASTER_COMM_CNTL_REG, MASTER_COMM_INTERRUPT, 1);
++
++ return true;
++}
+
+ static unsigned int calculate_16_bit_backlight_from_pwm(struct dce_abm *abm_dce)
+ {
+@@ -184,6 +205,8 @@ static void dmcu_set_backlight_level(
+ // Take MSB of fractional part since backlight is not max
+ backlight_8_bit = (backlight_pwm_u16_16 >> 8) & 0xFF;
+
++ dce_abm_set_pipe(&abm_dce->base, controller_id);
++
+ /* waitDMCUReadyForCmd */
+ REG_WAIT(MASTER_COMM_CNTL_REG, MASTER_COMM_INTERRUPT,
+ 0, 1, 80000);
+@@ -293,28 +316,6 @@ static bool dce_abm_set_level(struct abm *abm, uint32_t level)
+ return true;
+ }
+
+-static bool dce_abm_set_pipe(struct abm *abm, uint32_t controller_id)
+-{
+- struct dce_abm *abm_dce = TO_DCE_ABM(abm);
+- uint32_t rampingBoundary = 0xFFFF;
+-
+- REG_WAIT(MASTER_COMM_CNTL_REG, MASTER_COMM_INTERRUPT, 0,
+- 1, 80000);
+-
+- /* set ramping boundary */
+- REG_WRITE(MASTER_COMM_DATA_REG1, rampingBoundary);
+-
+- /* setDMCUParam_Pipe */
+- REG_UPDATE_2(MASTER_COMM_CMD_REG,
+- MASTER_COMM_CMD_REG_BYTE0, MCP_ABM_PIPE_SET,
+- MASTER_COMM_CMD_REG_BYTE1, controller_id);
+-
+- /* notifyDMCUMsg */
+- REG_UPDATE(MASTER_COMM_CNTL_REG, MASTER_COMM_INTERRUPT, 1);
+-
+- return true;
+-}
+-
+ static bool dce_abm_immediate_disable(struct abm *abm)
+ {
+ struct dce_abm *abm_dce = TO_DCE_ABM(abm);
+--
+2.17.1
+