aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0219-drm-amd-display-Don-t-attempt-to-program-missing-reg.patch
blob: 22672923b5c9d3557a7816902beb842d5d118720 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
From 7d0233a8e3dca32a8d6358434943dcc62d1fab24 Mon Sep 17 00:00:00 2001
From: Jordan Lazare <Jordan.Lazare@amd.com>
Date: Tue, 14 Feb 2017 18:20:35 -0500
Subject: [PATCH 0219/4131] drm/amd/display: Don't attempt to program missing
 register fields on DCE8

When moving to a common dce/ infrastructure for all asics, some register fields
do not exist in DCE8, and cause ASSERTS and debug spam.

Instead, check to see whether a register field mask is valid before attempting
to program the register field

Signed-off-by: Jordan Lazare <Jordan.Lazare@amd.com>
Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
---
 drivers/gpu/drm/amd/display/dc/dce/dce_hwseq.c     | 29 ++++++++++++++--------
 drivers/gpu/drm/amd/display/dc/dce/dce_transform.c | 12 ++++++---
 2 files changed, 28 insertions(+), 13 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_hwseq.c b/drivers/gpu/drm/amd/display/dc/dce/dce_hwseq.c
index 0eee135..8eb7556 100644
--- a/drivers/gpu/drm/amd/display/dc/dce/dce_hwseq.c
+++ b/drivers/gpu/drm/amd/display/dc/dce/dce_hwseq.c
@@ -69,17 +69,22 @@ void dce_pipe_control_lock(struct dce_hwseq *hws,
 	if (control_mask & PIPE_LOCK_CONTROL_MODE)
 		update_lock_mode = lock_val;
 
-	REG_SET_4(BLND_V_UPDATE_LOCK[blnd_inst], val,
+
+	REG_SET_2(BLND_V_UPDATE_LOCK[blnd_inst], val,
 			BLND_DCP_GRPH_V_UPDATE_LOCK, dcp_grph,
-			BLND_SCL_V_UPDATE_LOCK, scl,
-			BLND_BLND_V_UPDATE_LOCK, blnd,
-			BLND_V_UPDATE_LOCK_MODE, update_lock_mode);
+			BLND_SCL_V_UPDATE_LOCK, scl);
+
+	if (hws->masks->BLND_BLND_V_UPDATE_LOCK != 0)
+		REG_SET_2(BLND_V_UPDATE_LOCK[blnd_inst], val,
+				BLND_BLND_V_UPDATE_LOCK, blnd,
+				BLND_V_UPDATE_LOCK_MODE, update_lock_mode);
 
-	if (hws->wa.blnd_crtc_trigger)
+	if (hws->wa.blnd_crtc_trigger) {
 		if (!lock && (control_mask & PIPE_LOCK_CONTROL_BLENDER)) {
 			uint32_t value = REG_READ(CRTC_H_BLANK_START_END[blnd_inst]);
 			REG_WRITE(CRTC_H_BLANK_START_END[blnd_inst], value);
 		}
+	}
 }
 
 void dce_set_blender_mode(struct dce_hwseq *hws,
@@ -111,11 +116,15 @@ void dce_set_blender_mode(struct dce_hwseq *hws,
 		break;
 	}
 
-	REG_UPDATE_4(BLND_CONTROL[blnd_inst],
-		BLND_FEEDTHROUGH_EN, feedthrough,
-		BLND_ALPHA_MODE, alpha_mode,
-		BLND_MODE, blnd_mode,
-		BLND_MULTIPLIED_MODE, multiplied_mode);
+	REG_UPDATE(BLND_CONTROL[blnd_inst],
+		BLND_MODE, blnd_mode);
+
+	if (hws->masks->BLND_ALPHA_MODE != 0) {
+		REG_UPDATE_3(BLND_CONTROL[blnd_inst],
+			BLND_FEEDTHROUGH_EN, feedthrough,
+			BLND_ALPHA_MODE, alpha_mode,
+			BLND_MULTIPLIED_MODE, multiplied_mode);
+	}
 }
 
 
diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_transform.c b/drivers/gpu/drm/amd/display/dc/dce/dce_transform.c
index 50a6a25..d8ffbff 100644
--- a/drivers/gpu/drm/amd/display/dc/dce/dce_transform.c
+++ b/drivers/gpu/drm/amd/display/dc/dce/dce_transform.c
@@ -87,7 +87,10 @@ static bool setup_scaling_configuration(
 
 	if (data->taps.h_taps + data->taps.v_taps <= 2) {
 		/* Set bypass */
-		REG_UPDATE_2(SCL_MODE, SCL_MODE, 0, SCL_PSCL_EN, 0);
+		if (xfm_dce->xfm_mask->SCL_PSCL_EN != 0)
+			REG_UPDATE_2(SCL_MODE, SCL_MODE, 0, SCL_PSCL_EN, 0);
+		else
+			REG_UPDATE(SCL_MODE, SCL_MODE, 0);
 		return false;
 	}
 
@@ -96,9 +99,12 @@ static bool setup_scaling_configuration(
 			SCL_V_NUM_OF_TAPS, data->taps.v_taps - 1);
 
 	if (data->format <= PIXEL_FORMAT_GRPH_END)
-		REG_UPDATE_2(SCL_MODE, SCL_MODE, 1, SCL_PSCL_EN, 1);
+		REG_UPDATE(SCL_MODE, SCL_MODE, 1);
 	else
-		REG_UPDATE_2(SCL_MODE, SCL_MODE, 2, SCL_PSCL_EN, 1);
+		REG_UPDATE(SCL_MODE, SCL_MODE, 2);
+
+	if (xfm_dce->xfm_mask->SCL_PSCL_EN != 0)
+		REG_UPDATE(SCL_MODE, SCL_PSCL_EN, 1);
 
 	/* 1 - Replace out of bound pixels with edge */
 	REG_SET(SCL_CONTROL, 0, SCL_BOUNDARY_MODE, 1);
-- 
2.7.4