aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/1013-drm-amd-dal-properly-abstract-bios-parser-from-adapt.patch
blob: d7dc1c7939d89dcb55acd1f6c7c10e9e5c87b940 (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
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
From 7c6ae82ece0599ff9cb5f06ba6d4c265ac500544 Mon Sep 17 00:00:00 2001
From: Dave Airlie <airlied@redhat.com>
Date: Mon, 11 Apr 2016 17:16:19 +1000
Subject: [PATCH 1013/1110] drm/amd/dal: properly abstract bios parser from
 adapter service.

The adapter service is only used in one place in this code, so
pass it into the API rather than storing it for ever.

Signed-off-by: Dave Airlie <airlied@redhat.com>
Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
---
 .../gpu/drm/amd/dal/dc/adapter/adapter_service.c   |  6 +--
 drivers/gpu/drm/amd/dal/dc/bios/bios_parser.c      | 56 ++++++++++------------
 drivers/gpu/drm/amd/dal/dc/bios/bios_parser.h      |  1 -
 drivers/gpu/drm/amd/dal/dc/dc_bios_types.h         |  3 +-
 .../drm/amd/dal/include/bios_parser_interface.h    |  2 +-
 5 files changed, 32 insertions(+), 36 deletions(-)

diff --git a/drivers/gpu/drm/amd/dal/dc/adapter/adapter_service.c b/drivers/gpu/drm/amd/dal/dc/adapter/adapter_service.c
index 810776b..b4f9750 100644
--- a/drivers/gpu/drm/amd/dal/dc/adapter/adapter_service.c
+++ b/drivers/gpu/drm/amd/dal/dc/adapter/adapter_service.c
@@ -749,6 +749,7 @@ static bool adapter_service_construct(
 	}
 
 	as->dce_environment = init_data->dce_environment;
+	dce_version = dal_adapter_service_get_dce_version(as);
 
 	if (init_data->vbios_override)
 		as->dcb_override = init_data->vbios_override;
@@ -757,7 +758,7 @@ static bool adapter_service_construct(
 		init_data->bp_init_data.ctx = init_data->ctx;
 
 		as->dcb_internal = dal_bios_parser_create(
-				&init_data->bp_init_data, as);
+				&init_data->bp_init_data, dce_version);
 
 		if (!as->dcb_internal) {
 			ASSERT_CRITICAL(false);
@@ -767,7 +768,6 @@ static bool adapter_service_construct(
 
 	dcb = dal_adapter_service_get_bios_parser(as);
 
-	dce_version = dal_adapter_service_get_dce_version(as);
 
 	/* Create GPIO service */
 	as->gpio_service = dal_gpio_service_create(
@@ -804,7 +804,7 @@ static bool adapter_service_construct(
 	/* Integrated info is not provided on discrete ASIC. NULL is allowed */
 	as->integrated_info = dc_bios_create_integrated_info(dcb);
 
-	dc_bios_post_init(dcb);
+	dc_bios_post_init(dcb, as);
 
 	/* Generate backlight translation table and initializes
 			  other brightness properties */
diff --git a/drivers/gpu/drm/amd/dal/dc/bios/bios_parser.c b/drivers/gpu/drm/amd/dal/dc/bios/bios_parser.c
index 8bb5454..cdf674d 100644
--- a/drivers/gpu/drm/amd/dal/dc/bios/bios_parser.c
+++ b/drivers/gpu/drm/amd/dal/dc/bios/bios_parser.c
@@ -94,7 +94,6 @@ static uint32_t get_support_mask_for_device_id(struct device_id device_id);
 static ATOM_ENCODER_CAP_RECORD *get_encoder_cap_record(
 	struct bios_parser *bp,
 	ATOM_OBJECT *object);
-static void process_ext_display_connection_info(struct bios_parser *bp);
 
 #define BIOS_IMAGE_SIZE_OFFSET 2
 #define BIOS_IMAGE_SIZE_UNIT 512
@@ -103,7 +102,7 @@ static void process_ext_display_connection_info(struct bios_parser *bp);
 static bool bios_parser_construct(
 	struct bios_parser *bp,
 	struct bp_init_data *init,
-	struct adapter_service *as);
+	enum dce_version dce_version);
 
 enum bp_result dc_bios_get_embedded_panel_info(struct dc_bios *dcb,
 					       struct embedded_panel_info *info);
@@ -111,7 +110,8 @@ enum bp_result dc_bios_get_embedded_panel_info(struct dc_bios *dcb,
 /*****************************************************************************/
 
 struct dc_bios *dal_bios_parser_create(
-	struct bp_init_data *init, struct adapter_service *as)
+	struct bp_init_data *init,
+	enum dce_version dce_version)
 {
 	struct bios_parser *bp = NULL;
 
@@ -119,7 +119,7 @@ struct dc_bios *dal_bios_parser_create(
 	if (!bp)
 		return NULL;
 
-	if (bios_parser_construct(bp, init, as))
+	if (bios_parser_construct(bp, init, dce_version))
 		return (struct dc_bios *)bp;
 
 	dm_free(bp);
@@ -3369,7 +3369,7 @@ static uint32_t get_support_mask_for_device_id(struct device_id device_id)
  */
 
 static bool i2c_read(
-	struct bios_parser *bp,
+	struct adapter_service *as,
 	struct graphics_object_i2c_info *i2c_info,
 	uint8_t *buffer,
 	uint32_t length)
@@ -3379,14 +3379,14 @@ static bool i2c_read(
 	bool result = false;
 	struct i2c_command cmd;
 
-	ddc = dal_adapter_service_obtain_ddc_from_i2c_info(bp->as, i2c_info);
+	ddc = dal_adapter_service_obtain_ddc_from_i2c_info(as, i2c_info);
 
 	if (!ddc)
 		return result;
 
 	/*Using SW engine */
 	cmd.engine = I2C_COMMAND_ENGINE_SW;
-	cmd.speed = dal_adapter_service_get_sw_i2c_speed(bp->as);
+	cmd.speed = dal_adapter_service_get_sw_i2c_speed(as);
 
 	{
 		struct i2c_payload payloads[] = {
@@ -3409,12 +3409,12 @@ static bool i2c_read(
 
 		/* TODO route this through drm i2c_adapter */
 		result = dal_i2caux_submit_i2c_command(
-				dal_adapter_service_get_i2caux(bp->as),
+				dal_adapter_service_get_i2caux(as),
 				ddc,
 				&cmd);
 	}
 
-	dal_adapter_service_release_ddc(bp->as, ddc);
+	dal_adapter_service_release_ddc(as, ddc);
 
 	return result;
 }
@@ -3427,6 +3427,7 @@ static bool i2c_read(
  */
 static enum bp_result get_ext_display_connection_info(
 	struct bios_parser *bp,
+	struct adapter_service *as,
 	ATOM_OBJECT *opm_object,
 	ATOM_EXTERNAL_DISPLAY_CONNECTION_INFO *ext_display_connection_info_tbl)
 {
@@ -3453,11 +3454,10 @@ static enum bp_result get_ext_display_connection_info(
 				BP_RESULT_OK)
 			return BP_RESULT_BADBIOSTABLE;
 
-		if (i2c_read(
-				bp,
-				&i2c_info,
-				(uint8_t *)ext_display_connection_info_tbl,
-				sizeof(ATOM_EXTERNAL_DISPLAY_CONNECTION_INFO))) {
+		if (i2c_read(as,
+			     &i2c_info,
+			     (uint8_t *)ext_display_connection_info_tbl,
+			     sizeof(ATOM_EXTERNAL_DISPLAY_CONNECTION_INFO))) {
 			config_tbl_present = true;
 		}
 	}
@@ -3774,7 +3774,8 @@ static ATOM_CONNECTOR_HPDPIN_LUT_RECORD *get_ext_connector_hpd_pin_lut_record(
  *
  */
 static enum bp_result patch_bios_image_from_ext_display_connection_info(
-	struct bios_parser *bp)
+	struct bios_parser *bp,
+	struct adapter_service *as)
 {
 	ATOM_OBJECT_TABLE *connector_tbl;
 	uint32_t connector_tbl_offset;
@@ -3814,10 +3815,9 @@ static enum bp_result patch_bios_image_from_ext_display_connection_info(
 	connector_tbl = GET_IMAGE(ATOM_OBJECT_TABLE, connector_tbl_offset);
 
 	/* Read Connector info table from EEPROM through i2c */
-	if (get_ext_display_connection_info(
-			bp,
-			opm_object,
-			&ext_display_connection_info_tbl) != BP_RESULT_OK) {
+	if (get_ext_display_connection_info(bp, as,
+					    opm_object,
+					    &ext_display_connection_info_tbl) != BP_RESULT_OK) {
 		if (bp->headless_no_opm) {
 			/* Failed to read OPM, remove all non-CF connectors. */
 			for (i = 0; i < connector_tbl->ucNumberOfObjects; ++i) {
@@ -4025,7 +4025,8 @@ static enum bp_result patch_bios_image_from_ext_display_connection_info(
  *
  */
 
-static void process_ext_display_connection_info(struct bios_parser *bp)
+static void process_ext_display_connection_info(struct bios_parser *bp,
+						struct adapter_service *as)
 {
 	ATOM_OBJECT_TABLE *connector_tbl;
 	uint32_t connector_tbl_offset;
@@ -4080,7 +4081,7 @@ static void process_ext_display_connection_info(struct bios_parser *bp)
 		/* Step 2: (only if MXM connector found) Patch BIOS image with
 		 * info from external module */
 		if (mxm_connector_found &&
-				patch_bios_image_from_ext_display_connection_info(bp) !=
+		    patch_bios_image_from_ext_display_connection_info(bp, as) !=
 						BP_RESULT_OK) {
 			/* Patching the bios image has failed. We will copy
 			 * again original image provided and afterwards
@@ -4114,11 +4115,12 @@ static void process_ext_display_connection_info(struct bios_parser *bp)
 	}
 }
 
-void dc_bios_post_init(struct dc_bios *dcb)
+void dc_bios_post_init(struct dc_bios *dcb,
+		       struct adapter_service *as)
 {
 	struct bios_parser *bp = BP_FROM_DCB(dcb);
 
-	process_ext_display_connection_info(bp);
+	process_ext_display_connection_info(bp, as);
 }
 
 bool dc_bios_is_accelerated_mode(struct dc_bios *dcb)
@@ -4765,15 +4767,11 @@ static uint32_t get_embedded_display_refresh_rate(
 static bool bios_parser_construct(
 	struct bios_parser *bp,
 	struct bp_init_data *init,
-	struct adapter_service *as)
+	enum dce_version dce_version)
 {
 	uint16_t *rom_header_offset = NULL;
 	ATOM_ROM_HEADER *rom_header = NULL;
 	ATOM_OBJECT_HEADER *object_info_tbl;
-	enum dce_version dce_version;
-
-	if (!as)
-		return false;
 
 	if (!init)
 		return false;
@@ -4781,9 +4779,7 @@ static bool bios_parser_construct(
 	if (!init->bios)
 		return false;
 
-	dce_version = dal_adapter_service_get_dce_version(as);
 	bp->ctx = init->ctx;
-	bp->as = as;
 	bp->bios = init->bios;
 	bp->bios_size = bp->bios[BIOS_IMAGE_SIZE_OFFSET] * BIOS_IMAGE_SIZE_UNIT;
 	bp->bios_local_image = NULL;
diff --git a/drivers/gpu/drm/amd/dal/dc/bios/bios_parser.h b/drivers/gpu/drm/amd/dal/dc/bios/bios_parser.h
index 2133a59..1db3eee 100644
--- a/drivers/gpu/drm/amd/dal/dc/bios/bios_parser.h
+++ b/drivers/gpu/drm/amd/dal/dc/bios/bios_parser.h
@@ -52,7 +52,6 @@ enum spread_spectrum_id {
 
 struct bios_parser {
 	struct dc_context *ctx;
-	struct adapter_service *as;
 
 	struct object_info_table object_info_tbl;
 	uint32_t object_info_tbl_offset;
diff --git a/drivers/gpu/drm/amd/dal/dc/dc_bios_types.h b/drivers/gpu/drm/amd/dal/dc/dc_bios_types.h
index f17702d..fa7b1fe 100644
--- a/drivers/gpu/drm/amd/dal/dc/dc_bios_types.h
+++ b/drivers/gpu/drm/amd/dal/dc/dc_bios_types.h
@@ -208,7 +208,8 @@ enum bp_result dc_bios_enable_disp_power_gating(struct dc_bios *bios,
 						enum bp_pipe_control_action action);
 
 
-void dc_bios_post_init(struct dc_bios *bios);
+void dc_bios_post_init(struct dc_bios *bios,
+		       struct adapter_service *as);
 
 struct integrated_info *dc_bios_create_integrated_info(struct dc_bios *bios);
 
diff --git a/drivers/gpu/drm/amd/dal/include/bios_parser_interface.h b/drivers/gpu/drm/amd/dal/include/bios_parser_interface.h
index d589e8d..a8f313a 100644
--- a/drivers/gpu/drm/amd/dal/include/bios_parser_interface.h
+++ b/drivers/gpu/drm/amd/dal/include/bios_parser_interface.h
@@ -38,7 +38,7 @@ struct bp_init_data {
 
 struct dc_bios *dal_bios_parser_create(
 	struct bp_init_data *init,
-	struct adapter_service *as);
+	enum dce_version dce_version);
 
 void dal_bios_parser_destroy(
 	struct dc_bios **dcb);
-- 
2.7.4