xref: /linux/drivers/gpu/drm/amd/display/dc/dml/display_mode_enums.h (revision a7c7b927c8304a2d3bf18f744e3f265e3b8127ba)
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  * Authors: AMD
23  *
24  */
25 #ifndef __DISPLAY_MODE_ENUMS_H__
26 #define __DISPLAY_MODE_ENUMS_H__
27 
28 enum output_encoder_class {
29 	dm_dp = 0,
30 	dm_hdmi = 1,
31 	dm_wb = 2,
32 	dm_edp = 3,
33 	dm_hdmifrl = 4,
34 	dm_dp2p0 = 5,
35 };
36 enum output_format_class {
37 	dm_444 = 0, dm_420 = 1, dm_n422, dm_s422
38 };
39 enum source_format_class {
40 	dm_444_16 = 0,
41 	dm_444_32 = 1,
42 	dm_444_64 = 2,
43 	dm_420_8 = 3,
44 	dm_420_10 = 4,
45 	dm_420_12 = 5,
46 	dm_422_8 = 6,
47 	dm_422_10 = 7,
48 	dm_444_8 = 8,
49 	dm_mono_8 = dm_444_8,
50 	dm_mono_16 = dm_444_16,
51 	dm_rgbe = 9,
52 	dm_rgbe_alpha = 10,
53 };
54 enum output_bpc_class {
55 	dm_out_6 = 0, dm_out_8 = 1, dm_out_10 = 2, dm_out_12 = 3, dm_out_16 = 4
56 };
57 enum scan_direction_class {
58 	dm_horz = 0, dm_vert = 1
59 };
60 enum dm_swizzle_mode {
61 	dm_sw_linear = 0,
62 	dm_sw_256b_s = 1,
63 	dm_sw_256b_d = 2,
64 	dm_sw_SPARE_0 = 3,
65 	dm_sw_SPARE_1 = 4,
66 	dm_sw_4kb_s = 5,
67 	dm_sw_4kb_d = 6,
68 	dm_sw_SPARE_2 = 7,
69 	dm_sw_SPARE_3 = 8,
70 	dm_sw_64kb_s = 9,
71 	dm_sw_64kb_d = 10,
72 	dm_sw_SPARE_4 = 11,
73 	dm_sw_SPARE_5 = 12,
74 	dm_sw_var_s = 13,
75 	dm_sw_var_d = 14,
76 	dm_sw_SPARE_6 = 15,
77 	dm_sw_SPARE_7 = 16,
78 	dm_sw_64kb_s_t = 17,
79 	dm_sw_64kb_d_t = 18,
80 	dm_sw_SPARE_10 = 19,
81 	dm_sw_SPARE_11 = 20,
82 	dm_sw_4kb_s_x = 21,
83 	dm_sw_4kb_d_x = 22,
84 	dm_sw_SPARE_12 = 23,
85 	dm_sw_SPARE_13 = 24,
86 	dm_sw_64kb_s_x = 25,
87 	dm_sw_64kb_d_x = 26,
88 	dm_sw_64kb_r_x = 27,
89 	dm_sw_SPARE_15 = 28,
90 	dm_sw_var_s_x = 29,
91 	dm_sw_var_d_x = 30,
92 	dm_sw_var_r_x = 31,
93 	dm_sw_gfx7_2d_thin_l_vp,
94 	dm_sw_gfx7_2d_thin_gl,
95 };
96 enum lb_depth {
97 	dm_lb_10 = 0, dm_lb_8 = 1, dm_lb_6 = 2, dm_lb_12 = 3, dm_lb_16 = 4,
98 	dm_lb_19 = 5
99 };
100 enum voltage_state {
101 	dm_vmin = 0, dm_vmid = 1, dm_vnom = 2, dm_vmax = 3
102 };
103 enum source_macro_tile_size {
104 	dm_4k_tile = 0, dm_64k_tile = 1, dm_256k_tile = 2
105 };
106 enum cursor_bpp {
107 	dm_cur_2bit = 0, dm_cur_32bit = 1, dm_cur_64bit = 2
108 };
109 
110 /**
111  * @enum clock_change_support - It represents possible reasons to change the DRAM clock.
112  *
113  * DC may change the DRAM clock during its execution, and this enum tracks all
114  * the available methods. Note that every ASIC has their specific way to deal
115  * with these clock switch.
116  */
117 enum clock_change_support {
118 	/**
119 	 * @dm_dram_clock_change_uninitialized: If you see this, we might have
120 	 * a code initialization issue
121 	 */
122 	dm_dram_clock_change_uninitialized = 0,
123 
124 	/**
125 	 * @dm_dram_clock_change_vactive: Support DRAM switch in VActive
126 	 */
127 	dm_dram_clock_change_vactive,
128 
129 	/**
130 	 * @dm_dram_clock_change_vblank: Support DRAM switch in VBlank
131 	 */
132 	dm_dram_clock_change_vblank,
133 
134 	dm_dram_clock_change_vactive_w_mall_full_frame,
135 	dm_dram_clock_change_vactive_w_mall_sub_vp,
136 	dm_dram_clock_change_vblank_w_mall_full_frame,
137 	dm_dram_clock_change_vblank_w_mall_sub_vp,
138 
139 	/**
140 	 * @dm_dram_clock_change_unsupported: Do not support DRAM switch
141 	 */
142 	dm_dram_clock_change_unsupported
143 };
144 
145 enum output_standard {
146 	dm_std_uninitialized = 0,
147 	dm_std_cvtr2,
148 	dm_std_cvt
149 };
150 
151 enum mpc_combine_affinity {
152 	dm_mpc_always_when_possible,
153 	dm_mpc_reduce_voltage,
154 	dm_mpc_reduce_voltage_and_clocks,
155 	dm_mpc_never
156 };
157 
158 enum RequestType {
159 	REQ_256Bytes, REQ_128BytesNonContiguous, REQ_128BytesContiguous, REQ_NA
160 };
161 
162 enum self_refresh_affinity {
163 	dm_try_to_allow_self_refresh_and_mclk_switch,
164 	dm_allow_self_refresh_and_mclk_switch,
165 	dm_allow_self_refresh,
166 	dm_neither_self_refresh_nor_mclk_switch
167 };
168 
169 enum dm_validation_status {
170 	DML_VALIDATION_OK,
171 	DML_FAIL_SCALE_RATIO_TAP,
172 	DML_FAIL_SOURCE_PIXEL_FORMAT,
173 	DML_FAIL_VIEWPORT_SIZE,
174 	DML_FAIL_TOTAL_V_ACTIVE_BW,
175 	DML_FAIL_DIO_SUPPORT,
176 	DML_FAIL_NOT_ENOUGH_DSC,
177 	DML_FAIL_DSC_CLK_REQUIRED,
178 	DML_FAIL_DSC_VALIDATION_FAILURE,
179 	DML_FAIL_URGENT_LATENCY,
180 	DML_FAIL_REORDERING_BUFFER,
181 	DML_FAIL_DISPCLK_DPPCLK,
182 	DML_FAIL_TOTAL_AVAILABLE_PIPES,
183 	DML_FAIL_NUM_OTG,
184 	DML_FAIL_WRITEBACK_MODE,
185 	DML_FAIL_WRITEBACK_LATENCY,
186 	DML_FAIL_WRITEBACK_SCALE_RATIO_TAP,
187 	DML_FAIL_CURSOR_SUPPORT,
188 	DML_FAIL_PITCH_SUPPORT,
189 	DML_FAIL_PTE_BUFFER_SIZE,
190 	DML_FAIL_HOST_VM_IMMEDIATE_FLIP,
191 	DML_FAIL_DSC_INPUT_BPC,
192 	DML_FAIL_PREFETCH_SUPPORT,
193 	DML_FAIL_V_RATIO_PREFETCH,
194 	DML_FAIL_P2I_WITH_420,
195 	DML_FAIL_DSC_ONLY_IF_NECESSARY_WITH_BPP,
196 	DML_FAIL_NOT_DSC422_NATIVE,
197 	DML_FAIL_ODM_COMBINE4TO1,
198 	DML_FAIL_ENOUGH_WRITEBACK_UNITS,
199 	DML_FAIL_VIEWPORT_EXCEEDS_SURFACE,
200 	DML_FAIL_DYNAMIC_METADATA,
201 	DML_FAIL_FMT_BUFFER_EXCEEDED,
202 };
203 
204 enum writeback_config {
205 	dm_normal,
206 	dm_whole_buffer_for_single_stream_no_interleave,
207 	dm_whole_buffer_for_single_stream_interleave,
208 };
209 
210 enum odm_combine_mode {
211 	dm_odm_combine_mode_disabled,
212 	dm_odm_combine_mode_2to1,
213 	dm_odm_combine_mode_4to1,
214 	dm_odm_split_mode_1to2,
215 	dm_odm_mode_mso_1to2,
216 	dm_odm_mode_mso_1to4
217 };
218 
219 enum odm_combine_policy {
220 	dm_odm_combine_policy_dal,
221 	dm_odm_combine_policy_none,
222 	dm_odm_combine_policy_2to1,
223 	dm_odm_combine_policy_4to1,
224 	dm_odm_split_policy_1to2,
225 	dm_odm_mso_policy_1to2,
226 	dm_odm_mso_policy_1to4,
227 };
228 
229 enum immediate_flip_requirement {
230 	dm_immediate_flip_not_required,
231 	dm_immediate_flip_required,
232 	dm_immediate_flip_opportunistic,
233 };
234 
235 enum unbounded_requesting_policy {
236 	dm_unbounded_requesting,
237 	dm_unbounded_requesting_edp_only,
238 	dm_unbounded_requesting_disable
239 };
240 
241 enum dm_rotation_angle {
242 	dm_rotation_0,
243 	dm_rotation_90,
244 	dm_rotation_180,
245 	dm_rotation_270,
246 	dm_rotation_0m,
247 	dm_rotation_90m,
248 	dm_rotation_180m,
249 	dm_rotation_270m,
250 };
251 
252 enum dm_use_mall_for_pstate_change_mode {
253 	dm_use_mall_pstate_change_disable,
254 	dm_use_mall_pstate_change_full_frame,
255 	dm_use_mall_pstate_change_sub_viewport,
256 	dm_use_mall_pstate_change_phantom_pipe
257 };
258 
259 enum dm_use_mall_for_static_screen_mode {
260 	dm_use_mall_static_screen_disable,
261 	dm_use_mall_static_screen_optimize,
262 	dm_use_mall_static_screen_enable,
263 };
264 
265 enum dm_output_link_dp_rate {
266 	dm_dp_rate_na,
267 	dm_dp_rate_hbr,
268 	dm_dp_rate_hbr2,
269 	dm_dp_rate_hbr3,
270 	dm_dp_rate_uhbr10,
271 	dm_dp_rate_uhbr13p5,
272 	dm_dp_rate_uhbr20,
273 };
274 
275 enum dm_fclock_change_support {
276 	dm_fclock_change_vactive,
277 	dm_fclock_change_vblank,
278 	dm_fclock_change_unsupported,
279 };
280 
281 enum dm_prefetch_modes {
282 	dm_prefetch_support_uclk_fclk_and_stutter_if_possible,
283 	dm_prefetch_support_uclk_fclk_and_stutter,
284 	dm_prefetch_support_fclk_and_stutter,
285 	dm_prefetch_support_stutter,
286 	dm_prefetch_support_none,
287 };
288 enum dm_output_type {
289 	dm_output_type_unknown,
290 	dm_output_type_dp,
291 	dm_output_type_edp,
292 	dm_output_type_dp2p0,
293 	dm_output_type_hdmi,
294 	dm_output_type_hdmifrl,
295 };
296 
297 enum dm_output_rate {
298 	dm_output_rate_unknown,
299 	dm_output_rate_dp_rate_hbr,
300 	dm_output_rate_dp_rate_hbr2,
301 	dm_output_rate_dp_rate_hbr3,
302 	dm_output_rate_dp_rate_uhbr10,
303 	dm_output_rate_dp_rate_uhbr13p5,
304 	dm_output_rate_dp_rate_uhbr20,
305 	dm_output_rate_hdmi_rate_3x3,
306 	dm_output_rate_hdmi_rate_6x3,
307 	dm_output_rate_hdmi_rate_6x4,
308 	dm_output_rate_hdmi_rate_8x4,
309 	dm_output_rate_hdmi_rate_10x4,
310 	dm_output_rate_hdmi_rate_12x4,
311 };
312 #endif
313