1*4882a593Smuzhiyun /****************************************************************************\ 2*4882a593Smuzhiyun * 3*4882a593Smuzhiyun * File Name atomfirmware.h 4*4882a593Smuzhiyun * Project This is an interface header file between atombios and OS GPU drivers for SoC15 products 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * Description header file of general definitions for OS nd pre-OS video drivers 7*4882a593Smuzhiyun * 8*4882a593Smuzhiyun * Copyright 2014 Advanced Micro Devices, Inc. 9*4882a593Smuzhiyun * 10*4882a593Smuzhiyun * Permission is hereby granted, free of charge, to any person obtaining a copy of this software 11*4882a593Smuzhiyun * and associated documentation files (the "Software"), to deal in the Software without restriction, 12*4882a593Smuzhiyun * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, 13*4882a593Smuzhiyun * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, 14*4882a593Smuzhiyun * subject to the following conditions: 15*4882a593Smuzhiyun * 16*4882a593Smuzhiyun * The above copyright notice and this permission notice shall be included in all copies or substantial 17*4882a593Smuzhiyun * portions of the Software. 18*4882a593Smuzhiyun * 19*4882a593Smuzhiyun * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20*4882a593Smuzhiyun * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21*4882a593Smuzhiyun * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 22*4882a593Smuzhiyun * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 23*4882a593Smuzhiyun * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 24*4882a593Smuzhiyun * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 25*4882a593Smuzhiyun * OTHER DEALINGS IN THE SOFTWARE. 26*4882a593Smuzhiyun * 27*4882a593Smuzhiyun \****************************************************************************/ 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun /*IMPORTANT NOTES 30*4882a593Smuzhiyun * 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. 31*4882a593Smuzhiyun * 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. 32*4882a593Smuzhiyun * 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. 33*4882a593Smuzhiyun */ 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun #ifndef _ATOMFIRMWARE_H_ 36*4882a593Smuzhiyun #define _ATOMFIRMWARE_H_ 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun enum atom_bios_header_version_def{ 39*4882a593Smuzhiyun ATOM_MAJOR_VERSION =0x0003, 40*4882a593Smuzhiyun ATOM_MINOR_VERSION =0x0003, 41*4882a593Smuzhiyun }; 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun #ifdef _H2INC 44*4882a593Smuzhiyun #ifndef uint32_t 45*4882a593Smuzhiyun typedef unsigned long uint32_t; 46*4882a593Smuzhiyun #endif 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun #ifndef uint16_t 49*4882a593Smuzhiyun typedef unsigned short uint16_t; 50*4882a593Smuzhiyun #endif 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun #ifndef uint8_t 53*4882a593Smuzhiyun typedef unsigned char uint8_t; 54*4882a593Smuzhiyun #endif 55*4882a593Smuzhiyun #endif 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun enum atom_crtc_def{ 58*4882a593Smuzhiyun ATOM_CRTC1 =0, 59*4882a593Smuzhiyun ATOM_CRTC2 =1, 60*4882a593Smuzhiyun ATOM_CRTC3 =2, 61*4882a593Smuzhiyun ATOM_CRTC4 =3, 62*4882a593Smuzhiyun ATOM_CRTC5 =4, 63*4882a593Smuzhiyun ATOM_CRTC6 =5, 64*4882a593Smuzhiyun ATOM_CRTC_INVALID =0xff, 65*4882a593Smuzhiyun }; 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun enum atom_ppll_def{ 68*4882a593Smuzhiyun ATOM_PPLL0 =2, 69*4882a593Smuzhiyun ATOM_GCK_DFS =8, 70*4882a593Smuzhiyun ATOM_FCH_CLK =9, 71*4882a593Smuzhiyun ATOM_DP_DTO =11, 72*4882a593Smuzhiyun ATOM_COMBOPHY_PLL0 =20, 73*4882a593Smuzhiyun ATOM_COMBOPHY_PLL1 =21, 74*4882a593Smuzhiyun ATOM_COMBOPHY_PLL2 =22, 75*4882a593Smuzhiyun ATOM_COMBOPHY_PLL3 =23, 76*4882a593Smuzhiyun ATOM_COMBOPHY_PLL4 =24, 77*4882a593Smuzhiyun ATOM_COMBOPHY_PLL5 =25, 78*4882a593Smuzhiyun ATOM_PPLL_INVALID =0xff, 79*4882a593Smuzhiyun }; 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun // define ASIC internal encoder id ( bit vector ), used for CRTC_SourceSel 82*4882a593Smuzhiyun enum atom_dig_def{ 83*4882a593Smuzhiyun ASIC_INT_DIG1_ENCODER_ID =0x03, 84*4882a593Smuzhiyun ASIC_INT_DIG2_ENCODER_ID =0x09, 85*4882a593Smuzhiyun ASIC_INT_DIG3_ENCODER_ID =0x0a, 86*4882a593Smuzhiyun ASIC_INT_DIG4_ENCODER_ID =0x0b, 87*4882a593Smuzhiyun ASIC_INT_DIG5_ENCODER_ID =0x0c, 88*4882a593Smuzhiyun ASIC_INT_DIG6_ENCODER_ID =0x0d, 89*4882a593Smuzhiyun ASIC_INT_DIG7_ENCODER_ID =0x0e, 90*4882a593Smuzhiyun }; 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun //ucEncoderMode 93*4882a593Smuzhiyun enum atom_encode_mode_def 94*4882a593Smuzhiyun { 95*4882a593Smuzhiyun ATOM_ENCODER_MODE_DP =0, 96*4882a593Smuzhiyun ATOM_ENCODER_MODE_DP_SST =0, 97*4882a593Smuzhiyun ATOM_ENCODER_MODE_LVDS =1, 98*4882a593Smuzhiyun ATOM_ENCODER_MODE_DVI =2, 99*4882a593Smuzhiyun ATOM_ENCODER_MODE_HDMI =3, 100*4882a593Smuzhiyun ATOM_ENCODER_MODE_DP_AUDIO =5, 101*4882a593Smuzhiyun ATOM_ENCODER_MODE_DP_MST =5, 102*4882a593Smuzhiyun ATOM_ENCODER_MODE_CRT =15, 103*4882a593Smuzhiyun ATOM_ENCODER_MODE_DVO =16, 104*4882a593Smuzhiyun }; 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun enum atom_encoder_refclk_src_def{ 107*4882a593Smuzhiyun ENCODER_REFCLK_SRC_P1PLL =0, 108*4882a593Smuzhiyun ENCODER_REFCLK_SRC_P2PLL =1, 109*4882a593Smuzhiyun ENCODER_REFCLK_SRC_P3PLL =2, 110*4882a593Smuzhiyun ENCODER_REFCLK_SRC_EXTCLK =3, 111*4882a593Smuzhiyun ENCODER_REFCLK_SRC_INVALID =0xff, 112*4882a593Smuzhiyun }; 113*4882a593Smuzhiyun 114*4882a593Smuzhiyun enum atom_scaler_def{ 115*4882a593Smuzhiyun ATOM_SCALER_DISABLE =0, /*scaler bypass mode, auto-center & no replication*/ 116*4882a593Smuzhiyun ATOM_SCALER_CENTER =1, //For Fudo, it's bypass and auto-center & auto replication 117*4882a593Smuzhiyun ATOM_SCALER_EXPANSION =2, /*scaler expansion by 2 tap alpha blending mode*/ 118*4882a593Smuzhiyun }; 119*4882a593Smuzhiyun 120*4882a593Smuzhiyun enum atom_operation_def{ 121*4882a593Smuzhiyun ATOM_DISABLE = 0, 122*4882a593Smuzhiyun ATOM_ENABLE = 1, 123*4882a593Smuzhiyun ATOM_INIT = 7, 124*4882a593Smuzhiyun ATOM_GET_STATUS = 8, 125*4882a593Smuzhiyun }; 126*4882a593Smuzhiyun 127*4882a593Smuzhiyun enum atom_embedded_display_op_def{ 128*4882a593Smuzhiyun ATOM_LCD_BL_OFF = 2, 129*4882a593Smuzhiyun ATOM_LCD_BL_OM = 3, 130*4882a593Smuzhiyun ATOM_LCD_BL_BRIGHTNESS_CONTROL = 4, 131*4882a593Smuzhiyun ATOM_LCD_SELFTEST_START = 5, 132*4882a593Smuzhiyun ATOM_LCD_SELFTEST_STOP = 6, 133*4882a593Smuzhiyun }; 134*4882a593Smuzhiyun 135*4882a593Smuzhiyun enum atom_spread_spectrum_mode{ 136*4882a593Smuzhiyun ATOM_SS_CENTER_OR_DOWN_MODE_MASK = 0x01, 137*4882a593Smuzhiyun ATOM_SS_DOWN_SPREAD_MODE = 0x00, 138*4882a593Smuzhiyun ATOM_SS_CENTRE_SPREAD_MODE = 0x01, 139*4882a593Smuzhiyun ATOM_INT_OR_EXT_SS_MASK = 0x02, 140*4882a593Smuzhiyun ATOM_INTERNAL_SS_MASK = 0x00, 141*4882a593Smuzhiyun ATOM_EXTERNAL_SS_MASK = 0x02, 142*4882a593Smuzhiyun }; 143*4882a593Smuzhiyun 144*4882a593Smuzhiyun /* define panel bit per color */ 145*4882a593Smuzhiyun enum atom_panel_bit_per_color{ 146*4882a593Smuzhiyun PANEL_BPC_UNDEFINE =0x00, 147*4882a593Smuzhiyun PANEL_6BIT_PER_COLOR =0x01, 148*4882a593Smuzhiyun PANEL_8BIT_PER_COLOR =0x02, 149*4882a593Smuzhiyun PANEL_10BIT_PER_COLOR =0x03, 150*4882a593Smuzhiyun PANEL_12BIT_PER_COLOR =0x04, 151*4882a593Smuzhiyun PANEL_16BIT_PER_COLOR =0x05, 152*4882a593Smuzhiyun }; 153*4882a593Smuzhiyun 154*4882a593Smuzhiyun //ucVoltageType 155*4882a593Smuzhiyun enum atom_voltage_type 156*4882a593Smuzhiyun { 157*4882a593Smuzhiyun VOLTAGE_TYPE_VDDC = 1, 158*4882a593Smuzhiyun VOLTAGE_TYPE_MVDDC = 2, 159*4882a593Smuzhiyun VOLTAGE_TYPE_MVDDQ = 3, 160*4882a593Smuzhiyun VOLTAGE_TYPE_VDDCI = 4, 161*4882a593Smuzhiyun VOLTAGE_TYPE_VDDGFX = 5, 162*4882a593Smuzhiyun VOLTAGE_TYPE_PCC = 6, 163*4882a593Smuzhiyun VOLTAGE_TYPE_MVPP = 7, 164*4882a593Smuzhiyun VOLTAGE_TYPE_LEDDPM = 8, 165*4882a593Smuzhiyun VOLTAGE_TYPE_PCC_MVDD = 9, 166*4882a593Smuzhiyun VOLTAGE_TYPE_PCIE_VDDC = 10, 167*4882a593Smuzhiyun VOLTAGE_TYPE_PCIE_VDDR = 11, 168*4882a593Smuzhiyun VOLTAGE_TYPE_GENERIC_I2C_1 = 0x11, 169*4882a593Smuzhiyun VOLTAGE_TYPE_GENERIC_I2C_2 = 0x12, 170*4882a593Smuzhiyun VOLTAGE_TYPE_GENERIC_I2C_3 = 0x13, 171*4882a593Smuzhiyun VOLTAGE_TYPE_GENERIC_I2C_4 = 0x14, 172*4882a593Smuzhiyun VOLTAGE_TYPE_GENERIC_I2C_5 = 0x15, 173*4882a593Smuzhiyun VOLTAGE_TYPE_GENERIC_I2C_6 = 0x16, 174*4882a593Smuzhiyun VOLTAGE_TYPE_GENERIC_I2C_7 = 0x17, 175*4882a593Smuzhiyun VOLTAGE_TYPE_GENERIC_I2C_8 = 0x18, 176*4882a593Smuzhiyun VOLTAGE_TYPE_GENERIC_I2C_9 = 0x19, 177*4882a593Smuzhiyun VOLTAGE_TYPE_GENERIC_I2C_10 = 0x1A, 178*4882a593Smuzhiyun }; 179*4882a593Smuzhiyun 180*4882a593Smuzhiyun enum atom_dgpu_vram_type { 181*4882a593Smuzhiyun ATOM_DGPU_VRAM_TYPE_GDDR5 = 0x50, 182*4882a593Smuzhiyun ATOM_DGPU_VRAM_TYPE_HBM2 = 0x60, 183*4882a593Smuzhiyun ATOM_DGPU_VRAM_TYPE_GDDR6 = 0x70, 184*4882a593Smuzhiyun }; 185*4882a593Smuzhiyun 186*4882a593Smuzhiyun enum atom_dp_vs_preemph_def{ 187*4882a593Smuzhiyun DP_VS_LEVEL0_PREEMPH_LEVEL0 = 0x00, 188*4882a593Smuzhiyun DP_VS_LEVEL1_PREEMPH_LEVEL0 = 0x01, 189*4882a593Smuzhiyun DP_VS_LEVEL2_PREEMPH_LEVEL0 = 0x02, 190*4882a593Smuzhiyun DP_VS_LEVEL3_PREEMPH_LEVEL0 = 0x03, 191*4882a593Smuzhiyun DP_VS_LEVEL0_PREEMPH_LEVEL1 = 0x08, 192*4882a593Smuzhiyun DP_VS_LEVEL1_PREEMPH_LEVEL1 = 0x09, 193*4882a593Smuzhiyun DP_VS_LEVEL2_PREEMPH_LEVEL1 = 0x0a, 194*4882a593Smuzhiyun DP_VS_LEVEL0_PREEMPH_LEVEL2 = 0x10, 195*4882a593Smuzhiyun DP_VS_LEVEL1_PREEMPH_LEVEL2 = 0x11, 196*4882a593Smuzhiyun DP_VS_LEVEL0_PREEMPH_LEVEL3 = 0x18, 197*4882a593Smuzhiyun }; 198*4882a593Smuzhiyun 199*4882a593Smuzhiyun 200*4882a593Smuzhiyun /* 201*4882a593Smuzhiyun enum atom_string_def{ 202*4882a593Smuzhiyun asic_bus_type_pcie_string = "PCI_EXPRESS", 203*4882a593Smuzhiyun atom_fire_gl_string = "FGL", 204*4882a593Smuzhiyun atom_bios_string = "ATOM" 205*4882a593Smuzhiyun }; 206*4882a593Smuzhiyun */ 207*4882a593Smuzhiyun 208*4882a593Smuzhiyun #pragma pack(1) /* BIOS data must use byte aligment*/ 209*4882a593Smuzhiyun 210*4882a593Smuzhiyun enum atombios_image_offset{ 211*4882a593Smuzhiyun OFFSET_TO_ATOM_ROM_HEADER_POINTER =0x00000048, 212*4882a593Smuzhiyun OFFSET_TO_ATOM_ROM_IMAGE_SIZE =0x00000002, 213*4882a593Smuzhiyun OFFSET_TO_ATOMBIOS_ASIC_BUS_MEM_TYPE =0x94, 214*4882a593Smuzhiyun MAXSIZE_OF_ATOMBIOS_ASIC_BUS_MEM_TYPE =20, /*including the terminator 0x0!*/ 215*4882a593Smuzhiyun OFFSET_TO_GET_ATOMBIOS_NUMBER_OF_STRINGS =0x2f, 216*4882a593Smuzhiyun OFFSET_TO_GET_ATOMBIOS_STRING_START =0x6e, 217*4882a593Smuzhiyun }; 218*4882a593Smuzhiyun 219*4882a593Smuzhiyun /**************************************************************************** 220*4882a593Smuzhiyun * Common header for all tables (Data table, Command function). 221*4882a593Smuzhiyun * Every table pointed in _ATOM_MASTER_DATA_TABLE has this common header. 222*4882a593Smuzhiyun * And the pointer actually points to this header. 223*4882a593Smuzhiyun ****************************************************************************/ 224*4882a593Smuzhiyun 225*4882a593Smuzhiyun struct atom_common_table_header 226*4882a593Smuzhiyun { 227*4882a593Smuzhiyun uint16_t structuresize; 228*4882a593Smuzhiyun uint8_t format_revision; //mainly used for a hw function, when the parser is not backward compatible 229*4882a593Smuzhiyun uint8_t content_revision; //change it when a data table has a structure change, or a hw function has a input/output parameter change 230*4882a593Smuzhiyun }; 231*4882a593Smuzhiyun 232*4882a593Smuzhiyun /**************************************************************************** 233*4882a593Smuzhiyun * Structure stores the ROM header. 234*4882a593Smuzhiyun ****************************************************************************/ 235*4882a593Smuzhiyun struct atom_rom_header_v2_2 236*4882a593Smuzhiyun { 237*4882a593Smuzhiyun struct atom_common_table_header table_header; 238*4882a593Smuzhiyun uint8_t atom_bios_string[4]; //enum atom_string_def atom_bios_string; //Signature to distinguish between Atombios and non-atombios, 239*4882a593Smuzhiyun uint16_t bios_segment_address; 240*4882a593Smuzhiyun uint16_t protectedmodeoffset; 241*4882a593Smuzhiyun uint16_t configfilenameoffset; 242*4882a593Smuzhiyun uint16_t crc_block_offset; 243*4882a593Smuzhiyun uint16_t vbios_bootupmessageoffset; 244*4882a593Smuzhiyun uint16_t int10_offset; 245*4882a593Smuzhiyun uint16_t pcibusdevinitcode; 246*4882a593Smuzhiyun uint16_t iobaseaddress; 247*4882a593Smuzhiyun uint16_t subsystem_vendor_id; 248*4882a593Smuzhiyun uint16_t subsystem_id; 249*4882a593Smuzhiyun uint16_t pci_info_offset; 250*4882a593Smuzhiyun uint16_t masterhwfunction_offset; //Offest for SW to get all command function offsets, Don't change the position 251*4882a593Smuzhiyun uint16_t masterdatatable_offset; //Offest for SW to get all data table offsets, Don't change the position 252*4882a593Smuzhiyun uint16_t reserved; 253*4882a593Smuzhiyun uint32_t pspdirtableoffset; 254*4882a593Smuzhiyun }; 255*4882a593Smuzhiyun 256*4882a593Smuzhiyun /*==============================hw function portion======================================================================*/ 257*4882a593Smuzhiyun 258*4882a593Smuzhiyun 259*4882a593Smuzhiyun /**************************************************************************** 260*4882a593Smuzhiyun * Structures used in Command.mtb, each function name is not given here since those function could change from time to time 261*4882a593Smuzhiyun * The real functionality of each function is associated with the parameter structure version when defined 262*4882a593Smuzhiyun * For all internal cmd function definitions, please reference to atomstruct.h 263*4882a593Smuzhiyun ****************************************************************************/ 264*4882a593Smuzhiyun struct atom_master_list_of_command_functions_v2_1{ 265*4882a593Smuzhiyun uint16_t asic_init; //Function 266*4882a593Smuzhiyun uint16_t cmd_function1; //used as an internal one 267*4882a593Smuzhiyun uint16_t cmd_function2; //used as an internal one 268*4882a593Smuzhiyun uint16_t cmd_function3; //used as an internal one 269*4882a593Smuzhiyun uint16_t digxencodercontrol; //Function 270*4882a593Smuzhiyun uint16_t cmd_function5; //used as an internal one 271*4882a593Smuzhiyun uint16_t cmd_function6; //used as an internal one 272*4882a593Smuzhiyun uint16_t cmd_function7; //used as an internal one 273*4882a593Smuzhiyun uint16_t cmd_function8; //used as an internal one 274*4882a593Smuzhiyun uint16_t cmd_function9; //used as an internal one 275*4882a593Smuzhiyun uint16_t setengineclock; //Function 276*4882a593Smuzhiyun uint16_t setmemoryclock; //Function 277*4882a593Smuzhiyun uint16_t setpixelclock; //Function 278*4882a593Smuzhiyun uint16_t enabledisppowergating; //Function 279*4882a593Smuzhiyun uint16_t cmd_function14; //used as an internal one 280*4882a593Smuzhiyun uint16_t cmd_function15; //used as an internal one 281*4882a593Smuzhiyun uint16_t cmd_function16; //used as an internal one 282*4882a593Smuzhiyun uint16_t cmd_function17; //used as an internal one 283*4882a593Smuzhiyun uint16_t cmd_function18; //used as an internal one 284*4882a593Smuzhiyun uint16_t cmd_function19; //used as an internal one 285*4882a593Smuzhiyun uint16_t cmd_function20; //used as an internal one 286*4882a593Smuzhiyun uint16_t cmd_function21; //used as an internal one 287*4882a593Smuzhiyun uint16_t cmd_function22; //used as an internal one 288*4882a593Smuzhiyun uint16_t cmd_function23; //used as an internal one 289*4882a593Smuzhiyun uint16_t cmd_function24; //used as an internal one 290*4882a593Smuzhiyun uint16_t cmd_function25; //used as an internal one 291*4882a593Smuzhiyun uint16_t cmd_function26; //used as an internal one 292*4882a593Smuzhiyun uint16_t cmd_function27; //used as an internal one 293*4882a593Smuzhiyun uint16_t cmd_function28; //used as an internal one 294*4882a593Smuzhiyun uint16_t cmd_function29; //used as an internal one 295*4882a593Smuzhiyun uint16_t cmd_function30; //used as an internal one 296*4882a593Smuzhiyun uint16_t cmd_function31; //used as an internal one 297*4882a593Smuzhiyun uint16_t cmd_function32; //used as an internal one 298*4882a593Smuzhiyun uint16_t cmd_function33; //used as an internal one 299*4882a593Smuzhiyun uint16_t blankcrtc; //Function 300*4882a593Smuzhiyun uint16_t enablecrtc; //Function 301*4882a593Smuzhiyun uint16_t cmd_function36; //used as an internal one 302*4882a593Smuzhiyun uint16_t cmd_function37; //used as an internal one 303*4882a593Smuzhiyun uint16_t cmd_function38; //used as an internal one 304*4882a593Smuzhiyun uint16_t cmd_function39; //used as an internal one 305*4882a593Smuzhiyun uint16_t cmd_function40; //used as an internal one 306*4882a593Smuzhiyun uint16_t getsmuclockinfo; //Function 307*4882a593Smuzhiyun uint16_t selectcrtc_source; //Function 308*4882a593Smuzhiyun uint16_t cmd_function43; //used as an internal one 309*4882a593Smuzhiyun uint16_t cmd_function44; //used as an internal one 310*4882a593Smuzhiyun uint16_t cmd_function45; //used as an internal one 311*4882a593Smuzhiyun uint16_t setdceclock; //Function 312*4882a593Smuzhiyun uint16_t getmemoryclock; //Function 313*4882a593Smuzhiyun uint16_t getengineclock; //Function 314*4882a593Smuzhiyun uint16_t setcrtc_usingdtdtiming; //Function 315*4882a593Smuzhiyun uint16_t externalencodercontrol; //Function 316*4882a593Smuzhiyun uint16_t cmd_function51; //used as an internal one 317*4882a593Smuzhiyun uint16_t cmd_function52; //used as an internal one 318*4882a593Smuzhiyun uint16_t cmd_function53; //used as an internal one 319*4882a593Smuzhiyun uint16_t processi2cchanneltransaction;//Function 320*4882a593Smuzhiyun uint16_t cmd_function55; //used as an internal one 321*4882a593Smuzhiyun uint16_t cmd_function56; //used as an internal one 322*4882a593Smuzhiyun uint16_t cmd_function57; //used as an internal one 323*4882a593Smuzhiyun uint16_t cmd_function58; //used as an internal one 324*4882a593Smuzhiyun uint16_t cmd_function59; //used as an internal one 325*4882a593Smuzhiyun uint16_t computegpuclockparam; //Function 326*4882a593Smuzhiyun uint16_t cmd_function61; //used as an internal one 327*4882a593Smuzhiyun uint16_t cmd_function62; //used as an internal one 328*4882a593Smuzhiyun uint16_t dynamicmemorysettings; //Function function 329*4882a593Smuzhiyun uint16_t memorytraining; //Function function 330*4882a593Smuzhiyun uint16_t cmd_function65; //used as an internal one 331*4882a593Smuzhiyun uint16_t cmd_function66; //used as an internal one 332*4882a593Smuzhiyun uint16_t setvoltage; //Function 333*4882a593Smuzhiyun uint16_t cmd_function68; //used as an internal one 334*4882a593Smuzhiyun uint16_t readefusevalue; //Function 335*4882a593Smuzhiyun uint16_t cmd_function70; //used as an internal one 336*4882a593Smuzhiyun uint16_t cmd_function71; //used as an internal one 337*4882a593Smuzhiyun uint16_t cmd_function72; //used as an internal one 338*4882a593Smuzhiyun uint16_t cmd_function73; //used as an internal one 339*4882a593Smuzhiyun uint16_t cmd_function74; //used as an internal one 340*4882a593Smuzhiyun uint16_t cmd_function75; //used as an internal one 341*4882a593Smuzhiyun uint16_t dig1transmittercontrol; //Function 342*4882a593Smuzhiyun uint16_t cmd_function77; //used as an internal one 343*4882a593Smuzhiyun uint16_t processauxchanneltransaction;//Function 344*4882a593Smuzhiyun uint16_t cmd_function79; //used as an internal one 345*4882a593Smuzhiyun uint16_t getvoltageinfo; //Function 346*4882a593Smuzhiyun }; 347*4882a593Smuzhiyun 348*4882a593Smuzhiyun struct atom_master_command_function_v2_1 349*4882a593Smuzhiyun { 350*4882a593Smuzhiyun struct atom_common_table_header table_header; 351*4882a593Smuzhiyun struct atom_master_list_of_command_functions_v2_1 listofcmdfunctions; 352*4882a593Smuzhiyun }; 353*4882a593Smuzhiyun 354*4882a593Smuzhiyun /**************************************************************************** 355*4882a593Smuzhiyun * Structures used in every command function 356*4882a593Smuzhiyun ****************************************************************************/ 357*4882a593Smuzhiyun struct atom_function_attribute 358*4882a593Smuzhiyun { 359*4882a593Smuzhiyun uint16_t ws_in_bytes:8; //[7:0]=Size of workspace in Bytes (in multiple of a dword), 360*4882a593Smuzhiyun uint16_t ps_in_bytes:7; //[14:8]=Size of parameter space in Bytes (multiple of a dword), 361*4882a593Smuzhiyun uint16_t updated_by_util:1; //[15]=flag to indicate the function is updated by util 362*4882a593Smuzhiyun }; 363*4882a593Smuzhiyun 364*4882a593Smuzhiyun 365*4882a593Smuzhiyun /**************************************************************************** 366*4882a593Smuzhiyun * Common header for all hw functions. 367*4882a593Smuzhiyun * Every function pointed by _master_list_of_hw_function has this common header. 368*4882a593Smuzhiyun * And the pointer actually points to this header. 369*4882a593Smuzhiyun ****************************************************************************/ 370*4882a593Smuzhiyun struct atom_rom_hw_function_header 371*4882a593Smuzhiyun { 372*4882a593Smuzhiyun struct atom_common_table_header func_header; 373*4882a593Smuzhiyun struct atom_function_attribute func_attrib; 374*4882a593Smuzhiyun }; 375*4882a593Smuzhiyun 376*4882a593Smuzhiyun 377*4882a593Smuzhiyun /*==============================sw data table portion======================================================================*/ 378*4882a593Smuzhiyun /**************************************************************************** 379*4882a593Smuzhiyun * Structures used in data.mtb, each data table name is not given here since those data table could change from time to time 380*4882a593Smuzhiyun * The real name of each table is given when its data structure version is defined 381*4882a593Smuzhiyun ****************************************************************************/ 382*4882a593Smuzhiyun struct atom_master_list_of_data_tables_v2_1{ 383*4882a593Smuzhiyun uint16_t utilitypipeline; /* Offest for the utility to get parser info,Don't change this position!*/ 384*4882a593Smuzhiyun uint16_t multimedia_info; 385*4882a593Smuzhiyun uint16_t smc_dpm_info; 386*4882a593Smuzhiyun uint16_t sw_datatable3; 387*4882a593Smuzhiyun uint16_t firmwareinfo; /* Shared by various SW components */ 388*4882a593Smuzhiyun uint16_t sw_datatable5; 389*4882a593Smuzhiyun uint16_t lcd_info; /* Shared by various SW components */ 390*4882a593Smuzhiyun uint16_t sw_datatable7; 391*4882a593Smuzhiyun uint16_t smu_info; 392*4882a593Smuzhiyun uint16_t sw_datatable9; 393*4882a593Smuzhiyun uint16_t sw_datatable10; 394*4882a593Smuzhiyun uint16_t vram_usagebyfirmware; /* Shared by various SW components */ 395*4882a593Smuzhiyun uint16_t gpio_pin_lut; /* Shared by various SW components */ 396*4882a593Smuzhiyun uint16_t sw_datatable13; 397*4882a593Smuzhiyun uint16_t gfx_info; 398*4882a593Smuzhiyun uint16_t powerplayinfo; /* Shared by various SW components */ 399*4882a593Smuzhiyun uint16_t sw_datatable16; 400*4882a593Smuzhiyun uint16_t sw_datatable17; 401*4882a593Smuzhiyun uint16_t sw_datatable18; 402*4882a593Smuzhiyun uint16_t sw_datatable19; 403*4882a593Smuzhiyun uint16_t sw_datatable20; 404*4882a593Smuzhiyun uint16_t sw_datatable21; 405*4882a593Smuzhiyun uint16_t displayobjectinfo; /* Shared by various SW components */ 406*4882a593Smuzhiyun uint16_t indirectioaccess; /* used as an internal one */ 407*4882a593Smuzhiyun uint16_t umc_info; /* Shared by various SW components */ 408*4882a593Smuzhiyun uint16_t sw_datatable25; 409*4882a593Smuzhiyun uint16_t sw_datatable26; 410*4882a593Smuzhiyun uint16_t dce_info; /* Shared by various SW components */ 411*4882a593Smuzhiyun uint16_t vram_info; /* Shared by various SW components */ 412*4882a593Smuzhiyun uint16_t sw_datatable29; 413*4882a593Smuzhiyun uint16_t integratedsysteminfo; /* Shared by various SW components */ 414*4882a593Smuzhiyun uint16_t asic_profiling_info; /* Shared by various SW components */ 415*4882a593Smuzhiyun uint16_t voltageobject_info; /* shared by various SW components */ 416*4882a593Smuzhiyun uint16_t sw_datatable33; 417*4882a593Smuzhiyun uint16_t sw_datatable34; 418*4882a593Smuzhiyun }; 419*4882a593Smuzhiyun 420*4882a593Smuzhiyun 421*4882a593Smuzhiyun struct atom_master_data_table_v2_1 422*4882a593Smuzhiyun { 423*4882a593Smuzhiyun struct atom_common_table_header table_header; 424*4882a593Smuzhiyun struct atom_master_list_of_data_tables_v2_1 listOfdatatables; 425*4882a593Smuzhiyun }; 426*4882a593Smuzhiyun 427*4882a593Smuzhiyun 428*4882a593Smuzhiyun struct atom_dtd_format 429*4882a593Smuzhiyun { 430*4882a593Smuzhiyun uint16_t pixclk; 431*4882a593Smuzhiyun uint16_t h_active; 432*4882a593Smuzhiyun uint16_t h_blanking_time; 433*4882a593Smuzhiyun uint16_t v_active; 434*4882a593Smuzhiyun uint16_t v_blanking_time; 435*4882a593Smuzhiyun uint16_t h_sync_offset; 436*4882a593Smuzhiyun uint16_t h_sync_width; 437*4882a593Smuzhiyun uint16_t v_sync_offset; 438*4882a593Smuzhiyun uint16_t v_syncwidth; 439*4882a593Smuzhiyun uint16_t reserved; 440*4882a593Smuzhiyun uint16_t reserved0; 441*4882a593Smuzhiyun uint8_t h_border; 442*4882a593Smuzhiyun uint8_t v_border; 443*4882a593Smuzhiyun uint16_t miscinfo; 444*4882a593Smuzhiyun uint8_t atom_mode_id; 445*4882a593Smuzhiyun uint8_t refreshrate; 446*4882a593Smuzhiyun }; 447*4882a593Smuzhiyun 448*4882a593Smuzhiyun /* atom_dtd_format.modemiscinfo defintion */ 449*4882a593Smuzhiyun enum atom_dtd_format_modemiscinfo{ 450*4882a593Smuzhiyun ATOM_HSYNC_POLARITY = 0x0002, 451*4882a593Smuzhiyun ATOM_VSYNC_POLARITY = 0x0004, 452*4882a593Smuzhiyun ATOM_H_REPLICATIONBY2 = 0x0010, 453*4882a593Smuzhiyun ATOM_V_REPLICATIONBY2 = 0x0020, 454*4882a593Smuzhiyun ATOM_INTERLACE = 0x0080, 455*4882a593Smuzhiyun ATOM_COMPOSITESYNC = 0x0040, 456*4882a593Smuzhiyun }; 457*4882a593Smuzhiyun 458*4882a593Smuzhiyun 459*4882a593Smuzhiyun /* utilitypipeline 460*4882a593Smuzhiyun * 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. 461*4882a593Smuzhiyun * the location of it can't change 462*4882a593Smuzhiyun */ 463*4882a593Smuzhiyun 464*4882a593Smuzhiyun 465*4882a593Smuzhiyun /* 466*4882a593Smuzhiyun *************************************************************************** 467*4882a593Smuzhiyun Data Table firmwareinfo structure 468*4882a593Smuzhiyun *************************************************************************** 469*4882a593Smuzhiyun */ 470*4882a593Smuzhiyun 471*4882a593Smuzhiyun struct atom_firmware_info_v3_1 472*4882a593Smuzhiyun { 473*4882a593Smuzhiyun struct atom_common_table_header table_header; 474*4882a593Smuzhiyun uint32_t firmware_revision; 475*4882a593Smuzhiyun uint32_t bootup_sclk_in10khz; 476*4882a593Smuzhiyun uint32_t bootup_mclk_in10khz; 477*4882a593Smuzhiyun uint32_t firmware_capability; // enum atombios_firmware_capability 478*4882a593Smuzhiyun uint32_t main_call_parser_entry; /* direct address of main parser call in VBIOS binary. */ 479*4882a593Smuzhiyun uint32_t bios_scratch_reg_startaddr; // 1st bios scratch register dword address 480*4882a593Smuzhiyun uint16_t bootup_vddc_mv; 481*4882a593Smuzhiyun uint16_t bootup_vddci_mv; 482*4882a593Smuzhiyun uint16_t bootup_mvddc_mv; 483*4882a593Smuzhiyun uint16_t bootup_vddgfx_mv; 484*4882a593Smuzhiyun uint8_t mem_module_id; 485*4882a593Smuzhiyun uint8_t coolingsolution_id; /*0: Air cooling; 1: Liquid cooling ... */ 486*4882a593Smuzhiyun uint8_t reserved1[2]; 487*4882a593Smuzhiyun uint32_t mc_baseaddr_high; 488*4882a593Smuzhiyun uint32_t mc_baseaddr_low; 489*4882a593Smuzhiyun uint32_t reserved2[6]; 490*4882a593Smuzhiyun }; 491*4882a593Smuzhiyun 492*4882a593Smuzhiyun /* Total 32bit cap indication */ 493*4882a593Smuzhiyun enum atombios_firmware_capability 494*4882a593Smuzhiyun { 495*4882a593Smuzhiyun ATOM_FIRMWARE_CAP_FIRMWARE_POSTED = 0x00000001, 496*4882a593Smuzhiyun ATOM_FIRMWARE_CAP_GPU_VIRTUALIZATION = 0x00000002, 497*4882a593Smuzhiyun ATOM_FIRMWARE_CAP_WMI_SUPPORT = 0x00000040, 498*4882a593Smuzhiyun ATOM_FIRMWARE_CAP_HWEMU_ENABLE = 0x00000080, 499*4882a593Smuzhiyun ATOM_FIRMWARE_CAP_HWEMU_UMC_CFG = 0x00000100, 500*4882a593Smuzhiyun ATOM_FIRMWARE_CAP_SRAM_ECC = 0x00000200, 501*4882a593Smuzhiyun ATOM_FIRMWARE_CAP_ENABLE_2STAGE_BIST_TRAINING = 0x00000400, 502*4882a593Smuzhiyun }; 503*4882a593Smuzhiyun 504*4882a593Smuzhiyun enum atom_cooling_solution_id{ 505*4882a593Smuzhiyun AIR_COOLING = 0x00, 506*4882a593Smuzhiyun LIQUID_COOLING = 0x01 507*4882a593Smuzhiyun }; 508*4882a593Smuzhiyun 509*4882a593Smuzhiyun struct atom_firmware_info_v3_2 { 510*4882a593Smuzhiyun struct atom_common_table_header table_header; 511*4882a593Smuzhiyun uint32_t firmware_revision; 512*4882a593Smuzhiyun uint32_t bootup_sclk_in10khz; 513*4882a593Smuzhiyun uint32_t bootup_mclk_in10khz; 514*4882a593Smuzhiyun uint32_t firmware_capability; // enum atombios_firmware_capability 515*4882a593Smuzhiyun uint32_t main_call_parser_entry; /* direct address of main parser call in VBIOS binary. */ 516*4882a593Smuzhiyun uint32_t bios_scratch_reg_startaddr; // 1st bios scratch register dword address 517*4882a593Smuzhiyun uint16_t bootup_vddc_mv; 518*4882a593Smuzhiyun uint16_t bootup_vddci_mv; 519*4882a593Smuzhiyun uint16_t bootup_mvddc_mv; 520*4882a593Smuzhiyun uint16_t bootup_vddgfx_mv; 521*4882a593Smuzhiyun uint8_t mem_module_id; 522*4882a593Smuzhiyun uint8_t coolingsolution_id; /*0: Air cooling; 1: Liquid cooling ... */ 523*4882a593Smuzhiyun uint8_t reserved1[2]; 524*4882a593Smuzhiyun uint32_t mc_baseaddr_high; 525*4882a593Smuzhiyun uint32_t mc_baseaddr_low; 526*4882a593Smuzhiyun uint8_t board_i2c_feature_id; // enum of atom_board_i2c_feature_id_def 527*4882a593Smuzhiyun uint8_t board_i2c_feature_gpio_id; // i2c id find in gpio_lut data table gpio_id 528*4882a593Smuzhiyun uint8_t board_i2c_feature_slave_addr; 529*4882a593Smuzhiyun uint8_t reserved3; 530*4882a593Smuzhiyun uint16_t bootup_mvddq_mv; 531*4882a593Smuzhiyun uint16_t bootup_mvpp_mv; 532*4882a593Smuzhiyun uint32_t zfbstartaddrin16mb; 533*4882a593Smuzhiyun uint32_t reserved2[3]; 534*4882a593Smuzhiyun }; 535*4882a593Smuzhiyun 536*4882a593Smuzhiyun struct atom_firmware_info_v3_3 537*4882a593Smuzhiyun { 538*4882a593Smuzhiyun struct atom_common_table_header table_header; 539*4882a593Smuzhiyun uint32_t firmware_revision; 540*4882a593Smuzhiyun uint32_t bootup_sclk_in10khz; 541*4882a593Smuzhiyun uint32_t bootup_mclk_in10khz; 542*4882a593Smuzhiyun uint32_t firmware_capability; // enum atombios_firmware_capability 543*4882a593Smuzhiyun uint32_t main_call_parser_entry; /* direct address of main parser call in VBIOS binary. */ 544*4882a593Smuzhiyun uint32_t bios_scratch_reg_startaddr; // 1st bios scratch register dword address 545*4882a593Smuzhiyun uint16_t bootup_vddc_mv; 546*4882a593Smuzhiyun uint16_t bootup_vddci_mv; 547*4882a593Smuzhiyun uint16_t bootup_mvddc_mv; 548*4882a593Smuzhiyun uint16_t bootup_vddgfx_mv; 549*4882a593Smuzhiyun uint8_t mem_module_id; 550*4882a593Smuzhiyun uint8_t coolingsolution_id; /*0: Air cooling; 1: Liquid cooling ... */ 551*4882a593Smuzhiyun uint8_t reserved1[2]; 552*4882a593Smuzhiyun uint32_t mc_baseaddr_high; 553*4882a593Smuzhiyun uint32_t mc_baseaddr_low; 554*4882a593Smuzhiyun uint8_t board_i2c_feature_id; // enum of atom_board_i2c_feature_id_def 555*4882a593Smuzhiyun uint8_t board_i2c_feature_gpio_id; // i2c id find in gpio_lut data table gpio_id 556*4882a593Smuzhiyun uint8_t board_i2c_feature_slave_addr; 557*4882a593Smuzhiyun uint8_t reserved3; 558*4882a593Smuzhiyun uint16_t bootup_mvddq_mv; 559*4882a593Smuzhiyun uint16_t bootup_mvpp_mv; 560*4882a593Smuzhiyun uint32_t zfbstartaddrin16mb; 561*4882a593Smuzhiyun uint32_t pplib_pptable_id; // if pplib_pptable_id!=0, pplib get powerplay table inside driver instead of from VBIOS 562*4882a593Smuzhiyun uint32_t reserved2[2]; 563*4882a593Smuzhiyun }; 564*4882a593Smuzhiyun 565*4882a593Smuzhiyun struct atom_firmware_info_v3_4 { 566*4882a593Smuzhiyun struct atom_common_table_header table_header; 567*4882a593Smuzhiyun uint32_t firmware_revision; 568*4882a593Smuzhiyun uint32_t bootup_sclk_in10khz; 569*4882a593Smuzhiyun uint32_t bootup_mclk_in10khz; 570*4882a593Smuzhiyun uint32_t firmware_capability; // enum atombios_firmware_capability 571*4882a593Smuzhiyun uint32_t main_call_parser_entry; /* direct address of main parser call in VBIOS binary. */ 572*4882a593Smuzhiyun uint32_t bios_scratch_reg_startaddr; // 1st bios scratch register dword address 573*4882a593Smuzhiyun uint16_t bootup_vddc_mv; 574*4882a593Smuzhiyun uint16_t bootup_vddci_mv; 575*4882a593Smuzhiyun uint16_t bootup_mvddc_mv; 576*4882a593Smuzhiyun uint16_t bootup_vddgfx_mv; 577*4882a593Smuzhiyun uint8_t mem_module_id; 578*4882a593Smuzhiyun uint8_t coolingsolution_id; /*0: Air cooling; 1: Liquid cooling ... */ 579*4882a593Smuzhiyun uint8_t reserved1[2]; 580*4882a593Smuzhiyun uint32_t mc_baseaddr_high; 581*4882a593Smuzhiyun uint32_t mc_baseaddr_low; 582*4882a593Smuzhiyun uint8_t board_i2c_feature_id; // enum of atom_board_i2c_feature_id_def 583*4882a593Smuzhiyun uint8_t board_i2c_feature_gpio_id; // i2c id find in gpio_lut data table gpio_id 584*4882a593Smuzhiyun uint8_t board_i2c_feature_slave_addr; 585*4882a593Smuzhiyun uint8_t reserved3; 586*4882a593Smuzhiyun uint16_t bootup_mvddq_mv; 587*4882a593Smuzhiyun uint16_t bootup_mvpp_mv; 588*4882a593Smuzhiyun uint32_t zfbstartaddrin16mb; 589*4882a593Smuzhiyun uint32_t pplib_pptable_id; // if pplib_pptable_id!=0, pplib get powerplay table inside driver instead of from VBIOS 590*4882a593Smuzhiyun uint32_t mvdd_ratio; // mvdd_raio = (real mvdd in power rail)*1000/(mvdd_output_from_svi2) 591*4882a593Smuzhiyun uint16_t hw_bootup_vddgfx_mv; // hw default vddgfx voltage level decide by board strap 592*4882a593Smuzhiyun uint16_t hw_bootup_vddc_mv; // hw default vddc voltage level decide by board strap 593*4882a593Smuzhiyun uint16_t hw_bootup_mvddc_mv; // hw default mvddc voltage level decide by board strap 594*4882a593Smuzhiyun uint16_t hw_bootup_vddci_mv; // hw default vddci voltage level decide by board strap 595*4882a593Smuzhiyun uint32_t maco_pwrlimit_mw; // bomaco mode power limit in unit of m-watt 596*4882a593Smuzhiyun uint32_t usb_pwrlimit_mw; // power limit when USB is enable in unit of m-watt 597*4882a593Smuzhiyun uint32_t fw_reserved_size_in_kb; // VBIOS reserved extra fw size in unit of kb. 598*4882a593Smuzhiyun uint32_t reserved[5]; 599*4882a593Smuzhiyun }; 600*4882a593Smuzhiyun 601*4882a593Smuzhiyun /* 602*4882a593Smuzhiyun *************************************************************************** 603*4882a593Smuzhiyun Data Table lcd_info structure 604*4882a593Smuzhiyun *************************************************************************** 605*4882a593Smuzhiyun */ 606*4882a593Smuzhiyun 607*4882a593Smuzhiyun struct lcd_info_v2_1 608*4882a593Smuzhiyun { 609*4882a593Smuzhiyun struct atom_common_table_header table_header; 610*4882a593Smuzhiyun struct atom_dtd_format lcd_timing; 611*4882a593Smuzhiyun uint16_t backlight_pwm; 612*4882a593Smuzhiyun uint16_t special_handle_cap; 613*4882a593Smuzhiyun uint16_t panel_misc; 614*4882a593Smuzhiyun uint16_t lvds_max_slink_pclk; 615*4882a593Smuzhiyun uint16_t lvds_ss_percentage; 616*4882a593Smuzhiyun uint16_t lvds_ss_rate_10hz; 617*4882a593Smuzhiyun uint8_t pwr_on_digon_to_de; /*all pwr sequence numbers below are in uint of 4ms*/ 618*4882a593Smuzhiyun uint8_t pwr_on_de_to_vary_bl; 619*4882a593Smuzhiyun uint8_t pwr_down_vary_bloff_to_de; 620*4882a593Smuzhiyun uint8_t pwr_down_de_to_digoff; 621*4882a593Smuzhiyun uint8_t pwr_off_delay; 622*4882a593Smuzhiyun uint8_t pwr_on_vary_bl_to_blon; 623*4882a593Smuzhiyun uint8_t pwr_down_bloff_to_vary_bloff; 624*4882a593Smuzhiyun uint8_t panel_bpc; 625*4882a593Smuzhiyun uint8_t dpcd_edp_config_cap; 626*4882a593Smuzhiyun uint8_t dpcd_max_link_rate; 627*4882a593Smuzhiyun uint8_t dpcd_max_lane_count; 628*4882a593Smuzhiyun uint8_t dpcd_max_downspread; 629*4882a593Smuzhiyun uint8_t min_allowed_bl_level; 630*4882a593Smuzhiyun uint8_t max_allowed_bl_level; 631*4882a593Smuzhiyun uint8_t bootup_bl_level; 632*4882a593Smuzhiyun uint8_t dplvdsrxid; 633*4882a593Smuzhiyun uint32_t reserved1[8]; 634*4882a593Smuzhiyun }; 635*4882a593Smuzhiyun 636*4882a593Smuzhiyun /* lcd_info_v2_1.panel_misc defintion */ 637*4882a593Smuzhiyun enum atom_lcd_info_panel_misc{ 638*4882a593Smuzhiyun ATOM_PANEL_MISC_FPDI =0x0002, 639*4882a593Smuzhiyun }; 640*4882a593Smuzhiyun 641*4882a593Smuzhiyun //uceDPToLVDSRxId 642*4882a593Smuzhiyun enum atom_lcd_info_dptolvds_rx_id 643*4882a593Smuzhiyun { 644*4882a593Smuzhiyun eDP_TO_LVDS_RX_DISABLE = 0x00, // no eDP->LVDS translator chip 645*4882a593Smuzhiyun eDP_TO_LVDS_COMMON_ID = 0x01, // common eDP->LVDS translator chip without AMD SW init 646*4882a593Smuzhiyun eDP_TO_LVDS_REALTEK_ID = 0x02, // Realtek tansaltor which require AMD SW init 647*4882a593Smuzhiyun }; 648*4882a593Smuzhiyun 649*4882a593Smuzhiyun 650*4882a593Smuzhiyun /* 651*4882a593Smuzhiyun *************************************************************************** 652*4882a593Smuzhiyun Data Table gpio_pin_lut structure 653*4882a593Smuzhiyun *************************************************************************** 654*4882a593Smuzhiyun */ 655*4882a593Smuzhiyun 656*4882a593Smuzhiyun struct atom_gpio_pin_assignment 657*4882a593Smuzhiyun { 658*4882a593Smuzhiyun uint32_t data_a_reg_index; 659*4882a593Smuzhiyun uint8_t gpio_bitshift; 660*4882a593Smuzhiyun uint8_t gpio_mask_bitshift; 661*4882a593Smuzhiyun uint8_t gpio_id; 662*4882a593Smuzhiyun uint8_t reserved; 663*4882a593Smuzhiyun }; 664*4882a593Smuzhiyun 665*4882a593Smuzhiyun /* atom_gpio_pin_assignment.gpio_id definition */ 666*4882a593Smuzhiyun enum atom_gpio_pin_assignment_gpio_id { 667*4882a593Smuzhiyun I2C_HW_LANE_MUX =0x0f, /* only valid when bit7=1 */ 668*4882a593Smuzhiyun I2C_HW_ENGINE_ID_MASK =0x70, /* only valid when bit7=1 */ 669*4882a593Smuzhiyun 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 */ 670*4882a593Smuzhiyun 671*4882a593Smuzhiyun /* gpio_id pre-define id for multiple usage */ 672*4882a593Smuzhiyun /* GPIO use to control PCIE_VDDC in certain SLT board */ 673*4882a593Smuzhiyun PCIE_VDDC_CONTROL_GPIO_PINID = 56, 674*4882a593Smuzhiyun /* if PP_AC_DC_SWITCH_GPIO_PINID in Gpio_Pin_LutTable, AC/DC swithing feature is enable */ 675*4882a593Smuzhiyun PP_AC_DC_SWITCH_GPIO_PINID = 60, 676*4882a593Smuzhiyun /* VDDC_REGULATOR_VRHOT_GPIO_PINID in Gpio_Pin_LutTable, VRHot feature is enable */ 677*4882a593Smuzhiyun VDDC_VRHOT_GPIO_PINID = 61, 678*4882a593Smuzhiyun /*if VDDC_PCC_GPIO_PINID in GPIO_LUTable, Peak Current Control feature is enabled */ 679*4882a593Smuzhiyun VDDC_PCC_GPIO_PINID = 62, 680*4882a593Smuzhiyun /* Only used on certain SLT/PA board to allow utility to cut Efuse. */ 681*4882a593Smuzhiyun EFUSE_CUT_ENABLE_GPIO_PINID = 63, 682*4882a593Smuzhiyun /* ucGPIO=DRAM_SELF_REFRESH_GPIO_PIND uses for memory self refresh (ucGPIO=0, DRAM self-refresh; ucGPIO= */ 683*4882a593Smuzhiyun DRAM_SELF_REFRESH_GPIO_PINID = 64, 684*4882a593Smuzhiyun /* Thermal interrupt output->system thermal chip GPIO pin */ 685*4882a593Smuzhiyun THERMAL_INT_OUTPUT_GPIO_PINID =65, 686*4882a593Smuzhiyun }; 687*4882a593Smuzhiyun 688*4882a593Smuzhiyun 689*4882a593Smuzhiyun struct atom_gpio_pin_lut_v2_1 690*4882a593Smuzhiyun { 691*4882a593Smuzhiyun struct atom_common_table_header table_header; 692*4882a593Smuzhiyun /*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 */ 693*4882a593Smuzhiyun struct atom_gpio_pin_assignment gpio_pin[8]; 694*4882a593Smuzhiyun }; 695*4882a593Smuzhiyun 696*4882a593Smuzhiyun 697*4882a593Smuzhiyun /* 698*4882a593Smuzhiyun *************************************************************************** 699*4882a593Smuzhiyun Data Table vram_usagebyfirmware structure 700*4882a593Smuzhiyun *************************************************************************** 701*4882a593Smuzhiyun */ 702*4882a593Smuzhiyun 703*4882a593Smuzhiyun struct vram_usagebyfirmware_v2_1 704*4882a593Smuzhiyun { 705*4882a593Smuzhiyun struct atom_common_table_header table_header; 706*4882a593Smuzhiyun uint32_t start_address_in_kb; 707*4882a593Smuzhiyun uint16_t used_by_firmware_in_kb; 708*4882a593Smuzhiyun uint16_t used_by_driver_in_kb; 709*4882a593Smuzhiyun }; 710*4882a593Smuzhiyun 711*4882a593Smuzhiyun 712*4882a593Smuzhiyun /* 713*4882a593Smuzhiyun *************************************************************************** 714*4882a593Smuzhiyun Data Table displayobjectinfo structure 715*4882a593Smuzhiyun *************************************************************************** 716*4882a593Smuzhiyun */ 717*4882a593Smuzhiyun 718*4882a593Smuzhiyun enum atom_object_record_type_id 719*4882a593Smuzhiyun { 720*4882a593Smuzhiyun ATOM_I2C_RECORD_TYPE =1, 721*4882a593Smuzhiyun ATOM_HPD_INT_RECORD_TYPE =2, 722*4882a593Smuzhiyun ATOM_OBJECT_GPIO_CNTL_RECORD_TYPE =9, 723*4882a593Smuzhiyun ATOM_CONNECTOR_HPDPIN_LUT_RECORD_TYPE =16, 724*4882a593Smuzhiyun ATOM_CONNECTOR_AUXDDC_LUT_RECORD_TYPE =17, 725*4882a593Smuzhiyun ATOM_ENCODER_CAP_RECORD_TYPE=20, 726*4882a593Smuzhiyun ATOM_BRACKET_LAYOUT_RECORD_TYPE=21, 727*4882a593Smuzhiyun ATOM_CONNECTOR_FORCED_TMDS_CAP_RECORD_TYPE=22, 728*4882a593Smuzhiyun ATOM_RECORD_END_TYPE =0xFF, 729*4882a593Smuzhiyun }; 730*4882a593Smuzhiyun 731*4882a593Smuzhiyun struct atom_common_record_header 732*4882a593Smuzhiyun { 733*4882a593Smuzhiyun uint8_t record_type; //An emun to indicate the record type 734*4882a593Smuzhiyun uint8_t record_size; //The size of the whole record in byte 735*4882a593Smuzhiyun }; 736*4882a593Smuzhiyun 737*4882a593Smuzhiyun struct atom_i2c_record 738*4882a593Smuzhiyun { 739*4882a593Smuzhiyun struct atom_common_record_header record_header; //record_type = ATOM_I2C_RECORD_TYPE 740*4882a593Smuzhiyun uint8_t i2c_id; 741*4882a593Smuzhiyun uint8_t i2c_slave_addr; //The slave address, it's 0 when the record is attached to connector for DDC 742*4882a593Smuzhiyun }; 743*4882a593Smuzhiyun 744*4882a593Smuzhiyun struct atom_hpd_int_record 745*4882a593Smuzhiyun { 746*4882a593Smuzhiyun struct atom_common_record_header record_header; //record_type = ATOM_HPD_INT_RECORD_TYPE 747*4882a593Smuzhiyun uint8_t pin_id; //Corresponding block in GPIO_PIN_INFO table gives the pin info 748*4882a593Smuzhiyun uint8_t plugin_pin_state; 749*4882a593Smuzhiyun }; 750*4882a593Smuzhiyun 751*4882a593Smuzhiyun // Bit maps for ATOM_ENCODER_CAP_RECORD.usEncoderCap 752*4882a593Smuzhiyun enum atom_encoder_caps_def 753*4882a593Smuzhiyun { 754*4882a593Smuzhiyun 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_EN 755*4882a593Smuzhiyun ATOM_ENCODER_CAP_RECORD_MST_EN =0x01, // from SI, this bit means DP MST is enable or not. 756*4882a593Smuzhiyun ATOM_ENCODER_CAP_RECORD_HBR2_EN =0x02, // DP1.2 HBR2 setting is qualified and HBR2 can be enabled 757*4882a593Smuzhiyun ATOM_ENCODER_CAP_RECORD_HDMI6Gbps_EN =0x04, // HDMI2.0 6Gbps enable or not. 758*4882a593Smuzhiyun ATOM_ENCODER_CAP_RECORD_HBR3_EN =0x08, // DP1.3 HBR3 is supported by board. 759*4882a593Smuzhiyun ATOM_ENCODER_CAP_RECORD_USB_C_TYPE =0x100, // the DP connector is a USB-C type. 760*4882a593Smuzhiyun }; 761*4882a593Smuzhiyun 762*4882a593Smuzhiyun struct atom_encoder_caps_record 763*4882a593Smuzhiyun { 764*4882a593Smuzhiyun struct atom_common_record_header record_header; //record_type = ATOM_ENCODER_CAP_RECORD_TYPE 765*4882a593Smuzhiyun uint32_t encodercaps; 766*4882a593Smuzhiyun }; 767*4882a593Smuzhiyun 768*4882a593Smuzhiyun enum atom_connector_caps_def 769*4882a593Smuzhiyun { 770*4882a593Smuzhiyun ATOM_CONNECTOR_CAP_INTERNAL_DISPLAY = 0x01, //a cap bit to indicate that this non-embedded display connector is an internal display 771*4882a593Smuzhiyun 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 772*4882a593Smuzhiyun }; 773*4882a593Smuzhiyun 774*4882a593Smuzhiyun struct atom_disp_connector_caps_record 775*4882a593Smuzhiyun { 776*4882a593Smuzhiyun struct atom_common_record_header record_header; 777*4882a593Smuzhiyun uint32_t connectcaps; 778*4882a593Smuzhiyun }; 779*4882a593Smuzhiyun 780*4882a593Smuzhiyun //The following generic object gpio pin control record type will replace JTAG_RECORD/FPGA_CONTROL_RECORD/DVI_EXT_INPUT_RECORD above gradually 781*4882a593Smuzhiyun struct atom_gpio_pin_control_pair 782*4882a593Smuzhiyun { 783*4882a593Smuzhiyun uint8_t gpio_id; // GPIO_ID, find the corresponding ID in GPIO_LUT table 784*4882a593Smuzhiyun uint8_t gpio_pinstate; // Pin state showing how to set-up the pin 785*4882a593Smuzhiyun }; 786*4882a593Smuzhiyun 787*4882a593Smuzhiyun struct atom_object_gpio_cntl_record 788*4882a593Smuzhiyun { 789*4882a593Smuzhiyun struct atom_common_record_header record_header; 790*4882a593Smuzhiyun uint8_t flag; // Future expnadibility 791*4882a593Smuzhiyun uint8_t number_of_pins; // Number of GPIO pins used to control the object 792*4882a593Smuzhiyun struct atom_gpio_pin_control_pair gpio[1]; // the real gpio pin pair determined by number of pins ucNumberOfPins 793*4882a593Smuzhiyun }; 794*4882a593Smuzhiyun 795*4882a593Smuzhiyun //Definitions for GPIO pin state 796*4882a593Smuzhiyun enum atom_gpio_pin_control_pinstate_def 797*4882a593Smuzhiyun { 798*4882a593Smuzhiyun GPIO_PIN_TYPE_INPUT = 0x00, 799*4882a593Smuzhiyun GPIO_PIN_TYPE_OUTPUT = 0x10, 800*4882a593Smuzhiyun GPIO_PIN_TYPE_HW_CONTROL = 0x20, 801*4882a593Smuzhiyun 802*4882a593Smuzhiyun //For GPIO_PIN_TYPE_OUTPUT the following is defined 803*4882a593Smuzhiyun GPIO_PIN_OUTPUT_STATE_MASK = 0x01, 804*4882a593Smuzhiyun GPIO_PIN_OUTPUT_STATE_SHIFT = 0, 805*4882a593Smuzhiyun GPIO_PIN_STATE_ACTIVE_LOW = 0x0, 806*4882a593Smuzhiyun GPIO_PIN_STATE_ACTIVE_HIGH = 0x1, 807*4882a593Smuzhiyun }; 808*4882a593Smuzhiyun 809*4882a593Smuzhiyun // Indexes to GPIO array in GLSync record 810*4882a593Smuzhiyun // GLSync record is for Frame Lock/Gen Lock feature. 811*4882a593Smuzhiyun enum atom_glsync_record_gpio_index_def 812*4882a593Smuzhiyun { 813*4882a593Smuzhiyun ATOM_GPIO_INDEX_GLSYNC_REFCLK = 0, 814*4882a593Smuzhiyun ATOM_GPIO_INDEX_GLSYNC_HSYNC = 1, 815*4882a593Smuzhiyun ATOM_GPIO_INDEX_GLSYNC_VSYNC = 2, 816*4882a593Smuzhiyun ATOM_GPIO_INDEX_GLSYNC_SWAP_REQ = 3, 817*4882a593Smuzhiyun ATOM_GPIO_INDEX_GLSYNC_SWAP_GNT = 4, 818*4882a593Smuzhiyun ATOM_GPIO_INDEX_GLSYNC_INTERRUPT = 5, 819*4882a593Smuzhiyun ATOM_GPIO_INDEX_GLSYNC_V_RESET = 6, 820*4882a593Smuzhiyun ATOM_GPIO_INDEX_GLSYNC_SWAP_CNTL = 7, 821*4882a593Smuzhiyun ATOM_GPIO_INDEX_GLSYNC_SWAP_SEL = 8, 822*4882a593Smuzhiyun ATOM_GPIO_INDEX_GLSYNC_MAX = 9, 823*4882a593Smuzhiyun }; 824*4882a593Smuzhiyun 825*4882a593Smuzhiyun 826*4882a593Smuzhiyun struct atom_connector_hpdpin_lut_record //record for ATOM_CONNECTOR_HPDPIN_LUT_RECORD_TYPE 827*4882a593Smuzhiyun { 828*4882a593Smuzhiyun struct atom_common_record_header record_header; 829*4882a593Smuzhiyun uint8_t hpd_pin_map[8]; 830*4882a593Smuzhiyun }; 831*4882a593Smuzhiyun 832*4882a593Smuzhiyun struct atom_connector_auxddc_lut_record //record for ATOM_CONNECTOR_AUXDDC_LUT_RECORD_TYPE 833*4882a593Smuzhiyun { 834*4882a593Smuzhiyun struct atom_common_record_header record_header; 835*4882a593Smuzhiyun uint8_t aux_ddc_map[8]; 836*4882a593Smuzhiyun }; 837*4882a593Smuzhiyun 838*4882a593Smuzhiyun struct atom_connector_forced_tmds_cap_record 839*4882a593Smuzhiyun { 840*4882a593Smuzhiyun struct atom_common_record_header record_header; 841*4882a593Smuzhiyun // override TMDS capability on this connector when it operate in TMDS mode. usMaxTmdsClkRate = max TMDS Clock in Mhz/2.5 842*4882a593Smuzhiyun uint8_t maxtmdsclkrate_in2_5mhz; 843*4882a593Smuzhiyun uint8_t reserved; 844*4882a593Smuzhiyun }; 845*4882a593Smuzhiyun 846*4882a593Smuzhiyun struct atom_connector_layout_info 847*4882a593Smuzhiyun { 848*4882a593Smuzhiyun uint16_t connectorobjid; 849*4882a593Smuzhiyun uint8_t connector_type; 850*4882a593Smuzhiyun uint8_t position; 851*4882a593Smuzhiyun }; 852*4882a593Smuzhiyun 853*4882a593Smuzhiyun // define ATOM_CONNECTOR_LAYOUT_INFO.ucConnectorType to describe the display connector size 854*4882a593Smuzhiyun enum atom_connector_layout_info_connector_type_def 855*4882a593Smuzhiyun { 856*4882a593Smuzhiyun CONNECTOR_TYPE_DVI_D = 1, 857*4882a593Smuzhiyun 858*4882a593Smuzhiyun CONNECTOR_TYPE_HDMI = 4, 859*4882a593Smuzhiyun CONNECTOR_TYPE_DISPLAY_PORT = 5, 860*4882a593Smuzhiyun CONNECTOR_TYPE_MINI_DISPLAY_PORT = 6, 861*4882a593Smuzhiyun }; 862*4882a593Smuzhiyun 863*4882a593Smuzhiyun struct atom_bracket_layout_record 864*4882a593Smuzhiyun { 865*4882a593Smuzhiyun struct atom_common_record_header record_header; 866*4882a593Smuzhiyun uint8_t bracketlen; 867*4882a593Smuzhiyun uint8_t bracketwidth; 868*4882a593Smuzhiyun uint8_t conn_num; 869*4882a593Smuzhiyun uint8_t reserved; 870*4882a593Smuzhiyun struct atom_connector_layout_info conn_info[1]; 871*4882a593Smuzhiyun }; 872*4882a593Smuzhiyun 873*4882a593Smuzhiyun enum atom_display_device_tag_def{ 874*4882a593Smuzhiyun ATOM_DISPLAY_LCD1_SUPPORT = 0x0002, //an embedded display is either an LVDS or eDP signal type of display 875*4882a593Smuzhiyun ATOM_DISPLAY_DFP1_SUPPORT = 0x0008, 876*4882a593Smuzhiyun ATOM_DISPLAY_DFP2_SUPPORT = 0x0080, 877*4882a593Smuzhiyun ATOM_DISPLAY_DFP3_SUPPORT = 0x0200, 878*4882a593Smuzhiyun ATOM_DISPLAY_DFP4_SUPPORT = 0x0400, 879*4882a593Smuzhiyun ATOM_DISPLAY_DFP5_SUPPORT = 0x0800, 880*4882a593Smuzhiyun ATOM_DISPLAY_DFP6_SUPPORT = 0x0040, 881*4882a593Smuzhiyun ATOM_DISPLAY_DFPx_SUPPORT = 0x0ec8, 882*4882a593Smuzhiyun }; 883*4882a593Smuzhiyun 884*4882a593Smuzhiyun struct atom_display_object_path_v2 885*4882a593Smuzhiyun { 886*4882a593Smuzhiyun uint16_t display_objid; //Connector Object ID or Misc Object ID 887*4882a593Smuzhiyun uint16_t disp_recordoffset; 888*4882a593Smuzhiyun uint16_t encoderobjid; //first encoder closer to the connector, could be either an external or intenal encoder 889*4882a593Smuzhiyun uint16_t extencoderobjid; //2nd encoder after the first encoder, from the connector point of view; 890*4882a593Smuzhiyun uint16_t encoder_recordoffset; 891*4882a593Smuzhiyun uint16_t extencoder_recordoffset; 892*4882a593Smuzhiyun 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 893*4882a593Smuzhiyun uint8_t priority_id; 894*4882a593Smuzhiyun uint8_t reserved; 895*4882a593Smuzhiyun }; 896*4882a593Smuzhiyun 897*4882a593Smuzhiyun struct display_object_info_table_v1_4 898*4882a593Smuzhiyun { 899*4882a593Smuzhiyun struct atom_common_table_header table_header; 900*4882a593Smuzhiyun uint16_t supporteddevices; 901*4882a593Smuzhiyun uint8_t number_of_path; 902*4882a593Smuzhiyun uint8_t reserved; 903*4882a593Smuzhiyun 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_path 904*4882a593Smuzhiyun }; 905*4882a593Smuzhiyun 906*4882a593Smuzhiyun 907*4882a593Smuzhiyun /* 908*4882a593Smuzhiyun *************************************************************************** 909*4882a593Smuzhiyun Data Table dce_info structure 910*4882a593Smuzhiyun *************************************************************************** 911*4882a593Smuzhiyun */ 912*4882a593Smuzhiyun struct atom_display_controller_info_v4_1 913*4882a593Smuzhiyun { 914*4882a593Smuzhiyun struct atom_common_table_header table_header; 915*4882a593Smuzhiyun uint32_t display_caps; 916*4882a593Smuzhiyun uint32_t bootup_dispclk_10khz; 917*4882a593Smuzhiyun uint16_t dce_refclk_10khz; 918*4882a593Smuzhiyun uint16_t i2c_engine_refclk_10khz; 919*4882a593Smuzhiyun uint16_t dvi_ss_percentage; // in unit of 0.001% 920*4882a593Smuzhiyun uint16_t dvi_ss_rate_10hz; 921*4882a593Smuzhiyun uint16_t hdmi_ss_percentage; // in unit of 0.001% 922*4882a593Smuzhiyun uint16_t hdmi_ss_rate_10hz; 923*4882a593Smuzhiyun uint16_t dp_ss_percentage; // in unit of 0.001% 924*4882a593Smuzhiyun uint16_t dp_ss_rate_10hz; 925*4882a593Smuzhiyun uint8_t dvi_ss_mode; // enum of atom_spread_spectrum_mode 926*4882a593Smuzhiyun uint8_t hdmi_ss_mode; // enum of atom_spread_spectrum_mode 927*4882a593Smuzhiyun uint8_t dp_ss_mode; // enum of atom_spread_spectrum_mode 928*4882a593Smuzhiyun uint8_t ss_reserved; 929*4882a593Smuzhiyun uint8_t hardcode_mode_num; // a hardcode mode number defined in StandardVESA_TimingTable when a CRT or DFP EDID is not available 930*4882a593Smuzhiyun uint8_t reserved1[3]; 931*4882a593Smuzhiyun uint16_t dpphy_refclk_10khz; 932*4882a593Smuzhiyun uint16_t reserved2; 933*4882a593Smuzhiyun uint8_t dceip_min_ver; 934*4882a593Smuzhiyun uint8_t dceip_max_ver; 935*4882a593Smuzhiyun uint8_t max_disp_pipe_num; 936*4882a593Smuzhiyun uint8_t max_vbios_active_disp_pipe_num; 937*4882a593Smuzhiyun uint8_t max_ppll_num; 938*4882a593Smuzhiyun uint8_t max_disp_phy_num; 939*4882a593Smuzhiyun uint8_t max_aux_pairs; 940*4882a593Smuzhiyun uint8_t remotedisplayconfig; 941*4882a593Smuzhiyun uint8_t reserved3[8]; 942*4882a593Smuzhiyun }; 943*4882a593Smuzhiyun 944*4882a593Smuzhiyun struct atom_display_controller_info_v4_2 945*4882a593Smuzhiyun { 946*4882a593Smuzhiyun struct atom_common_table_header table_header; 947*4882a593Smuzhiyun uint32_t display_caps; 948*4882a593Smuzhiyun uint32_t bootup_dispclk_10khz; 949*4882a593Smuzhiyun uint16_t dce_refclk_10khz; 950*4882a593Smuzhiyun uint16_t i2c_engine_refclk_10khz; 951*4882a593Smuzhiyun uint16_t dvi_ss_percentage; // in unit of 0.001% 952*4882a593Smuzhiyun uint16_t dvi_ss_rate_10hz; 953*4882a593Smuzhiyun uint16_t hdmi_ss_percentage; // in unit of 0.001% 954*4882a593Smuzhiyun uint16_t hdmi_ss_rate_10hz; 955*4882a593Smuzhiyun uint16_t dp_ss_percentage; // in unit of 0.001% 956*4882a593Smuzhiyun uint16_t dp_ss_rate_10hz; 957*4882a593Smuzhiyun uint8_t dvi_ss_mode; // enum of atom_spread_spectrum_mode 958*4882a593Smuzhiyun uint8_t hdmi_ss_mode; // enum of atom_spread_spectrum_mode 959*4882a593Smuzhiyun uint8_t dp_ss_mode; // enum of atom_spread_spectrum_mode 960*4882a593Smuzhiyun uint8_t ss_reserved; 961*4882a593Smuzhiyun uint8_t dfp_hardcode_mode_num; // DFP hardcode mode number defined in StandardVESA_TimingTable when EDID is not available 962*4882a593Smuzhiyun uint8_t dfp_hardcode_refreshrate;// DFP hardcode mode refreshrate defined in StandardVESA_TimingTable when EDID is not available 963*4882a593Smuzhiyun uint8_t vga_hardcode_mode_num; // VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable 964*4882a593Smuzhiyun uint8_t vga_hardcode_refreshrate;// VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable 965*4882a593Smuzhiyun uint16_t dpphy_refclk_10khz; 966*4882a593Smuzhiyun uint16_t reserved2; 967*4882a593Smuzhiyun uint8_t dcnip_min_ver; 968*4882a593Smuzhiyun uint8_t dcnip_max_ver; 969*4882a593Smuzhiyun uint8_t max_disp_pipe_num; 970*4882a593Smuzhiyun uint8_t max_vbios_active_disp_pipe_num; 971*4882a593Smuzhiyun uint8_t max_ppll_num; 972*4882a593Smuzhiyun uint8_t max_disp_phy_num; 973*4882a593Smuzhiyun uint8_t max_aux_pairs; 974*4882a593Smuzhiyun uint8_t remotedisplayconfig; 975*4882a593Smuzhiyun uint8_t reserved3[8]; 976*4882a593Smuzhiyun }; 977*4882a593Smuzhiyun 978*4882a593Smuzhiyun struct atom_display_controller_info_v4_4 { 979*4882a593Smuzhiyun struct atom_common_table_header table_header; 980*4882a593Smuzhiyun uint32_t display_caps; 981*4882a593Smuzhiyun uint32_t bootup_dispclk_10khz; 982*4882a593Smuzhiyun uint16_t dce_refclk_10khz; 983*4882a593Smuzhiyun uint16_t i2c_engine_refclk_10khz; 984*4882a593Smuzhiyun uint16_t dvi_ss_percentage; // in unit of 0.001% 985*4882a593Smuzhiyun uint16_t dvi_ss_rate_10hz; 986*4882a593Smuzhiyun uint16_t hdmi_ss_percentage; // in unit of 0.001% 987*4882a593Smuzhiyun uint16_t hdmi_ss_rate_10hz; 988*4882a593Smuzhiyun uint16_t dp_ss_percentage; // in unit of 0.001% 989*4882a593Smuzhiyun uint16_t dp_ss_rate_10hz; 990*4882a593Smuzhiyun uint8_t dvi_ss_mode; // enum of atom_spread_spectrum_mode 991*4882a593Smuzhiyun uint8_t hdmi_ss_mode; // enum of atom_spread_spectrum_mode 992*4882a593Smuzhiyun uint8_t dp_ss_mode; // enum of atom_spread_spectrum_mode 993*4882a593Smuzhiyun uint8_t ss_reserved; 994*4882a593Smuzhiyun uint8_t dfp_hardcode_mode_num; // DFP hardcode mode number defined in StandardVESA_TimingTable when EDID is not available 995*4882a593Smuzhiyun uint8_t dfp_hardcode_refreshrate;// DFP hardcode mode refreshrate defined in StandardVESA_TimingTable when EDID is not available 996*4882a593Smuzhiyun uint8_t vga_hardcode_mode_num; // VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable 997*4882a593Smuzhiyun uint8_t vga_hardcode_refreshrate;// VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable 998*4882a593Smuzhiyun uint16_t dpphy_refclk_10khz; 999*4882a593Smuzhiyun uint16_t hw_chip_id; 1000*4882a593Smuzhiyun uint8_t dcnip_min_ver; 1001*4882a593Smuzhiyun uint8_t dcnip_max_ver; 1002*4882a593Smuzhiyun uint8_t max_disp_pipe_num; 1003*4882a593Smuzhiyun uint8_t max_vbios_active_disp_pipum; 1004*4882a593Smuzhiyun uint8_t max_ppll_num; 1005*4882a593Smuzhiyun uint8_t max_disp_phy_num; 1006*4882a593Smuzhiyun uint8_t max_aux_pairs; 1007*4882a593Smuzhiyun uint8_t remotedisplayconfig; 1008*4882a593Smuzhiyun uint32_t dispclk_pll_vco_freq; 1009*4882a593Smuzhiyun uint32_t dp_ref_clk_freq; 1010*4882a593Smuzhiyun uint32_t max_mclk_chg_lat; // Worst case blackout duration for a memory clock frequency (p-state) change, units of 100s of ns (0.1 us) 1011*4882a593Smuzhiyun uint32_t max_sr_exit_lat; // Worst case memory self refresh exit time, units of 100ns of ns (0.1us) 1012*4882a593Smuzhiyun uint32_t max_sr_enter_exit_lat; // Worst case memory self refresh entry followed by immediate exit time, units of 100ns of ns (0.1us) 1013*4882a593Smuzhiyun uint16_t dc_golden_table_offset; // point of struct of atom_dc_golden_table_vxx 1014*4882a593Smuzhiyun uint16_t dc_golden_table_ver; 1015*4882a593Smuzhiyun uint32_t reserved3[3]; 1016*4882a593Smuzhiyun }; 1017*4882a593Smuzhiyun 1018*4882a593Smuzhiyun struct atom_dc_golden_table_v1 1019*4882a593Smuzhiyun { 1020*4882a593Smuzhiyun uint32_t aux_dphy_rx_control0_val; 1021*4882a593Smuzhiyun uint32_t aux_dphy_tx_control_val; 1022*4882a593Smuzhiyun uint32_t aux_dphy_rx_control1_val; 1023*4882a593Smuzhiyun uint32_t dc_gpio_aux_ctrl_0_val; 1024*4882a593Smuzhiyun uint32_t dc_gpio_aux_ctrl_1_val; 1025*4882a593Smuzhiyun uint32_t dc_gpio_aux_ctrl_2_val; 1026*4882a593Smuzhiyun uint32_t dc_gpio_aux_ctrl_3_val; 1027*4882a593Smuzhiyun uint32_t dc_gpio_aux_ctrl_4_val; 1028*4882a593Smuzhiyun uint32_t dc_gpio_aux_ctrl_5_val; 1029*4882a593Smuzhiyun uint32_t reserved[23]; 1030*4882a593Smuzhiyun }; 1031*4882a593Smuzhiyun 1032*4882a593Smuzhiyun enum dce_info_caps_def 1033*4882a593Smuzhiyun { 1034*4882a593Smuzhiyun // only for VBIOS 1035*4882a593Smuzhiyun DCE_INFO_CAPS_FORCE_DISPDEV_CONNECTED =0x02, 1036*4882a593Smuzhiyun // only for VBIOS 1037*4882a593Smuzhiyun DCE_INFO_CAPS_DISABLE_DFP_DP_HBR2 =0x04, 1038*4882a593Smuzhiyun // only for VBIOS 1039*4882a593Smuzhiyun DCE_INFO_CAPS_ENABLE_INTERLAC_TIMING =0x08, 1040*4882a593Smuzhiyun 1041*4882a593Smuzhiyun }; 1042*4882a593Smuzhiyun 1043*4882a593Smuzhiyun /* 1044*4882a593Smuzhiyun *************************************************************************** 1045*4882a593Smuzhiyun Data Table ATOM_EXTERNAL_DISPLAY_CONNECTION_INFO structure 1046*4882a593Smuzhiyun *************************************************************************** 1047*4882a593Smuzhiyun */ 1048*4882a593Smuzhiyun struct atom_ext_display_path 1049*4882a593Smuzhiyun { 1050*4882a593Smuzhiyun uint16_t device_tag; //A bit vector to show what devices are supported 1051*4882a593Smuzhiyun uint16_t device_acpi_enum; //16bit device ACPI id. 1052*4882a593Smuzhiyun uint16_t connectorobjid; //A physical connector for displays to plug in, using object connector definitions 1053*4882a593Smuzhiyun uint8_t auxddclut_index; //An index into external AUX/DDC channel LUT 1054*4882a593Smuzhiyun uint8_t hpdlut_index; //An index into external HPD pin LUT 1055*4882a593Smuzhiyun uint16_t ext_encoder_objid; //external encoder object id 1056*4882a593Smuzhiyun uint8_t channelmapping; // if ucChannelMapping=0, using default one to one mapping 1057*4882a593Smuzhiyun uint8_t chpninvert; // bit vector for up to 8 lanes, =0: P and N is not invert, =1 P and N is inverted 1058*4882a593Smuzhiyun uint16_t caps; 1059*4882a593Smuzhiyun uint16_t reserved; 1060*4882a593Smuzhiyun }; 1061*4882a593Smuzhiyun 1062*4882a593Smuzhiyun //usCaps 1063*4882a593Smuzhiyun enum ext_display_path_cap_def { 1064*4882a593Smuzhiyun EXT_DISPLAY_PATH_CAPS__HBR2_DISABLE = 0x0001, 1065*4882a593Smuzhiyun EXT_DISPLAY_PATH_CAPS__DP_FIXED_VS_EN = 0x0002, 1066*4882a593Smuzhiyun EXT_DISPLAY_PATH_CAPS__EXT_CHIP_MASK = 0x007C, 1067*4882a593Smuzhiyun EXT_DISPLAY_PATH_CAPS__HDMI20_PI3EQX1204 = (0x01 << 2), //PI redriver chip 1068*4882a593Smuzhiyun EXT_DISPLAY_PATH_CAPS__HDMI20_TISN65DP159RSBT = (0x02 << 2), //TI retimer chip 1069*4882a593Smuzhiyun EXT_DISPLAY_PATH_CAPS__HDMI20_PARADE_PS175 = (0x03 << 2) //Parade DP->HDMI recoverter chip 1070*4882a593Smuzhiyun }; 1071*4882a593Smuzhiyun 1072*4882a593Smuzhiyun struct atom_external_display_connection_info 1073*4882a593Smuzhiyun { 1074*4882a593Smuzhiyun struct atom_common_table_header table_header; 1075*4882a593Smuzhiyun uint8_t guid[16]; // a GUID is a 16 byte long string 1076*4882a593Smuzhiyun struct atom_ext_display_path path[7]; // total of fixed 7 entries. 1077*4882a593Smuzhiyun uint8_t checksum; // a simple Checksum of the sum of whole structure equal to 0x0. 1078*4882a593Smuzhiyun uint8_t stereopinid; // use for eDP panel 1079*4882a593Smuzhiyun uint8_t remotedisplayconfig; 1080*4882a593Smuzhiyun uint8_t edptolvdsrxid; 1081*4882a593Smuzhiyun uint8_t fixdpvoltageswing; // usCaps[1]=1, this indicate DP_LANE_SET value 1082*4882a593Smuzhiyun uint8_t reserved[3]; // for potential expansion 1083*4882a593Smuzhiyun }; 1084*4882a593Smuzhiyun 1085*4882a593Smuzhiyun /* 1086*4882a593Smuzhiyun *************************************************************************** 1087*4882a593Smuzhiyun Data Table integratedsysteminfo structure 1088*4882a593Smuzhiyun *************************************************************************** 1089*4882a593Smuzhiyun */ 1090*4882a593Smuzhiyun 1091*4882a593Smuzhiyun struct atom_camera_dphy_timing_param 1092*4882a593Smuzhiyun { 1093*4882a593Smuzhiyun uint8_t profile_id; // SENSOR_PROFILES 1094*4882a593Smuzhiyun uint32_t param; 1095*4882a593Smuzhiyun }; 1096*4882a593Smuzhiyun 1097*4882a593Smuzhiyun struct atom_camera_dphy_elec_param 1098*4882a593Smuzhiyun { 1099*4882a593Smuzhiyun uint16_t param[3]; 1100*4882a593Smuzhiyun }; 1101*4882a593Smuzhiyun 1102*4882a593Smuzhiyun struct atom_camera_module_info 1103*4882a593Smuzhiyun { 1104*4882a593Smuzhiyun uint8_t module_id; // 0: Rear, 1: Front right of user, 2: Front left of user 1105*4882a593Smuzhiyun uint8_t module_name[8]; 1106*4882a593Smuzhiyun struct atom_camera_dphy_timing_param timingparam[6]; // Exact number is under estimation and confirmation from sensor vendor 1107*4882a593Smuzhiyun }; 1108*4882a593Smuzhiyun 1109*4882a593Smuzhiyun struct atom_camera_flashlight_info 1110*4882a593Smuzhiyun { 1111*4882a593Smuzhiyun uint8_t flashlight_id; // 0: Rear, 1: Front 1112*4882a593Smuzhiyun uint8_t name[8]; 1113*4882a593Smuzhiyun }; 1114*4882a593Smuzhiyun 1115*4882a593Smuzhiyun struct atom_camera_data 1116*4882a593Smuzhiyun { 1117*4882a593Smuzhiyun uint32_t versionCode; 1118*4882a593Smuzhiyun struct atom_camera_module_info cameraInfo[3]; // Assuming 3 camera sensors max 1119*4882a593Smuzhiyun struct atom_camera_flashlight_info flashInfo; // Assuming 1 flashlight max 1120*4882a593Smuzhiyun struct atom_camera_dphy_elec_param dphy_param; 1121*4882a593Smuzhiyun uint32_t crc_val; // CRC 1122*4882a593Smuzhiyun }; 1123*4882a593Smuzhiyun 1124*4882a593Smuzhiyun 1125*4882a593Smuzhiyun struct atom_14nm_dpphy_dvihdmi_tuningset 1126*4882a593Smuzhiyun { 1127*4882a593Smuzhiyun uint32_t max_symclk_in10khz; 1128*4882a593Smuzhiyun uint8_t encoder_mode; //atom_encode_mode_def, =2: DVI, =3: HDMI mode 1129*4882a593Smuzhiyun uint8_t phy_sel; //bit vector of phy, bit0= phya, bit1=phyb, ....bit5 = phyf 1130*4882a593Smuzhiyun uint16_t margindeemph; //COMMON_MAR_DEEMPH_NOM[7:0]tx_margin_nom [15:8]deemph_gen1_nom 1131*4882a593Smuzhiyun uint8_t deemph_6db_4; //COMMON_SELDEEMPH60[31:24]deemph_6db_4 1132*4882a593Smuzhiyun uint8_t boostadj; //CMD_BUS_GLOBAL_FOR_TX_LANE0 [19:16]tx_boost_adj [20]tx_boost_en [23:22]tx_binary_ron_code_offset 1133*4882a593Smuzhiyun uint8_t tx_driver_fifty_ohms; //COMMON_ZCALCODE_CTRL[21].tx_driver_fifty_ohms 1134*4882a593Smuzhiyun uint8_t deemph_sel; //MARGIN_DEEMPH_LANE0.DEEMPH_SEL 1135*4882a593Smuzhiyun }; 1136*4882a593Smuzhiyun 1137*4882a593Smuzhiyun struct atom_14nm_dpphy_dp_setting{ 1138*4882a593Smuzhiyun uint8_t dp_vs_pemph_level; //enum of atom_dp_vs_preemph_def 1139*4882a593Smuzhiyun uint16_t margindeemph; //COMMON_MAR_DEEMPH_NOM[7:0]tx_margin_nom [15:8]deemph_gen1_nom 1140*4882a593Smuzhiyun uint8_t deemph_6db_4; //COMMON_SELDEEMPH60[31:24]deemph_6db_4 1141*4882a593Smuzhiyun uint8_t boostadj; //CMD_BUS_GLOBAL_FOR_TX_LANE0 [19:16]tx_boost_adj [20]tx_boost_en [23:22]tx_binary_ron_code_offset 1142*4882a593Smuzhiyun }; 1143*4882a593Smuzhiyun 1144*4882a593Smuzhiyun struct atom_14nm_dpphy_dp_tuningset{ 1145*4882a593Smuzhiyun uint8_t phy_sel; // bit vector of phy, bit0= phya, bit1=phyb, ....bit5 = phyf 1146*4882a593Smuzhiyun uint8_t version; 1147*4882a593Smuzhiyun uint16_t table_size; // size of atom_14nm_dpphy_dp_tuningset 1148*4882a593Smuzhiyun uint16_t reserved; 1149*4882a593Smuzhiyun struct atom_14nm_dpphy_dp_setting dptuning[10]; 1150*4882a593Smuzhiyun }; 1151*4882a593Smuzhiyun 1152*4882a593Smuzhiyun struct atom_14nm_dig_transmitter_info_header_v4_0{ 1153*4882a593Smuzhiyun struct atom_common_table_header table_header; 1154*4882a593Smuzhiyun uint16_t pcie_phy_tmds_hdmi_macro_settings_offset; // offset of PCIEPhyTMDSHDMIMacroSettingsTbl 1155*4882a593Smuzhiyun uint16_t uniphy_vs_emph_lookup_table_offset; // offset of UniphyVSEmphLookUpTbl 1156*4882a593Smuzhiyun uint16_t uniphy_xbar_settings_table_offset; // offset of UniphyXbarSettingsTbl 1157*4882a593Smuzhiyun }; 1158*4882a593Smuzhiyun 1159*4882a593Smuzhiyun struct atom_14nm_combphy_tmds_vs_set 1160*4882a593Smuzhiyun { 1161*4882a593Smuzhiyun uint8_t sym_clk; 1162*4882a593Smuzhiyun uint8_t dig_mode; 1163*4882a593Smuzhiyun uint8_t phy_sel; 1164*4882a593Smuzhiyun uint16_t common_mar_deemph_nom__margin_deemph_val; 1165*4882a593Smuzhiyun uint8_t common_seldeemph60__deemph_6db_4_val; 1166*4882a593Smuzhiyun uint8_t cmd_bus_global_for_tx_lane0__boostadj_val ; 1167*4882a593Smuzhiyun uint8_t common_zcalcode_ctrl__tx_driver_fifty_ohms_val; 1168*4882a593Smuzhiyun uint8_t margin_deemph_lane0__deemph_sel_val; 1169*4882a593Smuzhiyun }; 1170*4882a593Smuzhiyun 1171*4882a593Smuzhiyun struct atom_DCN_dpphy_dvihdmi_tuningset 1172*4882a593Smuzhiyun { 1173*4882a593Smuzhiyun uint32_t max_symclk_in10khz; 1174*4882a593Smuzhiyun uint8_t encoder_mode; //atom_encode_mode_def, =2: DVI, =3: HDMI mode 1175*4882a593Smuzhiyun uint8_t phy_sel; //bit vector of phy, bit0= phya, bit1=phyb, ....bit5 = phyf 1176*4882a593Smuzhiyun uint8_t tx_eq_main; // map to RDPCSTX_PHY_FUSE0/1/2/3[5:0](EQ_MAIN) 1177*4882a593Smuzhiyun uint8_t tx_eq_pre; // map to RDPCSTX_PHY_FUSE0/1/2/3[11:6](EQ_PRE) 1178*4882a593Smuzhiyun uint8_t tx_eq_post; // map to RDPCSTX_PHY_FUSE0/1/2/3[17:12](EQ_POST) 1179*4882a593Smuzhiyun uint8_t reserved1; 1180*4882a593Smuzhiyun uint8_t tx_vboost_lvl; // tx_vboost_lvl, map to RDPCSTX_PHY_CNTL0.RDPCS_PHY_TX_VBOOST_LVL 1181*4882a593Smuzhiyun uint8_t reserved2; 1182*4882a593Smuzhiyun }; 1183*4882a593Smuzhiyun 1184*4882a593Smuzhiyun struct atom_DCN_dpphy_dp_setting{ 1185*4882a593Smuzhiyun uint8_t dp_vs_pemph_level; //enum of atom_dp_vs_preemph_def 1186*4882a593Smuzhiyun uint8_t tx_eq_main; // map to RDPCSTX_PHY_FUSE0/1/2/3[5:0](EQ_MAIN) 1187*4882a593Smuzhiyun uint8_t tx_eq_pre; // map to RDPCSTX_PHY_FUSE0/1/2/3[11:6](EQ_PRE) 1188*4882a593Smuzhiyun uint8_t tx_eq_post; // map to RDPCSTX_PHY_FUSE0/1/2/3[17:12](EQ_POST) 1189*4882a593Smuzhiyun uint8_t tx_vboost_lvl; // tx_vboost_lvl, map to RDPCSTX_PHY_CNTL0.RDPCS_PHY_TX_VBOOST_LVL 1190*4882a593Smuzhiyun }; 1191*4882a593Smuzhiyun 1192*4882a593Smuzhiyun struct atom_DCN_dpphy_dp_tuningset{ 1193*4882a593Smuzhiyun uint8_t phy_sel; // bit vector of phy, bit0= phya, bit1=phyb, ....bit5 = phyf 1194*4882a593Smuzhiyun uint8_t version; 1195*4882a593Smuzhiyun uint16_t table_size; // size of atom_14nm_dpphy_dp_setting 1196*4882a593Smuzhiyun uint16_t reserved; 1197*4882a593Smuzhiyun struct atom_DCN_dpphy_dp_setting dptunings[10]; 1198*4882a593Smuzhiyun }; 1199*4882a593Smuzhiyun 1200*4882a593Smuzhiyun struct atom_i2c_reg_info { 1201*4882a593Smuzhiyun uint8_t ucI2cRegIndex; 1202*4882a593Smuzhiyun uint8_t ucI2cRegVal; 1203*4882a593Smuzhiyun }; 1204*4882a593Smuzhiyun 1205*4882a593Smuzhiyun struct atom_hdmi_retimer_redriver_set { 1206*4882a593Smuzhiyun uint8_t HdmiSlvAddr; 1207*4882a593Smuzhiyun uint8_t HdmiRegNum; 1208*4882a593Smuzhiyun uint8_t Hdmi6GRegNum; 1209*4882a593Smuzhiyun struct atom_i2c_reg_info HdmiRegSetting[9]; //For non 6G Hz use 1210*4882a593Smuzhiyun struct atom_i2c_reg_info Hdmi6GhzRegSetting[3]; //For 6G Hz use. 1211*4882a593Smuzhiyun }; 1212*4882a593Smuzhiyun 1213*4882a593Smuzhiyun struct atom_integrated_system_info_v1_11 1214*4882a593Smuzhiyun { 1215*4882a593Smuzhiyun struct atom_common_table_header table_header; 1216*4882a593Smuzhiyun uint32_t vbios_misc; //enum of atom_system_vbiosmisc_def 1217*4882a593Smuzhiyun uint32_t gpucapinfo; //enum of atom_system_gpucapinf_def 1218*4882a593Smuzhiyun uint32_t system_config; 1219*4882a593Smuzhiyun uint32_t cpucapinfo; 1220*4882a593Smuzhiyun uint16_t gpuclk_ss_percentage; //unit of 0.001%, 1000 mean 1% 1221*4882a593Smuzhiyun uint16_t gpuclk_ss_type; 1222*4882a593Smuzhiyun uint16_t lvds_ss_percentage; //unit of 0.001%, 1000 mean 1% 1223*4882a593Smuzhiyun uint16_t lvds_ss_rate_10hz; 1224*4882a593Smuzhiyun uint16_t hdmi_ss_percentage; //unit of 0.001%, 1000 mean 1% 1225*4882a593Smuzhiyun uint16_t hdmi_ss_rate_10hz; 1226*4882a593Smuzhiyun uint16_t dvi_ss_percentage; //unit of 0.001%, 1000 mean 1% 1227*4882a593Smuzhiyun uint16_t dvi_ss_rate_10hz; 1228*4882a593Smuzhiyun uint16_t dpphy_override; // bit vector, enum of atom_sysinfo_dpphy_override_def 1229*4882a593Smuzhiyun uint16_t lvds_misc; // enum of atom_sys_info_lvds_misc_def 1230*4882a593Smuzhiyun uint16_t backlight_pwm_hz; // pwm frequency in hz 1231*4882a593Smuzhiyun uint8_t memorytype; // enum of atom_dmi_t17_mem_type_def, APU memory type indication. 1232*4882a593Smuzhiyun uint8_t umachannelnumber; // number of memory channels 1233*4882a593Smuzhiyun uint8_t pwr_on_digon_to_de; /* all pwr sequence numbers below are in uint of 4ms */ 1234*4882a593Smuzhiyun uint8_t pwr_on_de_to_vary_bl; 1235*4882a593Smuzhiyun uint8_t pwr_down_vary_bloff_to_de; 1236*4882a593Smuzhiyun uint8_t pwr_down_de_to_digoff; 1237*4882a593Smuzhiyun uint8_t pwr_off_delay; 1238*4882a593Smuzhiyun uint8_t pwr_on_vary_bl_to_blon; 1239*4882a593Smuzhiyun uint8_t pwr_down_bloff_to_vary_bloff; 1240*4882a593Smuzhiyun uint8_t min_allowed_bl_level; 1241*4882a593Smuzhiyun uint8_t htc_hyst_limit; 1242*4882a593Smuzhiyun uint8_t htc_tmp_limit; 1243*4882a593Smuzhiyun uint8_t reserved1; 1244*4882a593Smuzhiyun uint8_t reserved2; 1245*4882a593Smuzhiyun struct atom_external_display_connection_info extdispconninfo; 1246*4882a593Smuzhiyun struct atom_14nm_dpphy_dvihdmi_tuningset dvi_tuningset; 1247*4882a593Smuzhiyun struct atom_14nm_dpphy_dvihdmi_tuningset hdmi_tuningset; 1248*4882a593Smuzhiyun struct atom_14nm_dpphy_dvihdmi_tuningset hdmi6g_tuningset; 1249*4882a593Smuzhiyun struct atom_14nm_dpphy_dp_tuningset dp_tuningset; // rbr 1.62G dp tuning set 1250*4882a593Smuzhiyun struct atom_14nm_dpphy_dp_tuningset dp_hbr3_tuningset; // HBR3 dp tuning set 1251*4882a593Smuzhiyun struct atom_camera_data camera_info; 1252*4882a593Smuzhiyun struct atom_hdmi_retimer_redriver_set dp0_retimer_set; //for DP0 1253*4882a593Smuzhiyun struct atom_hdmi_retimer_redriver_set dp1_retimer_set; //for DP1 1254*4882a593Smuzhiyun struct atom_hdmi_retimer_redriver_set dp2_retimer_set; //for DP2 1255*4882a593Smuzhiyun struct atom_hdmi_retimer_redriver_set dp3_retimer_set; //for DP3 1256*4882a593Smuzhiyun struct atom_14nm_dpphy_dp_tuningset dp_hbr_tuningset; //hbr 2.7G dp tuning set 1257*4882a593Smuzhiyun struct atom_14nm_dpphy_dp_tuningset dp_hbr2_tuningset; //hbr2 5.4G dp turnig set 1258*4882a593Smuzhiyun struct atom_14nm_dpphy_dp_tuningset edp_tuningset; //edp tuning set 1259*4882a593Smuzhiyun uint32_t reserved[66]; 1260*4882a593Smuzhiyun }; 1261*4882a593Smuzhiyun 1262*4882a593Smuzhiyun struct atom_integrated_system_info_v1_12 1263*4882a593Smuzhiyun { 1264*4882a593Smuzhiyun struct atom_common_table_header table_header; 1265*4882a593Smuzhiyun uint32_t vbios_misc; //enum of atom_system_vbiosmisc_def 1266*4882a593Smuzhiyun uint32_t gpucapinfo; //enum of atom_system_gpucapinf_def 1267*4882a593Smuzhiyun uint32_t system_config; 1268*4882a593Smuzhiyun uint32_t cpucapinfo; 1269*4882a593Smuzhiyun uint16_t gpuclk_ss_percentage; //unit of 0.001%, 1000 mean 1% 1270*4882a593Smuzhiyun uint16_t gpuclk_ss_type; 1271*4882a593Smuzhiyun uint16_t lvds_ss_percentage; //unit of 0.001%, 1000 mean 1% 1272*4882a593Smuzhiyun uint16_t lvds_ss_rate_10hz; 1273*4882a593Smuzhiyun uint16_t hdmi_ss_percentage; //unit of 0.001%, 1000 mean 1% 1274*4882a593Smuzhiyun uint16_t hdmi_ss_rate_10hz; 1275*4882a593Smuzhiyun uint16_t dvi_ss_percentage; //unit of 0.001%, 1000 mean 1% 1276*4882a593Smuzhiyun uint16_t dvi_ss_rate_10hz; 1277*4882a593Smuzhiyun uint16_t dpphy_override; // bit vector, enum of atom_sysinfo_dpphy_override_def 1278*4882a593Smuzhiyun uint16_t lvds_misc; // enum of atom_sys_info_lvds_misc_def 1279*4882a593Smuzhiyun uint16_t backlight_pwm_hz; // pwm frequency in hz 1280*4882a593Smuzhiyun uint8_t memorytype; // enum of atom_dmi_t17_mem_type_def, APU memory type indication. 1281*4882a593Smuzhiyun uint8_t umachannelnumber; // number of memory channels 1282*4882a593Smuzhiyun uint8_t pwr_on_digon_to_de; // all pwr sequence numbers below are in uint of 4ms // 1283*4882a593Smuzhiyun uint8_t pwr_on_de_to_vary_bl; 1284*4882a593Smuzhiyun uint8_t pwr_down_vary_bloff_to_de; 1285*4882a593Smuzhiyun uint8_t pwr_down_de_to_digoff; 1286*4882a593Smuzhiyun uint8_t pwr_off_delay; 1287*4882a593Smuzhiyun uint8_t pwr_on_vary_bl_to_blon; 1288*4882a593Smuzhiyun uint8_t pwr_down_bloff_to_vary_bloff; 1289*4882a593Smuzhiyun uint8_t min_allowed_bl_level; 1290*4882a593Smuzhiyun uint8_t htc_hyst_limit; 1291*4882a593Smuzhiyun uint8_t htc_tmp_limit; 1292*4882a593Smuzhiyun uint8_t reserved1; 1293*4882a593Smuzhiyun uint8_t reserved2; 1294*4882a593Smuzhiyun struct atom_external_display_connection_info extdispconninfo; 1295*4882a593Smuzhiyun struct atom_DCN_dpphy_dvihdmi_tuningset TMDS_tuningset; 1296*4882a593Smuzhiyun struct atom_DCN_dpphy_dvihdmi_tuningset hdmiCLK5_tuningset; 1297*4882a593Smuzhiyun struct atom_DCN_dpphy_dvihdmi_tuningset hdmiCLK8_tuningset; 1298*4882a593Smuzhiyun struct atom_DCN_dpphy_dp_tuningset rbr_tuningset; // rbr 1.62G dp tuning set 1299*4882a593Smuzhiyun struct atom_DCN_dpphy_dp_tuningset hbr3_tuningset; // HBR3 dp tuning set 1300*4882a593Smuzhiyun struct atom_camera_data camera_info; 1301*4882a593Smuzhiyun struct atom_hdmi_retimer_redriver_set dp0_retimer_set; //for DP0 1302*4882a593Smuzhiyun struct atom_hdmi_retimer_redriver_set dp1_retimer_set; //for DP1 1303*4882a593Smuzhiyun struct atom_hdmi_retimer_redriver_set dp2_retimer_set; //for DP2 1304*4882a593Smuzhiyun struct atom_hdmi_retimer_redriver_set dp3_retimer_set; //for DP3 1305*4882a593Smuzhiyun struct atom_DCN_dpphy_dp_tuningset hbr_tuningset; //hbr 2.7G dp tuning set 1306*4882a593Smuzhiyun struct atom_DCN_dpphy_dp_tuningset hbr2_tuningset; //hbr2 5.4G dp turnig set 1307*4882a593Smuzhiyun struct atom_DCN_dpphy_dp_tuningset edp_tunings; //edp tuning set 1308*4882a593Smuzhiyun struct atom_DCN_dpphy_dvihdmi_tuningset hdmiCLK6_tuningset; 1309*4882a593Smuzhiyun uint32_t reserved[63]; 1310*4882a593Smuzhiyun }; 1311*4882a593Smuzhiyun 1312*4882a593Smuzhiyun // system_config 1313*4882a593Smuzhiyun enum atom_system_vbiosmisc_def{ 1314*4882a593Smuzhiyun INTEGRATED_SYSTEM_INFO__GET_EDID_CALLBACK_FUNC_SUPPORT = 0x01, 1315*4882a593Smuzhiyun }; 1316*4882a593Smuzhiyun 1317*4882a593Smuzhiyun 1318*4882a593Smuzhiyun // gpucapinfo 1319*4882a593Smuzhiyun enum atom_system_gpucapinf_def{ 1320*4882a593Smuzhiyun SYS_INFO_GPUCAPS__ENABEL_DFS_BYPASS = 0x10, 1321*4882a593Smuzhiyun }; 1322*4882a593Smuzhiyun 1323*4882a593Smuzhiyun //dpphy_override 1324*4882a593Smuzhiyun enum atom_sysinfo_dpphy_override_def{ 1325*4882a593Smuzhiyun ATOM_ENABLE_DVI_TUNINGSET = 0x01, 1326*4882a593Smuzhiyun ATOM_ENABLE_HDMI_TUNINGSET = 0x02, 1327*4882a593Smuzhiyun ATOM_ENABLE_HDMI6G_TUNINGSET = 0x04, 1328*4882a593Smuzhiyun ATOM_ENABLE_DP_TUNINGSET = 0x08, 1329*4882a593Smuzhiyun ATOM_ENABLE_DP_HBR3_TUNINGSET = 0x10, 1330*4882a593Smuzhiyun }; 1331*4882a593Smuzhiyun 1332*4882a593Smuzhiyun //lvds_misc 1333*4882a593Smuzhiyun enum atom_sys_info_lvds_misc_def 1334*4882a593Smuzhiyun { 1335*4882a593Smuzhiyun SYS_INFO_LVDS_MISC_888_FPDI_MODE =0x01, 1336*4882a593Smuzhiyun SYS_INFO_LVDS_MISC_888_BPC_MODE =0x04, 1337*4882a593Smuzhiyun SYS_INFO_LVDS_MISC_OVERRIDE_EN =0x08, 1338*4882a593Smuzhiyun }; 1339*4882a593Smuzhiyun 1340*4882a593Smuzhiyun 1341*4882a593Smuzhiyun //memorytype DMI Type 17 offset 12h - Memory Type 1342*4882a593Smuzhiyun enum atom_dmi_t17_mem_type_def{ 1343*4882a593Smuzhiyun OtherMemType = 0x01, ///< Assign 01 to Other 1344*4882a593Smuzhiyun UnknownMemType, ///< Assign 02 to Unknown 1345*4882a593Smuzhiyun DramMemType, ///< Assign 03 to DRAM 1346*4882a593Smuzhiyun EdramMemType, ///< Assign 04 to EDRAM 1347*4882a593Smuzhiyun VramMemType, ///< Assign 05 to VRAM 1348*4882a593Smuzhiyun SramMemType, ///< Assign 06 to SRAM 1349*4882a593Smuzhiyun RamMemType, ///< Assign 07 to RAM 1350*4882a593Smuzhiyun RomMemType, ///< Assign 08 to ROM 1351*4882a593Smuzhiyun FlashMemType, ///< Assign 09 to Flash 1352*4882a593Smuzhiyun EepromMemType, ///< Assign 10 to EEPROM 1353*4882a593Smuzhiyun FepromMemType, ///< Assign 11 to FEPROM 1354*4882a593Smuzhiyun EpromMemType, ///< Assign 12 to EPROM 1355*4882a593Smuzhiyun CdramMemType, ///< Assign 13 to CDRAM 1356*4882a593Smuzhiyun ThreeDramMemType, ///< Assign 14 to 3DRAM 1357*4882a593Smuzhiyun SdramMemType, ///< Assign 15 to SDRAM 1358*4882a593Smuzhiyun SgramMemType, ///< Assign 16 to SGRAM 1359*4882a593Smuzhiyun RdramMemType, ///< Assign 17 to RDRAM 1360*4882a593Smuzhiyun DdrMemType, ///< Assign 18 to DDR 1361*4882a593Smuzhiyun Ddr2MemType, ///< Assign 19 to DDR2 1362*4882a593Smuzhiyun Ddr2FbdimmMemType, ///< Assign 20 to DDR2 FB-DIMM 1363*4882a593Smuzhiyun Ddr3MemType = 0x18, ///< Assign 24 to DDR3 1364*4882a593Smuzhiyun Fbd2MemType, ///< Assign 25 to FBD2 1365*4882a593Smuzhiyun Ddr4MemType, ///< Assign 26 to DDR4 1366*4882a593Smuzhiyun LpDdrMemType, ///< Assign 27 to LPDDR 1367*4882a593Smuzhiyun LpDdr2MemType, ///< Assign 28 to LPDDR2 1368*4882a593Smuzhiyun LpDdr3MemType, ///< Assign 29 to LPDDR3 1369*4882a593Smuzhiyun LpDdr4MemType, ///< Assign 30 to LPDDR4 1370*4882a593Smuzhiyun }; 1371*4882a593Smuzhiyun 1372*4882a593Smuzhiyun 1373*4882a593Smuzhiyun // this Table is used starting from NL/AM, used by SBIOS and pass the IntegratedSystemInfoTable/PowerPlayInfoTable/SystemCameraInfoTable 1374*4882a593Smuzhiyun struct atom_fusion_system_info_v4 1375*4882a593Smuzhiyun { 1376*4882a593Smuzhiyun struct atom_integrated_system_info_v1_11 sysinfo; // refer to ATOM_INTEGRATED_SYSTEM_INFO_V1_8 definition 1377*4882a593Smuzhiyun uint32_t powerplayinfo[256]; // Reserve 1024 bytes space for PowerPlayInfoTable 1378*4882a593Smuzhiyun }; 1379*4882a593Smuzhiyun 1380*4882a593Smuzhiyun 1381*4882a593Smuzhiyun /* 1382*4882a593Smuzhiyun *************************************************************************** 1383*4882a593Smuzhiyun Data Table gfx_info structure 1384*4882a593Smuzhiyun *************************************************************************** 1385*4882a593Smuzhiyun */ 1386*4882a593Smuzhiyun 1387*4882a593Smuzhiyun struct atom_gfx_info_v2_2 1388*4882a593Smuzhiyun { 1389*4882a593Smuzhiyun struct atom_common_table_header table_header; 1390*4882a593Smuzhiyun uint8_t gfxip_min_ver; 1391*4882a593Smuzhiyun uint8_t gfxip_max_ver; 1392*4882a593Smuzhiyun uint8_t max_shader_engines; 1393*4882a593Smuzhiyun uint8_t max_tile_pipes; 1394*4882a593Smuzhiyun uint8_t max_cu_per_sh; 1395*4882a593Smuzhiyun uint8_t max_sh_per_se; 1396*4882a593Smuzhiyun uint8_t max_backends_per_se; 1397*4882a593Smuzhiyun uint8_t max_texture_channel_caches; 1398*4882a593Smuzhiyun uint32_t regaddr_cp_dma_src_addr; 1399*4882a593Smuzhiyun uint32_t regaddr_cp_dma_src_addr_hi; 1400*4882a593Smuzhiyun uint32_t regaddr_cp_dma_dst_addr; 1401*4882a593Smuzhiyun uint32_t regaddr_cp_dma_dst_addr_hi; 1402*4882a593Smuzhiyun uint32_t regaddr_cp_dma_command; 1403*4882a593Smuzhiyun uint32_t regaddr_cp_status; 1404*4882a593Smuzhiyun uint32_t regaddr_rlc_gpu_clock_32; 1405*4882a593Smuzhiyun uint32_t rlc_gpu_timer_refclk; 1406*4882a593Smuzhiyun }; 1407*4882a593Smuzhiyun 1408*4882a593Smuzhiyun struct atom_gfx_info_v2_3 { 1409*4882a593Smuzhiyun struct atom_common_table_header table_header; 1410*4882a593Smuzhiyun uint8_t gfxip_min_ver; 1411*4882a593Smuzhiyun uint8_t gfxip_max_ver; 1412*4882a593Smuzhiyun uint8_t max_shader_engines; 1413*4882a593Smuzhiyun uint8_t max_tile_pipes; 1414*4882a593Smuzhiyun uint8_t max_cu_per_sh; 1415*4882a593Smuzhiyun uint8_t max_sh_per_se; 1416*4882a593Smuzhiyun uint8_t max_backends_per_se; 1417*4882a593Smuzhiyun uint8_t max_texture_channel_caches; 1418*4882a593Smuzhiyun uint32_t regaddr_cp_dma_src_addr; 1419*4882a593Smuzhiyun uint32_t regaddr_cp_dma_src_addr_hi; 1420*4882a593Smuzhiyun uint32_t regaddr_cp_dma_dst_addr; 1421*4882a593Smuzhiyun uint32_t regaddr_cp_dma_dst_addr_hi; 1422*4882a593Smuzhiyun uint32_t regaddr_cp_dma_command; 1423*4882a593Smuzhiyun uint32_t regaddr_cp_status; 1424*4882a593Smuzhiyun uint32_t regaddr_rlc_gpu_clock_32; 1425*4882a593Smuzhiyun uint32_t rlc_gpu_timer_refclk; 1426*4882a593Smuzhiyun uint8_t active_cu_per_sh; 1427*4882a593Smuzhiyun uint8_t active_rb_per_se; 1428*4882a593Smuzhiyun uint16_t gcgoldenoffset; 1429*4882a593Smuzhiyun uint32_t rm21_sram_vmin_value; 1430*4882a593Smuzhiyun }; 1431*4882a593Smuzhiyun 1432*4882a593Smuzhiyun struct atom_gfx_info_v2_4 1433*4882a593Smuzhiyun { 1434*4882a593Smuzhiyun struct atom_common_table_header table_header; 1435*4882a593Smuzhiyun uint8_t gfxip_min_ver; 1436*4882a593Smuzhiyun uint8_t gfxip_max_ver; 1437*4882a593Smuzhiyun uint8_t max_shader_engines; 1438*4882a593Smuzhiyun uint8_t reserved; 1439*4882a593Smuzhiyun uint8_t max_cu_per_sh; 1440*4882a593Smuzhiyun uint8_t max_sh_per_se; 1441*4882a593Smuzhiyun uint8_t max_backends_per_se; 1442*4882a593Smuzhiyun uint8_t max_texture_channel_caches; 1443*4882a593Smuzhiyun uint32_t regaddr_cp_dma_src_addr; 1444*4882a593Smuzhiyun uint32_t regaddr_cp_dma_src_addr_hi; 1445*4882a593Smuzhiyun uint32_t regaddr_cp_dma_dst_addr; 1446*4882a593Smuzhiyun uint32_t regaddr_cp_dma_dst_addr_hi; 1447*4882a593Smuzhiyun uint32_t regaddr_cp_dma_command; 1448*4882a593Smuzhiyun uint32_t regaddr_cp_status; 1449*4882a593Smuzhiyun uint32_t regaddr_rlc_gpu_clock_32; 1450*4882a593Smuzhiyun uint32_t rlc_gpu_timer_refclk; 1451*4882a593Smuzhiyun uint8_t active_cu_per_sh; 1452*4882a593Smuzhiyun uint8_t active_rb_per_se; 1453*4882a593Smuzhiyun uint16_t gcgoldenoffset; 1454*4882a593Smuzhiyun uint16_t gc_num_gprs; 1455*4882a593Smuzhiyun uint16_t gc_gsprim_buff_depth; 1456*4882a593Smuzhiyun uint16_t gc_parameter_cache_depth; 1457*4882a593Smuzhiyun uint16_t gc_wave_size; 1458*4882a593Smuzhiyun uint16_t gc_max_waves_per_simd; 1459*4882a593Smuzhiyun uint16_t gc_lds_size; 1460*4882a593Smuzhiyun uint8_t gc_num_max_gs_thds; 1461*4882a593Smuzhiyun uint8_t gc_gs_table_depth; 1462*4882a593Smuzhiyun uint8_t gc_double_offchip_lds_buffer; 1463*4882a593Smuzhiyun uint8_t gc_max_scratch_slots_per_cu; 1464*4882a593Smuzhiyun uint32_t sram_rm_fuses_val; 1465*4882a593Smuzhiyun uint32_t sram_custom_rm_fuses_val; 1466*4882a593Smuzhiyun }; 1467*4882a593Smuzhiyun 1468*4882a593Smuzhiyun /* 1469*4882a593Smuzhiyun *************************************************************************** 1470*4882a593Smuzhiyun Data Table smu_info structure 1471*4882a593Smuzhiyun *************************************************************************** 1472*4882a593Smuzhiyun */ 1473*4882a593Smuzhiyun struct atom_smu_info_v3_1 1474*4882a593Smuzhiyun { 1475*4882a593Smuzhiyun struct atom_common_table_header table_header; 1476*4882a593Smuzhiyun uint8_t smuip_min_ver; 1477*4882a593Smuzhiyun uint8_t smuip_max_ver; 1478*4882a593Smuzhiyun uint8_t smu_rsd1; 1479*4882a593Smuzhiyun uint8_t gpuclk_ss_mode; // enum of atom_spread_spectrum_mode 1480*4882a593Smuzhiyun uint16_t sclk_ss_percentage; 1481*4882a593Smuzhiyun uint16_t sclk_ss_rate_10hz; 1482*4882a593Smuzhiyun uint16_t gpuclk_ss_percentage; // in unit of 0.001% 1483*4882a593Smuzhiyun uint16_t gpuclk_ss_rate_10hz; 1484*4882a593Smuzhiyun uint32_t core_refclk_10khz; 1485*4882a593Smuzhiyun uint8_t ac_dc_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for AC/DC switching, =0xff means invalid 1486*4882a593Smuzhiyun uint8_t ac_dc_polarity; // GPIO polarity for AC/DC switching 1487*4882a593Smuzhiyun uint8_t vr0hot_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for VR0 HOT event, =0xff means invalid 1488*4882a593Smuzhiyun uint8_t vr0hot_polarity; // GPIO polarity for VR0 HOT event 1489*4882a593Smuzhiyun uint8_t vr1hot_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for VR1 HOT event , =0xff means invalid 1490*4882a593Smuzhiyun uint8_t vr1hot_polarity; // GPIO polarity for VR1 HOT event 1491*4882a593Smuzhiyun uint8_t fw_ctf_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for CTF, =0xff means invalid 1492*4882a593Smuzhiyun uint8_t fw_ctf_polarity; // GPIO polarity for CTF 1493*4882a593Smuzhiyun }; 1494*4882a593Smuzhiyun 1495*4882a593Smuzhiyun struct atom_smu_info_v3_2 { 1496*4882a593Smuzhiyun struct atom_common_table_header table_header; 1497*4882a593Smuzhiyun uint8_t smuip_min_ver; 1498*4882a593Smuzhiyun uint8_t smuip_max_ver; 1499*4882a593Smuzhiyun uint8_t smu_rsd1; 1500*4882a593Smuzhiyun uint8_t gpuclk_ss_mode; 1501*4882a593Smuzhiyun uint16_t sclk_ss_percentage; 1502*4882a593Smuzhiyun uint16_t sclk_ss_rate_10hz; 1503*4882a593Smuzhiyun uint16_t gpuclk_ss_percentage; // in unit of 0.001% 1504*4882a593Smuzhiyun uint16_t gpuclk_ss_rate_10hz; 1505*4882a593Smuzhiyun uint32_t core_refclk_10khz; 1506*4882a593Smuzhiyun uint8_t ac_dc_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for AC/DC switching, =0xff means invalid 1507*4882a593Smuzhiyun uint8_t ac_dc_polarity; // GPIO polarity for AC/DC switching 1508*4882a593Smuzhiyun uint8_t vr0hot_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for VR0 HOT event, =0xff means invalid 1509*4882a593Smuzhiyun uint8_t vr0hot_polarity; // GPIO polarity for VR0 HOT event 1510*4882a593Smuzhiyun uint8_t vr1hot_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for VR1 HOT event , =0xff means invalid 1511*4882a593Smuzhiyun uint8_t vr1hot_polarity; // GPIO polarity for VR1 HOT event 1512*4882a593Smuzhiyun uint8_t fw_ctf_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for CTF, =0xff means invalid 1513*4882a593Smuzhiyun uint8_t fw_ctf_polarity; // GPIO polarity for CTF 1514*4882a593Smuzhiyun uint8_t pcc_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for PCC, =0xff means invalid 1515*4882a593Smuzhiyun uint8_t pcc_gpio_polarity; // GPIO polarity for CTF 1516*4882a593Smuzhiyun uint16_t smugoldenoffset; 1517*4882a593Smuzhiyun uint32_t gpupll_vco_freq_10khz; 1518*4882a593Smuzhiyun uint32_t bootup_smnclk_10khz; 1519*4882a593Smuzhiyun uint32_t bootup_socclk_10khz; 1520*4882a593Smuzhiyun uint32_t bootup_mp0clk_10khz; 1521*4882a593Smuzhiyun uint32_t bootup_mp1clk_10khz; 1522*4882a593Smuzhiyun uint32_t bootup_lclk_10khz; 1523*4882a593Smuzhiyun uint32_t bootup_dcefclk_10khz; 1524*4882a593Smuzhiyun uint32_t ctf_threshold_override_value; 1525*4882a593Smuzhiyun uint32_t reserved[5]; 1526*4882a593Smuzhiyun }; 1527*4882a593Smuzhiyun 1528*4882a593Smuzhiyun struct atom_smu_info_v3_3 { 1529*4882a593Smuzhiyun struct atom_common_table_header table_header; 1530*4882a593Smuzhiyun uint8_t smuip_min_ver; 1531*4882a593Smuzhiyun uint8_t smuip_max_ver; 1532*4882a593Smuzhiyun uint8_t waflclk_ss_mode; 1533*4882a593Smuzhiyun uint8_t gpuclk_ss_mode; 1534*4882a593Smuzhiyun uint16_t sclk_ss_percentage; 1535*4882a593Smuzhiyun uint16_t sclk_ss_rate_10hz; 1536*4882a593Smuzhiyun uint16_t gpuclk_ss_percentage; // in unit of 0.001% 1537*4882a593Smuzhiyun uint16_t gpuclk_ss_rate_10hz; 1538*4882a593Smuzhiyun uint32_t core_refclk_10khz; 1539*4882a593Smuzhiyun uint8_t ac_dc_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for AC/DC switching, =0xff means invalid 1540*4882a593Smuzhiyun uint8_t ac_dc_polarity; // GPIO polarity for AC/DC switching 1541*4882a593Smuzhiyun uint8_t vr0hot_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for VR0 HOT event, =0xff means invalid 1542*4882a593Smuzhiyun uint8_t vr0hot_polarity; // GPIO polarity for VR0 HOT event 1543*4882a593Smuzhiyun uint8_t vr1hot_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for VR1 HOT event , =0xff means invalid 1544*4882a593Smuzhiyun uint8_t vr1hot_polarity; // GPIO polarity for VR1 HOT event 1545*4882a593Smuzhiyun uint8_t fw_ctf_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for CTF, =0xff means invalid 1546*4882a593Smuzhiyun uint8_t fw_ctf_polarity; // GPIO polarity for CTF 1547*4882a593Smuzhiyun uint8_t pcc_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for PCC, =0xff means invalid 1548*4882a593Smuzhiyun uint8_t pcc_gpio_polarity; // GPIO polarity for CTF 1549*4882a593Smuzhiyun uint16_t smugoldenoffset; 1550*4882a593Smuzhiyun uint32_t gpupll_vco_freq_10khz; 1551*4882a593Smuzhiyun uint32_t bootup_smnclk_10khz; 1552*4882a593Smuzhiyun uint32_t bootup_socclk_10khz; 1553*4882a593Smuzhiyun uint32_t bootup_mp0clk_10khz; 1554*4882a593Smuzhiyun uint32_t bootup_mp1clk_10khz; 1555*4882a593Smuzhiyun uint32_t bootup_lclk_10khz; 1556*4882a593Smuzhiyun uint32_t bootup_dcefclk_10khz; 1557*4882a593Smuzhiyun uint32_t ctf_threshold_override_value; 1558*4882a593Smuzhiyun uint32_t syspll3_0_vco_freq_10khz; 1559*4882a593Smuzhiyun uint32_t syspll3_1_vco_freq_10khz; 1560*4882a593Smuzhiyun uint32_t bootup_fclk_10khz; 1561*4882a593Smuzhiyun uint32_t bootup_waflclk_10khz; 1562*4882a593Smuzhiyun uint32_t smu_info_caps; 1563*4882a593Smuzhiyun uint16_t waflclk_ss_percentage; // in unit of 0.001% 1564*4882a593Smuzhiyun uint16_t smuinitoffset; 1565*4882a593Smuzhiyun uint32_t reserved; 1566*4882a593Smuzhiyun }; 1567*4882a593Smuzhiyun 1568*4882a593Smuzhiyun /* 1569*4882a593Smuzhiyun *************************************************************************** 1570*4882a593Smuzhiyun Data Table smc_dpm_info structure 1571*4882a593Smuzhiyun *************************************************************************** 1572*4882a593Smuzhiyun */ 1573*4882a593Smuzhiyun struct atom_smc_dpm_info_v4_1 1574*4882a593Smuzhiyun { 1575*4882a593Smuzhiyun struct atom_common_table_header table_header; 1576*4882a593Smuzhiyun uint8_t liquid1_i2c_address; 1577*4882a593Smuzhiyun uint8_t liquid2_i2c_address; 1578*4882a593Smuzhiyun uint8_t vr_i2c_address; 1579*4882a593Smuzhiyun uint8_t plx_i2c_address; 1580*4882a593Smuzhiyun 1581*4882a593Smuzhiyun uint8_t liquid_i2c_linescl; 1582*4882a593Smuzhiyun uint8_t liquid_i2c_linesda; 1583*4882a593Smuzhiyun uint8_t vr_i2c_linescl; 1584*4882a593Smuzhiyun uint8_t vr_i2c_linesda; 1585*4882a593Smuzhiyun 1586*4882a593Smuzhiyun uint8_t plx_i2c_linescl; 1587*4882a593Smuzhiyun uint8_t plx_i2c_linesda; 1588*4882a593Smuzhiyun uint8_t vrsensorpresent; 1589*4882a593Smuzhiyun uint8_t liquidsensorpresent; 1590*4882a593Smuzhiyun 1591*4882a593Smuzhiyun uint16_t maxvoltagestepgfx; 1592*4882a593Smuzhiyun uint16_t maxvoltagestepsoc; 1593*4882a593Smuzhiyun 1594*4882a593Smuzhiyun uint8_t vddgfxvrmapping; 1595*4882a593Smuzhiyun uint8_t vddsocvrmapping; 1596*4882a593Smuzhiyun uint8_t vddmem0vrmapping; 1597*4882a593Smuzhiyun uint8_t vddmem1vrmapping; 1598*4882a593Smuzhiyun 1599*4882a593Smuzhiyun uint8_t gfxulvphasesheddingmask; 1600*4882a593Smuzhiyun uint8_t soculvphasesheddingmask; 1601*4882a593Smuzhiyun uint8_t padding8_v[2]; 1602*4882a593Smuzhiyun 1603*4882a593Smuzhiyun uint16_t gfxmaxcurrent; 1604*4882a593Smuzhiyun uint8_t gfxoffset; 1605*4882a593Smuzhiyun uint8_t padding_telemetrygfx; 1606*4882a593Smuzhiyun 1607*4882a593Smuzhiyun uint16_t socmaxcurrent; 1608*4882a593Smuzhiyun uint8_t socoffset; 1609*4882a593Smuzhiyun uint8_t padding_telemetrysoc; 1610*4882a593Smuzhiyun 1611*4882a593Smuzhiyun uint16_t mem0maxcurrent; 1612*4882a593Smuzhiyun uint8_t mem0offset; 1613*4882a593Smuzhiyun uint8_t padding_telemetrymem0; 1614*4882a593Smuzhiyun 1615*4882a593Smuzhiyun uint16_t mem1maxcurrent; 1616*4882a593Smuzhiyun uint8_t mem1offset; 1617*4882a593Smuzhiyun uint8_t padding_telemetrymem1; 1618*4882a593Smuzhiyun 1619*4882a593Smuzhiyun uint8_t acdcgpio; 1620*4882a593Smuzhiyun uint8_t acdcpolarity; 1621*4882a593Smuzhiyun uint8_t vr0hotgpio; 1622*4882a593Smuzhiyun uint8_t vr0hotpolarity; 1623*4882a593Smuzhiyun 1624*4882a593Smuzhiyun uint8_t vr1hotgpio; 1625*4882a593Smuzhiyun uint8_t vr1hotpolarity; 1626*4882a593Smuzhiyun uint8_t padding1; 1627*4882a593Smuzhiyun uint8_t padding2; 1628*4882a593Smuzhiyun 1629*4882a593Smuzhiyun uint8_t ledpin0; 1630*4882a593Smuzhiyun uint8_t ledpin1; 1631*4882a593Smuzhiyun uint8_t ledpin2; 1632*4882a593Smuzhiyun uint8_t padding8_4; 1633*4882a593Smuzhiyun 1634*4882a593Smuzhiyun uint8_t pllgfxclkspreadenabled; 1635*4882a593Smuzhiyun uint8_t pllgfxclkspreadpercent; 1636*4882a593Smuzhiyun uint16_t pllgfxclkspreadfreq; 1637*4882a593Smuzhiyun 1638*4882a593Smuzhiyun uint8_t uclkspreadenabled; 1639*4882a593Smuzhiyun uint8_t uclkspreadpercent; 1640*4882a593Smuzhiyun uint16_t uclkspreadfreq; 1641*4882a593Smuzhiyun 1642*4882a593Smuzhiyun uint8_t socclkspreadenabled; 1643*4882a593Smuzhiyun uint8_t socclkspreadpercent; 1644*4882a593Smuzhiyun uint16_t socclkspreadfreq; 1645*4882a593Smuzhiyun 1646*4882a593Smuzhiyun uint8_t acggfxclkspreadenabled; 1647*4882a593Smuzhiyun uint8_t acggfxclkspreadpercent; 1648*4882a593Smuzhiyun uint16_t acggfxclkspreadfreq; 1649*4882a593Smuzhiyun 1650*4882a593Smuzhiyun uint8_t Vr2_I2C_address; 1651*4882a593Smuzhiyun uint8_t padding_vr2[3]; 1652*4882a593Smuzhiyun 1653*4882a593Smuzhiyun uint32_t boardreserved[9]; 1654*4882a593Smuzhiyun }; 1655*4882a593Smuzhiyun 1656*4882a593Smuzhiyun /* 1657*4882a593Smuzhiyun *************************************************************************** 1658*4882a593Smuzhiyun Data Table smc_dpm_info structure 1659*4882a593Smuzhiyun *************************************************************************** 1660*4882a593Smuzhiyun */ 1661*4882a593Smuzhiyun struct atom_smc_dpm_info_v4_3 1662*4882a593Smuzhiyun { 1663*4882a593Smuzhiyun struct atom_common_table_header table_header; 1664*4882a593Smuzhiyun uint8_t liquid1_i2c_address; 1665*4882a593Smuzhiyun uint8_t liquid2_i2c_address; 1666*4882a593Smuzhiyun uint8_t vr_i2c_address; 1667*4882a593Smuzhiyun uint8_t plx_i2c_address; 1668*4882a593Smuzhiyun 1669*4882a593Smuzhiyun uint8_t liquid_i2c_linescl; 1670*4882a593Smuzhiyun uint8_t liquid_i2c_linesda; 1671*4882a593Smuzhiyun uint8_t vr_i2c_linescl; 1672*4882a593Smuzhiyun uint8_t vr_i2c_linesda; 1673*4882a593Smuzhiyun 1674*4882a593Smuzhiyun uint8_t plx_i2c_linescl; 1675*4882a593Smuzhiyun uint8_t plx_i2c_linesda; 1676*4882a593Smuzhiyun uint8_t vrsensorpresent; 1677*4882a593Smuzhiyun uint8_t liquidsensorpresent; 1678*4882a593Smuzhiyun 1679*4882a593Smuzhiyun uint16_t maxvoltagestepgfx; 1680*4882a593Smuzhiyun uint16_t maxvoltagestepsoc; 1681*4882a593Smuzhiyun 1682*4882a593Smuzhiyun uint8_t vddgfxvrmapping; 1683*4882a593Smuzhiyun uint8_t vddsocvrmapping; 1684*4882a593Smuzhiyun uint8_t vddmem0vrmapping; 1685*4882a593Smuzhiyun uint8_t vddmem1vrmapping; 1686*4882a593Smuzhiyun 1687*4882a593Smuzhiyun uint8_t gfxulvphasesheddingmask; 1688*4882a593Smuzhiyun uint8_t soculvphasesheddingmask; 1689*4882a593Smuzhiyun uint8_t externalsensorpresent; 1690*4882a593Smuzhiyun uint8_t padding8_v; 1691*4882a593Smuzhiyun 1692*4882a593Smuzhiyun uint16_t gfxmaxcurrent; 1693*4882a593Smuzhiyun uint8_t gfxoffset; 1694*4882a593Smuzhiyun uint8_t padding_telemetrygfx; 1695*4882a593Smuzhiyun 1696*4882a593Smuzhiyun uint16_t socmaxcurrent; 1697*4882a593Smuzhiyun uint8_t socoffset; 1698*4882a593Smuzhiyun uint8_t padding_telemetrysoc; 1699*4882a593Smuzhiyun 1700*4882a593Smuzhiyun uint16_t mem0maxcurrent; 1701*4882a593Smuzhiyun uint8_t mem0offset; 1702*4882a593Smuzhiyun uint8_t padding_telemetrymem0; 1703*4882a593Smuzhiyun 1704*4882a593Smuzhiyun uint16_t mem1maxcurrent; 1705*4882a593Smuzhiyun uint8_t mem1offset; 1706*4882a593Smuzhiyun uint8_t padding_telemetrymem1; 1707*4882a593Smuzhiyun 1708*4882a593Smuzhiyun uint8_t acdcgpio; 1709*4882a593Smuzhiyun uint8_t acdcpolarity; 1710*4882a593Smuzhiyun uint8_t vr0hotgpio; 1711*4882a593Smuzhiyun uint8_t vr0hotpolarity; 1712*4882a593Smuzhiyun 1713*4882a593Smuzhiyun uint8_t vr1hotgpio; 1714*4882a593Smuzhiyun uint8_t vr1hotpolarity; 1715*4882a593Smuzhiyun uint8_t padding1; 1716*4882a593Smuzhiyun uint8_t padding2; 1717*4882a593Smuzhiyun 1718*4882a593Smuzhiyun uint8_t ledpin0; 1719*4882a593Smuzhiyun uint8_t ledpin1; 1720*4882a593Smuzhiyun uint8_t ledpin2; 1721*4882a593Smuzhiyun uint8_t padding8_4; 1722*4882a593Smuzhiyun 1723*4882a593Smuzhiyun uint8_t pllgfxclkspreadenabled; 1724*4882a593Smuzhiyun uint8_t pllgfxclkspreadpercent; 1725*4882a593Smuzhiyun uint16_t pllgfxclkspreadfreq; 1726*4882a593Smuzhiyun 1727*4882a593Smuzhiyun uint8_t uclkspreadenabled; 1728*4882a593Smuzhiyun uint8_t uclkspreadpercent; 1729*4882a593Smuzhiyun uint16_t uclkspreadfreq; 1730*4882a593Smuzhiyun 1731*4882a593Smuzhiyun uint8_t fclkspreadenabled; 1732*4882a593Smuzhiyun uint8_t fclkspreadpercent; 1733*4882a593Smuzhiyun uint16_t fclkspreadfreq; 1734*4882a593Smuzhiyun 1735*4882a593Smuzhiyun uint8_t fllgfxclkspreadenabled; 1736*4882a593Smuzhiyun uint8_t fllgfxclkspreadpercent; 1737*4882a593Smuzhiyun uint16_t fllgfxclkspreadfreq; 1738*4882a593Smuzhiyun 1739*4882a593Smuzhiyun uint32_t boardreserved[10]; 1740*4882a593Smuzhiyun }; 1741*4882a593Smuzhiyun 1742*4882a593Smuzhiyun struct smudpm_i2ccontrollerconfig_t { 1743*4882a593Smuzhiyun uint32_t enabled; 1744*4882a593Smuzhiyun uint32_t slaveaddress; 1745*4882a593Smuzhiyun uint32_t controllerport; 1746*4882a593Smuzhiyun uint32_t controllername; 1747*4882a593Smuzhiyun uint32_t thermalthrottler; 1748*4882a593Smuzhiyun uint32_t i2cprotocol; 1749*4882a593Smuzhiyun uint32_t i2cspeed; 1750*4882a593Smuzhiyun }; 1751*4882a593Smuzhiyun 1752*4882a593Smuzhiyun struct atom_smc_dpm_info_v4_4 1753*4882a593Smuzhiyun { 1754*4882a593Smuzhiyun struct atom_common_table_header table_header; 1755*4882a593Smuzhiyun uint32_t i2c_padding[3]; 1756*4882a593Smuzhiyun 1757*4882a593Smuzhiyun uint16_t maxvoltagestepgfx; 1758*4882a593Smuzhiyun uint16_t maxvoltagestepsoc; 1759*4882a593Smuzhiyun 1760*4882a593Smuzhiyun uint8_t vddgfxvrmapping; 1761*4882a593Smuzhiyun uint8_t vddsocvrmapping; 1762*4882a593Smuzhiyun uint8_t vddmem0vrmapping; 1763*4882a593Smuzhiyun uint8_t vddmem1vrmapping; 1764*4882a593Smuzhiyun 1765*4882a593Smuzhiyun uint8_t gfxulvphasesheddingmask; 1766*4882a593Smuzhiyun uint8_t soculvphasesheddingmask; 1767*4882a593Smuzhiyun uint8_t externalsensorpresent; 1768*4882a593Smuzhiyun uint8_t padding8_v; 1769*4882a593Smuzhiyun 1770*4882a593Smuzhiyun uint16_t gfxmaxcurrent; 1771*4882a593Smuzhiyun uint8_t gfxoffset; 1772*4882a593Smuzhiyun uint8_t padding_telemetrygfx; 1773*4882a593Smuzhiyun 1774*4882a593Smuzhiyun uint16_t socmaxcurrent; 1775*4882a593Smuzhiyun uint8_t socoffset; 1776*4882a593Smuzhiyun uint8_t padding_telemetrysoc; 1777*4882a593Smuzhiyun 1778*4882a593Smuzhiyun uint16_t mem0maxcurrent; 1779*4882a593Smuzhiyun uint8_t mem0offset; 1780*4882a593Smuzhiyun uint8_t padding_telemetrymem0; 1781*4882a593Smuzhiyun 1782*4882a593Smuzhiyun uint16_t mem1maxcurrent; 1783*4882a593Smuzhiyun uint8_t mem1offset; 1784*4882a593Smuzhiyun uint8_t padding_telemetrymem1; 1785*4882a593Smuzhiyun 1786*4882a593Smuzhiyun 1787*4882a593Smuzhiyun uint8_t acdcgpio; 1788*4882a593Smuzhiyun uint8_t acdcpolarity; 1789*4882a593Smuzhiyun uint8_t vr0hotgpio; 1790*4882a593Smuzhiyun uint8_t vr0hotpolarity; 1791*4882a593Smuzhiyun 1792*4882a593Smuzhiyun uint8_t vr1hotgpio; 1793*4882a593Smuzhiyun uint8_t vr1hotpolarity; 1794*4882a593Smuzhiyun uint8_t padding1; 1795*4882a593Smuzhiyun uint8_t padding2; 1796*4882a593Smuzhiyun 1797*4882a593Smuzhiyun 1798*4882a593Smuzhiyun uint8_t ledpin0; 1799*4882a593Smuzhiyun uint8_t ledpin1; 1800*4882a593Smuzhiyun uint8_t ledpin2; 1801*4882a593Smuzhiyun uint8_t padding8_4; 1802*4882a593Smuzhiyun 1803*4882a593Smuzhiyun 1804*4882a593Smuzhiyun uint8_t pllgfxclkspreadenabled; 1805*4882a593Smuzhiyun uint8_t pllgfxclkspreadpercent; 1806*4882a593Smuzhiyun uint16_t pllgfxclkspreadfreq; 1807*4882a593Smuzhiyun 1808*4882a593Smuzhiyun 1809*4882a593Smuzhiyun uint8_t uclkspreadenabled; 1810*4882a593Smuzhiyun uint8_t uclkspreadpercent; 1811*4882a593Smuzhiyun uint16_t uclkspreadfreq; 1812*4882a593Smuzhiyun 1813*4882a593Smuzhiyun 1814*4882a593Smuzhiyun uint8_t fclkspreadenabled; 1815*4882a593Smuzhiyun uint8_t fclkspreadpercent; 1816*4882a593Smuzhiyun uint16_t fclkspreadfreq; 1817*4882a593Smuzhiyun 1818*4882a593Smuzhiyun 1819*4882a593Smuzhiyun uint8_t fllgfxclkspreadenabled; 1820*4882a593Smuzhiyun uint8_t fllgfxclkspreadpercent; 1821*4882a593Smuzhiyun uint16_t fllgfxclkspreadfreq; 1822*4882a593Smuzhiyun 1823*4882a593Smuzhiyun 1824*4882a593Smuzhiyun struct smudpm_i2ccontrollerconfig_t i2ccontrollers[7]; 1825*4882a593Smuzhiyun 1826*4882a593Smuzhiyun 1827*4882a593Smuzhiyun uint32_t boardreserved[10]; 1828*4882a593Smuzhiyun }; 1829*4882a593Smuzhiyun 1830*4882a593Smuzhiyun enum smudpm_v4_5_i2ccontrollername_e{ 1831*4882a593Smuzhiyun SMC_V4_5_I2C_CONTROLLER_NAME_VR_GFX = 0, 1832*4882a593Smuzhiyun SMC_V4_5_I2C_CONTROLLER_NAME_VR_SOC, 1833*4882a593Smuzhiyun SMC_V4_5_I2C_CONTROLLER_NAME_VR_VDDCI, 1834*4882a593Smuzhiyun SMC_V4_5_I2C_CONTROLLER_NAME_VR_MVDD, 1835*4882a593Smuzhiyun SMC_V4_5_I2C_CONTROLLER_NAME_LIQUID0, 1836*4882a593Smuzhiyun SMC_V4_5_I2C_CONTROLLER_NAME_LIQUID1, 1837*4882a593Smuzhiyun SMC_V4_5_I2C_CONTROLLER_NAME_PLX, 1838*4882a593Smuzhiyun SMC_V4_5_I2C_CONTROLLER_NAME_SPARE, 1839*4882a593Smuzhiyun SMC_V4_5_I2C_CONTROLLER_NAME_COUNT, 1840*4882a593Smuzhiyun }; 1841*4882a593Smuzhiyun 1842*4882a593Smuzhiyun enum smudpm_v4_5_i2ccontrollerthrottler_e{ 1843*4882a593Smuzhiyun SMC_V4_5_I2C_CONTROLLER_THROTTLER_TYPE_NONE = 0, 1844*4882a593Smuzhiyun SMC_V4_5_I2C_CONTROLLER_THROTTLER_VR_GFX, 1845*4882a593Smuzhiyun SMC_V4_5_I2C_CONTROLLER_THROTTLER_VR_SOC, 1846*4882a593Smuzhiyun SMC_V4_5_I2C_CONTROLLER_THROTTLER_VR_VDDCI, 1847*4882a593Smuzhiyun SMC_V4_5_I2C_CONTROLLER_THROTTLER_VR_MVDD, 1848*4882a593Smuzhiyun SMC_V4_5_I2C_CONTROLLER_THROTTLER_LIQUID0, 1849*4882a593Smuzhiyun SMC_V4_5_I2C_CONTROLLER_THROTTLER_LIQUID1, 1850*4882a593Smuzhiyun SMC_V4_5_I2C_CONTROLLER_THROTTLER_PLX, 1851*4882a593Smuzhiyun SMC_V4_5_I2C_CONTROLLER_THROTTLER_COUNT, 1852*4882a593Smuzhiyun }; 1853*4882a593Smuzhiyun 1854*4882a593Smuzhiyun enum smudpm_v4_5_i2ccontrollerprotocol_e{ 1855*4882a593Smuzhiyun SMC_V4_5_I2C_CONTROLLER_PROTOCOL_VR_0, 1856*4882a593Smuzhiyun SMC_V4_5_I2C_CONTROLLER_PROTOCOL_VR_1, 1857*4882a593Smuzhiyun SMC_V4_5_I2C_CONTROLLER_PROTOCOL_TMP_0, 1858*4882a593Smuzhiyun SMC_V4_5_I2C_CONTROLLER_PROTOCOL_TMP_1, 1859*4882a593Smuzhiyun SMC_V4_5_I2C_CONTROLLER_PROTOCOL_SPARE_0, 1860*4882a593Smuzhiyun SMC_V4_5_I2C_CONTROLLER_PROTOCOL_SPARE_1, 1861*4882a593Smuzhiyun SMC_V4_5_I2C_CONTROLLER_PROTOCOL_COUNT, 1862*4882a593Smuzhiyun }; 1863*4882a593Smuzhiyun 1864*4882a593Smuzhiyun struct smudpm_i2c_controller_config_v2 1865*4882a593Smuzhiyun { 1866*4882a593Smuzhiyun uint8_t Enabled; 1867*4882a593Smuzhiyun uint8_t Speed; 1868*4882a593Smuzhiyun uint8_t Padding[2]; 1869*4882a593Smuzhiyun uint32_t SlaveAddress; 1870*4882a593Smuzhiyun uint8_t ControllerPort; 1871*4882a593Smuzhiyun uint8_t ControllerName; 1872*4882a593Smuzhiyun uint8_t ThermalThrotter; 1873*4882a593Smuzhiyun uint8_t I2cProtocol; 1874*4882a593Smuzhiyun }; 1875*4882a593Smuzhiyun 1876*4882a593Smuzhiyun struct atom_smc_dpm_info_v4_5 1877*4882a593Smuzhiyun { 1878*4882a593Smuzhiyun struct atom_common_table_header table_header; 1879*4882a593Smuzhiyun // SECTION: BOARD PARAMETERS 1880*4882a593Smuzhiyun // I2C Control 1881*4882a593Smuzhiyun struct smudpm_i2c_controller_config_v2 I2cControllers[8]; 1882*4882a593Smuzhiyun 1883*4882a593Smuzhiyun // SVI2 Board Parameters 1884*4882a593Smuzhiyun uint16_t MaxVoltageStepGfx; // In mV(Q2) Max voltage step that SMU will request. Multiple steps are taken if voltage change exceeds this value. 1885*4882a593Smuzhiyun uint16_t MaxVoltageStepSoc; // In mV(Q2) Max voltage step that SMU will request. Multiple steps are taken if voltage change exceeds this value. 1886*4882a593Smuzhiyun 1887*4882a593Smuzhiyun uint8_t VddGfxVrMapping; // Use VR_MAPPING* bitfields 1888*4882a593Smuzhiyun uint8_t VddSocVrMapping; // Use VR_MAPPING* bitfields 1889*4882a593Smuzhiyun uint8_t VddMem0VrMapping; // Use VR_MAPPING* bitfields 1890*4882a593Smuzhiyun uint8_t VddMem1VrMapping; // Use VR_MAPPING* bitfields 1891*4882a593Smuzhiyun 1892*4882a593Smuzhiyun uint8_t GfxUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode 1893*4882a593Smuzhiyun uint8_t SocUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode 1894*4882a593Smuzhiyun uint8_t ExternalSensorPresent; // External RDI connected to TMON (aka TEMP IN) 1895*4882a593Smuzhiyun uint8_t Padding8_V; 1896*4882a593Smuzhiyun 1897*4882a593Smuzhiyun // Telemetry Settings 1898*4882a593Smuzhiyun uint16_t GfxMaxCurrent; // in Amps 1899*4882a593Smuzhiyun uint8_t GfxOffset; // in Amps 1900*4882a593Smuzhiyun uint8_t Padding_TelemetryGfx; 1901*4882a593Smuzhiyun uint16_t SocMaxCurrent; // in Amps 1902*4882a593Smuzhiyun uint8_t SocOffset; // in Amps 1903*4882a593Smuzhiyun uint8_t Padding_TelemetrySoc; 1904*4882a593Smuzhiyun 1905*4882a593Smuzhiyun uint16_t Mem0MaxCurrent; // in Amps 1906*4882a593Smuzhiyun uint8_t Mem0Offset; // in Amps 1907*4882a593Smuzhiyun uint8_t Padding_TelemetryMem0; 1908*4882a593Smuzhiyun 1909*4882a593Smuzhiyun uint16_t Mem1MaxCurrent; // in Amps 1910*4882a593Smuzhiyun uint8_t Mem1Offset; // in Amps 1911*4882a593Smuzhiyun uint8_t Padding_TelemetryMem1; 1912*4882a593Smuzhiyun 1913*4882a593Smuzhiyun // GPIO Settings 1914*4882a593Smuzhiyun uint8_t AcDcGpio; // GPIO pin configured for AC/DC switching 1915*4882a593Smuzhiyun uint8_t AcDcPolarity; // GPIO polarity for AC/DC switching 1916*4882a593Smuzhiyun uint8_t VR0HotGpio; // GPIO pin configured for VR0 HOT event 1917*4882a593Smuzhiyun uint8_t VR0HotPolarity; // GPIO polarity for VR0 HOT event 1918*4882a593Smuzhiyun 1919*4882a593Smuzhiyun uint8_t VR1HotGpio; // GPIO pin configured for VR1 HOT event 1920*4882a593Smuzhiyun uint8_t VR1HotPolarity; // GPIO polarity for VR1 HOT event 1921*4882a593Smuzhiyun uint8_t GthrGpio; // GPIO pin configured for GTHR Event 1922*4882a593Smuzhiyun uint8_t GthrPolarity; // replace GPIO polarity for GTHR 1923*4882a593Smuzhiyun 1924*4882a593Smuzhiyun // LED Display Settings 1925*4882a593Smuzhiyun uint8_t LedPin0; // GPIO number for LedPin[0] 1926*4882a593Smuzhiyun uint8_t LedPin1; // GPIO number for LedPin[1] 1927*4882a593Smuzhiyun uint8_t LedPin2; // GPIO number for LedPin[2] 1928*4882a593Smuzhiyun uint8_t padding8_4; 1929*4882a593Smuzhiyun 1930*4882a593Smuzhiyun // GFXCLK PLL Spread Spectrum 1931*4882a593Smuzhiyun uint8_t PllGfxclkSpreadEnabled; // on or off 1932*4882a593Smuzhiyun uint8_t PllGfxclkSpreadPercent; // Q4.4 1933*4882a593Smuzhiyun uint16_t PllGfxclkSpreadFreq; // kHz 1934*4882a593Smuzhiyun 1935*4882a593Smuzhiyun // GFXCLK DFLL Spread Spectrum 1936*4882a593Smuzhiyun uint8_t DfllGfxclkSpreadEnabled; // on or off 1937*4882a593Smuzhiyun uint8_t DfllGfxclkSpreadPercent; // Q4.4 1938*4882a593Smuzhiyun uint16_t DfllGfxclkSpreadFreq; // kHz 1939*4882a593Smuzhiyun 1940*4882a593Smuzhiyun // UCLK Spread Spectrum 1941*4882a593Smuzhiyun uint8_t UclkSpreadEnabled; // on or off 1942*4882a593Smuzhiyun uint8_t UclkSpreadPercent; // Q4.4 1943*4882a593Smuzhiyun uint16_t UclkSpreadFreq; // kHz 1944*4882a593Smuzhiyun 1945*4882a593Smuzhiyun // SOCCLK Spread Spectrum 1946*4882a593Smuzhiyun uint8_t SoclkSpreadEnabled; // on or off 1947*4882a593Smuzhiyun uint8_t SocclkSpreadPercent; // Q4.4 1948*4882a593Smuzhiyun uint16_t SocclkSpreadFreq; // kHz 1949*4882a593Smuzhiyun 1950*4882a593Smuzhiyun // Total board power 1951*4882a593Smuzhiyun uint16_t TotalBoardPower; //Only needed for TCP Estimated case, where TCP = TGP+Total Board Power 1952*4882a593Smuzhiyun uint16_t BoardPadding; 1953*4882a593Smuzhiyun 1954*4882a593Smuzhiyun // Mvdd Svi2 Div Ratio Setting 1955*4882a593Smuzhiyun uint32_t MvddRatio; // This is used for MVDD Vid workaround. It has 16 fractional bits (Q16.16) 1956*4882a593Smuzhiyun 1957*4882a593Smuzhiyun uint32_t BoardReserved[9]; 1958*4882a593Smuzhiyun 1959*4882a593Smuzhiyun }; 1960*4882a593Smuzhiyun 1961*4882a593Smuzhiyun struct atom_smc_dpm_info_v4_6 1962*4882a593Smuzhiyun { 1963*4882a593Smuzhiyun struct atom_common_table_header table_header; 1964*4882a593Smuzhiyun // section: board parameters 1965*4882a593Smuzhiyun uint32_t i2c_padding[3]; // old i2c control are moved to new area 1966*4882a593Smuzhiyun 1967*4882a593Smuzhiyun uint16_t maxvoltagestepgfx; // in mv(q2) max voltage step that smu will request. multiple steps are taken if voltage change exceeds this value. 1968*4882a593Smuzhiyun uint16_t maxvoltagestepsoc; // in mv(q2) max voltage step that smu will request. multiple steps are taken if voltage change exceeds this value. 1969*4882a593Smuzhiyun 1970*4882a593Smuzhiyun uint8_t vddgfxvrmapping; // use vr_mapping* bitfields 1971*4882a593Smuzhiyun uint8_t vddsocvrmapping; // use vr_mapping* bitfields 1972*4882a593Smuzhiyun uint8_t vddmemvrmapping; // use vr_mapping* bitfields 1973*4882a593Smuzhiyun uint8_t boardvrmapping; // use vr_mapping* bitfields 1974*4882a593Smuzhiyun 1975*4882a593Smuzhiyun uint8_t gfxulvphasesheddingmask; // set this to 1 to set psi0/1 to 1 in ulv mode 1976*4882a593Smuzhiyun uint8_t externalsensorpresent; // external rdi connected to tmon (aka temp in) 1977*4882a593Smuzhiyun uint8_t padding8_v[2]; 1978*4882a593Smuzhiyun 1979*4882a593Smuzhiyun // telemetry settings 1980*4882a593Smuzhiyun uint16_t gfxmaxcurrent; // in amps 1981*4882a593Smuzhiyun uint8_t gfxoffset; // in amps 1982*4882a593Smuzhiyun uint8_t padding_telemetrygfx; 1983*4882a593Smuzhiyun 1984*4882a593Smuzhiyun uint16_t socmaxcurrent; // in amps 1985*4882a593Smuzhiyun uint8_t socoffset; // in amps 1986*4882a593Smuzhiyun uint8_t padding_telemetrysoc; 1987*4882a593Smuzhiyun 1988*4882a593Smuzhiyun uint16_t memmaxcurrent; // in amps 1989*4882a593Smuzhiyun uint8_t memoffset; // in amps 1990*4882a593Smuzhiyun uint8_t padding_telemetrymem; 1991*4882a593Smuzhiyun 1992*4882a593Smuzhiyun uint16_t boardmaxcurrent; // in amps 1993*4882a593Smuzhiyun uint8_t boardoffset; // in amps 1994*4882a593Smuzhiyun uint8_t padding_telemetryboardinput; 1995*4882a593Smuzhiyun 1996*4882a593Smuzhiyun // gpio settings 1997*4882a593Smuzhiyun uint8_t vr0hotgpio; // gpio pin configured for vr0 hot event 1998*4882a593Smuzhiyun uint8_t vr0hotpolarity; // gpio polarity for vr0 hot event 1999*4882a593Smuzhiyun uint8_t vr1hotgpio; // gpio pin configured for vr1 hot event 2000*4882a593Smuzhiyun uint8_t vr1hotpolarity; // gpio polarity for vr1 hot event 2001*4882a593Smuzhiyun 2002*4882a593Smuzhiyun // gfxclk pll spread spectrum 2003*4882a593Smuzhiyun uint8_t pllgfxclkspreadenabled; // on or off 2004*4882a593Smuzhiyun uint8_t pllgfxclkspreadpercent; // q4.4 2005*4882a593Smuzhiyun uint16_t pllgfxclkspreadfreq; // khz 2006*4882a593Smuzhiyun 2007*4882a593Smuzhiyun // uclk spread spectrum 2008*4882a593Smuzhiyun uint8_t uclkspreadenabled; // on or off 2009*4882a593Smuzhiyun uint8_t uclkspreadpercent; // q4.4 2010*4882a593Smuzhiyun uint16_t uclkspreadfreq; // khz 2011*4882a593Smuzhiyun 2012*4882a593Smuzhiyun // fclk spread spectrum 2013*4882a593Smuzhiyun uint8_t fclkspreadenabled; // on or off 2014*4882a593Smuzhiyun uint8_t fclkspreadpercent; // q4.4 2015*4882a593Smuzhiyun uint16_t fclkspreadfreq; // khz 2016*4882a593Smuzhiyun 2017*4882a593Smuzhiyun 2018*4882a593Smuzhiyun // gfxclk fll spread spectrum 2019*4882a593Smuzhiyun uint8_t fllgfxclkspreadenabled; // on or off 2020*4882a593Smuzhiyun uint8_t fllgfxclkspreadpercent; // q4.4 2021*4882a593Smuzhiyun uint16_t fllgfxclkspreadfreq; // khz 2022*4882a593Smuzhiyun 2023*4882a593Smuzhiyun // i2c controller structure 2024*4882a593Smuzhiyun struct smudpm_i2c_controller_config_v2 i2ccontrollers[8]; 2025*4882a593Smuzhiyun 2026*4882a593Smuzhiyun // memory section 2027*4882a593Smuzhiyun uint32_t memorychannelenabled; // for dram use only, max 32 channels enabled bit mask. 2028*4882a593Smuzhiyun 2029*4882a593Smuzhiyun uint8_t drambitwidth; // for dram use only. see dram bit width type defines 2030*4882a593Smuzhiyun uint8_t paddingmem[3]; 2031*4882a593Smuzhiyun 2032*4882a593Smuzhiyun // total board power 2033*4882a593Smuzhiyun uint16_t totalboardpower; //only needed for tcp estimated case, where tcp = tgp+total board power 2034*4882a593Smuzhiyun uint16_t boardpadding; 2035*4882a593Smuzhiyun 2036*4882a593Smuzhiyun // section: xgmi training 2037*4882a593Smuzhiyun uint8_t xgmilinkspeed[4]; 2038*4882a593Smuzhiyun uint8_t xgmilinkwidth[4]; 2039*4882a593Smuzhiyun 2040*4882a593Smuzhiyun uint16_t xgmifclkfreq[4]; 2041*4882a593Smuzhiyun uint16_t xgmisocvoltage[4]; 2042*4882a593Smuzhiyun 2043*4882a593Smuzhiyun // reserved 2044*4882a593Smuzhiyun uint32_t boardreserved[10]; 2045*4882a593Smuzhiyun }; 2046*4882a593Smuzhiyun 2047*4882a593Smuzhiyun struct atom_smc_dpm_info_v4_7 2048*4882a593Smuzhiyun { 2049*4882a593Smuzhiyun struct atom_common_table_header table_header; 2050*4882a593Smuzhiyun // SECTION: BOARD PARAMETERS 2051*4882a593Smuzhiyun // I2C Control 2052*4882a593Smuzhiyun struct smudpm_i2c_controller_config_v2 I2cControllers[8]; 2053*4882a593Smuzhiyun 2054*4882a593Smuzhiyun // SVI2 Board Parameters 2055*4882a593Smuzhiyun uint16_t MaxVoltageStepGfx; // In mV(Q2) Max voltage step that SMU will request. Multiple steps are taken if voltage change exceeds this value. 2056*4882a593Smuzhiyun uint16_t MaxVoltageStepSoc; // In mV(Q2) Max voltage step that SMU will request. Multiple steps are taken if voltage change exceeds this value. 2057*4882a593Smuzhiyun 2058*4882a593Smuzhiyun uint8_t VddGfxVrMapping; // Use VR_MAPPING* bitfields 2059*4882a593Smuzhiyun uint8_t VddSocVrMapping; // Use VR_MAPPING* bitfields 2060*4882a593Smuzhiyun uint8_t VddMem0VrMapping; // Use VR_MAPPING* bitfields 2061*4882a593Smuzhiyun uint8_t VddMem1VrMapping; // Use VR_MAPPING* bitfields 2062*4882a593Smuzhiyun 2063*4882a593Smuzhiyun uint8_t GfxUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode 2064*4882a593Smuzhiyun uint8_t SocUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode 2065*4882a593Smuzhiyun uint8_t ExternalSensorPresent; // External RDI connected to TMON (aka TEMP IN) 2066*4882a593Smuzhiyun uint8_t Padding8_V; 2067*4882a593Smuzhiyun 2068*4882a593Smuzhiyun // Telemetry Settings 2069*4882a593Smuzhiyun uint16_t GfxMaxCurrent; // in Amps 2070*4882a593Smuzhiyun uint8_t GfxOffset; // in Amps 2071*4882a593Smuzhiyun uint8_t Padding_TelemetryGfx; 2072*4882a593Smuzhiyun uint16_t SocMaxCurrent; // in Amps 2073*4882a593Smuzhiyun uint8_t SocOffset; // in Amps 2074*4882a593Smuzhiyun uint8_t Padding_TelemetrySoc; 2075*4882a593Smuzhiyun 2076*4882a593Smuzhiyun uint16_t Mem0MaxCurrent; // in Amps 2077*4882a593Smuzhiyun uint8_t Mem0Offset; // in Amps 2078*4882a593Smuzhiyun uint8_t Padding_TelemetryMem0; 2079*4882a593Smuzhiyun 2080*4882a593Smuzhiyun uint16_t Mem1MaxCurrent; // in Amps 2081*4882a593Smuzhiyun uint8_t Mem1Offset; // in Amps 2082*4882a593Smuzhiyun uint8_t Padding_TelemetryMem1; 2083*4882a593Smuzhiyun 2084*4882a593Smuzhiyun // GPIO Settings 2085*4882a593Smuzhiyun uint8_t AcDcGpio; // GPIO pin configured for AC/DC switching 2086*4882a593Smuzhiyun uint8_t AcDcPolarity; // GPIO polarity for AC/DC switching 2087*4882a593Smuzhiyun uint8_t VR0HotGpio; // GPIO pin configured for VR0 HOT event 2088*4882a593Smuzhiyun uint8_t VR0HotPolarity; // GPIO polarity for VR0 HOT event 2089*4882a593Smuzhiyun 2090*4882a593Smuzhiyun uint8_t VR1HotGpio; // GPIO pin configured for VR1 HOT event 2091*4882a593Smuzhiyun uint8_t VR1HotPolarity; // GPIO polarity for VR1 HOT event 2092*4882a593Smuzhiyun uint8_t GthrGpio; // GPIO pin configured for GTHR Event 2093*4882a593Smuzhiyun uint8_t GthrPolarity; // replace GPIO polarity for GTHR 2094*4882a593Smuzhiyun 2095*4882a593Smuzhiyun // LED Display Settings 2096*4882a593Smuzhiyun uint8_t LedPin0; // GPIO number for LedPin[0] 2097*4882a593Smuzhiyun uint8_t LedPin1; // GPIO number for LedPin[1] 2098*4882a593Smuzhiyun uint8_t LedPin2; // GPIO number for LedPin[2] 2099*4882a593Smuzhiyun uint8_t padding8_4; 2100*4882a593Smuzhiyun 2101*4882a593Smuzhiyun // GFXCLK PLL Spread Spectrum 2102*4882a593Smuzhiyun uint8_t PllGfxclkSpreadEnabled; // on or off 2103*4882a593Smuzhiyun uint8_t PllGfxclkSpreadPercent; // Q4.4 2104*4882a593Smuzhiyun uint16_t PllGfxclkSpreadFreq; // kHz 2105*4882a593Smuzhiyun 2106*4882a593Smuzhiyun // GFXCLK DFLL Spread Spectrum 2107*4882a593Smuzhiyun uint8_t DfllGfxclkSpreadEnabled; // on or off 2108*4882a593Smuzhiyun uint8_t DfllGfxclkSpreadPercent; // Q4.4 2109*4882a593Smuzhiyun uint16_t DfllGfxclkSpreadFreq; // kHz 2110*4882a593Smuzhiyun 2111*4882a593Smuzhiyun // UCLK Spread Spectrum 2112*4882a593Smuzhiyun uint8_t UclkSpreadEnabled; // on or off 2113*4882a593Smuzhiyun uint8_t UclkSpreadPercent; // Q4.4 2114*4882a593Smuzhiyun uint16_t UclkSpreadFreq; // kHz 2115*4882a593Smuzhiyun 2116*4882a593Smuzhiyun // SOCCLK Spread Spectrum 2117*4882a593Smuzhiyun uint8_t SoclkSpreadEnabled; // on or off 2118*4882a593Smuzhiyun uint8_t SocclkSpreadPercent; // Q4.4 2119*4882a593Smuzhiyun uint16_t SocclkSpreadFreq; // kHz 2120*4882a593Smuzhiyun 2121*4882a593Smuzhiyun // Total board power 2122*4882a593Smuzhiyun uint16_t TotalBoardPower; //Only needed for TCP Estimated case, where TCP = TGP+Total Board Power 2123*4882a593Smuzhiyun uint16_t BoardPadding; 2124*4882a593Smuzhiyun 2125*4882a593Smuzhiyun // Mvdd Svi2 Div Ratio Setting 2126*4882a593Smuzhiyun uint32_t MvddRatio; // This is used for MVDD Vid workaround. It has 16 fractional bits (Q16.16) 2127*4882a593Smuzhiyun 2128*4882a593Smuzhiyun // GPIO pins for I2C communications with 2nd controller for Input Telemetry Sequence 2129*4882a593Smuzhiyun uint8_t GpioI2cScl; // Serial Clock 2130*4882a593Smuzhiyun uint8_t GpioI2cSda; // Serial Data 2131*4882a593Smuzhiyun uint16_t GpioPadding; 2132*4882a593Smuzhiyun 2133*4882a593Smuzhiyun // Additional LED Display Settings 2134*4882a593Smuzhiyun uint8_t LedPin3; // GPIO number for LedPin[3] - PCIE GEN Speed 2135*4882a593Smuzhiyun uint8_t LedPin4; // GPIO number for LedPin[4] - PMFW Error Status 2136*4882a593Smuzhiyun uint16_t LedEnableMask; 2137*4882a593Smuzhiyun 2138*4882a593Smuzhiyun // Power Limit Scalars 2139*4882a593Smuzhiyun uint8_t PowerLimitScalar[4]; //[PPT_THROTTLER_COUNT] 2140*4882a593Smuzhiyun 2141*4882a593Smuzhiyun uint8_t MvddUlvPhaseSheddingMask; 2142*4882a593Smuzhiyun uint8_t VddciUlvPhaseSheddingMask; 2143*4882a593Smuzhiyun uint8_t Padding8_Psi1; 2144*4882a593Smuzhiyun uint8_t Padding8_Psi2; 2145*4882a593Smuzhiyun 2146*4882a593Smuzhiyun uint32_t BoardReserved[5]; 2147*4882a593Smuzhiyun }; 2148*4882a593Smuzhiyun 2149*4882a593Smuzhiyun struct smudpm_i2c_controller_config_v3 2150*4882a593Smuzhiyun { 2151*4882a593Smuzhiyun uint8_t Enabled; 2152*4882a593Smuzhiyun uint8_t Speed; 2153*4882a593Smuzhiyun uint8_t SlaveAddress; 2154*4882a593Smuzhiyun uint8_t ControllerPort; 2155*4882a593Smuzhiyun uint8_t ControllerName; 2156*4882a593Smuzhiyun uint8_t ThermalThrotter; 2157*4882a593Smuzhiyun uint8_t I2cProtocol; 2158*4882a593Smuzhiyun uint8_t PaddingConfig; 2159*4882a593Smuzhiyun }; 2160*4882a593Smuzhiyun 2161*4882a593Smuzhiyun struct atom_smc_dpm_info_v4_9 2162*4882a593Smuzhiyun { 2163*4882a593Smuzhiyun struct atom_common_table_header table_header; 2164*4882a593Smuzhiyun 2165*4882a593Smuzhiyun //SECTION: Gaming Clocks 2166*4882a593Smuzhiyun //uint32_t GamingClk[6]; 2167*4882a593Smuzhiyun 2168*4882a593Smuzhiyun // SECTION: I2C Control 2169*4882a593Smuzhiyun struct smudpm_i2c_controller_config_v3 I2cControllers[16]; 2170*4882a593Smuzhiyun 2171*4882a593Smuzhiyun uint8_t GpioScl; // GPIO Number for SCL Line, used only for CKSVII2C1 2172*4882a593Smuzhiyun uint8_t GpioSda; // GPIO Number for SDA Line, used only for CKSVII2C1 2173*4882a593Smuzhiyun uint8_t FchUsbPdSlaveAddr; //For requesting USB PD controller S-states via FCH I2C when entering PME turn off 2174*4882a593Smuzhiyun uint8_t I2cSpare; 2175*4882a593Smuzhiyun 2176*4882a593Smuzhiyun // SECTION: SVI2 Board Parameters 2177*4882a593Smuzhiyun uint8_t VddGfxVrMapping; // Use VR_MAPPING* bitfields 2178*4882a593Smuzhiyun uint8_t VddSocVrMapping; // Use VR_MAPPING* bitfields 2179*4882a593Smuzhiyun uint8_t VddMem0VrMapping; // Use VR_MAPPING* bitfields 2180*4882a593Smuzhiyun uint8_t VddMem1VrMapping; // Use VR_MAPPING* bitfields 2181*4882a593Smuzhiyun 2182*4882a593Smuzhiyun uint8_t GfxUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode 2183*4882a593Smuzhiyun uint8_t SocUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode 2184*4882a593Smuzhiyun uint8_t VddciUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode 2185*4882a593Smuzhiyun uint8_t MvddUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode 2186*4882a593Smuzhiyun 2187*4882a593Smuzhiyun // SECTION: Telemetry Settings 2188*4882a593Smuzhiyun uint16_t GfxMaxCurrent; // in Amps 2189*4882a593Smuzhiyun uint8_t GfxOffset; // in Amps 2190*4882a593Smuzhiyun uint8_t Padding_TelemetryGfx; 2191*4882a593Smuzhiyun 2192*4882a593Smuzhiyun uint16_t SocMaxCurrent; // in Amps 2193*4882a593Smuzhiyun uint8_t SocOffset; // in Amps 2194*4882a593Smuzhiyun uint8_t Padding_TelemetrySoc; 2195*4882a593Smuzhiyun 2196*4882a593Smuzhiyun uint16_t Mem0MaxCurrent; // in Amps 2197*4882a593Smuzhiyun uint8_t Mem0Offset; // in Amps 2198*4882a593Smuzhiyun uint8_t Padding_TelemetryMem0; 2199*4882a593Smuzhiyun 2200*4882a593Smuzhiyun uint16_t Mem1MaxCurrent; // in Amps 2201*4882a593Smuzhiyun uint8_t Mem1Offset; // in Amps 2202*4882a593Smuzhiyun uint8_t Padding_TelemetryMem1; 2203*4882a593Smuzhiyun 2204*4882a593Smuzhiyun uint32_t MvddRatio; // This is used for MVDD Svi2 Div Ratio workaround. It has 16 fractional bits (Q16.16) 2205*4882a593Smuzhiyun 2206*4882a593Smuzhiyun // SECTION: GPIO Settings 2207*4882a593Smuzhiyun uint8_t AcDcGpio; // GPIO pin configured for AC/DC switching 2208*4882a593Smuzhiyun uint8_t AcDcPolarity; // GPIO polarity for AC/DC switching 2209*4882a593Smuzhiyun uint8_t VR0HotGpio; // GPIO pin configured for VR0 HOT event 2210*4882a593Smuzhiyun uint8_t VR0HotPolarity; // GPIO polarity for VR0 HOT event 2211*4882a593Smuzhiyun 2212*4882a593Smuzhiyun uint8_t VR1HotGpio; // GPIO pin configured for VR1 HOT event 2213*4882a593Smuzhiyun uint8_t VR1HotPolarity; // GPIO polarity for VR1 HOT event 2214*4882a593Smuzhiyun uint8_t GthrGpio; // GPIO pin configured for GTHR Event 2215*4882a593Smuzhiyun uint8_t GthrPolarity; // replace GPIO polarity for GTHR 2216*4882a593Smuzhiyun 2217*4882a593Smuzhiyun // LED Display Settings 2218*4882a593Smuzhiyun uint8_t LedPin0; // GPIO number for LedPin[0] 2219*4882a593Smuzhiyun uint8_t LedPin1; // GPIO number for LedPin[1] 2220*4882a593Smuzhiyun uint8_t LedPin2; // GPIO number for LedPin[2] 2221*4882a593Smuzhiyun uint8_t LedEnableMask; 2222*4882a593Smuzhiyun 2223*4882a593Smuzhiyun uint8_t LedPcie; // GPIO number for PCIE results 2224*4882a593Smuzhiyun uint8_t LedError; // GPIO number for Error Cases 2225*4882a593Smuzhiyun uint8_t LedSpare1[2]; 2226*4882a593Smuzhiyun 2227*4882a593Smuzhiyun // SECTION: Clock Spread Spectrum 2228*4882a593Smuzhiyun 2229*4882a593Smuzhiyun // GFXCLK PLL Spread Spectrum 2230*4882a593Smuzhiyun uint8_t PllGfxclkSpreadEnabled; // on or off 2231*4882a593Smuzhiyun uint8_t PllGfxclkSpreadPercent; // Q4.4 2232*4882a593Smuzhiyun uint16_t PllGfxclkSpreadFreq; // kHz 2233*4882a593Smuzhiyun 2234*4882a593Smuzhiyun // GFXCLK DFLL Spread Spectrum 2235*4882a593Smuzhiyun uint8_t DfllGfxclkSpreadEnabled; // on or off 2236*4882a593Smuzhiyun uint8_t DfllGfxclkSpreadPercent; // Q4.4 2237*4882a593Smuzhiyun uint16_t DfllGfxclkSpreadFreq; // kHz 2238*4882a593Smuzhiyun 2239*4882a593Smuzhiyun // UCLK Spread Spectrum 2240*4882a593Smuzhiyun uint8_t UclkSpreadEnabled; // on or off 2241*4882a593Smuzhiyun uint8_t UclkSpreadPercent; // Q4.4 2242*4882a593Smuzhiyun uint16_t UclkSpreadFreq; // kHz 2243*4882a593Smuzhiyun 2244*4882a593Smuzhiyun // FCLK Spread Spectrum 2245*4882a593Smuzhiyun uint8_t FclkSpreadEnabled; // on or off 2246*4882a593Smuzhiyun uint8_t FclkSpreadPercent; // Q4.4 2247*4882a593Smuzhiyun uint16_t FclkSpreadFreq; // kHz 2248*4882a593Smuzhiyun 2249*4882a593Smuzhiyun // Section: Memory Config 2250*4882a593Smuzhiyun uint32_t MemoryChannelEnabled; // For DRAM use only, Max 32 channels enabled bit mask. 2251*4882a593Smuzhiyun 2252*4882a593Smuzhiyun uint8_t DramBitWidth; // For DRAM use only. See Dram Bit width type defines 2253*4882a593Smuzhiyun uint8_t PaddingMem1[3]; 2254*4882a593Smuzhiyun 2255*4882a593Smuzhiyun // Section: Total Board Power 2256*4882a593Smuzhiyun uint16_t TotalBoardPower; //Only needed for TCP Estimated case, where TCP = TGP+Total Board Power 2257*4882a593Smuzhiyun uint16_t BoardPowerPadding; 2258*4882a593Smuzhiyun 2259*4882a593Smuzhiyun // SECTION: XGMI Training 2260*4882a593Smuzhiyun uint8_t XgmiLinkSpeed [4]; 2261*4882a593Smuzhiyun uint8_t XgmiLinkWidth [4]; 2262*4882a593Smuzhiyun 2263*4882a593Smuzhiyun uint16_t XgmiFclkFreq [4]; 2264*4882a593Smuzhiyun uint16_t XgmiSocVoltage [4]; 2265*4882a593Smuzhiyun 2266*4882a593Smuzhiyun // SECTION: Board Reserved 2267*4882a593Smuzhiyun 2268*4882a593Smuzhiyun uint32_t BoardReserved[16]; 2269*4882a593Smuzhiyun 2270*4882a593Smuzhiyun }; 2271*4882a593Smuzhiyun 2272*4882a593Smuzhiyun /* 2273*4882a593Smuzhiyun *************************************************************************** 2274*4882a593Smuzhiyun Data Table asic_profiling_info structure 2275*4882a593Smuzhiyun *************************************************************************** 2276*4882a593Smuzhiyun */ 2277*4882a593Smuzhiyun struct atom_asic_profiling_info_v4_1 2278*4882a593Smuzhiyun { 2279*4882a593Smuzhiyun struct atom_common_table_header table_header; 2280*4882a593Smuzhiyun uint32_t maxvddc; 2281*4882a593Smuzhiyun uint32_t minvddc; 2282*4882a593Smuzhiyun uint32_t avfs_meannsigma_acontant0; 2283*4882a593Smuzhiyun uint32_t avfs_meannsigma_acontant1; 2284*4882a593Smuzhiyun uint32_t avfs_meannsigma_acontant2; 2285*4882a593Smuzhiyun uint16_t avfs_meannsigma_dc_tol_sigma; 2286*4882a593Smuzhiyun uint16_t avfs_meannsigma_platform_mean; 2287*4882a593Smuzhiyun uint16_t avfs_meannsigma_platform_sigma; 2288*4882a593Smuzhiyun uint32_t gb_vdroop_table_cksoff_a0; 2289*4882a593Smuzhiyun uint32_t gb_vdroop_table_cksoff_a1; 2290*4882a593Smuzhiyun uint32_t gb_vdroop_table_cksoff_a2; 2291*4882a593Smuzhiyun uint32_t gb_vdroop_table_ckson_a0; 2292*4882a593Smuzhiyun uint32_t gb_vdroop_table_ckson_a1; 2293*4882a593Smuzhiyun uint32_t gb_vdroop_table_ckson_a2; 2294*4882a593Smuzhiyun uint32_t avfsgb_fuse_table_cksoff_m1; 2295*4882a593Smuzhiyun uint32_t avfsgb_fuse_table_cksoff_m2; 2296*4882a593Smuzhiyun uint32_t avfsgb_fuse_table_cksoff_b; 2297*4882a593Smuzhiyun uint32_t avfsgb_fuse_table_ckson_m1; 2298*4882a593Smuzhiyun uint32_t avfsgb_fuse_table_ckson_m2; 2299*4882a593Smuzhiyun uint32_t avfsgb_fuse_table_ckson_b; 2300*4882a593Smuzhiyun uint16_t max_voltage_0_25mv; 2301*4882a593Smuzhiyun uint8_t enable_gb_vdroop_table_cksoff; 2302*4882a593Smuzhiyun uint8_t enable_gb_vdroop_table_ckson; 2303*4882a593Smuzhiyun uint8_t enable_gb_fuse_table_cksoff; 2304*4882a593Smuzhiyun uint8_t enable_gb_fuse_table_ckson; 2305*4882a593Smuzhiyun uint16_t psm_age_comfactor; 2306*4882a593Smuzhiyun uint8_t enable_apply_avfs_cksoff_voltage; 2307*4882a593Smuzhiyun uint8_t reserved; 2308*4882a593Smuzhiyun uint32_t dispclk2gfxclk_a; 2309*4882a593Smuzhiyun uint32_t dispclk2gfxclk_b; 2310*4882a593Smuzhiyun uint32_t dispclk2gfxclk_c; 2311*4882a593Smuzhiyun uint32_t pixclk2gfxclk_a; 2312*4882a593Smuzhiyun uint32_t pixclk2gfxclk_b; 2313*4882a593Smuzhiyun uint32_t pixclk2gfxclk_c; 2314*4882a593Smuzhiyun uint32_t dcefclk2gfxclk_a; 2315*4882a593Smuzhiyun uint32_t dcefclk2gfxclk_b; 2316*4882a593Smuzhiyun uint32_t dcefclk2gfxclk_c; 2317*4882a593Smuzhiyun uint32_t phyclk2gfxclk_a; 2318*4882a593Smuzhiyun uint32_t phyclk2gfxclk_b; 2319*4882a593Smuzhiyun uint32_t phyclk2gfxclk_c; 2320*4882a593Smuzhiyun }; 2321*4882a593Smuzhiyun 2322*4882a593Smuzhiyun struct atom_asic_profiling_info_v4_2 { 2323*4882a593Smuzhiyun struct atom_common_table_header table_header; 2324*4882a593Smuzhiyun uint32_t maxvddc; 2325*4882a593Smuzhiyun uint32_t minvddc; 2326*4882a593Smuzhiyun uint32_t avfs_meannsigma_acontant0; 2327*4882a593Smuzhiyun uint32_t avfs_meannsigma_acontant1; 2328*4882a593Smuzhiyun uint32_t avfs_meannsigma_acontant2; 2329*4882a593Smuzhiyun uint16_t avfs_meannsigma_dc_tol_sigma; 2330*4882a593Smuzhiyun uint16_t avfs_meannsigma_platform_mean; 2331*4882a593Smuzhiyun uint16_t avfs_meannsigma_platform_sigma; 2332*4882a593Smuzhiyun uint32_t gb_vdroop_table_cksoff_a0; 2333*4882a593Smuzhiyun uint32_t gb_vdroop_table_cksoff_a1; 2334*4882a593Smuzhiyun uint32_t gb_vdroop_table_cksoff_a2; 2335*4882a593Smuzhiyun uint32_t gb_vdroop_table_ckson_a0; 2336*4882a593Smuzhiyun uint32_t gb_vdroop_table_ckson_a1; 2337*4882a593Smuzhiyun uint32_t gb_vdroop_table_ckson_a2; 2338*4882a593Smuzhiyun uint32_t avfsgb_fuse_table_cksoff_m1; 2339*4882a593Smuzhiyun uint32_t avfsgb_fuse_table_cksoff_m2; 2340*4882a593Smuzhiyun uint32_t avfsgb_fuse_table_cksoff_b; 2341*4882a593Smuzhiyun uint32_t avfsgb_fuse_table_ckson_m1; 2342*4882a593Smuzhiyun uint32_t avfsgb_fuse_table_ckson_m2; 2343*4882a593Smuzhiyun uint32_t avfsgb_fuse_table_ckson_b; 2344*4882a593Smuzhiyun uint16_t max_voltage_0_25mv; 2345*4882a593Smuzhiyun uint8_t enable_gb_vdroop_table_cksoff; 2346*4882a593Smuzhiyun uint8_t enable_gb_vdroop_table_ckson; 2347*4882a593Smuzhiyun uint8_t enable_gb_fuse_table_cksoff; 2348*4882a593Smuzhiyun uint8_t enable_gb_fuse_table_ckson; 2349*4882a593Smuzhiyun uint16_t psm_age_comfactor; 2350*4882a593Smuzhiyun uint8_t enable_apply_avfs_cksoff_voltage; 2351*4882a593Smuzhiyun uint8_t reserved; 2352*4882a593Smuzhiyun uint32_t dispclk2gfxclk_a; 2353*4882a593Smuzhiyun uint32_t dispclk2gfxclk_b; 2354*4882a593Smuzhiyun uint32_t dispclk2gfxclk_c; 2355*4882a593Smuzhiyun uint32_t pixclk2gfxclk_a; 2356*4882a593Smuzhiyun uint32_t pixclk2gfxclk_b; 2357*4882a593Smuzhiyun uint32_t pixclk2gfxclk_c; 2358*4882a593Smuzhiyun uint32_t dcefclk2gfxclk_a; 2359*4882a593Smuzhiyun uint32_t dcefclk2gfxclk_b; 2360*4882a593Smuzhiyun uint32_t dcefclk2gfxclk_c; 2361*4882a593Smuzhiyun uint32_t phyclk2gfxclk_a; 2362*4882a593Smuzhiyun uint32_t phyclk2gfxclk_b; 2363*4882a593Smuzhiyun uint32_t phyclk2gfxclk_c; 2364*4882a593Smuzhiyun uint32_t acg_gb_vdroop_table_a0; 2365*4882a593Smuzhiyun uint32_t acg_gb_vdroop_table_a1; 2366*4882a593Smuzhiyun uint32_t acg_gb_vdroop_table_a2; 2367*4882a593Smuzhiyun uint32_t acg_avfsgb_fuse_table_m1; 2368*4882a593Smuzhiyun uint32_t acg_avfsgb_fuse_table_m2; 2369*4882a593Smuzhiyun uint32_t acg_avfsgb_fuse_table_b; 2370*4882a593Smuzhiyun uint8_t enable_acg_gb_vdroop_table; 2371*4882a593Smuzhiyun uint8_t enable_acg_gb_fuse_table; 2372*4882a593Smuzhiyun uint32_t acg_dispclk2gfxclk_a; 2373*4882a593Smuzhiyun uint32_t acg_dispclk2gfxclk_b; 2374*4882a593Smuzhiyun uint32_t acg_dispclk2gfxclk_c; 2375*4882a593Smuzhiyun uint32_t acg_pixclk2gfxclk_a; 2376*4882a593Smuzhiyun uint32_t acg_pixclk2gfxclk_b; 2377*4882a593Smuzhiyun uint32_t acg_pixclk2gfxclk_c; 2378*4882a593Smuzhiyun uint32_t acg_dcefclk2gfxclk_a; 2379*4882a593Smuzhiyun uint32_t acg_dcefclk2gfxclk_b; 2380*4882a593Smuzhiyun uint32_t acg_dcefclk2gfxclk_c; 2381*4882a593Smuzhiyun uint32_t acg_phyclk2gfxclk_a; 2382*4882a593Smuzhiyun uint32_t acg_phyclk2gfxclk_b; 2383*4882a593Smuzhiyun uint32_t acg_phyclk2gfxclk_c; 2384*4882a593Smuzhiyun }; 2385*4882a593Smuzhiyun 2386*4882a593Smuzhiyun /* 2387*4882a593Smuzhiyun *************************************************************************** 2388*4882a593Smuzhiyun Data Table multimedia_info structure 2389*4882a593Smuzhiyun *************************************************************************** 2390*4882a593Smuzhiyun */ 2391*4882a593Smuzhiyun struct atom_multimedia_info_v2_1 2392*4882a593Smuzhiyun { 2393*4882a593Smuzhiyun struct atom_common_table_header table_header; 2394*4882a593Smuzhiyun uint8_t uvdip_min_ver; 2395*4882a593Smuzhiyun uint8_t uvdip_max_ver; 2396*4882a593Smuzhiyun uint8_t vceip_min_ver; 2397*4882a593Smuzhiyun uint8_t vceip_max_ver; 2398*4882a593Smuzhiyun uint16_t uvd_enc_max_input_width_pixels; 2399*4882a593Smuzhiyun uint16_t uvd_enc_max_input_height_pixels; 2400*4882a593Smuzhiyun uint16_t vce_enc_max_input_width_pixels; 2401*4882a593Smuzhiyun uint16_t vce_enc_max_input_height_pixels; 2402*4882a593Smuzhiyun uint32_t uvd_enc_max_bandwidth; // 16x16 pixels/sec, codec independent 2403*4882a593Smuzhiyun uint32_t vce_enc_max_bandwidth; // 16x16 pixels/sec, codec independent 2404*4882a593Smuzhiyun }; 2405*4882a593Smuzhiyun 2406*4882a593Smuzhiyun 2407*4882a593Smuzhiyun /* 2408*4882a593Smuzhiyun *************************************************************************** 2409*4882a593Smuzhiyun Data Table umc_info structure 2410*4882a593Smuzhiyun *************************************************************************** 2411*4882a593Smuzhiyun */ 2412*4882a593Smuzhiyun struct atom_umc_info_v3_1 2413*4882a593Smuzhiyun { 2414*4882a593Smuzhiyun struct atom_common_table_header table_header; 2415*4882a593Smuzhiyun uint32_t ucode_version; 2416*4882a593Smuzhiyun uint32_t ucode_rom_startaddr; 2417*4882a593Smuzhiyun uint32_t ucode_length; 2418*4882a593Smuzhiyun uint16_t umc_reg_init_offset; 2419*4882a593Smuzhiyun uint16_t customer_ucode_name_offset; 2420*4882a593Smuzhiyun uint16_t mclk_ss_percentage; 2421*4882a593Smuzhiyun uint16_t mclk_ss_rate_10hz; 2422*4882a593Smuzhiyun uint8_t umcip_min_ver; 2423*4882a593Smuzhiyun uint8_t umcip_max_ver; 2424*4882a593Smuzhiyun uint8_t vram_type; //enum of atom_dgpu_vram_type 2425*4882a593Smuzhiyun uint8_t umc_config; 2426*4882a593Smuzhiyun uint32_t mem_refclk_10khz; 2427*4882a593Smuzhiyun }; 2428*4882a593Smuzhiyun 2429*4882a593Smuzhiyun // umc_info.umc_config 2430*4882a593Smuzhiyun enum atom_umc_config_def { 2431*4882a593Smuzhiyun UMC_CONFIG__ENABLE_1KB_INTERLEAVE_MODE = 0x00000001, 2432*4882a593Smuzhiyun UMC_CONFIG__DEFAULT_MEM_ECC_ENABLE = 0x00000002, 2433*4882a593Smuzhiyun UMC_CONFIG__ENABLE_HBM_LANE_REPAIR = 0x00000004, 2434*4882a593Smuzhiyun UMC_CONFIG__ENABLE_BANK_HARVESTING = 0x00000008, 2435*4882a593Smuzhiyun UMC_CONFIG__ENABLE_PHY_REINIT = 0x00000010, 2436*4882a593Smuzhiyun UMC_CONFIG__DISABLE_UCODE_CHKSTATUS = 0x00000020, 2437*4882a593Smuzhiyun }; 2438*4882a593Smuzhiyun 2439*4882a593Smuzhiyun struct atom_umc_info_v3_2 2440*4882a593Smuzhiyun { 2441*4882a593Smuzhiyun struct atom_common_table_header table_header; 2442*4882a593Smuzhiyun uint32_t ucode_version; 2443*4882a593Smuzhiyun uint32_t ucode_rom_startaddr; 2444*4882a593Smuzhiyun uint32_t ucode_length; 2445*4882a593Smuzhiyun uint16_t umc_reg_init_offset; 2446*4882a593Smuzhiyun uint16_t customer_ucode_name_offset; 2447*4882a593Smuzhiyun uint16_t mclk_ss_percentage; 2448*4882a593Smuzhiyun uint16_t mclk_ss_rate_10hz; 2449*4882a593Smuzhiyun uint8_t umcip_min_ver; 2450*4882a593Smuzhiyun uint8_t umcip_max_ver; 2451*4882a593Smuzhiyun uint8_t vram_type; //enum of atom_dgpu_vram_type 2452*4882a593Smuzhiyun uint8_t umc_config; 2453*4882a593Smuzhiyun uint32_t mem_refclk_10khz; 2454*4882a593Smuzhiyun uint32_t pstate_uclk_10khz[4]; 2455*4882a593Smuzhiyun uint16_t umcgoldenoffset; 2456*4882a593Smuzhiyun uint16_t densitygoldenoffset; 2457*4882a593Smuzhiyun }; 2458*4882a593Smuzhiyun 2459*4882a593Smuzhiyun struct atom_umc_info_v3_3 2460*4882a593Smuzhiyun { 2461*4882a593Smuzhiyun struct atom_common_table_header table_header; 2462*4882a593Smuzhiyun uint32_t ucode_reserved; 2463*4882a593Smuzhiyun uint32_t ucode_rom_startaddr; 2464*4882a593Smuzhiyun uint32_t ucode_length; 2465*4882a593Smuzhiyun uint16_t umc_reg_init_offset; 2466*4882a593Smuzhiyun uint16_t customer_ucode_name_offset; 2467*4882a593Smuzhiyun uint16_t mclk_ss_percentage; 2468*4882a593Smuzhiyun uint16_t mclk_ss_rate_10hz; 2469*4882a593Smuzhiyun uint8_t umcip_min_ver; 2470*4882a593Smuzhiyun uint8_t umcip_max_ver; 2471*4882a593Smuzhiyun uint8_t vram_type; //enum of atom_dgpu_vram_type 2472*4882a593Smuzhiyun uint8_t umc_config; 2473*4882a593Smuzhiyun uint32_t mem_refclk_10khz; 2474*4882a593Smuzhiyun uint32_t pstate_uclk_10khz[4]; 2475*4882a593Smuzhiyun uint16_t umcgoldenoffset; 2476*4882a593Smuzhiyun uint16_t densitygoldenoffset; 2477*4882a593Smuzhiyun uint32_t reserved[4]; 2478*4882a593Smuzhiyun }; 2479*4882a593Smuzhiyun 2480*4882a593Smuzhiyun /* 2481*4882a593Smuzhiyun *************************************************************************** 2482*4882a593Smuzhiyun Data Table vram_info structure 2483*4882a593Smuzhiyun *************************************************************************** 2484*4882a593Smuzhiyun */ 2485*4882a593Smuzhiyun struct atom_vram_module_v9 { 2486*4882a593Smuzhiyun // Design Specific Values 2487*4882a593Smuzhiyun uint32_t memory_size; // Total memory size in unit of MB for CONFIG_MEMSIZE zeros 2488*4882a593Smuzhiyun uint32_t channel_enable; // bit vector, each bit indicate specific channel enable or not 2489*4882a593Smuzhiyun uint32_t max_mem_clk; // max memory clock of this memory in unit of 10kHz, =0 means it is not defined 2490*4882a593Smuzhiyun uint16_t reserved[3]; 2491*4882a593Smuzhiyun uint16_t mem_voltage; // mem_voltage 2492*4882a593Smuzhiyun uint16_t vram_module_size; // Size of atom_vram_module_v9 2493*4882a593Smuzhiyun uint8_t ext_memory_id; // Current memory module ID 2494*4882a593Smuzhiyun uint8_t memory_type; // enum of atom_dgpu_vram_type 2495*4882a593Smuzhiyun uint8_t channel_num; // Number of mem. channels supported in this module 2496*4882a593Smuzhiyun uint8_t channel_width; // CHANNEL_16BIT/CHANNEL_32BIT/CHANNEL_64BIT 2497*4882a593Smuzhiyun uint8_t density; // _8Mx32, _16Mx32, _16Mx16, _32Mx16 2498*4882a593Smuzhiyun uint8_t tunningset_id; // MC phy registers set per. 2499*4882a593Smuzhiyun uint8_t vender_rev_id; // [7:4] Revision, [3:0] Vendor code 2500*4882a593Smuzhiyun uint8_t refreshrate; // [1:0]=RefreshFactor (00=8ms, 01=16ms, 10=32ms,11=64ms) 2501*4882a593Smuzhiyun uint8_t hbm_ven_rev_id; // hbm_ven_rev_id 2502*4882a593Smuzhiyun uint8_t vram_rsd2; // reserved 2503*4882a593Smuzhiyun char dram_pnstring[20]; // part number end with '0'. 2504*4882a593Smuzhiyun }; 2505*4882a593Smuzhiyun 2506*4882a593Smuzhiyun struct atom_vram_info_header_v2_3 { 2507*4882a593Smuzhiyun struct atom_common_table_header table_header; 2508*4882a593Smuzhiyun uint16_t mem_adjust_tbloffset; // offset of atom_umc_init_reg_block structure for memory vendor specific UMC adjust setting 2509*4882a593Smuzhiyun uint16_t mem_clk_patch_tbloffset; // offset of atom_umc_init_reg_block structure for memory clock specific UMC setting 2510*4882a593Smuzhiyun uint16_t mc_adjust_pertile_tbloffset; // offset of atom_umc_init_reg_block structure for Per Byte Offset Preset Settings 2511*4882a593Smuzhiyun uint16_t mc_phyinit_tbloffset; // offset of atom_umc_init_reg_block structure for MC phy init set 2512*4882a593Smuzhiyun uint16_t dram_data_remap_tbloffset; // reserved for now 2513*4882a593Smuzhiyun uint16_t tmrs_seq_offset; // offset of HBM tmrs 2514*4882a593Smuzhiyun uint16_t post_ucode_init_offset; // offset of atom_umc_init_reg_block structure for MC phy init after MC uCode complete umc init 2515*4882a593Smuzhiyun uint16_t vram_rsd2; 2516*4882a593Smuzhiyun uint8_t vram_module_num; // indicate number of VRAM module 2517*4882a593Smuzhiyun uint8_t umcip_min_ver; 2518*4882a593Smuzhiyun uint8_t umcip_max_ver; 2519*4882a593Smuzhiyun uint8_t mc_phy_tile_num; // indicate the MCD tile number which use in DramDataRemapTbl and usMcAdjustPerTileTblOffset 2520*4882a593Smuzhiyun struct atom_vram_module_v9 vram_module[16]; // just for allocation, real number of blocks is in ucNumOfVRAMModule; 2521*4882a593Smuzhiyun }; 2522*4882a593Smuzhiyun 2523*4882a593Smuzhiyun struct atom_umc_register_addr_info{ 2524*4882a593Smuzhiyun uint32_t umc_register_addr:24; 2525*4882a593Smuzhiyun uint32_t umc_reg_type_ind:1; 2526*4882a593Smuzhiyun uint32_t umc_reg_rsvd:7; 2527*4882a593Smuzhiyun }; 2528*4882a593Smuzhiyun 2529*4882a593Smuzhiyun //atom_umc_register_addr_info. 2530*4882a593Smuzhiyun enum atom_umc_register_addr_info_flag{ 2531*4882a593Smuzhiyun b3ATOM_UMC_REG_ADD_INFO_INDIRECT_ACCESS =0x01, 2532*4882a593Smuzhiyun }; 2533*4882a593Smuzhiyun 2534*4882a593Smuzhiyun union atom_umc_register_addr_info_access 2535*4882a593Smuzhiyun { 2536*4882a593Smuzhiyun struct atom_umc_register_addr_info umc_reg_addr; 2537*4882a593Smuzhiyun uint32_t u32umc_reg_addr; 2538*4882a593Smuzhiyun }; 2539*4882a593Smuzhiyun 2540*4882a593Smuzhiyun struct atom_umc_reg_setting_id_config{ 2541*4882a593Smuzhiyun uint32_t memclockrange:24; 2542*4882a593Smuzhiyun uint32_t mem_blk_id:8; 2543*4882a593Smuzhiyun }; 2544*4882a593Smuzhiyun 2545*4882a593Smuzhiyun union atom_umc_reg_setting_id_config_access 2546*4882a593Smuzhiyun { 2547*4882a593Smuzhiyun struct atom_umc_reg_setting_id_config umc_id_access; 2548*4882a593Smuzhiyun uint32_t u32umc_id_access; 2549*4882a593Smuzhiyun }; 2550*4882a593Smuzhiyun 2551*4882a593Smuzhiyun struct atom_umc_reg_setting_data_block{ 2552*4882a593Smuzhiyun union atom_umc_reg_setting_id_config_access block_id; 2553*4882a593Smuzhiyun uint32_t u32umc_reg_data[1]; 2554*4882a593Smuzhiyun }; 2555*4882a593Smuzhiyun 2556*4882a593Smuzhiyun struct atom_umc_init_reg_block{ 2557*4882a593Smuzhiyun uint16_t umc_reg_num; 2558*4882a593Smuzhiyun uint16_t reserved; 2559*4882a593Smuzhiyun union atom_umc_register_addr_info_access umc_reg_list[1]; //for allocation purpose, the real number come from umc_reg_num; 2560*4882a593Smuzhiyun struct atom_umc_reg_setting_data_block umc_reg_setting_list[1]; 2561*4882a593Smuzhiyun }; 2562*4882a593Smuzhiyun 2563*4882a593Smuzhiyun struct atom_vram_module_v10 { 2564*4882a593Smuzhiyun // Design Specific Values 2565*4882a593Smuzhiyun uint32_t memory_size; // Total memory size in unit of MB for CONFIG_MEMSIZE zeros 2566*4882a593Smuzhiyun uint32_t channel_enable; // bit vector, each bit indicate specific channel enable or not 2567*4882a593Smuzhiyun uint32_t max_mem_clk; // max memory clock of this memory in unit of 10kHz, =0 means it is not defined 2568*4882a593Smuzhiyun uint16_t reserved[3]; 2569*4882a593Smuzhiyun uint16_t mem_voltage; // mem_voltage 2570*4882a593Smuzhiyun uint16_t vram_module_size; // Size of atom_vram_module_v9 2571*4882a593Smuzhiyun uint8_t ext_memory_id; // Current memory module ID 2572*4882a593Smuzhiyun uint8_t memory_type; // enum of atom_dgpu_vram_type 2573*4882a593Smuzhiyun uint8_t channel_num; // Number of mem. channels supported in this module 2574*4882a593Smuzhiyun uint8_t channel_width; // CHANNEL_16BIT/CHANNEL_32BIT/CHANNEL_64BIT 2575*4882a593Smuzhiyun uint8_t density; // _8Mx32, _16Mx32, _16Mx16, _32Mx16 2576*4882a593Smuzhiyun uint8_t tunningset_id; // MC phy registers set per 2577*4882a593Smuzhiyun uint8_t vender_rev_id; // [7:4] Revision, [3:0] Vendor code 2578*4882a593Smuzhiyun uint8_t refreshrate; // [1:0]=RefreshFactor (00=8ms, 01=16ms, 10=32ms,11=64ms) 2579*4882a593Smuzhiyun uint8_t vram_flags; // bit0= bankgroup enable 2580*4882a593Smuzhiyun uint8_t vram_rsd2; // reserved 2581*4882a593Smuzhiyun uint16_t gddr6_mr10; // gddr6 mode register10 value 2582*4882a593Smuzhiyun uint16_t gddr6_mr1; // gddr6 mode register1 value 2583*4882a593Smuzhiyun uint16_t gddr6_mr2; // gddr6 mode register2 value 2584*4882a593Smuzhiyun uint16_t gddr6_mr7; // gddr6 mode register7 value 2585*4882a593Smuzhiyun char dram_pnstring[20]; // part number end with '0' 2586*4882a593Smuzhiyun }; 2587*4882a593Smuzhiyun 2588*4882a593Smuzhiyun struct atom_vram_info_header_v2_4 { 2589*4882a593Smuzhiyun struct atom_common_table_header table_header; 2590*4882a593Smuzhiyun uint16_t mem_adjust_tbloffset; // offset of atom_umc_init_reg_block structure for memory vendor specific UMC adjust setting 2591*4882a593Smuzhiyun uint16_t mem_clk_patch_tbloffset; // offset of atom_umc_init_reg_block structure for memory clock specific UMC setting 2592*4882a593Smuzhiyun uint16_t mc_adjust_pertile_tbloffset; // offset of atom_umc_init_reg_block structure for Per Byte Offset Preset Settings 2593*4882a593Smuzhiyun uint16_t mc_phyinit_tbloffset; // offset of atom_umc_init_reg_block structure for MC phy init set 2594*4882a593Smuzhiyun uint16_t dram_data_remap_tbloffset; // reserved for now 2595*4882a593Smuzhiyun uint16_t reserved; // offset of reserved 2596*4882a593Smuzhiyun uint16_t post_ucode_init_offset; // offset of atom_umc_init_reg_block structure for MC phy init after MC uCode complete umc init 2597*4882a593Smuzhiyun uint16_t vram_rsd2; 2598*4882a593Smuzhiyun uint8_t vram_module_num; // indicate number of VRAM module 2599*4882a593Smuzhiyun uint8_t umcip_min_ver; 2600*4882a593Smuzhiyun uint8_t umcip_max_ver; 2601*4882a593Smuzhiyun uint8_t mc_phy_tile_num; // indicate the MCD tile number which use in DramDataRemapTbl and usMcAdjustPerTileTblOffset 2602*4882a593Smuzhiyun struct atom_vram_module_v10 vram_module[16]; // just for allocation, real number of blocks is in ucNumOfVRAMModule; 2603*4882a593Smuzhiyun }; 2604*4882a593Smuzhiyun 2605*4882a593Smuzhiyun struct atom_vram_module_v11 { 2606*4882a593Smuzhiyun // Design Specific Values 2607*4882a593Smuzhiyun uint32_t memory_size; // Total memory size in unit of MB for CONFIG_MEMSIZE zeros 2608*4882a593Smuzhiyun uint32_t channel_enable; // bit vector, each bit indicate specific channel enable or not 2609*4882a593Smuzhiyun uint16_t mem_voltage; // mem_voltage 2610*4882a593Smuzhiyun uint16_t vram_module_size; // Size of atom_vram_module_v9 2611*4882a593Smuzhiyun uint8_t ext_memory_id; // Current memory module ID 2612*4882a593Smuzhiyun uint8_t memory_type; // enum of atom_dgpu_vram_type 2613*4882a593Smuzhiyun uint8_t channel_num; // Number of mem. channels supported in this module 2614*4882a593Smuzhiyun uint8_t channel_width; // CHANNEL_16BIT/CHANNEL_32BIT/CHANNEL_64BIT 2615*4882a593Smuzhiyun uint8_t density; // _8Mx32, _16Mx32, _16Mx16, _32Mx16 2616*4882a593Smuzhiyun uint8_t tunningset_id; // MC phy registers set per. 2617*4882a593Smuzhiyun uint16_t reserved[4]; // reserved 2618*4882a593Smuzhiyun uint8_t vender_rev_id; // [7:4] Revision, [3:0] Vendor code 2619*4882a593Smuzhiyun uint8_t refreshrate; // [1:0]=RefreshFactor (00=8ms, 01=16ms, 10=32ms,11=64ms) 2620*4882a593Smuzhiyun uint8_t vram_flags; // bit0= bankgroup enable 2621*4882a593Smuzhiyun uint8_t vram_rsd2; // reserved 2622*4882a593Smuzhiyun uint16_t gddr6_mr10; // gddr6 mode register10 value 2623*4882a593Smuzhiyun uint16_t gddr6_mr0; // gddr6 mode register0 value 2624*4882a593Smuzhiyun uint16_t gddr6_mr1; // gddr6 mode register1 value 2625*4882a593Smuzhiyun uint16_t gddr6_mr2; // gddr6 mode register2 value 2626*4882a593Smuzhiyun uint16_t gddr6_mr4; // gddr6 mode register4 value 2627*4882a593Smuzhiyun uint16_t gddr6_mr7; // gddr6 mode register7 value 2628*4882a593Smuzhiyun uint16_t gddr6_mr8; // gddr6 mode register8 value 2629*4882a593Smuzhiyun char dram_pnstring[40]; // part number end with '0'. 2630*4882a593Smuzhiyun }; 2631*4882a593Smuzhiyun 2632*4882a593Smuzhiyun struct atom_gddr6_ac_timing_v2_5 { 2633*4882a593Smuzhiyun uint32_t u32umc_id_access; 2634*4882a593Smuzhiyun uint8_t RL; 2635*4882a593Smuzhiyun uint8_t WL; 2636*4882a593Smuzhiyun uint8_t tRAS; 2637*4882a593Smuzhiyun uint8_t tRC; 2638*4882a593Smuzhiyun 2639*4882a593Smuzhiyun uint16_t tREFI; 2640*4882a593Smuzhiyun uint8_t tRFC; 2641*4882a593Smuzhiyun uint8_t tRFCpb; 2642*4882a593Smuzhiyun 2643*4882a593Smuzhiyun uint8_t tRREFD; 2644*4882a593Smuzhiyun uint8_t tRCDRD; 2645*4882a593Smuzhiyun uint8_t tRCDWR; 2646*4882a593Smuzhiyun uint8_t tRP; 2647*4882a593Smuzhiyun 2648*4882a593Smuzhiyun uint8_t tRRDS; 2649*4882a593Smuzhiyun uint8_t tRRDL; 2650*4882a593Smuzhiyun uint8_t tWR; 2651*4882a593Smuzhiyun uint8_t tWTRS; 2652*4882a593Smuzhiyun 2653*4882a593Smuzhiyun uint8_t tWTRL; 2654*4882a593Smuzhiyun uint8_t tFAW; 2655*4882a593Smuzhiyun uint8_t tCCDS; 2656*4882a593Smuzhiyun uint8_t tCCDL; 2657*4882a593Smuzhiyun 2658*4882a593Smuzhiyun uint8_t tCRCRL; 2659*4882a593Smuzhiyun uint8_t tCRCWL; 2660*4882a593Smuzhiyun uint8_t tCKE; 2661*4882a593Smuzhiyun uint8_t tCKSRE; 2662*4882a593Smuzhiyun 2663*4882a593Smuzhiyun uint8_t tCKSRX; 2664*4882a593Smuzhiyun uint8_t tRTPS; 2665*4882a593Smuzhiyun uint8_t tRTPL; 2666*4882a593Smuzhiyun uint8_t tMRD; 2667*4882a593Smuzhiyun 2668*4882a593Smuzhiyun uint8_t tMOD; 2669*4882a593Smuzhiyun uint8_t tXS; 2670*4882a593Smuzhiyun uint8_t tXHP; 2671*4882a593Smuzhiyun uint8_t tXSMRS; 2672*4882a593Smuzhiyun 2673*4882a593Smuzhiyun uint32_t tXSH; 2674*4882a593Smuzhiyun 2675*4882a593Smuzhiyun uint8_t tPD; 2676*4882a593Smuzhiyun uint8_t tXP; 2677*4882a593Smuzhiyun uint8_t tCPDED; 2678*4882a593Smuzhiyun uint8_t tACTPDE; 2679*4882a593Smuzhiyun 2680*4882a593Smuzhiyun uint8_t tPREPDE; 2681*4882a593Smuzhiyun uint8_t tREFPDE; 2682*4882a593Smuzhiyun uint8_t tMRSPDEN; 2683*4882a593Smuzhiyun uint8_t tRDSRE; 2684*4882a593Smuzhiyun 2685*4882a593Smuzhiyun uint8_t tWRSRE; 2686*4882a593Smuzhiyun uint8_t tPPD; 2687*4882a593Smuzhiyun uint8_t tCCDMW; 2688*4882a593Smuzhiyun uint8_t tWTRTR; 2689*4882a593Smuzhiyun 2690*4882a593Smuzhiyun uint8_t tLTLTR; 2691*4882a593Smuzhiyun uint8_t tREFTR; 2692*4882a593Smuzhiyun uint8_t VNDR; 2693*4882a593Smuzhiyun uint8_t reserved[9]; 2694*4882a593Smuzhiyun }; 2695*4882a593Smuzhiyun 2696*4882a593Smuzhiyun struct atom_gddr6_bit_byte_remap { 2697*4882a593Smuzhiyun uint32_t dphy_byteremap; //mmUMC_DPHY_ByteRemap 2698*4882a593Smuzhiyun uint32_t dphy_bitremap0; //mmUMC_DPHY_BitRemap0 2699*4882a593Smuzhiyun uint32_t dphy_bitremap1; //mmUMC_DPHY_BitRemap1 2700*4882a593Smuzhiyun uint32_t dphy_bitremap2; //mmUMC_DPHY_BitRemap2 2701*4882a593Smuzhiyun uint32_t aphy_bitremap0; //mmUMC_APHY_BitRemap0 2702*4882a593Smuzhiyun uint32_t aphy_bitremap1; //mmUMC_APHY_BitRemap1 2703*4882a593Smuzhiyun uint32_t phy_dram; //mmUMC_PHY_DRAM 2704*4882a593Smuzhiyun }; 2705*4882a593Smuzhiyun 2706*4882a593Smuzhiyun struct atom_gddr6_dram_data_remap { 2707*4882a593Smuzhiyun uint32_t table_size; 2708*4882a593Smuzhiyun uint8_t phyintf_ck_inverted[8]; //UMC_PHY_PHYINTF_CNTL.INV_CK 2709*4882a593Smuzhiyun struct atom_gddr6_bit_byte_remap bit_byte_remap[16]; 2710*4882a593Smuzhiyun }; 2711*4882a593Smuzhiyun 2712*4882a593Smuzhiyun struct atom_vram_info_header_v2_5 { 2713*4882a593Smuzhiyun struct atom_common_table_header table_header; 2714*4882a593Smuzhiyun uint16_t mem_adjust_tbloffset; // offset of atom_umc_init_reg_block structure for memory vendor specific UMC adjust settings 2715*4882a593Smuzhiyun uint16_t gddr6_ac_timing_offset; // offset of atom_gddr6_ac_timing_v2_5 structure for memory clock specific UMC settings 2716*4882a593Smuzhiyun uint16_t mc_adjust_pertile_tbloffset; // offset of atom_umc_init_reg_block structure for Per Byte Offset Preset Settings 2717*4882a593Smuzhiyun uint16_t mc_phyinit_tbloffset; // offset of atom_umc_init_reg_block structure for MC phy init set 2718*4882a593Smuzhiyun uint16_t dram_data_remap_tbloffset; // offset of atom_gddr6_dram_data_remap array to indicate DRAM data lane to GPU mapping 2719*4882a593Smuzhiyun uint16_t reserved; // offset of reserved 2720*4882a593Smuzhiyun uint16_t post_ucode_init_offset; // offset of atom_umc_init_reg_block structure for MC phy init after MC uCode complete umc init 2721*4882a593Smuzhiyun uint16_t strobe_mode_patch_tbloffset; // offset of atom_umc_init_reg_block structure for Strobe Mode memory clock specific UMC settings 2722*4882a593Smuzhiyun uint8_t vram_module_num; // indicate number of VRAM module 2723*4882a593Smuzhiyun uint8_t umcip_min_ver; 2724*4882a593Smuzhiyun uint8_t umcip_max_ver; 2725*4882a593Smuzhiyun uint8_t mc_phy_tile_num; // indicate the MCD tile number which use in DramDataRemapTbl and usMcAdjustPerTileTblOffset 2726*4882a593Smuzhiyun struct atom_vram_module_v11 vram_module[16]; // just for allocation, real number of blocks is in ucNumOfVRAMModule; 2727*4882a593Smuzhiyun }; 2728*4882a593Smuzhiyun 2729*4882a593Smuzhiyun /* 2730*4882a593Smuzhiyun *************************************************************************** 2731*4882a593Smuzhiyun Data Table voltageobject_info structure 2732*4882a593Smuzhiyun *************************************************************************** 2733*4882a593Smuzhiyun */ 2734*4882a593Smuzhiyun struct atom_i2c_data_entry 2735*4882a593Smuzhiyun { 2736*4882a593Smuzhiyun uint16_t i2c_reg_index; // i2c register address, can be up to 16bit 2737*4882a593Smuzhiyun uint16_t i2c_reg_data; // i2c register data, can be up to 16bit 2738*4882a593Smuzhiyun }; 2739*4882a593Smuzhiyun 2740*4882a593Smuzhiyun struct atom_voltage_object_header_v4{ 2741*4882a593Smuzhiyun uint8_t voltage_type; //enum atom_voltage_type 2742*4882a593Smuzhiyun uint8_t voltage_mode; //enum atom_voltage_object_mode 2743*4882a593Smuzhiyun uint16_t object_size; //Size of Object 2744*4882a593Smuzhiyun }; 2745*4882a593Smuzhiyun 2746*4882a593Smuzhiyun // atom_voltage_object_header_v4.voltage_mode 2747*4882a593Smuzhiyun enum atom_voltage_object_mode 2748*4882a593Smuzhiyun { 2749*4882a593Smuzhiyun VOLTAGE_OBJ_GPIO_LUT = 0, //VOLTAGE and GPIO Lookup table ->atom_gpio_voltage_object_v4 2750*4882a593Smuzhiyun VOLTAGE_OBJ_VR_I2C_INIT_SEQ = 3, //VOLTAGE REGULATOR INIT sequece through I2C -> atom_i2c_voltage_object_v4 2751*4882a593Smuzhiyun VOLTAGE_OBJ_PHASE_LUT = 4, //Set Vregulator Phase lookup table ->atom_gpio_voltage_object_v4 2752*4882a593Smuzhiyun VOLTAGE_OBJ_SVID2 = 7, //Indicate voltage control by SVID2 ->atom_svid2_voltage_object_v4 2753*4882a593Smuzhiyun VOLTAGE_OBJ_EVV = 8, 2754*4882a593Smuzhiyun VOLTAGE_OBJ_MERGED_POWER = 9, 2755*4882a593Smuzhiyun }; 2756*4882a593Smuzhiyun 2757*4882a593Smuzhiyun struct atom_i2c_voltage_object_v4 2758*4882a593Smuzhiyun { 2759*4882a593Smuzhiyun struct atom_voltage_object_header_v4 header; // voltage mode = VOLTAGE_OBJ_VR_I2C_INIT_SEQ 2760*4882a593Smuzhiyun uint8_t regulator_id; //Indicate Voltage Regulator Id 2761*4882a593Smuzhiyun uint8_t i2c_id; 2762*4882a593Smuzhiyun uint8_t i2c_slave_addr; 2763*4882a593Smuzhiyun uint8_t i2c_control_offset; 2764*4882a593Smuzhiyun uint8_t i2c_flag; // Bit0: 0 - One byte data; 1 - Two byte data 2765*4882a593Smuzhiyun uint8_t i2c_speed; // =0, use default i2c speed, otherwise use it in unit of kHz. 2766*4882a593Smuzhiyun uint8_t reserved[2]; 2767*4882a593Smuzhiyun struct atom_i2c_data_entry i2cdatalut[1]; // end with 0xff 2768*4882a593Smuzhiyun }; 2769*4882a593Smuzhiyun 2770*4882a593Smuzhiyun // ATOM_I2C_VOLTAGE_OBJECT_V3.ucVoltageControlFlag 2771*4882a593Smuzhiyun enum atom_i2c_voltage_control_flag 2772*4882a593Smuzhiyun { 2773*4882a593Smuzhiyun VOLTAGE_DATA_ONE_BYTE = 0, 2774*4882a593Smuzhiyun VOLTAGE_DATA_TWO_BYTE = 1, 2775*4882a593Smuzhiyun }; 2776*4882a593Smuzhiyun 2777*4882a593Smuzhiyun 2778*4882a593Smuzhiyun struct atom_voltage_gpio_map_lut 2779*4882a593Smuzhiyun { 2780*4882a593Smuzhiyun uint32_t voltage_gpio_reg_val; // The Voltage ID which is used to program GPIO register 2781*4882a593Smuzhiyun uint16_t voltage_level_mv; // The corresponding Voltage Value, in mV 2782*4882a593Smuzhiyun }; 2783*4882a593Smuzhiyun 2784*4882a593Smuzhiyun struct atom_gpio_voltage_object_v4 2785*4882a593Smuzhiyun { 2786*4882a593Smuzhiyun struct atom_voltage_object_header_v4 header; // voltage mode = VOLTAGE_OBJ_GPIO_LUT or VOLTAGE_OBJ_PHASE_LUT 2787*4882a593Smuzhiyun uint8_t gpio_control_id; // default is 0 which indicate control through CG VID mode 2788*4882a593Smuzhiyun uint8_t gpio_entry_num; // indiate the entry numbers of Votlage/Gpio value Look up table 2789*4882a593Smuzhiyun uint8_t phase_delay_us; // phase delay in unit of micro second 2790*4882a593Smuzhiyun uint8_t reserved; 2791*4882a593Smuzhiyun uint32_t gpio_mask_val; // GPIO Mask value 2792*4882a593Smuzhiyun struct atom_voltage_gpio_map_lut voltage_gpio_lut[1]; 2793*4882a593Smuzhiyun }; 2794*4882a593Smuzhiyun 2795*4882a593Smuzhiyun struct atom_svid2_voltage_object_v4 2796*4882a593Smuzhiyun { 2797*4882a593Smuzhiyun struct atom_voltage_object_header_v4 header; // voltage mode = VOLTAGE_OBJ_SVID2 2798*4882a593Smuzhiyun uint8_t loadline_psi1; // bit4:0= loadline setting ( Core Loadline trim and offset trim ), bit5=0:PSI1_L disable =1: PSI1_L enable 2799*4882a593Smuzhiyun uint8_t psi0_l_vid_thresd; // VR PSI0_L VID threshold 2800*4882a593Smuzhiyun uint8_t psi0_enable; // 2801*4882a593Smuzhiyun uint8_t maxvstep; 2802*4882a593Smuzhiyun uint8_t telemetry_offset; 2803*4882a593Smuzhiyun uint8_t telemetry_gain; 2804*4882a593Smuzhiyun uint16_t reserved1; 2805*4882a593Smuzhiyun }; 2806*4882a593Smuzhiyun 2807*4882a593Smuzhiyun struct atom_merged_voltage_object_v4 2808*4882a593Smuzhiyun { 2809*4882a593Smuzhiyun struct atom_voltage_object_header_v4 header; // voltage mode = VOLTAGE_OBJ_MERGED_POWER 2810*4882a593Smuzhiyun uint8_t merged_powerrail_type; //enum atom_voltage_type 2811*4882a593Smuzhiyun uint8_t reserved[3]; 2812*4882a593Smuzhiyun }; 2813*4882a593Smuzhiyun 2814*4882a593Smuzhiyun union atom_voltage_object_v4{ 2815*4882a593Smuzhiyun struct atom_gpio_voltage_object_v4 gpio_voltage_obj; 2816*4882a593Smuzhiyun struct atom_i2c_voltage_object_v4 i2c_voltage_obj; 2817*4882a593Smuzhiyun struct atom_svid2_voltage_object_v4 svid2_voltage_obj; 2818*4882a593Smuzhiyun struct atom_merged_voltage_object_v4 merged_voltage_obj; 2819*4882a593Smuzhiyun }; 2820*4882a593Smuzhiyun 2821*4882a593Smuzhiyun struct atom_voltage_objects_info_v4_1 2822*4882a593Smuzhiyun { 2823*4882a593Smuzhiyun struct atom_common_table_header table_header; 2824*4882a593Smuzhiyun union atom_voltage_object_v4 voltage_object[1]; //Info for Voltage control 2825*4882a593Smuzhiyun }; 2826*4882a593Smuzhiyun 2827*4882a593Smuzhiyun 2828*4882a593Smuzhiyun /* 2829*4882a593Smuzhiyun *************************************************************************** 2830*4882a593Smuzhiyun All Command Function structure definition 2831*4882a593Smuzhiyun *************************************************************************** 2832*4882a593Smuzhiyun */ 2833*4882a593Smuzhiyun 2834*4882a593Smuzhiyun /* 2835*4882a593Smuzhiyun *************************************************************************** 2836*4882a593Smuzhiyun Structures used by asic_init 2837*4882a593Smuzhiyun *************************************************************************** 2838*4882a593Smuzhiyun */ 2839*4882a593Smuzhiyun 2840*4882a593Smuzhiyun struct asic_init_engine_parameters 2841*4882a593Smuzhiyun { 2842*4882a593Smuzhiyun uint32_t sclkfreqin10khz:24; 2843*4882a593Smuzhiyun uint32_t engineflag:8; /* enum atom_asic_init_engine_flag */ 2844*4882a593Smuzhiyun }; 2845*4882a593Smuzhiyun 2846*4882a593Smuzhiyun struct asic_init_mem_parameters 2847*4882a593Smuzhiyun { 2848*4882a593Smuzhiyun uint32_t mclkfreqin10khz:24; 2849*4882a593Smuzhiyun uint32_t memflag:8; /* enum atom_asic_init_mem_flag */ 2850*4882a593Smuzhiyun }; 2851*4882a593Smuzhiyun 2852*4882a593Smuzhiyun struct asic_init_parameters_v2_1 2853*4882a593Smuzhiyun { 2854*4882a593Smuzhiyun struct asic_init_engine_parameters engineparam; 2855*4882a593Smuzhiyun struct asic_init_mem_parameters memparam; 2856*4882a593Smuzhiyun }; 2857*4882a593Smuzhiyun 2858*4882a593Smuzhiyun struct asic_init_ps_allocation_v2_1 2859*4882a593Smuzhiyun { 2860*4882a593Smuzhiyun struct asic_init_parameters_v2_1 param; 2861*4882a593Smuzhiyun uint32_t reserved[16]; 2862*4882a593Smuzhiyun }; 2863*4882a593Smuzhiyun 2864*4882a593Smuzhiyun 2865*4882a593Smuzhiyun enum atom_asic_init_engine_flag 2866*4882a593Smuzhiyun { 2867*4882a593Smuzhiyun b3NORMAL_ENGINE_INIT = 0, 2868*4882a593Smuzhiyun b3SRIOV_SKIP_ASIC_INIT = 0x02, 2869*4882a593Smuzhiyun b3SRIOV_LOAD_UCODE = 0x40, 2870*4882a593Smuzhiyun }; 2871*4882a593Smuzhiyun 2872*4882a593Smuzhiyun enum atom_asic_init_mem_flag 2873*4882a593Smuzhiyun { 2874*4882a593Smuzhiyun b3NORMAL_MEM_INIT = 0, 2875*4882a593Smuzhiyun b3DRAM_SELF_REFRESH_EXIT =0x20, 2876*4882a593Smuzhiyun }; 2877*4882a593Smuzhiyun 2878*4882a593Smuzhiyun /* 2879*4882a593Smuzhiyun *************************************************************************** 2880*4882a593Smuzhiyun Structures used by setengineclock 2881*4882a593Smuzhiyun *************************************************************************** 2882*4882a593Smuzhiyun */ 2883*4882a593Smuzhiyun 2884*4882a593Smuzhiyun struct set_engine_clock_parameters_v2_1 2885*4882a593Smuzhiyun { 2886*4882a593Smuzhiyun uint32_t sclkfreqin10khz:24; 2887*4882a593Smuzhiyun uint32_t sclkflag:8; /* enum atom_set_engine_mem_clock_flag, */ 2888*4882a593Smuzhiyun uint32_t reserved[10]; 2889*4882a593Smuzhiyun }; 2890*4882a593Smuzhiyun 2891*4882a593Smuzhiyun struct set_engine_clock_ps_allocation_v2_1 2892*4882a593Smuzhiyun { 2893*4882a593Smuzhiyun struct set_engine_clock_parameters_v2_1 clockinfo; 2894*4882a593Smuzhiyun uint32_t reserved[10]; 2895*4882a593Smuzhiyun }; 2896*4882a593Smuzhiyun 2897*4882a593Smuzhiyun 2898*4882a593Smuzhiyun enum atom_set_engine_mem_clock_flag 2899*4882a593Smuzhiyun { 2900*4882a593Smuzhiyun b3NORMAL_CHANGE_CLOCK = 0, 2901*4882a593Smuzhiyun b3FIRST_TIME_CHANGE_CLOCK = 0x08, 2902*4882a593Smuzhiyun b3STORE_DPM_TRAINGING = 0x40, //Applicable to memory clock change,when set, it store specific DPM mode training result 2903*4882a593Smuzhiyun }; 2904*4882a593Smuzhiyun 2905*4882a593Smuzhiyun /* 2906*4882a593Smuzhiyun *************************************************************************** 2907*4882a593Smuzhiyun Structures used by getengineclock 2908*4882a593Smuzhiyun *************************************************************************** 2909*4882a593Smuzhiyun */ 2910*4882a593Smuzhiyun struct get_engine_clock_parameter 2911*4882a593Smuzhiyun { 2912*4882a593Smuzhiyun uint32_t sclk_10khz; // current engine speed in 10KHz unit 2913*4882a593Smuzhiyun uint32_t reserved; 2914*4882a593Smuzhiyun }; 2915*4882a593Smuzhiyun 2916*4882a593Smuzhiyun /* 2917*4882a593Smuzhiyun *************************************************************************** 2918*4882a593Smuzhiyun Structures used by setmemoryclock 2919*4882a593Smuzhiyun *************************************************************************** 2920*4882a593Smuzhiyun */ 2921*4882a593Smuzhiyun struct set_memory_clock_parameters_v2_1 2922*4882a593Smuzhiyun { 2923*4882a593Smuzhiyun uint32_t mclkfreqin10khz:24; 2924*4882a593Smuzhiyun uint32_t mclkflag:8; /* enum atom_set_engine_mem_clock_flag, */ 2925*4882a593Smuzhiyun uint32_t reserved[10]; 2926*4882a593Smuzhiyun }; 2927*4882a593Smuzhiyun 2928*4882a593Smuzhiyun struct set_memory_clock_ps_allocation_v2_1 2929*4882a593Smuzhiyun { 2930*4882a593Smuzhiyun struct set_memory_clock_parameters_v2_1 clockinfo; 2931*4882a593Smuzhiyun uint32_t reserved[10]; 2932*4882a593Smuzhiyun }; 2933*4882a593Smuzhiyun 2934*4882a593Smuzhiyun 2935*4882a593Smuzhiyun /* 2936*4882a593Smuzhiyun *************************************************************************** 2937*4882a593Smuzhiyun Structures used by getmemoryclock 2938*4882a593Smuzhiyun *************************************************************************** 2939*4882a593Smuzhiyun */ 2940*4882a593Smuzhiyun struct get_memory_clock_parameter 2941*4882a593Smuzhiyun { 2942*4882a593Smuzhiyun uint32_t mclk_10khz; // current engine speed in 10KHz unit 2943*4882a593Smuzhiyun uint32_t reserved; 2944*4882a593Smuzhiyun }; 2945*4882a593Smuzhiyun 2946*4882a593Smuzhiyun 2947*4882a593Smuzhiyun 2948*4882a593Smuzhiyun /* 2949*4882a593Smuzhiyun *************************************************************************** 2950*4882a593Smuzhiyun Structures used by setvoltage 2951*4882a593Smuzhiyun *************************************************************************** 2952*4882a593Smuzhiyun */ 2953*4882a593Smuzhiyun 2954*4882a593Smuzhiyun struct set_voltage_parameters_v1_4 2955*4882a593Smuzhiyun { 2956*4882a593Smuzhiyun uint8_t voltagetype; /* enum atom_voltage_type */ 2957*4882a593Smuzhiyun uint8_t command; /* Indicate action: Set voltage level, enum atom_set_voltage_command */ 2958*4882a593Smuzhiyun uint16_t vlevel_mv; /* real voltage level in unit of mv or Voltage Phase (0, 1, 2, .. ) */ 2959*4882a593Smuzhiyun }; 2960*4882a593Smuzhiyun 2961*4882a593Smuzhiyun //set_voltage_parameters_v2_1.voltagemode 2962*4882a593Smuzhiyun enum atom_set_voltage_command{ 2963*4882a593Smuzhiyun ATOM_SET_VOLTAGE = 0, 2964*4882a593Smuzhiyun ATOM_INIT_VOLTAGE_REGULATOR = 3, 2965*4882a593Smuzhiyun ATOM_SET_VOLTAGE_PHASE = 4, 2966*4882a593Smuzhiyun ATOM_GET_LEAKAGE_ID = 8, 2967*4882a593Smuzhiyun }; 2968*4882a593Smuzhiyun 2969*4882a593Smuzhiyun struct set_voltage_ps_allocation_v1_4 2970*4882a593Smuzhiyun { 2971*4882a593Smuzhiyun struct set_voltage_parameters_v1_4 setvoltageparam; 2972*4882a593Smuzhiyun uint32_t reserved[10]; 2973*4882a593Smuzhiyun }; 2974*4882a593Smuzhiyun 2975*4882a593Smuzhiyun 2976*4882a593Smuzhiyun /* 2977*4882a593Smuzhiyun *************************************************************************** 2978*4882a593Smuzhiyun Structures used by computegpuclockparam 2979*4882a593Smuzhiyun *************************************************************************** 2980*4882a593Smuzhiyun */ 2981*4882a593Smuzhiyun 2982*4882a593Smuzhiyun //ATOM_COMPUTE_CLOCK_FREQ.ulComputeClockFlag 2983*4882a593Smuzhiyun enum atom_gpu_clock_type 2984*4882a593Smuzhiyun { 2985*4882a593Smuzhiyun COMPUTE_GPUCLK_INPUT_FLAG_DEFAULT_GPUCLK =0x00, 2986*4882a593Smuzhiyun COMPUTE_GPUCLK_INPUT_FLAG_GFXCLK =0x01, 2987*4882a593Smuzhiyun COMPUTE_GPUCLK_INPUT_FLAG_UCLK =0x02, 2988*4882a593Smuzhiyun }; 2989*4882a593Smuzhiyun 2990*4882a593Smuzhiyun struct compute_gpu_clock_input_parameter_v1_8 2991*4882a593Smuzhiyun { 2992*4882a593Smuzhiyun uint32_t gpuclock_10khz:24; //Input= target clock, output = actual clock 2993*4882a593Smuzhiyun uint32_t gpu_clock_type:8; //Input indicate clock type: enum atom_gpu_clock_type 2994*4882a593Smuzhiyun uint32_t reserved[5]; 2995*4882a593Smuzhiyun }; 2996*4882a593Smuzhiyun 2997*4882a593Smuzhiyun 2998*4882a593Smuzhiyun struct compute_gpu_clock_output_parameter_v1_8 2999*4882a593Smuzhiyun { 3000*4882a593Smuzhiyun uint32_t gpuclock_10khz:24; //Input= target clock, output = actual clock 3001*4882a593Smuzhiyun uint32_t dfs_did:8; //return parameter: DFS divider which is used to program to register directly 3002*4882a593Smuzhiyun uint32_t pll_fb_mult; //Feedback Multiplier, bit 8:0 int, bit 15:12 post_div, bit 31:16 frac 3003*4882a593Smuzhiyun uint32_t pll_ss_fbsmult; // Spread FB Mult: bit 8:0 int, bit 31:16 frac 3004*4882a593Smuzhiyun uint16_t pll_ss_slew_frac; 3005*4882a593Smuzhiyun uint8_t pll_ss_enable; 3006*4882a593Smuzhiyun uint8_t reserved; 3007*4882a593Smuzhiyun uint32_t reserved1[2]; 3008*4882a593Smuzhiyun }; 3009*4882a593Smuzhiyun 3010*4882a593Smuzhiyun 3011*4882a593Smuzhiyun 3012*4882a593Smuzhiyun /* 3013*4882a593Smuzhiyun *************************************************************************** 3014*4882a593Smuzhiyun Structures used by ReadEfuseValue 3015*4882a593Smuzhiyun *************************************************************************** 3016*4882a593Smuzhiyun */ 3017*4882a593Smuzhiyun 3018*4882a593Smuzhiyun struct read_efuse_input_parameters_v3_1 3019*4882a593Smuzhiyun { 3020*4882a593Smuzhiyun uint16_t efuse_start_index; 3021*4882a593Smuzhiyun uint8_t reserved; 3022*4882a593Smuzhiyun uint8_t bitslen; 3023*4882a593Smuzhiyun }; 3024*4882a593Smuzhiyun 3025*4882a593Smuzhiyun // ReadEfuseValue input/output parameter 3026*4882a593Smuzhiyun union read_efuse_value_parameters_v3_1 3027*4882a593Smuzhiyun { 3028*4882a593Smuzhiyun struct read_efuse_input_parameters_v3_1 efuse_info; 3029*4882a593Smuzhiyun uint32_t efusevalue; 3030*4882a593Smuzhiyun }; 3031*4882a593Smuzhiyun 3032*4882a593Smuzhiyun 3033*4882a593Smuzhiyun /* 3034*4882a593Smuzhiyun *************************************************************************** 3035*4882a593Smuzhiyun Structures used by getsmuclockinfo 3036*4882a593Smuzhiyun *************************************************************************** 3037*4882a593Smuzhiyun */ 3038*4882a593Smuzhiyun struct atom_get_smu_clock_info_parameters_v3_1 3039*4882a593Smuzhiyun { 3040*4882a593Smuzhiyun uint8_t syspll_id; // 0= syspll0, 1=syspll1, 2=syspll2 3041*4882a593Smuzhiyun uint8_t clk_id; // atom_smu9_syspll0_clock_id (only valid when command == GET_SMU_CLOCK_INFO_V3_1_GET_CLOCK_FREQ ) 3042*4882a593Smuzhiyun uint8_t command; // enum of atom_get_smu_clock_info_command 3043*4882a593Smuzhiyun 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 ) 3044*4882a593Smuzhiyun }; 3045*4882a593Smuzhiyun 3046*4882a593Smuzhiyun enum atom_get_smu_clock_info_command 3047*4882a593Smuzhiyun { 3048*4882a593Smuzhiyun GET_SMU_CLOCK_INFO_V3_1_GET_CLOCK_FREQ = 0, 3049*4882a593Smuzhiyun GET_SMU_CLOCK_INFO_V3_1_GET_PLLVCO_FREQ = 1, 3050*4882a593Smuzhiyun GET_SMU_CLOCK_INFO_V3_1_GET_PLLREFCLK_FREQ = 2, 3051*4882a593Smuzhiyun }; 3052*4882a593Smuzhiyun 3053*4882a593Smuzhiyun enum atom_smu9_syspll0_clock_id 3054*4882a593Smuzhiyun { 3055*4882a593Smuzhiyun SMU9_SYSPLL0_SMNCLK_ID = 0, // SMNCLK 3056*4882a593Smuzhiyun SMU9_SYSPLL0_SOCCLK_ID = 1, // SOCCLK (FCLK) 3057*4882a593Smuzhiyun SMU9_SYSPLL0_MP0CLK_ID = 2, // MP0CLK 3058*4882a593Smuzhiyun SMU9_SYSPLL0_MP1CLK_ID = 3, // MP1CLK 3059*4882a593Smuzhiyun SMU9_SYSPLL0_LCLK_ID = 4, // LCLK 3060*4882a593Smuzhiyun SMU9_SYSPLL0_DCLK_ID = 5, // DCLK 3061*4882a593Smuzhiyun SMU9_SYSPLL0_VCLK_ID = 6, // VCLK 3062*4882a593Smuzhiyun SMU9_SYSPLL0_ECLK_ID = 7, // ECLK 3063*4882a593Smuzhiyun SMU9_SYSPLL0_DCEFCLK_ID = 8, // DCEFCLK 3064*4882a593Smuzhiyun SMU9_SYSPLL0_DPREFCLK_ID = 10, // DPREFCLK 3065*4882a593Smuzhiyun SMU9_SYSPLL0_DISPCLK_ID = 11, // DISPCLK 3066*4882a593Smuzhiyun }; 3067*4882a593Smuzhiyun 3068*4882a593Smuzhiyun enum atom_smu11_syspll_id { 3069*4882a593Smuzhiyun SMU11_SYSPLL0_ID = 0, 3070*4882a593Smuzhiyun SMU11_SYSPLL1_0_ID = 1, 3071*4882a593Smuzhiyun SMU11_SYSPLL1_1_ID = 2, 3072*4882a593Smuzhiyun SMU11_SYSPLL1_2_ID = 3, 3073*4882a593Smuzhiyun SMU11_SYSPLL2_ID = 4, 3074*4882a593Smuzhiyun SMU11_SYSPLL3_0_ID = 5, 3075*4882a593Smuzhiyun SMU11_SYSPLL3_1_ID = 6, 3076*4882a593Smuzhiyun }; 3077*4882a593Smuzhiyun 3078*4882a593Smuzhiyun enum atom_smu11_syspll0_clock_id { 3079*4882a593Smuzhiyun SMU11_SYSPLL0_ECLK_ID = 0, // ECLK 3080*4882a593Smuzhiyun SMU11_SYSPLL0_SOCCLK_ID = 1, // SOCCLK 3081*4882a593Smuzhiyun SMU11_SYSPLL0_MP0CLK_ID = 2, // MP0CLK 3082*4882a593Smuzhiyun SMU11_SYSPLL0_DCLK_ID = 3, // DCLK 3083*4882a593Smuzhiyun SMU11_SYSPLL0_VCLK_ID = 4, // VCLK 3084*4882a593Smuzhiyun SMU11_SYSPLL0_DCEFCLK_ID = 5, // DCEFCLK 3085*4882a593Smuzhiyun }; 3086*4882a593Smuzhiyun 3087*4882a593Smuzhiyun enum atom_smu11_syspll1_0_clock_id { 3088*4882a593Smuzhiyun SMU11_SYSPLL1_0_UCLKA_ID = 0, // UCLK_a 3089*4882a593Smuzhiyun }; 3090*4882a593Smuzhiyun 3091*4882a593Smuzhiyun enum atom_smu11_syspll1_1_clock_id { 3092*4882a593Smuzhiyun SMU11_SYSPLL1_0_UCLKB_ID = 0, // UCLK_b 3093*4882a593Smuzhiyun }; 3094*4882a593Smuzhiyun 3095*4882a593Smuzhiyun enum atom_smu11_syspll1_2_clock_id { 3096*4882a593Smuzhiyun SMU11_SYSPLL1_0_FCLK_ID = 0, // FCLK 3097*4882a593Smuzhiyun }; 3098*4882a593Smuzhiyun 3099*4882a593Smuzhiyun enum atom_smu11_syspll2_clock_id { 3100*4882a593Smuzhiyun SMU11_SYSPLL2_GFXCLK_ID = 0, // GFXCLK 3101*4882a593Smuzhiyun }; 3102*4882a593Smuzhiyun 3103*4882a593Smuzhiyun enum atom_smu11_syspll3_0_clock_id { 3104*4882a593Smuzhiyun SMU11_SYSPLL3_0_WAFCLK_ID = 0, // WAFCLK 3105*4882a593Smuzhiyun SMU11_SYSPLL3_0_DISPCLK_ID = 1, // DISPCLK 3106*4882a593Smuzhiyun SMU11_SYSPLL3_0_DPREFCLK_ID = 2, // DPREFCLK 3107*4882a593Smuzhiyun }; 3108*4882a593Smuzhiyun 3109*4882a593Smuzhiyun enum atom_smu11_syspll3_1_clock_id { 3110*4882a593Smuzhiyun SMU11_SYSPLL3_1_MP1CLK_ID = 0, // MP1CLK 3111*4882a593Smuzhiyun SMU11_SYSPLL3_1_SMNCLK_ID = 1, // SMNCLK 3112*4882a593Smuzhiyun SMU11_SYSPLL3_1_LCLK_ID = 2, // LCLK 3113*4882a593Smuzhiyun }; 3114*4882a593Smuzhiyun 3115*4882a593Smuzhiyun struct atom_get_smu_clock_info_output_parameters_v3_1 3116*4882a593Smuzhiyun { 3117*4882a593Smuzhiyun union { 3118*4882a593Smuzhiyun uint32_t smu_clock_freq_hz; 3119*4882a593Smuzhiyun uint32_t syspllvcofreq_10khz; 3120*4882a593Smuzhiyun uint32_t sysspllrefclk_10khz; 3121*4882a593Smuzhiyun }atom_smu_outputclkfreq; 3122*4882a593Smuzhiyun }; 3123*4882a593Smuzhiyun 3124*4882a593Smuzhiyun 3125*4882a593Smuzhiyun 3126*4882a593Smuzhiyun /* 3127*4882a593Smuzhiyun *************************************************************************** 3128*4882a593Smuzhiyun Structures used by dynamicmemorysettings 3129*4882a593Smuzhiyun *************************************************************************** 3130*4882a593Smuzhiyun */ 3131*4882a593Smuzhiyun 3132*4882a593Smuzhiyun enum atom_dynamic_memory_setting_command 3133*4882a593Smuzhiyun { 3134*4882a593Smuzhiyun COMPUTE_MEMORY_PLL_PARAM = 1, 3135*4882a593Smuzhiyun COMPUTE_ENGINE_PLL_PARAM = 2, 3136*4882a593Smuzhiyun ADJUST_MC_SETTING_PARAM = 3, 3137*4882a593Smuzhiyun }; 3138*4882a593Smuzhiyun 3139*4882a593Smuzhiyun /* when command = COMPUTE_MEMORY_PLL_PARAM or ADJUST_MC_SETTING_PARAM */ 3140*4882a593Smuzhiyun struct dynamic_mclk_settings_parameters_v2_1 3141*4882a593Smuzhiyun { 3142*4882a593Smuzhiyun uint32_t mclk_10khz:24; //Input= target mclk 3143*4882a593Smuzhiyun uint32_t command:8; //command enum of atom_dynamic_memory_setting_command 3144*4882a593Smuzhiyun uint32_t reserved; 3145*4882a593Smuzhiyun }; 3146*4882a593Smuzhiyun 3147*4882a593Smuzhiyun /* when command = COMPUTE_ENGINE_PLL_PARAM */ 3148*4882a593Smuzhiyun struct dynamic_sclk_settings_parameters_v2_1 3149*4882a593Smuzhiyun { 3150*4882a593Smuzhiyun uint32_t sclk_10khz:24; //Input= target mclk 3151*4882a593Smuzhiyun uint32_t command:8; //command enum of atom_dynamic_memory_setting_command 3152*4882a593Smuzhiyun uint32_t mclk_10khz; 3153*4882a593Smuzhiyun uint32_t reserved; 3154*4882a593Smuzhiyun }; 3155*4882a593Smuzhiyun 3156*4882a593Smuzhiyun union dynamic_memory_settings_parameters_v2_1 3157*4882a593Smuzhiyun { 3158*4882a593Smuzhiyun struct dynamic_mclk_settings_parameters_v2_1 mclk_setting; 3159*4882a593Smuzhiyun struct dynamic_sclk_settings_parameters_v2_1 sclk_setting; 3160*4882a593Smuzhiyun }; 3161*4882a593Smuzhiyun 3162*4882a593Smuzhiyun 3163*4882a593Smuzhiyun 3164*4882a593Smuzhiyun /* 3165*4882a593Smuzhiyun *************************************************************************** 3166*4882a593Smuzhiyun Structures used by memorytraining 3167*4882a593Smuzhiyun *************************************************************************** 3168*4882a593Smuzhiyun */ 3169*4882a593Smuzhiyun 3170*4882a593Smuzhiyun enum atom_umc6_0_ucode_function_call_enum_id 3171*4882a593Smuzhiyun { 3172*4882a593Smuzhiyun UMC60_UCODE_FUNC_ID_REINIT = 0, 3173*4882a593Smuzhiyun UMC60_UCODE_FUNC_ID_ENTER_SELFREFRESH = 1, 3174*4882a593Smuzhiyun UMC60_UCODE_FUNC_ID_EXIT_SELFREFRESH = 2, 3175*4882a593Smuzhiyun }; 3176*4882a593Smuzhiyun 3177*4882a593Smuzhiyun 3178*4882a593Smuzhiyun struct memory_training_parameters_v2_1 3179*4882a593Smuzhiyun { 3180*4882a593Smuzhiyun uint8_t ucode_func_id; 3181*4882a593Smuzhiyun uint8_t ucode_reserved[3]; 3182*4882a593Smuzhiyun uint32_t reserved[5]; 3183*4882a593Smuzhiyun }; 3184*4882a593Smuzhiyun 3185*4882a593Smuzhiyun 3186*4882a593Smuzhiyun /* 3187*4882a593Smuzhiyun *************************************************************************** 3188*4882a593Smuzhiyun Structures used by setpixelclock 3189*4882a593Smuzhiyun *************************************************************************** 3190*4882a593Smuzhiyun */ 3191*4882a593Smuzhiyun 3192*4882a593Smuzhiyun struct set_pixel_clock_parameter_v1_7 3193*4882a593Smuzhiyun { 3194*4882a593Smuzhiyun uint32_t pixclk_100hz; // target the pixel clock to drive the CRTC timing in unit of 100Hz. 3195*4882a593Smuzhiyun 3196*4882a593Smuzhiyun uint8_t pll_id; // ATOM_PHY_PLL0/ATOM_PHY_PLL1/ATOM_PPLL0 3197*4882a593Smuzhiyun uint8_t encoderobjid; // ASIC encoder id defined in objectId.h, 3198*4882a593Smuzhiyun // indicate which graphic encoder will be used. 3199*4882a593Smuzhiyun uint8_t encoder_mode; // Encoder mode: 3200*4882a593Smuzhiyun uint8_t miscinfo; // enum atom_set_pixel_clock_v1_7_misc_info 3201*4882a593Smuzhiyun uint8_t crtc_id; // enum of atom_crtc_def 3202*4882a593Smuzhiyun uint8_t deep_color_ratio; // HDMI panel bit depth: enum atom_set_pixel_clock_v1_7_deepcolor_ratio 3203*4882a593Smuzhiyun uint8_t reserved1[2]; 3204*4882a593Smuzhiyun uint32_t reserved2; 3205*4882a593Smuzhiyun }; 3206*4882a593Smuzhiyun 3207*4882a593Smuzhiyun //ucMiscInfo 3208*4882a593Smuzhiyun enum atom_set_pixel_clock_v1_7_misc_info 3209*4882a593Smuzhiyun { 3210*4882a593Smuzhiyun PIXEL_CLOCK_V7_MISC_FORCE_PROG_PPLL = 0x01, 3211*4882a593Smuzhiyun PIXEL_CLOCK_V7_MISC_PROG_PHYPLL = 0x02, 3212*4882a593Smuzhiyun PIXEL_CLOCK_V7_MISC_YUV420_MODE = 0x04, 3213*4882a593Smuzhiyun PIXEL_CLOCK_V7_MISC_DVI_DUALLINK_EN = 0x08, 3214*4882a593Smuzhiyun PIXEL_CLOCK_V7_MISC_REF_DIV_SRC = 0x30, 3215*4882a593Smuzhiyun PIXEL_CLOCK_V7_MISC_REF_DIV_SRC_XTALIN = 0x00, 3216*4882a593Smuzhiyun PIXEL_CLOCK_V7_MISC_REF_DIV_SRC_PCIE = 0x10, 3217*4882a593Smuzhiyun PIXEL_CLOCK_V7_MISC_REF_DIV_SRC_GENLK = 0x20, 3218*4882a593Smuzhiyun PIXEL_CLOCK_V7_MISC_REF_DIV_SRC_REFPAD = 0x30, 3219*4882a593Smuzhiyun PIXEL_CLOCK_V7_MISC_ATOMIC_UPDATE = 0x40, 3220*4882a593Smuzhiyun PIXEL_CLOCK_V7_MISC_FORCE_SS_DIS = 0x80, 3221*4882a593Smuzhiyun }; 3222*4882a593Smuzhiyun 3223*4882a593Smuzhiyun /* deep_color_ratio */ 3224*4882a593Smuzhiyun enum atom_set_pixel_clock_v1_7_deepcolor_ratio 3225*4882a593Smuzhiyun { 3226*4882a593Smuzhiyun PIXEL_CLOCK_V7_DEEPCOLOR_RATIO_DIS = 0x00, //00 - DCCG_DEEP_COLOR_DTO_DISABLE: Disable Deep Color DTO 3227*4882a593Smuzhiyun PIXEL_CLOCK_V7_DEEPCOLOR_RATIO_5_4 = 0x01, //01 - DCCG_DEEP_COLOR_DTO_5_4_RATIO: Set Deep Color DTO to 5:4 3228*4882a593Smuzhiyun PIXEL_CLOCK_V7_DEEPCOLOR_RATIO_3_2 = 0x02, //02 - DCCG_DEEP_COLOR_DTO_3_2_RATIO: Set Deep Color DTO to 3:2 3229*4882a593Smuzhiyun PIXEL_CLOCK_V7_DEEPCOLOR_RATIO_2_1 = 0x03, //03 - DCCG_DEEP_COLOR_DTO_2_1_RATIO: Set Deep Color DTO to 2:1 3230*4882a593Smuzhiyun }; 3231*4882a593Smuzhiyun 3232*4882a593Smuzhiyun /* 3233*4882a593Smuzhiyun *************************************************************************** 3234*4882a593Smuzhiyun Structures used by setdceclock 3235*4882a593Smuzhiyun *************************************************************************** 3236*4882a593Smuzhiyun */ 3237*4882a593Smuzhiyun 3238*4882a593Smuzhiyun // SetDCEClock input parameter for DCE11.2( ELM and BF ) and above 3239*4882a593Smuzhiyun struct set_dce_clock_parameters_v2_1 3240*4882a593Smuzhiyun { 3241*4882a593Smuzhiyun uint32_t dceclk_10khz; // target DCE frequency in unit of 10KHZ, return real DISPCLK/DPREFCLK frequency. 3242*4882a593Smuzhiyun uint8_t dceclktype; // =0: DISPCLK =1: DPREFCLK =2: PIXCLK 3243*4882a593Smuzhiyun uint8_t dceclksrc; // ATOM_PLL0 or ATOM_GCK_DFS or ATOM_FCH_CLK or ATOM_COMBOPHY_PLLx 3244*4882a593Smuzhiyun uint8_t dceclkflag; // Bit [1:0] = PPLL ref clock source ( when ucDCEClkSrc= ATOM_PPLL0 ) 3245*4882a593Smuzhiyun uint8_t crtc_id; // ucDisp Pipe Id, ATOM_CRTC0/1/2/..., use only when ucDCEClkType = PIXCLK 3246*4882a593Smuzhiyun }; 3247*4882a593Smuzhiyun 3248*4882a593Smuzhiyun //ucDCEClkType 3249*4882a593Smuzhiyun enum atom_set_dce_clock_clock_type 3250*4882a593Smuzhiyun { 3251*4882a593Smuzhiyun DCE_CLOCK_TYPE_DISPCLK = 0, 3252*4882a593Smuzhiyun DCE_CLOCK_TYPE_DPREFCLK = 1, 3253*4882a593Smuzhiyun DCE_CLOCK_TYPE_PIXELCLK = 2, // used by VBIOS internally, called by SetPixelClock 3254*4882a593Smuzhiyun }; 3255*4882a593Smuzhiyun 3256*4882a593Smuzhiyun //ucDCEClkFlag when ucDCEClkType == DPREFCLK 3257*4882a593Smuzhiyun enum atom_set_dce_clock_dprefclk_flag 3258*4882a593Smuzhiyun { 3259*4882a593Smuzhiyun DCE_CLOCK_FLAG_PLL_REFCLK_SRC_MASK = 0x03, 3260*4882a593Smuzhiyun DCE_CLOCK_FLAG_PLL_REFCLK_SRC_GENERICA = 0x00, 3261*4882a593Smuzhiyun DCE_CLOCK_FLAG_PLL_REFCLK_SRC_GENLK = 0x01, 3262*4882a593Smuzhiyun DCE_CLOCK_FLAG_PLL_REFCLK_SRC_PCIE = 0x02, 3263*4882a593Smuzhiyun DCE_CLOCK_FLAG_PLL_REFCLK_SRC_XTALIN = 0x03, 3264*4882a593Smuzhiyun }; 3265*4882a593Smuzhiyun 3266*4882a593Smuzhiyun //ucDCEClkFlag when ucDCEClkType == PIXCLK 3267*4882a593Smuzhiyun enum atom_set_dce_clock_pixclk_flag 3268*4882a593Smuzhiyun { 3269*4882a593Smuzhiyun DCE_CLOCK_FLAG_PCLK_DEEPCOLOR_RATIO_MASK = 0x03, 3270*4882a593Smuzhiyun DCE_CLOCK_FLAG_PCLK_DEEPCOLOR_RATIO_DIS = 0x00, //00 - DCCG_DEEP_COLOR_DTO_DISABLE: Disable Deep Color DTO 3271*4882a593Smuzhiyun DCE_CLOCK_FLAG_PCLK_DEEPCOLOR_RATIO_5_4 = 0x01, //01 - DCCG_DEEP_COLOR_DTO_5_4_RATIO: Set Deep Color DTO to 5:4 3272*4882a593Smuzhiyun DCE_CLOCK_FLAG_PCLK_DEEPCOLOR_RATIO_3_2 = 0x02, //02 - DCCG_DEEP_COLOR_DTO_3_2_RATIO: Set Deep Color DTO to 3:2 3273*4882a593Smuzhiyun DCE_CLOCK_FLAG_PCLK_DEEPCOLOR_RATIO_2_1 = 0x03, //03 - DCCG_DEEP_COLOR_DTO_2_1_RATIO: Set Deep Color DTO to 2:1 3274*4882a593Smuzhiyun DCE_CLOCK_FLAG_PIXCLK_YUV420_MODE = 0x04, 3275*4882a593Smuzhiyun }; 3276*4882a593Smuzhiyun 3277*4882a593Smuzhiyun struct set_dce_clock_ps_allocation_v2_1 3278*4882a593Smuzhiyun { 3279*4882a593Smuzhiyun struct set_dce_clock_parameters_v2_1 param; 3280*4882a593Smuzhiyun uint32_t ulReserved[2]; 3281*4882a593Smuzhiyun }; 3282*4882a593Smuzhiyun 3283*4882a593Smuzhiyun 3284*4882a593Smuzhiyun /****************************************************************************/ 3285*4882a593Smuzhiyun // Structures used by BlankCRTC 3286*4882a593Smuzhiyun /****************************************************************************/ 3287*4882a593Smuzhiyun struct blank_crtc_parameters 3288*4882a593Smuzhiyun { 3289*4882a593Smuzhiyun uint8_t crtc_id; // enum atom_crtc_def 3290*4882a593Smuzhiyun uint8_t blanking; // enum atom_blank_crtc_command 3291*4882a593Smuzhiyun uint16_t reserved; 3292*4882a593Smuzhiyun uint32_t reserved1; 3293*4882a593Smuzhiyun }; 3294*4882a593Smuzhiyun 3295*4882a593Smuzhiyun enum atom_blank_crtc_command 3296*4882a593Smuzhiyun { 3297*4882a593Smuzhiyun ATOM_BLANKING = 1, 3298*4882a593Smuzhiyun ATOM_BLANKING_OFF = 0, 3299*4882a593Smuzhiyun }; 3300*4882a593Smuzhiyun 3301*4882a593Smuzhiyun /****************************************************************************/ 3302*4882a593Smuzhiyun // Structures used by enablecrtc 3303*4882a593Smuzhiyun /****************************************************************************/ 3304*4882a593Smuzhiyun struct enable_crtc_parameters 3305*4882a593Smuzhiyun { 3306*4882a593Smuzhiyun uint8_t crtc_id; // enum atom_crtc_def 3307*4882a593Smuzhiyun uint8_t enable; // ATOM_ENABLE or ATOM_DISABLE 3308*4882a593Smuzhiyun uint8_t padding[2]; 3309*4882a593Smuzhiyun }; 3310*4882a593Smuzhiyun 3311*4882a593Smuzhiyun 3312*4882a593Smuzhiyun /****************************************************************************/ 3313*4882a593Smuzhiyun // Structure used by EnableDispPowerGating 3314*4882a593Smuzhiyun /****************************************************************************/ 3315*4882a593Smuzhiyun struct enable_disp_power_gating_parameters_v2_1 3316*4882a593Smuzhiyun { 3317*4882a593Smuzhiyun uint8_t disp_pipe_id; // ATOM_CRTC1, ATOM_CRTC2, ... 3318*4882a593Smuzhiyun uint8_t enable; // ATOM_ENABLE or ATOM_DISABLE 3319*4882a593Smuzhiyun uint8_t padding[2]; 3320*4882a593Smuzhiyun }; 3321*4882a593Smuzhiyun 3322*4882a593Smuzhiyun struct enable_disp_power_gating_ps_allocation 3323*4882a593Smuzhiyun { 3324*4882a593Smuzhiyun struct enable_disp_power_gating_parameters_v2_1 param; 3325*4882a593Smuzhiyun uint32_t ulReserved[4]; 3326*4882a593Smuzhiyun }; 3327*4882a593Smuzhiyun 3328*4882a593Smuzhiyun /****************************************************************************/ 3329*4882a593Smuzhiyun // Structure used in setcrtc_usingdtdtiming 3330*4882a593Smuzhiyun /****************************************************************************/ 3331*4882a593Smuzhiyun struct set_crtc_using_dtd_timing_parameters 3332*4882a593Smuzhiyun { 3333*4882a593Smuzhiyun uint16_t h_size; 3334*4882a593Smuzhiyun uint16_t h_blanking_time; 3335*4882a593Smuzhiyun uint16_t v_size; 3336*4882a593Smuzhiyun uint16_t v_blanking_time; 3337*4882a593Smuzhiyun uint16_t h_syncoffset; 3338*4882a593Smuzhiyun uint16_t h_syncwidth; 3339*4882a593Smuzhiyun uint16_t v_syncoffset; 3340*4882a593Smuzhiyun uint16_t v_syncwidth; 3341*4882a593Smuzhiyun uint16_t modemiscinfo; 3342*4882a593Smuzhiyun uint8_t h_border; 3343*4882a593Smuzhiyun uint8_t v_border; 3344*4882a593Smuzhiyun uint8_t crtc_id; // enum atom_crtc_def 3345*4882a593Smuzhiyun uint8_t encoder_mode; // atom_encode_mode_def 3346*4882a593Smuzhiyun uint8_t padding[2]; 3347*4882a593Smuzhiyun }; 3348*4882a593Smuzhiyun 3349*4882a593Smuzhiyun 3350*4882a593Smuzhiyun /****************************************************************************/ 3351*4882a593Smuzhiyun // Structures used by processi2cchanneltransaction 3352*4882a593Smuzhiyun /****************************************************************************/ 3353*4882a593Smuzhiyun struct process_i2c_channel_transaction_parameters 3354*4882a593Smuzhiyun { 3355*4882a593Smuzhiyun uint8_t i2cspeed_khz; 3356*4882a593Smuzhiyun union { 3357*4882a593Smuzhiyun uint8_t regindex; 3358*4882a593Smuzhiyun uint8_t status; /* enum atom_process_i2c_flag */ 3359*4882a593Smuzhiyun } regind_status; 3360*4882a593Smuzhiyun uint16_t i2c_data_out; 3361*4882a593Smuzhiyun uint8_t flag; /* enum atom_process_i2c_status */ 3362*4882a593Smuzhiyun uint8_t trans_bytes; 3363*4882a593Smuzhiyun uint8_t slave_addr; 3364*4882a593Smuzhiyun uint8_t i2c_id; 3365*4882a593Smuzhiyun }; 3366*4882a593Smuzhiyun 3367*4882a593Smuzhiyun //ucFlag 3368*4882a593Smuzhiyun enum atom_process_i2c_flag 3369*4882a593Smuzhiyun { 3370*4882a593Smuzhiyun HW_I2C_WRITE = 1, 3371*4882a593Smuzhiyun HW_I2C_READ = 0, 3372*4882a593Smuzhiyun I2C_2BYTE_ADDR = 0x02, 3373*4882a593Smuzhiyun HW_I2C_SMBUS_BYTE_WR = 0x04, 3374*4882a593Smuzhiyun }; 3375*4882a593Smuzhiyun 3376*4882a593Smuzhiyun //status 3377*4882a593Smuzhiyun enum atom_process_i2c_status 3378*4882a593Smuzhiyun { 3379*4882a593Smuzhiyun HW_ASSISTED_I2C_STATUS_FAILURE =2, 3380*4882a593Smuzhiyun HW_ASSISTED_I2C_STATUS_SUCCESS =1, 3381*4882a593Smuzhiyun }; 3382*4882a593Smuzhiyun 3383*4882a593Smuzhiyun 3384*4882a593Smuzhiyun /****************************************************************************/ 3385*4882a593Smuzhiyun // Structures used by processauxchanneltransaction 3386*4882a593Smuzhiyun /****************************************************************************/ 3387*4882a593Smuzhiyun 3388*4882a593Smuzhiyun struct process_aux_channel_transaction_parameters_v1_2 3389*4882a593Smuzhiyun { 3390*4882a593Smuzhiyun uint16_t aux_request; 3391*4882a593Smuzhiyun uint16_t dataout; 3392*4882a593Smuzhiyun uint8_t channelid; 3393*4882a593Smuzhiyun union { 3394*4882a593Smuzhiyun uint8_t reply_status; 3395*4882a593Smuzhiyun uint8_t aux_delay; 3396*4882a593Smuzhiyun } aux_status_delay; 3397*4882a593Smuzhiyun uint8_t dataout_len; 3398*4882a593Smuzhiyun uint8_t hpd_id; //=0: HPD1, =1: HPD2, =2: HPD3, =3: HPD4, =4: HPD5, =5: HPD6 3399*4882a593Smuzhiyun }; 3400*4882a593Smuzhiyun 3401*4882a593Smuzhiyun 3402*4882a593Smuzhiyun /****************************************************************************/ 3403*4882a593Smuzhiyun // Structures used by selectcrtc_source 3404*4882a593Smuzhiyun /****************************************************************************/ 3405*4882a593Smuzhiyun 3406*4882a593Smuzhiyun struct select_crtc_source_parameters_v2_3 3407*4882a593Smuzhiyun { 3408*4882a593Smuzhiyun uint8_t crtc_id; // enum atom_crtc_def 3409*4882a593Smuzhiyun uint8_t encoder_id; // enum atom_dig_def 3410*4882a593Smuzhiyun uint8_t encode_mode; // enum atom_encode_mode_def 3411*4882a593Smuzhiyun uint8_t dst_bpc; // enum atom_panel_bit_per_color 3412*4882a593Smuzhiyun }; 3413*4882a593Smuzhiyun 3414*4882a593Smuzhiyun 3415*4882a593Smuzhiyun /****************************************************************************/ 3416*4882a593Smuzhiyun // Structures used by digxencodercontrol 3417*4882a593Smuzhiyun /****************************************************************************/ 3418*4882a593Smuzhiyun 3419*4882a593Smuzhiyun // ucAction: 3420*4882a593Smuzhiyun enum atom_dig_encoder_control_action 3421*4882a593Smuzhiyun { 3422*4882a593Smuzhiyun ATOM_ENCODER_CMD_DISABLE_DIG = 0, 3423*4882a593Smuzhiyun ATOM_ENCODER_CMD_ENABLE_DIG = 1, 3424*4882a593Smuzhiyun ATOM_ENCODER_CMD_DP_LINK_TRAINING_START = 0x08, 3425*4882a593Smuzhiyun ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN1 = 0x09, 3426*4882a593Smuzhiyun ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN2 = 0x0a, 3427*4882a593Smuzhiyun ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN3 = 0x13, 3428*4882a593Smuzhiyun ATOM_ENCODER_CMD_DP_LINK_TRAINING_COMPLETE = 0x0b, 3429*4882a593Smuzhiyun ATOM_ENCODER_CMD_DP_VIDEO_OFF = 0x0c, 3430*4882a593Smuzhiyun ATOM_ENCODER_CMD_DP_VIDEO_ON = 0x0d, 3431*4882a593Smuzhiyun ATOM_ENCODER_CMD_SETUP_PANEL_MODE = 0x10, 3432*4882a593Smuzhiyun ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN4 = 0x14, 3433*4882a593Smuzhiyun ATOM_ENCODER_CMD_STREAM_SETUP = 0x0F, 3434*4882a593Smuzhiyun ATOM_ENCODER_CMD_LINK_SETUP = 0x11, 3435*4882a593Smuzhiyun ATOM_ENCODER_CMD_ENCODER_BLANK = 0x12, 3436*4882a593Smuzhiyun }; 3437*4882a593Smuzhiyun 3438*4882a593Smuzhiyun //define ucPanelMode 3439*4882a593Smuzhiyun enum atom_dig_encoder_control_panelmode 3440*4882a593Smuzhiyun { 3441*4882a593Smuzhiyun DP_PANEL_MODE_DISABLE = 0x00, 3442*4882a593Smuzhiyun DP_PANEL_MODE_ENABLE_eDP_MODE = 0x01, 3443*4882a593Smuzhiyun DP_PANEL_MODE_ENABLE_LVLINK_MODE = 0x11, 3444*4882a593Smuzhiyun }; 3445*4882a593Smuzhiyun 3446*4882a593Smuzhiyun //ucDigId 3447*4882a593Smuzhiyun enum atom_dig_encoder_control_v5_digid 3448*4882a593Smuzhiyun { 3449*4882a593Smuzhiyun ATOM_ENCODER_CONFIG_V5_DIG0_ENCODER = 0x00, 3450*4882a593Smuzhiyun ATOM_ENCODER_CONFIG_V5_DIG1_ENCODER = 0x01, 3451*4882a593Smuzhiyun ATOM_ENCODER_CONFIG_V5_DIG2_ENCODER = 0x02, 3452*4882a593Smuzhiyun ATOM_ENCODER_CONFIG_V5_DIG3_ENCODER = 0x03, 3453*4882a593Smuzhiyun ATOM_ENCODER_CONFIG_V5_DIG4_ENCODER = 0x04, 3454*4882a593Smuzhiyun ATOM_ENCODER_CONFIG_V5_DIG5_ENCODER = 0x05, 3455*4882a593Smuzhiyun ATOM_ENCODER_CONFIG_V5_DIG6_ENCODER = 0x06, 3456*4882a593Smuzhiyun ATOM_ENCODER_CONFIG_V5_DIG7_ENCODER = 0x07, 3457*4882a593Smuzhiyun }; 3458*4882a593Smuzhiyun 3459*4882a593Smuzhiyun struct dig_encoder_stream_setup_parameters_v1_5 3460*4882a593Smuzhiyun { 3461*4882a593Smuzhiyun uint8_t digid; // 0~6 map to DIG0~DIG6 enum atom_dig_encoder_control_v5_digid 3462*4882a593Smuzhiyun uint8_t action; // = ATOM_ENOCODER_CMD_STREAM_SETUP 3463*4882a593Smuzhiyun uint8_t digmode; // ATOM_ENCODER_MODE_DP/ATOM_ENCODER_MODE_DVI/ATOM_ENCODER_MODE_HDMI 3464*4882a593Smuzhiyun uint8_t lanenum; // Lane number 3465*4882a593Smuzhiyun uint32_t pclk_10khz; // Pixel Clock in 10Khz 3466*4882a593Smuzhiyun uint8_t bitpercolor; 3467*4882a593Smuzhiyun uint8_t dplinkrate_270mhz;//= DP link rate/270Mhz, =6: 1.62G = 10: 2.7G, =20: 5.4Ghz, =30: 8.1Ghz etc 3468*4882a593Smuzhiyun uint8_t reserved[2]; 3469*4882a593Smuzhiyun }; 3470*4882a593Smuzhiyun 3471*4882a593Smuzhiyun struct dig_encoder_link_setup_parameters_v1_5 3472*4882a593Smuzhiyun { 3473*4882a593Smuzhiyun uint8_t digid; // 0~6 map to DIG0~DIG6 enum atom_dig_encoder_control_v5_digid 3474*4882a593Smuzhiyun uint8_t action; // = ATOM_ENOCODER_CMD_LINK_SETUP 3475*4882a593Smuzhiyun uint8_t digmode; // ATOM_ENCODER_MODE_DP/ATOM_ENCODER_MODE_DVI/ATOM_ENCODER_MODE_HDMI 3476*4882a593Smuzhiyun uint8_t lanenum; // Lane number 3477*4882a593Smuzhiyun uint8_t symclk_10khz; // Symbol Clock in 10Khz 3478*4882a593Smuzhiyun uint8_t hpd_sel; 3479*4882a593Smuzhiyun uint8_t digfe_sel; // DIG stream( front-end ) selection, bit0 means DIG0 FE is enable, 3480*4882a593Smuzhiyun uint8_t reserved[2]; 3481*4882a593Smuzhiyun }; 3482*4882a593Smuzhiyun 3483*4882a593Smuzhiyun struct dp_panel_mode_set_parameters_v1_5 3484*4882a593Smuzhiyun { 3485*4882a593Smuzhiyun uint8_t digid; // 0~6 map to DIG0~DIG6 enum atom_dig_encoder_control_v5_digid 3486*4882a593Smuzhiyun uint8_t action; // = ATOM_ENCODER_CMD_DPLINK_SETUP 3487*4882a593Smuzhiyun uint8_t panelmode; // enum atom_dig_encoder_control_panelmode 3488*4882a593Smuzhiyun uint8_t reserved1; 3489*4882a593Smuzhiyun uint32_t reserved2[2]; 3490*4882a593Smuzhiyun }; 3491*4882a593Smuzhiyun 3492*4882a593Smuzhiyun struct dig_encoder_generic_cmd_parameters_v1_5 3493*4882a593Smuzhiyun { 3494*4882a593Smuzhiyun uint8_t digid; // 0~6 map to DIG0~DIG6 enum atom_dig_encoder_control_v5_digid 3495*4882a593Smuzhiyun uint8_t action; // = rest of generic encoder command which does not carry any parameters 3496*4882a593Smuzhiyun uint8_t reserved1[2]; 3497*4882a593Smuzhiyun uint32_t reserved2[2]; 3498*4882a593Smuzhiyun }; 3499*4882a593Smuzhiyun 3500*4882a593Smuzhiyun union dig_encoder_control_parameters_v1_5 3501*4882a593Smuzhiyun { 3502*4882a593Smuzhiyun struct dig_encoder_generic_cmd_parameters_v1_5 cmd_param; 3503*4882a593Smuzhiyun struct dig_encoder_stream_setup_parameters_v1_5 stream_param; 3504*4882a593Smuzhiyun struct dig_encoder_link_setup_parameters_v1_5 link_param; 3505*4882a593Smuzhiyun struct dp_panel_mode_set_parameters_v1_5 dppanel_param; 3506*4882a593Smuzhiyun }; 3507*4882a593Smuzhiyun 3508*4882a593Smuzhiyun /* 3509*4882a593Smuzhiyun *************************************************************************** 3510*4882a593Smuzhiyun Structures used by dig1transmittercontrol 3511*4882a593Smuzhiyun *************************************************************************** 3512*4882a593Smuzhiyun */ 3513*4882a593Smuzhiyun struct dig_transmitter_control_parameters_v1_6 3514*4882a593Smuzhiyun { 3515*4882a593Smuzhiyun uint8_t phyid; // 0=UNIPHYA, 1=UNIPHYB, 2=UNIPHYC, 3=UNIPHYD, 4= UNIPHYE 5=UNIPHYF 3516*4882a593Smuzhiyun uint8_t action; // define as ATOM_TRANSMITER_ACTION_xxx 3517*4882a593Smuzhiyun union { 3518*4882a593Smuzhiyun uint8_t digmode; // enum atom_encode_mode_def 3519*4882a593Smuzhiyun uint8_t dplaneset; // DP voltage swing and pre-emphasis value defined in DPCD DP_LANE_SET, "DP_LANE_SET__xDB_y_zV" 3520*4882a593Smuzhiyun } mode_laneset; 3521*4882a593Smuzhiyun uint8_t lanenum; // Lane number 1, 2, 4, 8 3522*4882a593Smuzhiyun uint32_t symclk_10khz; // Symbol Clock in 10Khz 3523*4882a593Smuzhiyun uint8_t hpdsel; // =1: HPD1, =2: HPD2, .... =6: HPD6, =0: HPD is not assigned 3524*4882a593Smuzhiyun uint8_t digfe_sel; // DIG stream( front-end ) selection, bit0 means DIG0 FE is enable, 3525*4882a593Smuzhiyun uint8_t connobj_id; // Connector Object Id defined in ObjectId.h 3526*4882a593Smuzhiyun uint8_t reserved; 3527*4882a593Smuzhiyun uint32_t reserved1; 3528*4882a593Smuzhiyun }; 3529*4882a593Smuzhiyun 3530*4882a593Smuzhiyun struct dig_transmitter_control_ps_allocation_v1_6 3531*4882a593Smuzhiyun { 3532*4882a593Smuzhiyun struct dig_transmitter_control_parameters_v1_6 param; 3533*4882a593Smuzhiyun uint32_t reserved[4]; 3534*4882a593Smuzhiyun }; 3535*4882a593Smuzhiyun 3536*4882a593Smuzhiyun //ucAction 3537*4882a593Smuzhiyun enum atom_dig_transmitter_control_action 3538*4882a593Smuzhiyun { 3539*4882a593Smuzhiyun ATOM_TRANSMITTER_ACTION_DISABLE = 0, 3540*4882a593Smuzhiyun ATOM_TRANSMITTER_ACTION_ENABLE = 1, 3541*4882a593Smuzhiyun ATOM_TRANSMITTER_ACTION_LCD_BLOFF = 2, 3542*4882a593Smuzhiyun ATOM_TRANSMITTER_ACTION_LCD_BLON = 3, 3543*4882a593Smuzhiyun ATOM_TRANSMITTER_ACTION_BL_BRIGHTNESS_CONTROL = 4, 3544*4882a593Smuzhiyun ATOM_TRANSMITTER_ACTION_LCD_SELFTEST_START = 5, 3545*4882a593Smuzhiyun ATOM_TRANSMITTER_ACTION_LCD_SELFTEST_STOP = 6, 3546*4882a593Smuzhiyun ATOM_TRANSMITTER_ACTION_INIT = 7, 3547*4882a593Smuzhiyun ATOM_TRANSMITTER_ACTION_DISABLE_OUTPUT = 8, 3548*4882a593Smuzhiyun ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT = 9, 3549*4882a593Smuzhiyun ATOM_TRANSMITTER_ACTION_SETUP = 10, 3550*4882a593Smuzhiyun ATOM_TRANSMITTER_ACTION_SETUP_VSEMPH = 11, 3551*4882a593Smuzhiyun ATOM_TRANSMITTER_ACTION_POWER_ON = 12, 3552*4882a593Smuzhiyun ATOM_TRANSMITTER_ACTION_POWER_OFF = 13, 3553*4882a593Smuzhiyun }; 3554*4882a593Smuzhiyun 3555*4882a593Smuzhiyun // digfe_sel 3556*4882a593Smuzhiyun enum atom_dig_transmitter_control_digfe_sel 3557*4882a593Smuzhiyun { 3558*4882a593Smuzhiyun ATOM_TRANMSITTER_V6__DIGA_SEL = 0x01, 3559*4882a593Smuzhiyun ATOM_TRANMSITTER_V6__DIGB_SEL = 0x02, 3560*4882a593Smuzhiyun ATOM_TRANMSITTER_V6__DIGC_SEL = 0x04, 3561*4882a593Smuzhiyun ATOM_TRANMSITTER_V6__DIGD_SEL = 0x08, 3562*4882a593Smuzhiyun ATOM_TRANMSITTER_V6__DIGE_SEL = 0x10, 3563*4882a593Smuzhiyun ATOM_TRANMSITTER_V6__DIGF_SEL = 0x20, 3564*4882a593Smuzhiyun ATOM_TRANMSITTER_V6__DIGG_SEL = 0x40, 3565*4882a593Smuzhiyun }; 3566*4882a593Smuzhiyun 3567*4882a593Smuzhiyun 3568*4882a593Smuzhiyun //ucHPDSel 3569*4882a593Smuzhiyun enum atom_dig_transmitter_control_hpd_sel 3570*4882a593Smuzhiyun { 3571*4882a593Smuzhiyun ATOM_TRANSMITTER_V6_NO_HPD_SEL = 0x00, 3572*4882a593Smuzhiyun ATOM_TRANSMITTER_V6_HPD1_SEL = 0x01, 3573*4882a593Smuzhiyun ATOM_TRANSMITTER_V6_HPD2_SEL = 0x02, 3574*4882a593Smuzhiyun ATOM_TRANSMITTER_V6_HPD3_SEL = 0x03, 3575*4882a593Smuzhiyun ATOM_TRANSMITTER_V6_HPD4_SEL = 0x04, 3576*4882a593Smuzhiyun ATOM_TRANSMITTER_V6_HPD5_SEL = 0x05, 3577*4882a593Smuzhiyun ATOM_TRANSMITTER_V6_HPD6_SEL = 0x06, 3578*4882a593Smuzhiyun }; 3579*4882a593Smuzhiyun 3580*4882a593Smuzhiyun // ucDPLaneSet 3581*4882a593Smuzhiyun enum atom_dig_transmitter_control_dplaneset 3582*4882a593Smuzhiyun { 3583*4882a593Smuzhiyun DP_LANE_SET__0DB_0_4V = 0x00, 3584*4882a593Smuzhiyun DP_LANE_SET__0DB_0_6V = 0x01, 3585*4882a593Smuzhiyun DP_LANE_SET__0DB_0_8V = 0x02, 3586*4882a593Smuzhiyun DP_LANE_SET__0DB_1_2V = 0x03, 3587*4882a593Smuzhiyun DP_LANE_SET__3_5DB_0_4V = 0x08, 3588*4882a593Smuzhiyun DP_LANE_SET__3_5DB_0_6V = 0x09, 3589*4882a593Smuzhiyun DP_LANE_SET__3_5DB_0_8V = 0x0a, 3590*4882a593Smuzhiyun DP_LANE_SET__6DB_0_4V = 0x10, 3591*4882a593Smuzhiyun DP_LANE_SET__6DB_0_6V = 0x11, 3592*4882a593Smuzhiyun DP_LANE_SET__9_5DB_0_4V = 0x18, 3593*4882a593Smuzhiyun }; 3594*4882a593Smuzhiyun 3595*4882a593Smuzhiyun 3596*4882a593Smuzhiyun 3597*4882a593Smuzhiyun /****************************************************************************/ 3598*4882a593Smuzhiyun // Structures used by ExternalEncoderControl V2.4 3599*4882a593Smuzhiyun /****************************************************************************/ 3600*4882a593Smuzhiyun 3601*4882a593Smuzhiyun struct external_encoder_control_parameters_v2_4 3602*4882a593Smuzhiyun { 3603*4882a593Smuzhiyun uint16_t pixelclock_10khz; // pixel clock in 10Khz, valid when ucAction=SETUP/ENABLE_OUTPUT 3604*4882a593Smuzhiyun uint8_t config; // indicate which encoder, and DP link rate when ucAction = SETUP/ENABLE_OUTPUT 3605*4882a593Smuzhiyun uint8_t action; // 3606*4882a593Smuzhiyun uint8_t encodermode; // encoder mode, only used when ucAction = SETUP/ENABLE_OUTPUT 3607*4882a593Smuzhiyun uint8_t lanenum; // lane number, only used when ucAction = SETUP/ENABLE_OUTPUT 3608*4882a593Smuzhiyun uint8_t bitpercolor; // output bit per color, only valid when ucAction = SETUP/ENABLE_OUTPUT and ucEncodeMode= DP 3609*4882a593Smuzhiyun uint8_t hpd_id; 3610*4882a593Smuzhiyun }; 3611*4882a593Smuzhiyun 3612*4882a593Smuzhiyun 3613*4882a593Smuzhiyun // ucAction 3614*4882a593Smuzhiyun enum external_encoder_control_action_def 3615*4882a593Smuzhiyun { 3616*4882a593Smuzhiyun EXTERNAL_ENCODER_ACTION_V3_DISABLE_OUTPUT = 0x00, 3617*4882a593Smuzhiyun EXTERNAL_ENCODER_ACTION_V3_ENABLE_OUTPUT = 0x01, 3618*4882a593Smuzhiyun EXTERNAL_ENCODER_ACTION_V3_ENCODER_INIT = 0x07, 3619*4882a593Smuzhiyun EXTERNAL_ENCODER_ACTION_V3_ENCODER_SETUP = 0x0f, 3620*4882a593Smuzhiyun EXTERNAL_ENCODER_ACTION_V3_ENCODER_BLANKING_OFF = 0x10, 3621*4882a593Smuzhiyun EXTERNAL_ENCODER_ACTION_V3_ENCODER_BLANKING = 0x11, 3622*4882a593Smuzhiyun EXTERNAL_ENCODER_ACTION_V3_DACLOAD_DETECTION = 0x12, 3623*4882a593Smuzhiyun EXTERNAL_ENCODER_ACTION_V3_DDC_SETUP = 0x14, 3624*4882a593Smuzhiyun }; 3625*4882a593Smuzhiyun 3626*4882a593Smuzhiyun // ucConfig 3627*4882a593Smuzhiyun enum external_encoder_control_v2_4_config_def 3628*4882a593Smuzhiyun { 3629*4882a593Smuzhiyun EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_MASK = 0x03, 3630*4882a593Smuzhiyun EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_1_62GHZ = 0x00, 3631*4882a593Smuzhiyun EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_2_70GHZ = 0x01, 3632*4882a593Smuzhiyun EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_5_40GHZ = 0x02, 3633*4882a593Smuzhiyun EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_3_24GHZ = 0x03, 3634*4882a593Smuzhiyun EXTERNAL_ENCODER_CONFIG_V3_ENCODER_SEL_MAKS = 0x70, 3635*4882a593Smuzhiyun EXTERNAL_ENCODER_CONFIG_V3_ENCODER1 = 0x00, 3636*4882a593Smuzhiyun EXTERNAL_ENCODER_CONFIG_V3_ENCODER2 = 0x10, 3637*4882a593Smuzhiyun EXTERNAL_ENCODER_CONFIG_V3_ENCODER3 = 0x20, 3638*4882a593Smuzhiyun }; 3639*4882a593Smuzhiyun 3640*4882a593Smuzhiyun struct external_encoder_control_ps_allocation_v2_4 3641*4882a593Smuzhiyun { 3642*4882a593Smuzhiyun struct external_encoder_control_parameters_v2_4 sExtEncoder; 3643*4882a593Smuzhiyun uint32_t reserved[2]; 3644*4882a593Smuzhiyun }; 3645*4882a593Smuzhiyun 3646*4882a593Smuzhiyun 3647*4882a593Smuzhiyun /* 3648*4882a593Smuzhiyun *************************************************************************** 3649*4882a593Smuzhiyun AMD ACPI Table 3650*4882a593Smuzhiyun 3651*4882a593Smuzhiyun *************************************************************************** 3652*4882a593Smuzhiyun */ 3653*4882a593Smuzhiyun 3654*4882a593Smuzhiyun struct amd_acpi_description_header{ 3655*4882a593Smuzhiyun uint32_t signature; 3656*4882a593Smuzhiyun uint32_t tableLength; //Length 3657*4882a593Smuzhiyun uint8_t revision; 3658*4882a593Smuzhiyun uint8_t checksum; 3659*4882a593Smuzhiyun uint8_t oemId[6]; 3660*4882a593Smuzhiyun uint8_t oemTableId[8]; //UINT64 OemTableId; 3661*4882a593Smuzhiyun uint32_t oemRevision; 3662*4882a593Smuzhiyun uint32_t creatorId; 3663*4882a593Smuzhiyun uint32_t creatorRevision; 3664*4882a593Smuzhiyun }; 3665*4882a593Smuzhiyun 3666*4882a593Smuzhiyun struct uefi_acpi_vfct{ 3667*4882a593Smuzhiyun struct amd_acpi_description_header sheader; 3668*4882a593Smuzhiyun uint8_t tableUUID[16]; //0x24 3669*4882a593Smuzhiyun uint32_t vbiosimageoffset; //0x34. Offset to the first GOP_VBIOS_CONTENT block from the beginning of the stucture. 3670*4882a593Smuzhiyun uint32_t lib1Imageoffset; //0x38. Offset to the first GOP_LIB1_CONTENT block from the beginning of the stucture. 3671*4882a593Smuzhiyun uint32_t reserved[4]; //0x3C 3672*4882a593Smuzhiyun }; 3673*4882a593Smuzhiyun 3674*4882a593Smuzhiyun struct vfct_image_header{ 3675*4882a593Smuzhiyun uint32_t pcibus; //0x4C 3676*4882a593Smuzhiyun uint32_t pcidevice; //0x50 3677*4882a593Smuzhiyun uint32_t pcifunction; //0x54 3678*4882a593Smuzhiyun uint16_t vendorid; //0x58 3679*4882a593Smuzhiyun uint16_t deviceid; //0x5A 3680*4882a593Smuzhiyun uint16_t ssvid; //0x5C 3681*4882a593Smuzhiyun uint16_t ssid; //0x5E 3682*4882a593Smuzhiyun uint32_t revision; //0x60 3683*4882a593Smuzhiyun uint32_t imagelength; //0x64 3684*4882a593Smuzhiyun }; 3685*4882a593Smuzhiyun 3686*4882a593Smuzhiyun 3687*4882a593Smuzhiyun struct gop_vbios_content { 3688*4882a593Smuzhiyun struct vfct_image_header vbiosheader; 3689*4882a593Smuzhiyun uint8_t vbioscontent[1]; 3690*4882a593Smuzhiyun }; 3691*4882a593Smuzhiyun 3692*4882a593Smuzhiyun struct gop_lib1_content { 3693*4882a593Smuzhiyun struct vfct_image_header lib1header; 3694*4882a593Smuzhiyun uint8_t lib1content[1]; 3695*4882a593Smuzhiyun }; 3696*4882a593Smuzhiyun 3697*4882a593Smuzhiyun 3698*4882a593Smuzhiyun 3699*4882a593Smuzhiyun /* 3700*4882a593Smuzhiyun *************************************************************************** 3701*4882a593Smuzhiyun Scratch Register definitions 3702*4882a593Smuzhiyun Each number below indicates which scratch regiser request, Active and 3703*4882a593Smuzhiyun Connect all share the same definitions as display_device_tag defines 3704*4882a593Smuzhiyun *************************************************************************** 3705*4882a593Smuzhiyun */ 3706*4882a593Smuzhiyun 3707*4882a593Smuzhiyun enum scratch_register_def{ 3708*4882a593Smuzhiyun ATOM_DEVICE_CONNECT_INFO_DEF = 0, 3709*4882a593Smuzhiyun ATOM_BL_BRI_LEVEL_INFO_DEF = 2, 3710*4882a593Smuzhiyun ATOM_ACTIVE_INFO_DEF = 3, 3711*4882a593Smuzhiyun ATOM_LCD_INFO_DEF = 4, 3712*4882a593Smuzhiyun ATOM_DEVICE_REQ_INFO_DEF = 5, 3713*4882a593Smuzhiyun ATOM_ACC_CHANGE_INFO_DEF = 6, 3714*4882a593Smuzhiyun ATOM_PRE_OS_MODE_INFO_DEF = 7, 3715*4882a593Smuzhiyun ATOM_PRE_OS_ASSERTION_DEF = 8, //For GOP to record a 32bit assertion code, this is enabled by default in prodution GOP drivers. 3716*4882a593Smuzhiyun ATOM_INTERNAL_TIMER_INFO_DEF = 10, 3717*4882a593Smuzhiyun }; 3718*4882a593Smuzhiyun 3719*4882a593Smuzhiyun enum scratch_device_connect_info_bit_def{ 3720*4882a593Smuzhiyun ATOM_DISPLAY_LCD1_CONNECT =0x0002, 3721*4882a593Smuzhiyun ATOM_DISPLAY_DFP1_CONNECT =0x0008, 3722*4882a593Smuzhiyun ATOM_DISPLAY_DFP2_CONNECT =0x0080, 3723*4882a593Smuzhiyun ATOM_DISPLAY_DFP3_CONNECT =0x0200, 3724*4882a593Smuzhiyun ATOM_DISPLAY_DFP4_CONNECT =0x0400, 3725*4882a593Smuzhiyun ATOM_DISPLAY_DFP5_CONNECT =0x0800, 3726*4882a593Smuzhiyun ATOM_DISPLAY_DFP6_CONNECT =0x0040, 3727*4882a593Smuzhiyun ATOM_DISPLAY_DFPx_CONNECT =0x0ec8, 3728*4882a593Smuzhiyun ATOM_CONNECT_INFO_DEVICE_MASK =0x0fff, 3729*4882a593Smuzhiyun }; 3730*4882a593Smuzhiyun 3731*4882a593Smuzhiyun enum scratch_bl_bri_level_info_bit_def{ 3732*4882a593Smuzhiyun ATOM_CURRENT_BL_LEVEL_SHIFT =0x8, 3733*4882a593Smuzhiyun #ifndef _H2INC 3734*4882a593Smuzhiyun ATOM_CURRENT_BL_LEVEL_MASK =0x0000ff00, 3735*4882a593Smuzhiyun ATOM_DEVICE_DPMS_STATE =0x00010000, 3736*4882a593Smuzhiyun #endif 3737*4882a593Smuzhiyun }; 3738*4882a593Smuzhiyun 3739*4882a593Smuzhiyun enum scratch_active_info_bits_def{ 3740*4882a593Smuzhiyun ATOM_DISPLAY_LCD1_ACTIVE =0x0002, 3741*4882a593Smuzhiyun ATOM_DISPLAY_DFP1_ACTIVE =0x0008, 3742*4882a593Smuzhiyun ATOM_DISPLAY_DFP2_ACTIVE =0x0080, 3743*4882a593Smuzhiyun ATOM_DISPLAY_DFP3_ACTIVE =0x0200, 3744*4882a593Smuzhiyun ATOM_DISPLAY_DFP4_ACTIVE =0x0400, 3745*4882a593Smuzhiyun ATOM_DISPLAY_DFP5_ACTIVE =0x0800, 3746*4882a593Smuzhiyun ATOM_DISPLAY_DFP6_ACTIVE =0x0040, 3747*4882a593Smuzhiyun ATOM_ACTIVE_INFO_DEVICE_MASK =0x0fff, 3748*4882a593Smuzhiyun }; 3749*4882a593Smuzhiyun 3750*4882a593Smuzhiyun enum scratch_device_req_info_bits_def{ 3751*4882a593Smuzhiyun ATOM_DISPLAY_LCD1_REQ =0x0002, 3752*4882a593Smuzhiyun ATOM_DISPLAY_DFP1_REQ =0x0008, 3753*4882a593Smuzhiyun ATOM_DISPLAY_DFP2_REQ =0x0080, 3754*4882a593Smuzhiyun ATOM_DISPLAY_DFP3_REQ =0x0200, 3755*4882a593Smuzhiyun ATOM_DISPLAY_DFP4_REQ =0x0400, 3756*4882a593Smuzhiyun ATOM_DISPLAY_DFP5_REQ =0x0800, 3757*4882a593Smuzhiyun ATOM_DISPLAY_DFP6_REQ =0x0040, 3758*4882a593Smuzhiyun ATOM_REQ_INFO_DEVICE_MASK =0x0fff, 3759*4882a593Smuzhiyun }; 3760*4882a593Smuzhiyun 3761*4882a593Smuzhiyun enum scratch_acc_change_info_bitshift_def{ 3762*4882a593Smuzhiyun ATOM_ACC_CHANGE_ACC_MODE_SHIFT =4, 3763*4882a593Smuzhiyun ATOM_ACC_CHANGE_LID_STATUS_SHIFT =6, 3764*4882a593Smuzhiyun }; 3765*4882a593Smuzhiyun 3766*4882a593Smuzhiyun enum scratch_acc_change_info_bits_def{ 3767*4882a593Smuzhiyun ATOM_ACC_CHANGE_ACC_MODE =0x00000010, 3768*4882a593Smuzhiyun ATOM_ACC_CHANGE_LID_STATUS =0x00000040, 3769*4882a593Smuzhiyun }; 3770*4882a593Smuzhiyun 3771*4882a593Smuzhiyun enum scratch_pre_os_mode_info_bits_def{ 3772*4882a593Smuzhiyun ATOM_PRE_OS_MODE_MASK =0x00000003, 3773*4882a593Smuzhiyun ATOM_PRE_OS_MODE_VGA =0x00000000, 3774*4882a593Smuzhiyun ATOM_PRE_OS_MODE_VESA =0x00000001, 3775*4882a593Smuzhiyun ATOM_PRE_OS_MODE_GOP =0x00000002, 3776*4882a593Smuzhiyun ATOM_PRE_OS_MODE_PIXEL_DEPTH =0x0000000C, 3777*4882a593Smuzhiyun ATOM_PRE_OS_MODE_PIXEL_FORMAT_MASK=0x000000F0, 3778*4882a593Smuzhiyun ATOM_PRE_OS_MODE_8BIT_PAL_EN =0x00000100, 3779*4882a593Smuzhiyun ATOM_ASIC_INIT_COMPLETE =0x00000200, 3780*4882a593Smuzhiyun #ifndef _H2INC 3781*4882a593Smuzhiyun ATOM_PRE_OS_MODE_NUMBER_MASK =0xFFFF0000, 3782*4882a593Smuzhiyun #endif 3783*4882a593Smuzhiyun }; 3784*4882a593Smuzhiyun 3785*4882a593Smuzhiyun 3786*4882a593Smuzhiyun 3787*4882a593Smuzhiyun /* 3788*4882a593Smuzhiyun *************************************************************************** 3789*4882a593Smuzhiyun ATOM firmware ID header file 3790*4882a593Smuzhiyun !! Please keep it at end of the atomfirmware.h !! 3791*4882a593Smuzhiyun *************************************************************************** 3792*4882a593Smuzhiyun */ 3793*4882a593Smuzhiyun #include "atomfirmwareid.h" 3794*4882a593Smuzhiyun #pragma pack() 3795*4882a593Smuzhiyun 3796*4882a593Smuzhiyun #endif 3797*4882a593Smuzhiyun 3798