2 * Copyright 2012-15 Advanced Micro Devices, Inc.
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:
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
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.
26 #ifndef __DAL_GRPH_OBJECT_CTRL_DEFS_H__
27 #define __DAL_GRPH_OBJECT_CTRL_DEFS_H__
29 #include "grph_object_defs.h"
32 * #####################################################
33 * #####################################################
35 * These defines shared between asic_control/bios_parser and other
38 * #####################################################
39 * #####################################################
42 enum display_output_bit_depth
{
46 PANEL_10BIT_COLOR
= 3,
47 PANEL_12BIT_COLOR
= 4,
48 PANEL_16BIT_COLOR
= 5,
52 /* Device type as abstracted by ATOM BIOS */
53 enum dal_device_type
{
54 DEVICE_TYPE_UNKNOWN
= 0,
64 /* Device ID as abstracted by ATOM BIOS */
66 enum dal_device_type device_type
:16;
67 uint32_t enum_id
:16; /* 1 based enum */
68 uint16_t raw_device_tag
;
71 struct graphics_object_i2c_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
;
82 uint32_t clk_mask_shift
;
83 uint32_t clk_en_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
;
94 uint32_t i2c_engine_id
;
95 uint32_t i2c_slave_address
;
98 struct graphics_object_hpd_info
{
99 uint8_t hpd_int_gpio_uid
;
103 struct connector_device_tag_info
{
104 uint32_t acpi_device
;
105 struct device_id dev_id
;
108 struct device_timing
{
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;
122 uint32_t GREY_LEVEL
:2;
125 uint32_t API_ENABLED
:1;
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
;
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;
149 struct embedded_panel_info
{
150 struct device_timing lcd_timing
;
152 struct supported_refresh_rate supported_rr
;
153 uint32_t drr_enabled
;
154 uint32_t min_drr_refresh_rate
;
155 bool realtek_eDPToLVDS
;
158 struct dc_firmware_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 */
167 struct firmware_feature
{
168 uint32_t memory_clk_ss_percentage
;
169 uint32_t engine_clk_ss_percentage
;
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 bool oem_i2c_present
;
182 uint8_t oem_i2c_obj_id
;
186 struct step_and_delay_info
{
189 uint32_t recommended_ref_div
;
192 struct spread_spectrum_info
{
193 struct spread_spectrum_type
{
196 bool STEP_AND_DELAY_INFO
:1;
199 /* in unit of 0.01% (spreadPercentageDivider = 100),
200 otherwise in 0.001% units (spreadPercentageDivider = 1000); */
201 uint32_t spread_spectrum_percentage
;
202 uint32_t spread_percentage_divider
; /* 100 or 1000 */
203 uint32_t spread_spectrum_range
; /* modulation freq (HZ)*/
206 struct step_and_delay_info step_and_delay_info
;
207 /* For mem/engine/uvd, Clock Out frequence (VCO ),
208 in unit of kHz. For TMDS/HDMI/LVDS, it is pixel clock,
209 for DP, it is link clock ( 270000 or 162000 ) */
210 uint32_t target_clock_range
; /* in KHz */
215 struct graphics_object_encoder_cap_info
{
216 uint32_t dp_hbr2_cap
:1;
217 uint32_t dp_hbr2_validated
:1;
219 * TODO: added MST and HDMI 6G capable flags
221 uint32_t reserved
:15;
224 struct din_connector_info
{
226 bool gpio_tv_active_state
;
229 /* Invalid channel mapping */
230 enum { INVALID_DDI_CHANNEL_MAPPING
= 0x0 };
233 * DDI PHY channel mapping reflecting XBAR setting
235 union ddi_channel_mapping
{
237 uint8_t lane0
:2; /* Mapping for lane 0 */
238 uint8_t lane1
:2; /* Mapping for lane 1 */
239 uint8_t lane2
:2; /* Mapping for lane 2 */
240 uint8_t lane3
:2; /* Mapping for lane 3 */
246 * Transmitter output configuration description
248 struct transmitter_configuration_info
{
249 /* DDI PHY ID for the transmitter */
250 enum transmitter transmitter_phy_id
;
251 /* DDI PHY channel mapping reflecting crossbar setting */
252 union ddi_channel_mapping output_channel_mapping
;
255 struct transmitter_configuration
{
256 /* Configuration for the primary transmitter */
257 struct transmitter_configuration_info primary_transmitter_config
;
258 /* Secondary transmitter configuration for Dual-link DVI */
259 struct transmitter_configuration_info secondary_transmitter_config
;
262 /* These size should be sufficient to store info coming from BIOS */
263 #define NUMBER_OF_UCHAR_FOR_GUID 16
264 #define MAX_NUMBER_OF_EXT_DISPLAY_PATH 7
265 #define NUMBER_OF_CSR_M3_ARB 10
266 #define NUMBER_OF_DISP_CLK_VOLTAGE 4
267 #define NUMBER_OF_AVAILABLE_SCLK 5
269 struct i2c_reg_info
{
270 unsigned char i2c_reg_index
;
271 unsigned char i2c_reg_val
;
274 struct ext_hdmi_settings
{
275 unsigned char slv_addr
;
276 unsigned char reg_num
;
277 struct i2c_reg_info reg_settings
[9];
278 unsigned char reg_num_6g
;
279 struct i2c_reg_info reg_settings_6g
[3];
284 struct integrated_info
{
285 struct clock_voltage_caps
{
286 /* The Voltage Index indicated by FUSE, same voltage index
287 shared with SCLK DPM fuse table */
288 uint32_t voltage_index
;
289 /* Maximum clock supported with specified voltage index */
290 uint32_t max_supported_clk
; /* in KHz */
291 } disp_clk_voltage
[NUMBER_OF_DISP_CLK_VOLTAGE
];
293 struct display_connection_info
{
294 struct external_display_path
{
295 /* A bit vector to show what devices are supported */
297 /* 16bit device ACPI id. */
298 uint32_t device_acpi_enum
;
299 /* A physical connector for displays to plug in,
300 using object connector definitions */
301 struct graphics_object_id device_connector_id
;
302 /* An index into external AUX/DDC channel LUT */
303 uint8_t ext_aux_ddc_lut_index
;
304 /* An index into external HPD pin LUT */
305 uint8_t ext_hpd_pin_lut_index
;
306 /* external encoder object id */
307 struct graphics_object_id ext_encoder_obj_id
;
308 /* XBAR mapping of the PHY channels */
309 union ddi_channel_mapping channel_mapping
;
312 } path
[MAX_NUMBER_OF_EXT_DISPLAY_PATH
];
314 uint8_t gu_id
[NUMBER_OF_UCHAR_FOR_GUID
];
316 } ext_disp_conn_info
; /* exiting long long time */
318 struct available_s_clk_list
{
319 /* Maximum clock supported with specified voltage index */
320 uint32_t supported_s_clk
; /* in KHz */
321 /* The Voltage Index indicated by FUSE for specified SCLK */
322 uint32_t voltage_index
;
323 /* The Voltage ID indicated by FUSE for specified SCLK */
325 } avail_s_clk
[NUMBER_OF_AVAILABLE_SCLK
];
328 uint8_t ma_channel_number
;
329 uint32_t boot_up_engine_clock
; /* in KHz */
330 uint32_t dentist_vco_freq
; /* in KHz */
331 uint32_t boot_up_uma_clock
; /* in KHz */
332 uint32_t boot_up_req_display_vector
;
333 uint32_t other_display_misc
;
334 uint32_t gpu_cap_info
;
335 uint32_t sb_mmio_base_addr
;
336 uint32_t system_config
;
337 uint32_t cpu_cap_info
;
338 uint32_t max_nb_voltage
;
339 uint32_t min_nb_voltage
;
340 uint32_t boot_up_nb_voltage
;
341 uint32_t ext_disp_conn_info_offset
;
342 uint32_t csr_m3_arb_cntl_default
[NUMBER_OF_CSR_M3_ARB
];
343 uint32_t csr_m3_arb_cntl_uvd
[NUMBER_OF_CSR_M3_ARB
];
344 uint32_t csr_m3_arb_cntl_fs3d
[NUMBER_OF_CSR_M3_ARB
];
345 uint32_t gmc_restore_reset_time
;
346 uint32_t minimum_n_clk
;
348 uint32_t ddr_dll_power_up_time
;
349 uint32_t ddr_pll_power_up_time
;
351 uint32_t pcie_clk_ss_type
;
352 uint32_t lvds_ss_percentage
;
353 uint32_t lvds_sspread_rate_in_10hz
;
354 uint32_t hdmi_ss_percentage
;
355 uint32_t hdmi_sspread_rate_in_10hz
;
356 uint32_t dvi_ss_percentage
;
357 uint32_t dvi_sspread_rate_in_10_hz
;
358 uint32_t sclk_dpm_boost_margin
;
359 uint32_t sclk_dpm_throttle_margin
;
360 uint32_t sclk_dpm_tdp_limit_pg
;
361 uint32_t sclk_dpm_tdp_limit_boost
;
362 uint32_t boost_engine_clock
;
363 uint32_t boost_vid_2bit
;
364 uint32_t enable_boost
;
365 uint32_t gnb_tdp_limit
;
367 uint32_t max_lvds_pclk_freq_in_single_link
;
369 uint32_t lvds_pwr_on_seq_dig_on_to_de_in_4ms
;
370 uint32_t lvds_pwr_on_seq_de_to_vary_bl_in_4ms
;
371 uint32_t lvds_pwr_off_seq_vary_bl_to_de_in4ms
;
372 uint32_t lvds_pwr_off_seq_de_to_dig_on_in4ms
;
373 uint32_t lvds_off_to_on_delay_in_4ms
;
374 uint32_t lvds_pwr_on_seq_vary_bl_to_blon_in_4ms
;
375 uint32_t lvds_pwr_off_seq_blon_to_vary_bl_in_4ms
;
376 uint32_t lvds_reserved1
;
377 uint32_t lvds_bit_depth_control_val
;
379 unsigned char dp0_ext_hdmi_slv_addr
;
380 unsigned char dp0_ext_hdmi_reg_num
;
381 struct i2c_reg_info dp0_ext_hdmi_reg_settings
[9];
382 unsigned char dp0_ext_hdmi_6g_reg_num
;
383 struct i2c_reg_info dp0_ext_hdmi_6g_reg_settings
[3];
384 unsigned char dp1_ext_hdmi_slv_addr
;
385 unsigned char dp1_ext_hdmi_reg_num
;
386 struct i2c_reg_info dp1_ext_hdmi_reg_settings
[9];
387 unsigned char dp1_ext_hdmi_6g_reg_num
;
388 struct i2c_reg_info dp1_ext_hdmi_6g_reg_settings
[3];
389 unsigned char dp2_ext_hdmi_slv_addr
;
390 unsigned char dp2_ext_hdmi_reg_num
;
391 struct i2c_reg_info dp2_ext_hdmi_reg_settings
[9];
392 unsigned char dp2_ext_hdmi_6g_reg_num
;
393 struct i2c_reg_info dp2_ext_hdmi_6g_reg_settings
[3];
394 unsigned char dp3_ext_hdmi_slv_addr
;
395 unsigned char dp3_ext_hdmi_reg_num
;
396 struct i2c_reg_info dp3_ext_hdmi_reg_settings
[9];
397 unsigned char dp3_ext_hdmi_6g_reg_num
;
398 struct i2c_reg_info dp3_ext_hdmi_6g_reg_settings
[3];
400 uint32_t dp_ss_control
;
409 POWER_SOURCE_LIMITED_POWER
,
410 POWER_SOURCE_LIMITED_POWER_2
,
414 struct bios_event_info
{
415 uint32_t thermal_state
;
416 uint32_t backlight_level
;
417 enum power_source powerSource
;
418 bool has_thermal_state_changed
;
419 bool has_power_source_changed
;
420 bool has_forced_mode_changed
;
422 bool backlight_changed
;
428 /* Copy of SYS_INFO_GPUCAPS__ENABEL_DFS_BYPASS from atombios.h */
430 DFS_BYPASS_ENABLE
= 0x10
434 INVALID_BACKLIGHT
= -1
437 struct panel_backlight_boundaries
{
438 uint32_t min_signal_level
;
439 uint32_t max_signal_level
;