]> Git Repo - J-linux.git/blob - drivers/gpu/drm/amd/display/dc/inc/hw/stream_encoder.h
Merge tag 'drm-intel-gt-next-2022-11-03' of git://anongit.freedesktop.org/drm/drm...
[J-linux.git] / drivers / gpu / drm / amd / display / dc / inc / hw / stream_encoder.h
1 /*
2  * Copyright 2017 Advanced Micro Devices, Inc.
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in
12  * all copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
18  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20  * OTHER DEALINGS IN THE SOFTWARE.
21  *
22  */
23 /*
24  * stream_encoder.h
25  *
26  */
27
28 #ifndef STREAM_ENCODER_H_
29 #define STREAM_ENCODER_H_
30
31 #include "audio_types.h"
32 #include "hw_shared.h"
33 #include "dc_link.h"
34
35 struct dc_bios;
36 struct dc_context;
37 struct dc_crtc_timing;
38
39 enum dp_pixel_encoding_type {
40         DP_PIXEL_ENCODING_TYPE_RGB444           = 0x00000000,
41         DP_PIXEL_ENCODING_TYPE_YCBCR422         = 0x00000001,
42         DP_PIXEL_ENCODING_TYPE_YCBCR444         = 0x00000002,
43         DP_PIXEL_ENCODING_TYPE_RGB_WIDE_GAMUT   = 0x00000003,
44         DP_PIXEL_ENCODING_TYPE_Y_ONLY           = 0x00000004,
45         DP_PIXEL_ENCODING_TYPE_YCBCR420         = 0x00000005
46 };
47
48 enum dp_component_depth {
49         DP_COMPONENT_PIXEL_DEPTH_6BPC           = 0x00000000,
50         DP_COMPONENT_PIXEL_DEPTH_8BPC           = 0x00000001,
51         DP_COMPONENT_PIXEL_DEPTH_10BPC          = 0x00000002,
52         DP_COMPONENT_PIXEL_DEPTH_12BPC          = 0x00000003,
53         DP_COMPONENT_PIXEL_DEPTH_16BPC          = 0x00000004
54 };
55
56 struct audio_clock_info {
57         /* pixel clock frequency*/
58         uint32_t pixel_clock_in_10khz;
59         /* N - 32KHz audio */
60         uint32_t n_32khz;
61         /* CTS - 32KHz audio*/
62         uint32_t cts_32khz;
63         uint32_t n_44khz;
64         uint32_t cts_44khz;
65         uint32_t n_48khz;
66         uint32_t cts_48khz;
67 };
68
69 enum dynamic_metadata_mode {
70         dmdata_dp,
71         dmdata_hdmi,
72         dmdata_dolby_vision
73 };
74
75 struct encoder_info_frame {
76         /* auxiliary video information */
77         struct dc_info_packet avi;
78         struct dc_info_packet gamut;
79         struct dc_info_packet vendor;
80         struct dc_info_packet hfvsif;
81         struct dc_info_packet vtem;
82         /* source product description */
83         struct dc_info_packet spd;
84         /* video stream configuration */
85         struct dc_info_packet vsc;
86         /* HDR Static MetaData */
87         struct dc_info_packet hdrsmd;
88 };
89
90 struct encoder_unblank_param {
91         struct dc_link_settings link_settings;
92         struct dc_crtc_timing timing;
93         int opp_cnt;
94 };
95
96 struct encoder_set_dp_phy_pattern_param {
97         enum dp_test_pattern dp_phy_pattern;
98         const uint8_t *custom_pattern;
99         uint32_t custom_pattern_size;
100         enum dp_panel_mode dp_panel_mode;
101 };
102
103 struct stream_encoder {
104         const struct stream_encoder_funcs *funcs;
105         struct dc_context *ctx;
106         struct dc_bios *bp;
107         enum engine_id id;
108         uint32_t stream_enc_inst;
109         struct vpg *vpg;
110         struct afmt *afmt;
111 };
112
113 struct enc_state {
114         uint32_t dsc_mode;  // DISABLED  0; 1 or 2 indicate enabled state.
115         uint32_t dsc_slice_width;
116         uint32_t sec_gsp_pps_line_num;
117         uint32_t vbid6_line_reference;
118         uint32_t vbid6_line_num;
119         uint32_t sec_gsp_pps_enable;
120         uint32_t sec_stream_enable;
121 };
122
123 struct stream_encoder_funcs {
124         void (*dp_set_stream_attribute)(
125                 struct stream_encoder *enc,
126                 struct dc_crtc_timing *crtc_timing,
127                 enum dc_color_space output_color_space,
128                 bool use_vsc_sdp_for_colorimetry,
129                 uint32_t enable_sdp_splitting);
130
131         void (*hdmi_set_stream_attribute)(
132                 struct stream_encoder *enc,
133                 struct dc_crtc_timing *crtc_timing,
134                 int actual_pix_clk_khz,
135                 bool enable_audio);
136
137         void (*dvi_set_stream_attribute)(
138                 struct stream_encoder *enc,
139                 struct dc_crtc_timing *crtc_timing,
140                 bool is_dual_link);
141
142         void (*lvds_set_stream_attribute)(
143                 struct stream_encoder *enc,
144                 struct dc_crtc_timing *crtc_timing);
145
146         void (*set_throttled_vcp_size)(
147                 struct stream_encoder *enc,
148                 struct fixed31_32 avg_time_slots_per_mtp);
149
150         void (*update_hdmi_info_packets)(
151                 struct stream_encoder *enc,
152                 const struct encoder_info_frame *info_frame);
153
154         void (*stop_hdmi_info_packets)(
155                 struct stream_encoder *enc);
156
157         void (*update_dp_info_packets)(
158                 struct stream_encoder *enc,
159                 const struct encoder_info_frame *info_frame);
160
161         void (*send_immediate_sdp_message)(
162                                 struct stream_encoder *enc,
163                                 const uint8_t *custom_sdp_message,
164                                 unsigned int sdp_message_size);
165
166         void (*stop_dp_info_packets)(
167                 struct stream_encoder *enc);
168
169         void (*reset_fifo)(
170                 struct stream_encoder *enc
171         );
172
173         void (*dp_blank)(
174                 struct dc_link *link,
175                 struct stream_encoder *enc);
176
177         void (*dp_unblank)(
178                 struct dc_link *link,
179                 struct stream_encoder *enc,
180                 const struct encoder_unblank_param *param);
181
182         void (*audio_mute_control)(
183                 struct stream_encoder *enc, bool mute);
184
185         void (*dp_audio_setup)(
186                 struct stream_encoder *enc,
187                 unsigned int az_inst,
188                 struct audio_info *info);
189
190         void (*dp_audio_enable) (
191                         struct stream_encoder *enc);
192
193         void (*dp_audio_disable) (
194                         struct stream_encoder *enc);
195
196         void (*hdmi_audio_setup)(
197                 struct stream_encoder *enc,
198                 unsigned int az_inst,
199                 struct audio_info *info,
200                 struct audio_crtc_info *audio_crtc_info);
201
202         void (*hdmi_audio_disable) (
203                         struct stream_encoder *enc);
204
205         void (*setup_stereo_sync) (
206                         struct stream_encoder *enc,
207                         int tg_inst,
208                         bool enable);
209
210         void (*set_avmute)(
211                 struct stream_encoder *enc, bool enable);
212
213         void (*dig_connect_to_otg)(
214                 struct stream_encoder *enc,
215                 int tg_inst);
216
217         void (*hdmi_reset_stream_attribute)(
218                 struct stream_encoder *enc);
219
220         unsigned int (*dig_source_otg)(
221                 struct stream_encoder *enc);
222
223         bool (*dp_get_pixel_format)(
224                 struct stream_encoder *enc,
225                 enum dc_pixel_encoding *encoding,
226                 enum dc_color_depth *depth);
227
228         void (*enc_read_state)(struct stream_encoder *enc, struct enc_state *s);
229
230         void (*dp_set_dsc_config)(
231                         struct stream_encoder *enc,
232                         enum optc_dsc_mode dsc_mode,
233                         uint32_t dsc_bytes_per_pixel,
234                         uint32_t dsc_slice_width);
235
236         void (*dp_set_dsc_pps_info_packet)(struct stream_encoder *enc,
237                                 bool enable,
238                                 uint8_t *dsc_packed_pps,
239                                 bool immediate_update);
240
241         void (*set_dynamic_metadata)(struct stream_encoder *enc,
242                         bool enable,
243                         uint32_t hubp_requestor_id,
244                         enum dynamic_metadata_mode dmdata_mode);
245
246         void (*dp_set_odm_combine)(
247                 struct stream_encoder *enc,
248                 bool odm_combine);
249
250         uint32_t (*get_fifo_cal_average_level)(
251                 struct stream_encoder *enc);
252
253         void (*set_input_mode)(
254                 struct stream_encoder *enc, unsigned int pix_per_container);
255         void (*enable_fifo)(struct stream_encoder *enc);
256         void (*disable_fifo)(struct stream_encoder *enc);
257 };
258
259 struct hpo_dp_stream_encoder_state {
260         uint32_t stream_enc_enabled;
261         uint32_t vid_stream_enabled;
262         uint32_t otg_inst;
263         uint32_t pixel_encoding;
264         uint32_t component_depth;
265         uint32_t compressed_format;
266         uint32_t sdp_enabled;
267         uint32_t mapped_to_link_enc;
268 };
269
270 struct hpo_dp_stream_encoder {
271         const struct hpo_dp_stream_encoder_funcs *funcs;
272         struct dc_context *ctx;
273         struct dc_bios *bp;
274         uint32_t inst;
275         enum engine_id id;
276         struct vpg *vpg;
277         struct apg *apg;
278 };
279
280 struct hpo_dp_stream_encoder_funcs {
281         void (*enable_stream)(
282                         struct hpo_dp_stream_encoder *enc);
283
284         void (*dp_unblank)(
285                         struct hpo_dp_stream_encoder *enc,
286                         uint32_t stream_source);
287
288         void (*dp_blank)(
289                         struct hpo_dp_stream_encoder *enc);
290
291         void (*disable)(
292                         struct hpo_dp_stream_encoder *enc);
293
294         void (*set_stream_attribute)(
295                 struct hpo_dp_stream_encoder *enc,
296                 struct dc_crtc_timing *crtc_timing,
297                 enum dc_color_space output_color_space,
298                 bool use_vsc_sdp_for_colorimetry,
299                 bool compressed_format,
300                 bool double_buffer_en);
301
302         void (*update_dp_info_packets)(
303                 struct hpo_dp_stream_encoder *enc,
304                 const struct encoder_info_frame *info_frame);
305
306         void (*stop_dp_info_packets)(
307                 struct hpo_dp_stream_encoder *enc);
308
309         void (*dp_set_dsc_pps_info_packet)(
310                         struct hpo_dp_stream_encoder *enc,
311                         bool enable,
312                         uint8_t *dsc_packed_pps,
313                         bool immediate_update);
314
315         void (*map_stream_to_link)(
316                         struct hpo_dp_stream_encoder *enc,
317                         uint32_t stream_enc_inst,
318                         uint32_t link_enc_inst);
319
320         void (*audio_mute_control)(
321                         struct hpo_dp_stream_encoder *enc, bool mute);
322
323         void (*dp_audio_setup)(
324                         struct hpo_dp_stream_encoder *enc,
325                         unsigned int az_inst,
326                         struct audio_info *info);
327
328         void (*dp_audio_enable)(
329                         struct hpo_dp_stream_encoder *enc);
330
331         void (*dp_audio_disable)(
332                         struct hpo_dp_stream_encoder *enc);
333
334         void (*read_state)(
335                         struct hpo_dp_stream_encoder *enc,
336                         struct hpo_dp_stream_encoder_state *state);
337
338         void (*set_hblank_min_symbol_width)(
339                         struct hpo_dp_stream_encoder *enc,
340                         uint16_t width);
341 };
342
343 #endif /* STREAM_ENCODER_H_ */
This page took 0.054907 seconds and 4 git commands to generate.