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#ifndef __AMDGPU_DM_H__
27#define __AMDGPU_DM_H__
28
29#include <drm/drm_atomic.h>
30#include <drm/drm_connector.h>
31#include <drm/drm_crtc.h>
32#include <drm/drm_dp_mst_helper.h>
33#include <drm/drm_plane.h>
34
35
36
37
38
39
40
41
42
43
44
45#define AMDGPU_DM_MAX_DISPLAY_INDEX 31
46
47#define AMDGPU_DM_MAX_CRTC 6
48
49
50
51
52
53
54#include "irq_types.h"
55#include "signal_types.h"
56#include "amdgpu_dm_crc.h"
57
58
59struct amdgpu_device;
60struct drm_device;
61struct amdgpu_dm_irq_handler_data;
62struct dc;
63struct amdgpu_bo;
64struct dmub_srv;
65
66struct common_irq_params {
67 struct amdgpu_device *adev;
68 enum dc_irq_source irq_src;
69};
70
71
72
73
74
75
76
77struct irq_list_head {
78 struct list_head head;
79
80 struct work_struct work;
81};
82
83
84
85
86
87
88
89struct dm_compressor_info {
90 void *cpu_addr;
91 struct amdgpu_bo *bo_ptr;
92 uint64_t gpu_addr;
93};
94
95
96
97
98
99
100struct amdgpu_dm_backlight_caps {
101
102
103
104
105 union dpcd_sink_ext_caps *ext_caps;
106
107
108
109 u32 aux_min_input_signal;
110
111
112
113
114 u32 aux_max_input_signal;
115
116
117
118 int min_input_signal;
119
120
121
122 int max_input_signal;
123
124
125
126 bool caps_valid;
127
128
129
130 bool aux_support;
131};
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155struct amdgpu_display_manager {
156
157 struct dc *dc;
158
159
160
161
162
163
164
165
166 struct dmub_srv *dmub_srv;
167
168
169
170
171
172
173 struct dmub_srv_fb_info *dmub_fb_info;
174
175
176
177
178
179
180 const struct firmware *dmub_fw;
181
182
183
184
185
186
187 struct amdgpu_bo *dmub_bo;
188
189
190
191
192
193
194 u64 dmub_bo_gpu_addr;
195
196
197
198
199
200
201 void *dmub_bo_cpu_addr;
202
203
204
205
206
207
208 uint32_t dmcub_fw_version;
209
210
211
212
213
214
215
216 struct cgs_device *cgs_device;
217
218 struct amdgpu_device *adev;
219 struct drm_device *ddev;
220 u16 display_indexes_num;
221
222
223
224
225
226
227
228
229 struct drm_private_obj atomic_obj;
230
231
232
233
234
235
236
237 struct mutex dc_lock;
238
239
240
241
242
243
244 struct mutex audio_lock;
245
246
247
248
249
250
251 struct drm_audio_component *audio_component;
252
253
254
255
256
257
258
259 bool audio_registered;
260
261
262
263
264
265
266
267
268
269
270
271
272
273 struct irq_list_head irq_handler_list_low_tab[DAL_IRQ_SOURCES_NUMBER];
274
275
276
277
278
279
280
281
282
283 struct list_head irq_handler_list_high_tab[DAL_IRQ_SOURCES_NUMBER];
284
285
286
287
288
289
290
291 struct common_irq_params
292 pflip_params[DC_IRQ_SOURCE_PFLIP_LAST - DC_IRQ_SOURCE_PFLIP_FIRST + 1];
293
294
295
296
297
298
299
300 struct common_irq_params
301 vblank_params[DC_IRQ_SOURCE_VBLANK6 - DC_IRQ_SOURCE_VBLANK1 + 1];
302
303
304
305
306
307
308
309 struct common_irq_params
310 vupdate_params[DC_IRQ_SOURCE_VUPDATE6 - DC_IRQ_SOURCE_VUPDATE1 + 1];
311
312 spinlock_t irq_handler_list_table_lock;
313
314 struct backlight_device *backlight_dev;
315
316 const struct dc_link *backlight_link;
317 struct amdgpu_dm_backlight_caps backlight_caps;
318
319 struct mod_freesync *freesync_module;
320#ifdef CONFIG_DRM_AMD_DC_HDCP
321 struct hdcp_workqueue *hdcp_workqueue;
322#endif
323
324 struct drm_atomic_state *cached_state;
325 struct dc_state *cached_dc_state;
326
327 struct dm_compressor_info compressor;
328
329 const struct firmware *fw_dmcu;
330 uint32_t dmcu_fw_version;
331
332
333
334
335
336
337 const struct gpu_info_soc_bounding_box_v1_0 *soc_bounding_box;
338
339
340
341
342
343
344 struct amdgpu_encoder mst_encoders[AMDGPU_DM_MAX_CRTC];
345 bool force_timing_sync;
346};
347
348enum dsc_clock_force_state {
349 DSC_CLK_FORCE_DEFAULT = 0,
350 DSC_CLK_FORCE_ENABLE,
351 DSC_CLK_FORCE_DISABLE,
352};
353
354struct dsc_preferred_settings {
355 enum dsc_clock_force_state dsc_force_enable;
356 uint32_t dsc_num_slices_v;
357 uint32_t dsc_num_slices_h;
358 uint32_t dsc_bits_per_pixel;
359};
360
361struct amdgpu_dm_connector {
362
363 struct drm_connector base;
364 uint32_t connector_id;
365
366
367
368 struct edid *edid;
369
370
371 struct amdgpu_hpd hpd;
372
373
374 int num_modes;
375
376
377
378 struct dc_sink *dc_sink;
379 struct dc_link *dc_link;
380 struct dc_sink *dc_em_sink;
381
382
383 struct drm_dp_mst_topology_mgr mst_mgr;
384 struct amdgpu_dm_dp_aux dm_dp_aux;
385 struct drm_dp_mst_port *port;
386 struct amdgpu_dm_connector *mst_port;
387 struct drm_dp_aux *dsc_aux;
388
389
390 struct amdgpu_i2c_adapter *i2c;
391
392
393 int min_vfreq ;
394 int max_vfreq ;
395 int pixel_clock_mhz;
396
397
398 int audio_inst;
399
400 struct mutex hpd_lock;
401
402 bool fake_enable;
403#ifdef CONFIG_DEBUG_FS
404 uint32_t debugfs_dpcd_address;
405 uint32_t debugfs_dpcd_size;
406#endif
407 bool force_yuv420_output;
408 struct dsc_preferred_settings dsc_settings;
409};
410
411#define to_amdgpu_dm_connector(x) container_of(x, struct amdgpu_dm_connector, base)
412
413extern const struct amdgpu_ip_block_version dm_ip_block;
414
415struct amdgpu_framebuffer;
416struct amdgpu_display_manager;
417struct dc_validation_set;
418struct dc_plane_state;
419
420struct dm_plane_state {
421 struct drm_plane_state base;
422 struct dc_plane_state *dc_state;
423};
424
425struct dm_crtc_state {
426 struct drm_crtc_state base;
427 struct dc_stream_state *stream;
428
429 bool cm_has_degamma;
430 bool cm_is_degamma_srgb;
431
432 int update_type;
433 int active_planes;
434
435 int crc_skip_count;
436 enum amdgpu_dm_pipe_crc_source crc_src;
437
438 bool freesync_timing_changed;
439 bool freesync_vrr_info_changed;
440
441 bool dsc_force_changed;
442 bool vrr_supported;
443 struct mod_freesync_config freesync_config;
444 struct dc_info_packet vrr_infopacket;
445
446 int abm_level;
447};
448
449#define to_dm_crtc_state(x) container_of(x, struct dm_crtc_state, base)
450
451struct dm_atomic_state {
452 struct drm_private_state base;
453
454 struct dc_state *context;
455};
456
457#define to_dm_atomic_state(x) container_of(x, struct dm_atomic_state, base)
458
459struct dm_connector_state {
460 struct drm_connector_state base;
461
462 enum amdgpu_rmx_type scaling;
463 uint8_t underscan_vborder;
464 uint8_t underscan_hborder;
465 bool underscan_enable;
466 bool freesync_capable;
467#ifdef CONFIG_DRM_AMD_DC_HDCP
468 bool update_hdcp;
469#endif
470 uint8_t abm_level;
471 int vcpi_slots;
472 uint64_t pbn;
473};
474
475#define to_dm_connector_state(x)\
476 container_of((x), struct dm_connector_state, base)
477
478void amdgpu_dm_connector_funcs_reset(struct drm_connector *connector);
479struct drm_connector_state *
480amdgpu_dm_connector_atomic_duplicate_state(struct drm_connector *connector);
481int amdgpu_dm_connector_atomic_set_property(struct drm_connector *connector,
482 struct drm_connector_state *state,
483 struct drm_property *property,
484 uint64_t val);
485
486int amdgpu_dm_connector_atomic_get_property(struct drm_connector *connector,
487 const struct drm_connector_state *state,
488 struct drm_property *property,
489 uint64_t *val);
490
491int amdgpu_dm_get_encoder_crtc_mask(struct amdgpu_device *adev);
492
493void amdgpu_dm_connector_init_helper(struct amdgpu_display_manager *dm,
494 struct amdgpu_dm_connector *aconnector,
495 int connector_type,
496 struct dc_link *link,
497 int link_index);
498
499enum drm_mode_status amdgpu_dm_connector_mode_valid(struct drm_connector *connector,
500 struct drm_display_mode *mode);
501
502void dm_restore_drm_connector_state(struct drm_device *dev,
503 struct drm_connector *connector);
504
505void amdgpu_dm_update_freesync_caps(struct drm_connector *connector,
506 struct edid *edid);
507
508void amdgpu_dm_trigger_timing_sync(struct drm_device *dev);
509
510#define MAX_COLOR_LUT_ENTRIES 4096
511
512#define MAX_COLOR_LEGACY_LUT_ENTRIES 256
513
514void amdgpu_dm_init_color_mod(void);
515int amdgpu_dm_update_crtc_color_mgmt(struct dm_crtc_state *crtc);
516int amdgpu_dm_update_plane_color_mgmt(struct dm_crtc_state *crtc,
517 struct dc_plane_state *dc_plane_state);
518
519void amdgpu_dm_update_connector_after_detect(
520 struct amdgpu_dm_connector *aconnector);
521
522extern const struct drm_encoder_helper_funcs amdgpu_dm_encoder_helper_funcs;
523
524#endif
525