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
|