diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/0431-drm-amd-display-Disable-ABM-when-eDP-is-disabled.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.14.71/0431-drm-amd-display-Disable-ABM-when-eDP-is-disabled.patch | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/0431-drm-amd-display-Disable-ABM-when-eDP-is-disabled.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/0431-drm-amd-display-Disable-ABM-when-eDP-is-disabled.patch new file mode 100644 index 00000000..f820d845 --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/0431-drm-amd-display-Disable-ABM-when-eDP-is-disabled.patch @@ -0,0 +1,121 @@ +From 42de1796c282d4d76aa93e64d6e8b68f5e14a861 Mon Sep 17 00:00:00 2001 +From: Amy Zhang <Amy.Zhang@amd.com> +Date: Fri, 12 May 2017 15:54:29 -0400 +Subject: [PATCH 0431/4131] drm/amd/display: Disable ABM when eDP is disabled + +- Add immediate ABM disable when eDP is disabled +- Fix purple screen when ABM is mistakenly enabled +on non eDP display + +Signed-off-by: Amy Zhang <Amy.Zhang@amd.com> +Reviewed-by: Tony Cheng <Tony.Cheng@amd.com> +Acked-by: Harry Wentland <Harry.Wentland@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/display/dc/core/dc_link.c | 16 ++++++++++++++++ + drivers/gpu/drm/amd/display/dc/dc.h | 2 ++ + drivers/gpu/drm/amd/display/dc/dce/dce_abm.c | 21 +++++++++++++++++++++ + drivers/gpu/drm/amd/display/dc/inc/hw/abm.h | 1 + + 4 files changed, 40 insertions(+) + +diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link.c b/drivers/gpu/drm/amd/display/dc/core/dc_link.c +index ffc0eea..5997764 100644 +--- a/drivers/gpu/drm/amd/display/dc/core/dc_link.c ++++ b/drivers/gpu/drm/amd/display/dc/core/dc_link.c +@@ -1415,6 +1415,22 @@ bool dc_link_set_backlight_level(const struct dc_link *dc_link, uint32_t level, + return true; + } + ++ ++bool dc_link_set_abm_disable(const struct dc_link *dc_link) ++{ ++ struct core_link *link = DC_LINK_TO_CORE(dc_link); ++ struct core_dc *core_dc = DC_TO_CORE(link->ctx->dc); ++ struct abm *abm = core_dc->res_pool->abm; ++ ++ if ((abm == NULL) || (abm->funcs->set_backlight_level == NULL)) ++ return false; ++ ++ abm->funcs->set_abm_immediate_disable(abm); ++ ++ return true; ++} ++ ++ + bool dc_link_set_psr_enable(const struct dc_link *dc_link, bool enable) + { + struct core_link *link = DC_LINK_TO_CORE(dc_link); +diff --git a/drivers/gpu/drm/amd/display/dc/dc.h b/drivers/gpu/drm/amd/display/dc/dc.h +index 9a19d6f..0610805 100644 +--- a/drivers/gpu/drm/amd/display/dc/dc.h ++++ b/drivers/gpu/drm/amd/display/dc/dc.h +@@ -714,6 +714,8 @@ const struct graphics_object_id dc_get_link_id_at_index( + bool dc_link_set_backlight_level(const struct dc_link *dc_link, uint32_t level, + uint32_t frame_ramp, const struct dc_stream *stream); + ++bool dc_link_set_abm_disable(const struct dc_link *dc_link); ++ + bool dc_link_set_psr_enable(const struct dc_link *dc_link, bool enable); + + bool dc_link_setup_psr(const struct dc_link *dc_link, +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 cefffe1..b4fa782 100644 +--- a/drivers/gpu/drm/amd/display/dc/dce/dce_abm.c ++++ b/drivers/gpu/drm/amd/display/dc/dce/dce_abm.c +@@ -49,6 +49,8 @@ + #define MCP_ABM_PIPE_SET 0x66 + #define MCP_BL_SET 0x67 + ++#define MCP_DISABLE_ABM_IMMEDIATELY 255 ++ + struct abm_backlight_registers { + unsigned int BL_PWM_CNTL; + unsigned int BL_PWM_CNTL2; +@@ -315,6 +317,24 @@ static bool dce_abm_set_level(struct abm *abm, uint32_t level) + return true; + } + ++static bool dce_abm_immediate_disable(struct abm *abm) ++{ ++ struct dce_abm *abm_dce = TO_DCE_ABM(abm); ++ ++ REG_WAIT(MASTER_COMM_CNTL_REG, MASTER_COMM_INTERRUPT, 0, ++ 100, 800); ++ ++ /* setDMCUParam_ABMLevel */ ++ REG_UPDATE_2(MASTER_COMM_CMD_REG, ++ MASTER_COMM_CMD_REG_BYTE0, MCP_ABM_LEVEL_SET, ++ MASTER_COMM_CMD_REG_BYTE2, MCP_DISABLE_ABM_IMMEDIATELY); ++ ++ /* notifyDMCUMsg */ ++ REG_UPDATE(MASTER_COMM_CNTL_REG, MASTER_COMM_INTERRUPT, 1); ++ ++ return true; ++} ++ + static bool dce_abm_init_backlight(struct abm *abm) + { + struct dce_abm *abm_dce = TO_DCE_ABM(abm); +@@ -414,6 +434,7 @@ static const struct abm_funcs dce_funcs = { + .init_backlight = dce_abm_init_backlight, + .set_backlight_level = dce_abm_set_backlight_level, + .get_current_backlight_8_bit = dce_abm_get_current_backlight_8_bit, ++ .set_abm_immediate_disable = dce_abm_immediate_disable, + .is_dmcu_initialized = is_dmcu_initialized + }; + +diff --git a/drivers/gpu/drm/amd/display/dc/inc/hw/abm.h b/drivers/gpu/drm/amd/display/dc/inc/hw/abm.h +index da465b3..c93b9b9 100644 +--- a/drivers/gpu/drm/amd/display/dc/inc/hw/abm.h ++++ b/drivers/gpu/drm/amd/display/dc/inc/hw/abm.h +@@ -35,6 +35,7 @@ struct abm { + struct abm_funcs { + void (*abm_init)(struct abm *abm); + bool (*set_abm_level)(struct abm *abm, unsigned int abm_level); ++ bool (*set_abm_immediate_disable)(struct abm *abm); + bool (*init_backlight)(struct abm *abm); + bool (*set_backlight_level)(struct abm *abm, + unsigned int backlight_level, +-- +2.7.4 + |