Path: blob/master/drivers/gpu/drm/amd/include/atomfirmware.h
26517 views
/****************************************************************************\1*2* File Name atomfirmware.h3* Project This is an interface header file between atombios and OS GPU drivers for SoC15 products4*5* Description header file of general definitions for OS and pre-OS video drivers6*7* Copyright 2014 Advanced Micro Devices, Inc.8*9* Permission is hereby granted, free of charge, to any person obtaining a copy of this software10* and associated documentation files (the "Software"), to deal in the Software without restriction,11* including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,12* and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,13* subject to the following conditions:14*15* The above copyright notice and this permission notice shall be included in all copies or substantial16* portions of the Software.17*18* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR19* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,20* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL21* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR22* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,23* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR24* OTHER DEALINGS IN THE SOFTWARE.25*26\****************************************************************************/2728/*IMPORTANT NOTES29* 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.30* 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.31* 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.32*/3334#ifndef _ATOMFIRMWARE_H_35#define _ATOMFIRMWARE_H_3637enum atom_bios_header_version_def{38ATOM_MAJOR_VERSION =0x0003,39ATOM_MINOR_VERSION =0x0003,40};4142#ifdef _H2INC43#ifndef uint32_t44typedef unsigned long uint32_t;45#endif4647#ifndef uint16_t48typedef unsigned short uint16_t;49#endif5051#ifndef uint8_t52typedef unsigned char uint8_t;53#endif54#endif5556enum atom_crtc_def{57ATOM_CRTC1 =0,58ATOM_CRTC2 =1,59ATOM_CRTC3 =2,60ATOM_CRTC4 =3,61ATOM_CRTC5 =4,62ATOM_CRTC6 =5,63ATOM_CRTC_INVALID =0xff,64};6566enum atom_ppll_def{67ATOM_PPLL0 =2,68ATOM_GCK_DFS =8,69ATOM_FCH_CLK =9,70ATOM_DP_DTO =11,71ATOM_COMBOPHY_PLL0 =20,72ATOM_COMBOPHY_PLL1 =21,73ATOM_COMBOPHY_PLL2 =22,74ATOM_COMBOPHY_PLL3 =23,75ATOM_COMBOPHY_PLL4 =24,76ATOM_COMBOPHY_PLL5 =25,77ATOM_PPLL_INVALID =0xff,78};7980// define ASIC internal encoder id ( bit vector ), used for CRTC_SourceSel81enum atom_dig_def{82ASIC_INT_DIG1_ENCODER_ID =0x03,83ASIC_INT_DIG2_ENCODER_ID =0x09,84ASIC_INT_DIG3_ENCODER_ID =0x0a,85ASIC_INT_DIG4_ENCODER_ID =0x0b,86ASIC_INT_DIG5_ENCODER_ID =0x0c,87ASIC_INT_DIG6_ENCODER_ID =0x0d,88ASIC_INT_DIG7_ENCODER_ID =0x0e,89};9091//ucEncoderMode92enum atom_encode_mode_def93{94ATOM_ENCODER_MODE_DP =0,95ATOM_ENCODER_MODE_DP_SST =0,96ATOM_ENCODER_MODE_LVDS =1,97ATOM_ENCODER_MODE_DVI =2,98ATOM_ENCODER_MODE_HDMI =3,99ATOM_ENCODER_MODE_DP_AUDIO =5,100ATOM_ENCODER_MODE_DP_MST =5,101ATOM_ENCODER_MODE_CRT =15,102ATOM_ENCODER_MODE_DVO =16,103};104105enum atom_encoder_refclk_src_def{106ENCODER_REFCLK_SRC_P1PLL =0,107ENCODER_REFCLK_SRC_P2PLL =1,108ENCODER_REFCLK_SRC_P3PLL =2,109ENCODER_REFCLK_SRC_EXTCLK =3,110ENCODER_REFCLK_SRC_INVALID =0xff,111};112113enum atom_scaler_def{114ATOM_SCALER_DISABLE =0, /*scaler bypass mode, auto-center & no replication*/115ATOM_SCALER_CENTER =1, //For Fudo, it's bypass and auto-center & auto replication116ATOM_SCALER_EXPANSION =2, /*scaler expansion by 2 tap alpha blending mode*/117};118119enum atom_operation_def{120ATOM_DISABLE = 0,121ATOM_ENABLE = 1,122ATOM_INIT = 7,123ATOM_GET_STATUS = 8,124};125126enum atom_embedded_display_op_def{127ATOM_LCD_BL_OFF = 2,128ATOM_LCD_BL_OM = 3,129ATOM_LCD_BL_BRIGHTNESS_CONTROL = 4,130ATOM_LCD_SELFTEST_START = 5,131ATOM_LCD_SELFTEST_STOP = 6,132};133134enum atom_spread_spectrum_mode{135ATOM_SS_CENTER_OR_DOWN_MODE_MASK = 0x01,136ATOM_SS_DOWN_SPREAD_MODE = 0x00,137ATOM_SS_CENTRE_SPREAD_MODE = 0x01,138ATOM_INT_OR_EXT_SS_MASK = 0x02,139ATOM_INTERNAL_SS_MASK = 0x00,140ATOM_EXTERNAL_SS_MASK = 0x02,141};142143/* define panel bit per color */144enum atom_panel_bit_per_color{145PANEL_BPC_UNDEFINE =0x00,146PANEL_6BIT_PER_COLOR =0x01,147PANEL_8BIT_PER_COLOR =0x02,148PANEL_10BIT_PER_COLOR =0x03,149PANEL_12BIT_PER_COLOR =0x04,150PANEL_16BIT_PER_COLOR =0x05,151};152153//ucVoltageType154enum atom_voltage_type155{156VOLTAGE_TYPE_VDDC = 1,157VOLTAGE_TYPE_MVDDC = 2,158VOLTAGE_TYPE_MVDDQ = 3,159VOLTAGE_TYPE_VDDCI = 4,160VOLTAGE_TYPE_VDDGFX = 5,161VOLTAGE_TYPE_PCC = 6,162VOLTAGE_TYPE_MVPP = 7,163VOLTAGE_TYPE_LEDDPM = 8,164VOLTAGE_TYPE_PCC_MVDD = 9,165VOLTAGE_TYPE_PCIE_VDDC = 10,166VOLTAGE_TYPE_PCIE_VDDR = 11,167VOLTAGE_TYPE_GENERIC_I2C_1 = 0x11,168VOLTAGE_TYPE_GENERIC_I2C_2 = 0x12,169VOLTAGE_TYPE_GENERIC_I2C_3 = 0x13,170VOLTAGE_TYPE_GENERIC_I2C_4 = 0x14,171VOLTAGE_TYPE_GENERIC_I2C_5 = 0x15,172VOLTAGE_TYPE_GENERIC_I2C_6 = 0x16,173VOLTAGE_TYPE_GENERIC_I2C_7 = 0x17,174VOLTAGE_TYPE_GENERIC_I2C_8 = 0x18,175VOLTAGE_TYPE_GENERIC_I2C_9 = 0x19,176VOLTAGE_TYPE_GENERIC_I2C_10 = 0x1A,177};178179enum atom_dgpu_vram_type {180ATOM_DGPU_VRAM_TYPE_GDDR5 = 0x50,181ATOM_DGPU_VRAM_TYPE_HBM2 = 0x60,182ATOM_DGPU_VRAM_TYPE_HBM2E = 0x61,183ATOM_DGPU_VRAM_TYPE_GDDR6 = 0x70,184ATOM_DGPU_VRAM_TYPE_HBM3 = 0x80,185ATOM_DGPU_VRAM_TYPE_HBM3E = 0x81,186};187188enum atom_dp_vs_preemph_def{189DP_VS_LEVEL0_PREEMPH_LEVEL0 = 0x00,190DP_VS_LEVEL1_PREEMPH_LEVEL0 = 0x01,191DP_VS_LEVEL2_PREEMPH_LEVEL0 = 0x02,192DP_VS_LEVEL3_PREEMPH_LEVEL0 = 0x03,193DP_VS_LEVEL0_PREEMPH_LEVEL1 = 0x08,194DP_VS_LEVEL1_PREEMPH_LEVEL1 = 0x09,195DP_VS_LEVEL2_PREEMPH_LEVEL1 = 0x0a,196DP_VS_LEVEL0_PREEMPH_LEVEL2 = 0x10,197DP_VS_LEVEL1_PREEMPH_LEVEL2 = 0x11,198DP_VS_LEVEL0_PREEMPH_LEVEL3 = 0x18,199};200201#define BIOS_ATOM_PREFIX "ATOMBIOS"202#define BIOS_VERSION_PREFIX "ATOMBIOSBK-AMD"203#define BIOS_STRING_LENGTH 43204205/*206enum atom_string_def{207asic_bus_type_pcie_string = "PCI_EXPRESS",208atom_fire_gl_string = "FGL",209atom_bios_string = "ATOM"210};211*/212213#pragma pack(1) /* BIOS data must use byte aligment*/214215enum atombios_image_offset{216OFFSET_TO_ATOM_ROM_HEADER_POINTER = 0x00000048,217OFFSET_TO_ATOM_ROM_IMAGE_SIZE = 0x00000002,218OFFSET_TO_ATOMBIOS_ASIC_BUS_MEM_TYPE = 0x94,219MAXSIZE_OF_ATOMBIOS_ASIC_BUS_MEM_TYPE = 20, /*including the terminator 0x0!*/220OFFSET_TO_GET_ATOMBIOS_NUMBER_OF_STRINGS = 0x2f,221OFFSET_TO_GET_ATOMBIOS_STRING_START = 0x6e,222OFFSET_TO_VBIOS_PART_NUMBER = 0x80,223OFFSET_TO_VBIOS_DATE = 0x50,224};225226/****************************************************************************227* Common header for all tables (Data table, Command function).228* Every table pointed in _ATOM_MASTER_DATA_TABLE has this common header.229* And the pointer actually points to this header.230****************************************************************************/231232struct atom_common_table_header233{234uint16_t structuresize;235uint8_t format_revision; //mainly used for a hw function, when the parser is not backward compatible236uint8_t content_revision; //change it when a data table has a structure change, or a hw function has a input/output parameter change237};238239/****************************************************************************240* Structure stores the ROM header.241****************************************************************************/242struct atom_rom_header_v2_2243{244struct atom_common_table_header table_header;245uint8_t atom_bios_string[4]; //enum atom_string_def atom_bios_string; //Signature to distinguish between Atombios and non-atombios,246uint16_t bios_segment_address;247uint16_t protectedmodeoffset;248uint16_t configfilenameoffset;249uint16_t crc_block_offset;250uint16_t vbios_bootupmessageoffset;251uint16_t int10_offset;252uint16_t pcibusdevinitcode;253uint16_t iobaseaddress;254uint16_t subsystem_vendor_id;255uint16_t subsystem_id;256uint16_t pci_info_offset;257uint16_t masterhwfunction_offset; //Offest for SW to get all command function offsets, Don't change the position258uint16_t masterdatatable_offset; //Offest for SW to get all data table offsets, Don't change the position259uint16_t reserved;260uint32_t pspdirtableoffset;261};262263/*==============================hw function portion======================================================================*/264265266/****************************************************************************267* Structures used in Command.mtb, each function name is not given here since those function could change from time to time268* The real functionality of each function is associated with the parameter structure version when defined269* For all internal cmd function definitions, please reference to atomstruct.h270****************************************************************************/271struct atom_master_list_of_command_functions_v2_1{272uint16_t asic_init; //Function273uint16_t cmd_function1; //used as an internal one274uint16_t cmd_function2; //used as an internal one275uint16_t cmd_function3; //used as an internal one276uint16_t digxencodercontrol; //Function277uint16_t cmd_function5; //used as an internal one278uint16_t cmd_function6; //used as an internal one279uint16_t cmd_function7; //used as an internal one280uint16_t cmd_function8; //used as an internal one281uint16_t cmd_function9; //used as an internal one282uint16_t setengineclock; //Function283uint16_t setmemoryclock; //Function284uint16_t setpixelclock; //Function285uint16_t enabledisppowergating; //Function286uint16_t cmd_function14; //used as an internal one287uint16_t cmd_function15; //used as an internal one288uint16_t cmd_function16; //used as an internal one289uint16_t cmd_function17; //used as an internal one290uint16_t cmd_function18; //used as an internal one291uint16_t cmd_function19; //used as an internal one292uint16_t cmd_function20; //used as an internal one293uint16_t cmd_function21; //used as an internal one294uint16_t cmd_function22; //used as an internal one295uint16_t cmd_function23; //used as an internal one296uint16_t cmd_function24; //used as an internal one297uint16_t cmd_function25; //used as an internal one298uint16_t cmd_function26; //used as an internal one299uint16_t cmd_function27; //used as an internal one300uint16_t cmd_function28; //used as an internal one301uint16_t cmd_function29; //used as an internal one302uint16_t cmd_function30; //used as an internal one303uint16_t cmd_function31; //used as an internal one304uint16_t cmd_function32; //used as an internal one305uint16_t cmd_function33; //used as an internal one306uint16_t blankcrtc; //Function307uint16_t enablecrtc; //Function308uint16_t cmd_function36; //used as an internal one309uint16_t cmd_function37; //used as an internal one310uint16_t cmd_function38; //used as an internal one311uint16_t cmd_function39; //used as an internal one312uint16_t cmd_function40; //used as an internal one313uint16_t getsmuclockinfo; //Function314uint16_t selectcrtc_source; //Function315uint16_t cmd_function43; //used as an internal one316uint16_t cmd_function44; //used as an internal one317uint16_t cmd_function45; //used as an internal one318uint16_t setdceclock; //Function319uint16_t getmemoryclock; //Function320uint16_t getengineclock; //Function321uint16_t setcrtc_usingdtdtiming; //Function322uint16_t externalencodercontrol; //Function323uint16_t cmd_function51; //used as an internal one324uint16_t cmd_function52; //used as an internal one325uint16_t cmd_function53; //used as an internal one326uint16_t processi2cchanneltransaction;//Function327uint16_t cmd_function55; //used as an internal one328uint16_t cmd_function56; //used as an internal one329uint16_t cmd_function57; //used as an internal one330uint16_t cmd_function58; //used as an internal one331uint16_t cmd_function59; //used as an internal one332uint16_t computegpuclockparam; //Function333uint16_t cmd_function61; //used as an internal one334uint16_t cmd_function62; //used as an internal one335uint16_t dynamicmemorysettings; //Function function336uint16_t memorytraining; //Function function337uint16_t cmd_function65; //used as an internal one338uint16_t cmd_function66; //used as an internal one339uint16_t setvoltage; //Function340uint16_t cmd_function68; //used as an internal one341uint16_t readefusevalue; //Function342uint16_t cmd_function70; //used as an internal one343uint16_t cmd_function71; //used as an internal one344uint16_t cmd_function72; //used as an internal one345uint16_t cmd_function73; //used as an internal one346uint16_t cmd_function74; //used as an internal one347uint16_t cmd_function75; //used as an internal one348uint16_t dig1transmittercontrol; //Function349uint16_t cmd_function77; //used as an internal one350uint16_t processauxchanneltransaction;//Function351uint16_t cmd_function79; //used as an internal one352uint16_t getvoltageinfo; //Function353};354355struct atom_master_command_function_v2_1356{357struct atom_common_table_header table_header;358struct atom_master_list_of_command_functions_v2_1 listofcmdfunctions;359};360361/****************************************************************************362* Structures used in every command function363****************************************************************************/364struct atom_function_attribute365{366uint16_t ws_in_bytes:8; //[7:0]=Size of workspace in Bytes (in multiple of a dword),367uint16_t ps_in_bytes:7; //[14:8]=Size of parameter space in Bytes (multiple of a dword),368uint16_t updated_by_util:1; //[15]=flag to indicate the function is updated by util369};370371372/****************************************************************************373* Common header for all hw functions.374* Every function pointed by _master_list_of_hw_function has this common header.375* And the pointer actually points to this header.376****************************************************************************/377struct atom_rom_hw_function_header378{379struct atom_common_table_header func_header;380struct atom_function_attribute func_attrib;381};382383384/*==============================sw data table portion======================================================================*/385/****************************************************************************386* Structures used in data.mtb, each data table name is not given here since those data table could change from time to time387* The real name of each table is given when its data structure version is defined388****************************************************************************/389struct atom_master_list_of_data_tables_v2_1{390uint16_t utilitypipeline; /* Offest for the utility to get parser info,Don't change this position!*/391uint16_t multimedia_info;392uint16_t smc_dpm_info;393uint16_t sw_datatable3;394uint16_t firmwareinfo; /* Shared by various SW components */395uint16_t sw_datatable5;396uint16_t lcd_info; /* Shared by various SW components */397uint16_t sw_datatable7;398uint16_t smu_info;399uint16_t sw_datatable9;400uint16_t sw_datatable10;401uint16_t vram_usagebyfirmware; /* Shared by various SW components */402uint16_t gpio_pin_lut; /* Shared by various SW components */403uint16_t sw_datatable13;404uint16_t gfx_info;405uint16_t powerplayinfo; /* Shared by various SW components */406uint16_t sw_datatable16;407uint16_t sw_datatable17;408uint16_t sw_datatable18;409uint16_t sw_datatable19;410uint16_t sw_datatable20;411uint16_t sw_datatable21;412uint16_t displayobjectinfo; /* Shared by various SW components */413uint16_t indirectioaccess; /* used as an internal one */414uint16_t umc_info; /* Shared by various SW components */415uint16_t sw_datatable25;416uint16_t sw_datatable26;417uint16_t dce_info; /* Shared by various SW components */418uint16_t vram_info; /* Shared by various SW components */419uint16_t sw_datatable29;420uint16_t integratedsysteminfo; /* Shared by various SW components */421uint16_t asic_profiling_info; /* Shared by various SW components */422uint16_t voltageobject_info; /* shared by various SW components */423uint16_t sw_datatable33;424uint16_t sw_datatable34;425};426427428struct atom_master_data_table_v2_1429{430struct atom_common_table_header table_header;431struct atom_master_list_of_data_tables_v2_1 listOfdatatables;432};433434435struct atom_dtd_format436{437uint16_t pixclk;438uint16_t h_active;439uint16_t h_blanking_time;440uint16_t v_active;441uint16_t v_blanking_time;442uint16_t h_sync_offset;443uint16_t h_sync_width;444uint16_t v_sync_offset;445uint16_t v_syncwidth;446uint16_t reserved;447uint16_t reserved0;448uint8_t h_border;449uint8_t v_border;450uint16_t miscinfo;451uint8_t atom_mode_id;452uint8_t refreshrate;453};454455/* atom_dtd_format.modemiscinfo defintion */456enum atom_dtd_format_modemiscinfo{457ATOM_HSYNC_POLARITY = 0x0002,458ATOM_VSYNC_POLARITY = 0x0004,459ATOM_H_REPLICATIONBY2 = 0x0010,460ATOM_V_REPLICATIONBY2 = 0x0020,461ATOM_INTERLACE = 0x0080,462ATOM_COMPOSITESYNC = 0x0040,463};464465466/* utilitypipeline467* 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.468* the location of it can't change469*/470471472/*473***************************************************************************474Data Table firmwareinfo structure475***************************************************************************476*/477478struct atom_firmware_info_v3_1479{480struct atom_common_table_header table_header;481uint32_t firmware_revision;482uint32_t bootup_sclk_in10khz;483uint32_t bootup_mclk_in10khz;484uint32_t firmware_capability; // enum atombios_firmware_capability485uint32_t main_call_parser_entry; /* direct address of main parser call in VBIOS binary. */486uint32_t bios_scratch_reg_startaddr; // 1st bios scratch register dword address487uint16_t bootup_vddc_mv;488uint16_t bootup_vddci_mv;489uint16_t bootup_mvddc_mv;490uint16_t bootup_vddgfx_mv;491uint8_t mem_module_id;492uint8_t coolingsolution_id; /*0: Air cooling; 1: Liquid cooling ... */493uint8_t reserved1[2];494uint32_t mc_baseaddr_high;495uint32_t mc_baseaddr_low;496uint32_t reserved2[6];497};498499/* Total 32bit cap indication */500enum atombios_firmware_capability501{502ATOM_FIRMWARE_CAP_FIRMWARE_POSTED = 0x00000001,503ATOM_FIRMWARE_CAP_GPU_VIRTUALIZATION = 0x00000002,504ATOM_FIRMWARE_CAP_WMI_SUPPORT = 0x00000040,505ATOM_FIRMWARE_CAP_HWEMU_ENABLE = 0x00000080,506ATOM_FIRMWARE_CAP_HWEMU_UMC_CFG = 0x00000100,507ATOM_FIRMWARE_CAP_SRAM_ECC = 0x00000200,508ATOM_FIRMWARE_CAP_ENABLE_2STAGE_BIST_TRAINING = 0x00000400,509ATOM_FIRMWARE_CAP_ENABLE_2ND_USB20PORT = 0x0008000,510ATOM_FIRMWARE_CAP_DYNAMIC_BOOT_CFG_ENABLE = 0x0020000,511};512513enum atom_cooling_solution_id{514AIR_COOLING = 0x00,515LIQUID_COOLING = 0x01516};517518struct atom_firmware_info_v3_2 {519struct atom_common_table_header table_header;520uint32_t firmware_revision;521uint32_t bootup_sclk_in10khz;522uint32_t bootup_mclk_in10khz;523uint32_t firmware_capability; // enum atombios_firmware_capability524uint32_t main_call_parser_entry; /* direct address of main parser call in VBIOS binary. */525uint32_t bios_scratch_reg_startaddr; // 1st bios scratch register dword address526uint16_t bootup_vddc_mv;527uint16_t bootup_vddci_mv;528uint16_t bootup_mvddc_mv;529uint16_t bootup_vddgfx_mv;530uint8_t mem_module_id;531uint8_t coolingsolution_id; /*0: Air cooling; 1: Liquid cooling ... */532uint8_t reserved1[2];533uint32_t mc_baseaddr_high;534uint32_t mc_baseaddr_low;535uint8_t board_i2c_feature_id; // enum of atom_board_i2c_feature_id_def536uint8_t board_i2c_feature_gpio_id; // i2c id find in gpio_lut data table gpio_id537uint8_t board_i2c_feature_slave_addr;538uint8_t reserved3;539uint16_t bootup_mvddq_mv;540uint16_t bootup_mvpp_mv;541uint32_t zfbstartaddrin16mb;542uint32_t reserved2[3];543};544545struct atom_firmware_info_v3_3546{547struct atom_common_table_header table_header;548uint32_t firmware_revision;549uint32_t bootup_sclk_in10khz;550uint32_t bootup_mclk_in10khz;551uint32_t firmware_capability; // enum atombios_firmware_capability552uint32_t main_call_parser_entry; /* direct address of main parser call in VBIOS binary. */553uint32_t bios_scratch_reg_startaddr; // 1st bios scratch register dword address554uint16_t bootup_vddc_mv;555uint16_t bootup_vddci_mv;556uint16_t bootup_mvddc_mv;557uint16_t bootup_vddgfx_mv;558uint8_t mem_module_id;559uint8_t coolingsolution_id; /*0: Air cooling; 1: Liquid cooling ... */560uint8_t reserved1[2];561uint32_t mc_baseaddr_high;562uint32_t mc_baseaddr_low;563uint8_t board_i2c_feature_id; // enum of atom_board_i2c_feature_id_def564uint8_t board_i2c_feature_gpio_id; // i2c id find in gpio_lut data table gpio_id565uint8_t board_i2c_feature_slave_addr;566uint8_t reserved3;567uint16_t bootup_mvddq_mv;568uint16_t bootup_mvpp_mv;569uint32_t zfbstartaddrin16mb;570uint32_t pplib_pptable_id; // if pplib_pptable_id!=0, pplib get powerplay table inside driver instead of from VBIOS571uint32_t reserved2[2];572};573574struct atom_firmware_info_v3_4 {575struct atom_common_table_header table_header;576uint32_t firmware_revision;577uint32_t bootup_sclk_in10khz;578uint32_t bootup_mclk_in10khz;579uint32_t firmware_capability; // enum atombios_firmware_capability580uint32_t main_call_parser_entry; /* direct address of main parser call in VBIOS binary. */581uint32_t bios_scratch_reg_startaddr; // 1st bios scratch register dword address582uint16_t bootup_vddc_mv;583uint16_t bootup_vddci_mv;584uint16_t bootup_mvddc_mv;585uint16_t bootup_vddgfx_mv;586uint8_t mem_module_id;587uint8_t coolingsolution_id; /*0: Air cooling; 1: Liquid cooling ... */588uint8_t reserved1[2];589uint32_t mc_baseaddr_high;590uint32_t mc_baseaddr_low;591uint8_t board_i2c_feature_id; // enum of atom_board_i2c_feature_id_def592uint8_t board_i2c_feature_gpio_id; // i2c id find in gpio_lut data table gpio_id593uint8_t board_i2c_feature_slave_addr;594uint8_t ras_rom_i2c_slave_addr;595uint16_t bootup_mvddq_mv;596uint16_t bootup_mvpp_mv;597uint32_t zfbstartaddrin16mb;598uint32_t pplib_pptable_id; // if pplib_pptable_id!=0, pplib get powerplay table inside driver instead of from VBIOS599uint32_t mvdd_ratio; // mvdd_raio = (real mvdd in power rail)*1000/(mvdd_output_from_svi2)600uint16_t hw_bootup_vddgfx_mv; // hw default vddgfx voltage level decide by board strap601uint16_t hw_bootup_vddc_mv; // hw default vddc voltage level decide by board strap602uint16_t hw_bootup_mvddc_mv; // hw default mvddc voltage level decide by board strap603uint16_t hw_bootup_vddci_mv; // hw default vddci voltage level decide by board strap604uint32_t maco_pwrlimit_mw; // bomaco mode power limit in unit of m-watt605uint32_t usb_pwrlimit_mw; // power limit when USB is enable in unit of m-watt606uint32_t fw_reserved_size_in_kb; // VBIOS reserved extra fw size in unit of kb.607uint32_t pspbl_init_done_reg_addr;608uint32_t pspbl_init_done_value;609uint32_t pspbl_init_done_check_timeout; // time out in unit of us when polling pspbl init done610uint32_t reserved[2];611};612613struct atom_firmware_info_v3_5 {614struct atom_common_table_header table_header;615uint32_t firmware_revision;616uint32_t bootup_clk_reserved[2];617uint32_t firmware_capability; // enum atombios_firmware_capability618uint32_t fw_protect_region_size_in_kb; /* FW allocate a write protect region at top of FB. */619uint32_t bios_scratch_reg_startaddr; // 1st bios scratch register dword address620uint32_t bootup_voltage_reserved[2];621uint8_t mem_module_id;622uint8_t coolingsolution_id; /*0: Air cooling; 1: Liquid cooling ... */623uint8_t hw_blt_mode; //0:HW_BLT_DMA_PIO_MODE; 1:HW_BLT_LITE_SDMA_MODE; 2:HW_BLT_PCI_IO_MODE624uint8_t reserved1;625uint32_t mc_baseaddr_high;626uint32_t mc_baseaddr_low;627uint8_t board_i2c_feature_id; // enum of atom_board_i2c_feature_id_def628uint8_t board_i2c_feature_gpio_id; // i2c id find in gpio_lut data table gpio_id629uint8_t board_i2c_feature_slave_addr;630uint8_t ras_rom_i2c_slave_addr;631uint32_t bootup_voltage_reserved1;632uint32_t zfb_reserved;633// if pplib_pptable_id!=0, pplib get powerplay table inside driver instead of from VBIOS634uint32_t pplib_pptable_id;635uint32_t hw_voltage_reserved[3];636uint32_t maco_pwrlimit_mw; // bomaco mode power limit in unit of m-watt637uint32_t usb_pwrlimit_mw; // power limit when USB is enable in unit of m-watt638uint32_t fw_reserved_size_in_kb; // VBIOS reserved extra fw size in unit of kb.639uint32_t pspbl_init_reserved[3];640uint32_t spi_rom_size; // GPU spi rom size641uint16_t support_dev_in_objinfo;642uint16_t disp_phy_tunning_size;643uint32_t reserved[16];644};645/*646***************************************************************************647Data Table lcd_info structure648***************************************************************************649*/650651struct lcd_info_v2_1652{653struct atom_common_table_header table_header;654struct atom_dtd_format lcd_timing;655uint16_t backlight_pwm;656uint16_t special_handle_cap;657uint16_t panel_misc;658uint16_t lvds_max_slink_pclk;659uint16_t lvds_ss_percentage;660uint16_t lvds_ss_rate_10hz;661uint8_t pwr_on_digon_to_de; /*all pwr sequence numbers below are in uint of 4ms*/662uint8_t pwr_on_de_to_vary_bl;663uint8_t pwr_down_vary_bloff_to_de;664uint8_t pwr_down_de_to_digoff;665uint8_t pwr_off_delay;666uint8_t pwr_on_vary_bl_to_blon;667uint8_t pwr_down_bloff_to_vary_bloff;668uint8_t panel_bpc;669uint8_t dpcd_edp_config_cap;670uint8_t dpcd_max_link_rate;671uint8_t dpcd_max_lane_count;672uint8_t dpcd_max_downspread;673uint8_t min_allowed_bl_level;674uint8_t max_allowed_bl_level;675uint8_t bootup_bl_level;676uint8_t dplvdsrxid;677uint32_t reserved1[8];678};679680/* lcd_info_v2_1.panel_misc defintion */681enum atom_lcd_info_panel_misc{682ATOM_PANEL_MISC_FPDI =0x0002,683};684685//uceDPToLVDSRxId686enum atom_lcd_info_dptolvds_rx_id687{688eDP_TO_LVDS_RX_DISABLE = 0x00, // no eDP->LVDS translator chip689eDP_TO_LVDS_COMMON_ID = 0x01, // common eDP->LVDS translator chip without AMD SW init690eDP_TO_LVDS_REALTEK_ID = 0x02, // Realtek tansaltor which require AMD SW init691};692693694/*695***************************************************************************696Data Table gpio_pin_lut structure697***************************************************************************698*/699700struct atom_gpio_pin_assignment701{702uint32_t data_a_reg_index;703uint8_t gpio_bitshift;704uint8_t gpio_mask_bitshift;705uint8_t gpio_id;706uint8_t reserved;707};708709/* atom_gpio_pin_assignment.gpio_id definition */710enum atom_gpio_pin_assignment_gpio_id {711I2C_HW_LANE_MUX =0x0f, /* only valid when bit7=1 */712I2C_HW_ENGINE_ID_MASK =0x70, /* only valid when bit7=1 */713I2C_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 */714715/* gpio_id pre-define id for multiple usage */716/* GPIO use to control PCIE_VDDC in certain SLT board */717PCIE_VDDC_CONTROL_GPIO_PINID = 56,718/* if PP_AC_DC_SWITCH_GPIO_PINID in Gpio_Pin_LutTable, AC/DC swithing feature is enable */719PP_AC_DC_SWITCH_GPIO_PINID = 60,720/* VDDC_REGULATOR_VRHOT_GPIO_PINID in Gpio_Pin_LutTable, VRHot feature is enable */721VDDC_VRHOT_GPIO_PINID = 61,722/*if VDDC_PCC_GPIO_PINID in GPIO_LUTable, Peak Current Control feature is enabled */723VDDC_PCC_GPIO_PINID = 62,724/* Only used on certain SLT/PA board to allow utility to cut Efuse. */725EFUSE_CUT_ENABLE_GPIO_PINID = 63,726/* ucGPIO=DRAM_SELF_REFRESH_GPIO_PIND uses for memory self refresh (ucGPIO=0, DRAM self-refresh; ucGPIO= */727DRAM_SELF_REFRESH_GPIO_PINID = 64,728/* Thermal interrupt output->system thermal chip GPIO pin */729THERMAL_INT_OUTPUT_GPIO_PINID =65,730};731732733struct atom_gpio_pin_lut_v2_1734{735struct atom_common_table_header table_header;736/*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 */737struct atom_gpio_pin_assignment gpio_pin[];738};739740741/*742* VBIOS/PRE-OS always reserve a FB region at the top of frame buffer. driver should not write743* access that region. driver can allocate their own reservation region as long as it does not744* overlap firwmare's reservation region.745* if (pre-NV1X) atom data table firmwareInfoTable version < 3.3:746* in this case, atom data table vram_usagebyfirmwareTable version always <= 2.1747* if VBIOS/UEFI GOP is posted:748* VBIOS/UEFIGOP update used_by_firmware_in_kb = total reserved size by VBIOS749* update start_address_in_kb = total_mem_size_in_kb - used_by_firmware_in_kb;750* ( total_mem_size_in_kb = reg(CONFIG_MEMSIZE)<<10)751* driver can allocate driver reservation region under firmware reservation,752* used_by_driver_in_kb = driver reservation size753* driver reservation start address = (start_address_in_kb - used_by_driver_in_kb)754* Comment1[hchan]: There is only one reservation at the beginning of the FB reserved by755* host driver. Host driver would overwrite the table with the following756* used_by_firmware_in_kb = total reserved size for pf-vf info exchange and757* set SRIOV_MSG_SHARE_RESERVATION mask start_address_in_kb = 0758* else there is no VBIOS reservation region:759* driver must allocate driver reservation region at top of FB.760* driver set used_by_driver_in_kb = driver reservation size761* driver reservation start address = (total_mem_size_in_kb - used_by_driver_in_kb)762* same as Comment1763* else (NV1X and after):764* if VBIOS/UEFI GOP is posted:765* VBIOS/UEFIGOP update:766* used_by_firmware_in_kb = atom_firmware_Info_v3_3.fw_reserved_size_in_kb;767* start_address_in_kb = total_mem_size_in_kb - used_by_firmware_in_kb;768* (total_mem_size_in_kb = reg(CONFIG_MEMSIZE)<<10)769* if vram_usagebyfirmwareTable version <= 2.1:770* driver can allocate driver reservation region under firmware reservation,771* driver set used_by_driver_in_kb = driver reservation size772* driver reservation start address = start_address_in_kb - used_by_driver_in_kb773* same as Comment1774* else driver can:775* allocate it reservation any place as long as it does overlap pre-OS FW reservation area776* set used_by_driver_region0_in_kb = driver reservation size777* set driver_region0_start_address_in_kb = driver reservation region start address778* Comment2[hchan]: Host driver can set used_by_firmware_in_kb and start_address_in_kb to779* zero as the reservation for VF as it doesn’t exist. And Host driver should also780* update atom_firmware_Info table to remove the same VBIOS reservation as well.781*/782783struct vram_usagebyfirmware_v2_1784{785struct atom_common_table_header table_header;786uint32_t start_address_in_kb;787uint16_t used_by_firmware_in_kb;788uint16_t used_by_driver_in_kb;789};790791struct vram_usagebyfirmware_v2_2 {792struct atom_common_table_header table_header;793uint32_t fw_region_start_address_in_kb;794uint16_t used_by_firmware_in_kb;795uint16_t reserved;796uint32_t driver_region0_start_address_in_kb;797uint32_t used_by_driver_region0_in_kb;798uint32_t reserved32[7];799};800801/*802***************************************************************************803Data Table displayobjectinfo structure804***************************************************************************805*/806807enum atom_object_record_type_id {808ATOM_I2C_RECORD_TYPE = 1,809ATOM_HPD_INT_RECORD_TYPE = 2,810ATOM_CONNECTOR_CAP_RECORD_TYPE = 3,811ATOM_CONNECTOR_SPEED_UPTO = 4,812ATOM_OBJECT_GPIO_CNTL_RECORD_TYPE = 9,813ATOM_CONNECTOR_HPDPIN_LUT_RECORD_TYPE = 16,814ATOM_CONNECTOR_AUXDDC_LUT_RECORD_TYPE = 17,815ATOM_ENCODER_CAP_RECORD_TYPE = 20,816ATOM_BRACKET_LAYOUT_RECORD_TYPE = 21,817ATOM_CONNECTOR_FORCED_TMDS_CAP_RECORD_TYPE = 22,818ATOM_DISP_CONNECTOR_CAPS_RECORD_TYPE = 23,819ATOM_BRACKET_LAYOUT_V2_RECORD_TYPE = 25,820ATOM_RECORD_END_TYPE = 0xFF,821};822823struct atom_common_record_header824{825uint8_t record_type; //An emun to indicate the record type826uint8_t record_size; //The size of the whole record in byte827};828829struct atom_i2c_record830{831struct atom_common_record_header record_header; //record_type = ATOM_I2C_RECORD_TYPE832uint8_t i2c_id;833uint8_t i2c_slave_addr; //The slave address, it's 0 when the record is attached to connector for DDC834};835836struct atom_hpd_int_record837{838struct atom_common_record_header record_header; //record_type = ATOM_HPD_INT_RECORD_TYPE839uint8_t pin_id; //Corresponding block in GPIO_PIN_INFO table gives the pin info840uint8_t plugin_pin_state;841};842843struct atom_connector_caps_record {844struct atom_common_record_header845record_header; //record_type = ATOM_CONN_CAP_RECORD_TYPE846uint16_t connector_caps; //01b if internal display is checked; 10b if internal BL is checked; 0 of Not847};848849struct atom_connector_speed_record {850struct atom_common_record_header851record_header; //record_type = ATOM_CONN_SPEED_UPTO852uint32_t connector_max_speed; // connector Max speed attribute, it sets 8100 in Mhz when DP connector @8.1Ghz.853uint16_t reserved;854};855856// Bit maps for ATOM_ENCODER_CAP_RECORD.usEncoderCap857enum atom_encoder_caps_def858{859ATOM_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_EN860ATOM_ENCODER_CAP_RECORD_MST_EN =0x01, // from SI, this bit means DP MST is enable or not.861ATOM_ENCODER_CAP_RECORD_HBR2_EN =0x02, // DP1.2 HBR2 setting is qualified and HBR2 can be enabled862ATOM_ENCODER_CAP_RECORD_HDMI6Gbps_EN =0x04, // HDMI2.0 6Gbps enable or not.863ATOM_ENCODER_CAP_RECORD_HBR3_EN =0x08, // DP1.3 HBR3 is supported by board.864ATOM_ENCODER_CAP_RECORD_DP2 =0x10, // DP2 is supported by ASIC/board.865ATOM_ENCODER_CAP_RECORD_UHBR10_EN =0x20, // DP2.0 UHBR10 settings is supported by board866ATOM_ENCODER_CAP_RECORD_UHBR13_5_EN =0x40, // DP2.0 UHBR13.5 settings is supported by board867ATOM_ENCODER_CAP_RECORD_UHBR20_EN =0x80, // DP2.0 UHBR20 settings is supported by board868ATOM_ENCODER_CAP_RECORD_USB_C_TYPE =0x100, // the DP connector is a USB-C type.869};870871struct atom_encoder_caps_record872{873struct atom_common_record_header record_header; //record_type = ATOM_ENCODER_CAP_RECORD_TYPE874uint32_t encodercaps;875};876877enum atom_connector_caps_def878{879ATOM_CONNECTOR_CAP_INTERNAL_DISPLAY = 0x01, //a cap bit to indicate that this non-embedded display connector is an internal display880ATOM_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 freq881};882883struct atom_disp_connector_caps_record884{885struct atom_common_record_header record_header;886uint32_t connectcaps;887};888889//The following generic object gpio pin control record type will replace JTAG_RECORD/FPGA_CONTROL_RECORD/DVI_EXT_INPUT_RECORD above gradually890struct atom_gpio_pin_control_pair891{892uint8_t gpio_id; // GPIO_ID, find the corresponding ID in GPIO_LUT table893uint8_t gpio_pinstate; // Pin state showing how to set-up the pin894};895896struct atom_object_gpio_cntl_record897{898struct atom_common_record_header record_header;899uint8_t flag; // Future expnadibility900uint8_t number_of_pins; // Number of GPIO pins used to control the object901struct atom_gpio_pin_control_pair gpio[1]; // the real gpio pin pair determined by number of pins ucNumberOfPins902};903904//Definitions for GPIO pin state905enum atom_gpio_pin_control_pinstate_def906{907GPIO_PIN_TYPE_INPUT = 0x00,908GPIO_PIN_TYPE_OUTPUT = 0x10,909GPIO_PIN_TYPE_HW_CONTROL = 0x20,910911//For GPIO_PIN_TYPE_OUTPUT the following is defined912GPIO_PIN_OUTPUT_STATE_MASK = 0x01,913GPIO_PIN_OUTPUT_STATE_SHIFT = 0,914GPIO_PIN_STATE_ACTIVE_LOW = 0x0,915GPIO_PIN_STATE_ACTIVE_HIGH = 0x1,916};917918// Indexes to GPIO array in GLSync record919// GLSync record is for Frame Lock/Gen Lock feature.920enum atom_glsync_record_gpio_index_def921{922ATOM_GPIO_INDEX_GLSYNC_REFCLK = 0,923ATOM_GPIO_INDEX_GLSYNC_HSYNC = 1,924ATOM_GPIO_INDEX_GLSYNC_VSYNC = 2,925ATOM_GPIO_INDEX_GLSYNC_SWAP_REQ = 3,926ATOM_GPIO_INDEX_GLSYNC_SWAP_GNT = 4,927ATOM_GPIO_INDEX_GLSYNC_INTERRUPT = 5,928ATOM_GPIO_INDEX_GLSYNC_V_RESET = 6,929ATOM_GPIO_INDEX_GLSYNC_SWAP_CNTL = 7,930ATOM_GPIO_INDEX_GLSYNC_SWAP_SEL = 8,931ATOM_GPIO_INDEX_GLSYNC_MAX = 9,932};933934935struct atom_connector_hpdpin_lut_record //record for ATOM_CONNECTOR_HPDPIN_LUT_RECORD_TYPE936{937struct atom_common_record_header record_header;938uint8_t hpd_pin_map[8];939};940941struct atom_connector_auxddc_lut_record //record for ATOM_CONNECTOR_AUXDDC_LUT_RECORD_TYPE942{943struct atom_common_record_header record_header;944uint8_t aux_ddc_map[8];945};946947struct atom_connector_forced_tmds_cap_record948{949struct atom_common_record_header record_header;950// override TMDS capability on this connector when it operate in TMDS mode. usMaxTmdsClkRate = max TMDS Clock in Mhz/2.5951uint8_t maxtmdsclkrate_in2_5mhz;952uint8_t reserved;953};954955struct atom_connector_layout_info956{957uint16_t connectorobjid;958uint8_t connector_type;959uint8_t position;960};961962// define ATOM_CONNECTOR_LAYOUT_INFO.ucConnectorType to describe the display connector size963enum atom_connector_layout_info_connector_type_def964{965CONNECTOR_TYPE_DVI_D = 1,966967CONNECTOR_TYPE_HDMI = 4,968CONNECTOR_TYPE_DISPLAY_PORT = 5,969CONNECTOR_TYPE_MINI_DISPLAY_PORT = 6,970};971972struct atom_bracket_layout_record973{974struct atom_common_record_header record_header;975uint8_t bracketlen;976uint8_t bracketwidth;977uint8_t conn_num;978uint8_t reserved;979struct atom_connector_layout_info conn_info[1];980};981struct atom_bracket_layout_record_v2 {982struct atom_common_record_header983record_header; //record_type = ATOM_BRACKET_LAYOUT_RECORD_TYPE984uint8_t bracketlen; //Bracket Length in mm985uint8_t bracketwidth; //Bracket Width in mm986uint8_t conn_num; //Connector numbering987uint8_t mini_type; //Mini Type (0 = Normal; 1 = Mini)988uint8_t reserved1;989uint8_t reserved2;990};991992enum atom_connector_layout_info_mini_type_def {993MINI_TYPE_NORMAL = 0,994MINI_TYPE_MINI = 1,995};996997enum atom_display_device_tag_def{998ATOM_DISPLAY_LCD1_SUPPORT = 0x0002, //an embedded display is either an LVDS or eDP signal type of display999ATOM_DISPLAY_LCD2_SUPPORT = 0x0020, //second edp device tag 0x0020 for backward compability1000ATOM_DISPLAY_DFP1_SUPPORT = 0x0008,1001ATOM_DISPLAY_DFP2_SUPPORT = 0x0080,1002ATOM_DISPLAY_DFP3_SUPPORT = 0x0200,1003ATOM_DISPLAY_DFP4_SUPPORT = 0x0400,1004ATOM_DISPLAY_DFP5_SUPPORT = 0x0800,1005ATOM_DISPLAY_DFP6_SUPPORT = 0x0040,1006ATOM_DISPLAY_DFPx_SUPPORT = 0x0ec8,1007};10081009struct atom_display_object_path_v21010{1011uint16_t display_objid; //Connector Object ID or Misc Object ID1012uint16_t disp_recordoffset;1013uint16_t encoderobjid; //first encoder closer to the connector, could be either an external or intenal encoder1014uint16_t extencoderobjid; //2nd encoder after the first encoder, from the connector point of view;1015uint16_t encoder_recordoffset;1016uint16_t extencoder_recordoffset;1017uint16_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 first1018uint8_t priority_id;1019uint8_t reserved;1020};10211022struct atom_display_object_path_v3 {1023uint16_t display_objid; //Connector Object ID or Misc Object ID1024uint16_t disp_recordoffset;1025uint16_t encoderobjid; //first encoder closer to the connector, could be either an external or intenal encoder1026uint16_t reserved1; //only on USBC case, otherwise always = 01027uint16_t reserved2; //reserved and always = 01028uint16_t reserved3; //reserved and always = 01029//a supported device vector, each display path starts with this.the paths are enumerated in the way of priority,1030//a path appears first1031uint16_t device_tag;1032uint16_t reserved4; //reserved and always = 01033};10341035struct display_object_info_table_v1_41036{1037struct atom_common_table_header table_header;1038uint16_t supporteddevices;1039uint8_t number_of_path;1040uint8_t reserved;1041struct atom_display_object_path_v2 display_path[]; //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_path1042};10431044struct display_object_info_table_v1_5 {1045struct atom_common_table_header table_header;1046uint16_t supporteddevices;1047uint8_t number_of_path;1048uint8_t reserved;1049// the real number of this included in the structure is calculated by using the1050// (whole structure size - the header size- number_of_path)/size of atom_display_object_path1051struct atom_display_object_path_v3 display_path[];1052};10531054/*1055***************************************************************************1056Data Table dce_info structure1057***************************************************************************1058*/1059struct atom_display_controller_info_v4_11060{1061struct atom_common_table_header table_header;1062uint32_t display_caps;1063uint32_t bootup_dispclk_10khz;1064uint16_t dce_refclk_10khz;1065uint16_t i2c_engine_refclk_10khz;1066uint16_t dvi_ss_percentage; // in unit of 0.001%1067uint16_t dvi_ss_rate_10hz;1068uint16_t hdmi_ss_percentage; // in unit of 0.001%1069uint16_t hdmi_ss_rate_10hz;1070uint16_t dp_ss_percentage; // in unit of 0.001%1071uint16_t dp_ss_rate_10hz;1072uint8_t dvi_ss_mode; // enum of atom_spread_spectrum_mode1073uint8_t hdmi_ss_mode; // enum of atom_spread_spectrum_mode1074uint8_t dp_ss_mode; // enum of atom_spread_spectrum_mode1075uint8_t ss_reserved;1076uint8_t hardcode_mode_num; // a hardcode mode number defined in StandardVESA_TimingTable when a CRT or DFP EDID is not available1077uint8_t reserved1[3];1078uint16_t dpphy_refclk_10khz;1079uint16_t reserved2;1080uint8_t dceip_min_ver;1081uint8_t dceip_max_ver;1082uint8_t max_disp_pipe_num;1083uint8_t max_vbios_active_disp_pipe_num;1084uint8_t max_ppll_num;1085uint8_t max_disp_phy_num;1086uint8_t max_aux_pairs;1087uint8_t remotedisplayconfig;1088uint8_t reserved3[8];1089};10901091struct atom_display_controller_info_v4_21092{1093struct atom_common_table_header table_header;1094uint32_t display_caps;1095uint32_t bootup_dispclk_10khz;1096uint16_t dce_refclk_10khz;1097uint16_t i2c_engine_refclk_10khz;1098uint16_t dvi_ss_percentage; // in unit of 0.001%1099uint16_t dvi_ss_rate_10hz;1100uint16_t hdmi_ss_percentage; // in unit of 0.001%1101uint16_t hdmi_ss_rate_10hz;1102uint16_t dp_ss_percentage; // in unit of 0.001%1103uint16_t dp_ss_rate_10hz;1104uint8_t dvi_ss_mode; // enum of atom_spread_spectrum_mode1105uint8_t hdmi_ss_mode; // enum of atom_spread_spectrum_mode1106uint8_t dp_ss_mode; // enum of atom_spread_spectrum_mode1107uint8_t ss_reserved;1108uint8_t dfp_hardcode_mode_num; // DFP hardcode mode number defined in StandardVESA_TimingTable when EDID is not available1109uint8_t dfp_hardcode_refreshrate;// DFP hardcode mode refreshrate defined in StandardVESA_TimingTable when EDID is not available1110uint8_t vga_hardcode_mode_num; // VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable1111uint8_t vga_hardcode_refreshrate;// VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable1112uint16_t dpphy_refclk_10khz;1113uint16_t reserved2;1114uint8_t dcnip_min_ver;1115uint8_t dcnip_max_ver;1116uint8_t max_disp_pipe_num;1117uint8_t max_vbios_active_disp_pipe_num;1118uint8_t max_ppll_num;1119uint8_t max_disp_phy_num;1120uint8_t max_aux_pairs;1121uint8_t remotedisplayconfig;1122uint8_t reserved3[8];1123};11241125struct atom_display_controller_info_v4_31126{1127struct atom_common_table_header table_header;1128uint32_t display_caps;1129uint32_t bootup_dispclk_10khz;1130uint16_t dce_refclk_10khz;1131uint16_t i2c_engine_refclk_10khz;1132uint16_t dvi_ss_percentage; // in unit of 0.001%1133uint16_t dvi_ss_rate_10hz;1134uint16_t hdmi_ss_percentage; // in unit of 0.001%1135uint16_t hdmi_ss_rate_10hz;1136uint16_t dp_ss_percentage; // in unit of 0.001%1137uint16_t dp_ss_rate_10hz;1138uint8_t dvi_ss_mode; // enum of atom_spread_spectrum_mode1139uint8_t hdmi_ss_mode; // enum of atom_spread_spectrum_mode1140uint8_t dp_ss_mode; // enum of atom_spread_spectrum_mode1141uint8_t ss_reserved;1142uint8_t dfp_hardcode_mode_num; // DFP hardcode mode number defined in StandardVESA_TimingTable when EDID is not available1143uint8_t dfp_hardcode_refreshrate;// DFP hardcode mode refreshrate defined in StandardVESA_TimingTable when EDID is not available1144uint8_t vga_hardcode_mode_num; // VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable1145uint8_t vga_hardcode_refreshrate;// VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable1146uint16_t dpphy_refclk_10khz;1147uint16_t reserved2;1148uint8_t dcnip_min_ver;1149uint8_t dcnip_max_ver;1150uint8_t max_disp_pipe_num;1151uint8_t max_vbios_active_disp_pipe_num;1152uint8_t max_ppll_num;1153uint8_t max_disp_phy_num;1154uint8_t max_aux_pairs;1155uint8_t remotedisplayconfig;1156uint8_t reserved3[8];1157};11581159struct atom_display_controller_info_v4_4 {1160struct atom_common_table_header table_header;1161uint32_t display_caps;1162uint32_t bootup_dispclk_10khz;1163uint16_t dce_refclk_10khz;1164uint16_t i2c_engine_refclk_10khz;1165uint16_t dvi_ss_percentage; // in unit of 0.001%1166uint16_t dvi_ss_rate_10hz;1167uint16_t hdmi_ss_percentage; // in unit of 0.001%1168uint16_t hdmi_ss_rate_10hz;1169uint16_t dp_ss_percentage; // in unit of 0.001%1170uint16_t dp_ss_rate_10hz;1171uint8_t dvi_ss_mode; // enum of atom_spread_spectrum_mode1172uint8_t hdmi_ss_mode; // enum of atom_spread_spectrum_mode1173uint8_t dp_ss_mode; // enum of atom_spread_spectrum_mode1174uint8_t ss_reserved;1175uint8_t dfp_hardcode_mode_num; // DFP hardcode mode number defined in StandardVESA_TimingTable when EDID is not available1176uint8_t dfp_hardcode_refreshrate;// DFP hardcode mode refreshrate defined in StandardVESA_TimingTable when EDID is not available1177uint8_t vga_hardcode_mode_num; // VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable1178uint8_t vga_hardcode_refreshrate;// VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable1179uint16_t dpphy_refclk_10khz;1180uint16_t hw_chip_id;1181uint8_t dcnip_min_ver;1182uint8_t dcnip_max_ver;1183uint8_t max_disp_pipe_num;1184uint8_t max_vbios_active_disp_pipum;1185uint8_t max_ppll_num;1186uint8_t max_disp_phy_num;1187uint8_t max_aux_pairs;1188uint8_t remotedisplayconfig;1189uint32_t dispclk_pll_vco_freq;1190uint32_t dp_ref_clk_freq;1191uint32_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)1192uint32_t max_sr_exit_lat; // Worst case memory self refresh exit time, units of 100ns of ns (0.1us)1193uint32_t max_sr_enter_exit_lat; // Worst case memory self refresh entry followed by immediate exit time, units of 100ns of ns (0.1us)1194uint16_t dc_golden_table_offset; // point of struct of atom_dc_golden_table_vxx1195uint16_t dc_golden_table_ver;1196uint32_t reserved3[3];1197};11981199struct atom_dc_golden_table_v11200{1201uint32_t aux_dphy_rx_control0_val;1202uint32_t aux_dphy_tx_control_val;1203uint32_t aux_dphy_rx_control1_val;1204uint32_t dc_gpio_aux_ctrl_0_val;1205uint32_t dc_gpio_aux_ctrl_1_val;1206uint32_t dc_gpio_aux_ctrl_2_val;1207uint32_t dc_gpio_aux_ctrl_3_val;1208uint32_t dc_gpio_aux_ctrl_4_val;1209uint32_t dc_gpio_aux_ctrl_5_val;1210uint32_t reserved[23];1211};12121213enum dce_info_caps_def {1214// only for VBIOS1215DCE_INFO_CAPS_FORCE_DISPDEV_CONNECTED = 0x02,1216// only for VBIOS1217DCE_INFO_CAPS_DISABLE_DFP_DP_HBR2 = 0x04,1218// only for VBIOS1219DCE_INFO_CAPS_ENABLE_INTERLAC_TIMING = 0x08,1220// only for VBIOS1221DCE_INFO_CAPS_LTTPR_SUPPORT_ENABLE = 0x20,1222DCE_INFO_CAPS_VBIOS_LTTPR_TRANSPARENT_ENABLE = 0x40,1223};12241225struct atom_display_controller_info_v4_51226{1227struct atom_common_table_header table_header;1228uint32_t display_caps;1229uint32_t bootup_dispclk_10khz;1230uint16_t dce_refclk_10khz;1231uint16_t i2c_engine_refclk_10khz;1232uint16_t dvi_ss_percentage; // in unit of 0.001%1233uint16_t dvi_ss_rate_10hz;1234uint16_t hdmi_ss_percentage; // in unit of 0.001%1235uint16_t hdmi_ss_rate_10hz;1236uint16_t dp_ss_percentage; // in unit of 0.001%1237uint16_t dp_ss_rate_10hz;1238uint8_t dvi_ss_mode; // enum of atom_spread_spectrum_mode1239uint8_t hdmi_ss_mode; // enum of atom_spread_spectrum_mode1240uint8_t dp_ss_mode; // enum of atom_spread_spectrum_mode1241uint8_t ss_reserved;1242// DFP hardcode mode number defined in StandardVESA_TimingTable when EDID is not available1243uint8_t dfp_hardcode_mode_num;1244// DFP hardcode mode refreshrate defined in StandardVESA_TimingTable when EDID is not available1245uint8_t dfp_hardcode_refreshrate;1246// VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable1247uint8_t vga_hardcode_mode_num;1248// VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable1249uint8_t vga_hardcode_refreshrate;1250uint16_t dpphy_refclk_10khz;1251uint16_t hw_chip_id;1252uint8_t dcnip_min_ver;1253uint8_t dcnip_max_ver;1254uint8_t max_disp_pipe_num;1255uint8_t max_vbios_active_disp_pipe_num;1256uint8_t max_ppll_num;1257uint8_t max_disp_phy_num;1258uint8_t max_aux_pairs;1259uint8_t remotedisplayconfig;1260uint32_t dispclk_pll_vco_freq;1261uint32_t dp_ref_clk_freq;1262// Worst case blackout duration for a memory clock frequency (p-state) change, units of 100s of ns (0.1 us)1263uint32_t max_mclk_chg_lat;1264// Worst case memory self refresh exit time, units of 100ns of ns (0.1us)1265uint32_t max_sr_exit_lat;1266// Worst case memory self refresh entry followed by immediate exit time, units of 100ns of ns (0.1us)1267uint32_t max_sr_enter_exit_lat;1268uint16_t dc_golden_table_offset; // point of struct of atom_dc_golden_table_vxx1269uint16_t dc_golden_table_ver;1270uint32_t aux_dphy_rx_control0_val;1271uint32_t aux_dphy_tx_control_val;1272uint32_t aux_dphy_rx_control1_val;1273uint32_t dc_gpio_aux_ctrl_0_val;1274uint32_t dc_gpio_aux_ctrl_1_val;1275uint32_t dc_gpio_aux_ctrl_2_val;1276uint32_t dc_gpio_aux_ctrl_3_val;1277uint32_t dc_gpio_aux_ctrl_4_val;1278uint32_t dc_gpio_aux_ctrl_5_val;1279uint32_t reserved[26];1280};12811282/*1283***************************************************************************1284Data Table ATOM_EXTERNAL_DISPLAY_CONNECTION_INFO structure1285***************************************************************************1286*/1287struct atom_ext_display_path1288{1289uint16_t device_tag; //A bit vector to show what devices are supported1290uint16_t device_acpi_enum; //16bit device ACPI id.1291uint16_t connectorobjid; //A physical connector for displays to plug in, using object connector definitions1292uint8_t auxddclut_index; //An index into external AUX/DDC channel LUT1293uint8_t hpdlut_index; //An index into external HPD pin LUT1294uint16_t ext_encoder_objid; //external encoder object id1295uint8_t channelmapping; // if ucChannelMapping=0, using default one to one mapping1296uint8_t chpninvert; // bit vector for up to 8 lanes, =0: P and N is not invert, =1 P and N is inverted1297uint16_t caps;1298uint16_t reserved;1299};13001301//usCaps1302enum ext_display_path_cap_def {1303EXT_DISPLAY_PATH_CAPS__EXT_CHIP_MASK = 0x007E,1304AMD_EXT_DISPLAY_PATH_CAPS__EXT_CHIP_MASK = 0x007E,1305AMD_EXT_DISPLAY_PATH_CAPS__DP_FIXED_VS_EN = (0x01 << 1),1306AMD_EXT_DISPLAY_PATH_CAPS__HDMI20_PI3EQX1204 = (0x02 << 1),1307AMD_EXT_DISPLAY_PATH_CAPS__DP_EARLY_8B10B_TPS2 = (0x03 << 1),1308AMD_EXT_DISPLAY_PATH_CAPS__HDMI20_TISN65DP159RSBT = (0x04 << 1),1309AMD_EXT_DISPLAY_PATH_CAPS__HDMI20_PARADE_PS175 = (0x06 << 1),1310EXT_DISPLAY_PATH_CAPS__DP_FIXED_VS_EN = (0x07 << 1),1311EXT_DISPLAY_PATH_CAPS__HDMI20_PI3EQX1204 = (0x08 << 1), //PI redriver chip1312EXT_DISPLAY_PATH_CAPS__HDMI20_TISN65DP159RSBT = (0x09 << 1), //TI retimer chip1313EXT_DISPLAY_PATH_CAPS__AMD_INTERNAL = (0x0a << 1), //AMD internal customer chip placeholder1314};13151316struct atom_external_display_connection_info1317{1318struct atom_common_table_header table_header;1319uint8_t guid[16]; // a GUID is a 16 byte long string1320struct atom_ext_display_path path[7]; // total of fixed 7 entries.1321uint8_t checksum; // a simple Checksum of the sum of whole structure equal to 0x0.1322uint8_t stereopinid; // use for eDP panel1323uint8_t remotedisplayconfig;1324uint8_t edptolvdsrxid;1325uint8_t fixdpvoltageswing; // usCaps[1]=1, this indicate DP_LANE_SET value1326uint8_t reserved[3]; // for potential expansion1327};13281329/*1330***************************************************************************1331Data Table integratedsysteminfo structure1332***************************************************************************1333*/13341335struct atom_camera_dphy_timing_param1336{1337uint8_t profile_id; // SENSOR_PROFILES1338uint32_t param;1339};13401341struct atom_camera_dphy_elec_param1342{1343uint16_t param[3];1344};13451346struct atom_camera_module_info1347{1348uint8_t module_id; // 0: Rear, 1: Front right of user, 2: Front left of user1349uint8_t module_name[8];1350struct atom_camera_dphy_timing_param timingparam[6]; // Exact number is under estimation and confirmation from sensor vendor1351};13521353struct atom_camera_flashlight_info1354{1355uint8_t flashlight_id; // 0: Rear, 1: Front1356uint8_t name[8];1357};13581359struct atom_camera_data1360{1361uint32_t versionCode;1362struct atom_camera_module_info cameraInfo[3]; // Assuming 3 camera sensors max1363struct atom_camera_flashlight_info flashInfo; // Assuming 1 flashlight max1364struct atom_camera_dphy_elec_param dphy_param;1365uint32_t crc_val; // CRC1366};136713681369struct atom_14nm_dpphy_dvihdmi_tuningset1370{1371uint32_t max_symclk_in10khz;1372uint8_t encoder_mode; //atom_encode_mode_def, =2: DVI, =3: HDMI mode1373uint8_t phy_sel; //bit vector of phy, bit0= phya, bit1=phyb, ....bit5 = phyf1374uint16_t margindeemph; //COMMON_MAR_DEEMPH_NOM[7:0]tx_margin_nom [15:8]deemph_gen1_nom1375uint8_t deemph_6db_4; //COMMON_SELDEEMPH60[31:24]deemph_6db_41376uint8_t boostadj; //CMD_BUS_GLOBAL_FOR_TX_LANE0 [19:16]tx_boost_adj [20]tx_boost_en [23:22]tx_binary_ron_code_offset1377uint8_t tx_driver_fifty_ohms; //COMMON_ZCALCODE_CTRL[21].tx_driver_fifty_ohms1378uint8_t deemph_sel; //MARGIN_DEEMPH_LANE0.DEEMPH_SEL1379};13801381struct atom_14nm_dpphy_dp_setting{1382uint8_t dp_vs_pemph_level; //enum of atom_dp_vs_preemph_def1383uint16_t margindeemph; //COMMON_MAR_DEEMPH_NOM[7:0]tx_margin_nom [15:8]deemph_gen1_nom1384uint8_t deemph_6db_4; //COMMON_SELDEEMPH60[31:24]deemph_6db_41385uint8_t boostadj; //CMD_BUS_GLOBAL_FOR_TX_LANE0 [19:16]tx_boost_adj [20]tx_boost_en [23:22]tx_binary_ron_code_offset1386};13871388struct atom_14nm_dpphy_dp_tuningset{1389uint8_t phy_sel; // bit vector of phy, bit0= phya, bit1=phyb, ....bit5 = phyf1390uint8_t version;1391uint16_t table_size; // size of atom_14nm_dpphy_dp_tuningset1392uint16_t reserved;1393struct atom_14nm_dpphy_dp_setting dptuning[10];1394};13951396struct atom_14nm_dig_transmitter_info_header_v4_0{1397struct atom_common_table_header table_header;1398uint16_t pcie_phy_tmds_hdmi_macro_settings_offset; // offset of PCIEPhyTMDSHDMIMacroSettingsTbl1399uint16_t uniphy_vs_emph_lookup_table_offset; // offset of UniphyVSEmphLookUpTbl1400uint16_t uniphy_xbar_settings_table_offset; // offset of UniphyXbarSettingsTbl1401};14021403struct atom_14nm_combphy_tmds_vs_set1404{1405uint8_t sym_clk;1406uint8_t dig_mode;1407uint8_t phy_sel;1408uint16_t common_mar_deemph_nom__margin_deemph_val;1409uint8_t common_seldeemph60__deemph_6db_4_val;1410uint8_t cmd_bus_global_for_tx_lane0__boostadj_val ;1411uint8_t common_zcalcode_ctrl__tx_driver_fifty_ohms_val;1412uint8_t margin_deemph_lane0__deemph_sel_val;1413};14141415struct atom_DCN_dpphy_dvihdmi_tuningset1416{1417uint32_t max_symclk_in10khz;1418uint8_t encoder_mode; //atom_encode_mode_def, =2: DVI, =3: HDMI mode1419uint8_t phy_sel; //bit vector of phy, bit0= phya, bit1=phyb, ....bit5 = phyf1420uint8_t tx_eq_main; // map to RDPCSTX_PHY_FUSE0/1/2/3[5:0](EQ_MAIN)1421uint8_t tx_eq_pre; // map to RDPCSTX_PHY_FUSE0/1/2/3[11:6](EQ_PRE)1422uint8_t tx_eq_post; // map to RDPCSTX_PHY_FUSE0/1/2/3[17:12](EQ_POST)1423uint8_t reserved1;1424uint8_t tx_vboost_lvl; // tx_vboost_lvl, map to RDPCSTX_PHY_CNTL0.RDPCS_PHY_TX_VBOOST_LVL1425uint8_t reserved2;1426};14271428struct atom_DCN_dpphy_dp_setting{1429uint8_t dp_vs_pemph_level; //enum of atom_dp_vs_preemph_def1430uint8_t tx_eq_main; // map to RDPCSTX_PHY_FUSE0/1/2/3[5:0](EQ_MAIN)1431uint8_t tx_eq_pre; // map to RDPCSTX_PHY_FUSE0/1/2/3[11:6](EQ_PRE)1432uint8_t tx_eq_post; // map to RDPCSTX_PHY_FUSE0/1/2/3[17:12](EQ_POST)1433uint8_t tx_vboost_lvl; // tx_vboost_lvl, map to RDPCSTX_PHY_CNTL0.RDPCS_PHY_TX_VBOOST_LVL1434};14351436struct atom_DCN_dpphy_dp_tuningset{1437uint8_t phy_sel; // bit vector of phy, bit0= phya, bit1=phyb, ....bit5 = phyf1438uint8_t version;1439uint16_t table_size; // size of atom_14nm_dpphy_dp_setting1440uint16_t reserved;1441struct atom_DCN_dpphy_dp_setting dptunings[10];1442};14431444struct atom_i2c_reg_info {1445uint8_t ucI2cRegIndex;1446uint8_t ucI2cRegVal;1447};14481449struct atom_hdmi_retimer_redriver_set {1450uint8_t HdmiSlvAddr;1451uint8_t HdmiRegNum;1452uint8_t Hdmi6GRegNum;1453struct atom_i2c_reg_info HdmiRegSetting[9]; //For non 6G Hz use1454struct atom_i2c_reg_info Hdmi6GhzRegSetting[3]; //For 6G Hz use.1455};14561457struct atom_integrated_system_info_v1_111458{1459struct atom_common_table_header table_header;1460uint32_t vbios_misc; //enum of atom_system_vbiosmisc_def1461uint32_t gpucapinfo; //enum of atom_system_gpucapinf_def1462uint32_t system_config;1463uint32_t cpucapinfo;1464uint16_t gpuclk_ss_percentage; //unit of 0.001%, 1000 mean 1%1465uint16_t gpuclk_ss_type;1466uint16_t lvds_ss_percentage; //unit of 0.001%, 1000 mean 1%1467uint16_t lvds_ss_rate_10hz;1468uint16_t hdmi_ss_percentage; //unit of 0.001%, 1000 mean 1%1469uint16_t hdmi_ss_rate_10hz;1470uint16_t dvi_ss_percentage; //unit of 0.001%, 1000 mean 1%1471uint16_t dvi_ss_rate_10hz;1472uint16_t dpphy_override; // bit vector, enum of atom_sysinfo_dpphy_override_def1473uint16_t lvds_misc; // enum of atom_sys_info_lvds_misc_def1474uint16_t backlight_pwm_hz; // pwm frequency in hz1475uint8_t memorytype; // enum of atom_dmi_t17_mem_type_def, APU memory type indication.1476uint8_t umachannelnumber; // number of memory channels1477uint8_t pwr_on_digon_to_de; /* all pwr sequence numbers below are in uint of 4ms */1478uint8_t pwr_on_de_to_vary_bl;1479uint8_t pwr_down_vary_bloff_to_de;1480uint8_t pwr_down_de_to_digoff;1481uint8_t pwr_off_delay;1482uint8_t pwr_on_vary_bl_to_blon;1483uint8_t pwr_down_bloff_to_vary_bloff;1484uint8_t min_allowed_bl_level;1485uint8_t htc_hyst_limit;1486uint8_t htc_tmp_limit;1487uint8_t reserved1;1488uint8_t reserved2;1489struct atom_external_display_connection_info extdispconninfo;1490struct atom_14nm_dpphy_dvihdmi_tuningset dvi_tuningset;1491struct atom_14nm_dpphy_dvihdmi_tuningset hdmi_tuningset;1492struct atom_14nm_dpphy_dvihdmi_tuningset hdmi6g_tuningset;1493struct atom_14nm_dpphy_dp_tuningset dp_tuningset; // rbr 1.62G dp tuning set1494struct atom_14nm_dpphy_dp_tuningset dp_hbr3_tuningset; // HBR3 dp tuning set1495struct atom_camera_data camera_info;1496struct atom_hdmi_retimer_redriver_set dp0_retimer_set; //for DP01497struct atom_hdmi_retimer_redriver_set dp1_retimer_set; //for DP11498struct atom_hdmi_retimer_redriver_set dp2_retimer_set; //for DP21499struct atom_hdmi_retimer_redriver_set dp3_retimer_set; //for DP31500struct atom_14nm_dpphy_dp_tuningset dp_hbr_tuningset; //hbr 2.7G dp tuning set1501struct atom_14nm_dpphy_dp_tuningset dp_hbr2_tuningset; //hbr2 5.4G dp turnig set1502struct atom_14nm_dpphy_dp_tuningset edp_tuningset; //edp tuning set1503uint32_t reserved[66];1504};15051506struct atom_integrated_system_info_v1_121507{1508struct atom_common_table_header table_header;1509uint32_t vbios_misc; //enum of atom_system_vbiosmisc_def1510uint32_t gpucapinfo; //enum of atom_system_gpucapinf_def1511uint32_t system_config;1512uint32_t cpucapinfo;1513uint16_t gpuclk_ss_percentage; //unit of 0.001%, 1000 mean 1%1514uint16_t gpuclk_ss_type;1515uint16_t lvds_ss_percentage; //unit of 0.001%, 1000 mean 1%1516uint16_t lvds_ss_rate_10hz;1517uint16_t hdmi_ss_percentage; //unit of 0.001%, 1000 mean 1%1518uint16_t hdmi_ss_rate_10hz;1519uint16_t dvi_ss_percentage; //unit of 0.001%, 1000 mean 1%1520uint16_t dvi_ss_rate_10hz;1521uint16_t dpphy_override; // bit vector, enum of atom_sysinfo_dpphy_override_def1522uint16_t lvds_misc; // enum of atom_sys_info_lvds_misc_def1523uint16_t backlight_pwm_hz; // pwm frequency in hz1524uint8_t memorytype; // enum of atom_dmi_t17_mem_type_def, APU memory type indication.1525uint8_t umachannelnumber; // number of memory channels1526uint8_t pwr_on_digon_to_de; // all pwr sequence numbers below are in uint of 4ms //1527uint8_t pwr_on_de_to_vary_bl;1528uint8_t pwr_down_vary_bloff_to_de;1529uint8_t pwr_down_de_to_digoff;1530uint8_t pwr_off_delay;1531uint8_t pwr_on_vary_bl_to_blon;1532uint8_t pwr_down_bloff_to_vary_bloff;1533uint8_t min_allowed_bl_level;1534uint8_t htc_hyst_limit;1535uint8_t htc_tmp_limit;1536uint8_t reserved1;1537uint8_t reserved2;1538struct atom_external_display_connection_info extdispconninfo;1539struct atom_DCN_dpphy_dvihdmi_tuningset TMDS_tuningset;1540struct atom_DCN_dpphy_dvihdmi_tuningset hdmiCLK5_tuningset;1541struct atom_DCN_dpphy_dvihdmi_tuningset hdmiCLK8_tuningset;1542struct atom_DCN_dpphy_dp_tuningset rbr_tuningset; // rbr 1.62G dp tuning set1543struct atom_DCN_dpphy_dp_tuningset hbr3_tuningset; // HBR3 dp tuning set1544struct atom_camera_data camera_info;1545struct atom_hdmi_retimer_redriver_set dp0_retimer_set; //for DP01546struct atom_hdmi_retimer_redriver_set dp1_retimer_set; //for DP11547struct atom_hdmi_retimer_redriver_set dp2_retimer_set; //for DP21548struct atom_hdmi_retimer_redriver_set dp3_retimer_set; //for DP31549struct atom_DCN_dpphy_dp_tuningset hbr_tuningset; //hbr 2.7G dp tuning set1550struct atom_DCN_dpphy_dp_tuningset hbr2_tuningset; //hbr2 5.4G dp turnig set1551struct atom_DCN_dpphy_dp_tuningset edp_tunings; //edp tuning set1552struct atom_DCN_dpphy_dvihdmi_tuningset hdmiCLK6_tuningset;1553uint32_t reserved[63];1554};15551556struct edp_info_table1557{1558uint16_t edp_backlight_pwm_hz;1559uint16_t edp_ss_percentage;1560uint16_t edp_ss_rate_10hz;1561uint16_t reserved1;1562uint32_t reserved2;1563uint8_t edp_pwr_on_off_delay;1564uint8_t edp_pwr_on_vary_bl_to_blon;1565uint8_t edp_pwr_down_bloff_to_vary_bloff;1566uint8_t edp_panel_bpc;1567uint8_t edp_bootup_bl_level;1568uint8_t reserved3[3];1569uint32_t reserved4[3];1570};15711572struct atom_integrated_system_info_v2_11573{1574struct atom_common_table_header table_header;1575uint32_t vbios_misc; //enum of atom_system_vbiosmisc_def1576uint32_t gpucapinfo; //enum of atom_system_gpucapinf_def1577uint32_t system_config;1578uint32_t cpucapinfo;1579uint16_t gpuclk_ss_percentage; //unit of 0.001%, 1000 mean 1%1580uint16_t gpuclk_ss_type;1581uint16_t dpphy_override; // bit vector, enum of atom_sysinfo_dpphy_override_def1582uint8_t memorytype; // enum of atom_dmi_t17_mem_type_def, APU memory type indication.1583uint8_t umachannelnumber; // number of memory channels1584uint8_t htc_hyst_limit;1585uint8_t htc_tmp_limit;1586uint8_t reserved1;1587uint8_t reserved2;1588struct edp_info_table edp1_info;1589struct edp_info_table edp2_info;1590uint32_t reserved3[8];1591struct atom_external_display_connection_info extdispconninfo;1592struct atom_DCN_dpphy_dvihdmi_tuningset TMDS_tuningset;1593struct atom_DCN_dpphy_dvihdmi_tuningset hdmiCLK5_tuningset; //add clk61594struct atom_DCN_dpphy_dvihdmi_tuningset hdmiCLK6_tuningset;1595struct atom_DCN_dpphy_dvihdmi_tuningset hdmiCLK8_tuningset;1596uint32_t reserved4[6];//reserve 2*sizeof(atom_DCN_dpphy_dvihdmi_tuningset)1597struct atom_DCN_dpphy_dp_tuningset rbr_tuningset; // rbr 1.62G dp tuning set1598struct atom_DCN_dpphy_dp_tuningset hbr_tuningset; //hbr 2.7G dp tuning set1599struct atom_DCN_dpphy_dp_tuningset hbr2_tuningset; //hbr2 5.4G dp turnig set1600struct atom_DCN_dpphy_dp_tuningset hbr3_tuningset; // HBR3 dp tuning set1601struct atom_DCN_dpphy_dp_tuningset edp_tunings; //edp tuning set1602uint32_t reserved5[28];//reserve 2*sizeof(atom_DCN_dpphy_dp_tuningset)1603struct atom_hdmi_retimer_redriver_set dp0_retimer_set; //for DP01604struct atom_hdmi_retimer_redriver_set dp1_retimer_set; //for DP11605struct atom_hdmi_retimer_redriver_set dp2_retimer_set; //for DP21606struct atom_hdmi_retimer_redriver_set dp3_retimer_set; //for DP31607uint32_t reserved6[30];// reserve size of(atom_camera_data) for camera_info1608uint32_t reserved7[32];16091610};16111612struct atom_n6_display_phy_tuning_set {1613uint8_t display_signal_type;1614uint8_t phy_sel;1615uint8_t preset_level;1616uint8_t reserved1;1617uint32_t reserved2;1618uint32_t speed_upto;1619uint8_t tx_vboost_level;1620uint8_t tx_vreg_v2i;1621uint8_t tx_vregdrv_byp;1622uint8_t tx_term_cntl;1623uint8_t tx_peak_level;1624uint8_t tx_slew_en;1625uint8_t tx_eq_pre;1626uint8_t tx_eq_main;1627uint8_t tx_eq_post;1628uint8_t tx_en_inv_pre;1629uint8_t tx_en_inv_post;1630uint8_t reserved3;1631uint32_t reserved4;1632uint32_t reserved5;1633uint32_t reserved6;1634};16351636struct atom_display_phy_tuning_info {1637struct atom_common_table_header table_header;1638struct atom_n6_display_phy_tuning_set disp_phy_tuning[1];1639};16401641struct atom_integrated_system_info_v2_21642{1643struct atom_common_table_header table_header;1644uint32_t vbios_misc; //enum of atom_system_vbiosmisc_def1645uint32_t gpucapinfo; //enum of atom_system_gpucapinf_def1646uint32_t system_config;1647uint32_t cpucapinfo;1648uint16_t gpuclk_ss_percentage; //unit of 0.001%, 1000 mean 1%1649uint16_t gpuclk_ss_type;1650uint16_t dpphy_override; // bit vector, enum of atom_sysinfo_dpphy_override_def1651uint8_t memorytype; // enum of atom_dmi_t17_mem_type_def, APU memory type indication.1652uint8_t umachannelnumber; // number of memory channels1653uint8_t htc_hyst_limit;1654uint8_t htc_tmp_limit;1655uint8_t reserved1;1656uint8_t reserved2;1657struct edp_info_table edp1_info;1658struct edp_info_table edp2_info;1659uint32_t reserved3[8];1660struct atom_external_display_connection_info extdispconninfo;16611662uint32_t reserved4[189];1663};16641665struct uma_carveout_option {1666char optionName[29]; //max length of string is 28chars + '\0'. Current design is for "minimum", "Medium", "High". This makes entire struct size 64bits1667uint8_t memoryCarvedGb; //memory carved out with setting1668uint8_t memoryRemainingGb; //memory remaining on system1669union {1670struct _flags {1671uint8_t Auto : 1;1672uint8_t Custom : 1;1673uint8_t Reserved : 6;1674} flags;1675uint8_t all8;1676} uma_carveout_option_flags;1677};16781679struct atom_integrated_system_info_v2_3 {1680struct atom_common_table_header table_header;1681uint32_t vbios_misc; // enum of atom_system_vbiosmisc_def1682uint32_t gpucapinfo; // enum of atom_system_gpucapinf_def1683uint32_t system_config;1684uint32_t cpucapinfo;1685uint16_t gpuclk_ss_percentage; // unit of 0.001%, 1000 mean 1%1686uint16_t gpuclk_ss_type;1687uint16_t dpphy_override; // bit vector, enum of atom_sysinfo_dpphy_override_def1688uint8_t memorytype; // enum of atom_dmi_t17_mem_type_def, APU memory type indication.1689uint8_t umachannelnumber; // number of memory channels1690uint8_t htc_hyst_limit;1691uint8_t htc_tmp_limit;1692uint8_t reserved1; // dp_ss_control1693uint8_t gpu_package_id;1694struct edp_info_table edp1_info;1695struct edp_info_table edp2_info;1696uint32_t reserved2[8];1697struct atom_external_display_connection_info extdispconninfo;1698uint8_t UMACarveoutVersion;1699uint8_t UMACarveoutIndexMax;1700uint8_t UMACarveoutTypeDefault;1701uint8_t UMACarveoutIndexDefault;1702uint8_t UMACarveoutType; //Auto or Custom1703uint8_t UMACarveoutIndex;1704struct uma_carveout_option UMASizeControlOption[20];1705uint8_t reserved3[110];1706};17071708// system_config1709enum atom_system_vbiosmisc_def{1710INTEGRATED_SYSTEM_INFO__GET_EDID_CALLBACK_FUNC_SUPPORT = 0x01,1711};171217131714// gpucapinfo1715enum atom_system_gpucapinf_def{1716SYS_INFO_GPUCAPS__ENABLE_DFS_BYPASS = 0x10,1717};17181719//dpphy_override1720enum atom_sysinfo_dpphy_override_def{1721ATOM_ENABLE_DVI_TUNINGSET = 0x01,1722ATOM_ENABLE_HDMI_TUNINGSET = 0x02,1723ATOM_ENABLE_HDMI6G_TUNINGSET = 0x04,1724ATOM_ENABLE_DP_TUNINGSET = 0x08,1725ATOM_ENABLE_DP_HBR3_TUNINGSET = 0x10,1726};17271728//lvds_misc1729enum atom_sys_info_lvds_misc_def1730{1731SYS_INFO_LVDS_MISC_888_FPDI_MODE =0x01,1732SYS_INFO_LVDS_MISC_888_BPC_MODE =0x04,1733SYS_INFO_LVDS_MISC_OVERRIDE_EN =0x08,1734};173517361737//memorytype DMI Type 17 offset 12h - Memory Type1738enum atom_dmi_t17_mem_type_def{1739OtherMemType = 0x01, ///< Assign 01 to Other1740UnknownMemType, ///< Assign 02 to Unknown1741DramMemType, ///< Assign 03 to DRAM1742EdramMemType, ///< Assign 04 to EDRAM1743VramMemType, ///< Assign 05 to VRAM1744SramMemType, ///< Assign 06 to SRAM1745RamMemType, ///< Assign 07 to RAM1746RomMemType, ///< Assign 08 to ROM1747FlashMemType, ///< Assign 09 to Flash1748EepromMemType, ///< Assign 10 to EEPROM1749FepromMemType, ///< Assign 11 to FEPROM1750EpromMemType, ///< Assign 12 to EPROM1751CdramMemType, ///< Assign 13 to CDRAM1752ThreeDramMemType, ///< Assign 14 to 3DRAM1753SdramMemType, ///< Assign 15 to SDRAM1754SgramMemType, ///< Assign 16 to SGRAM1755RdramMemType, ///< Assign 17 to RDRAM1756DdrMemType, ///< Assign 18 to DDR1757Ddr2MemType, ///< Assign 19 to DDR21758Ddr2FbdimmMemType, ///< Assign 20 to DDR2 FB-DIMM1759Ddr3MemType = 0x18, ///< Assign 24 to DDR31760Fbd2MemType, ///< Assign 25 to FBD21761Ddr4MemType, ///< Assign 26 to DDR41762LpDdrMemType, ///< Assign 27 to LPDDR1763LpDdr2MemType, ///< Assign 28 to LPDDR21764LpDdr3MemType, ///< Assign 29 to LPDDR31765LpDdr4MemType, ///< Assign 30 to LPDDR41766GDdr6MemType, ///< Assign 31 to GDDR61767HbmMemType, ///< Assign 32 to HBM1768Hbm2MemType, ///< Assign 33 to HBM21769Ddr5MemType, ///< Assign 34 to DDR51770LpDdr5MemType, ///< Assign 35 to LPDDR51771};177217731774// this Table is used starting from NL/AM, used by SBIOS and pass the IntegratedSystemInfoTable/PowerPlayInfoTable/SystemCameraInfoTable1775struct atom_fusion_system_info_v41776{1777struct atom_integrated_system_info_v1_11 sysinfo; // refer to ATOM_INTEGRATED_SYSTEM_INFO_V1_8 definition1778uint32_t powerplayinfo[256]; // Reserve 1024 bytes space for PowerPlayInfoTable1779};178017811782/*1783***************************************************************************1784Data Table gfx_info structure1785***************************************************************************1786*/17871788struct atom_gfx_info_v2_21789{1790struct atom_common_table_header table_header;1791uint8_t gfxip_min_ver;1792uint8_t gfxip_max_ver;1793uint8_t max_shader_engines;1794uint8_t max_tile_pipes;1795uint8_t max_cu_per_sh;1796uint8_t max_sh_per_se;1797uint8_t max_backends_per_se;1798uint8_t max_texture_channel_caches;1799uint32_t regaddr_cp_dma_src_addr;1800uint32_t regaddr_cp_dma_src_addr_hi;1801uint32_t regaddr_cp_dma_dst_addr;1802uint32_t regaddr_cp_dma_dst_addr_hi;1803uint32_t regaddr_cp_dma_command;1804uint32_t regaddr_cp_status;1805uint32_t regaddr_rlc_gpu_clock_32;1806uint32_t rlc_gpu_timer_refclk;1807};18081809struct atom_gfx_info_v2_3 {1810struct atom_common_table_header table_header;1811uint8_t gfxip_min_ver;1812uint8_t gfxip_max_ver;1813uint8_t max_shader_engines;1814uint8_t max_tile_pipes;1815uint8_t max_cu_per_sh;1816uint8_t max_sh_per_se;1817uint8_t max_backends_per_se;1818uint8_t max_texture_channel_caches;1819uint32_t regaddr_cp_dma_src_addr;1820uint32_t regaddr_cp_dma_src_addr_hi;1821uint32_t regaddr_cp_dma_dst_addr;1822uint32_t regaddr_cp_dma_dst_addr_hi;1823uint32_t regaddr_cp_dma_command;1824uint32_t regaddr_cp_status;1825uint32_t regaddr_rlc_gpu_clock_32;1826uint32_t rlc_gpu_timer_refclk;1827uint8_t active_cu_per_sh;1828uint8_t active_rb_per_se;1829uint16_t gcgoldenoffset;1830uint32_t rm21_sram_vmin_value;1831};18321833struct atom_gfx_info_v2_41834{1835struct atom_common_table_header table_header;1836uint8_t gfxip_min_ver;1837uint8_t gfxip_max_ver;1838uint8_t max_shader_engines;1839uint8_t reserved;1840uint8_t max_cu_per_sh;1841uint8_t max_sh_per_se;1842uint8_t max_backends_per_se;1843uint8_t max_texture_channel_caches;1844uint32_t regaddr_cp_dma_src_addr;1845uint32_t regaddr_cp_dma_src_addr_hi;1846uint32_t regaddr_cp_dma_dst_addr;1847uint32_t regaddr_cp_dma_dst_addr_hi;1848uint32_t regaddr_cp_dma_command;1849uint32_t regaddr_cp_status;1850uint32_t regaddr_rlc_gpu_clock_32;1851uint32_t rlc_gpu_timer_refclk;1852uint8_t active_cu_per_sh;1853uint8_t active_rb_per_se;1854uint16_t gcgoldenoffset;1855uint16_t gc_num_gprs;1856uint16_t gc_gsprim_buff_depth;1857uint16_t gc_parameter_cache_depth;1858uint16_t gc_wave_size;1859uint16_t gc_max_waves_per_simd;1860uint16_t gc_lds_size;1861uint8_t gc_num_max_gs_thds;1862uint8_t gc_gs_table_depth;1863uint8_t gc_double_offchip_lds_buffer;1864uint8_t gc_max_scratch_slots_per_cu;1865uint32_t sram_rm_fuses_val;1866uint32_t sram_custom_rm_fuses_val;1867};18681869struct atom_gfx_info_v2_7 {1870struct atom_common_table_header table_header;1871uint8_t gfxip_min_ver;1872uint8_t gfxip_max_ver;1873uint8_t max_shader_engines;1874uint8_t reserved;1875uint8_t max_cu_per_sh;1876uint8_t max_sh_per_se;1877uint8_t max_backends_per_se;1878uint8_t max_texture_channel_caches;1879uint32_t regaddr_cp_dma_src_addr;1880uint32_t regaddr_cp_dma_src_addr_hi;1881uint32_t regaddr_cp_dma_dst_addr;1882uint32_t regaddr_cp_dma_dst_addr_hi;1883uint32_t regaddr_cp_dma_command;1884uint32_t regaddr_cp_status;1885uint32_t regaddr_rlc_gpu_clock_32;1886uint32_t rlc_gpu_timer_refclk;1887uint8_t active_cu_per_sh;1888uint8_t active_rb_per_se;1889uint16_t gcgoldenoffset;1890uint16_t gc_num_gprs;1891uint16_t gc_gsprim_buff_depth;1892uint16_t gc_parameter_cache_depth;1893uint16_t gc_wave_size;1894uint16_t gc_max_waves_per_simd;1895uint16_t gc_lds_size;1896uint8_t gc_num_max_gs_thds;1897uint8_t gc_gs_table_depth;1898uint8_t gc_double_offchip_lds_buffer;1899uint8_t gc_max_scratch_slots_per_cu;1900uint32_t sram_rm_fuses_val;1901uint32_t sram_custom_rm_fuses_val;1902uint8_t cut_cu;1903uint8_t active_cu_total;1904uint8_t cu_reserved[2];1905uint32_t gc_config;1906uint8_t inactive_cu_per_se[8];1907uint32_t reserved2[6];1908};19091910struct atom_gfx_info_v3_0 {1911struct atom_common_table_header table_header;1912uint8_t gfxip_min_ver;1913uint8_t gfxip_max_ver;1914uint8_t max_shader_engines;1915uint8_t max_tile_pipes;1916uint8_t max_cu_per_sh;1917uint8_t max_sh_per_se;1918uint8_t max_backends_per_se;1919uint8_t max_texture_channel_caches;1920uint32_t regaddr_lsdma_queue0_rb_rptr;1921uint32_t regaddr_lsdma_queue0_rb_rptr_hi;1922uint32_t regaddr_lsdma_queue0_rb_wptr;1923uint32_t regaddr_lsdma_queue0_rb_wptr_hi;1924uint32_t regaddr_lsdma_command;1925uint32_t regaddr_lsdma_status;1926uint32_t regaddr_golden_tsc_count_lower;1927uint32_t golden_tsc_count_lower_refclk;1928uint8_t active_wgp_per_se;1929uint8_t active_rb_per_se;1930uint8_t active_se;1931uint8_t reserved1;1932uint32_t sram_rm_fuses_val;1933uint32_t sram_custom_rm_fuses_val;1934uint32_t inactive_sa_mask;1935uint32_t gc_config;1936uint8_t inactive_wgp[16];1937uint8_t inactive_rb[16];1938uint32_t gdfll_as_wait_ctrl_val;1939uint32_t gdfll_as_step_ctrl_val;1940uint32_t reserved[8];1941};19421943/*1944***************************************************************************1945Data Table smu_info structure1946***************************************************************************1947*/1948struct atom_smu_info_v3_11949{1950struct atom_common_table_header table_header;1951uint8_t smuip_min_ver;1952uint8_t smuip_max_ver;1953uint8_t smu_rsd1;1954uint8_t gpuclk_ss_mode; // enum of atom_spread_spectrum_mode1955uint16_t sclk_ss_percentage;1956uint16_t sclk_ss_rate_10hz;1957uint16_t gpuclk_ss_percentage; // in unit of 0.001%1958uint16_t gpuclk_ss_rate_10hz;1959uint32_t core_refclk_10khz;1960uint8_t ac_dc_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for AC/DC switching, =0xff means invalid1961uint8_t ac_dc_polarity; // GPIO polarity for AC/DC switching1962uint8_t vr0hot_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for VR0 HOT event, =0xff means invalid1963uint8_t vr0hot_polarity; // GPIO polarity for VR0 HOT event1964uint8_t vr1hot_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for VR1 HOT event , =0xff means invalid1965uint8_t vr1hot_polarity; // GPIO polarity for VR1 HOT event1966uint8_t fw_ctf_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for CTF, =0xff means invalid1967uint8_t fw_ctf_polarity; // GPIO polarity for CTF1968};19691970struct atom_smu_info_v3_2 {1971struct atom_common_table_header table_header;1972uint8_t smuip_min_ver;1973uint8_t smuip_max_ver;1974uint8_t smu_rsd1;1975uint8_t gpuclk_ss_mode;1976uint16_t sclk_ss_percentage;1977uint16_t sclk_ss_rate_10hz;1978uint16_t gpuclk_ss_percentage; // in unit of 0.001%1979uint16_t gpuclk_ss_rate_10hz;1980uint32_t core_refclk_10khz;1981uint8_t ac_dc_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for AC/DC switching, =0xff means invalid1982uint8_t ac_dc_polarity; // GPIO polarity for AC/DC switching1983uint8_t vr0hot_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for VR0 HOT event, =0xff means invalid1984uint8_t vr0hot_polarity; // GPIO polarity for VR0 HOT event1985uint8_t vr1hot_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for VR1 HOT event , =0xff means invalid1986uint8_t vr1hot_polarity; // GPIO polarity for VR1 HOT event1987uint8_t fw_ctf_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for CTF, =0xff means invalid1988uint8_t fw_ctf_polarity; // GPIO polarity for CTF1989uint8_t pcc_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for PCC, =0xff means invalid1990uint8_t pcc_gpio_polarity; // GPIO polarity for CTF1991uint16_t smugoldenoffset;1992uint32_t gpupll_vco_freq_10khz;1993uint32_t bootup_smnclk_10khz;1994uint32_t bootup_socclk_10khz;1995uint32_t bootup_mp0clk_10khz;1996uint32_t bootup_mp1clk_10khz;1997uint32_t bootup_lclk_10khz;1998uint32_t bootup_dcefclk_10khz;1999uint32_t ctf_threshold_override_value;2000uint32_t reserved[5];2001};20022003struct atom_smu_info_v3_3 {2004struct atom_common_table_header table_header;2005uint8_t smuip_min_ver;2006uint8_t smuip_max_ver;2007uint8_t waflclk_ss_mode;2008uint8_t gpuclk_ss_mode;2009uint16_t sclk_ss_percentage;2010uint16_t sclk_ss_rate_10hz;2011uint16_t gpuclk_ss_percentage; // in unit of 0.001%2012uint16_t gpuclk_ss_rate_10hz;2013uint32_t core_refclk_10khz;2014uint8_t ac_dc_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for AC/DC switching, =0xff means invalid2015uint8_t ac_dc_polarity; // GPIO polarity for AC/DC switching2016uint8_t vr0hot_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for VR0 HOT event, =0xff means invalid2017uint8_t vr0hot_polarity; // GPIO polarity for VR0 HOT event2018uint8_t vr1hot_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for VR1 HOT event , =0xff means invalid2019uint8_t vr1hot_polarity; // GPIO polarity for VR1 HOT event2020uint8_t fw_ctf_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for CTF, =0xff means invalid2021uint8_t fw_ctf_polarity; // GPIO polarity for CTF2022uint8_t pcc_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for PCC, =0xff means invalid2023uint8_t pcc_gpio_polarity; // GPIO polarity for CTF2024uint16_t smugoldenoffset;2025uint32_t gpupll_vco_freq_10khz;2026uint32_t bootup_smnclk_10khz;2027uint32_t bootup_socclk_10khz;2028uint32_t bootup_mp0clk_10khz;2029uint32_t bootup_mp1clk_10khz;2030uint32_t bootup_lclk_10khz;2031uint32_t bootup_dcefclk_10khz;2032uint32_t ctf_threshold_override_value;2033uint32_t syspll3_0_vco_freq_10khz;2034uint32_t syspll3_1_vco_freq_10khz;2035uint32_t bootup_fclk_10khz;2036uint32_t bootup_waflclk_10khz;2037uint32_t smu_info_caps;2038uint16_t waflclk_ss_percentage; // in unit of 0.001%2039uint16_t smuinitoffset;2040uint32_t reserved;2041};20422043struct atom_smu_info_v3_52044{2045struct atom_common_table_header table_header;2046uint8_t smuip_min_ver;2047uint8_t smuip_max_ver;2048uint8_t waflclk_ss_mode;2049uint8_t gpuclk_ss_mode;2050uint16_t sclk_ss_percentage;2051uint16_t sclk_ss_rate_10hz;2052uint16_t gpuclk_ss_percentage; // in unit of 0.001%2053uint16_t gpuclk_ss_rate_10hz;2054uint32_t core_refclk_10khz;2055uint32_t syspll0_1_vco_freq_10khz;2056uint32_t syspll0_2_vco_freq_10khz;2057uint8_t pcc_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for PCC, =0xff means invalid2058uint8_t pcc_gpio_polarity; // GPIO polarity for CTF2059uint16_t smugoldenoffset;2060uint32_t syspll0_0_vco_freq_10khz;2061uint32_t bootup_smnclk_10khz;2062uint32_t bootup_socclk_10khz;2063uint32_t bootup_mp0clk_10khz;2064uint32_t bootup_mp1clk_10khz;2065uint32_t bootup_lclk_10khz;2066uint32_t bootup_dcefclk_10khz;2067uint32_t ctf_threshold_override_value;2068uint32_t syspll3_0_vco_freq_10khz;2069uint32_t syspll3_1_vco_freq_10khz;2070uint32_t bootup_fclk_10khz;2071uint32_t bootup_waflclk_10khz;2072uint32_t smu_info_caps;2073uint16_t waflclk_ss_percentage; // in unit of 0.001%2074uint16_t smuinitoffset;2075uint32_t bootup_dprefclk_10khz;2076uint32_t bootup_usbclk_10khz;2077uint32_t smb_slave_address;2078uint32_t cg_fdo_ctrl0_val;2079uint32_t cg_fdo_ctrl1_val;2080uint32_t cg_fdo_ctrl2_val;2081uint32_t gdfll_as_wait_ctrl_val;2082uint32_t gdfll_as_step_ctrl_val;2083uint32_t bootup_dtbclk_10khz;2084uint32_t fclk_syspll_refclk_10khz;2085uint32_t smusvi_svc0_val;2086uint32_t smusvi_svc1_val;2087uint32_t smusvi_svd0_val;2088uint32_t smusvi_svd1_val;2089uint32_t smusvi_svt0_val;2090uint32_t smusvi_svt1_val;2091uint32_t cg_tach_ctrl_val;2092uint32_t cg_pump_ctrl1_val;2093uint32_t cg_pump_tach_ctrl_val;2094uint32_t thm_ctf_delay_val;2095uint32_t thm_thermal_int_ctrl_val;2096uint32_t thm_tmon_config_val;2097uint32_t reserved[16];2098};20992100struct atom_smu_info_v3_62101{2102struct atom_common_table_header table_header;2103uint8_t smuip_min_ver;2104uint8_t smuip_max_ver;2105uint8_t waflclk_ss_mode;2106uint8_t gpuclk_ss_mode;2107uint16_t sclk_ss_percentage;2108uint16_t sclk_ss_rate_10hz;2109uint16_t gpuclk_ss_percentage;2110uint16_t gpuclk_ss_rate_10hz;2111uint32_t core_refclk_10khz;2112uint32_t syspll0_1_vco_freq_10khz;2113uint32_t syspll0_2_vco_freq_10khz;2114uint8_t pcc_gpio_bit;2115uint8_t pcc_gpio_polarity;2116uint16_t smugoldenoffset;2117uint32_t syspll0_0_vco_freq_10khz;2118uint32_t bootup_smnclk_10khz;2119uint32_t bootup_socclk_10khz;2120uint32_t bootup_mp0clk_10khz;2121uint32_t bootup_mp1clk_10khz;2122uint32_t bootup_lclk_10khz;2123uint32_t bootup_dxioclk_10khz;2124uint32_t ctf_threshold_override_value;2125uint32_t syspll3_0_vco_freq_10khz;2126uint32_t syspll3_1_vco_freq_10khz;2127uint32_t bootup_fclk_10khz;2128uint32_t bootup_waflclk_10khz;2129uint32_t smu_info_caps;2130uint16_t waflclk_ss_percentage;2131uint16_t smuinitoffset;2132uint32_t bootup_gfxavsclk_10khz;2133uint32_t bootup_mpioclk_10khz;2134uint32_t smb_slave_address;2135uint32_t cg_fdo_ctrl0_val;2136uint32_t cg_fdo_ctrl1_val;2137uint32_t cg_fdo_ctrl2_val;2138uint32_t gdfll_as_wait_ctrl_val;2139uint32_t gdfll_as_step_ctrl_val;2140uint32_t reserved_clk;2141uint32_t fclk_syspll_refclk_10khz;2142uint32_t smusvi_svc0_val;2143uint32_t smusvi_svc1_val;2144uint32_t smusvi_svd0_val;2145uint32_t smusvi_svd1_val;2146uint32_t smusvi_svt0_val;2147uint32_t smusvi_svt1_val;2148uint32_t cg_tach_ctrl_val;2149uint32_t cg_pump_ctrl1_val;2150uint32_t cg_pump_tach_ctrl_val;2151uint32_t thm_ctf_delay_val;2152uint32_t thm_thermal_int_ctrl_val;2153uint32_t thm_tmon_config_val;2154uint32_t bootup_vclk_10khz;2155uint32_t bootup_dclk_10khz;2156uint32_t smu_gpiopad_pu_en_val;2157uint32_t smu_gpiopad_pd_en_val;2158uint32_t reserved[12];2159};21602161struct atom_smu_info_v4_0 {2162struct atom_common_table_header table_header;2163uint32_t bootup_gfxclk_bypass_10khz;2164uint32_t bootup_usrclk_10khz;2165uint32_t bootup_csrclk_10khz;2166uint32_t core_refclk_10khz;2167uint32_t syspll1_vco_freq_10khz;2168uint32_t syspll2_vco_freq_10khz;2169uint8_t pcc_gpio_bit;2170uint8_t pcc_gpio_polarity;2171uint16_t bootup_vddusr_mv;2172uint32_t syspll0_vco_freq_10khz;2173uint32_t bootup_smnclk_10khz;2174uint32_t bootup_socclk_10khz;2175uint32_t bootup_mp0clk_10khz;2176uint32_t bootup_mp1clk_10khz;2177uint32_t bootup_lclk_10khz;2178uint32_t bootup_dcefclk_10khz;2179uint32_t ctf_threshold_override_value;2180uint32_t syspll3_vco_freq_10khz;2181uint32_t mm_syspll_vco_freq_10khz;2182uint32_t bootup_fclk_10khz;2183uint32_t bootup_waflclk_10khz;2184uint32_t smu_info_caps;2185uint16_t waflclk_ss_percentage;2186uint16_t smuinitoffset;2187uint32_t bootup_dprefclk_10khz;2188uint32_t bootup_usbclk_10khz;2189uint32_t smb_slave_address;2190uint32_t cg_fdo_ctrl0_val;2191uint32_t cg_fdo_ctrl1_val;2192uint32_t cg_fdo_ctrl2_val;2193uint32_t gdfll_as_wait_ctrl_val;2194uint32_t gdfll_as_step_ctrl_val;2195uint32_t bootup_dtbclk_10khz;2196uint32_t fclk_syspll_refclk_10khz;2197uint32_t smusvi_svc0_val;2198uint32_t smusvi_svc1_val;2199uint32_t smusvi_svd0_val;2200uint32_t smusvi_svd1_val;2201uint32_t smusvi_svt0_val;2202uint32_t smusvi_svt1_val;2203uint32_t cg_tach_ctrl_val;2204uint32_t cg_pump_ctrl1_val;2205uint32_t cg_pump_tach_ctrl_val;2206uint32_t thm_ctf_delay_val;2207uint32_t thm_thermal_int_ctrl_val;2208uint32_t thm_tmon_config_val;2209uint32_t smbus_timing_cntrl0_val;2210uint32_t smbus_timing_cntrl1_val;2211uint32_t smbus_timing_cntrl2_val;2212uint32_t pwr_disp_timer_global_control_val;2213uint32_t bootup_mpioclk_10khz;2214uint32_t bootup_dclk0_10khz;2215uint32_t bootup_vclk0_10khz;2216uint32_t bootup_dclk1_10khz;2217uint32_t bootup_vclk1_10khz;2218uint32_t bootup_baco400clk_10khz;2219uint32_t bootup_baco1200clk_bypass_10khz;2220uint32_t bootup_baco700clk_bypass_10khz;2221uint32_t reserved[16];2222};22232224/*2225***************************************************************************2226Data Table smc_dpm_info structure2227***************************************************************************2228*/2229struct atom_smc_dpm_info_v4_12230{2231struct atom_common_table_header table_header;2232uint8_t liquid1_i2c_address;2233uint8_t liquid2_i2c_address;2234uint8_t vr_i2c_address;2235uint8_t plx_i2c_address;22362237uint8_t liquid_i2c_linescl;2238uint8_t liquid_i2c_linesda;2239uint8_t vr_i2c_linescl;2240uint8_t vr_i2c_linesda;22412242uint8_t plx_i2c_linescl;2243uint8_t plx_i2c_linesda;2244uint8_t vrsensorpresent;2245uint8_t liquidsensorpresent;22462247uint16_t maxvoltagestepgfx;2248uint16_t maxvoltagestepsoc;22492250uint8_t vddgfxvrmapping;2251uint8_t vddsocvrmapping;2252uint8_t vddmem0vrmapping;2253uint8_t vddmem1vrmapping;22542255uint8_t gfxulvphasesheddingmask;2256uint8_t soculvphasesheddingmask;2257uint8_t padding8_v[2];22582259uint16_t gfxmaxcurrent;2260uint8_t gfxoffset;2261uint8_t padding_telemetrygfx;22622263uint16_t socmaxcurrent;2264uint8_t socoffset;2265uint8_t padding_telemetrysoc;22662267uint16_t mem0maxcurrent;2268uint8_t mem0offset;2269uint8_t padding_telemetrymem0;22702271uint16_t mem1maxcurrent;2272uint8_t mem1offset;2273uint8_t padding_telemetrymem1;22742275uint8_t acdcgpio;2276uint8_t acdcpolarity;2277uint8_t vr0hotgpio;2278uint8_t vr0hotpolarity;22792280uint8_t vr1hotgpio;2281uint8_t vr1hotpolarity;2282uint8_t padding1;2283uint8_t padding2;22842285uint8_t ledpin0;2286uint8_t ledpin1;2287uint8_t ledpin2;2288uint8_t padding8_4;22892290uint8_t pllgfxclkspreadenabled;2291uint8_t pllgfxclkspreadpercent;2292uint16_t pllgfxclkspreadfreq;22932294uint8_t uclkspreadenabled;2295uint8_t uclkspreadpercent;2296uint16_t uclkspreadfreq;22972298uint8_t socclkspreadenabled;2299uint8_t socclkspreadpercent;2300uint16_t socclkspreadfreq;23012302uint8_t acggfxclkspreadenabled;2303uint8_t acggfxclkspreadpercent;2304uint16_t acggfxclkspreadfreq;23052306uint8_t Vr2_I2C_address;2307uint8_t padding_vr2[3];23082309uint32_t boardreserved[9];2310};23112312/*2313***************************************************************************2314Data Table smc_dpm_info structure2315***************************************************************************2316*/2317struct atom_smc_dpm_info_v4_32318{2319struct atom_common_table_header table_header;2320uint8_t liquid1_i2c_address;2321uint8_t liquid2_i2c_address;2322uint8_t vr_i2c_address;2323uint8_t plx_i2c_address;23242325uint8_t liquid_i2c_linescl;2326uint8_t liquid_i2c_linesda;2327uint8_t vr_i2c_linescl;2328uint8_t vr_i2c_linesda;23292330uint8_t plx_i2c_linescl;2331uint8_t plx_i2c_linesda;2332uint8_t vrsensorpresent;2333uint8_t liquidsensorpresent;23342335uint16_t maxvoltagestepgfx;2336uint16_t maxvoltagestepsoc;23372338uint8_t vddgfxvrmapping;2339uint8_t vddsocvrmapping;2340uint8_t vddmem0vrmapping;2341uint8_t vddmem1vrmapping;23422343uint8_t gfxulvphasesheddingmask;2344uint8_t soculvphasesheddingmask;2345uint8_t externalsensorpresent;2346uint8_t padding8_v;23472348uint16_t gfxmaxcurrent;2349uint8_t gfxoffset;2350uint8_t padding_telemetrygfx;23512352uint16_t socmaxcurrent;2353uint8_t socoffset;2354uint8_t padding_telemetrysoc;23552356uint16_t mem0maxcurrent;2357uint8_t mem0offset;2358uint8_t padding_telemetrymem0;23592360uint16_t mem1maxcurrent;2361uint8_t mem1offset;2362uint8_t padding_telemetrymem1;23632364uint8_t acdcgpio;2365uint8_t acdcpolarity;2366uint8_t vr0hotgpio;2367uint8_t vr0hotpolarity;23682369uint8_t vr1hotgpio;2370uint8_t vr1hotpolarity;2371uint8_t padding1;2372uint8_t padding2;23732374uint8_t ledpin0;2375uint8_t ledpin1;2376uint8_t ledpin2;2377uint8_t padding8_4;23782379uint8_t pllgfxclkspreadenabled;2380uint8_t pllgfxclkspreadpercent;2381uint16_t pllgfxclkspreadfreq;23822383uint8_t uclkspreadenabled;2384uint8_t uclkspreadpercent;2385uint16_t uclkspreadfreq;23862387uint8_t fclkspreadenabled;2388uint8_t fclkspreadpercent;2389uint16_t fclkspreadfreq;23902391uint8_t fllgfxclkspreadenabled;2392uint8_t fllgfxclkspreadpercent;2393uint16_t fllgfxclkspreadfreq;23942395uint32_t boardreserved[10];2396};23972398struct smudpm_i2ccontrollerconfig_t {2399uint32_t enabled;2400uint32_t slaveaddress;2401uint32_t controllerport;2402uint32_t controllername;2403uint32_t thermalthrottler;2404uint32_t i2cprotocol;2405uint32_t i2cspeed;2406};24072408struct atom_smc_dpm_info_v4_42409{2410struct atom_common_table_header table_header;2411uint32_t i2c_padding[3];24122413uint16_t maxvoltagestepgfx;2414uint16_t maxvoltagestepsoc;24152416uint8_t vddgfxvrmapping;2417uint8_t vddsocvrmapping;2418uint8_t vddmem0vrmapping;2419uint8_t vddmem1vrmapping;24202421uint8_t gfxulvphasesheddingmask;2422uint8_t soculvphasesheddingmask;2423uint8_t externalsensorpresent;2424uint8_t padding8_v;24252426uint16_t gfxmaxcurrent;2427uint8_t gfxoffset;2428uint8_t padding_telemetrygfx;24292430uint16_t socmaxcurrent;2431uint8_t socoffset;2432uint8_t padding_telemetrysoc;24332434uint16_t mem0maxcurrent;2435uint8_t mem0offset;2436uint8_t padding_telemetrymem0;24372438uint16_t mem1maxcurrent;2439uint8_t mem1offset;2440uint8_t padding_telemetrymem1;244124422443uint8_t acdcgpio;2444uint8_t acdcpolarity;2445uint8_t vr0hotgpio;2446uint8_t vr0hotpolarity;24472448uint8_t vr1hotgpio;2449uint8_t vr1hotpolarity;2450uint8_t padding1;2451uint8_t padding2;245224532454uint8_t ledpin0;2455uint8_t ledpin1;2456uint8_t ledpin2;2457uint8_t padding8_4;245824592460uint8_t pllgfxclkspreadenabled;2461uint8_t pllgfxclkspreadpercent;2462uint16_t pllgfxclkspreadfreq;246324642465uint8_t uclkspreadenabled;2466uint8_t uclkspreadpercent;2467uint16_t uclkspreadfreq;246824692470uint8_t fclkspreadenabled;2471uint8_t fclkspreadpercent;2472uint16_t fclkspreadfreq;247324742475uint8_t fllgfxclkspreadenabled;2476uint8_t fllgfxclkspreadpercent;2477uint16_t fllgfxclkspreadfreq;247824792480struct smudpm_i2ccontrollerconfig_t i2ccontrollers[7];248124822483uint32_t boardreserved[10];2484};24852486enum smudpm_v4_5_i2ccontrollername_e{2487SMC_V4_5_I2C_CONTROLLER_NAME_VR_GFX = 0,2488SMC_V4_5_I2C_CONTROLLER_NAME_VR_SOC,2489SMC_V4_5_I2C_CONTROLLER_NAME_VR_VDDCI,2490SMC_V4_5_I2C_CONTROLLER_NAME_VR_MVDD,2491SMC_V4_5_I2C_CONTROLLER_NAME_LIQUID0,2492SMC_V4_5_I2C_CONTROLLER_NAME_LIQUID1,2493SMC_V4_5_I2C_CONTROLLER_NAME_PLX,2494SMC_V4_5_I2C_CONTROLLER_NAME_SPARE,2495SMC_V4_5_I2C_CONTROLLER_NAME_COUNT,2496};24972498enum smudpm_v4_5_i2ccontrollerthrottler_e{2499SMC_V4_5_I2C_CONTROLLER_THROTTLER_TYPE_NONE = 0,2500SMC_V4_5_I2C_CONTROLLER_THROTTLER_VR_GFX,2501SMC_V4_5_I2C_CONTROLLER_THROTTLER_VR_SOC,2502SMC_V4_5_I2C_CONTROLLER_THROTTLER_VR_VDDCI,2503SMC_V4_5_I2C_CONTROLLER_THROTTLER_VR_MVDD,2504SMC_V4_5_I2C_CONTROLLER_THROTTLER_LIQUID0,2505SMC_V4_5_I2C_CONTROLLER_THROTTLER_LIQUID1,2506SMC_V4_5_I2C_CONTROLLER_THROTTLER_PLX,2507SMC_V4_5_I2C_CONTROLLER_THROTTLER_COUNT,2508};25092510enum smudpm_v4_5_i2ccontrollerprotocol_e{2511SMC_V4_5_I2C_CONTROLLER_PROTOCOL_VR_0,2512SMC_V4_5_I2C_CONTROLLER_PROTOCOL_VR_1,2513SMC_V4_5_I2C_CONTROLLER_PROTOCOL_TMP_0,2514SMC_V4_5_I2C_CONTROLLER_PROTOCOL_TMP_1,2515SMC_V4_5_I2C_CONTROLLER_PROTOCOL_SPARE_0,2516SMC_V4_5_I2C_CONTROLLER_PROTOCOL_SPARE_1,2517SMC_V4_5_I2C_CONTROLLER_PROTOCOL_COUNT,2518};25192520struct smudpm_i2c_controller_config_v22521{2522uint8_t Enabled;2523uint8_t Speed;2524uint8_t Padding[2];2525uint32_t SlaveAddress;2526uint8_t ControllerPort;2527uint8_t ControllerName;2528uint8_t ThermalThrotter;2529uint8_t I2cProtocol;2530};25312532struct atom_smc_dpm_info_v4_52533{2534struct atom_common_table_header table_header;2535// SECTION: BOARD PARAMETERS2536// I2C Control2537struct smudpm_i2c_controller_config_v2 I2cControllers[8];25382539// SVI2 Board Parameters2540uint16_t MaxVoltageStepGfx; // In mV(Q2) Max voltage step that SMU will request. Multiple steps are taken if voltage change exceeds this value.2541uint16_t MaxVoltageStepSoc; // In mV(Q2) Max voltage step that SMU will request. Multiple steps are taken if voltage change exceeds this value.25422543uint8_t VddGfxVrMapping; // Use VR_MAPPING* bitfields2544uint8_t VddSocVrMapping; // Use VR_MAPPING* bitfields2545uint8_t VddMem0VrMapping; // Use VR_MAPPING* bitfields2546uint8_t VddMem1VrMapping; // Use VR_MAPPING* bitfields25472548uint8_t GfxUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode2549uint8_t SocUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode2550uint8_t ExternalSensorPresent; // External RDI connected to TMON (aka TEMP IN)2551uint8_t Padding8_V;25522553// Telemetry Settings2554uint16_t GfxMaxCurrent; // in Amps2555uint8_t GfxOffset; // in Amps2556uint8_t Padding_TelemetryGfx;2557uint16_t SocMaxCurrent; // in Amps2558uint8_t SocOffset; // in Amps2559uint8_t Padding_TelemetrySoc;25602561uint16_t Mem0MaxCurrent; // in Amps2562uint8_t Mem0Offset; // in Amps2563uint8_t Padding_TelemetryMem0;25642565uint16_t Mem1MaxCurrent; // in Amps2566uint8_t Mem1Offset; // in Amps2567uint8_t Padding_TelemetryMem1;25682569// GPIO Settings2570uint8_t AcDcGpio; // GPIO pin configured for AC/DC switching2571uint8_t AcDcPolarity; // GPIO polarity for AC/DC switching2572uint8_t VR0HotGpio; // GPIO pin configured for VR0 HOT event2573uint8_t VR0HotPolarity; // GPIO polarity for VR0 HOT event25742575uint8_t VR1HotGpio; // GPIO pin configured for VR1 HOT event2576uint8_t VR1HotPolarity; // GPIO polarity for VR1 HOT event2577uint8_t GthrGpio; // GPIO pin configured for GTHR Event2578uint8_t GthrPolarity; // replace GPIO polarity for GTHR25792580// LED Display Settings2581uint8_t LedPin0; // GPIO number for LedPin[0]2582uint8_t LedPin1; // GPIO number for LedPin[1]2583uint8_t LedPin2; // GPIO number for LedPin[2]2584uint8_t padding8_4;25852586// GFXCLK PLL Spread Spectrum2587uint8_t PllGfxclkSpreadEnabled; // on or off2588uint8_t PllGfxclkSpreadPercent; // Q4.42589uint16_t PllGfxclkSpreadFreq; // kHz25902591// GFXCLK DFLL Spread Spectrum2592uint8_t DfllGfxclkSpreadEnabled; // on or off2593uint8_t DfllGfxclkSpreadPercent; // Q4.42594uint16_t DfllGfxclkSpreadFreq; // kHz25952596// UCLK Spread Spectrum2597uint8_t UclkSpreadEnabled; // on or off2598uint8_t UclkSpreadPercent; // Q4.42599uint16_t UclkSpreadFreq; // kHz26002601// SOCCLK Spread Spectrum2602uint8_t SoclkSpreadEnabled; // on or off2603uint8_t SocclkSpreadPercent; // Q4.42604uint16_t SocclkSpreadFreq; // kHz26052606// Total board power2607uint16_t TotalBoardPower; //Only needed for TCP Estimated case, where TCP = TGP+Total Board Power2608uint16_t BoardPadding;26092610// Mvdd Svi2 Div Ratio Setting2611uint32_t MvddRatio; // This is used for MVDD Vid workaround. It has 16 fractional bits (Q16.16)26122613uint32_t BoardReserved[9];26142615};26162617struct atom_smc_dpm_info_v4_62618{2619struct atom_common_table_header table_header;2620// section: board parameters2621uint32_t i2c_padding[3]; // old i2c control are moved to new area26222623uint16_t maxvoltagestepgfx; // in mv(q2) max voltage step that smu will request. multiple steps are taken if voltage change exceeds this value.2624uint16_t maxvoltagestepsoc; // in mv(q2) max voltage step that smu will request. multiple steps are taken if voltage change exceeds this value.26252626uint8_t vddgfxvrmapping; // use vr_mapping* bitfields2627uint8_t vddsocvrmapping; // use vr_mapping* bitfields2628uint8_t vddmemvrmapping; // use vr_mapping* bitfields2629uint8_t boardvrmapping; // use vr_mapping* bitfields26302631uint8_t gfxulvphasesheddingmask; // set this to 1 to set psi0/1 to 1 in ulv mode2632uint8_t externalsensorpresent; // external rdi connected to tmon (aka temp in)2633uint8_t padding8_v[2];26342635// telemetry settings2636uint16_t gfxmaxcurrent; // in amps2637uint8_t gfxoffset; // in amps2638uint8_t padding_telemetrygfx;26392640uint16_t socmaxcurrent; // in amps2641uint8_t socoffset; // in amps2642uint8_t padding_telemetrysoc;26432644uint16_t memmaxcurrent; // in amps2645uint8_t memoffset; // in amps2646uint8_t padding_telemetrymem;26472648uint16_t boardmaxcurrent; // in amps2649uint8_t boardoffset; // in amps2650uint8_t padding_telemetryboardinput;26512652// gpio settings2653uint8_t vr0hotgpio; // gpio pin configured for vr0 hot event2654uint8_t vr0hotpolarity; // gpio polarity for vr0 hot event2655uint8_t vr1hotgpio; // gpio pin configured for vr1 hot event2656uint8_t vr1hotpolarity; // gpio polarity for vr1 hot event26572658// gfxclk pll spread spectrum2659uint8_t pllgfxclkspreadenabled; // on or off2660uint8_t pllgfxclkspreadpercent; // q4.42661uint16_t pllgfxclkspreadfreq; // khz26622663// uclk spread spectrum2664uint8_t uclkspreadenabled; // on or off2665uint8_t uclkspreadpercent; // q4.42666uint16_t uclkspreadfreq; // khz26672668// fclk spread spectrum2669uint8_t fclkspreadenabled; // on or off2670uint8_t fclkspreadpercent; // q4.42671uint16_t fclkspreadfreq; // khz267226732674// gfxclk fll spread spectrum2675uint8_t fllgfxclkspreadenabled; // on or off2676uint8_t fllgfxclkspreadpercent; // q4.42677uint16_t fllgfxclkspreadfreq; // khz26782679// i2c controller structure2680struct smudpm_i2c_controller_config_v2 i2ccontrollers[8];26812682// memory section2683uint32_t memorychannelenabled; // for dram use only, max 32 channels enabled bit mask.26842685uint8_t drambitwidth; // for dram use only. see dram bit width type defines2686uint8_t paddingmem[3];26872688// total board power2689uint16_t totalboardpower; //only needed for tcp estimated case, where tcp = tgp+total board power2690uint16_t boardpadding;26912692// section: xgmi training2693uint8_t xgmilinkspeed[4];2694uint8_t xgmilinkwidth[4];26952696uint16_t xgmifclkfreq[4];2697uint16_t xgmisocvoltage[4];26982699// reserved2700uint32_t boardreserved[10];2701};27022703struct atom_smc_dpm_info_v4_72704{2705struct atom_common_table_header table_header;2706// SECTION: BOARD PARAMETERS2707// I2C Control2708struct smudpm_i2c_controller_config_v2 I2cControllers[8];27092710// SVI2 Board Parameters2711uint16_t MaxVoltageStepGfx; // In mV(Q2) Max voltage step that SMU will request. Multiple steps are taken if voltage change exceeds this value.2712uint16_t MaxVoltageStepSoc; // In mV(Q2) Max voltage step that SMU will request. Multiple steps are taken if voltage change exceeds this value.27132714uint8_t VddGfxVrMapping; // Use VR_MAPPING* bitfields2715uint8_t VddSocVrMapping; // Use VR_MAPPING* bitfields2716uint8_t VddMem0VrMapping; // Use VR_MAPPING* bitfields2717uint8_t VddMem1VrMapping; // Use VR_MAPPING* bitfields27182719uint8_t GfxUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode2720uint8_t SocUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode2721uint8_t ExternalSensorPresent; // External RDI connected to TMON (aka TEMP IN)2722uint8_t Padding8_V;27232724// Telemetry Settings2725uint16_t GfxMaxCurrent; // in Amps2726uint8_t GfxOffset; // in Amps2727uint8_t Padding_TelemetryGfx;2728uint16_t SocMaxCurrent; // in Amps2729uint8_t SocOffset; // in Amps2730uint8_t Padding_TelemetrySoc;27312732uint16_t Mem0MaxCurrent; // in Amps2733uint8_t Mem0Offset; // in Amps2734uint8_t Padding_TelemetryMem0;27352736uint16_t Mem1MaxCurrent; // in Amps2737uint8_t Mem1Offset; // in Amps2738uint8_t Padding_TelemetryMem1;27392740// GPIO Settings2741uint8_t AcDcGpio; // GPIO pin configured for AC/DC switching2742uint8_t AcDcPolarity; // GPIO polarity for AC/DC switching2743uint8_t VR0HotGpio; // GPIO pin configured for VR0 HOT event2744uint8_t VR0HotPolarity; // GPIO polarity for VR0 HOT event27452746uint8_t VR1HotGpio; // GPIO pin configured for VR1 HOT event2747uint8_t VR1HotPolarity; // GPIO polarity for VR1 HOT event2748uint8_t GthrGpio; // GPIO pin configured for GTHR Event2749uint8_t GthrPolarity; // replace GPIO polarity for GTHR27502751// LED Display Settings2752uint8_t LedPin0; // GPIO number for LedPin[0]2753uint8_t LedPin1; // GPIO number for LedPin[1]2754uint8_t LedPin2; // GPIO number for LedPin[2]2755uint8_t padding8_4;27562757// GFXCLK PLL Spread Spectrum2758uint8_t PllGfxclkSpreadEnabled; // on or off2759uint8_t PllGfxclkSpreadPercent; // Q4.42760uint16_t PllGfxclkSpreadFreq; // kHz27612762// GFXCLK DFLL Spread Spectrum2763uint8_t DfllGfxclkSpreadEnabled; // on or off2764uint8_t DfllGfxclkSpreadPercent; // Q4.42765uint16_t DfllGfxclkSpreadFreq; // kHz27662767// UCLK Spread Spectrum2768uint8_t UclkSpreadEnabled; // on or off2769uint8_t UclkSpreadPercent; // Q4.42770uint16_t UclkSpreadFreq; // kHz27712772// SOCCLK Spread Spectrum2773uint8_t SoclkSpreadEnabled; // on or off2774uint8_t SocclkSpreadPercent; // Q4.42775uint16_t SocclkSpreadFreq; // kHz27762777// Total board power2778uint16_t TotalBoardPower; //Only needed for TCP Estimated case, where TCP = TGP+Total Board Power2779uint16_t BoardPadding;27802781// Mvdd Svi2 Div Ratio Setting2782uint32_t MvddRatio; // This is used for MVDD Vid workaround. It has 16 fractional bits (Q16.16)27832784// GPIO pins for I2C communications with 2nd controller for Input Telemetry Sequence2785uint8_t GpioI2cScl; // Serial Clock2786uint8_t GpioI2cSda; // Serial Data2787uint16_t GpioPadding;27882789// Additional LED Display Settings2790uint8_t LedPin3; // GPIO number for LedPin[3] - PCIE GEN Speed2791uint8_t LedPin4; // GPIO number for LedPin[4] - PMFW Error Status2792uint16_t LedEnableMask;27932794// Power Limit Scalars2795uint8_t PowerLimitScalar[4]; //[PPT_THROTTLER_COUNT]27962797uint8_t MvddUlvPhaseSheddingMask;2798uint8_t VddciUlvPhaseSheddingMask;2799uint8_t Padding8_Psi1;2800uint8_t Padding8_Psi2;28012802uint32_t BoardReserved[5];2803};28042805struct smudpm_i2c_controller_config_v32806{2807uint8_t Enabled;2808uint8_t Speed;2809uint8_t SlaveAddress;2810uint8_t ControllerPort;2811uint8_t ControllerName;2812uint8_t ThermalThrotter;2813uint8_t I2cProtocol;2814uint8_t PaddingConfig;2815};28162817struct atom_smc_dpm_info_v4_92818{2819struct atom_common_table_header table_header;28202821//SECTION: Gaming Clocks2822//uint32_t GamingClk[6];28232824// SECTION: I2C Control2825struct smudpm_i2c_controller_config_v3 I2cControllers[16];28262827uint8_t GpioScl; // GPIO Number for SCL Line, used only for CKSVII2C12828uint8_t GpioSda; // GPIO Number for SDA Line, used only for CKSVII2C12829uint8_t FchUsbPdSlaveAddr; //For requesting USB PD controller S-states via FCH I2C when entering PME turn off2830uint8_t I2cSpare;28312832// SECTION: SVI2 Board Parameters2833uint8_t VddGfxVrMapping; // Use VR_MAPPING* bitfields2834uint8_t VddSocVrMapping; // Use VR_MAPPING* bitfields2835uint8_t VddMem0VrMapping; // Use VR_MAPPING* bitfields2836uint8_t VddMem1VrMapping; // Use VR_MAPPING* bitfields28372838uint8_t GfxUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode2839uint8_t SocUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode2840uint8_t VddciUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode2841uint8_t MvddUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode28422843// SECTION: Telemetry Settings2844uint16_t GfxMaxCurrent; // in Amps2845uint8_t GfxOffset; // in Amps2846uint8_t Padding_TelemetryGfx;28472848uint16_t SocMaxCurrent; // in Amps2849uint8_t SocOffset; // in Amps2850uint8_t Padding_TelemetrySoc;28512852uint16_t Mem0MaxCurrent; // in Amps2853uint8_t Mem0Offset; // in Amps2854uint8_t Padding_TelemetryMem0;28552856uint16_t Mem1MaxCurrent; // in Amps2857uint8_t Mem1Offset; // in Amps2858uint8_t Padding_TelemetryMem1;28592860uint32_t MvddRatio; // This is used for MVDD Svi2 Div Ratio workaround. It has 16 fractional bits (Q16.16)28612862// SECTION: GPIO Settings2863uint8_t AcDcGpio; // GPIO pin configured for AC/DC switching2864uint8_t AcDcPolarity; // GPIO polarity for AC/DC switching2865uint8_t VR0HotGpio; // GPIO pin configured for VR0 HOT event2866uint8_t VR0HotPolarity; // GPIO polarity for VR0 HOT event28672868uint8_t VR1HotGpio; // GPIO pin configured for VR1 HOT event2869uint8_t VR1HotPolarity; // GPIO polarity for VR1 HOT event2870uint8_t GthrGpio; // GPIO pin configured for GTHR Event2871uint8_t GthrPolarity; // replace GPIO polarity for GTHR28722873// LED Display Settings2874uint8_t LedPin0; // GPIO number for LedPin[0]2875uint8_t LedPin1; // GPIO number for LedPin[1]2876uint8_t LedPin2; // GPIO number for LedPin[2]2877uint8_t LedEnableMask;28782879uint8_t LedPcie; // GPIO number for PCIE results2880uint8_t LedError; // GPIO number for Error Cases2881uint8_t LedSpare1[2];28822883// SECTION: Clock Spread Spectrum28842885// GFXCLK PLL Spread Spectrum2886uint8_t PllGfxclkSpreadEnabled; // on or off2887uint8_t PllGfxclkSpreadPercent; // Q4.42888uint16_t PllGfxclkSpreadFreq; // kHz28892890// GFXCLK DFLL Spread Spectrum2891uint8_t DfllGfxclkSpreadEnabled; // on or off2892uint8_t DfllGfxclkSpreadPercent; // Q4.42893uint16_t DfllGfxclkSpreadFreq; // kHz28942895// UCLK Spread Spectrum2896uint8_t UclkSpreadEnabled; // on or off2897uint8_t UclkSpreadPercent; // Q4.42898uint16_t UclkSpreadFreq; // kHz28992900// FCLK Spread Spectrum2901uint8_t FclkSpreadEnabled; // on or off2902uint8_t FclkSpreadPercent; // Q4.42903uint16_t FclkSpreadFreq; // kHz29042905// Section: Memory Config2906uint32_t MemoryChannelEnabled; // For DRAM use only, Max 32 channels enabled bit mask.29072908uint8_t DramBitWidth; // For DRAM use only. See Dram Bit width type defines2909uint8_t PaddingMem1[3];29102911// Section: Total Board Power2912uint16_t TotalBoardPower; //Only needed for TCP Estimated case, where TCP = TGP+Total Board Power2913uint16_t BoardPowerPadding;29142915// SECTION: XGMI Training2916uint8_t XgmiLinkSpeed [4];2917uint8_t XgmiLinkWidth [4];29182919uint16_t XgmiFclkFreq [4];2920uint16_t XgmiSocVoltage [4];29212922// SECTION: Board Reserved29232924uint32_t BoardReserved[16];29252926};29272928struct atom_smc_dpm_info_v4_102929{2930struct atom_common_table_header table_header;29312932// SECTION: BOARD PARAMETERS2933// Telemetry Settings2934uint16_t GfxMaxCurrent; // in Amps2935uint8_t GfxOffset; // in Amps2936uint8_t Padding_TelemetryGfx;29372938uint16_t SocMaxCurrent; // in Amps2939uint8_t SocOffset; // in Amps2940uint8_t Padding_TelemetrySoc;29412942uint16_t MemMaxCurrent; // in Amps2943uint8_t MemOffset; // in Amps2944uint8_t Padding_TelemetryMem;29452946uint16_t BoardMaxCurrent; // in Amps2947uint8_t BoardOffset; // in Amps2948uint8_t Padding_TelemetryBoardInput;29492950// Platform input telemetry voltage coefficient2951uint32_t BoardVoltageCoeffA; // decode by /10002952uint32_t BoardVoltageCoeffB; // decode by /100029532954// GPIO Settings2955uint8_t VR0HotGpio; // GPIO pin configured for VR0 HOT event2956uint8_t VR0HotPolarity; // GPIO polarity for VR0 HOT event2957uint8_t VR1HotGpio; // GPIO pin configured for VR1 HOT event2958uint8_t VR1HotPolarity; // GPIO polarity for VR1 HOT event29592960// UCLK Spread Spectrum2961uint8_t UclkSpreadEnabled; // on or off2962uint8_t UclkSpreadPercent; // Q4.42963uint16_t UclkSpreadFreq; // kHz29642965// FCLK Spread Spectrum2966uint8_t FclkSpreadEnabled; // on or off2967uint8_t FclkSpreadPercent; // Q4.42968uint16_t FclkSpreadFreq; // kHz29692970// I2C Controller Structure2971struct smudpm_i2c_controller_config_v3 I2cControllers[8];29722973// GPIO pins for I2C communications with 2nd controller for Input Telemetry Sequence2974uint8_t GpioI2cScl; // Serial Clock2975uint8_t GpioI2cSda; // Serial Data2976uint16_t spare5;29772978uint32_t reserved[16];2979};29802981/*2982***************************************************************************2983Data Table asic_profiling_info structure2984***************************************************************************2985*/2986struct atom_asic_profiling_info_v4_12987{2988struct atom_common_table_header table_header;2989uint32_t maxvddc;2990uint32_t minvddc;2991uint32_t avfs_meannsigma_acontant0;2992uint32_t avfs_meannsigma_acontant1;2993uint32_t avfs_meannsigma_acontant2;2994uint16_t avfs_meannsigma_dc_tol_sigma;2995uint16_t avfs_meannsigma_platform_mean;2996uint16_t avfs_meannsigma_platform_sigma;2997uint32_t gb_vdroop_table_cksoff_a0;2998uint32_t gb_vdroop_table_cksoff_a1;2999uint32_t gb_vdroop_table_cksoff_a2;3000uint32_t gb_vdroop_table_ckson_a0;3001uint32_t gb_vdroop_table_ckson_a1;3002uint32_t gb_vdroop_table_ckson_a2;3003uint32_t avfsgb_fuse_table_cksoff_m1;3004uint32_t avfsgb_fuse_table_cksoff_m2;3005uint32_t avfsgb_fuse_table_cksoff_b;3006uint32_t avfsgb_fuse_table_ckson_m1;3007uint32_t avfsgb_fuse_table_ckson_m2;3008uint32_t avfsgb_fuse_table_ckson_b;3009uint16_t max_voltage_0_25mv;3010uint8_t enable_gb_vdroop_table_cksoff;3011uint8_t enable_gb_vdroop_table_ckson;3012uint8_t enable_gb_fuse_table_cksoff;3013uint8_t enable_gb_fuse_table_ckson;3014uint16_t psm_age_comfactor;3015uint8_t enable_apply_avfs_cksoff_voltage;3016uint8_t reserved;3017uint32_t dispclk2gfxclk_a;3018uint32_t dispclk2gfxclk_b;3019uint32_t dispclk2gfxclk_c;3020uint32_t pixclk2gfxclk_a;3021uint32_t pixclk2gfxclk_b;3022uint32_t pixclk2gfxclk_c;3023uint32_t dcefclk2gfxclk_a;3024uint32_t dcefclk2gfxclk_b;3025uint32_t dcefclk2gfxclk_c;3026uint32_t phyclk2gfxclk_a;3027uint32_t phyclk2gfxclk_b;3028uint32_t phyclk2gfxclk_c;3029};30303031struct atom_asic_profiling_info_v4_2 {3032struct atom_common_table_header table_header;3033uint32_t maxvddc;3034uint32_t minvddc;3035uint32_t avfs_meannsigma_acontant0;3036uint32_t avfs_meannsigma_acontant1;3037uint32_t avfs_meannsigma_acontant2;3038uint16_t avfs_meannsigma_dc_tol_sigma;3039uint16_t avfs_meannsigma_platform_mean;3040uint16_t avfs_meannsigma_platform_sigma;3041uint32_t gb_vdroop_table_cksoff_a0;3042uint32_t gb_vdroop_table_cksoff_a1;3043uint32_t gb_vdroop_table_cksoff_a2;3044uint32_t gb_vdroop_table_ckson_a0;3045uint32_t gb_vdroop_table_ckson_a1;3046uint32_t gb_vdroop_table_ckson_a2;3047uint32_t avfsgb_fuse_table_cksoff_m1;3048uint32_t avfsgb_fuse_table_cksoff_m2;3049uint32_t avfsgb_fuse_table_cksoff_b;3050uint32_t avfsgb_fuse_table_ckson_m1;3051uint32_t avfsgb_fuse_table_ckson_m2;3052uint32_t avfsgb_fuse_table_ckson_b;3053uint16_t max_voltage_0_25mv;3054uint8_t enable_gb_vdroop_table_cksoff;3055uint8_t enable_gb_vdroop_table_ckson;3056uint8_t enable_gb_fuse_table_cksoff;3057uint8_t enable_gb_fuse_table_ckson;3058uint16_t psm_age_comfactor;3059uint8_t enable_apply_avfs_cksoff_voltage;3060uint8_t reserved;3061uint32_t dispclk2gfxclk_a;3062uint32_t dispclk2gfxclk_b;3063uint32_t dispclk2gfxclk_c;3064uint32_t pixclk2gfxclk_a;3065uint32_t pixclk2gfxclk_b;3066uint32_t pixclk2gfxclk_c;3067uint32_t dcefclk2gfxclk_a;3068uint32_t dcefclk2gfxclk_b;3069uint32_t dcefclk2gfxclk_c;3070uint32_t phyclk2gfxclk_a;3071uint32_t phyclk2gfxclk_b;3072uint32_t phyclk2gfxclk_c;3073uint32_t acg_gb_vdroop_table_a0;3074uint32_t acg_gb_vdroop_table_a1;3075uint32_t acg_gb_vdroop_table_a2;3076uint32_t acg_avfsgb_fuse_table_m1;3077uint32_t acg_avfsgb_fuse_table_m2;3078uint32_t acg_avfsgb_fuse_table_b;3079uint8_t enable_acg_gb_vdroop_table;3080uint8_t enable_acg_gb_fuse_table;3081uint32_t acg_dispclk2gfxclk_a;3082uint32_t acg_dispclk2gfxclk_b;3083uint32_t acg_dispclk2gfxclk_c;3084uint32_t acg_pixclk2gfxclk_a;3085uint32_t acg_pixclk2gfxclk_b;3086uint32_t acg_pixclk2gfxclk_c;3087uint32_t acg_dcefclk2gfxclk_a;3088uint32_t acg_dcefclk2gfxclk_b;3089uint32_t acg_dcefclk2gfxclk_c;3090uint32_t acg_phyclk2gfxclk_a;3091uint32_t acg_phyclk2gfxclk_b;3092uint32_t acg_phyclk2gfxclk_c;3093};30943095/*3096***************************************************************************3097Data Table multimedia_info structure3098***************************************************************************3099*/3100struct atom_multimedia_info_v2_13101{3102struct atom_common_table_header table_header;3103uint8_t uvdip_min_ver;3104uint8_t uvdip_max_ver;3105uint8_t vceip_min_ver;3106uint8_t vceip_max_ver;3107uint16_t uvd_enc_max_input_width_pixels;3108uint16_t uvd_enc_max_input_height_pixels;3109uint16_t vce_enc_max_input_width_pixels;3110uint16_t vce_enc_max_input_height_pixels;3111uint32_t uvd_enc_max_bandwidth; // 16x16 pixels/sec, codec independent3112uint32_t vce_enc_max_bandwidth; // 16x16 pixels/sec, codec independent3113};311431153116/*3117***************************************************************************3118Data Table umc_info structure3119***************************************************************************3120*/3121struct atom_umc_info_v3_13122{3123struct atom_common_table_header table_header;3124uint32_t ucode_version;3125uint32_t ucode_rom_startaddr;3126uint32_t ucode_length;3127uint16_t umc_reg_init_offset;3128uint16_t customer_ucode_name_offset;3129uint16_t mclk_ss_percentage;3130uint16_t mclk_ss_rate_10hz;3131uint8_t umcip_min_ver;3132uint8_t umcip_max_ver;3133uint8_t vram_type; //enum of atom_dgpu_vram_type3134uint8_t umc_config;3135uint32_t mem_refclk_10khz;3136};31373138// umc_info.umc_config3139enum atom_umc_config_def {3140UMC_CONFIG__ENABLE_1KB_INTERLEAVE_MODE = 0x00000001,3141UMC_CONFIG__DEFAULT_MEM_ECC_ENABLE = 0x00000002,3142UMC_CONFIG__ENABLE_HBM_LANE_REPAIR = 0x00000004,3143UMC_CONFIG__ENABLE_BANK_HARVESTING = 0x00000008,3144UMC_CONFIG__ENABLE_PHY_REINIT = 0x00000010,3145UMC_CONFIG__DISABLE_UCODE_CHKSTATUS = 0x00000020,3146};31473148struct atom_umc_info_v3_23149{3150struct atom_common_table_header table_header;3151uint32_t ucode_version;3152uint32_t ucode_rom_startaddr;3153uint32_t ucode_length;3154uint16_t umc_reg_init_offset;3155uint16_t customer_ucode_name_offset;3156uint16_t mclk_ss_percentage;3157uint16_t mclk_ss_rate_10hz;3158uint8_t umcip_min_ver;3159uint8_t umcip_max_ver;3160uint8_t vram_type; //enum of atom_dgpu_vram_type3161uint8_t umc_config;3162uint32_t mem_refclk_10khz;3163uint32_t pstate_uclk_10khz[4];3164uint16_t umcgoldenoffset;3165uint16_t densitygoldenoffset;3166};31673168struct atom_umc_info_v3_33169{3170struct atom_common_table_header table_header;3171uint32_t ucode_reserved;3172uint32_t ucode_rom_startaddr;3173uint32_t ucode_length;3174uint16_t umc_reg_init_offset;3175uint16_t customer_ucode_name_offset;3176uint16_t mclk_ss_percentage;3177uint16_t mclk_ss_rate_10hz;3178uint8_t umcip_min_ver;3179uint8_t umcip_max_ver;3180uint8_t vram_type; //enum of atom_dgpu_vram_type3181uint8_t umc_config;3182uint32_t mem_refclk_10khz;3183uint32_t pstate_uclk_10khz[4];3184uint16_t umcgoldenoffset;3185uint16_t densitygoldenoffset;3186uint32_t umc_config1;3187uint32_t bist_data_startaddr;3188uint32_t reserved[2];3189};31903191enum atom_umc_config1_def {3192UMC_CONFIG1__ENABLE_PSTATE_PHASE_STORE_TRAIN = 0x00000001,3193UMC_CONFIG1__ENABLE_AUTO_FRAMING = 0x00000002,3194UMC_CONFIG1__ENABLE_RESTORE_BIST_DATA = 0x00000004,3195UMC_CONFIG1__DISABLE_STROBE_MODE = 0x00000008,3196UMC_CONFIG1__DEBUG_DATA_PARITY_EN = 0x00000010,3197UMC_CONFIG1__ENABLE_ECC_CAPABLE = 0x00010000,3198};31993200struct atom_umc_info_v4_0 {3201struct atom_common_table_header table_header;3202uint32_t ucode_reserved[5];3203uint8_t umcip_min_ver;3204uint8_t umcip_max_ver;3205uint8_t vram_type;3206uint8_t umc_config;3207uint32_t mem_refclk_10khz;3208uint32_t clk_reserved[4];3209uint32_t golden_reserved;3210uint32_t umc_config1;3211uint32_t reserved[2];3212uint8_t channel_num;3213uint8_t channel_width;3214uint8_t channel_reserve[2];3215uint8_t umc_info_reserved[16];3216};32173218/*3219***************************************************************************3220Data Table vram_info structure3221***************************************************************************3222*/3223struct atom_vram_module_v9 {3224// Design Specific Values3225uint32_t memory_size; // Total memory size in unit of MB for CONFIG_MEMSIZE zeros3226uint32_t channel_enable; // bit vector, each bit indicate specific channel enable or not3227uint32_t max_mem_clk; // max memory clock of this memory in unit of 10kHz, =0 means it is not defined3228uint16_t reserved[3];3229uint16_t mem_voltage; // mem_voltage3230uint16_t vram_module_size; // Size of atom_vram_module_v93231uint8_t ext_memory_id; // Current memory module ID3232uint8_t memory_type; // enum of atom_dgpu_vram_type3233uint8_t channel_num; // Number of mem. channels supported in this module3234uint8_t channel_width; // CHANNEL_16BIT/CHANNEL_32BIT/CHANNEL_64BIT3235uint8_t density; // _8Mx32, _16Mx32, _16Mx16, _32Mx163236uint8_t tunningset_id; // MC phy registers set per.3237uint8_t vender_rev_id; // [7:4] Revision, [3:0] Vendor code3238uint8_t refreshrate; // [1:0]=RefreshFactor (00=8ms, 01=16ms, 10=32ms,11=64ms)3239uint8_t hbm_ven_rev_id; // hbm_ven_rev_id3240uint8_t vram_rsd2; // reserved3241char dram_pnstring[20]; // part number end with '0'.3242};32433244struct atom_vram_info_header_v2_3 {3245struct atom_common_table_header table_header;3246uint16_t mem_adjust_tbloffset; // offset of atom_umc_init_reg_block structure for memory vendor specific UMC adjust setting3247uint16_t mem_clk_patch_tbloffset; // offset of atom_umc_init_reg_block structure for memory clock specific UMC setting3248uint16_t mc_adjust_pertile_tbloffset; // offset of atom_umc_init_reg_block structure for Per Byte Offset Preset Settings3249uint16_t mc_phyinit_tbloffset; // offset of atom_umc_init_reg_block structure for MC phy init set3250uint16_t dram_data_remap_tbloffset; // reserved for now3251uint16_t tmrs_seq_offset; // offset of HBM tmrs3252uint16_t post_ucode_init_offset; // offset of atom_umc_init_reg_block structure for MC phy init after MC uCode complete umc init3253uint16_t vram_rsd2;3254uint8_t vram_module_num; // indicate number of VRAM module3255uint8_t umcip_min_ver;3256uint8_t umcip_max_ver;3257uint8_t mc_phy_tile_num; // indicate the MCD tile number which use in DramDataRemapTbl and usMcAdjustPerTileTblOffset3258struct atom_vram_module_v9 vram_module[16]; // just for allocation, real number of blocks is in ucNumOfVRAMModule;3259};32603261/*3262***************************************************************************3263Data Table vram_info v3.0 structure3264***************************************************************************3265*/3266struct atom_vram_module_v3_0 {3267uint8_t density;3268uint8_t tunningset_id;3269uint8_t ext_memory_id;3270uint8_t dram_vendor_id;3271uint16_t dram_info_offset;3272uint16_t mem_tuning_offset;3273uint16_t tmrs_seq_offset;3274uint16_t reserved1;3275uint32_t dram_size_per_ch;3276uint32_t reserved[3];3277char dram_pnstring[40];3278};32793280struct atom_vram_info_header_v3_0 {3281struct atom_common_table_header table_header;3282uint16_t mem_tuning_table_offset;3283uint16_t dram_info_table_offset;3284uint16_t tmrs_table_offset;3285uint16_t mc_init_table_offset;3286uint16_t dram_data_remap_table_offset;3287uint16_t umc_emuinittable_offset;3288uint16_t reserved_sub_table_offset[2];3289uint8_t vram_module_num;3290uint8_t umcip_min_ver;3291uint8_t umcip_max_ver;3292uint8_t mc_phy_tile_num;3293uint8_t memory_type;3294uint8_t channel_num;3295uint8_t channel_width;3296uint8_t reserved1;3297uint32_t channel_enable;3298uint32_t channel1_enable;3299uint32_t feature_enable;3300uint32_t feature1_enable;3301uint32_t hardcode_mem_size;3302uint32_t reserved4[4];3303struct atom_vram_module_v3_0 vram_module[8];3304};33053306struct atom_umc_register_addr_info{3307uint32_t umc_register_addr:24;3308uint32_t umc_reg_type_ind:1;3309uint32_t umc_reg_rsvd:7;3310};33113312//atom_umc_register_addr_info.3313enum atom_umc_register_addr_info_flag{3314b3ATOM_UMC_REG_ADD_INFO_INDIRECT_ACCESS =0x01,3315};33163317union atom_umc_register_addr_info_access3318{3319struct atom_umc_register_addr_info umc_reg_addr;3320uint32_t u32umc_reg_addr;3321};33223323struct atom_umc_reg_setting_id_config{3324uint32_t memclockrange:24;3325uint32_t mem_blk_id:8;3326};33273328union atom_umc_reg_setting_id_config_access3329{3330struct atom_umc_reg_setting_id_config umc_id_access;3331uint32_t u32umc_id_access;3332};33333334struct atom_umc_reg_setting_data_block{3335union atom_umc_reg_setting_id_config_access block_id;3336uint32_t u32umc_reg_data[1];3337};33383339struct atom_umc_init_reg_block{3340uint16_t umc_reg_num;3341uint16_t reserved;3342union atom_umc_register_addr_info_access umc_reg_list[1]; //for allocation purpose, the real number come from umc_reg_num;3343struct atom_umc_reg_setting_data_block umc_reg_setting_list[1];3344};33453346struct atom_vram_module_v10 {3347// Design Specific Values3348uint32_t memory_size; // Total memory size in unit of MB for CONFIG_MEMSIZE zeros3349uint32_t channel_enable; // bit vector, each bit indicate specific channel enable or not3350uint32_t max_mem_clk; // max memory clock of this memory in unit of 10kHz, =0 means it is not defined3351uint16_t reserved[3];3352uint16_t mem_voltage; // mem_voltage3353uint16_t vram_module_size; // Size of atom_vram_module_v93354uint8_t ext_memory_id; // Current memory module ID3355uint8_t memory_type; // enum of atom_dgpu_vram_type3356uint8_t channel_num; // Number of mem. channels supported in this module3357uint8_t channel_width; // CHANNEL_16BIT/CHANNEL_32BIT/CHANNEL_64BIT3358uint8_t density; // _8Mx32, _16Mx32, _16Mx16, _32Mx163359uint8_t tunningset_id; // MC phy registers set per3360uint8_t vender_rev_id; // [7:4] Revision, [3:0] Vendor code3361uint8_t refreshrate; // [1:0]=RefreshFactor (00=8ms, 01=16ms, 10=32ms,11=64ms)3362uint8_t vram_flags; // bit0= bankgroup enable3363uint8_t vram_rsd2; // reserved3364uint16_t gddr6_mr10; // gddr6 mode register10 value3365uint16_t gddr6_mr1; // gddr6 mode register1 value3366uint16_t gddr6_mr2; // gddr6 mode register2 value3367uint16_t gddr6_mr7; // gddr6 mode register7 value3368char dram_pnstring[20]; // part number end with '0'3369};33703371struct atom_vram_info_header_v2_4 {3372struct atom_common_table_header table_header;3373uint16_t mem_adjust_tbloffset; // offset of atom_umc_init_reg_block structure for memory vendor specific UMC adjust setting3374uint16_t mem_clk_patch_tbloffset; // offset of atom_umc_init_reg_block structure for memory clock specific UMC setting3375uint16_t mc_adjust_pertile_tbloffset; // offset of atom_umc_init_reg_block structure for Per Byte Offset Preset Settings3376uint16_t mc_phyinit_tbloffset; // offset of atom_umc_init_reg_block structure for MC phy init set3377uint16_t dram_data_remap_tbloffset; // reserved for now3378uint16_t reserved; // offset of reserved3379uint16_t post_ucode_init_offset; // offset of atom_umc_init_reg_block structure for MC phy init after MC uCode complete umc init3380uint16_t vram_rsd2;3381uint8_t vram_module_num; // indicate number of VRAM module3382uint8_t umcip_min_ver;3383uint8_t umcip_max_ver;3384uint8_t mc_phy_tile_num; // indicate the MCD tile number which use in DramDataRemapTbl and usMcAdjustPerTileTblOffset3385struct atom_vram_module_v10 vram_module[16]; // just for allocation, real number of blocks is in ucNumOfVRAMModule;3386};33873388struct atom_vram_module_v11 {3389// Design Specific Values3390uint32_t memory_size; // Total memory size in unit of MB for CONFIG_MEMSIZE zeros3391uint32_t channel_enable; // bit vector, each bit indicate specific channel enable or not3392uint16_t mem_voltage; // mem_voltage3393uint16_t vram_module_size; // Size of atom_vram_module_v93394uint8_t ext_memory_id; // Current memory module ID3395uint8_t memory_type; // enum of atom_dgpu_vram_type3396uint8_t channel_num; // Number of mem. channels supported in this module3397uint8_t channel_width; // CHANNEL_16BIT/CHANNEL_32BIT/CHANNEL_64BIT3398uint8_t density; // _8Mx32, _16Mx32, _16Mx16, _32Mx163399uint8_t tunningset_id; // MC phy registers set per.3400uint16_t reserved[4]; // reserved3401uint8_t vender_rev_id; // [7:4] Revision, [3:0] Vendor code3402uint8_t refreshrate; // [1:0]=RefreshFactor (00=8ms, 01=16ms, 10=32ms,11=64ms)3403uint8_t vram_flags; // bit0= bankgroup enable3404uint8_t vram_rsd2; // reserved3405uint16_t gddr6_mr10; // gddr6 mode register10 value3406uint16_t gddr6_mr0; // gddr6 mode register0 value3407uint16_t gddr6_mr1; // gddr6 mode register1 value3408uint16_t gddr6_mr2; // gddr6 mode register2 value3409uint16_t gddr6_mr4; // gddr6 mode register4 value3410uint16_t gddr6_mr7; // gddr6 mode register7 value3411uint16_t gddr6_mr8; // gddr6 mode register8 value3412char dram_pnstring[40]; // part number end with '0'.3413};34143415struct atom_gddr6_ac_timing_v2_5 {3416uint32_t u32umc_id_access;3417uint8_t RL;3418uint8_t WL;3419uint8_t tRAS;3420uint8_t tRC;34213422uint16_t tREFI;3423uint8_t tRFC;3424uint8_t tRFCpb;34253426uint8_t tRREFD;3427uint8_t tRCDRD;3428uint8_t tRCDWR;3429uint8_t tRP;34303431uint8_t tRRDS;3432uint8_t tRRDL;3433uint8_t tWR;3434uint8_t tWTRS;34353436uint8_t tWTRL;3437uint8_t tFAW;3438uint8_t tCCDS;3439uint8_t tCCDL;34403441uint8_t tCRCRL;3442uint8_t tCRCWL;3443uint8_t tCKE;3444uint8_t tCKSRE;34453446uint8_t tCKSRX;3447uint8_t tRTPS;3448uint8_t tRTPL;3449uint8_t tMRD;34503451uint8_t tMOD;3452uint8_t tXS;3453uint8_t tXHP;3454uint8_t tXSMRS;34553456uint32_t tXSH;34573458uint8_t tPD;3459uint8_t tXP;3460uint8_t tCPDED;3461uint8_t tACTPDE;34623463uint8_t tPREPDE;3464uint8_t tREFPDE;3465uint8_t tMRSPDEN;3466uint8_t tRDSRE;34673468uint8_t tWRSRE;3469uint8_t tPPD;3470uint8_t tCCDMW;3471uint8_t tWTRTR;34723473uint8_t tLTLTR;3474uint8_t tREFTR;3475uint8_t VNDR;3476uint8_t reserved[9];3477};34783479struct atom_gddr6_bit_byte_remap {3480uint32_t dphy_byteremap; //mmUMC_DPHY_ByteRemap3481uint32_t dphy_bitremap0; //mmUMC_DPHY_BitRemap03482uint32_t dphy_bitremap1; //mmUMC_DPHY_BitRemap13483uint32_t dphy_bitremap2; //mmUMC_DPHY_BitRemap23484uint32_t aphy_bitremap0; //mmUMC_APHY_BitRemap03485uint32_t aphy_bitremap1; //mmUMC_APHY_BitRemap13486uint32_t phy_dram; //mmUMC_PHY_DRAM3487};34883489struct atom_gddr6_dram_data_remap {3490uint32_t table_size;3491uint8_t phyintf_ck_inverted[8]; //UMC_PHY_PHYINTF_CNTL.INV_CK3492struct atom_gddr6_bit_byte_remap bit_byte_remap[16];3493};34943495struct atom_vram_info_header_v2_5 {3496struct atom_common_table_header table_header;3497uint16_t mem_adjust_tbloffset; // offset of atom_umc_init_reg_block structure for memory vendor specific UMC adjust settings3498uint16_t gddr6_ac_timing_offset; // offset of atom_gddr6_ac_timing_v2_5 structure for memory clock specific UMC settings3499uint16_t mc_adjust_pertile_tbloffset; // offset of atom_umc_init_reg_block structure for Per Byte Offset Preset Settings3500uint16_t mc_phyinit_tbloffset; // offset of atom_umc_init_reg_block structure for MC phy init set3501uint16_t dram_data_remap_tbloffset; // offset of atom_gddr6_dram_data_remap array to indicate DRAM data lane to GPU mapping3502uint16_t reserved; // offset of reserved3503uint16_t post_ucode_init_offset; // offset of atom_umc_init_reg_block structure for MC phy init after MC uCode complete umc init3504uint16_t strobe_mode_patch_tbloffset; // offset of atom_umc_init_reg_block structure for Strobe Mode memory clock specific UMC settings3505uint8_t vram_module_num; // indicate number of VRAM module3506uint8_t umcip_min_ver;3507uint8_t umcip_max_ver;3508uint8_t mc_phy_tile_num; // indicate the MCD tile number which use in DramDataRemapTbl and usMcAdjustPerTileTblOffset3509struct atom_vram_module_v11 vram_module[16]; // just for allocation, real number of blocks is in ucNumOfVRAMModule;3510};35113512struct atom_vram_info_header_v2_6 {3513struct atom_common_table_header table_header;3514uint16_t mem_adjust_tbloffset;3515uint16_t mem_clk_patch_tbloffset;3516uint16_t mc_adjust_pertile_tbloffset;3517uint16_t mc_phyinit_tbloffset;3518uint16_t dram_data_remap_tbloffset;3519uint16_t tmrs_seq_offset;3520uint16_t post_ucode_init_offset;3521uint16_t vram_rsd2;3522uint8_t vram_module_num;3523uint8_t umcip_min_ver;3524uint8_t umcip_max_ver;3525uint8_t mc_phy_tile_num;3526struct atom_vram_module_v9 vram_module[16];3527};3528/*3529***************************************************************************3530Data Table voltageobject_info structure3531***************************************************************************3532*/3533struct atom_i2c_data_entry3534{3535uint16_t i2c_reg_index; // i2c register address, can be up to 16bit3536uint16_t i2c_reg_data; // i2c register data, can be up to 16bit3537};35383539struct atom_voltage_object_header_v4{3540uint8_t voltage_type; //enum atom_voltage_type3541uint8_t voltage_mode; //enum atom_voltage_object_mode3542uint16_t object_size; //Size of Object3543};35443545// atom_voltage_object_header_v4.voltage_mode3546enum atom_voltage_object_mode3547{3548VOLTAGE_OBJ_GPIO_LUT = 0, //VOLTAGE and GPIO Lookup table ->atom_gpio_voltage_object_v43549VOLTAGE_OBJ_VR_I2C_INIT_SEQ = 3, //VOLTAGE REGULATOR INIT sequece through I2C -> atom_i2c_voltage_object_v43550VOLTAGE_OBJ_PHASE_LUT = 4, //Set Vregulator Phase lookup table ->atom_gpio_voltage_object_v43551VOLTAGE_OBJ_SVID2 = 7, //Indicate voltage control by SVID2 ->atom_svid2_voltage_object_v43552VOLTAGE_OBJ_EVV = 8,3553VOLTAGE_OBJ_MERGED_POWER = 9,3554};35553556struct atom_i2c_voltage_object_v43557{3558struct atom_voltage_object_header_v4 header; // voltage mode = VOLTAGE_OBJ_VR_I2C_INIT_SEQ3559uint8_t regulator_id; //Indicate Voltage Regulator Id3560uint8_t i2c_id;3561uint8_t i2c_slave_addr;3562uint8_t i2c_control_offset;3563uint8_t i2c_flag; // Bit0: 0 - One byte data; 1 - Two byte data3564uint8_t i2c_speed; // =0, use default i2c speed, otherwise use it in unit of kHz.3565uint8_t reserved[2];3566struct atom_i2c_data_entry i2cdatalut[1]; // end with 0xff3567};35683569// ATOM_I2C_VOLTAGE_OBJECT_V3.ucVoltageControlFlag3570enum atom_i2c_voltage_control_flag3571{3572VOLTAGE_DATA_ONE_BYTE = 0,3573VOLTAGE_DATA_TWO_BYTE = 1,3574};357535763577struct atom_voltage_gpio_map_lut3578{3579uint32_t voltage_gpio_reg_val; // The Voltage ID which is used to program GPIO register3580uint16_t voltage_level_mv; // The corresponding Voltage Value, in mV3581};35823583struct atom_gpio_voltage_object_v43584{3585struct atom_voltage_object_header_v4 header; // voltage mode = VOLTAGE_OBJ_GPIO_LUT or VOLTAGE_OBJ_PHASE_LUT3586uint8_t gpio_control_id; // default is 0 which indicate control through CG VID mode3587uint8_t gpio_entry_num; // indiate the entry numbers of Votlage/Gpio value Look up table3588uint8_t phase_delay_us; // phase delay in unit of micro second3589uint8_t reserved;3590uint32_t gpio_mask_val; // GPIO Mask value3591struct atom_voltage_gpio_map_lut voltage_gpio_lut[] __counted_by(gpio_entry_num);3592};35933594struct atom_svid2_voltage_object_v43595{3596struct atom_voltage_object_header_v4 header; // voltage mode = VOLTAGE_OBJ_SVID23597uint8_t loadline_psi1; // bit4:0= loadline setting ( Core Loadline trim and offset trim ), bit5=0:PSI1_L disable =1: PSI1_L enable3598uint8_t psi0_l_vid_thresd; // VR PSI0_L VID threshold3599uint8_t psi0_enable; //3600uint8_t maxvstep;3601uint8_t telemetry_offset;3602uint8_t telemetry_gain;3603uint16_t reserved1;3604};36053606struct atom_merged_voltage_object_v43607{3608struct atom_voltage_object_header_v4 header; // voltage mode = VOLTAGE_OBJ_MERGED_POWER3609uint8_t merged_powerrail_type; //enum atom_voltage_type3610uint8_t reserved[3];3611};36123613union atom_voltage_object_v4{3614struct atom_gpio_voltage_object_v4 gpio_voltage_obj;3615struct atom_i2c_voltage_object_v4 i2c_voltage_obj;3616struct atom_svid2_voltage_object_v4 svid2_voltage_obj;3617struct atom_merged_voltage_object_v4 merged_voltage_obj;3618};36193620struct atom_voltage_objects_info_v4_13621{3622struct atom_common_table_header table_header;3623union atom_voltage_object_v4 voltage_object[1]; //Info for Voltage control3624};362536263627/*3628***************************************************************************3629All Command Function structure definition3630***************************************************************************3631*/36323633/*3634***************************************************************************3635Structures used by asic_init3636***************************************************************************3637*/36383639struct asic_init_engine_parameters3640{3641uint32_t sclkfreqin10khz:24;3642uint32_t engineflag:8; /* enum atom_asic_init_engine_flag */3643};36443645struct asic_init_mem_parameters3646{3647uint32_t mclkfreqin10khz:24;3648uint32_t memflag:8; /* enum atom_asic_init_mem_flag */3649};36503651struct asic_init_parameters_v2_13652{3653struct asic_init_engine_parameters engineparam;3654struct asic_init_mem_parameters memparam;3655};36563657struct asic_init_ps_allocation_v2_13658{3659struct asic_init_parameters_v2_1 param;3660uint32_t reserved[16];3661};366236633664enum atom_asic_init_engine_flag3665{3666b3NORMAL_ENGINE_INIT = 0,3667b3SRIOV_SKIP_ASIC_INIT = 0x02,3668b3SRIOV_LOAD_UCODE = 0x40,3669};36703671enum atom_asic_init_mem_flag3672{3673b3NORMAL_MEM_INIT = 0,3674b3DRAM_SELF_REFRESH_EXIT =0x20,3675};36763677/*3678***************************************************************************3679Structures used by setengineclock3680***************************************************************************3681*/36823683struct set_engine_clock_parameters_v2_13684{3685uint32_t sclkfreqin10khz:24;3686uint32_t sclkflag:8; /* enum atom_set_engine_mem_clock_flag, */3687uint32_t reserved[10];3688};36893690struct set_engine_clock_ps_allocation_v2_13691{3692struct set_engine_clock_parameters_v2_1 clockinfo;3693uint32_t reserved[10];3694};369536963697enum atom_set_engine_mem_clock_flag3698{3699b3NORMAL_CHANGE_CLOCK = 0,3700b3FIRST_TIME_CHANGE_CLOCK = 0x08,3701b3STORE_DPM_TRAINGING = 0x40, //Applicable to memory clock change,when set, it store specific DPM mode training result3702};37033704/*3705***************************************************************************3706Structures used by getengineclock3707***************************************************************************3708*/3709struct get_engine_clock_parameter3710{3711uint32_t sclk_10khz; // current engine speed in 10KHz unit3712uint32_t reserved;3713};37143715/*3716***************************************************************************3717Structures used by setmemoryclock3718***************************************************************************3719*/3720struct set_memory_clock_parameters_v2_13721{3722uint32_t mclkfreqin10khz:24;3723uint32_t mclkflag:8; /* enum atom_set_engine_mem_clock_flag, */3724uint32_t reserved[10];3725};37263727struct set_memory_clock_ps_allocation_v2_13728{3729struct set_memory_clock_parameters_v2_1 clockinfo;3730uint32_t reserved[10];3731};373237333734/*3735***************************************************************************3736Structures used by getmemoryclock3737***************************************************************************3738*/3739struct get_memory_clock_parameter3740{3741uint32_t mclk_10khz; // current engine speed in 10KHz unit3742uint32_t reserved;3743};3744374537463747/*3748***************************************************************************3749Structures used by setvoltage3750***************************************************************************3751*/37523753struct set_voltage_parameters_v1_43754{3755uint8_t voltagetype; /* enum atom_voltage_type */3756uint8_t command; /* Indicate action: Set voltage level, enum atom_set_voltage_command */3757uint16_t vlevel_mv; /* real voltage level in unit of mv or Voltage Phase (0, 1, 2, .. ) */3758};37593760//set_voltage_parameters_v2_1.voltagemode3761enum atom_set_voltage_command{3762ATOM_SET_VOLTAGE = 0,3763ATOM_INIT_VOLTAGE_REGULATOR = 3,3764ATOM_SET_VOLTAGE_PHASE = 4,3765ATOM_GET_LEAKAGE_ID = 8,3766};37673768struct set_voltage_ps_allocation_v1_43769{3770struct set_voltage_parameters_v1_4 setvoltageparam;3771uint32_t reserved[10];3772};377337743775/*3776***************************************************************************3777Structures used by computegpuclockparam3778***************************************************************************3779*/37803781//ATOM_COMPUTE_CLOCK_FREQ.ulComputeClockFlag3782enum atom_gpu_clock_type3783{3784COMPUTE_GPUCLK_INPUT_FLAG_DEFAULT_GPUCLK =0x00,3785COMPUTE_GPUCLK_INPUT_FLAG_GFXCLK =0x01,3786COMPUTE_GPUCLK_INPUT_FLAG_UCLK =0x02,3787};37883789struct compute_gpu_clock_input_parameter_v1_83790{3791uint32_t gpuclock_10khz:24; //Input= target clock, output = actual clock3792uint32_t gpu_clock_type:8; //Input indicate clock type: enum atom_gpu_clock_type3793uint32_t reserved[5];3794};379537963797struct compute_gpu_clock_output_parameter_v1_83798{3799uint32_t gpuclock_10khz:24; //Input= target clock, output = actual clock3800uint32_t dfs_did:8; //return parameter: DFS divider which is used to program to register directly3801uint32_t pll_fb_mult; //Feedback Multiplier, bit 8:0 int, bit 15:12 post_div, bit 31:16 frac3802uint32_t pll_ss_fbsmult; // Spread FB Mult: bit 8:0 int, bit 31:16 frac3803uint16_t pll_ss_slew_frac;3804uint8_t pll_ss_enable;3805uint8_t reserved;3806uint32_t reserved1[2];3807};3808380938103811/*3812***************************************************************************3813Structures used by ReadEfuseValue3814***************************************************************************3815*/38163817struct read_efuse_input_parameters_v3_13818{3819uint16_t efuse_start_index;3820uint8_t reserved;3821uint8_t bitslen;3822};38233824// ReadEfuseValue input/output parameter3825union read_efuse_value_parameters_v3_13826{3827struct read_efuse_input_parameters_v3_1 efuse_info;3828uint32_t efusevalue;3829};383038313832/*3833***************************************************************************3834Structures used by getsmuclockinfo3835***************************************************************************3836*/3837struct atom_get_smu_clock_info_parameters_v3_13838{3839uint8_t syspll_id; // 0= syspll0, 1=syspll1, 2=syspll23840uint8_t clk_id; // atom_smu9_syspll0_clock_id (only valid when command == GET_SMU_CLOCK_INFO_V3_1_GET_CLOCK_FREQ )3841uint8_t command; // enum of atom_get_smu_clock_info_command3842uint8_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 )3843};38443845enum atom_get_smu_clock_info_command3846{3847GET_SMU_CLOCK_INFO_V3_1_GET_CLOCK_FREQ = 0,3848GET_SMU_CLOCK_INFO_V3_1_GET_PLLVCO_FREQ = 1,3849GET_SMU_CLOCK_INFO_V3_1_GET_PLLREFCLK_FREQ = 2,3850};38513852enum atom_smu9_syspll0_clock_id3853{3854SMU9_SYSPLL0_SMNCLK_ID = 0, // SMNCLK3855SMU9_SYSPLL0_SOCCLK_ID = 1, // SOCCLK (FCLK)3856SMU9_SYSPLL0_MP0CLK_ID = 2, // MP0CLK3857SMU9_SYSPLL0_MP1CLK_ID = 3, // MP1CLK3858SMU9_SYSPLL0_LCLK_ID = 4, // LCLK3859SMU9_SYSPLL0_DCLK_ID = 5, // DCLK3860SMU9_SYSPLL0_VCLK_ID = 6, // VCLK3861SMU9_SYSPLL0_ECLK_ID = 7, // ECLK3862SMU9_SYSPLL0_DCEFCLK_ID = 8, // DCEFCLK3863SMU9_SYSPLL0_DPREFCLK_ID = 10, // DPREFCLK3864SMU9_SYSPLL0_DISPCLK_ID = 11, // DISPCLK3865};38663867enum atom_smu11_syspll_id {3868SMU11_SYSPLL0_ID = 0,3869SMU11_SYSPLL1_0_ID = 1,3870SMU11_SYSPLL1_1_ID = 2,3871SMU11_SYSPLL1_2_ID = 3,3872SMU11_SYSPLL2_ID = 4,3873SMU11_SYSPLL3_0_ID = 5,3874SMU11_SYSPLL3_1_ID = 6,3875};38763877enum atom_smu11_syspll0_clock_id {3878SMU11_SYSPLL0_ECLK_ID = 0, // ECLK3879SMU11_SYSPLL0_SOCCLK_ID = 1, // SOCCLK3880SMU11_SYSPLL0_MP0CLK_ID = 2, // MP0CLK3881SMU11_SYSPLL0_DCLK_ID = 3, // DCLK3882SMU11_SYSPLL0_VCLK_ID = 4, // VCLK3883SMU11_SYSPLL0_DCEFCLK_ID = 5, // DCEFCLK3884};38853886enum atom_smu11_syspll1_0_clock_id {3887SMU11_SYSPLL1_0_UCLKA_ID = 0, // UCLK_a3888};38893890enum atom_smu11_syspll1_1_clock_id {3891SMU11_SYSPLL1_0_UCLKB_ID = 0, // UCLK_b3892};38933894enum atom_smu11_syspll1_2_clock_id {3895SMU11_SYSPLL1_0_FCLK_ID = 0, // FCLK3896};38973898enum atom_smu11_syspll2_clock_id {3899SMU11_SYSPLL2_GFXCLK_ID = 0, // GFXCLK3900};39013902enum atom_smu11_syspll3_0_clock_id {3903SMU11_SYSPLL3_0_WAFCLK_ID = 0, // WAFCLK3904SMU11_SYSPLL3_0_DISPCLK_ID = 1, // DISPCLK3905SMU11_SYSPLL3_0_DPREFCLK_ID = 2, // DPREFCLK3906};39073908enum atom_smu11_syspll3_1_clock_id {3909SMU11_SYSPLL3_1_MP1CLK_ID = 0, // MP1CLK3910SMU11_SYSPLL3_1_SMNCLK_ID = 1, // SMNCLK3911SMU11_SYSPLL3_1_LCLK_ID = 2, // LCLK3912};39133914enum atom_smu12_syspll_id {3915SMU12_SYSPLL0_ID = 0,3916SMU12_SYSPLL1_ID = 1,3917SMU12_SYSPLL2_ID = 2,3918SMU12_SYSPLL3_0_ID = 3,3919SMU12_SYSPLL3_1_ID = 4,3920};39213922enum atom_smu12_syspll0_clock_id {3923SMU12_SYSPLL0_SMNCLK_ID = 0, // SOCCLK3924SMU12_SYSPLL0_SOCCLK_ID = 1, // SOCCLK3925SMU12_SYSPLL0_MP0CLK_ID = 2, // MP0CLK3926SMU12_SYSPLL0_MP1CLK_ID = 3, // MP1CLK3927SMU12_SYSPLL0_MP2CLK_ID = 4, // MP2CLK3928SMU12_SYSPLL0_VCLK_ID = 5, // VCLK3929SMU12_SYSPLL0_LCLK_ID = 6, // LCLK3930SMU12_SYSPLL0_DCLK_ID = 7, // DCLK3931SMU12_SYSPLL0_ACLK_ID = 8, // ACLK3932SMU12_SYSPLL0_ISPCLK_ID = 9, // ISPCLK3933SMU12_SYSPLL0_SHUBCLK_ID = 10, // SHUBCLK3934};39353936enum atom_smu12_syspll1_clock_id {3937SMU12_SYSPLL1_DISPCLK_ID = 0, // DISPCLK3938SMU12_SYSPLL1_DPPCLK_ID = 1, // DPPCLK3939SMU12_SYSPLL1_DPREFCLK_ID = 2, // DPREFCLK3940SMU12_SYSPLL1_DCFCLK_ID = 3, // DCFCLK3941};39423943enum atom_smu12_syspll2_clock_id {3944SMU12_SYSPLL2_Pre_GFXCLK_ID = 0, // Pre_GFXCLK3945};39463947enum atom_smu12_syspll3_0_clock_id {3948SMU12_SYSPLL3_0_FCLK_ID = 0, // FCLK3949};39503951enum atom_smu12_syspll3_1_clock_id {3952SMU12_SYSPLL3_1_UMCCLK_ID = 0, // UMCCLK3953};39543955struct atom_get_smu_clock_info_output_parameters_v3_13956{3957union {3958uint32_t smu_clock_freq_hz;3959uint32_t syspllvcofreq_10khz;3960uint32_t sysspllrefclk_10khz;3961}atom_smu_outputclkfreq;3962};3963396439653966/*3967***************************************************************************3968Structures used by dynamicmemorysettings3969***************************************************************************3970*/39713972enum atom_dynamic_memory_setting_command3973{3974COMPUTE_MEMORY_PLL_PARAM = 1,3975COMPUTE_ENGINE_PLL_PARAM = 2,3976ADJUST_MC_SETTING_PARAM = 3,3977};39783979/* when command = COMPUTE_MEMORY_PLL_PARAM or ADJUST_MC_SETTING_PARAM */3980struct dynamic_mclk_settings_parameters_v2_13981{3982uint32_t mclk_10khz:24; //Input= target mclk3983uint32_t command:8; //command enum of atom_dynamic_memory_setting_command3984uint32_t reserved;3985};39863987/* when command = COMPUTE_ENGINE_PLL_PARAM */3988struct dynamic_sclk_settings_parameters_v2_13989{3990uint32_t sclk_10khz:24; //Input= target mclk3991uint32_t command:8; //command enum of atom_dynamic_memory_setting_command3992uint32_t mclk_10khz;3993uint32_t reserved;3994};39953996union dynamic_memory_settings_parameters_v2_13997{3998struct dynamic_mclk_settings_parameters_v2_1 mclk_setting;3999struct dynamic_sclk_settings_parameters_v2_1 sclk_setting;4000};4001400240034004/*4005***************************************************************************4006Structures used by memorytraining4007***************************************************************************4008*/40094010enum atom_umc6_0_ucode_function_call_enum_id4011{4012UMC60_UCODE_FUNC_ID_REINIT = 0,4013UMC60_UCODE_FUNC_ID_ENTER_SELFREFRESH = 1,4014UMC60_UCODE_FUNC_ID_EXIT_SELFREFRESH = 2,4015};401640174018struct memory_training_parameters_v2_14019{4020uint8_t ucode_func_id;4021uint8_t ucode_reserved[3];4022uint32_t reserved[5];4023};402440254026/*4027***************************************************************************4028Structures used by setpixelclock4029***************************************************************************4030*/40314032struct set_pixel_clock_parameter_v1_74033{4034uint32_t pixclk_100hz; // target the pixel clock to drive the CRTC timing in unit of 100Hz.40354036uint8_t pll_id; // ATOM_PHY_PLL0/ATOM_PHY_PLL1/ATOM_PPLL04037uint8_t encoderobjid; // ASIC encoder id defined in objectId.h,4038// indicate which graphic encoder will be used.4039uint8_t encoder_mode; // Encoder mode:4040uint8_t miscinfo; // enum atom_set_pixel_clock_v1_7_misc_info4041uint8_t crtc_id; // enum of atom_crtc_def4042uint8_t deep_color_ratio; // HDMI panel bit depth: enum atom_set_pixel_clock_v1_7_deepcolor_ratio4043uint8_t reserved1[2];4044uint32_t reserved2;4045};40464047//ucMiscInfo4048enum atom_set_pixel_clock_v1_7_misc_info4049{4050PIXEL_CLOCK_V7_MISC_FORCE_PROG_PPLL = 0x01,4051PIXEL_CLOCK_V7_MISC_PROG_PHYPLL = 0x02,4052PIXEL_CLOCK_V7_MISC_YUV420_MODE = 0x04,4053PIXEL_CLOCK_V7_MISC_DVI_DUALLINK_EN = 0x08,4054PIXEL_CLOCK_V7_MISC_REF_DIV_SRC = 0x30,4055PIXEL_CLOCK_V7_MISC_REF_DIV_SRC_XTALIN = 0x00,4056PIXEL_CLOCK_V7_MISC_REF_DIV_SRC_PCIE = 0x10,4057PIXEL_CLOCK_V7_MISC_REF_DIV_SRC_GENLK = 0x20,4058PIXEL_CLOCK_V7_MISC_REF_DIV_SRC_REFPAD = 0x30,4059PIXEL_CLOCK_V7_MISC_ATOMIC_UPDATE = 0x40,4060PIXEL_CLOCK_V7_MISC_FORCE_SS_DIS = 0x80,4061};40624063/* deep_color_ratio */4064enum atom_set_pixel_clock_v1_7_deepcolor_ratio4065{4066PIXEL_CLOCK_V7_DEEPCOLOR_RATIO_DIS = 0x00, //00 - DCCG_DEEP_COLOR_DTO_DISABLE: Disable Deep Color DTO4067PIXEL_CLOCK_V7_DEEPCOLOR_RATIO_5_4 = 0x01, //01 - DCCG_DEEP_COLOR_DTO_5_4_RATIO: Set Deep Color DTO to 5:44068PIXEL_CLOCK_V7_DEEPCOLOR_RATIO_3_2 = 0x02, //02 - DCCG_DEEP_COLOR_DTO_3_2_RATIO: Set Deep Color DTO to 3:24069PIXEL_CLOCK_V7_DEEPCOLOR_RATIO_2_1 = 0x03, //03 - DCCG_DEEP_COLOR_DTO_2_1_RATIO: Set Deep Color DTO to 2:14070};40714072/*4073***************************************************************************4074Structures used by setdceclock4075***************************************************************************4076*/40774078// SetDCEClock input parameter for DCE11.2( ELM and BF ) and above4079struct set_dce_clock_parameters_v2_14080{4081uint32_t dceclk_10khz; // target DCE frequency in unit of 10KHZ, return real DISPCLK/DPREFCLK frequency.4082uint8_t dceclktype; // =0: DISPCLK =1: DPREFCLK =2: PIXCLK4083uint8_t dceclksrc; // ATOM_PLL0 or ATOM_GCK_DFS or ATOM_FCH_CLK or ATOM_COMBOPHY_PLLx4084uint8_t dceclkflag; // Bit [1:0] = PPLL ref clock source ( when ucDCEClkSrc= ATOM_PPLL0 )4085uint8_t crtc_id; // ucDisp Pipe Id, ATOM_CRTC0/1/2/..., use only when ucDCEClkType = PIXCLK4086};40874088//ucDCEClkType4089enum atom_set_dce_clock_clock_type4090{4091DCE_CLOCK_TYPE_DISPCLK = 0,4092DCE_CLOCK_TYPE_DPREFCLK = 1,4093DCE_CLOCK_TYPE_PIXELCLK = 2, // used by VBIOS internally, called by SetPixelClock4094};40954096//ucDCEClkFlag when ucDCEClkType == DPREFCLK4097enum atom_set_dce_clock_dprefclk_flag4098{4099DCE_CLOCK_FLAG_PLL_REFCLK_SRC_MASK = 0x03,4100DCE_CLOCK_FLAG_PLL_REFCLK_SRC_GENERICA = 0x00,4101DCE_CLOCK_FLAG_PLL_REFCLK_SRC_GENLK = 0x01,4102DCE_CLOCK_FLAG_PLL_REFCLK_SRC_PCIE = 0x02,4103DCE_CLOCK_FLAG_PLL_REFCLK_SRC_XTALIN = 0x03,4104};41054106//ucDCEClkFlag when ucDCEClkType == PIXCLK4107enum atom_set_dce_clock_pixclk_flag4108{4109DCE_CLOCK_FLAG_PCLK_DEEPCOLOR_RATIO_MASK = 0x03,4110DCE_CLOCK_FLAG_PCLK_DEEPCOLOR_RATIO_DIS = 0x00, //00 - DCCG_DEEP_COLOR_DTO_DISABLE: Disable Deep Color DTO4111DCE_CLOCK_FLAG_PCLK_DEEPCOLOR_RATIO_5_4 = 0x01, //01 - DCCG_DEEP_COLOR_DTO_5_4_RATIO: Set Deep Color DTO to 5:44112DCE_CLOCK_FLAG_PCLK_DEEPCOLOR_RATIO_3_2 = 0x02, //02 - DCCG_DEEP_COLOR_DTO_3_2_RATIO: Set Deep Color DTO to 3:24113DCE_CLOCK_FLAG_PCLK_DEEPCOLOR_RATIO_2_1 = 0x03, //03 - DCCG_DEEP_COLOR_DTO_2_1_RATIO: Set Deep Color DTO to 2:14114DCE_CLOCK_FLAG_PIXCLK_YUV420_MODE = 0x04,4115};41164117struct set_dce_clock_ps_allocation_v2_14118{4119struct set_dce_clock_parameters_v2_1 param;4120uint32_t ulReserved[2];4121};412241234124/****************************************************************************/4125// Structures used by BlankCRTC4126/****************************************************************************/4127struct blank_crtc_parameters4128{4129uint8_t crtc_id; // enum atom_crtc_def4130uint8_t blanking; // enum atom_blank_crtc_command4131uint16_t reserved;4132uint32_t reserved1;4133};41344135enum atom_blank_crtc_command4136{4137ATOM_BLANKING = 1,4138ATOM_BLANKING_OFF = 0,4139};41404141/****************************************************************************/4142// Structures used by enablecrtc4143/****************************************************************************/4144struct enable_crtc_parameters4145{4146uint8_t crtc_id; // enum atom_crtc_def4147uint8_t enable; // ATOM_ENABLE or ATOM_DISABLE4148uint8_t padding[2];4149};415041514152/****************************************************************************/4153// Structure used by EnableDispPowerGating4154/****************************************************************************/4155struct enable_disp_power_gating_parameters_v2_14156{4157uint8_t disp_pipe_id; // ATOM_CRTC1, ATOM_CRTC2, ...4158uint8_t enable; // ATOM_ENABLE or ATOM_DISABLE4159uint8_t padding[2];4160};41614162struct enable_disp_power_gating_ps_allocation4163{4164struct enable_disp_power_gating_parameters_v2_1 param;4165uint32_t ulReserved[4];4166};41674168/****************************************************************************/4169// Structure used in setcrtc_usingdtdtiming4170/****************************************************************************/4171struct set_crtc_using_dtd_timing_parameters4172{4173uint16_t h_size;4174uint16_t h_blanking_time;4175uint16_t v_size;4176uint16_t v_blanking_time;4177uint16_t h_syncoffset;4178uint16_t h_syncwidth;4179uint16_t v_syncoffset;4180uint16_t v_syncwidth;4181uint16_t modemiscinfo;4182uint8_t h_border;4183uint8_t v_border;4184uint8_t crtc_id; // enum atom_crtc_def4185uint8_t encoder_mode; // atom_encode_mode_def4186uint8_t padding[2];4187};418841894190/****************************************************************************/4191// Structures used by processi2cchanneltransaction4192/****************************************************************************/4193struct process_i2c_channel_transaction_parameters4194{4195uint8_t i2cspeed_khz;4196union {4197uint8_t regindex;4198uint8_t status; /* enum atom_process_i2c_flag */4199} regind_status;4200uint16_t i2c_data_out;4201uint8_t flag; /* enum atom_process_i2c_status */4202uint8_t trans_bytes;4203uint8_t slave_addr;4204uint8_t i2c_id;4205};42064207//ucFlag4208enum atom_process_i2c_flag4209{4210HW_I2C_WRITE = 1,4211HW_I2C_READ = 0,4212I2C_2BYTE_ADDR = 0x02,4213HW_I2C_SMBUS_BYTE_WR = 0x04,4214};42154216//status4217enum atom_process_i2c_status4218{4219HW_ASSISTED_I2C_STATUS_FAILURE =2,4220HW_ASSISTED_I2C_STATUS_SUCCESS =1,4221};422242234224/****************************************************************************/4225// Structures used by processauxchanneltransaction4226/****************************************************************************/42274228struct process_aux_channel_transaction_parameters_v1_24229{4230uint16_t aux_request;4231uint16_t dataout;4232uint8_t channelid;4233union {4234uint8_t reply_status;4235uint8_t aux_delay;4236} aux_status_delay;4237uint8_t dataout_len;4238uint8_t hpd_id; //=0: HPD1, =1: HPD2, =2: HPD3, =3: HPD4, =4: HPD5, =5: HPD64239};424042414242/****************************************************************************/4243// Structures used by selectcrtc_source4244/****************************************************************************/42454246struct select_crtc_source_parameters_v2_34247{4248uint8_t crtc_id; // enum atom_crtc_def4249uint8_t encoder_id; // enum atom_dig_def4250uint8_t encode_mode; // enum atom_encode_mode_def4251uint8_t dst_bpc; // enum atom_panel_bit_per_color4252};425342544255/****************************************************************************/4256// Structures used by digxencodercontrol4257/****************************************************************************/42584259// ucAction:4260enum atom_dig_encoder_control_action4261{4262ATOM_ENCODER_CMD_DISABLE_DIG = 0,4263ATOM_ENCODER_CMD_ENABLE_DIG = 1,4264ATOM_ENCODER_CMD_DP_LINK_TRAINING_START = 0x08,4265ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN1 = 0x09,4266ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN2 = 0x0a,4267ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN3 = 0x13,4268ATOM_ENCODER_CMD_DP_LINK_TRAINING_COMPLETE = 0x0b,4269ATOM_ENCODER_CMD_DP_VIDEO_OFF = 0x0c,4270ATOM_ENCODER_CMD_DP_VIDEO_ON = 0x0d,4271ATOM_ENCODER_CMD_SETUP_PANEL_MODE = 0x10,4272ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN4 = 0x14,4273ATOM_ENCODER_CMD_STREAM_SETUP = 0x0F,4274ATOM_ENCODER_CMD_LINK_SETUP = 0x11,4275ATOM_ENCODER_CMD_ENCODER_BLANK = 0x12,4276};42774278//define ucPanelMode4279enum atom_dig_encoder_control_panelmode4280{4281DP_PANEL_MODE_DISABLE = 0x00,4282DP_PANEL_MODE_ENABLE_eDP_MODE = 0x01,4283DP_PANEL_MODE_ENABLE_LVLINK_MODE = 0x11,4284};42854286//ucDigId4287enum atom_dig_encoder_control_v5_digid4288{4289ATOM_ENCODER_CONFIG_V5_DIG0_ENCODER = 0x00,4290ATOM_ENCODER_CONFIG_V5_DIG1_ENCODER = 0x01,4291ATOM_ENCODER_CONFIG_V5_DIG2_ENCODER = 0x02,4292ATOM_ENCODER_CONFIG_V5_DIG3_ENCODER = 0x03,4293ATOM_ENCODER_CONFIG_V5_DIG4_ENCODER = 0x04,4294ATOM_ENCODER_CONFIG_V5_DIG5_ENCODER = 0x05,4295ATOM_ENCODER_CONFIG_V5_DIG6_ENCODER = 0x06,4296ATOM_ENCODER_CONFIG_V5_DIG7_ENCODER = 0x07,4297};42984299struct dig_encoder_stream_setup_parameters_v1_54300{4301uint8_t digid; // 0~6 map to DIG0~DIG6 enum atom_dig_encoder_control_v5_digid4302uint8_t action; // = ATOM_ENOCODER_CMD_STREAM_SETUP4303uint8_t digmode; // ATOM_ENCODER_MODE_DP/ATOM_ENCODER_MODE_DVI/ATOM_ENCODER_MODE_HDMI4304uint8_t lanenum; // Lane number4305uint32_t pclk_10khz; // Pixel Clock in 10Khz4306uint8_t bitpercolor;4307uint8_t dplinkrate_270mhz;//= DP link rate/270Mhz, =6: 1.62G = 10: 2.7G, =20: 5.4Ghz, =30: 8.1Ghz etc4308uint8_t reserved[2];4309};43104311struct dig_encoder_link_setup_parameters_v1_54312{4313uint8_t digid; // 0~6 map to DIG0~DIG6 enum atom_dig_encoder_control_v5_digid4314uint8_t action; // = ATOM_ENOCODER_CMD_LINK_SETUP4315uint8_t digmode; // ATOM_ENCODER_MODE_DP/ATOM_ENCODER_MODE_DVI/ATOM_ENCODER_MODE_HDMI4316uint8_t lanenum; // Lane number4317uint8_t symclk_10khz; // Symbol Clock in 10Khz4318uint8_t hpd_sel;4319uint8_t digfe_sel; // DIG stream( front-end ) selection, bit0 means DIG0 FE is enable,4320uint8_t reserved[2];4321};43224323struct dp_panel_mode_set_parameters_v1_54324{4325uint8_t digid; // 0~6 map to DIG0~DIG6 enum atom_dig_encoder_control_v5_digid4326uint8_t action; // = ATOM_ENCODER_CMD_DPLINK_SETUP4327uint8_t panelmode; // enum atom_dig_encoder_control_panelmode4328uint8_t reserved1;4329uint32_t reserved2[2];4330};43314332struct dig_encoder_generic_cmd_parameters_v1_54333{4334uint8_t digid; // 0~6 map to DIG0~DIG6 enum atom_dig_encoder_control_v5_digid4335uint8_t action; // = rest of generic encoder command which does not carry any parameters4336uint8_t reserved1[2];4337uint32_t reserved2[2];4338};43394340union dig_encoder_control_parameters_v1_54341{4342struct dig_encoder_generic_cmd_parameters_v1_5 cmd_param;4343struct dig_encoder_stream_setup_parameters_v1_5 stream_param;4344struct dig_encoder_link_setup_parameters_v1_5 link_param;4345struct dp_panel_mode_set_parameters_v1_5 dppanel_param;4346};43474348/*4349***************************************************************************4350Structures used by dig1transmittercontrol4351***************************************************************************4352*/4353struct dig_transmitter_control_parameters_v1_64354{4355uint8_t phyid; // 0=UNIPHYA, 1=UNIPHYB, 2=UNIPHYC, 3=UNIPHYD, 4= UNIPHYE 5=UNIPHYF4356uint8_t action; // define as ATOM_TRANSMITER_ACTION_xxx4357union {4358uint8_t digmode; // enum atom_encode_mode_def4359uint8_t dplaneset; // DP voltage swing and pre-emphasis value defined in DPCD DP_LANE_SET, "DP_LANE_SET__xDB_y_zV"4360} mode_laneset;4361uint8_t lanenum; // Lane number 1, 2, 4, 84362uint32_t symclk_10khz; // Symbol Clock in 10Khz4363uint8_t hpdsel; // =1: HPD1, =2: HPD2, .... =6: HPD6, =0: HPD is not assigned4364uint8_t digfe_sel; // DIG stream( front-end ) selection, bit0 means DIG0 FE is enable,4365uint8_t connobj_id; // Connector Object Id defined in ObjectId.h4366uint8_t reserved;4367uint32_t reserved1;4368};43694370struct dig_transmitter_control_ps_allocation_v1_64371{4372struct dig_transmitter_control_parameters_v1_6 param;4373uint32_t reserved[4];4374};43754376//ucAction4377enum atom_dig_transmitter_control_action4378{4379ATOM_TRANSMITTER_ACTION_DISABLE = 0,4380ATOM_TRANSMITTER_ACTION_ENABLE = 1,4381ATOM_TRANSMITTER_ACTION_LCD_BLOFF = 2,4382ATOM_TRANSMITTER_ACTION_LCD_BLON = 3,4383ATOM_TRANSMITTER_ACTION_BL_BRIGHTNESS_CONTROL = 4,4384ATOM_TRANSMITTER_ACTION_LCD_SELFTEST_START = 5,4385ATOM_TRANSMITTER_ACTION_LCD_SELFTEST_STOP = 6,4386ATOM_TRANSMITTER_ACTION_INIT = 7,4387ATOM_TRANSMITTER_ACTION_DISABLE_OUTPUT = 8,4388ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT = 9,4389ATOM_TRANSMITTER_ACTION_SETUP = 10,4390ATOM_TRANSMITTER_ACTION_SETUP_VSEMPH = 11,4391ATOM_TRANSMITTER_ACTION_POWER_ON = 12,4392ATOM_TRANSMITTER_ACTION_POWER_OFF = 13,4393};43944395// digfe_sel4396enum atom_dig_transmitter_control_digfe_sel4397{4398ATOM_TRANMSITTER_V6__DIGA_SEL = 0x01,4399ATOM_TRANMSITTER_V6__DIGB_SEL = 0x02,4400ATOM_TRANMSITTER_V6__DIGC_SEL = 0x04,4401ATOM_TRANMSITTER_V6__DIGD_SEL = 0x08,4402ATOM_TRANMSITTER_V6__DIGE_SEL = 0x10,4403ATOM_TRANMSITTER_V6__DIGF_SEL = 0x20,4404ATOM_TRANMSITTER_V6__DIGG_SEL = 0x40,4405};440644074408//ucHPDSel4409enum atom_dig_transmitter_control_hpd_sel4410{4411ATOM_TRANSMITTER_V6_NO_HPD_SEL = 0x00,4412ATOM_TRANSMITTER_V6_HPD1_SEL = 0x01,4413ATOM_TRANSMITTER_V6_HPD2_SEL = 0x02,4414ATOM_TRANSMITTER_V6_HPD3_SEL = 0x03,4415ATOM_TRANSMITTER_V6_HPD4_SEL = 0x04,4416ATOM_TRANSMITTER_V6_HPD5_SEL = 0x05,4417ATOM_TRANSMITTER_V6_HPD6_SEL = 0x06,4418};44194420// ucDPLaneSet4421enum atom_dig_transmitter_control_dplaneset4422{4423DP_LANE_SET__0DB_0_4V = 0x00,4424DP_LANE_SET__0DB_0_6V = 0x01,4425DP_LANE_SET__0DB_0_8V = 0x02,4426DP_LANE_SET__0DB_1_2V = 0x03,4427DP_LANE_SET__3_5DB_0_4V = 0x08,4428DP_LANE_SET__3_5DB_0_6V = 0x09,4429DP_LANE_SET__3_5DB_0_8V = 0x0a,4430DP_LANE_SET__6DB_0_4V = 0x10,4431DP_LANE_SET__6DB_0_6V = 0x11,4432DP_LANE_SET__9_5DB_0_4V = 0x18,4433};4434443544364437/****************************************************************************/4438// Structures used by ExternalEncoderControl V2.44439/****************************************************************************/44404441struct external_encoder_control_parameters_v2_44442{4443uint16_t pixelclock_10khz; // pixel clock in 10Khz, valid when ucAction=SETUP/ENABLE_OUTPUT4444uint8_t config; // indicate which encoder, and DP link rate when ucAction = SETUP/ENABLE_OUTPUT4445uint8_t action; //4446uint8_t encodermode; // encoder mode, only used when ucAction = SETUP/ENABLE_OUTPUT4447uint8_t lanenum; // lane number, only used when ucAction = SETUP/ENABLE_OUTPUT4448uint8_t bitpercolor; // output bit per color, only valid when ucAction = SETUP/ENABLE_OUTPUT and ucEncodeMode= DP4449uint8_t hpd_id;4450};445144524453// ucAction4454enum external_encoder_control_action_def4455{4456EXTERNAL_ENCODER_ACTION_V3_DISABLE_OUTPUT = 0x00,4457EXTERNAL_ENCODER_ACTION_V3_ENABLE_OUTPUT = 0x01,4458EXTERNAL_ENCODER_ACTION_V3_ENCODER_INIT = 0x07,4459EXTERNAL_ENCODER_ACTION_V3_ENCODER_SETUP = 0x0f,4460EXTERNAL_ENCODER_ACTION_V3_ENCODER_BLANKING_OFF = 0x10,4461EXTERNAL_ENCODER_ACTION_V3_ENCODER_BLANKING = 0x11,4462EXTERNAL_ENCODER_ACTION_V3_DACLOAD_DETECTION = 0x12,4463EXTERNAL_ENCODER_ACTION_V3_DDC_SETUP = 0x14,4464};44654466// ucConfig4467enum external_encoder_control_v2_4_config_def4468{4469EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_MASK = 0x03,4470EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_1_62GHZ = 0x00,4471EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_2_70GHZ = 0x01,4472EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_5_40GHZ = 0x02,4473EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_3_24GHZ = 0x03,4474EXTERNAL_ENCODER_CONFIG_V3_ENCODER_SEL_MAKS = 0x70,4475EXTERNAL_ENCODER_CONFIG_V3_ENCODER1 = 0x00,4476EXTERNAL_ENCODER_CONFIG_V3_ENCODER2 = 0x10,4477EXTERNAL_ENCODER_CONFIG_V3_ENCODER3 = 0x20,4478};44794480struct external_encoder_control_ps_allocation_v2_44481{4482struct external_encoder_control_parameters_v2_4 sExtEncoder;4483uint32_t reserved[2];4484};448544864487/*4488***************************************************************************4489AMD ACPI Table44904491***************************************************************************4492*/44934494struct amd_acpi_description_header{4495uint32_t signature;4496uint32_t tableLength; //Length4497uint8_t revision;4498uint8_t checksum;4499uint8_t oemId[6];4500uint8_t oemTableId[8]; //UINT64 OemTableId;4501uint32_t oemRevision;4502uint32_t creatorId;4503uint32_t creatorRevision;4504};45054506struct uefi_acpi_vfct{4507struct amd_acpi_description_header sheader;4508uint8_t tableUUID[16]; //0x244509uint32_t vbiosimageoffset; //0x34. Offset to the first GOP_VBIOS_CONTENT block from the beginning of the stucture.4510uint32_t lib1Imageoffset; //0x38. Offset to the first GOP_LIB1_CONTENT block from the beginning of the stucture.4511uint32_t reserved[4]; //0x3C4512};45134514struct vfct_image_header{4515uint32_t pcibus; //0x4C4516uint32_t pcidevice; //0x504517uint32_t pcifunction; //0x544518uint16_t vendorid; //0x584519uint16_t deviceid; //0x5A4520uint16_t ssvid; //0x5C4521uint16_t ssid; //0x5E4522uint32_t revision; //0x604523uint32_t imagelength; //0x644524};452545264527struct gop_vbios_content {4528struct vfct_image_header vbiosheader;4529uint8_t vbioscontent[1];4530};45314532struct gop_lib1_content {4533struct vfct_image_header lib1header;4534uint8_t lib1content[1];4535};4536453745384539/*4540***************************************************************************4541Scratch Register definitions4542Each number below indicates which scratch regiser request, Active and4543Connect all share the same definitions as display_device_tag defines4544***************************************************************************4545*/45464547enum scratch_register_def{4548ATOM_DEVICE_CONNECT_INFO_DEF = 0,4549ATOM_BL_BRI_LEVEL_INFO_DEF = 2,4550ATOM_ACTIVE_INFO_DEF = 3,4551ATOM_LCD_INFO_DEF = 4,4552ATOM_DEVICE_REQ_INFO_DEF = 5,4553ATOM_ACC_CHANGE_INFO_DEF = 6,4554ATOM_PRE_OS_MODE_INFO_DEF = 7,4555ATOM_PRE_OS_ASSERTION_DEF = 8, //For GOP to record a 32bit assertion code, this is enabled by default in prodution GOP drivers.4556ATOM_INTERNAL_TIMER_INFO_DEF = 10,4557};45584559enum scratch_device_connect_info_bit_def{4560ATOM_DISPLAY_LCD1_CONNECT =0x0002,4561ATOM_DISPLAY_DFP1_CONNECT =0x0008,4562ATOM_DISPLAY_DFP2_CONNECT =0x0080,4563ATOM_DISPLAY_DFP3_CONNECT =0x0200,4564ATOM_DISPLAY_DFP4_CONNECT =0x0400,4565ATOM_DISPLAY_DFP5_CONNECT =0x0800,4566ATOM_DISPLAY_DFP6_CONNECT =0x0040,4567ATOM_DISPLAY_DFPx_CONNECT =0x0ec8,4568ATOM_CONNECT_INFO_DEVICE_MASK =0x0fff,4569};45704571enum scratch_bl_bri_level_info_bit_def{4572ATOM_CURRENT_BL_LEVEL_SHIFT =0x8,4573#ifndef _H2INC4574ATOM_CURRENT_BL_LEVEL_MASK =0x0000ff00,4575ATOM_DEVICE_DPMS_STATE =0x00010000,4576#endif4577};45784579enum scratch_active_info_bits_def{4580ATOM_DISPLAY_LCD1_ACTIVE =0x0002,4581ATOM_DISPLAY_DFP1_ACTIVE =0x0008,4582ATOM_DISPLAY_DFP2_ACTIVE =0x0080,4583ATOM_DISPLAY_DFP3_ACTIVE =0x0200,4584ATOM_DISPLAY_DFP4_ACTIVE =0x0400,4585ATOM_DISPLAY_DFP5_ACTIVE =0x0800,4586ATOM_DISPLAY_DFP6_ACTIVE =0x0040,4587ATOM_ACTIVE_INFO_DEVICE_MASK =0x0fff,4588};45894590enum scratch_device_req_info_bits_def{4591ATOM_DISPLAY_LCD1_REQ =0x0002,4592ATOM_DISPLAY_DFP1_REQ =0x0008,4593ATOM_DISPLAY_DFP2_REQ =0x0080,4594ATOM_DISPLAY_DFP3_REQ =0x0200,4595ATOM_DISPLAY_DFP4_REQ =0x0400,4596ATOM_DISPLAY_DFP5_REQ =0x0800,4597ATOM_DISPLAY_DFP6_REQ =0x0040,4598ATOM_REQ_INFO_DEVICE_MASK =0x0fff,4599};46004601enum scratch_acc_change_info_bitshift_def{4602ATOM_ACC_CHANGE_ACC_MODE_SHIFT =4,4603ATOM_ACC_CHANGE_LID_STATUS_SHIFT =6,4604};46054606enum scratch_acc_change_info_bits_def{4607ATOM_ACC_CHANGE_ACC_MODE =0x00000010,4608ATOM_ACC_CHANGE_LID_STATUS =0x00000040,4609};46104611enum scratch_pre_os_mode_info_bits_def{4612ATOM_PRE_OS_MODE_MASK =0x00000003,4613ATOM_PRE_OS_MODE_VGA =0x00000000,4614ATOM_PRE_OS_MODE_VESA =0x00000001,4615ATOM_PRE_OS_MODE_GOP =0x00000002,4616ATOM_PRE_OS_MODE_PIXEL_DEPTH =0x0000000C,4617ATOM_PRE_OS_MODE_PIXEL_FORMAT_MASK=0x000000F0,4618ATOM_PRE_OS_MODE_8BIT_PAL_EN =0x00000100,4619ATOM_ASIC_INIT_COMPLETE =0x00000200,4620#ifndef _H2INC4621ATOM_PRE_OS_MODE_NUMBER_MASK =0xFFFF0000,4622#endif4623};4624462546264627/*4628***************************************************************************4629ATOM firmware ID header file4630!! Please keep it at end of the atomfirmware.h !!4631***************************************************************************4632*/4633#include "atomfirmwareid.h"4634#pragma pack()46354636#endif4637463846394640