Blob Blame History Raw
From: Zeyu Fan <Zeyu.Fan@amd.com>
Date: Mon, 3 Apr 2017 11:54:11 -0400
Subject: drm/amd/display: Fix hotspot programming during set cursor position.
Git-commit: 632550d71fcf78d495cfd1d321427e634b662f23
Patch-mainline: v4.15-rc1
References: FATE#326289 FATE#326079 FATE#326049 FATE#322398 FATE#326166

- Remove x,y hotspot from dc_cursor_attributes. Only program it
  through setPosition.

Signed-off-by: Zeyu Fan <Zeyu.Fan@amd.com>
Acked-by: Harry Wentland <Harry.Wentland@amd.com>
Reviewed-by: Zeyu Fan <Zeyu.Fan@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Acked-by: Petr Tesarik <ptesarik@suse.com>
---
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c   |    5 ----
 drivers/gpu/drm/amd/display/dc/dc_hw_types.h              |    7 ------
 drivers/gpu/drm/amd/display/dc/dce110/dce110_ipp_cursor.c |   11 +++-------
 drivers/gpu/drm/amd/display/dc/dce120/dce120_ipp_cursor.c |   15 +++-----------
 4 files changed, 8 insertions(+), 30 deletions(-)

--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c
@@ -90,8 +90,6 @@ static void dm_set_cursor(
 	attributes.address.low_part  = lower_32_bits(gpu_addr);
 	attributes.width             = width;
 	attributes.height            = height;
-	attributes.x_hot             = 0;
-	attributes.y_hot             = 0;
 	attributes.color_format      = CURSOR_MODE_COLOR_PRE_MULTIPLIED_ALPHA;
 	attributes.rotation_angle    = 0;
 	attributes.attribute_flags.value = 0;
@@ -118,7 +116,6 @@ static void dm_set_cursor(
 	position.x = x;
 	position.y = y;
 
-	position.hot_spot_enable = true;
 	position.x_hotspot = xorigin;
 	position.y_hotspot = yorigin;
 
@@ -260,7 +257,6 @@ static int dm_crtc_cursor_set(
 		position.enable = false;
 		position.x = 0;
 		position.y = 0;
-		position.hot_spot_enable = false;
 
 		if (amdgpu_crtc->stream) {
 			/*set cursor visible false*/
@@ -344,7 +340,6 @@ static int dm_crtc_cursor_move(struct dr
 	position.x = x;
 	position.y = y;
 
-	position.hot_spot_enable = true;
 	position.x_hotspot = xorigin;
 	position.y_hotspot = yorigin;
 
--- a/drivers/gpu/drm/amd/display/dc/dc_hw_types.h
+++ b/drivers/gpu/drm/amd/display/dc/dc_hw_types.h
@@ -395,11 +395,6 @@ struct dc_cursor_position {
 	 */
 	bool enable;
 
-	/*
-	 * This parameter indicates whether cursor hot spot should be
-	 * programmed
-	 */
-	bool hot_spot_enable;
 };
 
 struct dc_cursor_mi_param {
@@ -464,8 +459,6 @@ struct dc_cursor_attributes {
 	/* Width and height should correspond to cursor surface width x heigh */
 	uint32_t width;
 	uint32_t height;
-	uint32_t x_hot;
-	uint32_t y_hot;
 
 	enum dc_cursor_color_format color_format;
 
--- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_ipp_cursor.c
+++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_ipp_cursor.c
@@ -86,11 +86,10 @@ void dce110_ipp_cursor_set_position(
 
 	program_position(ipp110, position->x, position->y);
 
-	if (position->hot_spot_enable)
-		program_hotspot(
-				ipp110,
-				position->x_hotspot,
-				position->y_hotspot);
+	program_hotspot(
+			ipp110,
+			position->x_hotspot,
+			position->y_hotspot);
 
 	/* unlock cursor registers */
 	lock(ipp110, false);
@@ -111,8 +110,6 @@ bool dce110_ipp_cursor_set_attributes(
 		attributes->attribute_flags.bits.ENABLE_MAGNIFICATION,
 		attributes->attribute_flags.bits.INVERSE_TRANSPARENT_CLAMPING);
 
-	/* Program hot spot coordinates */
-	program_hotspot(ipp110, attributes->x_hot, attributes->y_hot);
 
 	/*
 	 * Program cursor size -- NOTE: HW spec specifies that HW register
--- a/drivers/gpu/drm/amd/display/dc/dce120/dce120_ipp_cursor.c
+++ b/drivers/gpu/drm/amd/display/dc/dce120/dce120_ipp_cursor.c
@@ -151,11 +151,10 @@ void dce120_ipp_cursor_set_position(
 		CURSOR_X_POSITION, position->x,
 		CURSOR_Y_POSITION, position->y);
 
-	if (position->hot_spot_enable)
-		DCP_REG_SET_2(
-			DCP0_CUR_HOT_SPOT,
-			CURSOR_HOT_SPOT_X, position->x_hotspot,
-			CURSOR_HOT_SPOT_Y, position->y_hotspot);
+	DCP_REG_SET_2(
+		DCP0_CUR_HOT_SPOT,
+		CURSOR_HOT_SPOT_X, position->x_hotspot,
+		CURSOR_HOT_SPOT_Y, position->y_hotspot);
 
 	/* unlock cursor registers */
 	lock(ipp110, false);
@@ -176,12 +175,6 @@ bool dce120_ipp_cursor_set_attributes(
 		attributes->attribute_flags.bits.ENABLE_MAGNIFICATION,
 		attributes->attribute_flags.bits.INVERSE_TRANSPARENT_CLAMPING);
 
-	/* Program hot spot coordinates */
-	DCP_REG_SET_2(
-		DCP0_CUR_HOT_SPOT,
-		CURSOR_HOT_SPOT_X, attributes->x_hot,
-		CURSOR_HOT_SPOT_Y, attributes->y_hot);
-
 	/*
 	 * Program cursor size -- NOTE: HW spec specifies that HW register
 	 * stores size as (height - 1, width - 1)