xref: /dragonfly/sys/dev/drm/amd/display/include/grph_object_ctrl_defs.h (revision b843c749addef9340ee7d4e250b09fdd492602a1)
1 /*
2  * Copyright 2012-15 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 
26 #ifndef __DAL_GRPH_OBJECT_CTRL_DEFS_H__
27 #define __DAL_GRPH_OBJECT_CTRL_DEFS_H__
28 
29 #include "grph_object_defs.h"
30 
31 /*
32  * #####################################################
33  * #####################################################
34  *
35  * These defines shared between asic_control/bios_parser and other
36  * DAL components
37  *
38  * #####################################################
39  * #####################################################
40  */
41 
42 enum display_output_bit_depth {
43           PANEL_UNDEFINE = 0,
44           PANEL_6BIT_COLOR = 1,
45           PANEL_8BIT_COLOR = 2,
46           PANEL_10BIT_COLOR = 3,
47           PANEL_12BIT_COLOR = 4,
48           PANEL_16BIT_COLOR = 5,
49 };
50 
51 
52 /* Device type as abstracted by ATOM BIOS */
53 enum dal_device_type {
54           DEVICE_TYPE_UNKNOWN = 0,
55           DEVICE_TYPE_LCD,
56           DEVICE_TYPE_CRT,
57           DEVICE_TYPE_DFP,
58           DEVICE_TYPE_CV,
59           DEVICE_TYPE_TV,
60           DEVICE_TYPE_CF,
61           DEVICE_TYPE_WIRELESS
62 };
63 
64 /* Device ID as abstracted by ATOM BIOS */
65 struct device_id {
66           enum dal_device_type device_type:16;
67           uint32_t enum_id:16;          /* 1 based enum */
68           uint16_t raw_device_tag;
69 };
70 
71 struct graphics_object_i2c_info {
72           struct gpio_info {
73                     uint32_t clk_mask_register_index;
74                     uint32_t clk_en_register_index;
75                     uint32_t clk_y_register_index;
76                     uint32_t clk_a_register_index;
77                     uint32_t data_mask_register_index;
78                     uint32_t data_en_register_index;
79                     uint32_t data_y_register_index;
80                     uint32_t data_a_register_index;
81 
82                     uint32_t clk_mask_shift;
83                     uint32_t clk_en_shift;
84                     uint32_t clk_y_shift;
85                     uint32_t clk_a_shift;
86                     uint32_t data_mask_shift;
87                     uint32_t data_en_shift;
88                     uint32_t data_y_shift;
89                     uint32_t data_a_shift;
90           } gpio_info;
91 
92           bool i2c_hw_assist;
93           uint32_t i2c_line;
94           uint32_t i2c_engine_id;
95           uint32_t i2c_slave_address;
96 };
97 
98 struct graphics_object_hpd_info {
99           uint8_t hpd_int_gpio_uid;
100           uint8_t hpd_active;
101 };
102 
103 struct connector_device_tag_info {
104           uint32_t acpi_device;
105           struct device_id dev_id;
106 };
107 
108 struct device_timing {
109           struct misc_info {
110                     uint32_t HORIZONTAL_CUT_OFF:1;
111                     /* 0=Active High, 1=Active Low */
112                     uint32_t H_SYNC_POLARITY:1;
113                     /* 0=Active High, 1=Active Low */
114                     uint32_t V_SYNC_POLARITY:1;
115                     uint32_t VERTICAL_CUT_OFF:1;
116                     uint32_t H_REPLICATION_BY2:1;
117                     uint32_t V_REPLICATION_BY2:1;
118                     uint32_t COMPOSITE_SYNC:1;
119                     uint32_t INTERLACE:1;
120                     uint32_t DOUBLE_CLOCK:1;
121                     uint32_t RGB888:1;
122                     uint32_t GREY_LEVEL:2;
123                     uint32_t SPATIAL:1;
124                     uint32_t TEMPORAL:1;
125                     uint32_t API_ENABLED:1;
126           } misc_info;
127 
128           uint32_t pixel_clk; /* in KHz */
129           uint32_t horizontal_addressable;
130           uint32_t horizontal_blanking_time;
131           uint32_t vertical_addressable;
132           uint32_t vertical_blanking_time;
133           uint32_t horizontal_sync_offset;
134           uint32_t horizontal_sync_width;
135           uint32_t vertical_sync_offset;
136           uint32_t vertical_sync_width;
137           uint32_t horizontal_border;
138           uint32_t vertical_border;
139 };
140 
141 struct supported_refresh_rate {
142           uint32_t REFRESH_RATE_30HZ:1;
143           uint32_t REFRESH_RATE_40HZ:1;
144           uint32_t REFRESH_RATE_48HZ:1;
145           uint32_t REFRESH_RATE_50HZ:1;
146           uint32_t REFRESH_RATE_60HZ:1;
147 };
148 
149 struct embedded_panel_info {
150           struct device_timing lcd_timing;
151           uint32_t ss_id;
152           struct supported_refresh_rate supported_rr;
153           uint32_t drr_enabled;
154           uint32_t min_drr_refresh_rate;
155           bool realtek_eDPToLVDS;
156 };
157 
158 struct dc_firmware_info {
159           struct pll_info {
160                     uint32_t crystal_frequency; /* in KHz */
161                     uint32_t min_input_pxl_clk_pll_frequency; /* in KHz */
162                     uint32_t max_input_pxl_clk_pll_frequency; /* in KHz */
163                     uint32_t min_output_pxl_clk_pll_frequency; /* in KHz */
164                     uint32_t max_output_pxl_clk_pll_frequency; /* in KHz */
165           } pll_info;
166 
167           struct firmware_feature {
168                     uint32_t memory_clk_ss_percentage;
169                     uint32_t engine_clk_ss_percentage;
170           } feature;
171 
172           uint32_t default_display_engine_pll_frequency; /* in KHz */
173           uint32_t external_clock_source_frequency_for_dp; /* in KHz */
174           uint32_t smu_gpu_pll_output_freq; /* in KHz */
175           uint8_t min_allowed_bl_level;
176           uint8_t remote_display_config;
177           uint32_t default_memory_clk; /* in KHz */
178           uint32_t default_engine_clk; /* in KHz */
179           uint32_t dp_phy_ref_clk; /* in KHz - DCE12 only */
180           uint32_t i2c_engine_ref_clk; /* in KHz - DCE12 only */
181 
182 
183 };
184 
185 struct step_and_delay_info {
186           uint32_t step;
187           uint32_t delay;
188           uint32_t recommended_ref_div;
189 };
190 
191 struct spread_spectrum_info {
192           struct spread_spectrum_type {
193                     bool CENTER_MODE:1;
194                     bool EXTERNAL:1;
195                     bool STEP_AND_DELAY_INFO:1;
196           } type;
197 
198           /* in unit of 0.01% (spreadPercentageDivider = 100),
199           otherwise in 0.001% units (spreadPercentageDivider = 1000); */
200           uint32_t spread_spectrum_percentage;
201           uint32_t spread_percentage_divider; /* 100 or 1000 */
202           uint32_t spread_spectrum_range; /* modulation freq (HZ)*/
203 
204           union {
205                     struct step_and_delay_info step_and_delay_info;
206                     /* For mem/engine/uvd, Clock Out frequence (VCO ),
207                     in unit of kHz. For TMDS/HDMI/LVDS, it is pixel clock,
208                     for DP, it is link clock ( 270000 or 162000 ) */
209                     uint32_t target_clock_range; /* in KHz */
210           };
211 
212 };
213 
214 struct graphics_object_encoder_cap_info {
215           uint32_t dp_hbr2_cap:1;
216           uint32_t dp_hbr2_validated:1;
217           /*
218            * TODO: added MST and HDMI 6G capable flags
219            */
220           uint32_t reserved:15;
221 };
222 
223 struct din_connector_info {
224           uint32_t gpio_id;
225           bool gpio_tv_active_state;
226 };
227 
228 /* Invalid channel mapping */
229 enum { INVALID_DDI_CHANNEL_MAPPING = 0x0 };
230 
231 /**
232  * DDI PHY channel mapping reflecting XBAR setting
233  */
234 union ddi_channel_mapping {
235           struct mapping {
236                     uint8_t lane0:2;    /* Mapping for lane 0 */
237                     uint8_t lane1:2;    /* Mapping for lane 1 */
238                     uint8_t lane2:2;    /* Mapping for lane 2 */
239                     uint8_t lane3:2;    /* Mapping for lane 3 */
240           } mapping;
241           uint8_t raw;
242 };
243 
244 /**
245 * Transmitter output configuration description
246 */
247 struct transmitter_configuration_info {
248           /* DDI PHY ID for the transmitter */
249           enum transmitter transmitter_phy_id;
250           /* DDI PHY channel mapping reflecting crossbar setting */
251           union ddi_channel_mapping output_channel_mapping;
252 };
253 
254 struct transmitter_configuration {
255           /* Configuration for the primary transmitter */
256           struct transmitter_configuration_info primary_transmitter_config;
257           /* Secondary transmitter configuration for Dual-link DVI */
258           struct transmitter_configuration_info secondary_transmitter_config;
259 };
260 
261 /* These size should be sufficient to store info coming from BIOS */
262 #define NUMBER_OF_UCHAR_FOR_GUID 16
263 #define MAX_NUMBER_OF_EXT_DISPLAY_PATH 7
264 #define NUMBER_OF_CSR_M3_ARB 10
265 #define NUMBER_OF_DISP_CLK_VOLTAGE 4
266 #define NUMBER_OF_AVAILABLE_SCLK 5
267 
268 struct i2c_reg_info {
269           unsigned char       i2c_reg_index;
270           unsigned char       i2c_reg_val;
271 };
272 
273 struct ext_hdmi_settings {
274           unsigned char   slv_addr;
275           unsigned char   reg_num;
276           struct i2c_reg_info      reg_settings[9];
277           unsigned char   reg_num_6g;
278           struct i2c_reg_info      reg_settings_6g[3];
279 };
280 
281 
282 /* V6 */
283 struct integrated_info {
284           struct clock_voltage_caps {
285                     /* The Voltage Index indicated by FUSE, same voltage index
286                     shared with SCLK DPM fuse table */
287                     uint32_t voltage_index;
288                     /* Maximum clock supported with specified voltage index */
289                     uint32_t max_supported_clk; /* in KHz */
290           } disp_clk_voltage[NUMBER_OF_DISP_CLK_VOLTAGE];
291 
292           struct display_connection_info {
293                     struct external_display_path {
294                               /* A bit vector to show what devices are supported */
295                               uint32_t device_tag;
296                               /* 16bit device ACPI id. */
297                               uint32_t device_acpi_enum;
298                               /* A physical connector for displays to plug in,
299                               using object connector definitions */
300                               struct graphics_object_id device_connector_id;
301                               /* An index into external AUX/DDC channel LUT */
302                               uint8_t ext_aux_ddc_lut_index;
303                               /* An index into external HPD pin LUT */
304                               uint8_t ext_hpd_pin_lut_index;
305                               /* external encoder object id */
306                               struct graphics_object_id ext_encoder_obj_id;
307                               /* XBAR mapping of the PHY channels */
308                               union ddi_channel_mapping channel_mapping;
309 
310                               unsigned short caps;
311                     } path[MAX_NUMBER_OF_EXT_DISPLAY_PATH];
312 
313                     uint8_t gu_id[NUMBER_OF_UCHAR_FOR_GUID];
314                     uint8_t checksum;
315           } ext_disp_conn_info; /* exiting long long time */
316 
317           struct available_s_clk_list {
318                     /* Maximum clock supported with specified voltage index */
319                     uint32_t supported_s_clk; /* in KHz */
320                     /* The Voltage Index indicated by FUSE for specified SCLK */
321                     uint32_t voltage_index;
322                     /* The Voltage ID indicated by FUSE for specified SCLK */
323                     uint32_t voltage_id;
324           } avail_s_clk[NUMBER_OF_AVAILABLE_SCLK];
325 
326           uint8_t memory_type;
327           uint8_t ma_channel_number;
328           uint32_t boot_up_engine_clock; /* in KHz */
329           uint32_t dentist_vco_freq; /* in KHz */
330           uint32_t boot_up_uma_clock; /* in KHz */
331           uint32_t boot_up_req_display_vector;
332           uint32_t other_display_misc;
333           uint32_t gpu_cap_info;
334           uint32_t sb_mmio_base_addr;
335           uint32_t system_config;
336           uint32_t cpu_cap_info;
337           uint32_t max_nb_voltage;
338           uint32_t min_nb_voltage;
339           uint32_t boot_up_nb_voltage;
340           uint32_t ext_disp_conn_info_offset;
341           uint32_t csr_m3_arb_cntl_default[NUMBER_OF_CSR_M3_ARB];
342           uint32_t csr_m3_arb_cntl_uvd[NUMBER_OF_CSR_M3_ARB];
343           uint32_t csr_m3_arb_cntl_fs3d[NUMBER_OF_CSR_M3_ARB];
344           uint32_t gmc_restore_reset_time;
345           uint32_t minimum_n_clk;
346           uint32_t idle_n_clk;
347           uint32_t ddr_dll_power_up_time;
348           uint32_t ddr_pll_power_up_time;
349           /* start for V6 */
350           uint32_t pcie_clk_ss_type;
351           uint32_t lvds_ss_percentage;
352           uint32_t lvds_sspread_rate_in_10hz;
353           uint32_t hdmi_ss_percentage;
354           uint32_t hdmi_sspread_rate_in_10hz;
355           uint32_t dvi_ss_percentage;
356           uint32_t dvi_sspread_rate_in_10_hz;
357           uint32_t sclk_dpm_boost_margin;
358           uint32_t sclk_dpm_throttle_margin;
359           uint32_t sclk_dpm_tdp_limit_pg;
360           uint32_t sclk_dpm_tdp_limit_boost;
361           uint32_t boost_engine_clock;
362           uint32_t boost_vid_2bit;
363           uint32_t enable_boost;
364           uint32_t gnb_tdp_limit;
365           /* Start from V7 */
366           uint32_t max_lvds_pclk_freq_in_single_link;
367           uint32_t lvds_misc;
368           uint32_t lvds_pwr_on_seq_dig_on_to_de_in_4ms;
369           uint32_t lvds_pwr_on_seq_de_to_vary_bl_in_4ms;
370           uint32_t lvds_pwr_off_seq_vary_bl_to_de_in4ms;
371           uint32_t lvds_pwr_off_seq_de_to_dig_on_in4ms;
372           uint32_t lvds_off_to_on_delay_in_4ms;
373           uint32_t lvds_pwr_on_seq_vary_bl_to_blon_in_4ms;
374           uint32_t lvds_pwr_off_seq_blon_to_vary_bl_in_4ms;
375           uint32_t lvds_reserved1;
376           uint32_t lvds_bit_depth_control_val;
377           //Start from V9
378           unsigned char dp0_ext_hdmi_slv_addr;
379           unsigned char dp0_ext_hdmi_reg_num;
380           struct i2c_reg_info dp0_ext_hdmi_reg_settings[9];
381           unsigned char dp0_ext_hdmi_6g_reg_num;
382           struct i2c_reg_info dp0_ext_hdmi_6g_reg_settings[3];
383           unsigned char dp1_ext_hdmi_slv_addr;
384           unsigned char dp1_ext_hdmi_reg_num;
385           struct i2c_reg_info dp1_ext_hdmi_reg_settings[9];
386           unsigned char dp1_ext_hdmi_6g_reg_num;
387           struct i2c_reg_info dp1_ext_hdmi_6g_reg_settings[3];
388           unsigned char dp2_ext_hdmi_slv_addr;
389           unsigned char dp2_ext_hdmi_reg_num;
390           struct i2c_reg_info dp2_ext_hdmi_reg_settings[9];
391           unsigned char dp2_ext_hdmi_6g_reg_num;
392           struct i2c_reg_info dp2_ext_hdmi_6g_reg_settings[3];
393           unsigned char dp3_ext_hdmi_slv_addr;
394           unsigned char dp3_ext_hdmi_reg_num;
395           struct i2c_reg_info dp3_ext_hdmi_reg_settings[9];
396           unsigned char dp3_ext_hdmi_6g_reg_num;
397           struct i2c_reg_info dp3_ext_hdmi_6g_reg_settings[3];
398           /* V11 */
399           uint32_t dp_ss_control;
400 };
401 
402 /**
403 * Power source ids.
404 */
405 enum power_source {
406           POWER_SOURCE_AC = 0,
407           POWER_SOURCE_DC,
408           POWER_SOURCE_LIMITED_POWER,
409           POWER_SOURCE_LIMITED_POWER_2,
410           POWER_SOURCE_MAX
411 };
412 
413 struct bios_event_info {
414           uint32_t thermal_state;
415           uint32_t backlight_level;
416           enum power_source powerSource;
417           bool has_thermal_state_changed;
418           bool has_power_source_changed;
419           bool has_forced_mode_changed;
420           bool forced_mode;
421           bool backlight_changed;
422 };
423 
424 /*
425  * DFS-bypass flag
426  */
427 /* Copy of SYS_INFO_GPUCAPS__ENABEL_DFS_BYPASS from atombios.h */
428 enum {
429           DFS_BYPASS_ENABLE = 0x10
430 };
431 
432 enum {
433           INVALID_BACKLIGHT = -1
434 };
435 
436 struct panel_backlight_boundaries {
437           uint32_t min_signal_level;
438           uint32_t max_signal_level;
439 };
440 
441 
442 #endif
443