aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0712-drm-amd-dal-Do-not-access-mmMC_HUB_RDREQ_DMIF_LIMIT-.patch
blob: e3680fa6e36b3f6bab67b363e40369a6a97c44a7 (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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
From c09775dd062c6bb44e45cafabf92c43b0d711a3a Mon Sep 17 00:00:00 2001
From: David Rokhvarg <David.Rokhvarg@amd.com>
Date: Thu, 21 Jan 2016 13:33:22 -0500
Subject: [PATCH 0712/1110] drm/amd/dal: Do not access
 mmMC_HUB_RDREQ_DMIF_LIMIT if in Diag env.

This register is *not* a Display register and is not valid in
Diagnostics environment on FPGA/Maximus.

Signed-off-by: David Rokhvarg <David.Rokhvarg@amd.com>
Acked-by: Harry Wentland <harry.wentland@amd.com>
---
 drivers/gpu/drm/amd/dal/dc/core/dc.c               |  4 +--
 .../gpu/drm/amd/dal/dc/dce110/dce110_mem_input.c   | 33 +++++++++++++---------
 drivers/gpu/drm/amd/dal/dc/inc/core_dc.h           |  6 ----
 drivers/gpu/drm/amd/dal/include/dal_types.h        |  6 ++++
 4 files changed, 27 insertions(+), 22 deletions(-)

diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc.c b/drivers/gpu/drm/amd/dal/dc/core/dc.c
index b68ecb7..81bcc1e 100644
--- a/drivers/gpu/drm/amd/dal/dc/core/dc.c
+++ b/drivers/gpu/drm/amd/dal/dc/core/dc.c
@@ -335,9 +335,9 @@ static bool construct(struct dc *dc, const struct dal_init_data *init_params)
 
 	dc->ctx = dc_init_data.ctx;
 
-	dc->dce_version = dal_adapter_service_get_dce_version(
+	dc->ctx->dce_version = dal_adapter_service_get_dce_version(
 			dc_init_data.adapter_srv);
-	dc->dce_environment = dal_adapter_service_get_dce_environment(
+	dc->ctx->dce_environment = dal_adapter_service_get_dce_environment(
 			dc_init_data.adapter_srv);
 
 	/* Create hardware sequencer */
diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_mem_input.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_mem_input.c
index 5c76d15..392a075 100644
--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_mem_input.c
+++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_mem_input.c
@@ -842,13 +842,16 @@ void dce110_mem_input_allocate_dmif_buffer(
 	 * 02 - enable DMIF rdreq limit, disable by DMIF stall = 1
 	 * 03 - force enable DMIF rdreq limit, ignore DMIF stall / urgent
 	 */
-	addr = mmMC_HUB_RDREQ_DMIF_LIMIT;
-	value = dal_read_reg(mi->ctx, addr);
-	if (paths_num > 1)
-		set_reg_field_value(value, 0, MC_HUB_RDREQ_DMIF_LIMIT, ENABLE);
-	else
-		set_reg_field_value(value, 3, MC_HUB_RDREQ_DMIF_LIMIT, ENABLE);
-	dal_write_reg(mi->ctx, addr, value);
+	if (!IS_DIAG_MAXIMUS_DC(mi->ctx)) {
+		addr = mmMC_HUB_RDREQ_DMIF_LIMIT;
+		value = dal_read_reg(mi->ctx, addr);
+
+		if (paths_num > 1)
+			set_reg_field_value(value, 0, MC_HUB_RDREQ_DMIF_LIMIT, ENABLE);
+		else
+			set_reg_field_value(value, 3, MC_HUB_RDREQ_DMIF_LIMIT, ENABLE);
+		dal_write_reg(mi->ctx, addr, value);
+	}
 
 register_underflow_int:
 	/*todo*/;
@@ -909,13 +912,15 @@ void dce110_mem_input_deallocate_dmif_buffer(
 	 * 02 - enable dmif rdreq limit, disable by dmif stall=1
 	 * 03 - force enable dmif rdreq limit, ignore dmif stall/urgent
 	 * Stella Wong proposed this change. */
-	value = dal_read_reg(mi->ctx, mmMC_HUB_RDREQ_DMIF_LIMIT);
-	if (paths_num > 1)
-		set_reg_field_value(value, 0, MC_HUB_RDREQ_DMIF_LIMIT, ENABLE);
-	else
-		set_reg_field_value(value, 3, MC_HUB_RDREQ_DMIF_LIMIT, ENABLE);
-
-	dal_write_reg(mi->ctx, mmMC_HUB_RDREQ_DMIF_LIMIT, value);
+	if (!IS_DIAG_MAXIMUS_DC(mi->ctx)) {
+		value = dal_read_reg(mi->ctx, mmMC_HUB_RDREQ_DMIF_LIMIT);
+		if (paths_num > 1)
+			set_reg_field_value(value, 0, MC_HUB_RDREQ_DMIF_LIMIT, ENABLE);
+		else
+			set_reg_field_value(value, 3, MC_HUB_RDREQ_DMIF_LIMIT, ENABLE);
+
+		dal_write_reg(mi->ctx, mmMC_HUB_RDREQ_DMIF_LIMIT, value);
+	}
 }
 
 static struct mem_input_funcs dce110_mem_input_funcs = {
diff --git a/drivers/gpu/drm/amd/dal/dc/inc/core_dc.h b/drivers/gpu/drm/amd/dal/dc/inc/core_dc.h
index be46f97..9d62a24 100644
--- a/drivers/gpu/drm/amd/dal/dc/inc/core_dc.h
+++ b/drivers/gpu/drm/amd/dal/dc/inc/core_dc.h
@@ -34,12 +34,6 @@ struct dc {
 
 	/* HW functions */
 	struct hw_sequencer_funcs hwss;
-
-	/* Diagnostics */
-	enum dce_version dce_version;
-	enum dce_environment dce_environment;
 };
 
-#define IS_DIAGNOSTICS_DC(dc) ((dc)->dce_environment == DCE_ENV_DIAG_FPGA_MAXIMUS)
-
 #endif /* __CORE_DC_H__ */
diff --git a/drivers/gpu/drm/amd/dal/include/dal_types.h b/drivers/gpu/drm/amd/dal/include/dal_types.h
index 8e54862..73c13c4 100644
--- a/drivers/gpu/drm/amd/dal/include/dal_types.h
+++ b/drivers/gpu/drm/amd/dal/include/dal_types.h
@@ -178,8 +178,14 @@ struct dc_context {
 
 	struct dal_logger *logger;
 	void *cgs_device;
+
+	/* Diagnostics */
+	enum dce_version dce_version;
+	enum dce_environment dce_environment;
 };
 
+#define IS_DIAG_MAXIMUS_DC(dcctx) ((dcctx)->dce_environment == DCE_ENV_DIAG_FPGA_MAXIMUS)
+
 /* Wireless display structs */
 
 union dal_remote_display_cea_mode_bitmap {
-- 
2.7.4