aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0884-drm-amd-dal-Move-link-encoder-destroy-from-resource-.patch
blob: 042d0170a1f6173703322246e7bb9deddad0fa85 (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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
From e3e7fa9e289b35926faa082a1b2a8d60c429f545 Mon Sep 17 00:00:00 2001
From: Jordan Lazare <Jordan.Lazare@amd.com>
Date: Mon, 7 Mar 2016 17:24:41 -0500
Subject: [PATCH 0884/1110] drm/amd/dal: Move link encoder destroy from
 resource to link_encoder

We should be treating link_encoder_destroy as a function pointer within
link_encoder on a per-link-encoder basis, and not relying on resource to
clean it up properly

Signed-off-by: Jordan Lazare <Jordan.Lazare@amd.com>
Acked-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
---
 drivers/gpu/drm/amd/dal/dc/core/dc_link.c                 |  6 ++----
 drivers/gpu/drm/amd/dal/dc/dce100/dce100_resource.c       |  1 -
 drivers/gpu/drm/amd/dal/dc/dce110/dce110_link_encoder.c   | 10 +++++++++-
 drivers/gpu/drm/amd/dal/dc/dce110/dce110_link_encoder.h   |  2 ++
 drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c       |  7 -------
 drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.h       |  2 --
 drivers/gpu/drm/amd/dal/dc/dce80/dce80_link_encoder.c     |  3 ++-
 drivers/gpu/drm/amd/dal/dc/dce80/dce80_resource.c         |  1 -
 drivers/gpu/drm/amd/dal/dc/inc/core_types.h               |  1 -
 drivers/gpu/drm/amd/dal/dc/inc/hw/link_encoder.h          |  1 +
 drivers/gpu/drm/amd/dal/dc/virtual/virtual_link_encoder.c | 13 ++++++++++++-
 11 files changed, 28 insertions(+), 19 deletions(-)

diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc_link.c b/drivers/gpu/drm/amd/dal/dc/core/dc_link.c
index 0903b0e..68a167b 100644
--- a/drivers/gpu/drm/amd/dal/dc/core/dc_link.c
+++ b/drivers/gpu/drm/amd/dal/dc/core/dc_link.c
@@ -58,13 +58,11 @@ enum {
  ******************************************************************************/
 static void destruct(struct core_link *link)
 {
-	struct core_dc *core_dc = DC_TO_CORE(link->ctx->dc);
-
 	if (link->ddc)
 		dal_ddc_service_destroy(&link->ddc);
 
 	if(link->link_enc)
-		core_dc->res_pool.funcs->link_enc_destroy(&link->link_enc);
+		link->link_enc->funcs->destroy(&link->link_enc);
 }
 
 /*
@@ -1051,7 +1049,7 @@ static bool construct(
 
 	return true;
 device_tag_fail:
-	link->dc->res_pool.funcs->link_enc_destroy(&link->link_enc);
+	link->link_enc->funcs->destroy(&link->link_enc);
 link_enc_create_fail:
 	dal_ddc_service_destroy(&link->ddc);
 ddc_create_fail:
diff --git a/drivers/gpu/drm/amd/dal/dc/dce100/dce100_resource.c b/drivers/gpu/drm/amd/dal/dc/dce100/dce100_resource.c
index 1911bbb..a4dba58 100644
--- a/drivers/gpu/drm/amd/dal/dc/dce100/dce100_resource.c
+++ b/drivers/gpu/drm/amd/dal/dc/dce100/dce100_resource.c
@@ -852,7 +852,6 @@ enum dc_status dce100_validate_with_context(
 static struct resource_funcs dce100_res_pool_funcs = {
 	.destruct = dce100_destruct_resource_pool,
 	.link_enc_create = dce100_link_encoder_create,
-	.link_enc_destroy = dce110_link_encoder_destroy,
 	.validate_with_context = dce100_validate_with_context,
 	.validate_bandwidth = dce100_validate_bandwidth
 };
diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_link_encoder.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_link_encoder.c
index 525a923..0e5588a 100644
--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_link_encoder.c
+++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_link_encoder.c
@@ -105,9 +105,11 @@ static struct link_encoder_funcs dce110_lnk_enc_funcs = {
 	.set_lcd_backlight_level = dce110_link_encoder_set_lcd_backlight_level,
 	.backlight_control = dce110_link_encoder_edp_backlight_control,
 	.power_control = dce110_link_encoder_edp_power_control,
-	.connect_dig_be_to_fe = dce110_link_encoder_connect_dig_be_to_fe
+	.connect_dig_be_to_fe = dce110_link_encoder_connect_dig_be_to_fe,
+	.destroy = dce110_link_encoder_destroy
 };
 
+
 static enum bp_result link_transmitter_control(
 	struct dce110_link_encoder *enc110,
 	struct bp_transmitter_control *cntl)
@@ -1261,6 +1263,12 @@ void dce110_link_encoder_hw_init(
 	hpd_initialize(enc110);
 }
 
+void dce110_link_encoder_destroy(struct link_encoder **enc)
+{
+	dm_free(TO_DCE110_LINK_ENC(*enc));
+	*enc = NULL;
+}
+
 void dce110_link_encoder_setup(
 	struct link_encoder *enc,
 	enum signal_type signal)
diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_link_encoder.h b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_link_encoder.h
index e412804..45dfc60 100644
--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_link_encoder.h
+++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_link_encoder.h
@@ -88,6 +88,8 @@ bool dce110_link_encoder_validate_output_with_stream(
 /* initialize HW */  /* why do we initialze aux in here? */
 void dce110_link_encoder_hw_init(struct link_encoder *enc);
 
+void dce110_link_encoder_destroy(struct link_encoder **enc);
+
 /* program DIG_MODE in DIG_BE */
 /* TODO can this be combined with enable_output? */
 void dce110_link_encoder_setup(
diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c
index ef3f502..f02335e 100644
--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c
+++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c
@@ -417,12 +417,6 @@ struct link_encoder *dce110_link_encoder_create(
 	return NULL;
 }
 
-void dce110_link_encoder_destroy(struct link_encoder **enc)
-{
-	dm_free(TO_DCE110_LINK_ENC(*enc));
-	*enc = NULL;
-}
-
 static struct output_pixel_processor *dce110_opp_create(
 	struct dc_context *ctx,
 	uint32_t inst,
@@ -979,7 +973,6 @@ enum dc_status dce110_validate_with_context(
 static struct resource_funcs dce110_res_pool_funcs = {
 	.destruct = dce110_destruct_resource_pool,
 	.link_enc_create = dce110_link_encoder_create,
-	.link_enc_destroy = dce110_link_encoder_destroy,
 	.validate_with_context = dce110_validate_with_context,
 	.validate_bandwidth = dce110_validate_bandwidth
 };
diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.h b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.h
index 3aeb1e5..cf79abe 100644
--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.h
+++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.h
@@ -40,7 +40,5 @@ bool dce110_construct_resource_pool(
 
 void dce110_destruct_resource_pool(struct resource_pool *pool);
 
-void dce110_link_encoder_destroy(struct link_encoder **enc);
-
 #endif /* __DC_RESOURCE_DCE110_H__ */
 
diff --git a/drivers/gpu/drm/amd/dal/dc/dce80/dce80_link_encoder.c b/drivers/gpu/drm/amd/dal/dc/dce80/dce80_link_encoder.c
index e8c9e86..e25fca2 100644
--- a/drivers/gpu/drm/amd/dal/dc/dce80/dce80_link_encoder.c
+++ b/drivers/gpu/drm/amd/dal/dc/dce80/dce80_link_encoder.c
@@ -206,7 +206,8 @@ static struct link_encoder_funcs dce80_lnk_enc_funcs = {
 	.set_lcd_backlight_level = dce110_link_encoder_set_lcd_backlight_level,
 	.backlight_control = dce110_link_encoder_edp_backlight_control,
 	.power_control = dce110_link_encoder_edp_power_control,
-	.connect_dig_be_to_fe = dce110_link_encoder_connect_dig_be_to_fe
+	.connect_dig_be_to_fe = dce110_link_encoder_connect_dig_be_to_fe,
+	.destroy = dce110_link_encoder_destroy
 };
 
 bool dce80_link_encoder_construct(
diff --git a/drivers/gpu/drm/amd/dal/dc/dce80/dce80_resource.c b/drivers/gpu/drm/amd/dal/dc/dce80/dce80_resource.c
index 078183b..594f9ab 100644
--- a/drivers/gpu/drm/amd/dal/dc/dce80/dce80_resource.c
+++ b/drivers/gpu/drm/amd/dal/dc/dce80/dce80_resource.c
@@ -969,7 +969,6 @@ enum dc_status dce80_validate_with_context(
 static struct resource_funcs dce80_res_pool_funcs = {
 	.destruct = dce80_destruct_resource_pool,
 	.link_enc_create = dce80_link_encoder_create,
-	.link_enc_destroy = dce110_link_encoder_destroy,
 	.validate_with_context = dce80_validate_with_context,
 	.validate_bandwidth = dce80_validate_bandwidth
 };
diff --git a/drivers/gpu/drm/amd/dal/dc/inc/core_types.h b/drivers/gpu/drm/amd/dal/dc/inc/core_types.h
index 02dddc4..4ec6192 100644
--- a/drivers/gpu/drm/amd/dal/dc/inc/core_types.h
+++ b/drivers/gpu/drm/amd/dal/dc/inc/core_types.h
@@ -238,7 +238,6 @@ struct resource_funcs {
 	void (*destruct)(struct resource_pool *pool);
 	struct link_encoder *(*link_enc_create)(
 			const struct encoder_init_data *init);
-	void (*link_enc_destroy)(struct link_encoder **enc);
 	enum dc_status (*validate_with_context)(
 					const struct core_dc *dc,
 					const struct dc_validation_set set[],
diff --git a/drivers/gpu/drm/amd/dal/dc/inc/hw/link_encoder.h b/drivers/gpu/drm/amd/dal/dc/inc/hw/link_encoder.h
index d11ef05..24d318d 100644
--- a/drivers/gpu/drm/amd/dal/dc/inc/hw/link_encoder.h
+++ b/drivers/gpu/drm/amd/dal/dc/inc/hw/link_encoder.h
@@ -118,6 +118,7 @@ struct link_encoder_funcs {
 	void (*connect_dig_be_to_fe)(struct link_encoder *enc,
 		enum engine_id engine,
 		bool connect);
+	void (*destroy)(struct link_encoder **enc);
 };
 
 #endif /* LINK_ENCODER_H_ */
diff --git a/drivers/gpu/drm/amd/dal/dc/virtual/virtual_link_encoder.c b/drivers/gpu/drm/amd/dal/dc/virtual/virtual_link_encoder.c
index 0b3b1b8..66e1fcf 100644
--- a/drivers/gpu/drm/amd/dal/dc/virtual/virtual_link_encoder.c
+++ b/drivers/gpu/drm/amd/dal/dc/virtual/virtual_link_encoder.c
@@ -23,6 +23,7 @@
  *
  */
 
+#include "dm_services.h"
 #include "dm_services_types.h"
 
 #include "virtual_link_encoder.h"
@@ -90,6 +91,13 @@ static void virtual_link_encoder_connect_dig_be_to_fe(
 	enum engine_id engine,
 	bool connect) {}
 
+static void virtual_link_encoder_destroy(struct link_encoder **enc)
+{
+	dm_free(*enc);
+	*enc = NULL;
+}
+
+
 static struct link_encoder_funcs virtual_lnk_enc_funcs = {
 	.validate_output_with_stream =
 		virtual_link_encoder_validate_output_with_stream,
@@ -106,7 +114,8 @@ static struct link_encoder_funcs virtual_lnk_enc_funcs = {
 	.set_lcd_backlight_level = virtual_link_encoder_set_lcd_backlight_level,
 	.backlight_control = virtual_link_encoder_edp_backlight_control,
 	.power_control = virtual_link_encoder_edp_power_control,
-	.connect_dig_be_to_fe = virtual_link_encoder_connect_dig_be_to_fe
+	.connect_dig_be_to_fe = virtual_link_encoder_connect_dig_be_to_fe,
+	.destroy = virtual_link_encoder_destroy
 };
 
 bool virtual_link_encoder_construct(
@@ -131,3 +140,5 @@ bool virtual_link_encoder_construct(
 
 	return true;
 }
+
+
-- 
2.7.4