[PATCH 02/31] drm/amd/display: Don't call PSR func if DMCU is off

Harry Wentland harry.wentland at amd.com
Fri May 12 15:20:35 UTC 2017


Change-Id: I3e5b4f95429a959d0981ba57f23bd4d9fc60a604
Signed-off-by: Harry Wentland <harry.wentland at amd.com>
---
 drivers/gpu/drm/amd/display/dc/core/dc_link.c   |  8 --------
 drivers/gpu/drm/amd/display/dc/dce/dce_abm.c    | 23 +++++++++++++++--------
 drivers/gpu/drm/amd/display/dc/dce/dce_clocks.c | 11 ++++++++---
 drivers/gpu/drm/amd/display/dc/inc/hw/abm.h     |  1 +
 4 files changed, 24 insertions(+), 19 deletions(-)

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 6f78403e2d64..95d042a15409 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc_link.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_link.c
@@ -46,14 +46,6 @@
 #include "dce/dce_11_0_enum.h"
 #include "dce/dce_11_0_sh_mask.h"
 
-#ifndef mmDMCU_STATUS__UC_IN_RESET__SHIFT
-#define mmDMCU_STATUS__UC_IN_RESET__SHIFT 0x0
-#endif
-
-#ifndef mmDMCU_STATUS__UC_IN_RESET_MASK
-#define mmDMCU_STATUS__UC_IN_RESET_MASK 0x00000001L
-#endif
-
 #define LINK_INFO(...) \
 	dm_logger_write(dc_ctx->logger, LOG_HW_HOTPLUG, \
 		__VA_ARGS__)
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 45a3079c0973..393c43559825 100644
--- a/drivers/gpu/drm/amd/display/dc/dce/dce_abm.c
+++ b/drivers/gpu/drm/amd/display/dc/dce/dce_abm.c
@@ -366,6 +366,16 @@ static bool dce_abm_init_backlight(struct abm *abm)
 	return true;
 }
 
+static bool is_dmcu_initialized(struct abm *abm)
+{
+	struct dce_abm *abm_dce = TO_DCE_ABM(abm);
+	unsigned int dmcu_uc_reset;
+
+	REG_GET(DMCU_STATUS, UC_IN_RESET, &dmcu_uc_reset);
+
+	return !dmcu_uc_reset;
+}
+
 static bool dce_abm_set_backlight_level(
 		struct abm *abm,
 		unsigned int backlight_level,
@@ -373,23 +383,19 @@ static bool dce_abm_set_backlight_level(
 		unsigned int controller_id)
 {
 	struct dce_abm *abm_dce = TO_DCE_ABM(abm);
-	unsigned int dmcu_uc_reset;
 
 	dm_logger_write(abm->ctx->logger, LOG_BACKLIGHT,
 			"New Backlight level: %d (0x%X)\n",
 			backlight_level, backlight_level);
 
-	REG_GET(DMCU_STATUS, UC_IN_RESET, &dmcu_uc_reset);
-
 	/* If DMCU is in reset state, DMCU is uninitialized */
-	if (dmcu_uc_reset) {
-		driver_set_backlight_level(abm_dce, backlight_level);
-	} else {
+	if (is_dmcu_initialized(abm))
 		dmcu_set_backlight_level(abm_dce,
 				backlight_level,
 				frame_ramp,
 				controller_id);
-	}
+	else
+		driver_set_backlight_level(abm_dce, backlight_level);
 
 	return true;
 }
@@ -398,7 +404,8 @@ static const struct abm_funcs dce_funcs = {
 	.abm_init = dce_abm_init,
 	.set_abm_level = dce_abm_set_level,
 	.init_backlight = dce_abm_init_backlight,
-	.set_backlight_level = dce_abm_set_backlight_level
+	.set_backlight_level = dce_abm_set_backlight_level,
+	.is_dmcu_initialized = is_dmcu_initialized
 };
 
 static void dce_abm_construct(
diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_clocks.c b/drivers/gpu/drm/amd/display/dc/dce/dce_clocks.c
index 6e56d8308d66..8bc0d0ff3a2e 100644
--- a/drivers/gpu/drm/amd/display/dc/dce/dce_clocks.c
+++ b/drivers/gpu/drm/amd/display/dc/dce/dce_clocks.c
@@ -29,11 +29,15 @@
 #include "fixed32_32.h"
 #include "bios_parser_interface.h"
 #include "dc.h"
+#include "core_dc.h"
+#include "dce_abm.h"
 #if defined(CONFIG_DRM_AMD_DC_DCN1_0)
 #include "dcn_calcs.h"
 #include "core_dc.h"
 #endif
 
+
+
 #define TO_DCE_CLOCKS(clocks)\
 	container_of(clocks, struct dce_disp_clk, base)
 
@@ -374,6 +378,8 @@ static void dce112_set_clock(
 	struct dce_disp_clk *clk_dce = TO_DCE_CLOCKS(clk);
 	struct bp_set_dce_clock_parameters dce_clk_params;
 	struct dc_bios *bp = clk->ctx->dc_bios;
+	struct core_dc *core_dc = DC_TO_CORE(clk->ctx->dc);
+	struct abm *abm =  core_dc->res_pool->abm;
 
 	/* Prepare to program display clock*/
 	memset(&dce_clk_params, 0, sizeof(dce_clk_params));
@@ -404,9 +410,8 @@ static void dce112_set_clock(
 
 	bp->funcs->set_dce_clock(bp, &dce_clk_params);
 
-#if defined(CONFIG_DRM_AMD_DC_DCN1_0)
-	dce_psr_wait_loop(clk_dce, requested_clk_khz);
-#endif
+	if (abm->funcs->is_dmcu_initialized(abm))
+		dce_psr_wait_loop(clk_dce, requested_clk_khz);
 
 }
 
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 7d07b7922391..ceabbd3bf5f8 100644
--- a/drivers/gpu/drm/amd/display/dc/inc/hw/abm.h
+++ b/drivers/gpu/drm/amd/display/dc/inc/hw/abm.h
@@ -40,6 +40,7 @@ struct abm_funcs {
 			unsigned int backlight_level,
 			unsigned int frame_ramp,
 			unsigned int controller_id);
+	bool (*is_dmcu_initialized)(struct abm *abm);
 };
 
 #endif
-- 
2.11.0



More information about the amd-gfx mailing list