···11+/****************************************************************************\22+* 33+* File Name atomfirmware.h44+* Project This is an interface header file between atombios and OS GPU drivers for SoC15 products55+*66+* Description header file of general definitions for OS nd pre-OS video drivers 77+*88+* Copyright 2014 Advanced Micro Devices, Inc.99+*1010+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software 1111+* and associated documentation files (the "Software"), to deal in the Software without restriction,1212+* including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,1313+* and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,1414+* subject to the following conditions:1515+*1616+* The above copyright notice and this permission notice shall be included in all copies or substantial1717+* portions of the Software.1818+*1919+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR2020+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,2121+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL2222+* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR2323+* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,2424+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR2525+* OTHER DEALINGS IN THE SOFTWARE.2626+*2727+\****************************************************************************/2828+2929+/*IMPORTANT NOTES3030+* If a change in VBIOS/Driver/Tool's interface is only needed for SoC15 and forward products, then the change is only needed in this atomfirmware.h header file.3131+* If a change in VBIOS/Driver/Tool's interface is only needed for pre-SoC15 products, then the change is only needed in atombios.h header file.3232+* If a change is needed for both pre and post SoC15 products, then the change has to be made separately and might be differently in both atomfirmware.h and atombios.h.3333+*/3434+3535+#ifndef _ATOMFIRMWARE_H_3636+#define _ATOMFIRMWARE_H_3737+3838+enum atom_bios_header_version_def{3939+ ATOM_MAJOR_VERSION =0x0003,4040+ ATOM_MINOR_VERSION =0x0003,4141+};4242+4343+#ifdef _H2INC4444+ #ifndef uint32_t4545+ typedef unsigned long uint32_t;4646+ #endif4747+4848+ #ifndef uint16_t4949+ typedef unsigned short uint16_t;5050+ #endif5151+5252+ #ifndef uint8_t 5353+ typedef unsigned char uint8_t;5454+ #endif5555+#endif5656+5757+enum atom_crtc_def{5858+ ATOM_CRTC1 =0,5959+ ATOM_CRTC2 =1,6060+ ATOM_CRTC3 =2,6161+ ATOM_CRTC4 =3,6262+ ATOM_CRTC5 =4,6363+ ATOM_CRTC6 =5,6464+ ATOM_CRTC_INVALID =0xff,6565+};6666+6767+enum atom_ppll_def{6868+ ATOM_PPLL0 =2,6969+ ATOM_GCK_DFS =8,7070+ ATOM_FCH_CLK =9,7171+ ATOM_DP_DTO =11,7272+ ATOM_COMBOPHY_PLL0 =20,7373+ ATOM_COMBOPHY_PLL1 =21,7474+ ATOM_COMBOPHY_PLL2 =22,7575+ ATOM_COMBOPHY_PLL3 =23,7676+ ATOM_COMBOPHY_PLL4 =24,7777+ ATOM_COMBOPHY_PLL5 =25,7878+ ATOM_PPLL_INVALID =0xff,7979+};8080+8181+// define ASIC internal encoder id ( bit vector ), used for CRTC_SourceSel8282+enum atom_dig_def{8383+ ASIC_INT_DIG1_ENCODER_ID =0x03,8484+ ASIC_INT_DIG2_ENCODER_ID =0x09,8585+ ASIC_INT_DIG3_ENCODER_ID =0x0a,8686+ ASIC_INT_DIG4_ENCODER_ID =0x0b,8787+ ASIC_INT_DIG5_ENCODER_ID =0x0c,8888+ ASIC_INT_DIG6_ENCODER_ID =0x0d,8989+ ASIC_INT_DIG7_ENCODER_ID =0x0e,9090+};9191+9292+//ucEncoderMode9393+enum atom_encode_mode_def9494+{9595+ ATOM_ENCODER_MODE_DP =0,9696+ ATOM_ENCODER_MODE_DP_SST =0,9797+ ATOM_ENCODER_MODE_LVDS =1,9898+ ATOM_ENCODER_MODE_DVI =2,9999+ ATOM_ENCODER_MODE_HDMI =3,100100+ ATOM_ENCODER_MODE_DP_AUDIO =5,101101+ ATOM_ENCODER_MODE_DP_MST =5,102102+ ATOM_ENCODER_MODE_CRT =15,103103+ ATOM_ENCODER_MODE_DVO =16,104104+};105105+106106+enum atom_encoder_refclk_src_def{107107+ ENCODER_REFCLK_SRC_P1PLL =0,108108+ ENCODER_REFCLK_SRC_P2PLL =1,109109+ ENCODER_REFCLK_SRC_P3PLL =2,110110+ ENCODER_REFCLK_SRC_EXTCLK =3,111111+ ENCODER_REFCLK_SRC_INVALID =0xff,112112+};113113+114114+enum atom_scaler_def{115115+ ATOM_SCALER_DISABLE =0, /*scaler bypass mode, auto-center & no replication*/116116+ ATOM_SCALER_CENTER =1, //For Fudo, it's bypass and auto-center & auto replication117117+ ATOM_SCALER_EXPANSION =2, /*scaler expansion by 2 tap alpha blending mode*/118118+};119119+120120+enum atom_operation_def{121121+ ATOM_DISABLE = 0,122122+ ATOM_ENABLE = 1,123123+ ATOM_INIT = 7,124124+ ATOM_GET_STATUS = 8,125125+};126126+127127+enum atom_embedded_display_op_def{128128+ ATOM_LCD_BL_OFF = 2,129129+ ATOM_LCD_BL_OM = 3,130130+ ATOM_LCD_BL_BRIGHTNESS_CONTROL = 4,131131+ ATOM_LCD_SELFTEST_START = 5,132132+ ATOM_LCD_SELFTEST_STOP = 6,133133+};134134+135135+enum atom_spread_spectrum_mode{136136+ ATOM_SS_CENTER_OR_DOWN_MODE_MASK = 0x01,137137+ ATOM_SS_DOWN_SPREAD_MODE = 0x00,138138+ ATOM_SS_CENTRE_SPREAD_MODE = 0x01,139139+ ATOM_INT_OR_EXT_SS_MASK = 0x02,140140+ ATOM_INTERNAL_SS_MASK = 0x00,141141+ ATOM_EXTERNAL_SS_MASK = 0x02,142142+};143143+144144+/* define panel bit per color */145145+enum atom_panel_bit_per_color{146146+ PANEL_BPC_UNDEFINE =0x00,147147+ PANEL_6BIT_PER_COLOR =0x01,148148+ PANEL_8BIT_PER_COLOR =0x02,149149+ PANEL_10BIT_PER_COLOR =0x03,150150+ PANEL_12BIT_PER_COLOR =0x04,151151+ PANEL_16BIT_PER_COLOR =0x05,152152+};153153+154154+//ucVoltageType155155+enum atom_voltage_type156156+{157157+ VOLTAGE_TYPE_VDDC = 1,158158+ VOLTAGE_TYPE_MVDDC = 2,159159+ VOLTAGE_TYPE_MVDDQ = 3,160160+ VOLTAGE_TYPE_VDDCI = 4,161161+ VOLTAGE_TYPE_VDDGFX = 5,162162+ VOLTAGE_TYPE_PCC = 6,163163+ VOLTAGE_TYPE_MVPP = 7,164164+ VOLTAGE_TYPE_LEDDPM = 8,165165+ VOLTAGE_TYPE_PCC_MVDD = 9,166166+ VOLTAGE_TYPE_PCIE_VDDC = 10,167167+ VOLTAGE_TYPE_PCIE_VDDR = 11,168168+ VOLTAGE_TYPE_GENERIC_I2C_1 = 0x11,169169+ VOLTAGE_TYPE_GENERIC_I2C_2 = 0x12,170170+ VOLTAGE_TYPE_GENERIC_I2C_3 = 0x13,171171+ VOLTAGE_TYPE_GENERIC_I2C_4 = 0x14,172172+ VOLTAGE_TYPE_GENERIC_I2C_5 = 0x15,173173+ VOLTAGE_TYPE_GENERIC_I2C_6 = 0x16,174174+ VOLTAGE_TYPE_GENERIC_I2C_7 = 0x17,175175+ VOLTAGE_TYPE_GENERIC_I2C_8 = 0x18,176176+ VOLTAGE_TYPE_GENERIC_I2C_9 = 0x19,177177+ VOLTAGE_TYPE_GENERIC_I2C_10 = 0x1A,178178+};179179+180180+enum atom_dgpu_vram_type{181181+ ATOM_DGPU_VRAM_TYPE_GDDR5 = 0x50,182182+ ATOM_DGPU_VRAM_TYPE_HBM = 0x60,183183+};184184+185185+enum atom_dp_vs_preemph_def{186186+ DP_VS_LEVEL0_PREEMPH_LEVEL0 = 0x00,187187+ DP_VS_LEVEL1_PREEMPH_LEVEL0 = 0x01,188188+ DP_VS_LEVEL2_PREEMPH_LEVEL0 = 0x02,189189+ DP_VS_LEVEL3_PREEMPH_LEVEL0 = 0x03,190190+ DP_VS_LEVEL0_PREEMPH_LEVEL1 = 0x08,191191+ DP_VS_LEVEL1_PREEMPH_LEVEL1 = 0x09,192192+ DP_VS_LEVEL2_PREEMPH_LEVEL1 = 0x0a,193193+ DP_VS_LEVEL0_PREEMPH_LEVEL2 = 0x10,194194+ DP_VS_LEVEL1_PREEMPH_LEVEL2 = 0x11,195195+ DP_VS_LEVEL0_PREEMPH_LEVEL3 = 0x18,196196+};197197+198198+199199+/*200200+enum atom_string_def{201201+asic_bus_type_pcie_string = "PCI_EXPRESS", 202202+atom_fire_gl_string = "FGL",203203+atom_bios_string = "ATOM"204204+};205205+*/206206+207207+#pragma pack(1) /* BIOS data must use byte aligment*/208208+209209+enum atombios_image_offset{210210+OFFSET_TO_ATOM_ROM_HEADER_POINTER =0x00000048,211211+OFFSET_TO_ATOM_ROM_IMAGE_SIZE =0x00000002,212212+OFFSET_TO_ATOMBIOS_ASIC_BUS_MEM_TYPE =0x94,213213+MAXSIZE_OF_ATOMBIOS_ASIC_BUS_MEM_TYPE =20, /*including the terminator 0x0!*/214214+OFFSET_TO_GET_ATOMBIOS_NUMBER_OF_STRINGS =0x2f,215215+OFFSET_TO_GET_ATOMBIOS_STRING_START =0x6e,216216+};217217+218218+/**************************************************************************** 219219+* Common header for all tables (Data table, Command function).220220+* Every table pointed in _ATOM_MASTER_DATA_TABLE has this common header. 221221+* And the pointer actually points to this header.222222+****************************************************************************/ 223223+224224+struct atom_common_table_header225225+{226226+ uint16_t structuresize;227227+ uint8_t format_revision; //mainly used for a hw function, when the parser is not backward compatible 228228+ uint8_t content_revision; //change it when a data table has a structure change, or a hw function has a input/output parameter change 229229+};230230+231231+/**************************************************************************** 232232+* Structure stores the ROM header.233233+****************************************************************************/ 234234+struct atom_rom_header_v2_2235235+{236236+ struct atom_common_table_header table_header;237237+ uint8_t atom_bios_string[4]; //enum atom_string_def atom_bios_string; //Signature to distinguish between Atombios and non-atombios, 238238+ uint16_t bios_segment_address;239239+ uint16_t protectedmodeoffset;240240+ uint16_t configfilenameoffset;241241+ uint16_t crc_block_offset;242242+ uint16_t vbios_bootupmessageoffset;243243+ uint16_t int10_offset;244244+ uint16_t pcibusdevinitcode;245245+ uint16_t iobaseaddress;246246+ uint16_t subsystem_vendor_id;247247+ uint16_t subsystem_id;248248+ uint16_t pci_info_offset;249249+ uint16_t masterhwfunction_offset; //Offest for SW to get all command function offsets, Don't change the position250250+ uint16_t masterdatatable_offset; //Offest for SW to get all data table offsets, Don't change the position251251+ uint16_t reserved;252252+ uint32_t pspdirtableoffset;253253+};254254+255255+/*==============================hw function portion======================================================================*/256256+257257+258258+/**************************************************************************** 259259+* Structures used in Command.mtb, each function name is not given here since those function could change from time to time260260+* The real functionality of each function is associated with the parameter structure version when defined261261+* For all internal cmd function definitions, please reference to atomstruct.h262262+****************************************************************************/ 263263+struct atom_master_list_of_command_functions_v2_1{264264+ uint16_t asic_init; //Function265265+ uint16_t cmd_function1; //used as an internal one266266+ uint16_t cmd_function2; //used as an internal one267267+ uint16_t cmd_function3; //used as an internal one268268+ uint16_t digxencodercontrol; //Function 269269+ uint16_t cmd_function5; //used as an internal one270270+ uint16_t cmd_function6; //used as an internal one 271271+ uint16_t cmd_function7; //used as an internal one272272+ uint16_t cmd_function8; //used as an internal one273273+ uint16_t cmd_function9; //used as an internal one274274+ uint16_t setengineclock; //Function275275+ uint16_t setmemoryclock; //Function276276+ uint16_t setpixelclock; //Function277277+ uint16_t enabledisppowergating; //Function 278278+ uint16_t cmd_function14; //used as an internal one 279279+ uint16_t cmd_function15; //used as an internal one280280+ uint16_t cmd_function16; //used as an internal one281281+ uint16_t cmd_function17; //used as an internal one282282+ uint16_t cmd_function18; //used as an internal one283283+ uint16_t cmd_function19; //used as an internal one 284284+ uint16_t cmd_function20; //used as an internal one 285285+ uint16_t cmd_function21; //used as an internal one286286+ uint16_t cmd_function22; //used as an internal one287287+ uint16_t cmd_function23; //used as an internal one288288+ uint16_t cmd_function24; //used as an internal one289289+ uint16_t cmd_function25; //used as an internal one290290+ uint16_t cmd_function26; //used as an internal one291291+ uint16_t cmd_function27; //used as an internal one292292+ uint16_t cmd_function28; //used as an internal one293293+ uint16_t cmd_function29; //used as an internal one294294+ uint16_t cmd_function30; //used as an internal one295295+ uint16_t cmd_function31; //used as an internal one296296+ uint16_t cmd_function32; //used as an internal one297297+ uint16_t cmd_function33; //used as an internal one298298+ uint16_t blankcrtc; //Function299299+ uint16_t enablecrtc; //Function300300+ uint16_t cmd_function36; //used as an internal one301301+ uint16_t cmd_function37; //used as an internal one302302+ uint16_t cmd_function38; //used as an internal one303303+ uint16_t cmd_function39; //used as an internal one304304+ uint16_t cmd_function40; //used as an internal one305305+ uint16_t getsmuclockinfo; //Function306306+ uint16_t selectcrtc_source; //Function307307+ uint16_t cmd_function43; //used as an internal one308308+ uint16_t cmd_function44; //used as an internal one309309+ uint16_t cmd_function45; //used as an internal one310310+ uint16_t setdceclock; //Function311311+ uint16_t getmemoryclock; //Function 312312+ uint16_t getengineclock; //Function 313313+ uint16_t setcrtc_usingdtdtiming; //Function314314+ uint16_t externalencodercontrol; //Function 315315+ uint16_t cmd_function51; //used as an internal one316316+ uint16_t cmd_function52; //used as an internal one317317+ uint16_t cmd_function53; //used as an internal one318318+ uint16_t processi2cchanneltransaction;//Function 319319+ uint16_t cmd_function55; //used as an internal one320320+ uint16_t cmd_function56; //used as an internal one321321+ uint16_t cmd_function57; //used as an internal one322322+ uint16_t cmd_function58; //used as an internal one323323+ uint16_t cmd_function59; //used as an internal one324324+ uint16_t computegpuclockparam; //Function 325325+ uint16_t cmd_function61; //used as an internal one326326+ uint16_t cmd_function62; //used as an internal one327327+ uint16_t dynamicmemorysettings; //Function function328328+ uint16_t memorytraining; //Function function329329+ uint16_t cmd_function65; //used as an internal one330330+ uint16_t cmd_function66; //used as an internal one331331+ uint16_t setvoltage; //Function332332+ uint16_t cmd_function68; //used as an internal one333333+ uint16_t readefusevalue; //Function334334+ uint16_t cmd_function70; //used as an internal one 335335+ uint16_t cmd_function71; //used as an internal one336336+ uint16_t cmd_function72; //used as an internal one337337+ uint16_t cmd_function73; //used as an internal one338338+ uint16_t cmd_function74; //used as an internal one339339+ uint16_t cmd_function75; //used as an internal one340340+ uint16_t dig1transmittercontrol; //Function341341+ uint16_t cmd_function77; //used as an internal one342342+ uint16_t processauxchanneltransaction;//Function343343+ uint16_t cmd_function79; //used as an internal one344344+ uint16_t getvoltageinfo; //Function345345+};346346+347347+struct atom_master_command_function_v2_1348348+{349349+ struct atom_common_table_header table_header;350350+ struct atom_master_list_of_command_functions_v2_1 listofcmdfunctions;351351+};352352+353353+/**************************************************************************** 354354+* Structures used in every command function355355+****************************************************************************/ 356356+struct atom_function_attribute357357+{358358+ uint16_t ws_in_bytes:8; //[7:0]=Size of workspace in Bytes (in multiple of a dword), 359359+ uint16_t ps_in_bytes:7; //[14:8]=Size of parameter space in Bytes (multiple of a dword), 360360+ uint16_t updated_by_util:1; //[15]=flag to indicate the function is updated by util361361+};362362+363363+364364+/**************************************************************************** 365365+* Common header for all hw functions.366366+* Every function pointed by _master_list_of_hw_function has this common header. 367367+* And the pointer actually points to this header.368368+****************************************************************************/ 369369+struct atom_rom_hw_function_header370370+{371371+ struct atom_common_table_header func_header;372372+ struct atom_function_attribute func_attrib; 373373+};374374+375375+376376+/*==============================sw data table portion======================================================================*/377377+/****************************************************************************378378+* Structures used in data.mtb, each data table name is not given here since those data table could change from time to time379379+* The real name of each table is given when its data structure version is defined380380+****************************************************************************/381381+struct atom_master_list_of_data_tables_v2_1{382382+ uint16_t utilitypipeline; /* Offest for the utility to get parser info,Don't change this position!*/383383+ uint16_t multimedia_info; 384384+ uint16_t sw_datatable2;385385+ uint16_t sw_datatable3; 386386+ uint16_t firmwareinfo; /* Shared by various SW components */387387+ uint16_t sw_datatable5;388388+ uint16_t lcd_info; /* Shared by various SW components */389389+ uint16_t sw_datatable7;390390+ uint16_t smu_info; 391391+ uint16_t sw_datatable9;392392+ uint16_t sw_datatable10; 393393+ uint16_t vram_usagebyfirmware; /* Shared by various SW components */394394+ uint16_t gpio_pin_lut; /* Shared by various SW components */395395+ uint16_t sw_datatable13; 396396+ uint16_t gfx_info;397397+ uint16_t powerplayinfo; /* Shared by various SW components */398398+ uint16_t sw_datatable16; 399399+ uint16_t sw_datatable17;400400+ uint16_t sw_datatable18;401401+ uint16_t sw_datatable19; 402402+ uint16_t sw_datatable20;403403+ uint16_t sw_datatable21;404404+ uint16_t displayobjectinfo; /* Shared by various SW components */405405+ uint16_t indirectioaccess; /* used as an internal one */406406+ uint16_t umc_info; /* Shared by various SW components */407407+ uint16_t sw_datatable25;408408+ uint16_t sw_datatable26;409409+ uint16_t dce_info; /* Shared by various SW components */410410+ uint16_t vram_info; /* Shared by various SW components */411411+ uint16_t sw_datatable29;412412+ uint16_t integratedsysteminfo; /* Shared by various SW components */413413+ uint16_t asic_profiling_info; /* Shared by various SW components */414414+ uint16_t voltageobject_info; /* shared by various SW components */415415+ uint16_t sw_datatable33;416416+ uint16_t sw_datatable34;417417+};418418+419419+420420+struct atom_master_data_table_v2_1421421+{ 422422+ struct atom_common_table_header table_header;423423+ struct atom_master_list_of_data_tables_v2_1 listOfdatatables;424424+};425425+426426+427427+struct atom_dtd_format428428+{429429+ uint16_t pixclk;430430+ uint16_t h_active;431431+ uint16_t h_blanking_time;432432+ uint16_t v_active;433433+ uint16_t v_blanking_time;434434+ uint16_t h_sync_offset;435435+ uint16_t h_sync_width;436436+ uint16_t v_sync_offset;437437+ uint16_t v_syncwidth;438438+ uint16_t reserved;439439+ uint16_t reserved0;440440+ uint8_t h_border;441441+ uint8_t v_border;442442+ uint16_t miscinfo;443443+ uint8_t atom_mode_id;444444+ uint8_t refreshrate;445445+};446446+447447+/* atom_dtd_format.modemiscinfo defintion */448448+enum atom_dtd_format_modemiscinfo{449449+ ATOM_HSYNC_POLARITY = 0x0002,450450+ ATOM_VSYNC_POLARITY = 0x0004,451451+ ATOM_H_REPLICATIONBY2 = 0x0010,452452+ ATOM_V_REPLICATIONBY2 = 0x0020,453453+ ATOM_INTERLACE = 0x0080,454454+ ATOM_COMPOSITESYNC = 0x0040,455455+};456456+457457+458458+/* utilitypipeline459459+ * when format_revision==1 && content_revision==1, then this an info table for atomworks to use during debug session, no structure is associated with it.460460+ * the location of it can't change461461+*/462462+463463+464464+/* 465465+ ***************************************************************************466466+ Data Table firmwareinfo structure467467+ ***************************************************************************468468+*/469469+470470+struct atom_firmware_info_v3_1471471+{472472+ struct atom_common_table_header table_header;473473+ uint32_t firmware_revision;474474+ uint32_t bootup_sclk_in10khz;475475+ uint32_t bootup_mclk_in10khz;476476+ uint32_t firmware_capability; // enum atombios_firmware_capability477477+ uint32_t main_call_parser_entry; /* direct address of main parser call in VBIOS binary. */478478+ uint32_t bios_scratch_reg_startaddr; // 1st bios scratch register dword address 479479+ uint16_t bootup_vddc_mv;480480+ uint16_t bootup_vddci_mv; 481481+ uint16_t bootup_mvddc_mv;482482+ uint16_t bootup_vddgfx_mv;483483+ uint8_t mem_module_id; 484484+ uint8_t coolingsolution_id; /*0: Air cooling; 1: Liquid cooling ... */485485+ uint8_t reserved1[2];486486+ uint32_t mc_baseaddr_high;487487+ uint32_t mc_baseaddr_low;488488+ uint32_t reserved2[6];489489+};490490+491491+/* Total 32bit cap indication */492492+enum atombios_firmware_capability493493+{494494+ ATOM_FIRMWARE_CAP_FIRMWARE_POSTED = 0x00000001,495495+ ATOM_FIRMWARE_CAP_GPU_VIRTUALIZATION = 0x00000002,496496+ ATOM_FIRMWARE_CAP_WMI_SUPPORT = 0x00000040,497497+};498498+499499+enum atom_cooling_solution_id{500500+ AIR_COOLING = 0x00,501501+ LIQUID_COOLING = 0x01502502+};503503+504504+505505+/* 506506+ ***************************************************************************507507+ Data Table lcd_info structure508508+ ***************************************************************************509509+*/510510+511511+struct lcd_info_v2_1512512+{513513+ struct atom_common_table_header table_header;514514+ struct atom_dtd_format lcd_timing;515515+ uint16_t backlight_pwm;516516+ uint16_t special_handle_cap;517517+ uint16_t panel_misc;518518+ uint16_t lvds_max_slink_pclk;519519+ uint16_t lvds_ss_percentage;520520+ uint16_t lvds_ss_rate_10hz;521521+ uint8_t pwr_on_digon_to_de; /*all pwr sequence numbers below are in uint of 4ms*/522522+ uint8_t pwr_on_de_to_vary_bl;523523+ uint8_t pwr_down_vary_bloff_to_de;524524+ uint8_t pwr_down_de_to_digoff;525525+ uint8_t pwr_off_delay;526526+ uint8_t pwr_on_vary_bl_to_blon;527527+ uint8_t pwr_down_bloff_to_vary_bloff;528528+ uint8_t panel_bpc;529529+ uint8_t dpcd_edp_config_cap;530530+ uint8_t dpcd_max_link_rate;531531+ uint8_t dpcd_max_lane_count;532532+ uint8_t dpcd_max_downspread;533533+ uint8_t min_allowed_bl_level;534534+ uint8_t max_allowed_bl_level;535535+ uint8_t bootup_bl_level;536536+ uint8_t dplvdsrxid;537537+ uint32_t reserved1[8];538538+};539539+540540+/* lcd_info_v2_1.panel_misc defintion */541541+enum atom_lcd_info_panel_misc{542542+ ATOM_PANEL_MISC_FPDI =0x0002,543543+};544544+545545+//uceDPToLVDSRxId546546+enum atom_lcd_info_dptolvds_rx_id547547+{548548+ eDP_TO_LVDS_RX_DISABLE = 0x00, // no eDP->LVDS translator chip 549549+ eDP_TO_LVDS_COMMON_ID = 0x01, // common eDP->LVDS translator chip without AMD SW init550550+ eDP_TO_LVDS_REALTEK_ID = 0x02, // Realtek tansaltor which require AMD SW init551551+};552552+553553+554554+/* 555555+ ***************************************************************************556556+ Data Table gpio_pin_lut structure557557+ ***************************************************************************558558+*/559559+560560+struct atom_gpio_pin_assignment561561+{562562+ uint32_t data_a_reg_index;563563+ uint8_t gpio_bitshift;564564+ uint8_t gpio_mask_bitshift;565565+ uint8_t gpio_id;566566+ uint8_t reserved;567567+};568568+569569+/* atom_gpio_pin_assignment.gpio_id definition */570570+enum atom_gpio_pin_assignment_gpio_id {571571+ I2C_HW_LANE_MUX =0x0f, /* only valid when bit7=1 */572572+ I2C_HW_ENGINE_ID_MASK =0x70, /* only valid when bit7=1 */ 573573+ I2C_HW_CAP =0x80, /*only when the I2C_HW_CAP is set, the pin ID is assigned to an I2C pin pair, otherwise, it's an generic GPIO pin */574574+575575+ /* gpio_id pre-define id for multiple usage */576576+ /* GPIO use to control PCIE_VDDC in certain SLT board */577577+ PCIE_VDDC_CONTROL_GPIO_PINID = 56,578578+ /* if PP_AC_DC_SWITCH_GPIO_PINID in Gpio_Pin_LutTable, AC/DC swithing feature is enable */579579+ PP_AC_DC_SWITCH_GPIO_PINID = 60,580580+ /* VDDC_REGULATOR_VRHOT_GPIO_PINID in Gpio_Pin_LutTable, VRHot feature is enable */581581+ VDDC_VRHOT_GPIO_PINID = 61,582582+ /*if VDDC_PCC_GPIO_PINID in GPIO_LUTable, Peak Current Control feature is enabled */583583+ VDDC_PCC_GPIO_PINID = 62,584584+ /* Only used on certain SLT/PA board to allow utility to cut Efuse. */585585+ EFUSE_CUT_ENABLE_GPIO_PINID = 63,586586+ /* ucGPIO=DRAM_SELF_REFRESH_GPIO_PIND uses for memory self refresh (ucGPIO=0, DRAM self-refresh; ucGPIO= */587587+ DRAM_SELF_REFRESH_GPIO_PINID = 64,588588+ /* Thermal interrupt output->system thermal chip GPIO pin */589589+ THERMAL_INT_OUTPUT_GPIO_PINID =65,590590+};591591+592592+593593+struct atom_gpio_pin_lut_v2_1594594+{595595+ struct atom_common_table_header table_header;596596+ /*the real number of this included in the structure is calcualted by using the (whole structure size - the header size)/size of atom_gpio_pin_lut */597597+ struct atom_gpio_pin_assignment gpio_pin[8];598598+};599599+600600+601601+/* 602602+ ***************************************************************************603603+ Data Table vram_usagebyfirmware structure604604+ ***************************************************************************605605+*/606606+607607+struct vram_usagebyfirmware_v2_1608608+{609609+ struct atom_common_table_header table_header;610610+ uint32_t start_address_in_kb;611611+ uint16_t used_by_firmware_in_kb;612612+ uint16_t used_by_driver_in_kb; 613613+};614614+615615+616616+/* 617617+ ***************************************************************************618618+ Data Table displayobjectinfo structure619619+ ***************************************************************************620620+*/621621+622622+enum atom_object_record_type_id 623623+{624624+ ATOM_I2C_RECORD_TYPE =1,625625+ ATOM_HPD_INT_RECORD_TYPE =2,626626+ ATOM_OBJECT_GPIO_CNTL_RECORD_TYPE =9,627627+ ATOM_CONNECTOR_HPDPIN_LUT_RECORD_TYPE =16,628628+ ATOM_CONNECTOR_AUXDDC_LUT_RECORD_TYPE =17,629629+ ATOM_ENCODER_CAP_RECORD_TYPE=20,630630+ ATOM_BRACKET_LAYOUT_RECORD_TYPE=21,631631+ ATOM_CONNECTOR_FORCED_TMDS_CAP_RECORD_TYPE=22,632632+ ATOM_RECORD_END_TYPE =0xFF,633633+};634634+635635+struct atom_common_record_header636636+{637637+ uint8_t record_type; //An emun to indicate the record type638638+ uint8_t record_size; //The size of the whole record in byte639639+};640640+641641+struct atom_i2c_record642642+{643643+ struct atom_common_record_header record_header; //record_type = ATOM_I2C_RECORD_TYPE644644+ uint8_t i2c_id; 645645+ uint8_t i2c_slave_addr; //The slave address, it's 0 when the record is attached to connector for DDC646646+};647647+648648+struct atom_hpd_int_record649649+{650650+ struct atom_common_record_header record_header; //record_type = ATOM_HPD_INT_RECORD_TYPE651651+ uint8_t pin_id; //Corresponding block in GPIO_PIN_INFO table gives the pin info 652652+ uint8_t plugin_pin_state;653653+};654654+655655+// Bit maps for ATOM_ENCODER_CAP_RECORD.usEncoderCap656656+enum atom_encoder_caps_def657657+{658658+ ATOM_ENCODER_CAP_RECORD_HBR2 =0x01, // DP1.2 HBR2 is supported by HW encoder, it is retired in NI. the real meaning from SI is MST_EN659659+ ATOM_ENCODER_CAP_RECORD_MST_EN =0x01, // from SI, this bit means DP MST is enable or not. 660660+ ATOM_ENCODER_CAP_RECORD_HBR2_EN =0x02, // DP1.2 HBR2 setting is qualified and HBR2 can be enabled 661661+ ATOM_ENCODER_CAP_RECORD_HDMI6Gbps_EN =0x04, // HDMI2.0 6Gbps enable or not. 662662+ ATOM_ENCODER_CAP_RECORD_HBR3_EN =0x08, // DP1.3 HBR3 is supported by board. 663663+};664664+665665+struct atom_encoder_caps_record666666+{667667+ struct atom_common_record_header record_header; //record_type = ATOM_ENCODER_CAP_RECORD_TYPE668668+ uint32_t encodercaps;669669+};670670+671671+enum atom_connector_caps_def672672+{673673+ ATOM_CONNECTOR_CAP_INTERNAL_DISPLAY = 0x01, //a cap bit to indicate that this non-embedded display connector is an internal display674674+ ATOM_CONNECTOR_CAP_INTERNAL_DISPLAY_BL = 0x02, //a cap bit to indicate that this internal display requires BL control from GPU, refers to lcd_info for BL PWM freq 675675+};676676+677677+struct atom_disp_connector_caps_record678678+{679679+ struct atom_common_record_header record_header;680680+ uint32_t connectcaps; 681681+};682682+683683+//The following generic object gpio pin control record type will replace JTAG_RECORD/FPGA_CONTROL_RECORD/DVI_EXT_INPUT_RECORD above gradually684684+struct atom_gpio_pin_control_pair685685+{686686+ uint8_t gpio_id; // GPIO_ID, find the corresponding ID in GPIO_LUT table687687+ uint8_t gpio_pinstate; // Pin state showing how to set-up the pin688688+};689689+690690+struct atom_object_gpio_cntl_record691691+{692692+ struct atom_common_record_header record_header;693693+ uint8_t flag; // Future expnadibility694694+ uint8_t number_of_pins; // Number of GPIO pins used to control the object695695+ struct atom_gpio_pin_control_pair gpio[1]; // the real gpio pin pair determined by number of pins ucNumberOfPins696696+};697697+698698+//Definitions for GPIO pin state 699699+enum atom_gpio_pin_control_pinstate_def700700+{701701+ GPIO_PIN_TYPE_INPUT = 0x00,702702+ GPIO_PIN_TYPE_OUTPUT = 0x10,703703+ GPIO_PIN_TYPE_HW_CONTROL = 0x20,704704+705705+//For GPIO_PIN_TYPE_OUTPUT the following is defined 706706+ GPIO_PIN_OUTPUT_STATE_MASK = 0x01,707707+ GPIO_PIN_OUTPUT_STATE_SHIFT = 0,708708+ GPIO_PIN_STATE_ACTIVE_LOW = 0x0,709709+ GPIO_PIN_STATE_ACTIVE_HIGH = 0x1,710710+};711711+712712+// Indexes to GPIO array in GLSync record 713713+// GLSync record is for Frame Lock/Gen Lock feature.714714+enum atom_glsync_record_gpio_index_def715715+{716716+ ATOM_GPIO_INDEX_GLSYNC_REFCLK = 0,717717+ ATOM_GPIO_INDEX_GLSYNC_HSYNC = 1,718718+ ATOM_GPIO_INDEX_GLSYNC_VSYNC = 2,719719+ ATOM_GPIO_INDEX_GLSYNC_SWAP_REQ = 3,720720+ ATOM_GPIO_INDEX_GLSYNC_SWAP_GNT = 4,721721+ ATOM_GPIO_INDEX_GLSYNC_INTERRUPT = 5,722722+ ATOM_GPIO_INDEX_GLSYNC_V_RESET = 6,723723+ ATOM_GPIO_INDEX_GLSYNC_SWAP_CNTL = 7,724724+ ATOM_GPIO_INDEX_GLSYNC_SWAP_SEL = 8,725725+ ATOM_GPIO_INDEX_GLSYNC_MAX = 9,726726+};727727+728728+729729+struct atom_connector_hpdpin_lut_record //record for ATOM_CONNECTOR_HPDPIN_LUT_RECORD_TYPE730730+{731731+ struct atom_common_record_header record_header;732732+ uint8_t hpd_pin_map[8]; 733733+};734734+735735+struct atom_connector_auxddc_lut_record //record for ATOM_CONNECTOR_AUXDDC_LUT_RECORD_TYPE736736+{737737+ struct atom_common_record_header record_header;738738+ uint8_t aux_ddc_map[8];739739+};740740+741741+struct atom_connector_forced_tmds_cap_record742742+{743743+ struct atom_common_record_header record_header;744744+ // override TMDS capability on this connector when it operate in TMDS mode. usMaxTmdsClkRate = max TMDS Clock in Mhz/2.5745745+ uint8_t maxtmdsclkrate_in2_5mhz;746746+ uint8_t reserved;747747+}; 748748+749749+struct atom_connector_layout_info750750+{751751+ uint16_t connectorobjid;752752+ uint8_t connector_type;753753+ uint8_t position;754754+};755755+756756+// define ATOM_CONNECTOR_LAYOUT_INFO.ucConnectorType to describe the display connector size757757+enum atom_connector_layout_info_connector_type_def758758+{759759+ CONNECTOR_TYPE_DVI_D = 1,760760+761761+ CONNECTOR_TYPE_HDMI = 4,762762+ CONNECTOR_TYPE_DISPLAY_PORT = 5,763763+ CONNECTOR_TYPE_MINI_DISPLAY_PORT = 6,764764+};765765+766766+struct atom_bracket_layout_record767767+{768768+ struct atom_common_record_header record_header;769769+ uint8_t bracketlen;770770+ uint8_t bracketwidth;771771+ uint8_t conn_num;772772+ uint8_t reserved;773773+ struct atom_connector_layout_info conn_info[1];774774+};775775+776776+enum atom_display_device_tag_def{777777+ ATOM_DISPLAY_LCD1_SUPPORT = 0x0002, //an embedded display is either an LVDS or eDP signal type of display778778+ ATOM_DISPLAY_DFP1_SUPPORT = 0x0008,779779+ ATOM_DISPLAY_DFP2_SUPPORT = 0x0080,780780+ ATOM_DISPLAY_DFP3_SUPPORT = 0x0200,781781+ ATOM_DISPLAY_DFP4_SUPPORT = 0x0400,782782+ ATOM_DISPLAY_DFP5_SUPPORT = 0x0800,783783+ ATOM_DISPLAY_DFP6_SUPPORT = 0x0040,784784+ ATOM_DISPLAY_DFPx_SUPPORT = 0x0ec8,785785+};786786+787787+struct atom_display_object_path_v2788788+{789789+ uint16_t display_objid; //Connector Object ID or Misc Object ID790790+ uint16_t disp_recordoffset;791791+ uint16_t encoderobjid; //first encoder closer to the connector, could be either an external or intenal encoder792792+ uint16_t extencoderobjid; //2nd encoder after the first encoder, from the connector point of view;793793+ uint16_t encoder_recordoffset;794794+ uint16_t extencoder_recordoffset;795795+ uint16_t device_tag; //a supported device vector, each display path starts with this.the paths are enumerated in the way of priority, a path appears first 796796+ uint8_t priority_id;797797+ uint8_t reserved;798798+};799799+800800+struct display_object_info_table_v1_4801801+{802802+ struct atom_common_table_header table_header;803803+ uint16_t supporteddevices;804804+ uint8_t number_of_path;805805+ uint8_t reserved;806806+ struct atom_display_object_path_v2 display_path[8]; //the real number of this included in the structure is calculated by using the (whole structure size - the header size- number_of_path)/size of atom_display_object_path807807+};808808+809809+810810+/* 811811+ ***************************************************************************812812+ Data Table dce_info structure813813+ ***************************************************************************814814+*/815815+struct atom_display_controller_info_v4_1816816+{817817+ struct atom_common_table_header table_header;818818+ uint32_t display_caps;819819+ uint32_t bootup_dispclk_10khz;820820+ uint16_t dce_refclk_10khz;821821+ uint16_t i2c_engine_refclk_10khz;822822+ uint16_t dvi_ss_percentage; // in unit of 0.001%823823+ uint16_t dvi_ss_rate_10hz; 824824+ uint16_t hdmi_ss_percentage; // in unit of 0.001%825825+ uint16_t hdmi_ss_rate_10hz;826826+ uint16_t dp_ss_percentage; // in unit of 0.001%827827+ uint16_t dp_ss_rate_10hz;828828+ uint8_t dvi_ss_mode; // enum of atom_spread_spectrum_mode829829+ uint8_t hdmi_ss_mode; // enum of atom_spread_spectrum_mode830830+ uint8_t dp_ss_mode; // enum of atom_spread_spectrum_mode 831831+ uint8_t ss_reserved;832832+ uint8_t hardcode_mode_num; // a hardcode mode number defined in StandardVESA_TimingTable when a CRT or DFP EDID is not available833833+ uint8_t reserved1[3];834834+ uint16_t dpphy_refclk_10khz; 835835+ uint16_t reserved2;836836+ uint8_t dceip_min_ver;837837+ uint8_t dceip_max_ver;838838+ uint8_t max_disp_pipe_num;839839+ uint8_t max_vbios_active_disp_pipe_num;840840+ uint8_t max_ppll_num;841841+ uint8_t max_disp_phy_num;842842+ uint8_t max_aux_pairs;843843+ uint8_t remotedisplayconfig;844844+ uint8_t reserved3[8];845845+};846846+847847+848848+struct atom_display_controller_info_v4_2849849+{850850+ struct atom_common_table_header table_header;851851+ uint32_t display_caps; 852852+ uint32_t bootup_dispclk_10khz;853853+ uint16_t dce_refclk_10khz;854854+ uint16_t i2c_engine_refclk_10khz;855855+ uint16_t dvi_ss_percentage; // in unit of 0.001% 856856+ uint16_t dvi_ss_rate_10hz;857857+ uint16_t hdmi_ss_percentage; // in unit of 0.001%858858+ uint16_t hdmi_ss_rate_10hz;859859+ uint16_t dp_ss_percentage; // in unit of 0.001%860860+ uint16_t dp_ss_rate_10hz;861861+ uint8_t dvi_ss_mode; // enum of atom_spread_spectrum_mode862862+ uint8_t hdmi_ss_mode; // enum of atom_spread_spectrum_mode863863+ uint8_t dp_ss_mode; // enum of atom_spread_spectrum_mode 864864+ uint8_t ss_reserved;865865+ uint8_t dfp_hardcode_mode_num; // DFP hardcode mode number defined in StandardVESA_TimingTable when EDID is not available866866+ uint8_t dfp_hardcode_refreshrate;// DFP hardcode mode refreshrate defined in StandardVESA_TimingTable when EDID is not available867867+ uint8_t vga_hardcode_mode_num; // VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable868868+ uint8_t vga_hardcode_refreshrate;// VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable869869+ uint16_t dpphy_refclk_10khz; 870870+ uint16_t reserved2;871871+ uint8_t dcnip_min_ver;872872+ uint8_t dcnip_max_ver;873873+ uint8_t max_disp_pipe_num;874874+ uint8_t max_vbios_active_disp_pipe_num;875875+ uint8_t max_ppll_num;876876+ uint8_t max_disp_phy_num;877877+ uint8_t max_aux_pairs;878878+ uint8_t remotedisplayconfig;879879+ uint8_t reserved3[8];880880+};881881+882882+883883+enum dce_info_caps_def884884+{885885+ // only for VBIOS886886+ DCE_INFO_CAPS_FORCE_DISPDEV_CONNECTED =0x02, 887887+ // only for VBIOS888888+ DCE_INFO_CAPS_DISABLE_DFP_DP_HBR2 =0x04,889889+ // only for VBIOS890890+ DCE_INFO_CAPS_ENABLE_INTERLAC_TIMING =0x08,891891+892892+};893893+894894+/* 895895+ ***************************************************************************896896+ Data Table ATOM_EXTERNAL_DISPLAY_CONNECTION_INFO structure897897+ ***************************************************************************898898+*/899899+struct atom_ext_display_path900900+{901901+ uint16_t device_tag; //A bit vector to show what devices are supported 902902+ uint16_t device_acpi_enum; //16bit device ACPI id. 903903+ uint16_t connectorobjid; //A physical connector for displays to plug in, using object connector definitions904904+ uint8_t auxddclut_index; //An index into external AUX/DDC channel LUT905905+ uint8_t hpdlut_index; //An index into external HPD pin LUT906906+ uint16_t ext_encoder_objid; //external encoder object id907907+ uint8_t channelmapping; // if ucChannelMapping=0, using default one to one mapping908908+ uint8_t chpninvert; // bit vector for up to 8 lanes, =0: P and N is not invert, =1 P and N is inverted909909+ uint16_t caps;910910+ uint16_t reserved; 911911+};912912+913913+//usCaps914914+enum ext_display_path_cap_def915915+{916916+ EXT_DISPLAY_PATH_CAPS__HBR2_DISABLE =0x0001,917917+ EXT_DISPLAY_PATH_CAPS__DP_FIXED_VS_EN =0x0002,918918+ EXT_DISPLAY_PATH_CAPS__EXT_CHIP_MASK =0x007C, 919919+};920920+921921+struct atom_external_display_connection_info922922+{923923+ struct atom_common_table_header table_header;924924+ uint8_t guid[16]; // a GUID is a 16 byte long string925925+ struct atom_ext_display_path path[7]; // total of fixed 7 entries.926926+ uint8_t checksum; // a simple Checksum of the sum of whole structure equal to 0x0. 927927+ uint8_t stereopinid; // use for eDP panel928928+ uint8_t remotedisplayconfig;929929+ uint8_t edptolvdsrxid;930930+ uint8_t fixdpvoltageswing; // usCaps[1]=1, this indicate DP_LANE_SET value931931+ uint8_t reserved[3]; // for potential expansion932932+};933933+934934+/* 935935+ ***************************************************************************936936+ Data Table integratedsysteminfo structure937937+ ***************************************************************************938938+*/939939+940940+struct atom_camera_dphy_timing_param941941+{942942+ uint8_t profile_id; // SENSOR_PROFILES943943+ uint32_t param;944944+};945945+946946+struct atom_camera_dphy_elec_param947947+{948948+ uint16_t param[3];949949+};950950+951951+struct atom_camera_module_info952952+{953953+ uint8_t module_id; // 0: Rear, 1: Front right of user, 2: Front left of user954954+ uint8_t module_name[8];955955+ struct atom_camera_dphy_timing_param timingparam[6]; // Exact number is under estimation and confirmation from sensor vendor956956+};957957+958958+struct atom_camera_flashlight_info959959+{960960+ uint8_t flashlight_id; // 0: Rear, 1: Front961961+ uint8_t name[8];962962+};963963+964964+struct atom_camera_data965965+{966966+ uint32_t versionCode;967967+ struct atom_camera_module_info cameraInfo[3]; // Assuming 3 camera sensors max968968+ struct atom_camera_flashlight_info flashInfo; // Assuming 1 flashlight max969969+ struct atom_camera_dphy_elec_param dphy_param;970970+ uint32_t crc_val; // CRC971971+};972972+973973+974974+struct atom_14nm_dpphy_dvihdmi_tuningset975975+{976976+ uint32_t max_symclk_in10khz;977977+ uint8_t encoder_mode; //atom_encode_mode_def, =2: DVI, =3: HDMI mode978978+ uint8_t phy_sel; //bit vector of phy, bit0= phya, bit1=phyb, ....bit5 = phyf 979979+ uint16_t margindeemph; //COMMON_MAR_DEEMPH_NOM[7:0]tx_margin_nom [15:8]deemph_gen1_nom980980+ uint8_t deemph_6db_4; //COMMON_SELDEEMPH60[31:24]deemph_6db_4981981+ uint8_t boostadj; //CMD_BUS_GLOBAL_FOR_TX_LANE0 [19:16]tx_boost_adj [20]tx_boost_en [23:22]tx_binary_ron_code_offset982982+ uint8_t tx_driver_fifty_ohms; //COMMON_ZCALCODE_CTRL[21].tx_driver_fifty_ohms983983+ uint8_t deemph_sel; //MARGIN_DEEMPH_LANE0.DEEMPH_SEL984984+};985985+986986+struct atom_14nm_dpphy_dp_setting{987987+ uint8_t dp_vs_pemph_level; //enum of atom_dp_vs_preemph_def988988+ uint16_t margindeemph; //COMMON_MAR_DEEMPH_NOM[7:0]tx_margin_nom [15:8]deemph_gen1_nom989989+ uint8_t deemph_6db_4; //COMMON_SELDEEMPH60[31:24]deemph_6db_4990990+ uint8_t boostadj; //CMD_BUS_GLOBAL_FOR_TX_LANE0 [19:16]tx_boost_adj [20]tx_boost_en [23:22]tx_binary_ron_code_offset991991+};992992+993993+struct atom_14nm_dpphy_dp_tuningset{994994+ uint8_t phy_sel; // bit vector of phy, bit0= phya, bit1=phyb, ....bit5 = phyf 995995+ uint8_t version;996996+ uint16_t table_size; // size of atom_14nm_dpphy_dp_tuningset997997+ uint16_t reserved;998998+ struct atom_14nm_dpphy_dp_setting dptuning[10];999999+};10001000+10011001+struct atom_14nm_dig_transmitter_info_header_v4_0{ 10021002+ struct atom_common_table_header table_header; 10031003+ uint16_t pcie_phy_tmds_hdmi_macro_settings_offset; // offset of PCIEPhyTMDSHDMIMacroSettingsTbl 10041004+ uint16_t uniphy_vs_emph_lookup_table_offset; // offset of UniphyVSEmphLookUpTbl10051005+ uint16_t uniphy_xbar_settings_table_offset; // offset of UniphyXbarSettingsTbl10061006+};10071007+10081008+struct atom_14nm_combphy_tmds_vs_set10091009+{10101010+ uint8_t sym_clk;10111011+ uint8_t dig_mode;10121012+ uint8_t phy_sel;10131013+ uint16_t common_mar_deemph_nom__margin_deemph_val;10141014+ uint8_t common_seldeemph60__deemph_6db_4_val;10151015+ uint8_t cmd_bus_global_for_tx_lane0__boostadj_val ;10161016+ uint8_t common_zcalcode_ctrl__tx_driver_fifty_ohms_val;10171017+ uint8_t margin_deemph_lane0__deemph_sel_val; 10181018+};10191019+10201020+struct atom_integrated_system_info_v1_1110211021+{10221022+ struct atom_common_table_header table_header;10231023+ uint32_t vbios_misc; //enum of atom_system_vbiosmisc_def10241024+ uint32_t gpucapinfo; //enum of atom_system_gpucapinf_def 10251025+ uint32_t system_config; 10261026+ uint32_t cpucapinfo;10271027+ uint16_t gpuclk_ss_percentage; //unit of 0.001%, 1000 mean 1% 10281028+ uint16_t gpuclk_ss_type;10291029+ uint16_t lvds_ss_percentage; //unit of 0.001%, 1000 mean 1%10301030+ uint16_t lvds_ss_rate_10hz;10311031+ uint16_t hdmi_ss_percentage; //unit of 0.001%, 1000 mean 1%10321032+ uint16_t hdmi_ss_rate_10hz;10331033+ uint16_t dvi_ss_percentage; //unit of 0.001%, 1000 mean 1%10341034+ uint16_t dvi_ss_rate_10hz;10351035+ uint16_t dpphy_override; // bit vector, enum of atom_sysinfo_dpphy_override_def10361036+ uint16_t lvds_misc; // enum of atom_sys_info_lvds_misc_def10371037+ uint16_t backlight_pwm_hz; // pwm frequency in hz10381038+ uint8_t memorytype; // enum of atom_sys_mem_type10391039+ uint8_t umachannelnumber; // number of memory channels10401040+ uint8_t pwr_on_digon_to_de; /* all pwr sequence numbers below are in uint of 4ms */10411041+ uint8_t pwr_on_de_to_vary_bl;10421042+ uint8_t pwr_down_vary_bloff_to_de;10431043+ uint8_t pwr_down_de_to_digoff;10441044+ uint8_t pwr_off_delay;10451045+ uint8_t pwr_on_vary_bl_to_blon;10461046+ uint8_t pwr_down_bloff_to_vary_bloff;10471047+ uint8_t min_allowed_bl_level;10481048+ struct atom_external_display_connection_info extdispconninfo;10491049+ struct atom_14nm_dpphy_dvihdmi_tuningset dvi_tuningset;10501050+ struct atom_14nm_dpphy_dvihdmi_tuningset hdmi_tuningset;10511051+ struct atom_14nm_dpphy_dvihdmi_tuningset hdmi6g_tuningset;10521052+ struct atom_14nm_dpphy_dp_tuningset dp_tuningset;10531053+ struct atom_14nm_dpphy_dp_tuningset dp_hbr3_tuningset;10541054+ struct atom_camera_data camera_info;10551055+ uint32_t reserved[138];10561056+};10571057+10581058+10591059+// system_config10601060+enum atom_system_vbiosmisc_def{10611061+ INTEGRATED_SYSTEM_INFO__GET_EDID_CALLBACK_FUNC_SUPPORT = 0x01,10621062+};10631063+10641064+10651065+// gpucapinfo10661066+enum atom_system_gpucapinf_def{10671067+ SYS_INFO_GPUCAPS__ENABEL_DFS_BYPASS = 0x10,10681068+};10691069+10701070+//dpphy_override10711071+enum atom_sysinfo_dpphy_override_def{10721072+ ATOM_ENABLE_DVI_TUNINGSET = 0x01,10731073+ ATOM_ENABLE_HDMI_TUNINGSET = 0x02,10741074+ ATOM_ENABLE_HDMI6G_TUNINGSET = 0x04,10751075+ ATOM_ENABLE_DP_TUNINGSET = 0x08,10761076+ ATOM_ENABLE_DP_HBR3_TUNINGSET = 0x10, 10771077+};10781078+10791079+//lvds_misc10801080+enum atom_sys_info_lvds_misc_def10811081+{10821082+ SYS_INFO_LVDS_MISC_888_FPDI_MODE =0x01,10831083+ SYS_INFO_LVDS_MISC_888_BPC_MODE =0x04,10841084+ SYS_INFO_LVDS_MISC_OVERRIDE_EN =0x08,10851085+};10861086+10871087+10881088+//memorytype DMI Type 17 offset 12h - Memory Type10891089+enum atom_dmi_t17_mem_type_def{10901090+ OtherMemType = 0x01, ///< Assign 01 to Other10911091+ UnknownMemType, ///< Assign 02 to Unknown10921092+ DramMemType, ///< Assign 03 to DRAM10931093+ EdramMemType, ///< Assign 04 to EDRAM10941094+ VramMemType, ///< Assign 05 to VRAM10951095+ SramMemType, ///< Assign 06 to SRAM10961096+ RamMemType, ///< Assign 07 to RAM10971097+ RomMemType, ///< Assign 08 to ROM10981098+ FlashMemType, ///< Assign 09 to Flash10991099+ EepromMemType, ///< Assign 10 to EEPROM11001100+ FepromMemType, ///< Assign 11 to FEPROM11011101+ EpromMemType, ///< Assign 12 to EPROM11021102+ CdramMemType, ///< Assign 13 to CDRAM11031103+ ThreeDramMemType, ///< Assign 14 to 3DRAM11041104+ SdramMemType, ///< Assign 15 to SDRAM11051105+ SgramMemType, ///< Assign 16 to SGRAM11061106+ RdramMemType, ///< Assign 17 to RDRAM11071107+ DdrMemType, ///< Assign 18 to DDR11081108+ Ddr2MemType, ///< Assign 19 to DDR211091109+ Ddr2FbdimmMemType, ///< Assign 20 to DDR2 FB-DIMM11101110+ Ddr3MemType = 0x18, ///< Assign 24 to DDR311111111+ Fbd2MemType, ///< Assign 25 to FBD211121112+ Ddr4MemType, ///< Assign 26 to DDR411131113+ LpDdrMemType, ///< Assign 27 to LPDDR11141114+ LpDdr2MemType, ///< Assign 28 to LPDDR211151115+ LpDdr3MemType, ///< Assign 29 to LPDDR311161116+ LpDdr4MemType, ///< Assign 30 to LPDDR411171117+};11181118+11191119+11201120+// this Table is used starting from NL/AM, used by SBIOS and pass the IntegratedSystemInfoTable/PowerPlayInfoTable/SystemCameraInfoTable 11211121+struct atom_fusion_system_info_v411221122+{11231123+ struct atom_integrated_system_info_v1_11 sysinfo; // refer to ATOM_INTEGRATED_SYSTEM_INFO_V1_8 definition11241124+ uint32_t powerplayinfo[256]; // Reserve 1024 bytes space for PowerPlayInfoTable11251125+}; 11261126+11271127+11281128+/* 11291129+ ***************************************************************************11301130+ Data Table gfx_info structure11311131+ ***************************************************************************11321132+*/11331133+11341134+struct atom_gfx_info_v2_211351135+{11361136+ struct atom_common_table_header table_header;11371137+ uint8_t gfxip_min_ver;11381138+ uint8_t gfxip_max_ver;11391139+ uint8_t max_shader_engines;11401140+ uint8_t max_tile_pipes;11411141+ uint8_t max_cu_per_sh;11421142+ uint8_t max_sh_per_se;11431143+ uint8_t max_backends_per_se;11441144+ uint8_t max_texture_channel_caches;11451145+ uint32_t regaddr_cp_dma_src_addr;11461146+ uint32_t regaddr_cp_dma_src_addr_hi;11471147+ uint32_t regaddr_cp_dma_dst_addr;11481148+ uint32_t regaddr_cp_dma_dst_addr_hi;11491149+ uint32_t regaddr_cp_dma_command; 11501150+ uint32_t regaddr_cp_status;11511151+ uint32_t regaddr_rlc_gpu_clock_32;11521152+ uint32_t rlc_gpu_timer_refclk; 11531153+};11541154+11551155+11561156+11571157+/* 11581158+ ***************************************************************************11591159+ Data Table smu_info structure11601160+ ***************************************************************************11611161+*/11621162+struct atom_smu_info_v3_111631163+{11641164+ struct atom_common_table_header table_header;11651165+ uint8_t smuip_min_ver;11661166+ uint8_t smuip_max_ver;11671167+ uint8_t smu_rsd1;11681168+ uint8_t gpuclk_ss_mode; // enum of atom_spread_spectrum_mode11691169+ uint16_t sclk_ss_percentage;11701170+ uint16_t sclk_ss_rate_10hz;11711171+ uint16_t gpuclk_ss_percentage; // in unit of 0.001%11721172+ uint16_t gpuclk_ss_rate_10hz;11731173+ uint32_t core_refclk_10khz;11741174+ uint8_t ac_dc_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for AC/DC switching, =0xff means invalid11751175+ uint8_t ac_dc_polarity; // GPIO polarity for AC/DC switching11761176+ uint8_t vr0hot_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for VR0 HOT event, =0xff means invalid11771177+ uint8_t vr0hot_polarity; // GPIO polarity for VR0 HOT event11781178+ uint8_t vr1hot_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for VR1 HOT event , =0xff means invalid11791179+ uint8_t vr1hot_polarity; // GPIO polarity for VR1 HOT event 11801180+ uint8_t fw_ctf_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for CTF, =0xff means invalid11811181+ uint8_t fw_ctf_polarity; // GPIO polarity for CTF11821182+};11831183+11841184+11851185+11861186+/* 11871187+ ***************************************************************************11881188+ Data Table asic_profiling_info structure11891189+ ***************************************************************************11901190+*/11911191+struct atom_asic_profiling_info_v4_111921192+{11931193+ struct atom_common_table_header table_header;11941194+ uint32_t maxvddc; 11951195+ uint32_t minvddc; 11961196+ uint32_t avfs_meannsigma_acontant0;11971197+ uint32_t avfs_meannsigma_acontant1;11981198+ uint32_t avfs_meannsigma_acontant2;11991199+ uint16_t avfs_meannsigma_dc_tol_sigma;12001200+ uint16_t avfs_meannsigma_platform_mean;12011201+ uint16_t avfs_meannsigma_platform_sigma;12021202+ uint32_t gb_vdroop_table_cksoff_a0;12031203+ uint32_t gb_vdroop_table_cksoff_a1;12041204+ uint32_t gb_vdroop_table_cksoff_a2;12051205+ uint32_t gb_vdroop_table_ckson_a0;12061206+ uint32_t gb_vdroop_table_ckson_a1;12071207+ uint32_t gb_vdroop_table_ckson_a2;12081208+ uint32_t avfsgb_fuse_table_cksoff_m1;12091209+ uint16_t avfsgb_fuse_table_cksoff_m2;12101210+ uint32_t avfsgb_fuse_table_cksoff_b;12111211+ uint32_t avfsgb_fuse_table_ckson_m1; 12121212+ uint16_t avfsgb_fuse_table_ckson_m2;12131213+ uint32_t avfsgb_fuse_table_ckson_b;12141214+ uint16_t max_voltage_0_25mv;12151215+ uint8_t enable_gb_vdroop_table_cksoff;12161216+ uint8_t enable_gb_vdroop_table_ckson;12171217+ uint8_t enable_gb_fuse_table_cksoff;12181218+ uint8_t enable_gb_fuse_table_ckson;12191219+ uint16_t psm_age_comfactor;12201220+ uint8_t enable_apply_avfs_cksoff_voltage;12211221+ uint8_t reserved;12221222+ uint32_t dispclk2gfxclk_a;12231223+ uint16_t dispclk2gfxclk_b;12241224+ uint32_t dispclk2gfxclk_c;12251225+ uint32_t pixclk2gfxclk_a;12261226+ uint16_t pixclk2gfxclk_b;12271227+ uint32_t pixclk2gfxclk_c;12281228+ uint32_t dcefclk2gfxclk_a;12291229+ uint16_t dcefclk2gfxclk_b;12301230+ uint32_t dcefclk2gfxclk_c;12311231+ uint32_t phyclk2gfxclk_a;12321232+ uint16_t phyclk2gfxclk_b;12331233+ uint32_t phyclk2gfxclk_c;12341234+};12351235+12361236+12371237+/* 12381238+ ***************************************************************************12391239+ Data Table multimedia_info structure12401240+ ***************************************************************************12411241+*/12421242+struct atom_multimedia_info_v2_112431243+{12441244+ struct atom_common_table_header table_header;12451245+ uint8_t uvdip_min_ver;12461246+ uint8_t uvdip_max_ver;12471247+ uint8_t vceip_min_ver;12481248+ uint8_t vceip_max_ver;12491249+ uint16_t uvd_enc_max_input_width_pixels;12501250+ uint16_t uvd_enc_max_input_height_pixels;12511251+ uint16_t vce_enc_max_input_width_pixels;12521252+ uint16_t vce_enc_max_input_height_pixels; 12531253+ uint32_t uvd_enc_max_bandwidth; // 16x16 pixels/sec, codec independent12541254+ uint32_t vce_enc_max_bandwidth; // 16x16 pixels/sec, codec independent12551255+};12561256+12571257+12581258+/* 12591259+ ***************************************************************************12601260+ Data Table umc_info structure12611261+ ***************************************************************************12621262+*/12631263+struct atom_umc_info_v3_112641264+{12651265+ struct atom_common_table_header table_header;12661266+ uint32_t ucode_version;12671267+ uint32_t ucode_rom_startaddr;12681268+ uint32_t ucode_length;12691269+ uint16_t umc_reg_init_offset;12701270+ uint16_t customer_ucode_name_offset;12711271+ uint16_t mclk_ss_percentage;12721272+ uint16_t mclk_ss_rate_10hz;12731273+ uint8_t umcip_min_ver;12741274+ uint8_t umcip_max_ver;12751275+ uint8_t vram_type; //enum of atom_dgpu_vram_type12761276+ uint8_t umc_config;12771277+ uint32_t mem_refclk_10khz;12781278+};12791279+12801280+12811281+/* 12821282+ ***************************************************************************12831283+ Data Table vram_info structure12841284+ ***************************************************************************12851285+*/12861286+struct atom_vram_module_v912871287+{12881288+ // Design Specific Values12891289+ uint32_t memory_size; // Total memory size in unit of MB for CONFIG_MEMSIZE zeros12901290+ uint32_t channel_enable; // for 32 channel ASIC usage12911291+ uint32_t umcch_addrcfg;12921292+ uint32_t umcch_addrsel;12931293+ uint32_t umcch_colsel;12941294+ uint16_t vram_module_size; // Size of atom_vram_module_v912951295+ uint8_t ext_memory_id; // Current memory module ID12961296+ uint8_t memory_type; // enum of atom_dgpu_vram_type12971297+ uint8_t channel_num; // Number of mem. channels supported in this module12981298+ uint8_t channel_width; // CHANNEL_16BIT/CHANNEL_32BIT/CHANNEL_64BIT12991299+ uint8_t density; // _8Mx32, _16Mx32, _16Mx16, _32Mx1613001300+ uint8_t tunningset_id; // MC phy registers set per. 13011301+ uint8_t vender_rev_id; // [7:4] Revision, [3:0] Vendor code13021302+ uint8_t refreshrate; // [1:0]=RefreshFactor (00=8ms, 01=16ms, 10=32ms,11=64ms)13031303+ uint16_t vram_rsd2; // reserved13041304+ char dram_pnstring[20]; // part number end with '0'. 13051305+};13061306+13071307+13081308+struct atom_vram_info_header_v2_313091309+{13101310+ struct atom_common_table_header table_header;13111311+ uint16_t mem_adjust_tbloffset; // offset of atom_umc_init_reg_block structure for memory vendor specific UMC adjust setting13121312+ uint16_t mem_clk_patch_tbloffset; // offset of atom_umc_init_reg_block structure for memory clock specific UMC setting13131313+ uint16_t mc_adjust_pertile_tbloffset; // offset of atom_umc_init_reg_block structure for Per Byte Offset Preset Settings13141314+ uint16_t mc_phyinit_tbloffset; // offset of atom_umc_init_reg_block structure for MC phy init set13151315+ uint16_t dram_data_remap_tbloffset; // reserved for now13161316+ uint16_t vram_rsd2[3];13171317+ uint8_t vram_module_num; // indicate number of VRAM module13181318+ uint8_t vram_rsd1[2];13191319+ uint8_t mc_phy_tile_num; // indicate the MCD tile number which use in DramDataRemapTbl and usMcAdjustPerTileTblOffset13201320+ struct atom_vram_module_v9 vram_module[16]; // just for allocation, real number of blocks is in ucNumOfVRAMModule;13211321+};13221322+13231323+struct atom_umc_register_addr_info{13241324+ uint32_t umc_register_addr:24;13251325+ uint32_t umc_reg_type_ind:1;13261326+ uint32_t umc_reg_rsvd:7;13271327+};13281328+13291329+//atom_umc_register_addr_info.13301330+enum atom_umc_register_addr_info_flag{13311331+ b3ATOM_UMC_REG_ADD_INFO_INDIRECT_ACCESS =0x01,13321332+};13331333+13341334+union atom_umc_register_addr_info_access13351335+{13361336+ struct atom_umc_register_addr_info umc_reg_addr;13371337+ uint32_t u32umc_reg_addr;13381338+};13391339+13401340+struct atom_umc_reg_setting_id_config{13411341+ uint32_t memclockrange:24;13421342+ uint32_t mem_blk_id:8;13431343+};13441344+13451345+union atom_umc_reg_setting_id_config_access13461346+{13471347+ struct atom_umc_reg_setting_id_config umc_id_access;13481348+ uint32_t u32umc_id_access;13491349+};13501350+13511351+struct atom_umc_reg_setting_data_block{13521352+ union atom_umc_reg_setting_id_config_access block_id;13531353+ uint32_t u32umc_reg_data[1]; 13541354+};13551355+13561356+struct atom_umc_init_reg_block{13571357+ uint16_t umc_reg_num;13581358+ uint16_t reserved; 13591359+ union atom_umc_register_addr_info_access umc_reg_list[1]; //for allocation purpose, the real number come from umc_reg_num;13601360+ struct atom_umc_reg_setting_data_block umc_reg_setting_list[1];13611361+};13621362+13631363+13641364+/* 13651365+ ***************************************************************************13661366+ Data Table voltageobject_info structure13671367+ ***************************************************************************13681368+*/13691369+struct atom_i2c_data_entry13701370+{13711371+ uint16_t i2c_reg_index; // i2c register address, can be up to 16bit13721372+ uint16_t i2c_reg_data; // i2c register data, can be up to 16bit13731373+};13741374+13751375+struct atom_voltage_object_header_v4{13761376+ uint8_t voltage_type; //enum atom_voltage_type13771377+ uint8_t voltage_mode; //enum atom_voltage_object_mode 13781378+ uint16_t object_size; //Size of Object13791379+};13801380+13811381+// atom_voltage_object_header_v4.voltage_mode13821382+enum atom_voltage_object_mode 13831383+{13841384+ VOLTAGE_OBJ_GPIO_LUT = 0, //VOLTAGE and GPIO Lookup table ->atom_gpio_voltage_object_v413851385+ VOLTAGE_OBJ_VR_I2C_INIT_SEQ = 3, //VOLTAGE REGULATOR INIT sequece through I2C -> atom_i2c_voltage_object_v413861386+ VOLTAGE_OBJ_PHASE_LUT = 4, //Set Vregulator Phase lookup table ->atom_gpio_voltage_object_v413871387+ VOLTAGE_OBJ_SVID2 = 7, //Indicate voltage control by SVID2 ->atom_svid2_voltage_object_v413881388+ VOLTAGE_OBJ_EVV = 8, 13891389+ VOLTAGE_OBJ_MERGED_POWER = 9,13901390+};13911391+13921392+struct atom_i2c_voltage_object_v413931393+{13941394+ struct atom_voltage_object_header_v4 header; // voltage mode = VOLTAGE_OBJ_VR_I2C_INIT_SEQ13951395+ uint8_t regulator_id; //Indicate Voltage Regulator Id13961396+ uint8_t i2c_id;13971397+ uint8_t i2c_slave_addr;13981398+ uint8_t i2c_control_offset; 13991399+ uint8_t i2c_flag; // Bit0: 0 - One byte data; 1 - Two byte data14001400+ uint8_t i2c_speed; // =0, use default i2c speed, otherwise use it in unit of kHz. 14011401+ uint8_t reserved[2];14021402+ struct atom_i2c_data_entry i2cdatalut[1]; // end with 0xff14031403+};14041404+14051405+// ATOM_I2C_VOLTAGE_OBJECT_V3.ucVoltageControlFlag14061406+enum atom_i2c_voltage_control_flag14071407+{14081408+ VOLTAGE_DATA_ONE_BYTE = 0,14091409+ VOLTAGE_DATA_TWO_BYTE = 1,14101410+};14111411+14121412+14131413+struct atom_voltage_gpio_map_lut14141414+{14151415+ uint32_t voltage_gpio_reg_val; // The Voltage ID which is used to program GPIO register14161416+ uint16_t voltage_level_mv; // The corresponding Voltage Value, in mV14171417+};14181418+14191419+struct atom_gpio_voltage_object_v414201420+{14211421+ struct atom_voltage_object_header_v4 header; // voltage mode = VOLTAGE_OBJ_GPIO_LUT or VOLTAGE_OBJ_PHASE_LUT14221422+ uint8_t gpio_control_id; // default is 0 which indicate control through CG VID mode 14231423+ uint8_t gpio_entry_num; // indiate the entry numbers of Votlage/Gpio value Look up table14241424+ uint8_t phase_delay_us; // phase delay in unit of micro second14251425+ uint8_t reserved; 14261426+ uint32_t gpio_mask_val; // GPIO Mask value14271427+ struct atom_voltage_gpio_map_lut voltage_gpio_lut[1];14281428+};14291429+14301430+struct atom_svid2_voltage_object_v414311431+{14321432+ struct atom_voltage_object_header_v4 header; // voltage mode = VOLTAGE_OBJ_SVID214331433+ uint8_t loadline_psi1; // bit4:0= loadline setting ( Core Loadline trim and offset trim ), bit5=0:PSI1_L disable =1: PSI1_L enable14341434+ uint8_t psi0_l_vid_thresd; // VR PSI0_L VID threshold14351435+ uint8_t psi0_enable; // 14361436+ uint8_t maxvstep;14371437+ uint8_t telemetry_offset;14381438+ uint8_t telemetry_gain; 14391439+ uint16_t reserved1;14401440+};14411441+14421442+struct atom_merged_voltage_object_v414431443+{14441444+ struct atom_voltage_object_header_v4 header; // voltage mode = VOLTAGE_OBJ_MERGED_POWER14451445+ uint8_t merged_powerrail_type; //enum atom_voltage_type14461446+ uint8_t reserved[3];14471447+};14481448+14491449+union atom_voltage_object_v4{14501450+ struct atom_gpio_voltage_object_v4 gpio_voltage_obj;14511451+ struct atom_i2c_voltage_object_v4 i2c_voltage_obj;14521452+ struct atom_svid2_voltage_object_v4 svid2_voltage_obj;14531453+ struct atom_merged_voltage_object_v4 merged_voltage_obj;14541454+};14551455+14561456+struct atom_voltage_objects_info_v4_114571457+{14581458+ struct atom_common_table_header table_header; 14591459+ union atom_voltage_object_v4 voltage_object[1]; //Info for Voltage control14601460+};14611461+14621462+14631463+/* 14641464+ ***************************************************************************14651465+ All Command Function structure definition 14661466+ *************************************************************************** 14671467+*/ 14681468+14691469+/* 14701470+ ***************************************************************************14711471+ Structures used by asic_init14721472+ *************************************************************************** 14731473+*/ 14741474+14751475+struct asic_init_engine_parameters14761476+{14771477+ uint32_t sclkfreqin10khz:24;14781478+ uint32_t engineflag:8; /* enum atom_asic_init_engine_flag */14791479+};14801480+14811481+struct asic_init_mem_parameters14821482+{14831483+ uint32_t mclkfreqin10khz:24;14841484+ uint32_t memflag:8; /* enum atom_asic_init_mem_flag */14851485+};14861486+14871487+struct asic_init_parameters_v2_114881488+{14891489+ struct asic_init_engine_parameters engineparam;14901490+ struct asic_init_mem_parameters memparam;14911491+};14921492+14931493+struct asic_init_ps_allocation_v2_114941494+{14951495+ struct asic_init_parameters_v2_1 param;14961496+ uint32_t reserved[16];14971497+};14981498+14991499+15001500+enum atom_asic_init_engine_flag15011501+{15021502+ b3NORMAL_ENGINE_INIT = 0,15031503+ b3SRIOV_SKIP_ASIC_INIT = 0x02,15041504+ b3SRIOV_LOAD_UCODE = 0x40,15051505+};15061506+15071507+enum atom_asic_init_mem_flag15081508+{15091509+ b3NORMAL_MEM_INIT = 0,15101510+ b3DRAM_SELF_REFRESH_EXIT =0x20,15111511+};15121512+15131513+/* 15141514+ ***************************************************************************15151515+ Structures used by setengineclock15161516+ *************************************************************************** 15171517+*/ 15181518+15191519+struct set_engine_clock_parameters_v2_115201520+{15211521+ uint32_t sclkfreqin10khz:24;15221522+ uint32_t sclkflag:8; /* enum atom_set_engine_mem_clock_flag, */15231523+ uint32_t reserved[10];15241524+};15251525+15261526+struct set_engine_clock_ps_allocation_v2_115271527+{15281528+ struct set_engine_clock_parameters_v2_1 clockinfo;15291529+ uint32_t reserved[10];15301530+};15311531+15321532+15331533+enum atom_set_engine_mem_clock_flag15341534+{15351535+ b3NORMAL_CHANGE_CLOCK = 0,15361536+ b3FIRST_TIME_CHANGE_CLOCK = 0x08,15371537+ b3STORE_DPM_TRAINGING = 0x40, //Applicable to memory clock change,when set, it store specific DPM mode training result15381538+};15391539+15401540+/* 15411541+ ***************************************************************************15421542+ Structures used by getengineclock15431543+ *************************************************************************** 15441544+*/ 15451545+struct get_engine_clock_parameter15461546+{15471547+ uint32_t sclk_10khz; // current engine speed in 10KHz unit15481548+ uint32_t reserved;15491549+};15501550+15511551+/* 15521552+ ***************************************************************************15531553+ Structures used by setmemoryclock15541554+ *************************************************************************** 15551555+*/ 15561556+struct set_memory_clock_parameters_v2_115571557+{15581558+ uint32_t mclkfreqin10khz:24;15591559+ uint32_t mclkflag:8; /* enum atom_set_engine_mem_clock_flag, */15601560+ uint32_t reserved[10];15611561+};15621562+15631563+struct set_memory_clock_ps_allocation_v2_115641564+{15651565+ struct set_memory_clock_parameters_v2_1 clockinfo;15661566+ uint32_t reserved[10];15671567+};15681568+15691569+15701570+/* 15711571+ ***************************************************************************15721572+ Structures used by getmemoryclock15731573+ *************************************************************************** 15741574+*/ 15751575+struct get_memory_clock_parameter15761576+{15771577+ uint32_t mclk_10khz; // current engine speed in 10KHz unit15781578+ uint32_t reserved;15791579+};15801580+15811581+15821582+15831583+/* 15841584+ ***************************************************************************15851585+ Structures used by setvoltage15861586+ *************************************************************************** 15871587+*/ 15881588+15891589+struct set_voltage_parameters_v1_415901590+{15911591+ uint8_t voltagetype; /* enum atom_voltage_type */15921592+ uint8_t command; /* Indicate action: Set voltage level, enum atom_set_voltage_command */15931593+ uint16_t vlevel_mv; /* real voltage level in unit of mv or Voltage Phase (0, 1, 2, .. ) */15941594+};15951595+15961596+//set_voltage_parameters_v2_1.voltagemode15971597+enum atom_set_voltage_command{15981598+ ATOM_SET_VOLTAGE = 0,15991599+ ATOM_INIT_VOLTAGE_REGULATOR = 3,16001600+ ATOM_SET_VOLTAGE_PHASE = 4,16011601+ ATOM_GET_LEAKAGE_ID = 8,16021602+};16031603+16041604+struct set_voltage_ps_allocation_v1_416051605+{16061606+ struct set_voltage_parameters_v1_4 setvoltageparam;16071607+ uint32_t reserved[10];16081608+};16091609+16101610+16111611+/* 16121612+ ***************************************************************************16131613+ Structures used by computegpuclockparam16141614+ *************************************************************************** 16151615+*/ 16161616+16171617+//ATOM_COMPUTE_CLOCK_FREQ.ulComputeClockFlag16181618+enum atom_gpu_clock_type 16191619+{16201620+ COMPUTE_GPUCLK_INPUT_FLAG_DEFAULT_GPUCLK =0x00,16211621+ COMPUTE_GPUCLK_INPUT_FLAG_GFXCLK =0x01,16221622+ COMPUTE_GPUCLK_INPUT_FLAG_UCLK =0x02,16231623+};16241624+16251625+struct compute_gpu_clock_input_parameter_v1_816261626+{16271627+ uint32_t gpuclock_10khz:24; //Input= target clock, output = actual clock 16281628+ uint32_t gpu_clock_type:8; //Input indicate clock type: enum atom_gpu_clock_type16291629+ uint32_t reserved[5];16301630+};16311631+16321632+16331633+struct compute_gpu_clock_output_parameter_v1_816341634+{16351635+ uint32_t gpuclock_10khz:24; //Input= target clock, output = actual clock 16361636+ uint32_t dfs_did:8; //return parameter: DFS divider which is used to program to register directly16371637+ uint32_t pll_fb_mult; //Feedback Multiplier, bit 8:0 int, bit 15:12 post_div, bit 31:16 frac16381638+ uint32_t pll_ss_fbsmult; // Spread FB Mult: bit 8:0 int, bit 31:16 frac16391639+ uint16_t pll_ss_slew_frac;16401640+ uint8_t pll_ss_enable;16411641+ uint8_t reserved;16421642+ uint32_t reserved1[2];16431643+};16441644+16451645+16461646+16471647+/* 16481648+ ***************************************************************************16491649+ Structures used by ReadEfuseValue16501650+ *************************************************************************** 16511651+*/ 16521652+16531653+struct read_efuse_input_parameters_v3_116541654+{16551655+ uint16_t efuse_start_index;16561656+ uint8_t reserved;16571657+ uint8_t bitslen;16581658+};16591659+16601660+// ReadEfuseValue input/output parameter16611661+union read_efuse_value_parameters_v3_116621662+{16631663+ struct read_efuse_input_parameters_v3_1 efuse_info;16641664+ uint32_t efusevalue;16651665+};16661666+16671667+16681668+/* 16691669+ ***************************************************************************16701670+ Structures used by getsmuclockinfo16711671+ *************************************************************************** 16721672+*/ 16731673+struct atom_get_smu_clock_info_parameters_v3_116741674+{16751675+ uint8_t syspll_id; // 0= syspll0, 1=syspll1, 2=syspll2 16761676+ uint8_t clk_id; // atom_smu9_syspll0_clock_id (only valid when command == GET_SMU_CLOCK_INFO_V3_1_GET_CLOCK_FREQ )16771677+ uint8_t command; // enum of atom_get_smu_clock_info_command16781678+ uint8_t dfsdid; // =0: get DFS DID from register, >0, give DFS divider, (only valid when command == GET_SMU_CLOCK_INFO_V3_1_GET_CLOCK_FREQ )16791679+};16801680+16811681+enum atom_get_smu_clock_info_command 16821682+{16831683+ GET_SMU_CLOCK_INFO_V3_1_GET_CLOCK_FREQ = 0,16841684+ GET_SMU_CLOCK_INFO_V3_1_GET_PLLVCO_FREQ = 1,16851685+ GET_SMU_CLOCK_INFO_V3_1_GET_PLLREFCLK_FREQ = 2,16861686+};16871687+16881688+enum atom_smu9_syspll0_clock_id16891689+{16901690+ SMU9_SYSPLL0_SMNCLK_ID = 0, // SMNCLK16911691+ SMU9_SYSPLL0_SOCCLK_ID = 1, // SOCCLK (FCLK)16921692+ SMU9_SYSPLL0_MP0CLK_ID = 2, // MP0CLK16931693+ SMU9_SYSPLL0_MP1CLK_ID = 3, // MP1CLK16941694+ SMU9_SYSPLL0_LCLK_ID = 4, // LCLK16951695+ SMU9_SYSPLL0_DCLK_ID = 5, // DCLK16961696+ SMU9_SYSPLL0_VCLK_ID = 6, // VCLK16971697+ SMU9_SYSPLL0_ECLK_ID = 7, // ECLK16981698+ SMU9_SYSPLL0_DCEFCLK_ID = 8, // DCEFCLK16991699+ SMU9_SYSPLL0_DPREFCLK_ID = 10, // DPREFCLK17001700+ SMU9_SYSPLL0_DISPCLK_ID = 11, // DISPCLK17011701+};17021702+17031703+struct atom_get_smu_clock_info_output_parameters_v3_117041704+{17051705+ union {17061706+ uint32_t smu_clock_freq_hz;17071707+ uint32_t syspllvcofreq_10khz;17081708+ uint32_t sysspllrefclk_10khz;17091709+ }atom_smu_outputclkfreq;17101710+};17111711+17121712+17131713+17141714+/* 17151715+ ***************************************************************************17161716+ Structures used by dynamicmemorysettings17171717+ *************************************************************************** 17181718+*/ 17191719+17201720+enum atom_dynamic_memory_setting_command 17211721+{17221722+ COMPUTE_MEMORY_PLL_PARAM = 1,17231723+ COMPUTE_ENGINE_PLL_PARAM = 2,17241724+ ADJUST_MC_SETTING_PARAM = 3,17251725+};17261726+17271727+/* when command = COMPUTE_MEMORY_PLL_PARAM or ADJUST_MC_SETTING_PARAM */17281728+struct dynamic_mclk_settings_parameters_v2_117291729+{17301730+ uint32_t mclk_10khz:24; //Input= target mclk17311731+ uint32_t command:8; //command enum of atom_dynamic_memory_setting_command17321732+ uint32_t reserved;17331733+};17341734+17351735+/* when command = COMPUTE_ENGINE_PLL_PARAM */17361736+struct dynamic_sclk_settings_parameters_v2_117371737+{17381738+ uint32_t sclk_10khz:24; //Input= target mclk17391739+ uint32_t command:8; //command enum of atom_dynamic_memory_setting_command17401740+ uint32_t mclk_10khz;17411741+ uint32_t reserved;17421742+};17431743+17441744+union dynamic_memory_settings_parameters_v2_117451745+{17461746+ struct dynamic_mclk_settings_parameters_v2_1 mclk_setting;17471747+ struct dynamic_sclk_settings_parameters_v2_1 sclk_setting;17481748+};17491749+17501750+17511751+17521752+/* 17531753+ ***************************************************************************17541754+ Structures used by memorytraining17551755+ *************************************************************************** 17561756+*/ 17571757+17581758+enum atom_umc6_0_ucode_function_call_enum_id17591759+{17601760+ UMC60_UCODE_FUNC_ID_REINIT = 0,17611761+ UMC60_UCODE_FUNC_ID_ENTER_SELFREFRESH = 1,17621762+ UMC60_UCODE_FUNC_ID_EXIT_SELFREFRESH = 2,17631763+};17641764+17651765+17661766+struct memory_training_parameters_v2_117671767+{17681768+ uint8_t ucode_func_id;17691769+ uint8_t ucode_reserved[3];17701770+ uint32_t reserved[5];17711771+};17721772+17731773+17741774+/* 17751775+ ***************************************************************************17761776+ Structures used by setpixelclock17771777+ *************************************************************************** 17781778+*/ 17791779+17801780+struct set_pixel_clock_parameter_v1_717811781+{17821782+ uint32_t pixclk_100hz; // target the pixel clock to drive the CRTC timing in unit of 100Hz. 17831783+17841784+ uint8_t pll_id; // ATOM_PHY_PLL0/ATOM_PHY_PLL1/ATOM_PPLL017851785+ uint8_t encoderobjid; // ASIC encoder id defined in objectId.h, 17861786+ // indicate which graphic encoder will be used. 17871787+ uint8_t encoder_mode; // Encoder mode: 17881788+ uint8_t miscinfo; // enum atom_set_pixel_clock_v1_7_misc_info17891789+ uint8_t crtc_id; // enum of atom_crtc_def17901790+ uint8_t deep_color_ratio; // HDMI panel bit depth: enum atom_set_pixel_clock_v1_7_deepcolor_ratio17911791+ uint8_t reserved1[2]; 17921792+ uint32_t reserved2;17931793+};17941794+17951795+//ucMiscInfo17961796+enum atom_set_pixel_clock_v1_7_misc_info17971797+{17981798+ PIXEL_CLOCK_V7_MISC_FORCE_PROG_PPLL = 0x01,17991799+ PIXEL_CLOCK_V7_MISC_PROG_PHYPLL = 0x02,18001800+ PIXEL_CLOCK_V7_MISC_YUV420_MODE = 0x04,18011801+ PIXEL_CLOCK_V7_MISC_DVI_DUALLINK_EN = 0x08,18021802+ PIXEL_CLOCK_V7_MISC_REF_DIV_SRC = 0x30,18031803+ PIXEL_CLOCK_V7_MISC_REF_DIV_SRC_XTALIN = 0x00,18041804+ PIXEL_CLOCK_V7_MISC_REF_DIV_SRC_PCIE = 0x10,18051805+ PIXEL_CLOCK_V7_MISC_REF_DIV_SRC_GENLK = 0x20,18061806+ PIXEL_CLOCK_V7_MISC_REF_DIV_SRC_REFPAD = 0x30, 18071807+ PIXEL_CLOCK_V7_MISC_ATOMIC_UPDATE = 0x40,18081808+ PIXEL_CLOCK_V7_MISC_FORCE_SS_DIS = 0x80,18091809+};18101810+18111811+/* deep_color_ratio */18121812+enum atom_set_pixel_clock_v1_7_deepcolor_ratio18131813+{18141814+ PIXEL_CLOCK_V7_DEEPCOLOR_RATIO_DIS = 0x00, //00 - DCCG_DEEP_COLOR_DTO_DISABLE: Disable Deep Color DTO 18151815+ PIXEL_CLOCK_V7_DEEPCOLOR_RATIO_5_4 = 0x01, //01 - DCCG_DEEP_COLOR_DTO_5_4_RATIO: Set Deep Color DTO to 5:4 18161816+ PIXEL_CLOCK_V7_DEEPCOLOR_RATIO_3_2 = 0x02, //02 - DCCG_DEEP_COLOR_DTO_3_2_RATIO: Set Deep Color DTO to 3:2 18171817+ PIXEL_CLOCK_V7_DEEPCOLOR_RATIO_2_1 = 0x03, //03 - DCCG_DEEP_COLOR_DTO_2_1_RATIO: Set Deep Color DTO to 2:1 18181818+};18191819+18201820+/* 18211821+ ***************************************************************************18221822+ Structures used by setdceclock18231823+ *************************************************************************** 18241824+*/ 18251825+18261826+// SetDCEClock input parameter for DCE11.2( ELM and BF ) and above 18271827+struct set_dce_clock_parameters_v2_118281828+{18291829+ uint32_t dceclk_10khz; // target DCE frequency in unit of 10KHZ, return real DISPCLK/DPREFCLK frequency. 18301830+ uint8_t dceclktype; // =0: DISPCLK =1: DPREFCLK =2: PIXCLK18311831+ uint8_t dceclksrc; // ATOM_PLL0 or ATOM_GCK_DFS or ATOM_FCH_CLK or ATOM_COMBOPHY_PLLx18321832+ uint8_t dceclkflag; // Bit [1:0] = PPLL ref clock source ( when ucDCEClkSrc= ATOM_PPLL0 )18331833+ uint8_t crtc_id; // ucDisp Pipe Id, ATOM_CRTC0/1/2/..., use only when ucDCEClkType = PIXCLK18341834+};18351835+18361836+//ucDCEClkType18371837+enum atom_set_dce_clock_clock_type18381838+{18391839+ DCE_CLOCK_TYPE_DISPCLK = 0,18401840+ DCE_CLOCK_TYPE_DPREFCLK = 1,18411841+ DCE_CLOCK_TYPE_PIXELCLK = 2, // used by VBIOS internally, called by SetPixelClock 18421842+};18431843+18441844+//ucDCEClkFlag when ucDCEClkType == DPREFCLK 18451845+enum atom_set_dce_clock_dprefclk_flag18461846+{18471847+ DCE_CLOCK_FLAG_PLL_REFCLK_SRC_MASK = 0x03,18481848+ DCE_CLOCK_FLAG_PLL_REFCLK_SRC_GENERICA = 0x00,18491849+ DCE_CLOCK_FLAG_PLL_REFCLK_SRC_GENLK = 0x01,18501850+ DCE_CLOCK_FLAG_PLL_REFCLK_SRC_PCIE = 0x02,18511851+ DCE_CLOCK_FLAG_PLL_REFCLK_SRC_XTALIN = 0x03,18521852+};18531853+18541854+//ucDCEClkFlag when ucDCEClkType == PIXCLK 18551855+enum atom_set_dce_clock_pixclk_flag18561856+{18571857+ DCE_CLOCK_FLAG_PCLK_DEEPCOLOR_RATIO_MASK = 0x03,18581858+ DCE_CLOCK_FLAG_PCLK_DEEPCOLOR_RATIO_DIS = 0x00, //00 - DCCG_DEEP_COLOR_DTO_DISABLE: Disable Deep Color DTO 18591859+ DCE_CLOCK_FLAG_PCLK_DEEPCOLOR_RATIO_5_4 = 0x01, //01 - DCCG_DEEP_COLOR_DTO_5_4_RATIO: Set Deep Color DTO to 5:4 18601860+ DCE_CLOCK_FLAG_PCLK_DEEPCOLOR_RATIO_3_2 = 0x02, //02 - DCCG_DEEP_COLOR_DTO_3_2_RATIO: Set Deep Color DTO to 3:2 18611861+ DCE_CLOCK_FLAG_PCLK_DEEPCOLOR_RATIO_2_1 = 0x03, //03 - DCCG_DEEP_COLOR_DTO_2_1_RATIO: Set Deep Color DTO to 2:1 18621862+ DCE_CLOCK_FLAG_PIXCLK_YUV420_MODE = 0x04,18631863+};18641864+18651865+struct set_dce_clock_ps_allocation_v2_118661866+{18671867+ struct set_dce_clock_parameters_v2_1 param;18681868+ uint32_t ulReserved[2];18691869+};18701870+18711871+18721872+/****************************************************************************/ 18731873+// Structures used by BlankCRTC18741874+/****************************************************************************/ 18751875+struct blank_crtc_parameters18761876+{18771877+ uint8_t crtc_id; // enum atom_crtc_def18781878+ uint8_t blanking; // enum atom_blank_crtc_command18791879+ uint16_t reserved;18801880+ uint32_t reserved1;18811881+};18821882+18831883+enum atom_blank_crtc_command18841884+{18851885+ ATOM_BLANKING = 1,18861886+ ATOM_BLANKING_OFF = 0,18871887+};18881888+18891889+/****************************************************************************/ 18901890+// Structures used by enablecrtc18911891+/****************************************************************************/ 18921892+struct enable_crtc_parameters18931893+{18941894+ uint8_t crtc_id; // enum atom_crtc_def18951895+ uint8_t enable; // ATOM_ENABLE or ATOM_DISABLE 18961896+ uint8_t padding[2];18971897+};18981898+18991899+19001900+/****************************************************************************/ 19011901+// Structure used by EnableDispPowerGating19021902+/****************************************************************************/ 19031903+struct enable_disp_power_gating_parameters_v2_119041904+{19051905+ uint8_t disp_pipe_id; // ATOM_CRTC1, ATOM_CRTC2, ...19061906+ uint8_t enable; // ATOM_ENABLE or ATOM_DISABLE19071907+ uint8_t padding[2];19081908+};19091909+19101910+struct enable_disp_power_gating_ps_allocation 19111911+{19121912+ struct enable_disp_power_gating_parameters_v2_1 param;19131913+ uint32_t ulReserved[4];19141914+};19151915+19161916+/****************************************************************************/ 19171917+// Structure used in setcrtc_usingdtdtiming19181918+/****************************************************************************/ 19191919+struct set_crtc_using_dtd_timing_parameters19201920+{19211921+ uint16_t h_size;19221922+ uint16_t h_blanking_time;19231923+ uint16_t v_size;19241924+ uint16_t v_blanking_time;19251925+ uint16_t h_syncoffset;19261926+ uint16_t h_syncwidth;19271927+ uint16_t v_syncoffset;19281928+ uint16_t v_syncwidth;19291929+ uint16_t modemiscinfo; 19301930+ uint8_t h_border;19311931+ uint8_t v_border;19321932+ uint8_t crtc_id; // enum atom_crtc_def19331933+ uint8_t encoder_mode; // atom_encode_mode_def19341934+ uint8_t padding[2];19351935+};19361936+19371937+19381938+/****************************************************************************/ 19391939+// Structures used by processi2cchanneltransaction19401940+/****************************************************************************/ 19411941+struct process_i2c_channel_transaction_parameters19421942+{19431943+ uint8_t i2cspeed_khz;19441944+ union {19451945+ uint8_t regindex;19461946+ uint8_t status; /* enum atom_process_i2c_flag */19471947+ } regind_status;19481948+ uint16_t i2c_data_out;19491949+ uint8_t flag; /* enum atom_process_i2c_status */19501950+ uint8_t trans_bytes;19511951+ uint8_t slave_addr;19521952+ uint8_t i2c_id;19531953+};19541954+19551955+//ucFlag19561956+enum atom_process_i2c_flag19571957+{19581958+ HW_I2C_WRITE = 1,19591959+ HW_I2C_READ = 0,19601960+ I2C_2BYTE_ADDR = 0x02,19611961+ HW_I2C_SMBUS_BYTE_WR = 0x04,19621962+};19631963+19641964+//status19651965+enum atom_process_i2c_status19661966+{19671967+ HW_ASSISTED_I2C_STATUS_FAILURE =2,19681968+ HW_ASSISTED_I2C_STATUS_SUCCESS =1,19691969+};19701970+19711971+19721972+/****************************************************************************/ 19731973+// Structures used by processauxchanneltransaction19741974+/****************************************************************************/ 19751975+19761976+struct process_aux_channel_transaction_parameters_v1_219771977+{19781978+ uint16_t aux_request;19791979+ uint16_t dataout;19801980+ uint8_t channelid;19811981+ union {19821982+ uint8_t reply_status;19831983+ uint8_t aux_delay;19841984+ } aux_status_delay;19851985+ uint8_t dataout_len;19861986+ uint8_t hpd_id; //=0: HPD1, =1: HPD2, =2: HPD3, =3: HPD4, =4: HPD5, =5: HPD619871987+};19881988+19891989+19901990+/****************************************************************************/ 19911991+// Structures used by selectcrtc_source19921992+/****************************************************************************/ 19931993+19941994+struct select_crtc_source_parameters_v2_319951995+{19961996+ uint8_t crtc_id; // enum atom_crtc_def19971997+ uint8_t encoder_id; // enum atom_dig_def19981998+ uint8_t encode_mode; // enum atom_encode_mode_def19991999+ uint8_t dst_bpc; // enum atom_panel_bit_per_color20002000+};20012001+20022002+20032003+/****************************************************************************/ 20042004+// Structures used by digxencodercontrol20052005+/****************************************************************************/ 20062006+20072007+// ucAction:20082008+enum atom_dig_encoder_control_action20092009+{20102010+ ATOM_ENCODER_CMD_DISABLE_DIG = 0,20112011+ ATOM_ENCODER_CMD_ENABLE_DIG = 1,20122012+ ATOM_ENCODER_CMD_DP_LINK_TRAINING_START = 0x08,20132013+ ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN1 = 0x09,20142014+ ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN2 = 0x0a,20152015+ ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN3 = 0x13,20162016+ ATOM_ENCODER_CMD_DP_LINK_TRAINING_COMPLETE = 0x0b,20172017+ ATOM_ENCODER_CMD_DP_VIDEO_OFF = 0x0c,20182018+ ATOM_ENCODER_CMD_DP_VIDEO_ON = 0x0d,20192019+ ATOM_ENCODER_CMD_SETUP_PANEL_MODE = 0x10,20202020+ ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN4 = 0x14,20212021+ ATOM_ENCODER_CMD_STREAM_SETUP = 0x0F, 20222022+ ATOM_ENCODER_CMD_LINK_SETUP = 0x11, 20232023+ ATOM_ENCODER_CMD_ENCODER_BLANK = 0x12,20242024+};20252025+20262026+//define ucPanelMode20272027+enum atom_dig_encoder_control_panelmode20282028+{20292029+ DP_PANEL_MODE_DISABLE = 0x00,20302030+ DP_PANEL_MODE_ENABLE_eDP_MODE = 0x01,20312031+ DP_PANEL_MODE_ENABLE_LVLINK_MODE = 0x11,20322032+};20332033+20342034+//ucDigId20352035+enum atom_dig_encoder_control_v5_digid20362036+{20372037+ ATOM_ENCODER_CONFIG_V5_DIG0_ENCODER = 0x00,20382038+ ATOM_ENCODER_CONFIG_V5_DIG1_ENCODER = 0x01,20392039+ ATOM_ENCODER_CONFIG_V5_DIG2_ENCODER = 0x02,20402040+ ATOM_ENCODER_CONFIG_V5_DIG3_ENCODER = 0x03,20412041+ ATOM_ENCODER_CONFIG_V5_DIG4_ENCODER = 0x04,20422042+ ATOM_ENCODER_CONFIG_V5_DIG5_ENCODER = 0x05,20432043+ ATOM_ENCODER_CONFIG_V5_DIG6_ENCODER = 0x06,20442044+ ATOM_ENCODER_CONFIG_V5_DIG7_ENCODER = 0x07,20452045+};20462046+20472047+struct dig_encoder_stream_setup_parameters_v1_520482048+{20492049+ uint8_t digid; // 0~6 map to DIG0~DIG6 enum atom_dig_encoder_control_v5_digid20502050+ uint8_t action; // = ATOM_ENOCODER_CMD_STREAM_SETUP20512051+ uint8_t digmode; // ATOM_ENCODER_MODE_DP/ATOM_ENCODER_MODE_DVI/ATOM_ENCODER_MODE_HDMI20522052+ uint8_t lanenum; // Lane number 20532053+ uint32_t pclk_10khz; // Pixel Clock in 10Khz20542054+ uint8_t bitpercolor;20552055+ uint8_t dplinkrate_270mhz;//= DP link rate/270Mhz, =6: 1.62G = 10: 2.7G, =20: 5.4Ghz, =30: 8.1Ghz etc20562056+ uint8_t reserved[2];20572057+};20582058+20592059+struct dig_encoder_link_setup_parameters_v1_520602060+{20612061+ uint8_t digid; // 0~6 map to DIG0~DIG6 enum atom_dig_encoder_control_v5_digid20622062+ uint8_t action; // = ATOM_ENOCODER_CMD_LINK_SETUP 20632063+ uint8_t digmode; // ATOM_ENCODER_MODE_DP/ATOM_ENCODER_MODE_DVI/ATOM_ENCODER_MODE_HDMI20642064+ uint8_t lanenum; // Lane number 20652065+ uint8_t symclk_10khz; // Symbol Clock in 10Khz20662066+ uint8_t hpd_sel;20672067+ uint8_t digfe_sel; // DIG stream( front-end ) selection, bit0 means DIG0 FE is enable, 20682068+ uint8_t reserved[2];20692069+};20702070+20712071+struct dp_panel_mode_set_parameters_v1_520722072+{20732073+ uint8_t digid; // 0~6 map to DIG0~DIG6 enum atom_dig_encoder_control_v5_digid20742074+ uint8_t action; // = ATOM_ENCODER_CMD_DPLINK_SETUP20752075+ uint8_t panelmode; // enum atom_dig_encoder_control_panelmode20762076+ uint8_t reserved1; 20772077+ uint32_t reserved2[2];20782078+};20792079+20802080+struct dig_encoder_generic_cmd_parameters_v1_5 20812081+{20822082+ uint8_t digid; // 0~6 map to DIG0~DIG6 enum atom_dig_encoder_control_v5_digid20832083+ uint8_t action; // = rest of generic encoder command which does not carry any parameters20842084+ uint8_t reserved1[2]; 20852085+ uint32_t reserved2[2];20862086+};20872087+20882088+union dig_encoder_control_parameters_v1_520892089+{20902090+ struct dig_encoder_generic_cmd_parameters_v1_5 cmd_param;20912091+ struct dig_encoder_stream_setup_parameters_v1_5 stream_param;20922092+ struct dig_encoder_link_setup_parameters_v1_5 link_param;20932093+ struct dp_panel_mode_set_parameters_v1_5 dppanel_param;20942094+};20952095+20962096+/* 20972097+ ***************************************************************************20982098+ Structures used by dig1transmittercontrol20992099+ *************************************************************************** 21002100+*/ 21012101+struct dig_transmitter_control_parameters_v1_621022102+{21032103+ uint8_t phyid; // 0=UNIPHYA, 1=UNIPHYB, 2=UNIPHYC, 3=UNIPHYD, 4= UNIPHYE 5=UNIPHYF21042104+ uint8_t action; // define as ATOM_TRANSMITER_ACTION_xxx21052105+ union {21062106+ uint8_t digmode; // enum atom_encode_mode_def21072107+ uint8_t dplaneset; // DP voltage swing and pre-emphasis value defined in DPCD DP_LANE_SET, "DP_LANE_SET__xDB_y_zV"21082108+ } mode_laneset;21092109+ uint8_t lanenum; // Lane number 1, 2, 4, 8 21102110+ uint32_t symclk_10khz; // Symbol Clock in 10Khz21112111+ uint8_t hpdsel; // =1: HPD1, =2: HPD2, .... =6: HPD6, =0: HPD is not assigned21122112+ uint8_t digfe_sel; // DIG stream( front-end ) selection, bit0 means DIG0 FE is enable, 21132113+ uint8_t connobj_id; // Connector Object Id defined in ObjectId.h21142114+ uint8_t reserved;21152115+ uint32_t reserved1;21162116+};21172117+21182118+struct dig_transmitter_control_ps_allocation_v1_621192119+{21202120+ struct dig_transmitter_control_parameters_v1_6 param;21212121+ uint32_t reserved[4];21222122+};21232123+21242124+//ucAction21252125+enum atom_dig_transmitter_control_action21262126+{21272127+ ATOM_TRANSMITTER_ACTION_DISABLE = 0,21282128+ ATOM_TRANSMITTER_ACTION_ENABLE = 1,21292129+ ATOM_TRANSMITTER_ACTION_LCD_BLOFF = 2,21302130+ ATOM_TRANSMITTER_ACTION_LCD_BLON = 3,21312131+ ATOM_TRANSMITTER_ACTION_BL_BRIGHTNESS_CONTROL = 4,21322132+ ATOM_TRANSMITTER_ACTION_LCD_SELFTEST_START = 5,21332133+ ATOM_TRANSMITTER_ACTION_LCD_SELFTEST_STOP = 6,21342134+ ATOM_TRANSMITTER_ACTION_INIT = 7,21352135+ ATOM_TRANSMITTER_ACTION_DISABLE_OUTPUT = 8,21362136+ ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT = 9,21372137+ ATOM_TRANSMITTER_ACTION_SETUP = 10,21382138+ ATOM_TRANSMITTER_ACTION_SETUP_VSEMPH = 11,21392139+ ATOM_TRANSMITTER_ACTION_POWER_ON = 12,21402140+ ATOM_TRANSMITTER_ACTION_POWER_OFF = 13,21412141+};21422142+21432143+// digfe_sel21442144+enum atom_dig_transmitter_control_digfe_sel21452145+{21462146+ ATOM_TRANMSITTER_V6__DIGA_SEL = 0x01,21472147+ ATOM_TRANMSITTER_V6__DIGB_SEL = 0x02,21482148+ ATOM_TRANMSITTER_V6__DIGC_SEL = 0x04,21492149+ ATOM_TRANMSITTER_V6__DIGD_SEL = 0x08,21502150+ ATOM_TRANMSITTER_V6__DIGE_SEL = 0x10,21512151+ ATOM_TRANMSITTER_V6__DIGF_SEL = 0x20,21522152+ ATOM_TRANMSITTER_V6__DIGG_SEL = 0x40,21532153+};21542154+21552155+21562156+//ucHPDSel21572157+enum atom_dig_transmitter_control_hpd_sel21582158+{21592159+ ATOM_TRANSMITTER_V6_NO_HPD_SEL = 0x00,21602160+ ATOM_TRANSMITTER_V6_HPD1_SEL = 0x01,21612161+ ATOM_TRANSMITTER_V6_HPD2_SEL = 0x02,21622162+ ATOM_TRANSMITTER_V6_HPD3_SEL = 0x03,21632163+ ATOM_TRANSMITTER_V6_HPD4_SEL = 0x04,21642164+ ATOM_TRANSMITTER_V6_HPD5_SEL = 0x05,21652165+ ATOM_TRANSMITTER_V6_HPD6_SEL = 0x06,21662166+};21672167+21682168+// ucDPLaneSet21692169+enum atom_dig_transmitter_control_dplaneset21702170+{21712171+ DP_LANE_SET__0DB_0_4V = 0x00,21722172+ DP_LANE_SET__0DB_0_6V = 0x01,21732173+ DP_LANE_SET__0DB_0_8V = 0x02,21742174+ DP_LANE_SET__0DB_1_2V = 0x03,21752175+ DP_LANE_SET__3_5DB_0_4V = 0x08, 21762176+ DP_LANE_SET__3_5DB_0_6V = 0x09,21772177+ DP_LANE_SET__3_5DB_0_8V = 0x0a,21782178+ DP_LANE_SET__6DB_0_4V = 0x10,21792179+ DP_LANE_SET__6DB_0_6V = 0x11,21802180+ DP_LANE_SET__9_5DB_0_4V = 0x18, 21812181+};21822182+21832183+21842184+21852185+/****************************************************************************/ 21862186+// Structures used by ExternalEncoderControl V2.421872187+/****************************************************************************/ 21882188+21892189+struct external_encoder_control_parameters_v2_421902190+{21912191+ uint16_t pixelclock_10khz; // pixel clock in 10Khz, valid when ucAction=SETUP/ENABLE_OUTPUT 21922192+ uint8_t config; // indicate which encoder, and DP link rate when ucAction = SETUP/ENABLE_OUTPUT 21932193+ uint8_t action; // 21942194+ uint8_t encodermode; // encoder mode, only used when ucAction = SETUP/ENABLE_OUTPUT21952195+ uint8_t lanenum; // lane number, only used when ucAction = SETUP/ENABLE_OUTPUT 21962196+ uint8_t bitpercolor; // output bit per color, only valid when ucAction = SETUP/ENABLE_OUTPUT and ucEncodeMode= DP21972197+ uint8_t hpd_id; 21982198+};21992199+22002200+22012201+// ucAction22022202+enum external_encoder_control_action_def22032203+{22042204+ EXTERNAL_ENCODER_ACTION_V3_DISABLE_OUTPUT = 0x00,22052205+ EXTERNAL_ENCODER_ACTION_V3_ENABLE_OUTPUT = 0x01,22062206+ EXTERNAL_ENCODER_ACTION_V3_ENCODER_INIT = 0x07,22072207+ EXTERNAL_ENCODER_ACTION_V3_ENCODER_SETUP = 0x0f,22082208+ EXTERNAL_ENCODER_ACTION_V3_ENCODER_BLANKING_OFF = 0x10,22092209+ EXTERNAL_ENCODER_ACTION_V3_ENCODER_BLANKING = 0x11,22102210+ EXTERNAL_ENCODER_ACTION_V3_DACLOAD_DETECTION = 0x12,22112211+ EXTERNAL_ENCODER_ACTION_V3_DDC_SETUP = 0x14,22122212+};22132213+22142214+// ucConfig22152215+enum external_encoder_control_v2_4_config_def22162216+{22172217+ EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_MASK = 0x03,22182218+ EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_1_62GHZ = 0x00,22192219+ EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_2_70GHZ = 0x01,22202220+ EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_5_40GHZ = 0x02,22212221+ EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_3_24GHZ = 0x03, 22222222+ EXTERNAL_ENCODER_CONFIG_V3_ENCODER_SEL_MAKS = 0x70,22232223+ EXTERNAL_ENCODER_CONFIG_V3_ENCODER1 = 0x00,22242224+ EXTERNAL_ENCODER_CONFIG_V3_ENCODER2 = 0x10,22252225+ EXTERNAL_ENCODER_CONFIG_V3_ENCODER3 = 0x20,22262226+};22272227+22282228+struct external_encoder_control_ps_allocation_v2_422292229+{22302230+ struct external_encoder_control_parameters_v2_4 sExtEncoder;22312231+ uint32_t reserved[2];22322232+};22332233+22342234+22352235+/* 22362236+ ***************************************************************************22372237+ AMD ACPI Table22382238+22392239+ *************************************************************************** 22402240+*/ 22412241+22422242+struct amd_acpi_description_header{22432243+ uint32_t signature;22442244+ uint32_t tableLength; //Length22452245+ uint8_t revision;22462246+ uint8_t checksum;22472247+ uint8_t oemId[6];22482248+ uint8_t oemTableId[8]; //UINT64 OemTableId;22492249+ uint32_t oemRevision;22502250+ uint32_t creatorId;22512251+ uint32_t creatorRevision;22522252+};22532253+22542254+struct uefi_acpi_vfct{22552255+ struct amd_acpi_description_header sheader;22562256+ uint8_t tableUUID[16]; //0x2422572257+ uint32_t vbiosimageoffset; //0x34. Offset to the first GOP_VBIOS_CONTENT block from the beginning of the stucture.22582258+ uint32_t lib1Imageoffset; //0x38. Offset to the first GOP_LIB1_CONTENT block from the beginning of the stucture.22592259+ uint32_t reserved[4]; //0x3C22602260+};22612261+22622262+struct vfct_image_header{22632263+ uint32_t pcibus; //0x4C22642264+ uint32_t pcidevice; //0x5022652265+ uint32_t pcifunction; //0x5422662266+ uint16_t vendorid; //0x5822672267+ uint16_t deviceid; //0x5A22682268+ uint16_t ssvid; //0x5C22692269+ uint16_t ssid; //0x5E22702270+ uint32_t revision; //0x6022712271+ uint32_t imagelength; //0x6422722272+};22732273+22742274+22752275+struct gop_vbios_content {22762276+ struct vfct_image_header vbiosheader;22772277+ uint8_t vbioscontent[1];22782278+};22792279+22802280+struct gop_lib1_content {22812281+ struct vfct_image_header lib1header;22822282+ uint8_t lib1content[1];22832283+};22842284+22852285+22862286+22872287+/* 22882288+ ***************************************************************************22892289+ Scratch Register definitions22902290+ Each number below indicates which scratch regiser request, Active and 22912291+ Connect all share the same definitions as display_device_tag defines22922292+ *************************************************************************** 22932293+*/ 22942294+22952295+enum scratch_register_def{22962296+ ATOM_DEVICE_CONNECT_INFO_DEF = 0,22972297+ ATOM_BL_BRI_LEVEL_INFO_DEF = 2,22982298+ ATOM_ACTIVE_INFO_DEF = 3,22992299+ ATOM_LCD_INFO_DEF = 4,23002300+ ATOM_DEVICE_REQ_INFO_DEF = 5,23012301+ ATOM_ACC_CHANGE_INFO_DEF = 6,23022302+ ATOM_PRE_OS_MODE_INFO_DEF = 7,23032303+ ATOM_PRE_OS_ASSERTION_DEF = 8, //For GOP to record a 32bit assertion code, this is enabled by default in prodution GOP drivers.23042304+ ATOM_INTERNAL_TIMER_INFO_DEF = 10,23052305+};23062306+23072307+enum scratch_device_connect_info_bit_def{23082308+ ATOM_DISPLAY_LCD1_CONNECT =0x0002,23092309+ ATOM_DISPLAY_DFP1_CONNECT =0x0008,23102310+ ATOM_DISPLAY_DFP2_CONNECT =0x0080,23112311+ ATOM_DISPLAY_DFP3_CONNECT =0x0200,23122312+ ATOM_DISPLAY_DFP4_CONNECT =0x0400,23132313+ ATOM_DISPLAY_DFP5_CONNECT =0x0800,23142314+ ATOM_DISPLAY_DFP6_CONNECT =0x0040,23152315+ ATOM_DISPLAY_DFPx_CONNECT =0x0ec8,23162316+ ATOM_CONNECT_INFO_DEVICE_MASK =0x0fff,23172317+};23182318+23192319+enum scratch_bl_bri_level_info_bit_def{23202320+ ATOM_CURRENT_BL_LEVEL_SHIFT =0x8,23212321+#ifndef _H2INC23222322+ ATOM_CURRENT_BL_LEVEL_MASK =0x0000ff00,23232323+ ATOM_DEVICE_DPMS_STATE =0x00010000,23242324+#endif23252325+};23262326+23272327+enum scratch_active_info_bits_def{23282328+ ATOM_DISPLAY_LCD1_ACTIVE =0x0002,23292329+ ATOM_DISPLAY_DFP1_ACTIVE =0x0008,23302330+ ATOM_DISPLAY_DFP2_ACTIVE =0x0080,23312331+ ATOM_DISPLAY_DFP3_ACTIVE =0x0200,23322332+ ATOM_DISPLAY_DFP4_ACTIVE =0x0400,23332333+ ATOM_DISPLAY_DFP5_ACTIVE =0x0800,23342334+ ATOM_DISPLAY_DFP6_ACTIVE =0x0040,23352335+ ATOM_ACTIVE_INFO_DEVICE_MASK =0x0fff,23362336+};23372337+23382338+enum scratch_device_req_info_bits_def{23392339+ ATOM_DISPLAY_LCD1_REQ =0x0002,23402340+ ATOM_DISPLAY_DFP1_REQ =0x0008,23412341+ ATOM_DISPLAY_DFP2_REQ =0x0080,23422342+ ATOM_DISPLAY_DFP3_REQ =0x0200,23432343+ ATOM_DISPLAY_DFP4_REQ =0x0400,23442344+ ATOM_DISPLAY_DFP5_REQ =0x0800,23452345+ ATOM_DISPLAY_DFP6_REQ =0x0040,23462346+ ATOM_REQ_INFO_DEVICE_MASK =0x0fff,23472347+};23482348+23492349+enum scratch_acc_change_info_bitshift_def{23502350+ ATOM_ACC_CHANGE_ACC_MODE_SHIFT =4,23512351+ ATOM_ACC_CHANGE_LID_STATUS_SHIFT =6,23522352+};23532353+23542354+enum scratch_acc_change_info_bits_def{23552355+ ATOM_ACC_CHANGE_ACC_MODE =0x00000010,23562356+ ATOM_ACC_CHANGE_LID_STATUS =0x00000040,23572357+};23582358+23592359+enum scratch_pre_os_mode_info_bits_def{23602360+ ATOM_PRE_OS_MODE_MASK =0x00000003,23612361+ ATOM_PRE_OS_MODE_VGA =0x00000000,23622362+ ATOM_PRE_OS_MODE_VESA =0x00000001,23632363+ ATOM_PRE_OS_MODE_GOP =0x00000002,23642364+ ATOM_PRE_OS_MODE_PIXEL_DEPTH =0x0000000C,23652365+ ATOM_PRE_OS_MODE_PIXEL_FORMAT_MASK=0x000000F0,23662366+ ATOM_PRE_OS_MODE_8BIT_PAL_EN =0x00000100,23672367+ ATOM_ASIC_INIT_COMPLETE =0x00000200,23682368+#ifndef _H2INC23692369+ ATOM_PRE_OS_MODE_NUMBER_MASK =0xFFFF0000,23702370+#endif23712371+};23722372+23732373+23742374+23752375+/* 23762376+ ***************************************************************************23772377+ ATOM firmware ID header file23782378+ !! Please keep it at end of the atomfirmware.h !!23792379+ *************************************************************************** 23802380+*/ 23812381+#include "atomfirmwareid.h"23822382+#pragma pack()23832383+23842384+#endif23852385+
+86
drivers/gpu/drm/amd/include/atomfirmwareid.h
···11+/****************************************************************************\22+* 33+* File Name atomfirmwareid.h44+*55+* Description ATOM BIOS command/data table ID definition header file66+*77+* Copyright 2016 Advanced Micro Devices, Inc.88+*99+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software 1010+* and associated documentation files (the "Software"), to deal in the Software without restriction,1111+* including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,1212+* and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,1313+* subject to the following conditions:1414+*1515+* The above copyright notice and this permission notice shall be included in all copies or substantial1616+* portions of the Software.1717+*1818+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR1919+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,2020+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL2121+* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR2222+* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,2323+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR2424+* OTHER DEALINGS IN THE SOFTWARE.2525+*2626+\****************************************************************************/2727+2828+#ifndef _ATOMFIRMWAREID_H_2929+#define _ATOMFIRMWAREID_H_3030+3131+enum atom_master_data_table_id3232+{3333+ VBIOS_DATA_TBL_ID__UTILITY_PIPELINE,3434+ VBIOS_DATA_TBL_ID__MULTIMEDIA_INF,3535+ VBIOS_DATA_TBL_ID__FIRMWARE_INF,3636+ VBIOS_DATA_TBL_ID__LCD_INF,3737+ VBIOS_DATA_TBL_ID__SMU_INF,3838+ VBIOS_DATA_TBL_ID__VRAM_USAGE_BY_FIRMWARE,3939+ VBIOS_DATA_TBL_ID__GPIO_PIN_LUT,4040+ VBIOS_DATA_TBL_ID__GFX_INF,4141+ VBIOS_DATA_TBL_ID__POWER_PLAY_INF,4242+ VBIOS_DATA_TBL_ID__DISPLAY_OBJECT_INF,4343+ VBIOS_DATA_TBL_ID__INDIRECT_IO_ACCESS,4444+ VBIOS_DATA_TBL_ID__UMC_INF,4545+ VBIOS_DATA_TBL_ID__DCE_INF,4646+ VBIOS_DATA_TBL_ID__VRAM_INF,4747+ VBIOS_DATA_TBL_ID__INTEGRATED_SYS_INF,4848+ VBIOS_DATA_TBL_ID__ASIC_PROFILING_INF,4949+ VBIOS_DATA_TBL_ID__VOLTAGE_OBJ_INF,5050+5151+ VBIOS_DATA_TBL_ID__UNDEFINED,5252+};5353+5454+enum atom_master_command_table_id5555+{5656+ VBIOS_CMD_TBL_ID__ASIC_INIT,5757+ VBIOS_CMD_TBL_ID__DIGX_ENCODER_CONTROL,5858+ VBIOS_CMD_TBL_ID__SET_ENGINE_CLOCK,5959+ VBIOS_CMD_TBL_ID__SET_MEMORY_CLOCK,6060+ VBIOS_CMD_TBL_ID__SET_PIXEL_CLOCK,6161+ VBIOS_CMD_TBL_ID__ENABLE_DISP_POWER_GATING,6262+ VBIOS_CMD_TBL_ID__BLANK_CRTC,6363+ VBIOS_CMD_TBL_ID__ENABLE_CRTC,6464+ VBIOS_CMD_TBL_ID__GET_SMU_CLOCK_INFO,6565+ VBIOS_CMD_TBL_ID__SELECT_CRTC_SOURCE,6666+ VBIOS_CMD_TBL_ID__SET_DCE_CLOCK,6767+ VBIOS_CMD_TBL_ID__GET_MEMORY_CLOCK,6868+ VBIOS_CMD_TBL_ID__GET_ENGINE_CLOCK,6969+ VBIOS_CMD_TBL_ID__SET_CRTC_USING_DTD_TIMING,7070+ VBIOS_CMD_TBL_ID__EXTENAL_ENCODER_CONTROL,7171+ VBIOS_CMD_TBL_ID__PROCESS_I2C_CHANNEL_TRANSACTION,7272+ VBIOS_CMD_TBL_ID__COMPUTE_GPU_CLOCK_PARAM,7373+ VBIOS_CMD_TBL_ID__DYNAMIC_MEMORY_SETTINGS,7474+ VBIOS_CMD_TBL_ID__MEMORY_TRAINING,7575+ VBIOS_CMD_TBL_ID__SET_VOLTAGE,7676+ VBIOS_CMD_TBL_ID__DIG1_TRANSMITTER_CONTROL,7777+ VBIOS_CMD_TBL_ID__PROCESS_AUX_CHANNEL_TRANSACTION,7878+ VBIOS_CMD_TBL_ID__GET_VOLTAGE_INF,7979+8080+ VBIOS_CMD_TBL_ID__UNDEFINED,8181+};8282+8383+8484+8585+#endif /* _ATOMFIRMWAREID_H_ */8686+/* ### EOF ### */
+249
drivers/gpu/drm/amd/include/displayobject.h
···11+/****************************************************************************\22+* 33+* Module Name displayobjectsoc15.h44+* Project 55+* Device 66+*77+* Description Contains the common definitions for display objects for SoC15 products.88+*99+* Copyright 2014 Advanced Micro Devices, Inc.1010+*1111+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software 1212+* and associated documentation files (the "Software"), to deal in the Software without restriction,1313+* including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,1414+* and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,1515+* subject to the following conditions:1616+*1717+* The above copyright notice and this permission notice shall be included in all copies or substantial1818+* portions of the Software.1919+*2020+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR2121+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,2222+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL2323+* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR2424+* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,2525+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR2626+* OTHER DEALINGS IN THE SOFTWARE.2727+*2828+\****************************************************************************/2929+#ifndef _DISPLAY_OBJECT_SOC15_H_3030+#define _DISPLAY_OBJECT_SOC15_H_3131+3232+#if defined(_X86_)3333+#pragma pack(1)3434+#endif3535+3636+3737+/****************************************************3838+* Display Object Type Definition 3939+*****************************************************/4040+enum display_object_type{4141+DISPLAY_OBJECT_TYPE_NONE =0x00,4242+DISPLAY_OBJECT_TYPE_GPU =0x01,4343+DISPLAY_OBJECT_TYPE_ENCODER =0x02,4444+DISPLAY_OBJECT_TYPE_CONNECTOR =0x034545+};4646+4747+/****************************************************4848+* Encorder Object Type Definition 4949+*****************************************************/5050+enum encoder_object_type{5151+ENCODER_OBJECT_ID_NONE =0x00,5252+ENCODER_OBJECT_ID_INTERNAL_UNIPHY =0x01,5353+ENCODER_OBJECT_ID_INTERNAL_UNIPHY1 =0x02,5454+ENCODER_OBJECT_ID_INTERNAL_UNIPHY2 =0x03,5555+};5656+5757+5858+/****************************************************5959+* Connector Object ID Definition 6060+*****************************************************/6161+6262+enum connector_object_type{6363+CONNECTOR_OBJECT_ID_NONE =0x00, 6464+CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D =0x01,6565+CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D =0x02,6666+CONNECTOR_OBJECT_ID_HDMI_TYPE_A =0x03,6767+CONNECTOR_OBJECT_ID_LVDS =0x04,6868+CONNECTOR_OBJECT_ID_DISPLAYPORT =0x05,6969+CONNECTOR_OBJECT_ID_eDP =0x06,7070+CONNECTOR_OBJECT_ID_OPM =0x077171+};7272+7373+7474+/****************************************************7575+* Protection Object ID Definition 7676+*****************************************************/7777+//No need7878+7979+/****************************************************8080+* Object ENUM ID Definition 8181+*****************************************************/8282+8383+enum object_enum_id{8484+OBJECT_ENUM_ID1 =0x01,8585+OBJECT_ENUM_ID2 =0x02,8686+OBJECT_ENUM_ID3 =0x03,8787+OBJECT_ENUM_ID4 =0x04,8888+OBJECT_ENUM_ID5 =0x05,8989+OBJECT_ENUM_ID6 =0x069090+};9191+9292+/****************************************************9393+*Object ID Bit definition 9494+*****************************************************/9595+enum object_id_bit{9696+OBJECT_ID_MASK =0x00FF,9797+ENUM_ID_MASK =0x0F00,9898+OBJECT_TYPE_MASK =0xF000,9999+OBJECT_ID_SHIFT =0x00,100100+ENUM_ID_SHIFT =0x08,101101+OBJECT_TYPE_SHIFT =0x0C102102+};103103+104104+105105+/****************************************************106106+* GPU Object definition - Shared with BIOS107107+*****************************************************/108108+enum gpu_objet_def{109109+GPU_ENUM_ID1 =( DISPLAY_OBJECT_TYPE_GPU << OBJECT_TYPE_SHIFT | OBJECT_ENUM_ID1 << ENUM_ID_SHIFT)110110+};111111+112112+/****************************************************113113+* Encoder Object definition - Shared with BIOS114114+*****************************************************/115115+116116+enum encoder_objet_def{117117+ENCODER_INTERNAL_UNIPHY_ENUM_ID1 =( DISPLAY_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\118118+ OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\119119+ ENCODER_OBJECT_ID_INTERNAL_UNIPHY << OBJECT_ID_SHIFT),120120+121121+ENCODER_INTERNAL_UNIPHY_ENUM_ID2 =( DISPLAY_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\122122+ OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\123123+ ENCODER_OBJECT_ID_INTERNAL_UNIPHY << OBJECT_ID_SHIFT),124124+125125+ENCODER_INTERNAL_UNIPHY1_ENUM_ID1 =( DISPLAY_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\126126+ OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\127127+ ENCODER_OBJECT_ID_INTERNAL_UNIPHY1 << OBJECT_ID_SHIFT),128128+129129+ENCODER_INTERNAL_UNIPHY1_ENUM_ID2 =( DISPLAY_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\130130+ OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\131131+ ENCODER_OBJECT_ID_INTERNAL_UNIPHY1 << OBJECT_ID_SHIFT),132132+133133+ENCODER_INTERNAL_UNIPHY2_ENUM_ID1 =( DISPLAY_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\134134+ OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\135135+ ENCODER_OBJECT_ID_INTERNAL_UNIPHY2 << OBJECT_ID_SHIFT),136136+137137+ENCODER_INTERNAL_UNIPHY2_ENUM_ID2 =( DISPLAY_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\138138+ OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\139139+ ENCODER_OBJECT_ID_INTERNAL_UNIPHY2 << OBJECT_ID_SHIFT)140140+};141141+142142+143143+/****************************************************144144+* Connector Object definition - Shared with BIOS145145+*****************************************************/146146+147147+148148+enum connector_objet_def{149149+CONNECTOR_LVDS_ENUM_ID1 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\150150+ OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\151151+ CONNECTOR_OBJECT_ID_LVDS << OBJECT_ID_SHIFT),152152+153153+154154+CONNECTOR_eDP_ENUM_ID1 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\155155+ OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\156156+ CONNECTOR_OBJECT_ID_eDP << OBJECT_ID_SHIFT),157157+158158+CONNECTOR_SINGLE_LINK_DVI_D_ENUM_ID1 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\159159+ OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\160160+ CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D << OBJECT_ID_SHIFT),161161+162162+CONNECTOR_SINGLE_LINK_DVI_D_ENUM_ID2 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\163163+ OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\164164+ CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D << OBJECT_ID_SHIFT),165165+166166+167167+CONNECTOR_DUAL_LINK_DVI_D_ENUM_ID1 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\168168+ OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\169169+ CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D << OBJECT_ID_SHIFT),170170+171171+CONNECTOR_DUAL_LINK_DVI_D_ENUM_ID2 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\172172+ OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\173173+ CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D << OBJECT_ID_SHIFT),174174+175175+CONNECTOR_HDMI_TYPE_A_ENUM_ID1 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\176176+ OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\177177+ CONNECTOR_OBJECT_ID_HDMI_TYPE_A << OBJECT_ID_SHIFT),178178+179179+CONNECTOR_HDMI_TYPE_A_ENUM_ID2 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\180180+ OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\181181+ CONNECTOR_OBJECT_ID_HDMI_TYPE_A << OBJECT_ID_SHIFT),182182+183183+CONNECTOR_DISPLAYPORT_ENUM_ID1 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\184184+ OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\185185+ CONNECTOR_OBJECT_ID_DISPLAYPORT << OBJECT_ID_SHIFT),186186+187187+CONNECTOR_DISPLAYPORT_ENUM_ID2 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\188188+ OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\189189+ CONNECTOR_OBJECT_ID_DISPLAYPORT << OBJECT_ID_SHIFT),190190+191191+CONNECTOR_DISPLAYPORT_ENUM_ID3 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\192192+ OBJECT_ENUM_ID3 << ENUM_ID_SHIFT |\193193+ CONNECTOR_OBJECT_ID_DISPLAYPORT << OBJECT_ID_SHIFT),194194+195195+CONNECTOR_DISPLAYPORT_ENUM_ID4 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\196196+ OBJECT_ENUM_ID4 << ENUM_ID_SHIFT |\197197+ CONNECTOR_OBJECT_ID_DISPLAYPORT << OBJECT_ID_SHIFT),198198+199199+CONNECTOR_OPM_ENUM_ID1 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\200200+ OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\201201+ CONNECTOR_OBJECT_ID_OPM << OBJECT_ID_SHIFT), //Mapping to MXM_DP_A202202+203203+CONNECTOR_OPM_ENUM_ID2 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\204204+ OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\205205+ CONNECTOR_OBJECT_ID_OPM << OBJECT_ID_SHIFT), //Mapping to MXM_DP_B206206+207207+CONNECTOR_OPM_ENUM_ID3 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\208208+ OBJECT_ENUM_ID3 << ENUM_ID_SHIFT |\209209+ CONNECTOR_OBJECT_ID_OPM << OBJECT_ID_SHIFT), //Mapping to MXM_DP_C210210+211211+CONNECTOR_OPM_ENUM_ID4 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\212212+ OBJECT_ENUM_ID4 << ENUM_ID_SHIFT |\213213+ CONNECTOR_OBJECT_ID_OPM << OBJECT_ID_SHIFT), //Mapping to MXM_DP_D214214+215215+CONNECTOR_OPM_ENUM_ID5 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\216216+ OBJECT_ENUM_ID5 << ENUM_ID_SHIFT |\217217+ CONNECTOR_OBJECT_ID_OPM << OBJECT_ID_SHIFT), //Mapping to MXM_LVDS_TXxx218218+219219+220220+CONNECTOR_OPM_ENUM_ID6 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\221221+ OBJECT_ENUM_ID6 << ENUM_ID_SHIFT |\222222+ CONNECTOR_OBJECT_ID_OPM << OBJECT_ID_SHIFT) //Mapping to MXM_LVDS_TXxx223223+};224224+225225+/****************************************************226226+* Router Object ID definition - Shared with BIOS227227+*****************************************************/228228+//No Need, in future we ever need, we can define a record in atomfirwareSoC15.h associated with an object that has this router229229+230230+231231+/****************************************************232232+* PROTECTION Object ID definition - Shared with BIOS233233+*****************************************************/234234+//No need,in future we ever need, all display path are capable of protection now.235235+236236+/****************************************************237237+* Generic Object ID definition - Shared with BIOS238238+*****************************************************/239239+//No need, in future we ever need like GLsync, we can define a record in atomfirwareSoC15.h associated with an object.240240+241241+242242+#if defined(_X86_)243243+#pragma pack()244244+#endif245245+246246+#endif247247+248248+249249+