root/drivers/gpu/drm/amd/display/include/grph_object_ctrl_defs.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   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

/* [<][>][^][v][top][bottom][index][help] */