11fadf42eSAlex Deucher /****************************************************************************\ 21fadf42eSAlex Deucher * 31fadf42eSAlex Deucher * File Name atomfirmware.h 41fadf42eSAlex Deucher * Project This is an interface header file between atombios and OS GPU drivers for SoC15 products 51fadf42eSAlex Deucher * 6322687d5Soushixiong * Description header file of general definitions for OS and pre-OS video drivers 71fadf42eSAlex Deucher * 81fadf42eSAlex Deucher * Copyright 2014 Advanced Micro Devices, Inc. 91fadf42eSAlex Deucher * 101fadf42eSAlex Deucher * Permission is hereby granted, free of charge, to any person obtaining a copy of this software 111fadf42eSAlex Deucher * and associated documentation files (the "Software"), to deal in the Software without restriction, 121fadf42eSAlex Deucher * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, 131fadf42eSAlex Deucher * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, 141fadf42eSAlex Deucher * subject to the following conditions: 151fadf42eSAlex Deucher * 161fadf42eSAlex Deucher * The above copyright notice and this permission notice shall be included in all copies or substantial 171fadf42eSAlex Deucher * portions of the Software. 181fadf42eSAlex Deucher * 191fadf42eSAlex Deucher * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 201fadf42eSAlex Deucher * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 211fadf42eSAlex Deucher * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 221fadf42eSAlex Deucher * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 231fadf42eSAlex Deucher * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 241fadf42eSAlex Deucher * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 251fadf42eSAlex Deucher * OTHER DEALINGS IN THE SOFTWARE. 261fadf42eSAlex Deucher * 271fadf42eSAlex Deucher \****************************************************************************/ 281fadf42eSAlex Deucher 291fadf42eSAlex Deucher /*IMPORTANT NOTES 301fadf42eSAlex Deucher * 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. 311fadf42eSAlex Deucher * 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. 321fadf42eSAlex Deucher * 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. 331fadf42eSAlex Deucher */ 341fadf42eSAlex Deucher 351fadf42eSAlex Deucher #ifndef _ATOMFIRMWARE_H_ 361fadf42eSAlex Deucher #define _ATOMFIRMWARE_H_ 371fadf42eSAlex Deucher 381fadf42eSAlex Deucher enum atom_bios_header_version_def{ 391fadf42eSAlex Deucher ATOM_MAJOR_VERSION =0x0003, 401fadf42eSAlex Deucher ATOM_MINOR_VERSION =0x0003, 411fadf42eSAlex Deucher }; 421fadf42eSAlex Deucher 431fadf42eSAlex Deucher #ifdef _H2INC 441fadf42eSAlex Deucher #ifndef uint32_t 451fadf42eSAlex Deucher typedef unsigned long uint32_t; 461fadf42eSAlex Deucher #endif 471fadf42eSAlex Deucher 481fadf42eSAlex Deucher #ifndef uint16_t 491fadf42eSAlex Deucher typedef unsigned short uint16_t; 501fadf42eSAlex Deucher #endif 511fadf42eSAlex Deucher 521fadf42eSAlex Deucher #ifndef uint8_t 531fadf42eSAlex Deucher typedef unsigned char uint8_t; 541fadf42eSAlex Deucher #endif 551fadf42eSAlex Deucher #endif 561fadf42eSAlex Deucher 571fadf42eSAlex Deucher enum atom_crtc_def{ 581fadf42eSAlex Deucher ATOM_CRTC1 =0, 591fadf42eSAlex Deucher ATOM_CRTC2 =1, 601fadf42eSAlex Deucher ATOM_CRTC3 =2, 611fadf42eSAlex Deucher ATOM_CRTC4 =3, 621fadf42eSAlex Deucher ATOM_CRTC5 =4, 631fadf42eSAlex Deucher ATOM_CRTC6 =5, 641fadf42eSAlex Deucher ATOM_CRTC_INVALID =0xff, 651fadf42eSAlex Deucher }; 661fadf42eSAlex Deucher 671fadf42eSAlex Deucher enum atom_ppll_def{ 681fadf42eSAlex Deucher ATOM_PPLL0 =2, 691fadf42eSAlex Deucher ATOM_GCK_DFS =8, 701fadf42eSAlex Deucher ATOM_FCH_CLK =9, 711fadf42eSAlex Deucher ATOM_DP_DTO =11, 721fadf42eSAlex Deucher ATOM_COMBOPHY_PLL0 =20, 731fadf42eSAlex Deucher ATOM_COMBOPHY_PLL1 =21, 741fadf42eSAlex Deucher ATOM_COMBOPHY_PLL2 =22, 751fadf42eSAlex Deucher ATOM_COMBOPHY_PLL3 =23, 761fadf42eSAlex Deucher ATOM_COMBOPHY_PLL4 =24, 771fadf42eSAlex Deucher ATOM_COMBOPHY_PLL5 =25, 781fadf42eSAlex Deucher ATOM_PPLL_INVALID =0xff, 791fadf42eSAlex Deucher }; 801fadf42eSAlex Deucher 811fadf42eSAlex Deucher // define ASIC internal encoder id ( bit vector ), used for CRTC_SourceSel 821fadf42eSAlex Deucher enum atom_dig_def{ 831fadf42eSAlex Deucher ASIC_INT_DIG1_ENCODER_ID =0x03, 841fadf42eSAlex Deucher ASIC_INT_DIG2_ENCODER_ID =0x09, 851fadf42eSAlex Deucher ASIC_INT_DIG3_ENCODER_ID =0x0a, 861fadf42eSAlex Deucher ASIC_INT_DIG4_ENCODER_ID =0x0b, 871fadf42eSAlex Deucher ASIC_INT_DIG5_ENCODER_ID =0x0c, 881fadf42eSAlex Deucher ASIC_INT_DIG6_ENCODER_ID =0x0d, 891fadf42eSAlex Deucher ASIC_INT_DIG7_ENCODER_ID =0x0e, 901fadf42eSAlex Deucher }; 911fadf42eSAlex Deucher 921fadf42eSAlex Deucher //ucEncoderMode 931fadf42eSAlex Deucher enum atom_encode_mode_def 941fadf42eSAlex Deucher { 951fadf42eSAlex Deucher ATOM_ENCODER_MODE_DP =0, 961fadf42eSAlex Deucher ATOM_ENCODER_MODE_DP_SST =0, 971fadf42eSAlex Deucher ATOM_ENCODER_MODE_LVDS =1, 981fadf42eSAlex Deucher ATOM_ENCODER_MODE_DVI =2, 991fadf42eSAlex Deucher ATOM_ENCODER_MODE_HDMI =3, 1001fadf42eSAlex Deucher ATOM_ENCODER_MODE_DP_AUDIO =5, 1011fadf42eSAlex Deucher ATOM_ENCODER_MODE_DP_MST =5, 1021fadf42eSAlex Deucher ATOM_ENCODER_MODE_CRT =15, 1031fadf42eSAlex Deucher ATOM_ENCODER_MODE_DVO =16, 1041fadf42eSAlex Deucher }; 1051fadf42eSAlex Deucher 1061fadf42eSAlex Deucher enum atom_encoder_refclk_src_def{ 1071fadf42eSAlex Deucher ENCODER_REFCLK_SRC_P1PLL =0, 1081fadf42eSAlex Deucher ENCODER_REFCLK_SRC_P2PLL =1, 1091fadf42eSAlex Deucher ENCODER_REFCLK_SRC_P3PLL =2, 1101fadf42eSAlex Deucher ENCODER_REFCLK_SRC_EXTCLK =3, 1111fadf42eSAlex Deucher ENCODER_REFCLK_SRC_INVALID =0xff, 1121fadf42eSAlex Deucher }; 1131fadf42eSAlex Deucher 1141fadf42eSAlex Deucher enum atom_scaler_def{ 1151fadf42eSAlex Deucher ATOM_SCALER_DISABLE =0, /*scaler bypass mode, auto-center & no replication*/ 1161fadf42eSAlex Deucher ATOM_SCALER_CENTER =1, //For Fudo, it's bypass and auto-center & auto replication 1171fadf42eSAlex Deucher ATOM_SCALER_EXPANSION =2, /*scaler expansion by 2 tap alpha blending mode*/ 1181fadf42eSAlex Deucher }; 1191fadf42eSAlex Deucher 1201fadf42eSAlex Deucher enum atom_operation_def{ 1211fadf42eSAlex Deucher ATOM_DISABLE = 0, 1221fadf42eSAlex Deucher ATOM_ENABLE = 1, 1231fadf42eSAlex Deucher ATOM_INIT = 7, 1241fadf42eSAlex Deucher ATOM_GET_STATUS = 8, 1251fadf42eSAlex Deucher }; 1261fadf42eSAlex Deucher 1271fadf42eSAlex Deucher enum atom_embedded_display_op_def{ 1281fadf42eSAlex Deucher ATOM_LCD_BL_OFF = 2, 1291fadf42eSAlex Deucher ATOM_LCD_BL_OM = 3, 1301fadf42eSAlex Deucher ATOM_LCD_BL_BRIGHTNESS_CONTROL = 4, 1311fadf42eSAlex Deucher ATOM_LCD_SELFTEST_START = 5, 1321fadf42eSAlex Deucher ATOM_LCD_SELFTEST_STOP = 6, 1331fadf42eSAlex Deucher }; 1341fadf42eSAlex Deucher 1351fadf42eSAlex Deucher enum atom_spread_spectrum_mode{ 1361fadf42eSAlex Deucher ATOM_SS_CENTER_OR_DOWN_MODE_MASK = 0x01, 1371fadf42eSAlex Deucher ATOM_SS_DOWN_SPREAD_MODE = 0x00, 1381fadf42eSAlex Deucher ATOM_SS_CENTRE_SPREAD_MODE = 0x01, 1391fadf42eSAlex Deucher ATOM_INT_OR_EXT_SS_MASK = 0x02, 1401fadf42eSAlex Deucher ATOM_INTERNAL_SS_MASK = 0x00, 1411fadf42eSAlex Deucher ATOM_EXTERNAL_SS_MASK = 0x02, 1421fadf42eSAlex Deucher }; 1431fadf42eSAlex Deucher 1441fadf42eSAlex Deucher /* define panel bit per color */ 1451fadf42eSAlex Deucher enum atom_panel_bit_per_color{ 1461fadf42eSAlex Deucher PANEL_BPC_UNDEFINE =0x00, 1471fadf42eSAlex Deucher PANEL_6BIT_PER_COLOR =0x01, 1481fadf42eSAlex Deucher PANEL_8BIT_PER_COLOR =0x02, 1491fadf42eSAlex Deucher PANEL_10BIT_PER_COLOR =0x03, 1501fadf42eSAlex Deucher PANEL_12BIT_PER_COLOR =0x04, 1511fadf42eSAlex Deucher PANEL_16BIT_PER_COLOR =0x05, 1521fadf42eSAlex Deucher }; 1531fadf42eSAlex Deucher 1541fadf42eSAlex Deucher //ucVoltageType 1551fadf42eSAlex Deucher enum atom_voltage_type 1561fadf42eSAlex Deucher { 1571fadf42eSAlex Deucher VOLTAGE_TYPE_VDDC = 1, 1581fadf42eSAlex Deucher VOLTAGE_TYPE_MVDDC = 2, 1591fadf42eSAlex Deucher VOLTAGE_TYPE_MVDDQ = 3, 1601fadf42eSAlex Deucher VOLTAGE_TYPE_VDDCI = 4, 1611fadf42eSAlex Deucher VOLTAGE_TYPE_VDDGFX = 5, 1621fadf42eSAlex Deucher VOLTAGE_TYPE_PCC = 6, 1631fadf42eSAlex Deucher VOLTAGE_TYPE_MVPP = 7, 1641fadf42eSAlex Deucher VOLTAGE_TYPE_LEDDPM = 8, 1651fadf42eSAlex Deucher VOLTAGE_TYPE_PCC_MVDD = 9, 1661fadf42eSAlex Deucher VOLTAGE_TYPE_PCIE_VDDC = 10, 1671fadf42eSAlex Deucher VOLTAGE_TYPE_PCIE_VDDR = 11, 1681fadf42eSAlex Deucher VOLTAGE_TYPE_GENERIC_I2C_1 = 0x11, 1691fadf42eSAlex Deucher VOLTAGE_TYPE_GENERIC_I2C_2 = 0x12, 1701fadf42eSAlex Deucher VOLTAGE_TYPE_GENERIC_I2C_3 = 0x13, 1711fadf42eSAlex Deucher VOLTAGE_TYPE_GENERIC_I2C_4 = 0x14, 1721fadf42eSAlex Deucher VOLTAGE_TYPE_GENERIC_I2C_5 = 0x15, 1731fadf42eSAlex Deucher VOLTAGE_TYPE_GENERIC_I2C_6 = 0x16, 1741fadf42eSAlex Deucher VOLTAGE_TYPE_GENERIC_I2C_7 = 0x17, 1751fadf42eSAlex Deucher VOLTAGE_TYPE_GENERIC_I2C_8 = 0x18, 1761fadf42eSAlex Deucher VOLTAGE_TYPE_GENERIC_I2C_9 = 0x19, 1771fadf42eSAlex Deucher VOLTAGE_TYPE_GENERIC_I2C_10 = 0x1A, 1781fadf42eSAlex Deucher }; 1791fadf42eSAlex Deucher 1801fadf42eSAlex Deucher enum atom_dgpu_vram_type { 1811fadf42eSAlex Deucher ATOM_DGPU_VRAM_TYPE_GDDR5 = 0x50, 182801281feSHawking Zhang ATOM_DGPU_VRAM_TYPE_HBM2 = 0x60, 1838081f8faSFeifei Xu ATOM_DGPU_VRAM_TYPE_HBM2E = 0x61, 18410e4b227SHawking Zhang ATOM_DGPU_VRAM_TYPE_GDDR6 = 0x70, 185cd8d77f3SHawking Zhang ATOM_DGPU_VRAM_TYPE_HBM3 = 0x80, 1861fadf42eSAlex Deucher }; 1871fadf42eSAlex Deucher 1881fadf42eSAlex Deucher enum atom_dp_vs_preemph_def{ 1891fadf42eSAlex Deucher DP_VS_LEVEL0_PREEMPH_LEVEL0 = 0x00, 1901fadf42eSAlex Deucher DP_VS_LEVEL1_PREEMPH_LEVEL0 = 0x01, 1911fadf42eSAlex Deucher DP_VS_LEVEL2_PREEMPH_LEVEL0 = 0x02, 1921fadf42eSAlex Deucher DP_VS_LEVEL3_PREEMPH_LEVEL0 = 0x03, 1931fadf42eSAlex Deucher DP_VS_LEVEL0_PREEMPH_LEVEL1 = 0x08, 1941fadf42eSAlex Deucher DP_VS_LEVEL1_PREEMPH_LEVEL1 = 0x09, 1951fadf42eSAlex Deucher DP_VS_LEVEL2_PREEMPH_LEVEL1 = 0x0a, 1961fadf42eSAlex Deucher DP_VS_LEVEL0_PREEMPH_LEVEL2 = 0x10, 1971fadf42eSAlex Deucher DP_VS_LEVEL1_PREEMPH_LEVEL2 = 0x11, 1981fadf42eSAlex Deucher DP_VS_LEVEL0_PREEMPH_LEVEL3 = 0x18, 1991fadf42eSAlex Deucher }; 2001fadf42eSAlex Deucher 20129b4c589SJiawei Gu #define BIOS_ATOM_PREFIX "ATOMBIOS" 20229b4c589SJiawei Gu #define BIOS_VERSION_PREFIX "ATOMBIOSBK-AMD" 20329b4c589SJiawei Gu #define BIOS_STRING_LENGTH 43 2041fadf42eSAlex Deucher 2051fadf42eSAlex Deucher /* 2061fadf42eSAlex Deucher enum atom_string_def{ 2071fadf42eSAlex Deucher asic_bus_type_pcie_string = "PCI_EXPRESS", 2081fadf42eSAlex Deucher atom_fire_gl_string = "FGL", 2091fadf42eSAlex Deucher atom_bios_string = "ATOM" 2101fadf42eSAlex Deucher }; 2111fadf42eSAlex Deucher */ 2121fadf42eSAlex Deucher 2131fadf42eSAlex Deucher #pragma pack(1) /* BIOS data must use byte aligment*/ 2141fadf42eSAlex Deucher 2151fadf42eSAlex Deucher enum atombios_image_offset{ 2161fadf42eSAlex Deucher OFFSET_TO_ATOM_ROM_HEADER_POINTER = 0x00000048, 2171fadf42eSAlex Deucher OFFSET_TO_ATOM_ROM_IMAGE_SIZE = 0x00000002, 2181fadf42eSAlex Deucher OFFSET_TO_ATOMBIOS_ASIC_BUS_MEM_TYPE = 0x94, 2191fadf42eSAlex Deucher MAXSIZE_OF_ATOMBIOS_ASIC_BUS_MEM_TYPE = 20, /*including the terminator 0x0!*/ 2201fadf42eSAlex Deucher OFFSET_TO_GET_ATOMBIOS_NUMBER_OF_STRINGS = 0x2f, 2211fadf42eSAlex Deucher OFFSET_TO_GET_ATOMBIOS_STRING_START = 0x6e, 22229b4c589SJiawei Gu OFFSET_TO_VBIOS_PART_NUMBER = 0x80, 22329b4c589SJiawei Gu OFFSET_TO_VBIOS_DATE = 0x50, 2241fadf42eSAlex Deucher }; 2251fadf42eSAlex Deucher 2261fadf42eSAlex Deucher /**************************************************************************** 2271fadf42eSAlex Deucher * Common header for all tables (Data table, Command function). 2281fadf42eSAlex Deucher * Every table pointed in _ATOM_MASTER_DATA_TABLE has this common header. 2291fadf42eSAlex Deucher * And the pointer actually points to this header. 2301fadf42eSAlex Deucher ****************************************************************************/ 2311fadf42eSAlex Deucher 2321fadf42eSAlex Deucher struct atom_common_table_header 2331fadf42eSAlex Deucher { 2341fadf42eSAlex Deucher uint16_t structuresize; 2351fadf42eSAlex Deucher uint8_t format_revision; //mainly used for a hw function, when the parser is not backward compatible 2361fadf42eSAlex Deucher uint8_t content_revision; //change it when a data table has a structure change, or a hw function has a input/output parameter change 2371fadf42eSAlex Deucher }; 2381fadf42eSAlex Deucher 2391fadf42eSAlex Deucher /**************************************************************************** 2401fadf42eSAlex Deucher * Structure stores the ROM header. 2411fadf42eSAlex Deucher ****************************************************************************/ 2421fadf42eSAlex Deucher struct atom_rom_header_v2_2 2431fadf42eSAlex Deucher { 2441fadf42eSAlex Deucher struct atom_common_table_header table_header; 2451fadf42eSAlex Deucher uint8_t atom_bios_string[4]; //enum atom_string_def atom_bios_string; //Signature to distinguish between Atombios and non-atombios, 2461fadf42eSAlex Deucher uint16_t bios_segment_address; 2471fadf42eSAlex Deucher uint16_t protectedmodeoffset; 2481fadf42eSAlex Deucher uint16_t configfilenameoffset; 2491fadf42eSAlex Deucher uint16_t crc_block_offset; 2501fadf42eSAlex Deucher uint16_t vbios_bootupmessageoffset; 2511fadf42eSAlex Deucher uint16_t int10_offset; 2521fadf42eSAlex Deucher uint16_t pcibusdevinitcode; 2531fadf42eSAlex Deucher uint16_t iobaseaddress; 2541fadf42eSAlex Deucher uint16_t subsystem_vendor_id; 2551fadf42eSAlex Deucher uint16_t subsystem_id; 2561fadf42eSAlex Deucher uint16_t pci_info_offset; 2571fadf42eSAlex Deucher uint16_t masterhwfunction_offset; //Offest for SW to get all command function offsets, Don't change the position 2581fadf42eSAlex Deucher uint16_t masterdatatable_offset; //Offest for SW to get all data table offsets, Don't change the position 2591fadf42eSAlex Deucher uint16_t reserved; 2601fadf42eSAlex Deucher uint32_t pspdirtableoffset; 2611fadf42eSAlex Deucher }; 2621fadf42eSAlex Deucher 2631fadf42eSAlex Deucher /*==============================hw function portion======================================================================*/ 2641fadf42eSAlex Deucher 2651fadf42eSAlex Deucher 2661fadf42eSAlex Deucher /**************************************************************************** 2671fadf42eSAlex Deucher * Structures used in Command.mtb, each function name is not given here since those function could change from time to time 2681fadf42eSAlex Deucher * The real functionality of each function is associated with the parameter structure version when defined 2691fadf42eSAlex Deucher * For all internal cmd function definitions, please reference to atomstruct.h 2701fadf42eSAlex Deucher ****************************************************************************/ 2711fadf42eSAlex Deucher struct atom_master_list_of_command_functions_v2_1{ 2721fadf42eSAlex Deucher uint16_t asic_init; //Function 2731fadf42eSAlex Deucher uint16_t cmd_function1; //used as an internal one 2741fadf42eSAlex Deucher uint16_t cmd_function2; //used as an internal one 2751fadf42eSAlex Deucher uint16_t cmd_function3; //used as an internal one 2761fadf42eSAlex Deucher uint16_t digxencodercontrol; //Function 2771fadf42eSAlex Deucher uint16_t cmd_function5; //used as an internal one 2781fadf42eSAlex Deucher uint16_t cmd_function6; //used as an internal one 2791fadf42eSAlex Deucher uint16_t cmd_function7; //used as an internal one 2801fadf42eSAlex Deucher uint16_t cmd_function8; //used as an internal one 2811fadf42eSAlex Deucher uint16_t cmd_function9; //used as an internal one 2821fadf42eSAlex Deucher uint16_t setengineclock; //Function 2831fadf42eSAlex Deucher uint16_t setmemoryclock; //Function 2841fadf42eSAlex Deucher uint16_t setpixelclock; //Function 2851fadf42eSAlex Deucher uint16_t enabledisppowergating; //Function 2861fadf42eSAlex Deucher uint16_t cmd_function14; //used as an internal one 2871fadf42eSAlex Deucher uint16_t cmd_function15; //used as an internal one 2881fadf42eSAlex Deucher uint16_t cmd_function16; //used as an internal one 2891fadf42eSAlex Deucher uint16_t cmd_function17; //used as an internal one 2901fadf42eSAlex Deucher uint16_t cmd_function18; //used as an internal one 2911fadf42eSAlex Deucher uint16_t cmd_function19; //used as an internal one 2921fadf42eSAlex Deucher uint16_t cmd_function20; //used as an internal one 2931fadf42eSAlex Deucher uint16_t cmd_function21; //used as an internal one 2941fadf42eSAlex Deucher uint16_t cmd_function22; //used as an internal one 2951fadf42eSAlex Deucher uint16_t cmd_function23; //used as an internal one 2961fadf42eSAlex Deucher uint16_t cmd_function24; //used as an internal one 2971fadf42eSAlex Deucher uint16_t cmd_function25; //used as an internal one 2981fadf42eSAlex Deucher uint16_t cmd_function26; //used as an internal one 2991fadf42eSAlex Deucher uint16_t cmd_function27; //used as an internal one 3001fadf42eSAlex Deucher uint16_t cmd_function28; //used as an internal one 3011fadf42eSAlex Deucher uint16_t cmd_function29; //used as an internal one 3021fadf42eSAlex Deucher uint16_t cmd_function30; //used as an internal one 3031fadf42eSAlex Deucher uint16_t cmd_function31; //used as an internal one 3041fadf42eSAlex Deucher uint16_t cmd_function32; //used as an internal one 3051fadf42eSAlex Deucher uint16_t cmd_function33; //used as an internal one 3061fadf42eSAlex Deucher uint16_t blankcrtc; //Function 3071fadf42eSAlex Deucher uint16_t enablecrtc; //Function 3081fadf42eSAlex Deucher uint16_t cmd_function36; //used as an internal one 3091fadf42eSAlex Deucher uint16_t cmd_function37; //used as an internal one 3101fadf42eSAlex Deucher uint16_t cmd_function38; //used as an internal one 3111fadf42eSAlex Deucher uint16_t cmd_function39; //used as an internal one 3121fadf42eSAlex Deucher uint16_t cmd_function40; //used as an internal one 3131fadf42eSAlex Deucher uint16_t getsmuclockinfo; //Function 3141fadf42eSAlex Deucher uint16_t selectcrtc_source; //Function 3151fadf42eSAlex Deucher uint16_t cmd_function43; //used as an internal one 3161fadf42eSAlex Deucher uint16_t cmd_function44; //used as an internal one 3171fadf42eSAlex Deucher uint16_t cmd_function45; //used as an internal one 3181fadf42eSAlex Deucher uint16_t setdceclock; //Function 3191fadf42eSAlex Deucher uint16_t getmemoryclock; //Function 3201fadf42eSAlex Deucher uint16_t getengineclock; //Function 3211fadf42eSAlex Deucher uint16_t setcrtc_usingdtdtiming; //Function 3221fadf42eSAlex Deucher uint16_t externalencodercontrol; //Function 3231fadf42eSAlex Deucher uint16_t cmd_function51; //used as an internal one 3241fadf42eSAlex Deucher uint16_t cmd_function52; //used as an internal one 3251fadf42eSAlex Deucher uint16_t cmd_function53; //used as an internal one 3261fadf42eSAlex Deucher uint16_t processi2cchanneltransaction;//Function 3271fadf42eSAlex Deucher uint16_t cmd_function55; //used as an internal one 3281fadf42eSAlex Deucher uint16_t cmd_function56; //used as an internal one 3291fadf42eSAlex Deucher uint16_t cmd_function57; //used as an internal one 3301fadf42eSAlex Deucher uint16_t cmd_function58; //used as an internal one 3311fadf42eSAlex Deucher uint16_t cmd_function59; //used as an internal one 3321fadf42eSAlex Deucher uint16_t computegpuclockparam; //Function 3331fadf42eSAlex Deucher uint16_t cmd_function61; //used as an internal one 3341fadf42eSAlex Deucher uint16_t cmd_function62; //used as an internal one 3351fadf42eSAlex Deucher uint16_t dynamicmemorysettings; //Function function 3361fadf42eSAlex Deucher uint16_t memorytraining; //Function function 3371fadf42eSAlex Deucher uint16_t cmd_function65; //used as an internal one 3381fadf42eSAlex Deucher uint16_t cmd_function66; //used as an internal one 3391fadf42eSAlex Deucher uint16_t setvoltage; //Function 3401fadf42eSAlex Deucher uint16_t cmd_function68; //used as an internal one 3411fadf42eSAlex Deucher uint16_t readefusevalue; //Function 3421fadf42eSAlex Deucher uint16_t cmd_function70; //used as an internal one 3431fadf42eSAlex Deucher uint16_t cmd_function71; //used as an internal one 3441fadf42eSAlex Deucher uint16_t cmd_function72; //used as an internal one 3451fadf42eSAlex Deucher uint16_t cmd_function73; //used as an internal one 3461fadf42eSAlex Deucher uint16_t cmd_function74; //used as an internal one 3471fadf42eSAlex Deucher uint16_t cmd_function75; //used as an internal one 3481fadf42eSAlex Deucher uint16_t dig1transmittercontrol; //Function 3491fadf42eSAlex Deucher uint16_t cmd_function77; //used as an internal one 3501fadf42eSAlex Deucher uint16_t processauxchanneltransaction;//Function 3511fadf42eSAlex Deucher uint16_t cmd_function79; //used as an internal one 3521fadf42eSAlex Deucher uint16_t getvoltageinfo; //Function 3531fadf42eSAlex Deucher }; 3541fadf42eSAlex Deucher 3551fadf42eSAlex Deucher struct atom_master_command_function_v2_1 3561fadf42eSAlex Deucher { 3571fadf42eSAlex Deucher struct atom_common_table_header table_header; 3581fadf42eSAlex Deucher struct atom_master_list_of_command_functions_v2_1 listofcmdfunctions; 3591fadf42eSAlex Deucher }; 3601fadf42eSAlex Deucher 3611fadf42eSAlex Deucher /**************************************************************************** 3621fadf42eSAlex Deucher * Structures used in every command function 3631fadf42eSAlex Deucher ****************************************************************************/ 3641fadf42eSAlex Deucher struct atom_function_attribute 3651fadf42eSAlex Deucher { 3661fadf42eSAlex Deucher uint16_t ws_in_bytes:8; //[7:0]=Size of workspace in Bytes (in multiple of a dword), 3671fadf42eSAlex Deucher uint16_t ps_in_bytes:7; //[14:8]=Size of parameter space in Bytes (multiple of a dword), 3681fadf42eSAlex Deucher uint16_t updated_by_util:1; //[15]=flag to indicate the function is updated by util 3691fadf42eSAlex Deucher }; 3701fadf42eSAlex Deucher 3711fadf42eSAlex Deucher 3721fadf42eSAlex Deucher /**************************************************************************** 3731fadf42eSAlex Deucher * Common header for all hw functions. 3741fadf42eSAlex Deucher * Every function pointed by _master_list_of_hw_function has this common header. 3751fadf42eSAlex Deucher * And the pointer actually points to this header. 3761fadf42eSAlex Deucher ****************************************************************************/ 3771fadf42eSAlex Deucher struct atom_rom_hw_function_header 3781fadf42eSAlex Deucher { 3791fadf42eSAlex Deucher struct atom_common_table_header func_header; 3801fadf42eSAlex Deucher struct atom_function_attribute func_attrib; 3811fadf42eSAlex Deucher }; 3821fadf42eSAlex Deucher 3831fadf42eSAlex Deucher 3841fadf42eSAlex Deucher /*==============================sw data table portion======================================================================*/ 3851fadf42eSAlex Deucher /**************************************************************************** 3861fadf42eSAlex Deucher * Structures used in data.mtb, each data table name is not given here since those data table could change from time to time 3871fadf42eSAlex Deucher * The real name of each table is given when its data structure version is defined 3881fadf42eSAlex Deucher ****************************************************************************/ 3891fadf42eSAlex Deucher struct atom_master_list_of_data_tables_v2_1{ 3901fadf42eSAlex Deucher uint16_t utilitypipeline; /* Offest for the utility to get parser info,Don't change this position!*/ 3911fadf42eSAlex Deucher uint16_t multimedia_info; 392f3f8864dSEvan Quan uint16_t smc_dpm_info; 3931fadf42eSAlex Deucher uint16_t sw_datatable3; 3941fadf42eSAlex Deucher uint16_t firmwareinfo; /* Shared by various SW components */ 3951fadf42eSAlex Deucher uint16_t sw_datatable5; 3961fadf42eSAlex Deucher uint16_t lcd_info; /* Shared by various SW components */ 3971fadf42eSAlex Deucher uint16_t sw_datatable7; 3981fadf42eSAlex Deucher uint16_t smu_info; 3991fadf42eSAlex Deucher uint16_t sw_datatable9; 4001fadf42eSAlex Deucher uint16_t sw_datatable10; 4011fadf42eSAlex Deucher uint16_t vram_usagebyfirmware; /* Shared by various SW components */ 4021fadf42eSAlex Deucher uint16_t gpio_pin_lut; /* Shared by various SW components */ 4031fadf42eSAlex Deucher uint16_t sw_datatable13; 4041fadf42eSAlex Deucher uint16_t gfx_info; 4051fadf42eSAlex Deucher uint16_t powerplayinfo; /* Shared by various SW components */ 4061fadf42eSAlex Deucher uint16_t sw_datatable16; 4071fadf42eSAlex Deucher uint16_t sw_datatable17; 4081fadf42eSAlex Deucher uint16_t sw_datatable18; 4091fadf42eSAlex Deucher uint16_t sw_datatable19; 4101fadf42eSAlex Deucher uint16_t sw_datatable20; 4111fadf42eSAlex Deucher uint16_t sw_datatable21; 4121fadf42eSAlex Deucher uint16_t displayobjectinfo; /* Shared by various SW components */ 4131fadf42eSAlex Deucher uint16_t indirectioaccess; /* used as an internal one */ 4141fadf42eSAlex Deucher uint16_t umc_info; /* Shared by various SW components */ 4151fadf42eSAlex Deucher uint16_t sw_datatable25; 4161fadf42eSAlex Deucher uint16_t sw_datatable26; 4171fadf42eSAlex Deucher uint16_t dce_info; /* Shared by various SW components */ 4181fadf42eSAlex Deucher uint16_t vram_info; /* Shared by various SW components */ 4191fadf42eSAlex Deucher uint16_t sw_datatable29; 4201fadf42eSAlex Deucher uint16_t integratedsysteminfo; /* Shared by various SW components */ 4211fadf42eSAlex Deucher uint16_t asic_profiling_info; /* Shared by various SW components */ 4221fadf42eSAlex Deucher uint16_t voltageobject_info; /* shared by various SW components */ 4231fadf42eSAlex Deucher uint16_t sw_datatable33; 4241fadf42eSAlex Deucher uint16_t sw_datatable34; 4251fadf42eSAlex Deucher }; 4261fadf42eSAlex Deucher 4271fadf42eSAlex Deucher 4281fadf42eSAlex Deucher struct atom_master_data_table_v2_1 4291fadf42eSAlex Deucher { 4301fadf42eSAlex Deucher struct atom_common_table_header table_header; 4311fadf42eSAlex Deucher struct atom_master_list_of_data_tables_v2_1 listOfdatatables; 4321fadf42eSAlex Deucher }; 4331fadf42eSAlex Deucher 4341fadf42eSAlex Deucher 4351fadf42eSAlex Deucher struct atom_dtd_format 4361fadf42eSAlex Deucher { 4371fadf42eSAlex Deucher uint16_t pixclk; 4381fadf42eSAlex Deucher uint16_t h_active; 4391fadf42eSAlex Deucher uint16_t h_blanking_time; 4401fadf42eSAlex Deucher uint16_t v_active; 4411fadf42eSAlex Deucher uint16_t v_blanking_time; 4421fadf42eSAlex Deucher uint16_t h_sync_offset; 4431fadf42eSAlex Deucher uint16_t h_sync_width; 4441fadf42eSAlex Deucher uint16_t v_sync_offset; 4451fadf42eSAlex Deucher uint16_t v_syncwidth; 4461fadf42eSAlex Deucher uint16_t reserved; 4471fadf42eSAlex Deucher uint16_t reserved0; 4481fadf42eSAlex Deucher uint8_t h_border; 4491fadf42eSAlex Deucher uint8_t v_border; 4501fadf42eSAlex Deucher uint16_t miscinfo; 4511fadf42eSAlex Deucher uint8_t atom_mode_id; 4521fadf42eSAlex Deucher uint8_t refreshrate; 4531fadf42eSAlex Deucher }; 4541fadf42eSAlex Deucher 4551fadf42eSAlex Deucher /* atom_dtd_format.modemiscinfo defintion */ 4561fadf42eSAlex Deucher enum atom_dtd_format_modemiscinfo{ 4571fadf42eSAlex Deucher ATOM_HSYNC_POLARITY = 0x0002, 4581fadf42eSAlex Deucher ATOM_VSYNC_POLARITY = 0x0004, 4591fadf42eSAlex Deucher ATOM_H_REPLICATIONBY2 = 0x0010, 4601fadf42eSAlex Deucher ATOM_V_REPLICATIONBY2 = 0x0020, 4611fadf42eSAlex Deucher ATOM_INTERLACE = 0x0080, 4621fadf42eSAlex Deucher ATOM_COMPOSITESYNC = 0x0040, 4631fadf42eSAlex Deucher }; 4641fadf42eSAlex Deucher 4651fadf42eSAlex Deucher 4661fadf42eSAlex Deucher /* utilitypipeline 4671fadf42eSAlex Deucher * 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. 4681fadf42eSAlex Deucher * the location of it can't change 4691fadf42eSAlex Deucher */ 4701fadf42eSAlex Deucher 4711fadf42eSAlex Deucher 4721fadf42eSAlex Deucher /* 4731fadf42eSAlex Deucher *************************************************************************** 4741fadf42eSAlex Deucher Data Table firmwareinfo structure 4751fadf42eSAlex Deucher *************************************************************************** 4761fadf42eSAlex Deucher */ 4771fadf42eSAlex Deucher 4781fadf42eSAlex Deucher struct atom_firmware_info_v3_1 4791fadf42eSAlex Deucher { 4801fadf42eSAlex Deucher struct atom_common_table_header table_header; 4811fadf42eSAlex Deucher uint32_t firmware_revision; 4821fadf42eSAlex Deucher uint32_t bootup_sclk_in10khz; 4831fadf42eSAlex Deucher uint32_t bootup_mclk_in10khz; 4841fadf42eSAlex Deucher uint32_t firmware_capability; // enum atombios_firmware_capability 4851fadf42eSAlex Deucher uint32_t main_call_parser_entry; /* direct address of main parser call in VBIOS binary. */ 4861fadf42eSAlex Deucher uint32_t bios_scratch_reg_startaddr; // 1st bios scratch register dword address 4871fadf42eSAlex Deucher uint16_t bootup_vddc_mv; 4881fadf42eSAlex Deucher uint16_t bootup_vddci_mv; 4891fadf42eSAlex Deucher uint16_t bootup_mvddc_mv; 4901fadf42eSAlex Deucher uint16_t bootup_vddgfx_mv; 4911fadf42eSAlex Deucher uint8_t mem_module_id; 4921fadf42eSAlex Deucher uint8_t coolingsolution_id; /*0: Air cooling; 1: Liquid cooling ... */ 4931fadf42eSAlex Deucher uint8_t reserved1[2]; 4941fadf42eSAlex Deucher uint32_t mc_baseaddr_high; 4951fadf42eSAlex Deucher uint32_t mc_baseaddr_low; 4961fadf42eSAlex Deucher uint32_t reserved2[6]; 4971fadf42eSAlex Deucher }; 4981fadf42eSAlex Deucher 4991fadf42eSAlex Deucher /* Total 32bit cap indication */ 5001fadf42eSAlex Deucher enum atombios_firmware_capability 5011fadf42eSAlex Deucher { 5021fadf42eSAlex Deucher ATOM_FIRMWARE_CAP_FIRMWARE_POSTED = 0x00000001, 5031fadf42eSAlex Deucher ATOM_FIRMWARE_CAP_GPU_VIRTUALIZATION = 0x00000002, 5041fadf42eSAlex Deucher ATOM_FIRMWARE_CAP_WMI_SUPPORT = 0x00000040, 505ed606ca3SHawking Zhang ATOM_FIRMWARE_CAP_HWEMU_ENABLE = 0x00000080, 506ed606ca3SHawking Zhang ATOM_FIRMWARE_CAP_HWEMU_UMC_CFG = 0x00000100, 507ed606ca3SHawking Zhang ATOM_FIRMWARE_CAP_SRAM_ECC = 0x00000200, 50866e11129STianci.Yin ATOM_FIRMWARE_CAP_ENABLE_2STAGE_BIST_TRAINING = 0x00000400, 509ad26bd11SEvan Quan ATOM_FIRMWARE_CAP_ENABLE_2ND_USB20PORT = 0x0008000, 510cffd6f9dSHawking Zhang ATOM_FIRMWARE_CAP_DYNAMIC_BOOT_CFG_ENABLE = 0x0020000, 5111fadf42eSAlex Deucher }; 5121fadf42eSAlex Deucher 5131fadf42eSAlex Deucher enum atom_cooling_solution_id{ 5141fadf42eSAlex Deucher AIR_COOLING = 0x00, 5151fadf42eSAlex Deucher LIQUID_COOLING = 0x01 5161fadf42eSAlex Deucher }; 5171fadf42eSAlex Deucher 5183aabfcd7SJerry (Fangzhi) Zuo struct atom_firmware_info_v3_2 { 5193aabfcd7SJerry (Fangzhi) Zuo struct atom_common_table_header table_header; 5203aabfcd7SJerry (Fangzhi) Zuo uint32_t firmware_revision; 5213aabfcd7SJerry (Fangzhi) Zuo uint32_t bootup_sclk_in10khz; 5223aabfcd7SJerry (Fangzhi) Zuo uint32_t bootup_mclk_in10khz; 5233aabfcd7SJerry (Fangzhi) Zuo uint32_t firmware_capability; // enum atombios_firmware_capability 5243aabfcd7SJerry (Fangzhi) Zuo uint32_t main_call_parser_entry; /* direct address of main parser call in VBIOS binary. */ 5253aabfcd7SJerry (Fangzhi) Zuo uint32_t bios_scratch_reg_startaddr; // 1st bios scratch register dword address 5263aabfcd7SJerry (Fangzhi) Zuo uint16_t bootup_vddc_mv; 5273aabfcd7SJerry (Fangzhi) Zuo uint16_t bootup_vddci_mv; 5283aabfcd7SJerry (Fangzhi) Zuo uint16_t bootup_mvddc_mv; 5293aabfcd7SJerry (Fangzhi) Zuo uint16_t bootup_vddgfx_mv; 5303aabfcd7SJerry (Fangzhi) Zuo uint8_t mem_module_id; 5313aabfcd7SJerry (Fangzhi) Zuo uint8_t coolingsolution_id; /*0: Air cooling; 1: Liquid cooling ... */ 5323aabfcd7SJerry (Fangzhi) Zuo uint8_t reserved1[2]; 5333aabfcd7SJerry (Fangzhi) Zuo uint32_t mc_baseaddr_high; 5343aabfcd7SJerry (Fangzhi) Zuo uint32_t mc_baseaddr_low; 5353aabfcd7SJerry (Fangzhi) Zuo uint8_t board_i2c_feature_id; // enum of atom_board_i2c_feature_id_def 5363aabfcd7SJerry (Fangzhi) Zuo uint8_t board_i2c_feature_gpio_id; // i2c id find in gpio_lut data table gpio_id 5373aabfcd7SJerry (Fangzhi) Zuo uint8_t board_i2c_feature_slave_addr; 5383aabfcd7SJerry (Fangzhi) Zuo uint8_t reserved3; 5393aabfcd7SJerry (Fangzhi) Zuo uint16_t bootup_mvddq_mv; 5403aabfcd7SJerry (Fangzhi) Zuo uint16_t bootup_mvpp_mv; 5413aabfcd7SJerry (Fangzhi) Zuo uint32_t zfbstartaddrin16mb; 5423aabfcd7SJerry (Fangzhi) Zuo uint32_t reserved2[3]; 5433aabfcd7SJerry (Fangzhi) Zuo }; 5441fadf42eSAlex Deucher 545eaf02a4dSHuang Rui struct atom_firmware_info_v3_3 546eaf02a4dSHuang Rui { 547eaf02a4dSHuang Rui struct atom_common_table_header table_header; 548eaf02a4dSHuang Rui uint32_t firmware_revision; 549eaf02a4dSHuang Rui uint32_t bootup_sclk_in10khz; 550eaf02a4dSHuang Rui uint32_t bootup_mclk_in10khz; 551eaf02a4dSHuang Rui uint32_t firmware_capability; // enum atombios_firmware_capability 552eaf02a4dSHuang Rui uint32_t main_call_parser_entry; /* direct address of main parser call in VBIOS binary. */ 553eaf02a4dSHuang Rui uint32_t bios_scratch_reg_startaddr; // 1st bios scratch register dword address 554eaf02a4dSHuang Rui uint16_t bootup_vddc_mv; 555eaf02a4dSHuang Rui uint16_t bootup_vddci_mv; 556eaf02a4dSHuang Rui uint16_t bootup_mvddc_mv; 557eaf02a4dSHuang Rui uint16_t bootup_vddgfx_mv; 558eaf02a4dSHuang Rui uint8_t mem_module_id; 559eaf02a4dSHuang Rui uint8_t coolingsolution_id; /*0: Air cooling; 1: Liquid cooling ... */ 560eaf02a4dSHuang Rui uint8_t reserved1[2]; 561eaf02a4dSHuang Rui uint32_t mc_baseaddr_high; 562eaf02a4dSHuang Rui uint32_t mc_baseaddr_low; 563eaf02a4dSHuang Rui uint8_t board_i2c_feature_id; // enum of atom_board_i2c_feature_id_def 564eaf02a4dSHuang Rui uint8_t board_i2c_feature_gpio_id; // i2c id find in gpio_lut data table gpio_id 565eaf02a4dSHuang Rui uint8_t board_i2c_feature_slave_addr; 566eaf02a4dSHuang Rui uint8_t reserved3; 567eaf02a4dSHuang Rui uint16_t bootup_mvddq_mv; 568eaf02a4dSHuang Rui uint16_t bootup_mvpp_mv; 569eaf02a4dSHuang Rui uint32_t zfbstartaddrin16mb; 570eaf02a4dSHuang Rui uint32_t pplib_pptable_id; // if pplib_pptable_id!=0, pplib get powerplay table inside driver instead of from VBIOS 571eaf02a4dSHuang Rui uint32_t reserved2[2]; 572eaf02a4dSHuang Rui }; 573eaf02a4dSHuang Rui 574718715e6SHawking Zhang struct atom_firmware_info_v3_4 { 575718715e6SHawking Zhang struct atom_common_table_header table_header; 576718715e6SHawking Zhang uint32_t firmware_revision; 577718715e6SHawking Zhang uint32_t bootup_sclk_in10khz; 578718715e6SHawking Zhang uint32_t bootup_mclk_in10khz; 579718715e6SHawking Zhang uint32_t firmware_capability; // enum atombios_firmware_capability 580718715e6SHawking Zhang uint32_t main_call_parser_entry; /* direct address of main parser call in VBIOS binary. */ 581718715e6SHawking Zhang uint32_t bios_scratch_reg_startaddr; // 1st bios scratch register dword address 582718715e6SHawking Zhang uint16_t bootup_vddc_mv; 583718715e6SHawking Zhang uint16_t bootup_vddci_mv; 584718715e6SHawking Zhang uint16_t bootup_mvddc_mv; 585718715e6SHawking Zhang uint16_t bootup_vddgfx_mv; 586718715e6SHawking Zhang uint8_t mem_module_id; 587718715e6SHawking Zhang uint8_t coolingsolution_id; /*0: Air cooling; 1: Liquid cooling ... */ 588718715e6SHawking Zhang uint8_t reserved1[2]; 589718715e6SHawking Zhang uint32_t mc_baseaddr_high; 590718715e6SHawking Zhang uint32_t mc_baseaddr_low; 591718715e6SHawking Zhang uint8_t board_i2c_feature_id; // enum of atom_board_i2c_feature_id_def 592718715e6SHawking Zhang uint8_t board_i2c_feature_gpio_id; // i2c id find in gpio_lut data table gpio_id 593718715e6SHawking Zhang uint8_t board_i2c_feature_slave_addr; 59414fb496aSJohn Clements uint8_t ras_rom_i2c_slave_addr; 595718715e6SHawking Zhang uint16_t bootup_mvddq_mv; 596718715e6SHawking Zhang uint16_t bootup_mvpp_mv; 597718715e6SHawking Zhang uint32_t zfbstartaddrin16mb; 598718715e6SHawking Zhang uint32_t pplib_pptable_id; // if pplib_pptable_id!=0, pplib get powerplay table inside driver instead of from VBIOS 599718715e6SHawking Zhang uint32_t mvdd_ratio; // mvdd_raio = (real mvdd in power rail)*1000/(mvdd_output_from_svi2) 600718715e6SHawking Zhang uint16_t hw_bootup_vddgfx_mv; // hw default vddgfx voltage level decide by board strap 601718715e6SHawking Zhang uint16_t hw_bootup_vddc_mv; // hw default vddc voltage level decide by board strap 602718715e6SHawking Zhang uint16_t hw_bootup_mvddc_mv; // hw default mvddc voltage level decide by board strap 603718715e6SHawking Zhang uint16_t hw_bootup_vddci_mv; // hw default vddci voltage level decide by board strap 604718715e6SHawking Zhang uint32_t maco_pwrlimit_mw; // bomaco mode power limit in unit of m-watt 605718715e6SHawking Zhang uint32_t usb_pwrlimit_mw; // power limit when USB is enable in unit of m-watt 606718715e6SHawking Zhang uint32_t fw_reserved_size_in_kb; // VBIOS reserved extra fw size in unit of kb. 607e5a83213SFeifei Xu uint32_t pspbl_init_done_reg_addr; 608e5a83213SFeifei Xu uint32_t pspbl_init_done_value; 609e5a83213SFeifei Xu uint32_t pspbl_init_done_check_timeout; // time out in unit of us when polling pspbl init done 610e5a83213SFeifei Xu uint32_t reserved[2]; 611718715e6SHawking Zhang }; 612718715e6SHawking Zhang 61347136be6SAurabindo Pillai struct atom_firmware_info_v3_5 { 61447136be6SAurabindo Pillai struct atom_common_table_header table_header; 61547136be6SAurabindo Pillai uint32_t firmware_revision; 61647136be6SAurabindo Pillai uint32_t bootup_clk_reserved[2]; 61747136be6SAurabindo Pillai uint32_t firmware_capability; // enum atombios_firmware_capability 61847136be6SAurabindo Pillai uint32_t fw_protect_region_size_in_kb; /* FW allocate a write protect region at top of FB. */ 61947136be6SAurabindo Pillai uint32_t bios_scratch_reg_startaddr; // 1st bios scratch register dword address 62047136be6SAurabindo Pillai uint32_t bootup_voltage_reserved[2]; 62147136be6SAurabindo Pillai uint8_t mem_module_id; 62247136be6SAurabindo Pillai uint8_t coolingsolution_id; /*0: Air cooling; 1: Liquid cooling ... */ 62347136be6SAurabindo Pillai uint8_t hw_blt_mode; //0:HW_BLT_DMA_PIO_MODE; 1:HW_BLT_LITE_SDMA_MODE; 2:HW_BLT_PCI_IO_MODE 62447136be6SAurabindo Pillai uint8_t reserved1; 62547136be6SAurabindo Pillai uint32_t mc_baseaddr_high; 62647136be6SAurabindo Pillai uint32_t mc_baseaddr_low; 62747136be6SAurabindo Pillai uint8_t board_i2c_feature_id; // enum of atom_board_i2c_feature_id_def 62847136be6SAurabindo Pillai uint8_t board_i2c_feature_gpio_id; // i2c id find in gpio_lut data table gpio_id 62947136be6SAurabindo Pillai uint8_t board_i2c_feature_slave_addr; 63047136be6SAurabindo Pillai uint8_t ras_rom_i2c_slave_addr; 63147136be6SAurabindo Pillai uint32_t bootup_voltage_reserved1; 63247136be6SAurabindo Pillai uint32_t zfb_reserved; 63347136be6SAurabindo Pillai // if pplib_pptable_id!=0, pplib get powerplay table inside driver instead of from VBIOS 63447136be6SAurabindo Pillai uint32_t pplib_pptable_id; 63547136be6SAurabindo Pillai uint32_t hw_voltage_reserved[3]; 63647136be6SAurabindo Pillai uint32_t maco_pwrlimit_mw; // bomaco mode power limit in unit of m-watt 63747136be6SAurabindo Pillai uint32_t usb_pwrlimit_mw; // power limit when USB is enable in unit of m-watt 63847136be6SAurabindo Pillai uint32_t fw_reserved_size_in_kb; // VBIOS reserved extra fw size in unit of kb. 63947136be6SAurabindo Pillai uint32_t pspbl_init_reserved[3]; 64047136be6SAurabindo Pillai uint32_t spi_rom_size; // GPU spi rom size 64147136be6SAurabindo Pillai uint16_t support_dev_in_objinfo; 64247136be6SAurabindo Pillai uint16_t disp_phy_tunning_size; 64347136be6SAurabindo Pillai uint32_t reserved[16]; 64447136be6SAurabindo Pillai }; 6451fadf42eSAlex Deucher /* 6461fadf42eSAlex Deucher *************************************************************************** 6471fadf42eSAlex Deucher Data Table lcd_info structure 6481fadf42eSAlex Deucher *************************************************************************** 6491fadf42eSAlex Deucher */ 6501fadf42eSAlex Deucher 6511fadf42eSAlex Deucher struct lcd_info_v2_1 6521fadf42eSAlex Deucher { 6531fadf42eSAlex Deucher struct atom_common_table_header table_header; 6541fadf42eSAlex Deucher struct atom_dtd_format lcd_timing; 6551fadf42eSAlex Deucher uint16_t backlight_pwm; 6561fadf42eSAlex Deucher uint16_t special_handle_cap; 6571fadf42eSAlex Deucher uint16_t panel_misc; 6581fadf42eSAlex Deucher uint16_t lvds_max_slink_pclk; 6591fadf42eSAlex Deucher uint16_t lvds_ss_percentage; 6601fadf42eSAlex Deucher uint16_t lvds_ss_rate_10hz; 6611fadf42eSAlex Deucher uint8_t pwr_on_digon_to_de; /*all pwr sequence numbers below are in uint of 4ms*/ 6621fadf42eSAlex Deucher uint8_t pwr_on_de_to_vary_bl; 6631fadf42eSAlex Deucher uint8_t pwr_down_vary_bloff_to_de; 6641fadf42eSAlex Deucher uint8_t pwr_down_de_to_digoff; 6651fadf42eSAlex Deucher uint8_t pwr_off_delay; 6661fadf42eSAlex Deucher uint8_t pwr_on_vary_bl_to_blon; 6671fadf42eSAlex Deucher uint8_t pwr_down_bloff_to_vary_bloff; 6681fadf42eSAlex Deucher uint8_t panel_bpc; 6691fadf42eSAlex Deucher uint8_t dpcd_edp_config_cap; 6701fadf42eSAlex Deucher uint8_t dpcd_max_link_rate; 6711fadf42eSAlex Deucher uint8_t dpcd_max_lane_count; 6721fadf42eSAlex Deucher uint8_t dpcd_max_downspread; 6731fadf42eSAlex Deucher uint8_t min_allowed_bl_level; 6741fadf42eSAlex Deucher uint8_t max_allowed_bl_level; 6751fadf42eSAlex Deucher uint8_t bootup_bl_level; 6761fadf42eSAlex Deucher uint8_t dplvdsrxid; 6771fadf42eSAlex Deucher uint32_t reserved1[8]; 6781fadf42eSAlex Deucher }; 6791fadf42eSAlex Deucher 6801fadf42eSAlex Deucher /* lcd_info_v2_1.panel_misc defintion */ 6811fadf42eSAlex Deucher enum atom_lcd_info_panel_misc{ 6821fadf42eSAlex Deucher ATOM_PANEL_MISC_FPDI =0x0002, 6831fadf42eSAlex Deucher }; 6841fadf42eSAlex Deucher 6851fadf42eSAlex Deucher //uceDPToLVDSRxId 6861fadf42eSAlex Deucher enum atom_lcd_info_dptolvds_rx_id 6871fadf42eSAlex Deucher { 6881fadf42eSAlex Deucher eDP_TO_LVDS_RX_DISABLE = 0x00, // no eDP->LVDS translator chip 6891fadf42eSAlex Deucher eDP_TO_LVDS_COMMON_ID = 0x01, // common eDP->LVDS translator chip without AMD SW init 6901fadf42eSAlex Deucher eDP_TO_LVDS_REALTEK_ID = 0x02, // Realtek tansaltor which require AMD SW init 6911fadf42eSAlex Deucher }; 6921fadf42eSAlex Deucher 6931fadf42eSAlex Deucher 6941fadf42eSAlex Deucher /* 6951fadf42eSAlex Deucher *************************************************************************** 6961fadf42eSAlex Deucher Data Table gpio_pin_lut structure 6971fadf42eSAlex Deucher *************************************************************************** 6981fadf42eSAlex Deucher */ 6991fadf42eSAlex Deucher 7001fadf42eSAlex Deucher struct atom_gpio_pin_assignment 7011fadf42eSAlex Deucher { 7021fadf42eSAlex Deucher uint32_t data_a_reg_index; 7031fadf42eSAlex Deucher uint8_t gpio_bitshift; 7041fadf42eSAlex Deucher uint8_t gpio_mask_bitshift; 7051fadf42eSAlex Deucher uint8_t gpio_id; 7061fadf42eSAlex Deucher uint8_t reserved; 7071fadf42eSAlex Deucher }; 7081fadf42eSAlex Deucher 7091fadf42eSAlex Deucher /* atom_gpio_pin_assignment.gpio_id definition */ 7101fadf42eSAlex Deucher enum atom_gpio_pin_assignment_gpio_id { 7111fadf42eSAlex Deucher I2C_HW_LANE_MUX =0x0f, /* only valid when bit7=1 */ 7121fadf42eSAlex Deucher I2C_HW_ENGINE_ID_MASK =0x70, /* only valid when bit7=1 */ 7131fadf42eSAlex Deucher I2C_HW_CAP =0x80, /*only when the I2C_HW_CAP is set, the pin ID is assigned to an I2C pin pair, otherwise, it's an generic GPIO pin */ 7141fadf42eSAlex Deucher 7151fadf42eSAlex Deucher /* gpio_id pre-define id for multiple usage */ 7161fadf42eSAlex Deucher /* GPIO use to control PCIE_VDDC in certain SLT board */ 7171fadf42eSAlex Deucher PCIE_VDDC_CONTROL_GPIO_PINID = 56, 7181fadf42eSAlex Deucher /* if PP_AC_DC_SWITCH_GPIO_PINID in Gpio_Pin_LutTable, AC/DC swithing feature is enable */ 7191fadf42eSAlex Deucher PP_AC_DC_SWITCH_GPIO_PINID = 60, 7201fadf42eSAlex Deucher /* VDDC_REGULATOR_VRHOT_GPIO_PINID in Gpio_Pin_LutTable, VRHot feature is enable */ 7211fadf42eSAlex Deucher VDDC_VRHOT_GPIO_PINID = 61, 7221fadf42eSAlex Deucher /*if VDDC_PCC_GPIO_PINID in GPIO_LUTable, Peak Current Control feature is enabled */ 7231fadf42eSAlex Deucher VDDC_PCC_GPIO_PINID = 62, 7241fadf42eSAlex Deucher /* Only used on certain SLT/PA board to allow utility to cut Efuse. */ 7251fadf42eSAlex Deucher EFUSE_CUT_ENABLE_GPIO_PINID = 63, 7261fadf42eSAlex Deucher /* ucGPIO=DRAM_SELF_REFRESH_GPIO_PIND uses for memory self refresh (ucGPIO=0, DRAM self-refresh; ucGPIO= */ 7271fadf42eSAlex Deucher DRAM_SELF_REFRESH_GPIO_PINID = 64, 7281fadf42eSAlex Deucher /* Thermal interrupt output->system thermal chip GPIO pin */ 7291fadf42eSAlex Deucher THERMAL_INT_OUTPUT_GPIO_PINID =65, 7301fadf42eSAlex Deucher }; 7311fadf42eSAlex Deucher 7321fadf42eSAlex Deucher 7331fadf42eSAlex Deucher struct atom_gpio_pin_lut_v2_1 7341fadf42eSAlex Deucher { 7351fadf42eSAlex Deucher struct atom_common_table_header table_header; 7361fadf42eSAlex Deucher /*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 */ 737d0417264SAlex Deucher struct atom_gpio_pin_assignment gpio_pin[]; 7381fadf42eSAlex Deucher }; 7391fadf42eSAlex Deucher 7401fadf42eSAlex Deucher 7411fadf42eSAlex Deucher /* 7424864f2eeSTong Liu01 * VBIOS/PRE-OS always reserve a FB region at the top of frame buffer. driver should not write 7434864f2eeSTong Liu01 * access that region. driver can allocate their own reservation region as long as it does not 7444864f2eeSTong Liu01 * overlap firwmare's reservation region. 7454864f2eeSTong Liu01 * if (pre-NV1X) atom data table firmwareInfoTable version < 3.3: 7464864f2eeSTong Liu01 * in this case, atom data table vram_usagebyfirmwareTable version always <= 2.1 7474864f2eeSTong Liu01 * if VBIOS/UEFI GOP is posted: 7484864f2eeSTong Liu01 * VBIOS/UEFIGOP update used_by_firmware_in_kb = total reserved size by VBIOS 7494864f2eeSTong Liu01 * update start_address_in_kb = total_mem_size_in_kb - used_by_firmware_in_kb; 7504864f2eeSTong Liu01 * ( total_mem_size_in_kb = reg(CONFIG_MEMSIZE)<<10) 7514864f2eeSTong Liu01 * driver can allocate driver reservation region under firmware reservation, 7524864f2eeSTong Liu01 * used_by_driver_in_kb = driver reservation size 7534864f2eeSTong Liu01 * driver reservation start address = (start_address_in_kb - used_by_driver_in_kb) 7544864f2eeSTong Liu01 * Comment1[hchan]: There is only one reservation at the beginning of the FB reserved by 7554864f2eeSTong Liu01 * host driver. Host driver would overwrite the table with the following 7564864f2eeSTong Liu01 * used_by_firmware_in_kb = total reserved size for pf-vf info exchange and 7574864f2eeSTong Liu01 * set SRIOV_MSG_SHARE_RESERVATION mask start_address_in_kb = 0 7584864f2eeSTong Liu01 * else there is no VBIOS reservation region: 7594864f2eeSTong Liu01 * driver must allocate driver reservation region at top of FB. 7604864f2eeSTong Liu01 * driver set used_by_driver_in_kb = driver reservation size 7614864f2eeSTong Liu01 * driver reservation start address = (total_mem_size_in_kb - used_by_driver_in_kb) 7624864f2eeSTong Liu01 * same as Comment1 7634864f2eeSTong Liu01 * else (NV1X and after): 7644864f2eeSTong Liu01 * if VBIOS/UEFI GOP is posted: 7654864f2eeSTong Liu01 * VBIOS/UEFIGOP update: 7664864f2eeSTong Liu01 * used_by_firmware_in_kb = atom_firmware_Info_v3_3.fw_reserved_size_in_kb; 7674864f2eeSTong Liu01 * start_address_in_kb = total_mem_size_in_kb - used_by_firmware_in_kb; 7684864f2eeSTong Liu01 * (total_mem_size_in_kb = reg(CONFIG_MEMSIZE)<<10) 7694864f2eeSTong Liu01 * if vram_usagebyfirmwareTable version <= 2.1: 7704864f2eeSTong Liu01 * driver can allocate driver reservation region under firmware reservation, 7714864f2eeSTong Liu01 * driver set used_by_driver_in_kb = driver reservation size 7724864f2eeSTong Liu01 * driver reservation start address = start_address_in_kb - used_by_driver_in_kb 7734864f2eeSTong Liu01 * same as Comment1 7744864f2eeSTong Liu01 * else driver can: 7754864f2eeSTong Liu01 * allocate it reservation any place as long as it does overlap pre-OS FW reservation area 7764864f2eeSTong Liu01 * set used_by_driver_region0_in_kb = driver reservation size 7774864f2eeSTong Liu01 * set driver_region0_start_address_in_kb = driver reservation region start address 7784864f2eeSTong Liu01 * Comment2[hchan]: Host driver can set used_by_firmware_in_kb and start_address_in_kb to 7794864f2eeSTong Liu01 * zero as the reservation for VF as it doesn’t exist. And Host driver should also 7804864f2eeSTong Liu01 * update atom_firmware_Info table to remove the same VBIOS reservation as well. 7811fadf42eSAlex Deucher */ 7821fadf42eSAlex Deucher 7831fadf42eSAlex Deucher struct vram_usagebyfirmware_v2_1 7841fadf42eSAlex Deucher { 7851fadf42eSAlex Deucher struct atom_common_table_header table_header; 7861fadf42eSAlex Deucher uint32_t start_address_in_kb; 7871fadf42eSAlex Deucher uint16_t used_by_firmware_in_kb; 7881fadf42eSAlex Deucher uint16_t used_by_driver_in_kb; 7891fadf42eSAlex Deucher }; 7901fadf42eSAlex Deucher 7914864f2eeSTong Liu01 struct vram_usagebyfirmware_v2_2 { 7924864f2eeSTong Liu01 struct atom_common_table_header table_header; 7934864f2eeSTong Liu01 uint32_t fw_region_start_address_in_kb; 7944864f2eeSTong Liu01 uint16_t used_by_firmware_in_kb; 7954864f2eeSTong Liu01 uint16_t reserved; 7964864f2eeSTong Liu01 uint32_t driver_region0_start_address_in_kb; 7974864f2eeSTong Liu01 uint32_t used_by_driver_region0_in_kb; 7984864f2eeSTong Liu01 uint32_t reserved32[7]; 7994864f2eeSTong Liu01 }; 8001fadf42eSAlex Deucher 8011fadf42eSAlex Deucher /* 8021fadf42eSAlex Deucher *************************************************************************** 8031fadf42eSAlex Deucher Data Table displayobjectinfo structure 8041fadf42eSAlex Deucher *************************************************************************** 8051fadf42eSAlex Deucher */ 8061fadf42eSAlex Deucher 807b801d8adSAurabindo Pillai enum atom_object_record_type_id { 8081fadf42eSAlex Deucher ATOM_I2C_RECORD_TYPE = 1, 8091fadf42eSAlex Deucher ATOM_HPD_INT_RECORD_TYPE = 2, 810b801d8adSAurabindo Pillai ATOM_CONNECTOR_CAP_RECORD_TYPE = 3, 811b801d8adSAurabindo Pillai ATOM_CONNECTOR_SPEED_UPTO = 4, 8121fadf42eSAlex Deucher ATOM_OBJECT_GPIO_CNTL_RECORD_TYPE = 9, 8131fadf42eSAlex Deucher ATOM_CONNECTOR_HPDPIN_LUT_RECORD_TYPE = 16, 8141fadf42eSAlex Deucher ATOM_CONNECTOR_AUXDDC_LUT_RECORD_TYPE = 17, 8151fadf42eSAlex Deucher ATOM_ENCODER_CAP_RECORD_TYPE = 20, 8161fadf42eSAlex Deucher ATOM_BRACKET_LAYOUT_RECORD_TYPE = 21, 8171fadf42eSAlex Deucher ATOM_CONNECTOR_FORCED_TMDS_CAP_RECORD_TYPE = 22, 818c85ef99aSYongqiang Sun ATOM_DISP_CONNECTOR_CAPS_RECORD_TYPE = 23, 819b801d8adSAurabindo Pillai ATOM_BRACKET_LAYOUT_V2_RECORD_TYPE = 25, 8201fadf42eSAlex Deucher ATOM_RECORD_END_TYPE = 0xFF, 8211fadf42eSAlex Deucher }; 8221fadf42eSAlex Deucher 8231fadf42eSAlex Deucher struct atom_common_record_header 8241fadf42eSAlex Deucher { 8251fadf42eSAlex Deucher uint8_t record_type; //An emun to indicate the record type 8261fadf42eSAlex Deucher uint8_t record_size; //The size of the whole record in byte 8271fadf42eSAlex Deucher }; 8281fadf42eSAlex Deucher 8291fadf42eSAlex Deucher struct atom_i2c_record 8301fadf42eSAlex Deucher { 8311fadf42eSAlex Deucher struct atom_common_record_header record_header; //record_type = ATOM_I2C_RECORD_TYPE 8321fadf42eSAlex Deucher uint8_t i2c_id; 8331fadf42eSAlex Deucher uint8_t i2c_slave_addr; //The slave address, it's 0 when the record is attached to connector for DDC 8341fadf42eSAlex Deucher }; 8351fadf42eSAlex Deucher 8361fadf42eSAlex Deucher struct atom_hpd_int_record 8371fadf42eSAlex Deucher { 8381fadf42eSAlex Deucher struct atom_common_record_header record_header; //record_type = ATOM_HPD_INT_RECORD_TYPE 8391fadf42eSAlex Deucher uint8_t pin_id; //Corresponding block in GPIO_PIN_INFO table gives the pin info 8401fadf42eSAlex Deucher uint8_t plugin_pin_state; 8411fadf42eSAlex Deucher }; 8421fadf42eSAlex Deucher 843b801d8adSAurabindo Pillai struct atom_connector_caps_record { 844b801d8adSAurabindo Pillai struct atom_common_record_header 845b801d8adSAurabindo Pillai record_header; //record_type = ATOM_CONN_CAP_RECORD_TYPE 846b801d8adSAurabindo Pillai uint16_t connector_caps; //01b if internal display is checked; 10b if internal BL is checked; 0 of Not 847b801d8adSAurabindo Pillai }; 848b801d8adSAurabindo Pillai 849b801d8adSAurabindo Pillai struct atom_connector_speed_record { 850b801d8adSAurabindo Pillai struct atom_common_record_header 851b801d8adSAurabindo Pillai record_header; //record_type = ATOM_CONN_SPEED_UPTO 852b801d8adSAurabindo Pillai uint32_t connector_max_speed; // connector Max speed attribute, it sets 8100 in Mhz when DP connector @8.1Ghz. 853b801d8adSAurabindo Pillai uint16_t reserved; 854b801d8adSAurabindo Pillai }; 855b801d8adSAurabindo Pillai 8561fadf42eSAlex Deucher // Bit maps for ATOM_ENCODER_CAP_RECORD.usEncoderCap 8571fadf42eSAlex Deucher enum atom_encoder_caps_def 8581fadf42eSAlex Deucher { 8591fadf42eSAlex Deucher ATOM_ENCODER_CAP_RECORD_HBR2 =0x01, // DP1.2 HBR2 is supported by HW encoder, it is retired in NI. the real meaning from SI is MST_EN 8601fadf42eSAlex Deucher ATOM_ENCODER_CAP_RECORD_MST_EN =0x01, // from SI, this bit means DP MST is enable or not. 8611fadf42eSAlex Deucher ATOM_ENCODER_CAP_RECORD_HBR2_EN =0x02, // DP1.2 HBR2 setting is qualified and HBR2 can be enabled 8621fadf42eSAlex Deucher ATOM_ENCODER_CAP_RECORD_HDMI6Gbps_EN =0x04, // HDMI2.0 6Gbps enable or not. 8631fadf42eSAlex Deucher ATOM_ENCODER_CAP_RECORD_HBR3_EN =0x08, // DP1.3 HBR3 is supported by board. 8645a2730fcSFangzhi Zuo ATOM_ENCODER_CAP_RECORD_DP2 =0x10, // DP2 is supported by ASIC/board. 8655a2730fcSFangzhi Zuo ATOM_ENCODER_CAP_RECORD_UHBR10_EN =0x20, // DP2.0 UHBR10 settings is supported by board 8665a2730fcSFangzhi Zuo ATOM_ENCODER_CAP_RECORD_UHBR13_5_EN =0x40, // DP2.0 UHBR13.5 settings is supported by board 8675a2730fcSFangzhi Zuo ATOM_ENCODER_CAP_RECORD_UHBR20_EN =0x80, // DP2.0 UHBR20 settings is supported by board 86820299a88SLeo Li ATOM_ENCODER_CAP_RECORD_USB_C_TYPE =0x100, // the DP connector is a USB-C type. 8691fadf42eSAlex Deucher }; 8701fadf42eSAlex Deucher 8711fadf42eSAlex Deucher struct atom_encoder_caps_record 8721fadf42eSAlex Deucher { 8731fadf42eSAlex Deucher struct atom_common_record_header record_header; //record_type = ATOM_ENCODER_CAP_RECORD_TYPE 8741fadf42eSAlex Deucher uint32_t encodercaps; 8751fadf42eSAlex Deucher }; 8761fadf42eSAlex Deucher 8771fadf42eSAlex Deucher enum atom_connector_caps_def 8781fadf42eSAlex Deucher { 8791fadf42eSAlex Deucher ATOM_CONNECTOR_CAP_INTERNAL_DISPLAY = 0x01, //a cap bit to indicate that this non-embedded display connector is an internal display 8801fadf42eSAlex Deucher ATOM_CONNECTOR_CAP_INTERNAL_DISPLAY_BL = 0x02, //a cap bit to indicate that this internal display requires BL control from GPU, refers to lcd_info for BL PWM freq 8811fadf42eSAlex Deucher }; 8821fadf42eSAlex Deucher 8831fadf42eSAlex Deucher struct atom_disp_connector_caps_record 8841fadf42eSAlex Deucher { 8851fadf42eSAlex Deucher struct atom_common_record_header record_header; 8861fadf42eSAlex Deucher uint32_t connectcaps; 8871fadf42eSAlex Deucher }; 8881fadf42eSAlex Deucher 8891fadf42eSAlex Deucher //The following generic object gpio pin control record type will replace JTAG_RECORD/FPGA_CONTROL_RECORD/DVI_EXT_INPUT_RECORD above gradually 8901fadf42eSAlex Deucher struct atom_gpio_pin_control_pair 8911fadf42eSAlex Deucher { 8921fadf42eSAlex Deucher uint8_t gpio_id; // GPIO_ID, find the corresponding ID in GPIO_LUT table 8931fadf42eSAlex Deucher uint8_t gpio_pinstate; // Pin state showing how to set-up the pin 8941fadf42eSAlex Deucher }; 8951fadf42eSAlex Deucher 8961fadf42eSAlex Deucher struct atom_object_gpio_cntl_record 8971fadf42eSAlex Deucher { 8981fadf42eSAlex Deucher struct atom_common_record_header record_header; 8991fadf42eSAlex Deucher uint8_t flag; // Future expnadibility 9001fadf42eSAlex Deucher uint8_t number_of_pins; // Number of GPIO pins used to control the object 9011fadf42eSAlex Deucher struct atom_gpio_pin_control_pair gpio[1]; // the real gpio pin pair determined by number of pins ucNumberOfPins 9021fadf42eSAlex Deucher }; 9031fadf42eSAlex Deucher 9041fadf42eSAlex Deucher //Definitions for GPIO pin state 9051fadf42eSAlex Deucher enum atom_gpio_pin_control_pinstate_def 9061fadf42eSAlex Deucher { 9071fadf42eSAlex Deucher GPIO_PIN_TYPE_INPUT = 0x00, 9081fadf42eSAlex Deucher GPIO_PIN_TYPE_OUTPUT = 0x10, 9091fadf42eSAlex Deucher GPIO_PIN_TYPE_HW_CONTROL = 0x20, 9101fadf42eSAlex Deucher 9111fadf42eSAlex Deucher //For GPIO_PIN_TYPE_OUTPUT the following is defined 9121fadf42eSAlex Deucher GPIO_PIN_OUTPUT_STATE_MASK = 0x01, 9131fadf42eSAlex Deucher GPIO_PIN_OUTPUT_STATE_SHIFT = 0, 9141fadf42eSAlex Deucher GPIO_PIN_STATE_ACTIVE_LOW = 0x0, 9151fadf42eSAlex Deucher GPIO_PIN_STATE_ACTIVE_HIGH = 0x1, 9161fadf42eSAlex Deucher }; 9171fadf42eSAlex Deucher 9181fadf42eSAlex Deucher // Indexes to GPIO array in GLSync record 9191fadf42eSAlex Deucher // GLSync record is for Frame Lock/Gen Lock feature. 9201fadf42eSAlex Deucher enum atom_glsync_record_gpio_index_def 9211fadf42eSAlex Deucher { 9221fadf42eSAlex Deucher ATOM_GPIO_INDEX_GLSYNC_REFCLK = 0, 9231fadf42eSAlex Deucher ATOM_GPIO_INDEX_GLSYNC_HSYNC = 1, 9241fadf42eSAlex Deucher ATOM_GPIO_INDEX_GLSYNC_VSYNC = 2, 9251fadf42eSAlex Deucher ATOM_GPIO_INDEX_GLSYNC_SWAP_REQ = 3, 9261fadf42eSAlex Deucher ATOM_GPIO_INDEX_GLSYNC_SWAP_GNT = 4, 9271fadf42eSAlex Deucher ATOM_GPIO_INDEX_GLSYNC_INTERRUPT = 5, 9281fadf42eSAlex Deucher ATOM_GPIO_INDEX_GLSYNC_V_RESET = 6, 9291fadf42eSAlex Deucher ATOM_GPIO_INDEX_GLSYNC_SWAP_CNTL = 7, 9301fadf42eSAlex Deucher ATOM_GPIO_INDEX_GLSYNC_SWAP_SEL = 8, 9311fadf42eSAlex Deucher ATOM_GPIO_INDEX_GLSYNC_MAX = 9, 9321fadf42eSAlex Deucher }; 9331fadf42eSAlex Deucher 9341fadf42eSAlex Deucher 9351fadf42eSAlex Deucher struct atom_connector_hpdpin_lut_record //record for ATOM_CONNECTOR_HPDPIN_LUT_RECORD_TYPE 9361fadf42eSAlex Deucher { 9371fadf42eSAlex Deucher struct atom_common_record_header record_header; 9381fadf42eSAlex Deucher uint8_t hpd_pin_map[8]; 9391fadf42eSAlex Deucher }; 9401fadf42eSAlex Deucher 9411fadf42eSAlex Deucher struct atom_connector_auxddc_lut_record //record for ATOM_CONNECTOR_AUXDDC_LUT_RECORD_TYPE 9421fadf42eSAlex Deucher { 9431fadf42eSAlex Deucher struct atom_common_record_header record_header; 9441fadf42eSAlex Deucher uint8_t aux_ddc_map[8]; 9451fadf42eSAlex Deucher }; 9461fadf42eSAlex Deucher 9471fadf42eSAlex Deucher struct atom_connector_forced_tmds_cap_record 9481fadf42eSAlex Deucher { 9491fadf42eSAlex Deucher struct atom_common_record_header record_header; 9501fadf42eSAlex Deucher // override TMDS capability on this connector when it operate in TMDS mode. usMaxTmdsClkRate = max TMDS Clock in Mhz/2.5 9511fadf42eSAlex Deucher uint8_t maxtmdsclkrate_in2_5mhz; 9521fadf42eSAlex Deucher uint8_t reserved; 9531fadf42eSAlex Deucher }; 9541fadf42eSAlex Deucher 9551fadf42eSAlex Deucher struct atom_connector_layout_info 9561fadf42eSAlex Deucher { 9571fadf42eSAlex Deucher uint16_t connectorobjid; 9581fadf42eSAlex Deucher uint8_t connector_type; 9591fadf42eSAlex Deucher uint8_t position; 9601fadf42eSAlex Deucher }; 9611fadf42eSAlex Deucher 9621fadf42eSAlex Deucher // define ATOM_CONNECTOR_LAYOUT_INFO.ucConnectorType to describe the display connector size 9631fadf42eSAlex Deucher enum atom_connector_layout_info_connector_type_def 9641fadf42eSAlex Deucher { 9651fadf42eSAlex Deucher CONNECTOR_TYPE_DVI_D = 1, 9661fadf42eSAlex Deucher 9671fadf42eSAlex Deucher CONNECTOR_TYPE_HDMI = 4, 9681fadf42eSAlex Deucher CONNECTOR_TYPE_DISPLAY_PORT = 5, 9691fadf42eSAlex Deucher CONNECTOR_TYPE_MINI_DISPLAY_PORT = 6, 9701fadf42eSAlex Deucher }; 9711fadf42eSAlex Deucher 9721fadf42eSAlex Deucher struct atom_bracket_layout_record 9731fadf42eSAlex Deucher { 9741fadf42eSAlex Deucher struct atom_common_record_header record_header; 9751fadf42eSAlex Deucher uint8_t bracketlen; 9761fadf42eSAlex Deucher uint8_t bracketwidth; 9771fadf42eSAlex Deucher uint8_t conn_num; 9781fadf42eSAlex Deucher uint8_t reserved; 9791fadf42eSAlex Deucher struct atom_connector_layout_info conn_info[1]; 9801fadf42eSAlex Deucher }; 981b801d8adSAurabindo Pillai struct atom_bracket_layout_record_v2 { 982b801d8adSAurabindo Pillai struct atom_common_record_header 983b801d8adSAurabindo Pillai record_header; //record_type = ATOM_BRACKET_LAYOUT_RECORD_TYPE 984b801d8adSAurabindo Pillai uint8_t bracketlen; //Bracket Length in mm 985b801d8adSAurabindo Pillai uint8_t bracketwidth; //Bracket Width in mm 986b801d8adSAurabindo Pillai uint8_t conn_num; //Connector numbering 987b801d8adSAurabindo Pillai uint8_t mini_type; //Mini Type (0 = Normal; 1 = Mini) 988b801d8adSAurabindo Pillai uint8_t reserved1; 989b801d8adSAurabindo Pillai uint8_t reserved2; 990b801d8adSAurabindo Pillai }; 991b801d8adSAurabindo Pillai 992b801d8adSAurabindo Pillai enum atom_connector_layout_info_mini_type_def { 993b801d8adSAurabindo Pillai MINI_TYPE_NORMAL = 0, 994b801d8adSAurabindo Pillai MINI_TYPE_MINI = 1, 995b801d8adSAurabindo Pillai }; 9961fadf42eSAlex Deucher 9971fadf42eSAlex Deucher enum atom_display_device_tag_def{ 9981fadf42eSAlex Deucher ATOM_DISPLAY_LCD1_SUPPORT = 0x0002, //an embedded display is either an LVDS or eDP signal type of display 99975362564SNicholas Kazlauskas ATOM_DISPLAY_LCD2_SUPPORT = 0x0020, //second edp device tag 0x0020 for backward compability 10001fadf42eSAlex Deucher ATOM_DISPLAY_DFP1_SUPPORT = 0x0008, 10011fadf42eSAlex Deucher ATOM_DISPLAY_DFP2_SUPPORT = 0x0080, 10021fadf42eSAlex Deucher ATOM_DISPLAY_DFP3_SUPPORT = 0x0200, 10031fadf42eSAlex Deucher ATOM_DISPLAY_DFP4_SUPPORT = 0x0400, 10041fadf42eSAlex Deucher ATOM_DISPLAY_DFP5_SUPPORT = 0x0800, 10051fadf42eSAlex Deucher ATOM_DISPLAY_DFP6_SUPPORT = 0x0040, 10061fadf42eSAlex Deucher ATOM_DISPLAY_DFPx_SUPPORT = 0x0ec8, 10071fadf42eSAlex Deucher }; 10081fadf42eSAlex Deucher 10091fadf42eSAlex Deucher struct atom_display_object_path_v2 10101fadf42eSAlex Deucher { 10111fadf42eSAlex Deucher uint16_t display_objid; //Connector Object ID or Misc Object ID 10121fadf42eSAlex Deucher uint16_t disp_recordoffset; 10131fadf42eSAlex Deucher uint16_t encoderobjid; //first encoder closer to the connector, could be either an external or intenal encoder 10141fadf42eSAlex Deucher uint16_t extencoderobjid; //2nd encoder after the first encoder, from the connector point of view; 10151fadf42eSAlex Deucher uint16_t encoder_recordoffset; 10161fadf42eSAlex Deucher uint16_t extencoder_recordoffset; 10171fadf42eSAlex Deucher uint16_t device_tag; //a supported device vector, each display path starts with this.the paths are enumerated in the way of priority, a path appears first 10181fadf42eSAlex Deucher uint8_t priority_id; 10191fadf42eSAlex Deucher uint8_t reserved; 10201fadf42eSAlex Deucher }; 10211fadf42eSAlex Deucher 1022b801d8adSAurabindo Pillai struct atom_display_object_path_v3 { 1023b801d8adSAurabindo Pillai uint16_t display_objid; //Connector Object ID or Misc Object ID 1024b801d8adSAurabindo Pillai uint16_t disp_recordoffset; 1025b801d8adSAurabindo Pillai uint16_t encoderobjid; //first encoder closer to the connector, could be either an external or intenal encoder 1026b801d8adSAurabindo Pillai uint16_t reserved1; //only on USBC case, otherwise always = 0 1027b801d8adSAurabindo Pillai uint16_t reserved2; //reserved and always = 0 1028b801d8adSAurabindo Pillai uint16_t reserved3; //reserved and always = 0 1029b801d8adSAurabindo Pillai //a supported device vector, each display path starts with this.the paths are enumerated in the way of priority, 1030b801d8adSAurabindo Pillai //a path appears first 1031b801d8adSAurabindo Pillai uint16_t device_tag; 1032b801d8adSAurabindo Pillai uint16_t reserved4; //reserved and always = 0 1033b801d8adSAurabindo Pillai }; 1034b801d8adSAurabindo Pillai 10351fadf42eSAlex Deucher struct display_object_info_table_v1_4 10361fadf42eSAlex Deucher { 10371fadf42eSAlex Deucher struct atom_common_table_header table_header; 10381fadf42eSAlex Deucher uint16_t supporteddevices; 10391fadf42eSAlex Deucher uint8_t number_of_path; 10401fadf42eSAlex Deucher uint8_t reserved; 104117ea4383SAlex Deucher struct 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_path 10421fadf42eSAlex Deucher }; 10431fadf42eSAlex Deucher 1044b801d8adSAurabindo Pillai struct display_object_info_table_v1_5 { 1045b801d8adSAurabindo Pillai struct atom_common_table_header table_header; 1046b801d8adSAurabindo Pillai uint16_t supporteddevices; 1047b801d8adSAurabindo Pillai uint8_t number_of_path; 1048b801d8adSAurabindo Pillai uint8_t reserved; 1049b801d8adSAurabindo Pillai // the real number of this included in the structure is calculated by using the 1050b801d8adSAurabindo Pillai // (whole structure size - the header size- number_of_path)/size of atom_display_object_path 105117ea4383SAlex Deucher struct atom_display_object_path_v3 display_path[]; 1052b801d8adSAurabindo Pillai }; 10531fadf42eSAlex Deucher 10541fadf42eSAlex Deucher /* 10551fadf42eSAlex Deucher *************************************************************************** 10561fadf42eSAlex Deucher Data Table dce_info structure 10571fadf42eSAlex Deucher *************************************************************************** 10581fadf42eSAlex Deucher */ 10591fadf42eSAlex Deucher struct atom_display_controller_info_v4_1 10601fadf42eSAlex Deucher { 10611fadf42eSAlex Deucher struct atom_common_table_header table_header; 10621fadf42eSAlex Deucher uint32_t display_caps; 10631fadf42eSAlex Deucher uint32_t bootup_dispclk_10khz; 10641fadf42eSAlex Deucher uint16_t dce_refclk_10khz; 10651fadf42eSAlex Deucher uint16_t i2c_engine_refclk_10khz; 10661fadf42eSAlex Deucher uint16_t dvi_ss_percentage; // in unit of 0.001% 10671fadf42eSAlex Deucher uint16_t dvi_ss_rate_10hz; 10681fadf42eSAlex Deucher uint16_t hdmi_ss_percentage; // in unit of 0.001% 10691fadf42eSAlex Deucher uint16_t hdmi_ss_rate_10hz; 10701fadf42eSAlex Deucher uint16_t dp_ss_percentage; // in unit of 0.001% 10711fadf42eSAlex Deucher uint16_t dp_ss_rate_10hz; 10721fadf42eSAlex Deucher uint8_t dvi_ss_mode; // enum of atom_spread_spectrum_mode 10731fadf42eSAlex Deucher uint8_t hdmi_ss_mode; // enum of atom_spread_spectrum_mode 10741fadf42eSAlex Deucher uint8_t dp_ss_mode; // enum of atom_spread_spectrum_mode 10751fadf42eSAlex Deucher uint8_t ss_reserved; 10761fadf42eSAlex Deucher uint8_t hardcode_mode_num; // a hardcode mode number defined in StandardVESA_TimingTable when a CRT or DFP EDID is not available 10771fadf42eSAlex Deucher uint8_t reserved1[3]; 10781fadf42eSAlex Deucher uint16_t dpphy_refclk_10khz; 10791fadf42eSAlex Deucher uint16_t reserved2; 10801fadf42eSAlex Deucher uint8_t dceip_min_ver; 10811fadf42eSAlex Deucher uint8_t dceip_max_ver; 10821fadf42eSAlex Deucher uint8_t max_disp_pipe_num; 10831fadf42eSAlex Deucher uint8_t max_vbios_active_disp_pipe_num; 10841fadf42eSAlex Deucher uint8_t max_ppll_num; 10851fadf42eSAlex Deucher uint8_t max_disp_phy_num; 10861fadf42eSAlex Deucher uint8_t max_aux_pairs; 10871fadf42eSAlex Deucher uint8_t remotedisplayconfig; 10881fadf42eSAlex Deucher uint8_t reserved3[8]; 10891fadf42eSAlex Deucher }; 10901fadf42eSAlex Deucher 10911fadf42eSAlex Deucher struct atom_display_controller_info_v4_2 10921fadf42eSAlex Deucher { 10931fadf42eSAlex Deucher struct atom_common_table_header table_header; 10941fadf42eSAlex Deucher uint32_t display_caps; 10951fadf42eSAlex Deucher uint32_t bootup_dispclk_10khz; 10961fadf42eSAlex Deucher uint16_t dce_refclk_10khz; 10971fadf42eSAlex Deucher uint16_t i2c_engine_refclk_10khz; 10981fadf42eSAlex Deucher uint16_t dvi_ss_percentage; // in unit of 0.001% 10991fadf42eSAlex Deucher uint16_t dvi_ss_rate_10hz; 11001fadf42eSAlex Deucher uint16_t hdmi_ss_percentage; // in unit of 0.001% 11011fadf42eSAlex Deucher uint16_t hdmi_ss_rate_10hz; 11021fadf42eSAlex Deucher uint16_t dp_ss_percentage; // in unit of 0.001% 11031fadf42eSAlex Deucher uint16_t dp_ss_rate_10hz; 11041fadf42eSAlex Deucher uint8_t dvi_ss_mode; // enum of atom_spread_spectrum_mode 11051fadf42eSAlex Deucher uint8_t hdmi_ss_mode; // enum of atom_spread_spectrum_mode 11061fadf42eSAlex Deucher uint8_t dp_ss_mode; // enum of atom_spread_spectrum_mode 11071fadf42eSAlex Deucher uint8_t ss_reserved; 11081fadf42eSAlex Deucher uint8_t dfp_hardcode_mode_num; // DFP hardcode mode number defined in StandardVESA_TimingTable when EDID is not available 11091fadf42eSAlex Deucher uint8_t dfp_hardcode_refreshrate;// DFP hardcode mode refreshrate defined in StandardVESA_TimingTable when EDID is not available 11101fadf42eSAlex Deucher uint8_t vga_hardcode_mode_num; // VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable 11111fadf42eSAlex Deucher uint8_t vga_hardcode_refreshrate;// VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable 11121fadf42eSAlex Deucher uint16_t dpphy_refclk_10khz; 11131fadf42eSAlex Deucher uint16_t reserved2; 11141fadf42eSAlex Deucher uint8_t dcnip_min_ver; 11151fadf42eSAlex Deucher uint8_t dcnip_max_ver; 11161fadf42eSAlex Deucher uint8_t max_disp_pipe_num; 11171fadf42eSAlex Deucher uint8_t max_vbios_active_disp_pipe_num; 11181fadf42eSAlex Deucher uint8_t max_ppll_num; 11191fadf42eSAlex Deucher uint8_t max_disp_phy_num; 11201fadf42eSAlex Deucher uint8_t max_aux_pairs; 11211fadf42eSAlex Deucher uint8_t remotedisplayconfig; 11221fadf42eSAlex Deucher uint8_t reserved3[8]; 11231fadf42eSAlex Deucher }; 11241fadf42eSAlex Deucher 112595574c69SWesley Chalmers struct atom_display_controller_info_v4_3 112695574c69SWesley Chalmers { 112795574c69SWesley Chalmers struct atom_common_table_header table_header; 112895574c69SWesley Chalmers uint32_t display_caps; 112995574c69SWesley Chalmers uint32_t bootup_dispclk_10khz; 113095574c69SWesley Chalmers uint16_t dce_refclk_10khz; 113195574c69SWesley Chalmers uint16_t i2c_engine_refclk_10khz; 113295574c69SWesley Chalmers uint16_t dvi_ss_percentage; // in unit of 0.001% 113395574c69SWesley Chalmers uint16_t dvi_ss_rate_10hz; 113495574c69SWesley Chalmers uint16_t hdmi_ss_percentage; // in unit of 0.001% 113595574c69SWesley Chalmers uint16_t hdmi_ss_rate_10hz; 113695574c69SWesley Chalmers uint16_t dp_ss_percentage; // in unit of 0.001% 113795574c69SWesley Chalmers uint16_t dp_ss_rate_10hz; 113895574c69SWesley Chalmers uint8_t dvi_ss_mode; // enum of atom_spread_spectrum_mode 113995574c69SWesley Chalmers uint8_t hdmi_ss_mode; // enum of atom_spread_spectrum_mode 114095574c69SWesley Chalmers uint8_t dp_ss_mode; // enum of atom_spread_spectrum_mode 114195574c69SWesley Chalmers uint8_t ss_reserved; 114295574c69SWesley Chalmers uint8_t dfp_hardcode_mode_num; // DFP hardcode mode number defined in StandardVESA_TimingTable when EDID is not available 114395574c69SWesley Chalmers uint8_t dfp_hardcode_refreshrate;// DFP hardcode mode refreshrate defined in StandardVESA_TimingTable when EDID is not available 114495574c69SWesley Chalmers uint8_t vga_hardcode_mode_num; // VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable 114595574c69SWesley Chalmers uint8_t vga_hardcode_refreshrate;// VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable 114695574c69SWesley Chalmers uint16_t dpphy_refclk_10khz; 114795574c69SWesley Chalmers uint16_t reserved2; 114895574c69SWesley Chalmers uint8_t dcnip_min_ver; 114995574c69SWesley Chalmers uint8_t dcnip_max_ver; 115095574c69SWesley Chalmers uint8_t max_disp_pipe_num; 115195574c69SWesley Chalmers uint8_t max_vbios_active_disp_pipe_num; 115295574c69SWesley Chalmers uint8_t max_ppll_num; 115395574c69SWesley Chalmers uint8_t max_disp_phy_num; 115495574c69SWesley Chalmers uint8_t max_aux_pairs; 115595574c69SWesley Chalmers uint8_t remotedisplayconfig; 115695574c69SWesley Chalmers uint8_t reserved3[8]; 115795574c69SWesley Chalmers }; 115895574c69SWesley Chalmers 115909821499SIgor Kravchenko struct atom_display_controller_info_v4_4 { 116009821499SIgor Kravchenko struct atom_common_table_header table_header; 116109821499SIgor Kravchenko uint32_t display_caps; 116209821499SIgor Kravchenko uint32_t bootup_dispclk_10khz; 116309821499SIgor Kravchenko uint16_t dce_refclk_10khz; 116409821499SIgor Kravchenko uint16_t i2c_engine_refclk_10khz; 116509821499SIgor Kravchenko uint16_t dvi_ss_percentage; // in unit of 0.001% 116609821499SIgor Kravchenko uint16_t dvi_ss_rate_10hz; 116709821499SIgor Kravchenko uint16_t hdmi_ss_percentage; // in unit of 0.001% 116809821499SIgor Kravchenko uint16_t hdmi_ss_rate_10hz; 116909821499SIgor Kravchenko uint16_t dp_ss_percentage; // in unit of 0.001% 117009821499SIgor Kravchenko uint16_t dp_ss_rate_10hz; 117109821499SIgor Kravchenko uint8_t dvi_ss_mode; // enum of atom_spread_spectrum_mode 117209821499SIgor Kravchenko uint8_t hdmi_ss_mode; // enum of atom_spread_spectrum_mode 117309821499SIgor Kravchenko uint8_t dp_ss_mode; // enum of atom_spread_spectrum_mode 117409821499SIgor Kravchenko uint8_t ss_reserved; 117509821499SIgor Kravchenko uint8_t dfp_hardcode_mode_num; // DFP hardcode mode number defined in StandardVESA_TimingTable when EDID is not available 117609821499SIgor Kravchenko uint8_t dfp_hardcode_refreshrate;// DFP hardcode mode refreshrate defined in StandardVESA_TimingTable when EDID is not available 117709821499SIgor Kravchenko uint8_t vga_hardcode_mode_num; // VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable 117809821499SIgor Kravchenko uint8_t vga_hardcode_refreshrate;// VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable 117909821499SIgor Kravchenko uint16_t dpphy_refclk_10khz; 118009821499SIgor Kravchenko uint16_t hw_chip_id; 118109821499SIgor Kravchenko uint8_t dcnip_min_ver; 118209821499SIgor Kravchenko uint8_t dcnip_max_ver; 118309821499SIgor Kravchenko uint8_t max_disp_pipe_num; 118409821499SIgor Kravchenko uint8_t max_vbios_active_disp_pipum; 118509821499SIgor Kravchenko uint8_t max_ppll_num; 118609821499SIgor Kravchenko uint8_t max_disp_phy_num; 118709821499SIgor Kravchenko uint8_t max_aux_pairs; 118809821499SIgor Kravchenko uint8_t remotedisplayconfig; 118909821499SIgor Kravchenko uint32_t dispclk_pll_vco_freq; 119009821499SIgor Kravchenko uint32_t dp_ref_clk_freq; 119109821499SIgor Kravchenko uint32_t max_mclk_chg_lat; // Worst case blackout duration for a memory clock frequency (p-state) change, units of 100s of ns (0.1 us) 119209821499SIgor Kravchenko uint32_t max_sr_exit_lat; // Worst case memory self refresh exit time, units of 100ns of ns (0.1us) 119309821499SIgor Kravchenko uint32_t max_sr_enter_exit_lat; // Worst case memory self refresh entry followed by immediate exit time, units of 100ns of ns (0.1us) 119409821499SIgor Kravchenko uint16_t dc_golden_table_offset; // point of struct of atom_dc_golden_table_vxx 119509821499SIgor Kravchenko uint16_t dc_golden_table_ver; 119609821499SIgor Kravchenko uint32_t reserved3[3]; 119709821499SIgor Kravchenko }; 119809821499SIgor Kravchenko 119909821499SIgor Kravchenko struct atom_dc_golden_table_v1 120009821499SIgor Kravchenko { 120109821499SIgor Kravchenko uint32_t aux_dphy_rx_control0_val; 120209821499SIgor Kravchenko uint32_t aux_dphy_tx_control_val; 120309821499SIgor Kravchenko uint32_t aux_dphy_rx_control1_val; 120409821499SIgor Kravchenko uint32_t dc_gpio_aux_ctrl_0_val; 120509821499SIgor Kravchenko uint32_t dc_gpio_aux_ctrl_1_val; 120609821499SIgor Kravchenko uint32_t dc_gpio_aux_ctrl_2_val; 120709821499SIgor Kravchenko uint32_t dc_gpio_aux_ctrl_3_val; 120809821499SIgor Kravchenko uint32_t dc_gpio_aux_ctrl_4_val; 120909821499SIgor Kravchenko uint32_t dc_gpio_aux_ctrl_5_val; 121009821499SIgor Kravchenko uint32_t reserved[23]; 121109821499SIgor Kravchenko }; 12121fadf42eSAlex Deucher 1213b801d8adSAurabindo Pillai enum dce_info_caps_def { 12141fadf42eSAlex Deucher // only for VBIOS 12151fadf42eSAlex Deucher DCE_INFO_CAPS_FORCE_DISPDEV_CONNECTED = 0x02, 12161fadf42eSAlex Deucher // only for VBIOS 12171fadf42eSAlex Deucher DCE_INFO_CAPS_DISABLE_DFP_DP_HBR2 = 0x04, 12181fadf42eSAlex Deucher // only for VBIOS 12191fadf42eSAlex Deucher DCE_INFO_CAPS_ENABLE_INTERLAC_TIMING = 0x08, 122095574c69SWesley Chalmers // only for VBIOS 122195574c69SWesley Chalmers DCE_INFO_CAPS_LTTPR_SUPPORT_ENABLE = 0x20, 1222dd8a8687SWesley Chalmers DCE_INFO_CAPS_VBIOS_LTTPR_TRANSPARENT_ENABLE = 0x40, 12231fadf42eSAlex Deucher }; 12241fadf42eSAlex Deucher 1225b801d8adSAurabindo Pillai struct atom_display_controller_info_v4_5 1226b801d8adSAurabindo Pillai { 1227b801d8adSAurabindo Pillai struct atom_common_table_header table_header; 1228b801d8adSAurabindo Pillai uint32_t display_caps; 1229b801d8adSAurabindo Pillai uint32_t bootup_dispclk_10khz; 1230b801d8adSAurabindo Pillai uint16_t dce_refclk_10khz; 1231b801d8adSAurabindo Pillai uint16_t i2c_engine_refclk_10khz; 1232b801d8adSAurabindo Pillai uint16_t dvi_ss_percentage; // in unit of 0.001% 1233b801d8adSAurabindo Pillai uint16_t dvi_ss_rate_10hz; 1234b801d8adSAurabindo Pillai uint16_t hdmi_ss_percentage; // in unit of 0.001% 1235b801d8adSAurabindo Pillai uint16_t hdmi_ss_rate_10hz; 1236b801d8adSAurabindo Pillai uint16_t dp_ss_percentage; // in unit of 0.001% 1237b801d8adSAurabindo Pillai uint16_t dp_ss_rate_10hz; 1238b801d8adSAurabindo Pillai uint8_t dvi_ss_mode; // enum of atom_spread_spectrum_mode 1239b801d8adSAurabindo Pillai uint8_t hdmi_ss_mode; // enum of atom_spread_spectrum_mode 1240b801d8adSAurabindo Pillai uint8_t dp_ss_mode; // enum of atom_spread_spectrum_mode 1241b801d8adSAurabindo Pillai uint8_t ss_reserved; 1242b801d8adSAurabindo Pillai // DFP hardcode mode number defined in StandardVESA_TimingTable when EDID is not available 1243b801d8adSAurabindo Pillai uint8_t dfp_hardcode_mode_num; 1244b801d8adSAurabindo Pillai // DFP hardcode mode refreshrate defined in StandardVESA_TimingTable when EDID is not available 1245b801d8adSAurabindo Pillai uint8_t dfp_hardcode_refreshrate; 1246b801d8adSAurabindo Pillai // VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable 1247b801d8adSAurabindo Pillai uint8_t vga_hardcode_mode_num; 1248b801d8adSAurabindo Pillai // VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable 1249b801d8adSAurabindo Pillai uint8_t vga_hardcode_refreshrate; 1250b801d8adSAurabindo Pillai uint16_t dpphy_refclk_10khz; 1251b801d8adSAurabindo Pillai uint16_t hw_chip_id; 1252b801d8adSAurabindo Pillai uint8_t dcnip_min_ver; 1253b801d8adSAurabindo Pillai uint8_t dcnip_max_ver; 1254b801d8adSAurabindo Pillai uint8_t max_disp_pipe_num; 1255b801d8adSAurabindo Pillai uint8_t max_vbios_active_disp_pipe_num; 1256b801d8adSAurabindo Pillai uint8_t max_ppll_num; 1257b801d8adSAurabindo Pillai uint8_t max_disp_phy_num; 1258b801d8adSAurabindo Pillai uint8_t max_aux_pairs; 1259b801d8adSAurabindo Pillai uint8_t remotedisplayconfig; 1260b801d8adSAurabindo Pillai uint32_t dispclk_pll_vco_freq; 1261b801d8adSAurabindo Pillai uint32_t dp_ref_clk_freq; 1262b801d8adSAurabindo Pillai // Worst case blackout duration for a memory clock frequency (p-state) change, units of 100s of ns (0.1 us) 1263b801d8adSAurabindo Pillai uint32_t max_mclk_chg_lat; 1264b801d8adSAurabindo Pillai // Worst case memory self refresh exit time, units of 100ns of ns (0.1us) 1265b801d8adSAurabindo Pillai uint32_t max_sr_exit_lat; 1266b801d8adSAurabindo Pillai // Worst case memory self refresh entry followed by immediate exit time, units of 100ns of ns (0.1us) 1267b801d8adSAurabindo Pillai uint32_t max_sr_enter_exit_lat; 1268b801d8adSAurabindo Pillai uint16_t dc_golden_table_offset; // point of struct of atom_dc_golden_table_vxx 1269b801d8adSAurabindo Pillai uint16_t dc_golden_table_ver; 1270b801d8adSAurabindo Pillai uint32_t aux_dphy_rx_control0_val; 1271b801d8adSAurabindo Pillai uint32_t aux_dphy_tx_control_val; 1272b801d8adSAurabindo Pillai uint32_t aux_dphy_rx_control1_val; 1273b801d8adSAurabindo Pillai uint32_t dc_gpio_aux_ctrl_0_val; 1274b801d8adSAurabindo Pillai uint32_t dc_gpio_aux_ctrl_1_val; 1275b801d8adSAurabindo Pillai uint32_t dc_gpio_aux_ctrl_2_val; 1276b801d8adSAurabindo Pillai uint32_t dc_gpio_aux_ctrl_3_val; 1277b801d8adSAurabindo Pillai uint32_t dc_gpio_aux_ctrl_4_val; 1278b801d8adSAurabindo Pillai uint32_t dc_gpio_aux_ctrl_5_val; 1279b801d8adSAurabindo Pillai uint32_t reserved[26]; 1280b801d8adSAurabindo Pillai }; 1281b801d8adSAurabindo Pillai 12821fadf42eSAlex Deucher /* 12831fadf42eSAlex Deucher *************************************************************************** 12841fadf42eSAlex Deucher Data Table ATOM_EXTERNAL_DISPLAY_CONNECTION_INFO structure 12851fadf42eSAlex Deucher *************************************************************************** 12861fadf42eSAlex Deucher */ 12871fadf42eSAlex Deucher struct atom_ext_display_path 12881fadf42eSAlex Deucher { 12891fadf42eSAlex Deucher uint16_t device_tag; //A bit vector to show what devices are supported 12901fadf42eSAlex Deucher uint16_t device_acpi_enum; //16bit device ACPI id. 12911fadf42eSAlex Deucher uint16_t connectorobjid; //A physical connector for displays to plug in, using object connector definitions 12921fadf42eSAlex Deucher uint8_t auxddclut_index; //An index into external AUX/DDC channel LUT 12931fadf42eSAlex Deucher uint8_t hpdlut_index; //An index into external HPD pin LUT 12941fadf42eSAlex Deucher uint16_t ext_encoder_objid; //external encoder object id 12951fadf42eSAlex Deucher uint8_t channelmapping; // if ucChannelMapping=0, using default one to one mapping 12961fadf42eSAlex Deucher uint8_t chpninvert; // bit vector for up to 8 lanes, =0: P and N is not invert, =1 P and N is inverted 12971fadf42eSAlex Deucher uint16_t caps; 12981fadf42eSAlex Deucher uint16_t reserved; 12991fadf42eSAlex Deucher }; 13001fadf42eSAlex Deucher 13011fadf42eSAlex Deucher //usCaps 1302cdca3f21SAnthony Koo enum ext_display_path_cap_def { 1303*25510f92SAurabindo Pillai EXT_DISPLAY_PATH_CAPS__EXT_CHIP_MASK = 0x007E, 1304*25510f92SAurabindo Pillai AMD_EXT_DISPLAY_PATH_CAPS__EXT_CHIP_MASK = 0x007E, 1305*25510f92SAurabindo Pillai AMD_EXT_DISPLAY_PATH_CAPS__DP_FIXED_VS_EN = (0x01 << 1), 1306*25510f92SAurabindo Pillai AMD_EXT_DISPLAY_PATH_CAPS__HDMI20_PI3EQX1204 = (0x02 << 1), 1307*25510f92SAurabindo Pillai AMD_EXT_DISPLAY_PATH_CAPS__DP_EARLY_8B10B_TPS2 = (0x03 << 1), 1308*25510f92SAurabindo Pillai AMD_EXT_DISPLAY_PATH_CAPS__HDMI20_TISN65DP159RSBT = (0x04 << 1), 1309*25510f92SAurabindo Pillai AMD_EXT_DISPLAY_PATH_CAPS__HDMI20_PARADE_PS175 = (0x06 << 1), 1310*25510f92SAurabindo Pillai EXT_DISPLAY_PATH_CAPS__DP_FIXED_VS_EN = (0x07 << 1), 1311*25510f92SAurabindo Pillai EXT_DISPLAY_PATH_CAPS__HDMI20_PI3EQX1204 = (0x08 << 1), //PI redriver chip 1312*25510f92SAurabindo Pillai EXT_DISPLAY_PATH_CAPS__HDMI20_TISN65DP159RSBT = (0x09 << 1), //TI retimer chip 1313*25510f92SAurabindo Pillai EXT_DISPLAY_PATH_CAPS__AMD_INTERNAL = (0x0a << 1), //AMD internal customer chip placeholder 13141fadf42eSAlex Deucher }; 13151fadf42eSAlex Deucher 13161fadf42eSAlex Deucher struct atom_external_display_connection_info 13171fadf42eSAlex Deucher { 13181fadf42eSAlex Deucher struct atom_common_table_header table_header; 13191fadf42eSAlex Deucher uint8_t guid[16]; // a GUID is a 16 byte long string 13201fadf42eSAlex Deucher struct atom_ext_display_path path[7]; // total of fixed 7 entries. 13211fadf42eSAlex Deucher uint8_t checksum; // a simple Checksum of the sum of whole structure equal to 0x0. 13221fadf42eSAlex Deucher uint8_t stereopinid; // use for eDP panel 13231fadf42eSAlex Deucher uint8_t remotedisplayconfig; 13241fadf42eSAlex Deucher uint8_t edptolvdsrxid; 13251fadf42eSAlex Deucher uint8_t fixdpvoltageswing; // usCaps[1]=1, this indicate DP_LANE_SET value 13261fadf42eSAlex Deucher uint8_t reserved[3]; // for potential expansion 13271fadf42eSAlex Deucher }; 13281fadf42eSAlex Deucher 13291fadf42eSAlex Deucher /* 13301fadf42eSAlex Deucher *************************************************************************** 13311fadf42eSAlex Deucher Data Table integratedsysteminfo structure 13321fadf42eSAlex Deucher *************************************************************************** 13331fadf42eSAlex Deucher */ 13341fadf42eSAlex Deucher 13351fadf42eSAlex Deucher struct atom_camera_dphy_timing_param 13361fadf42eSAlex Deucher { 13371fadf42eSAlex Deucher uint8_t profile_id; // SENSOR_PROFILES 13381fadf42eSAlex Deucher uint32_t param; 13391fadf42eSAlex Deucher }; 13401fadf42eSAlex Deucher 13411fadf42eSAlex Deucher struct atom_camera_dphy_elec_param 13421fadf42eSAlex Deucher { 13431fadf42eSAlex Deucher uint16_t param[3]; 13441fadf42eSAlex Deucher }; 13451fadf42eSAlex Deucher 13461fadf42eSAlex Deucher struct atom_camera_module_info 13471fadf42eSAlex Deucher { 13481fadf42eSAlex Deucher uint8_t module_id; // 0: Rear, 1: Front right of user, 2: Front left of user 13491fadf42eSAlex Deucher uint8_t module_name[8]; 13501fadf42eSAlex Deucher struct atom_camera_dphy_timing_param timingparam[6]; // Exact number is under estimation and confirmation from sensor vendor 13511fadf42eSAlex Deucher }; 13521fadf42eSAlex Deucher 13531fadf42eSAlex Deucher struct atom_camera_flashlight_info 13541fadf42eSAlex Deucher { 13551fadf42eSAlex Deucher uint8_t flashlight_id; // 0: Rear, 1: Front 13561fadf42eSAlex Deucher uint8_t name[8]; 13571fadf42eSAlex Deucher }; 13581fadf42eSAlex Deucher 13591fadf42eSAlex Deucher struct atom_camera_data 13601fadf42eSAlex Deucher { 13611fadf42eSAlex Deucher uint32_t versionCode; 13621fadf42eSAlex Deucher struct atom_camera_module_info cameraInfo[3]; // Assuming 3 camera sensors max 13631fadf42eSAlex Deucher struct atom_camera_flashlight_info flashInfo; // Assuming 1 flashlight max 13641fadf42eSAlex Deucher struct atom_camera_dphy_elec_param dphy_param; 13651fadf42eSAlex Deucher uint32_t crc_val; // CRC 13661fadf42eSAlex Deucher }; 13671fadf42eSAlex Deucher 13681fadf42eSAlex Deucher 13691fadf42eSAlex Deucher struct atom_14nm_dpphy_dvihdmi_tuningset 13701fadf42eSAlex Deucher { 13711fadf42eSAlex Deucher uint32_t max_symclk_in10khz; 13721fadf42eSAlex Deucher uint8_t encoder_mode; //atom_encode_mode_def, =2: DVI, =3: HDMI mode 13731fadf42eSAlex Deucher uint8_t phy_sel; //bit vector of phy, bit0= phya, bit1=phyb, ....bit5 = phyf 13741fadf42eSAlex Deucher uint16_t margindeemph; //COMMON_MAR_DEEMPH_NOM[7:0]tx_margin_nom [15:8]deemph_gen1_nom 13751fadf42eSAlex Deucher uint8_t deemph_6db_4; //COMMON_SELDEEMPH60[31:24]deemph_6db_4 13761fadf42eSAlex Deucher uint8_t boostadj; //CMD_BUS_GLOBAL_FOR_TX_LANE0 [19:16]tx_boost_adj [20]tx_boost_en [23:22]tx_binary_ron_code_offset 13771fadf42eSAlex Deucher uint8_t tx_driver_fifty_ohms; //COMMON_ZCALCODE_CTRL[21].tx_driver_fifty_ohms 13781fadf42eSAlex Deucher uint8_t deemph_sel; //MARGIN_DEEMPH_LANE0.DEEMPH_SEL 13791fadf42eSAlex Deucher }; 13801fadf42eSAlex Deucher 13811fadf42eSAlex Deucher struct atom_14nm_dpphy_dp_setting{ 13821fadf42eSAlex Deucher uint8_t dp_vs_pemph_level; //enum of atom_dp_vs_preemph_def 13831fadf42eSAlex Deucher uint16_t margindeemph; //COMMON_MAR_DEEMPH_NOM[7:0]tx_margin_nom [15:8]deemph_gen1_nom 13841fadf42eSAlex Deucher uint8_t deemph_6db_4; //COMMON_SELDEEMPH60[31:24]deemph_6db_4 13851fadf42eSAlex Deucher uint8_t boostadj; //CMD_BUS_GLOBAL_FOR_TX_LANE0 [19:16]tx_boost_adj [20]tx_boost_en [23:22]tx_binary_ron_code_offset 13861fadf42eSAlex Deucher }; 13871fadf42eSAlex Deucher 13881fadf42eSAlex Deucher struct atom_14nm_dpphy_dp_tuningset{ 13891fadf42eSAlex Deucher uint8_t phy_sel; // bit vector of phy, bit0= phya, bit1=phyb, ....bit5 = phyf 13901fadf42eSAlex Deucher uint8_t version; 13911fadf42eSAlex Deucher uint16_t table_size; // size of atom_14nm_dpphy_dp_tuningset 13921fadf42eSAlex Deucher uint16_t reserved; 13931fadf42eSAlex Deucher struct atom_14nm_dpphy_dp_setting dptuning[10]; 13941fadf42eSAlex Deucher }; 13951fadf42eSAlex Deucher 13961fadf42eSAlex Deucher struct atom_14nm_dig_transmitter_info_header_v4_0{ 13971fadf42eSAlex Deucher struct atom_common_table_header table_header; 13981fadf42eSAlex Deucher uint16_t pcie_phy_tmds_hdmi_macro_settings_offset; // offset of PCIEPhyTMDSHDMIMacroSettingsTbl 13991fadf42eSAlex Deucher uint16_t uniphy_vs_emph_lookup_table_offset; // offset of UniphyVSEmphLookUpTbl 14001fadf42eSAlex Deucher uint16_t uniphy_xbar_settings_table_offset; // offset of UniphyXbarSettingsTbl 14011fadf42eSAlex Deucher }; 14021fadf42eSAlex Deucher 14031fadf42eSAlex Deucher struct atom_14nm_combphy_tmds_vs_set 14041fadf42eSAlex Deucher { 14051fadf42eSAlex Deucher uint8_t sym_clk; 14061fadf42eSAlex Deucher uint8_t dig_mode; 14071fadf42eSAlex Deucher uint8_t phy_sel; 14081fadf42eSAlex Deucher uint16_t common_mar_deemph_nom__margin_deemph_val; 14091fadf42eSAlex Deucher uint8_t common_seldeemph60__deemph_6db_4_val; 14101fadf42eSAlex Deucher uint8_t cmd_bus_global_for_tx_lane0__boostadj_val ; 14111fadf42eSAlex Deucher uint8_t common_zcalcode_ctrl__tx_driver_fifty_ohms_val; 14121fadf42eSAlex Deucher uint8_t margin_deemph_lane0__deemph_sel_val; 14131fadf42eSAlex Deucher }; 14141fadf42eSAlex Deucher 14152fde24e4SAlex Deucher struct atom_DCN_dpphy_dvihdmi_tuningset 14162fde24e4SAlex Deucher { 14172fde24e4SAlex Deucher uint32_t max_symclk_in10khz; 14182fde24e4SAlex Deucher uint8_t encoder_mode; //atom_encode_mode_def, =2: DVI, =3: HDMI mode 14192fde24e4SAlex Deucher uint8_t phy_sel; //bit vector of phy, bit0= phya, bit1=phyb, ....bit5 = phyf 14202fde24e4SAlex Deucher uint8_t tx_eq_main; // map to RDPCSTX_PHY_FUSE0/1/2/3[5:0](EQ_MAIN) 14212fde24e4SAlex Deucher uint8_t tx_eq_pre; // map to RDPCSTX_PHY_FUSE0/1/2/3[11:6](EQ_PRE) 14222fde24e4SAlex Deucher uint8_t tx_eq_post; // map to RDPCSTX_PHY_FUSE0/1/2/3[17:12](EQ_POST) 14232fde24e4SAlex Deucher uint8_t reserved1; 14242fde24e4SAlex Deucher uint8_t tx_vboost_lvl; // tx_vboost_lvl, map to RDPCSTX_PHY_CNTL0.RDPCS_PHY_TX_VBOOST_LVL 14252fde24e4SAlex Deucher uint8_t reserved2; 14262fde24e4SAlex Deucher }; 14272fde24e4SAlex Deucher 14282fde24e4SAlex Deucher struct atom_DCN_dpphy_dp_setting{ 14292fde24e4SAlex Deucher uint8_t dp_vs_pemph_level; //enum of atom_dp_vs_preemph_def 14302fde24e4SAlex Deucher uint8_t tx_eq_main; // map to RDPCSTX_PHY_FUSE0/1/2/3[5:0](EQ_MAIN) 14312fde24e4SAlex Deucher uint8_t tx_eq_pre; // map to RDPCSTX_PHY_FUSE0/1/2/3[11:6](EQ_PRE) 14322fde24e4SAlex Deucher uint8_t tx_eq_post; // map to RDPCSTX_PHY_FUSE0/1/2/3[17:12](EQ_POST) 14332fde24e4SAlex Deucher uint8_t tx_vboost_lvl; // tx_vboost_lvl, map to RDPCSTX_PHY_CNTL0.RDPCS_PHY_TX_VBOOST_LVL 14342fde24e4SAlex Deucher }; 14352fde24e4SAlex Deucher 14362fde24e4SAlex Deucher struct atom_DCN_dpphy_dp_tuningset{ 14372fde24e4SAlex Deucher uint8_t phy_sel; // bit vector of phy, bit0= phya, bit1=phyb, ....bit5 = phyf 14382fde24e4SAlex Deucher uint8_t version; 14392fde24e4SAlex Deucher uint16_t table_size; // size of atom_14nm_dpphy_dp_setting 14402fde24e4SAlex Deucher uint16_t reserved; 14412fde24e4SAlex Deucher struct atom_DCN_dpphy_dp_setting dptunings[10]; 14422fde24e4SAlex Deucher }; 14432fde24e4SAlex Deucher 1444e719d516SHarry Wentland struct atom_i2c_reg_info { 1445e719d516SHarry Wentland uint8_t ucI2cRegIndex; 1446e719d516SHarry Wentland uint8_t ucI2cRegVal; 1447e719d516SHarry Wentland }; 1448e719d516SHarry Wentland 1449e719d516SHarry Wentland struct atom_hdmi_retimer_redriver_set { 1450e719d516SHarry Wentland uint8_t HdmiSlvAddr; 1451e719d516SHarry Wentland uint8_t HdmiRegNum; 1452e719d516SHarry Wentland uint8_t Hdmi6GRegNum; 1453e719d516SHarry Wentland struct atom_i2c_reg_info HdmiRegSetting[9]; //For non 6G Hz use 1454e719d516SHarry Wentland struct atom_i2c_reg_info Hdmi6GhzRegSetting[3]; //For 6G Hz use. 1455e719d516SHarry Wentland }; 1456e719d516SHarry Wentland 14571fadf42eSAlex Deucher struct atom_integrated_system_info_v1_11 14581fadf42eSAlex Deucher { 14591fadf42eSAlex Deucher struct atom_common_table_header table_header; 14601fadf42eSAlex Deucher uint32_t vbios_misc; //enum of atom_system_vbiosmisc_def 14611fadf42eSAlex Deucher uint32_t gpucapinfo; //enum of atom_system_gpucapinf_def 14621fadf42eSAlex Deucher uint32_t system_config; 14631fadf42eSAlex Deucher uint32_t cpucapinfo; 14641fadf42eSAlex Deucher uint16_t gpuclk_ss_percentage; //unit of 0.001%, 1000 mean 1% 14651fadf42eSAlex Deucher uint16_t gpuclk_ss_type; 14661fadf42eSAlex Deucher uint16_t lvds_ss_percentage; //unit of 0.001%, 1000 mean 1% 14671fadf42eSAlex Deucher uint16_t lvds_ss_rate_10hz; 14681fadf42eSAlex Deucher uint16_t hdmi_ss_percentage; //unit of 0.001%, 1000 mean 1% 14691fadf42eSAlex Deucher uint16_t hdmi_ss_rate_10hz; 14701fadf42eSAlex Deucher uint16_t dvi_ss_percentage; //unit of 0.001%, 1000 mean 1% 14711fadf42eSAlex Deucher uint16_t dvi_ss_rate_10hz; 14721fadf42eSAlex Deucher uint16_t dpphy_override; // bit vector, enum of atom_sysinfo_dpphy_override_def 14731fadf42eSAlex Deucher uint16_t lvds_misc; // enum of atom_sys_info_lvds_misc_def 14741fadf42eSAlex Deucher uint16_t backlight_pwm_hz; // pwm frequency in hz 1475d04cc604SHarry Wentland uint8_t memorytype; // enum of atom_dmi_t17_mem_type_def, APU memory type indication. 14761fadf42eSAlex Deucher uint8_t umachannelnumber; // number of memory channels 14771fadf42eSAlex Deucher uint8_t pwr_on_digon_to_de; /* all pwr sequence numbers below are in uint of 4ms */ 14781fadf42eSAlex Deucher uint8_t pwr_on_de_to_vary_bl; 14791fadf42eSAlex Deucher uint8_t pwr_down_vary_bloff_to_de; 14801fadf42eSAlex Deucher uint8_t pwr_down_de_to_digoff; 14811fadf42eSAlex Deucher uint8_t pwr_off_delay; 14821fadf42eSAlex Deucher uint8_t pwr_on_vary_bl_to_blon; 14831fadf42eSAlex Deucher uint8_t pwr_down_bloff_to_vary_bloff; 14841fadf42eSAlex Deucher uint8_t min_allowed_bl_level; 1485d04cc604SHarry Wentland uint8_t htc_hyst_limit; 1486d04cc604SHarry Wentland uint8_t htc_tmp_limit; 1487d04cc604SHarry Wentland uint8_t reserved1; 1488d04cc604SHarry Wentland uint8_t reserved2; 14891fadf42eSAlex Deucher struct atom_external_display_connection_info extdispconninfo; 14901fadf42eSAlex Deucher struct atom_14nm_dpphy_dvihdmi_tuningset dvi_tuningset; 14911fadf42eSAlex Deucher struct atom_14nm_dpphy_dvihdmi_tuningset hdmi_tuningset; 14921fadf42eSAlex Deucher struct atom_14nm_dpphy_dvihdmi_tuningset hdmi6g_tuningset; 1493d04cc604SHarry Wentland struct atom_14nm_dpphy_dp_tuningset dp_tuningset; // rbr 1.62G dp tuning set 1494d04cc604SHarry Wentland struct atom_14nm_dpphy_dp_tuningset dp_hbr3_tuningset; // HBR3 dp tuning set 14951fadf42eSAlex Deucher struct atom_camera_data camera_info; 1496e719d516SHarry Wentland struct atom_hdmi_retimer_redriver_set dp0_retimer_set; //for DP0 1497e719d516SHarry Wentland struct atom_hdmi_retimer_redriver_set dp1_retimer_set; //for DP1 1498e719d516SHarry Wentland struct atom_hdmi_retimer_redriver_set dp2_retimer_set; //for DP2 1499e719d516SHarry Wentland struct atom_hdmi_retimer_redriver_set dp3_retimer_set; //for DP3 1500d04cc604SHarry Wentland struct atom_14nm_dpphy_dp_tuningset dp_hbr_tuningset; //hbr 2.7G dp tuning set 1501d04cc604SHarry Wentland struct atom_14nm_dpphy_dp_tuningset dp_hbr2_tuningset; //hbr2 5.4G dp turnig set 1502d04cc604SHarry Wentland struct atom_14nm_dpphy_dp_tuningset edp_tuningset; //edp tuning set 1503d04cc604SHarry Wentland uint32_t reserved[66]; 15041fadf42eSAlex Deucher }; 15051fadf42eSAlex Deucher 15062fde24e4SAlex Deucher struct atom_integrated_system_info_v1_12 15072fde24e4SAlex Deucher { 15082fde24e4SAlex Deucher struct atom_common_table_header table_header; 15092fde24e4SAlex Deucher uint32_t vbios_misc; //enum of atom_system_vbiosmisc_def 15102fde24e4SAlex Deucher uint32_t gpucapinfo; //enum of atom_system_gpucapinf_def 15112fde24e4SAlex Deucher uint32_t system_config; 15122fde24e4SAlex Deucher uint32_t cpucapinfo; 15132fde24e4SAlex Deucher uint16_t gpuclk_ss_percentage; //unit of 0.001%, 1000 mean 1% 15142fde24e4SAlex Deucher uint16_t gpuclk_ss_type; 15152fde24e4SAlex Deucher uint16_t lvds_ss_percentage; //unit of 0.001%, 1000 mean 1% 15162fde24e4SAlex Deucher uint16_t lvds_ss_rate_10hz; 15172fde24e4SAlex Deucher uint16_t hdmi_ss_percentage; //unit of 0.001%, 1000 mean 1% 15182fde24e4SAlex Deucher uint16_t hdmi_ss_rate_10hz; 15192fde24e4SAlex Deucher uint16_t dvi_ss_percentage; //unit of 0.001%, 1000 mean 1% 15202fde24e4SAlex Deucher uint16_t dvi_ss_rate_10hz; 15212fde24e4SAlex Deucher uint16_t dpphy_override; // bit vector, enum of atom_sysinfo_dpphy_override_def 15222fde24e4SAlex Deucher uint16_t lvds_misc; // enum of atom_sys_info_lvds_misc_def 15232fde24e4SAlex Deucher uint16_t backlight_pwm_hz; // pwm frequency in hz 15242fde24e4SAlex Deucher uint8_t memorytype; // enum of atom_dmi_t17_mem_type_def, APU memory type indication. 15252fde24e4SAlex Deucher uint8_t umachannelnumber; // number of memory channels 15262fde24e4SAlex Deucher uint8_t pwr_on_digon_to_de; // all pwr sequence numbers below are in uint of 4ms // 15272fde24e4SAlex Deucher uint8_t pwr_on_de_to_vary_bl; 15282fde24e4SAlex Deucher uint8_t pwr_down_vary_bloff_to_de; 15292fde24e4SAlex Deucher uint8_t pwr_down_de_to_digoff; 15302fde24e4SAlex Deucher uint8_t pwr_off_delay; 15312fde24e4SAlex Deucher uint8_t pwr_on_vary_bl_to_blon; 15322fde24e4SAlex Deucher uint8_t pwr_down_bloff_to_vary_bloff; 15332fde24e4SAlex Deucher uint8_t min_allowed_bl_level; 15342fde24e4SAlex Deucher uint8_t htc_hyst_limit; 15352fde24e4SAlex Deucher uint8_t htc_tmp_limit; 15362fde24e4SAlex Deucher uint8_t reserved1; 15372fde24e4SAlex Deucher uint8_t reserved2; 15382fde24e4SAlex Deucher struct atom_external_display_connection_info extdispconninfo; 15392fde24e4SAlex Deucher struct atom_DCN_dpphy_dvihdmi_tuningset TMDS_tuningset; 15402fde24e4SAlex Deucher struct atom_DCN_dpphy_dvihdmi_tuningset hdmiCLK5_tuningset; 15412fde24e4SAlex Deucher struct atom_DCN_dpphy_dvihdmi_tuningset hdmiCLK8_tuningset; 15422fde24e4SAlex Deucher struct atom_DCN_dpphy_dp_tuningset rbr_tuningset; // rbr 1.62G dp tuning set 15432fde24e4SAlex Deucher struct atom_DCN_dpphy_dp_tuningset hbr3_tuningset; // HBR3 dp tuning set 15442fde24e4SAlex Deucher struct atom_camera_data camera_info; 15452fde24e4SAlex Deucher struct atom_hdmi_retimer_redriver_set dp0_retimer_set; //for DP0 15462fde24e4SAlex Deucher struct atom_hdmi_retimer_redriver_set dp1_retimer_set; //for DP1 15472fde24e4SAlex Deucher struct atom_hdmi_retimer_redriver_set dp2_retimer_set; //for DP2 15482fde24e4SAlex Deucher struct atom_hdmi_retimer_redriver_set dp3_retimer_set; //for DP3 15492fde24e4SAlex Deucher struct atom_DCN_dpphy_dp_tuningset hbr_tuningset; //hbr 2.7G dp tuning set 15502fde24e4SAlex Deucher struct atom_DCN_dpphy_dp_tuningset hbr2_tuningset; //hbr2 5.4G dp turnig set 15512fde24e4SAlex Deucher struct atom_DCN_dpphy_dp_tuningset edp_tunings; //edp tuning set 15522fde24e4SAlex Deucher struct atom_DCN_dpphy_dvihdmi_tuningset hdmiCLK6_tuningset; 15532fde24e4SAlex Deucher uint32_t reserved[63]; 15542fde24e4SAlex Deucher }; 1555b9d90cb0SRoman Li 1556b9d90cb0SRoman Li struct edp_info_table 1557b9d90cb0SRoman Li { 1558b9d90cb0SRoman Li uint16_t edp_backlight_pwm_hz; 1559b9d90cb0SRoman Li uint16_t edp_ss_percentage; 1560b9d90cb0SRoman Li uint16_t edp_ss_rate_10hz; 1561b9d90cb0SRoman Li uint16_t reserved1; 1562b9d90cb0SRoman Li uint32_t reserved2; 1563b9d90cb0SRoman Li uint8_t edp_pwr_on_off_delay; 1564b9d90cb0SRoman Li uint8_t edp_pwr_on_vary_bl_to_blon; 1565b9d90cb0SRoman Li uint8_t edp_pwr_down_bloff_to_vary_bloff; 1566b9d90cb0SRoman Li uint8_t edp_panel_bpc; 1567b9d90cb0SRoman Li uint8_t edp_bootup_bl_level; 1568b9d90cb0SRoman Li uint8_t reserved3[3]; 1569b9d90cb0SRoman Li uint32_t reserved4[3]; 1570b9d90cb0SRoman Li }; 1571b9d90cb0SRoman Li 1572b9d90cb0SRoman Li struct atom_integrated_system_info_v2_1 1573b9d90cb0SRoman Li { 1574b9d90cb0SRoman Li struct atom_common_table_header table_header; 1575b9d90cb0SRoman Li uint32_t vbios_misc; //enum of atom_system_vbiosmisc_def 1576b9d90cb0SRoman Li uint32_t gpucapinfo; //enum of atom_system_gpucapinf_def 1577b9d90cb0SRoman Li uint32_t system_config; 1578b9d90cb0SRoman Li uint32_t cpucapinfo; 1579b9d90cb0SRoman Li uint16_t gpuclk_ss_percentage; //unit of 0.001%, 1000 mean 1% 1580b9d90cb0SRoman Li uint16_t gpuclk_ss_type; 1581b9d90cb0SRoman Li uint16_t dpphy_override; // bit vector, enum of atom_sysinfo_dpphy_override_def 1582b9d90cb0SRoman Li uint8_t memorytype; // enum of atom_dmi_t17_mem_type_def, APU memory type indication. 1583b9d90cb0SRoman Li uint8_t umachannelnumber; // number of memory channels 1584b9d90cb0SRoman Li uint8_t htc_hyst_limit; 1585b9d90cb0SRoman Li uint8_t htc_tmp_limit; 1586b9d90cb0SRoman Li uint8_t reserved1; 1587b9d90cb0SRoman Li uint8_t reserved2; 1588b9d90cb0SRoman Li struct edp_info_table edp1_info; 1589b9d90cb0SRoman Li struct edp_info_table edp2_info; 1590b9d90cb0SRoman Li uint32_t reserved3[8]; 1591b9d90cb0SRoman Li struct atom_external_display_connection_info extdispconninfo; 1592b9d90cb0SRoman Li struct atom_DCN_dpphy_dvihdmi_tuningset TMDS_tuningset; 1593b9d90cb0SRoman Li struct atom_DCN_dpphy_dvihdmi_tuningset hdmiCLK5_tuningset; //add clk6 1594b9d90cb0SRoman Li struct atom_DCN_dpphy_dvihdmi_tuningset hdmiCLK6_tuningset; 1595b9d90cb0SRoman Li struct atom_DCN_dpphy_dvihdmi_tuningset hdmiCLK8_tuningset; 1596b9d90cb0SRoman Li uint32_t reserved4[6];//reserve 2*sizeof(atom_DCN_dpphy_dvihdmi_tuningset) 1597b9d90cb0SRoman Li struct atom_DCN_dpphy_dp_tuningset rbr_tuningset; // rbr 1.62G dp tuning set 1598b9d90cb0SRoman Li struct atom_DCN_dpphy_dp_tuningset hbr_tuningset; //hbr 2.7G dp tuning set 1599b9d90cb0SRoman Li struct atom_DCN_dpphy_dp_tuningset hbr2_tuningset; //hbr2 5.4G dp turnig set 1600b9d90cb0SRoman Li struct atom_DCN_dpphy_dp_tuningset hbr3_tuningset; // HBR3 dp tuning set 1601b9d90cb0SRoman Li struct atom_DCN_dpphy_dp_tuningset edp_tunings; //edp tuning set 1602b9d90cb0SRoman Li uint32_t reserved5[28];//reserve 2*sizeof(atom_DCN_dpphy_dp_tuningset) 1603b9d90cb0SRoman Li struct atom_hdmi_retimer_redriver_set dp0_retimer_set; //for DP0 1604b9d90cb0SRoman Li struct atom_hdmi_retimer_redriver_set dp1_retimer_set; //for DP1 1605b9d90cb0SRoman Li struct atom_hdmi_retimer_redriver_set dp2_retimer_set; //for DP2 1606b9d90cb0SRoman Li struct atom_hdmi_retimer_redriver_set dp3_retimer_set; //for DP3 1607b9d90cb0SRoman Li uint32_t reserved6[30];// reserve size of(atom_camera_data) for camera_info 1608b9d90cb0SRoman Li uint32_t reserved7[32]; 1609b9d90cb0SRoman Li 1610b9d90cb0SRoman Li }; 16111fadf42eSAlex Deucher 161275362564SNicholas Kazlauskas struct atom_n6_display_phy_tuning_set { 161375362564SNicholas Kazlauskas uint8_t display_signal_type; 161475362564SNicholas Kazlauskas uint8_t phy_sel; 161575362564SNicholas Kazlauskas uint8_t preset_level; 161675362564SNicholas Kazlauskas uint8_t reserved1; 161775362564SNicholas Kazlauskas uint32_t reserved2; 161875362564SNicholas Kazlauskas uint32_t speed_upto; 161975362564SNicholas Kazlauskas uint8_t tx_vboost_level; 162075362564SNicholas Kazlauskas uint8_t tx_vreg_v2i; 162175362564SNicholas Kazlauskas uint8_t tx_vregdrv_byp; 162275362564SNicholas Kazlauskas uint8_t tx_term_cntl; 162375362564SNicholas Kazlauskas uint8_t tx_peak_level; 162475362564SNicholas Kazlauskas uint8_t tx_slew_en; 162575362564SNicholas Kazlauskas uint8_t tx_eq_pre; 162675362564SNicholas Kazlauskas uint8_t tx_eq_main; 162775362564SNicholas Kazlauskas uint8_t tx_eq_post; 162875362564SNicholas Kazlauskas uint8_t tx_en_inv_pre; 162975362564SNicholas Kazlauskas uint8_t tx_en_inv_post; 163075362564SNicholas Kazlauskas uint8_t reserved3; 163175362564SNicholas Kazlauskas uint32_t reserved4; 163275362564SNicholas Kazlauskas uint32_t reserved5; 163375362564SNicholas Kazlauskas uint32_t reserved6; 163475362564SNicholas Kazlauskas }; 163575362564SNicholas Kazlauskas 163675362564SNicholas Kazlauskas struct atom_display_phy_tuning_info { 163775362564SNicholas Kazlauskas struct atom_common_table_header table_header; 163875362564SNicholas Kazlauskas struct atom_n6_display_phy_tuning_set disp_phy_tuning[1]; 163975362564SNicholas Kazlauskas }; 164075362564SNicholas Kazlauskas 164175362564SNicholas Kazlauskas struct atom_integrated_system_info_v2_2 164275362564SNicholas Kazlauskas { 164375362564SNicholas Kazlauskas struct atom_common_table_header table_header; 164475362564SNicholas Kazlauskas uint32_t vbios_misc; //enum of atom_system_vbiosmisc_def 164575362564SNicholas Kazlauskas uint32_t gpucapinfo; //enum of atom_system_gpucapinf_def 164675362564SNicholas Kazlauskas uint32_t system_config; 164775362564SNicholas Kazlauskas uint32_t cpucapinfo; 164875362564SNicholas Kazlauskas uint16_t gpuclk_ss_percentage; //unit of 0.001%, 1000 mean 1% 164975362564SNicholas Kazlauskas uint16_t gpuclk_ss_type; 165075362564SNicholas Kazlauskas uint16_t dpphy_override; // bit vector, enum of atom_sysinfo_dpphy_override_def 165175362564SNicholas Kazlauskas uint8_t memorytype; // enum of atom_dmi_t17_mem_type_def, APU memory type indication. 165275362564SNicholas Kazlauskas uint8_t umachannelnumber; // number of memory channels 165375362564SNicholas Kazlauskas uint8_t htc_hyst_limit; 165475362564SNicholas Kazlauskas uint8_t htc_tmp_limit; 165575362564SNicholas Kazlauskas uint8_t reserved1; 165675362564SNicholas Kazlauskas uint8_t reserved2; 165775362564SNicholas Kazlauskas struct edp_info_table edp1_info; 165875362564SNicholas Kazlauskas struct edp_info_table edp2_info; 165975362564SNicholas Kazlauskas uint32_t reserved3[8]; 166075362564SNicholas Kazlauskas struct atom_external_display_connection_info extdispconninfo; 166175362564SNicholas Kazlauskas 166275362564SNicholas Kazlauskas uint32_t reserved4[189]; 166375362564SNicholas Kazlauskas }; 166475362564SNicholas Kazlauskas 1665e64e8f7cSLi Ma struct uma_carveout_option { 1666e64e8f7cSLi Ma char optionName[29]; //max length of string is 28chars + '\0'. Current design is for "minimum", "Medium", "High". This makes entire struct size 64bits 1667e64e8f7cSLi Ma uint8_t memoryCarvedGb; //memory carved out with setting 1668e64e8f7cSLi Ma uint8_t memoryRemainingGb; //memory remaining on system 1669e64e8f7cSLi Ma union { 1670e64e8f7cSLi Ma struct _flags { 1671e64e8f7cSLi Ma uint8_t Auto : 1; 1672e64e8f7cSLi Ma uint8_t Custom : 1; 1673e64e8f7cSLi Ma uint8_t Reserved : 6; 1674e64e8f7cSLi Ma } flags; 1675e64e8f7cSLi Ma uint8_t all8; 1676e64e8f7cSLi Ma } uma_carveout_option_flags; 1677e64e8f7cSLi Ma }; 1678e64e8f7cSLi Ma 1679e64e8f7cSLi Ma struct atom_integrated_system_info_v2_3 { 1680e64e8f7cSLi Ma struct atom_common_table_header table_header; 1681e64e8f7cSLi Ma uint32_t vbios_misc; // enum of atom_system_vbiosmisc_def 1682e64e8f7cSLi Ma uint32_t gpucapinfo; // enum of atom_system_gpucapinf_def 1683e64e8f7cSLi Ma uint32_t system_config; 1684e64e8f7cSLi Ma uint32_t cpucapinfo; 1685e64e8f7cSLi Ma uint16_t gpuclk_ss_percentage; // unit of 0.001%, 1000 mean 1% 1686e64e8f7cSLi Ma uint16_t gpuclk_ss_type; 1687e64e8f7cSLi Ma uint16_t dpphy_override; // bit vector, enum of atom_sysinfo_dpphy_override_def 1688e64e8f7cSLi Ma uint8_t memorytype; // enum of atom_dmi_t17_mem_type_def, APU memory type indication. 1689e64e8f7cSLi Ma uint8_t umachannelnumber; // number of memory channels 1690e64e8f7cSLi Ma uint8_t htc_hyst_limit; 1691e64e8f7cSLi Ma uint8_t htc_tmp_limit; 1692e64e8f7cSLi Ma uint8_t reserved1; // dp_ss_control 1693e64e8f7cSLi Ma uint8_t gpu_package_id; 1694e64e8f7cSLi Ma struct edp_info_table edp1_info; 1695e64e8f7cSLi Ma struct edp_info_table edp2_info; 1696e64e8f7cSLi Ma uint32_t reserved2[8]; 1697e64e8f7cSLi Ma struct atom_external_display_connection_info extdispconninfo; 1698e64e8f7cSLi Ma uint8_t UMACarveoutVersion; 1699e64e8f7cSLi Ma uint8_t UMACarveoutIndexMax; 1700e64e8f7cSLi Ma uint8_t UMACarveoutTypeDefault; 1701e64e8f7cSLi Ma uint8_t UMACarveoutIndexDefault; 1702e64e8f7cSLi Ma uint8_t UMACarveoutType; //Auto or Custom 1703e64e8f7cSLi Ma uint8_t UMACarveoutIndex; 1704e64e8f7cSLi Ma struct uma_carveout_option UMASizeControlOption[20]; 1705e64e8f7cSLi Ma uint8_t reserved3[110]; 1706e64e8f7cSLi Ma }; 1707e64e8f7cSLi Ma 17081fadf42eSAlex Deucher // system_config 17091fadf42eSAlex Deucher enum atom_system_vbiosmisc_def{ 17101fadf42eSAlex Deucher INTEGRATED_SYSTEM_INFO__GET_EDID_CALLBACK_FUNC_SUPPORT = 0x01, 17111fadf42eSAlex Deucher }; 17121fadf42eSAlex Deucher 17131fadf42eSAlex Deucher 17141fadf42eSAlex Deucher // gpucapinfo 17151fadf42eSAlex Deucher enum atom_system_gpucapinf_def{ 17161fadf42eSAlex Deucher SYS_INFO_GPUCAPS__ENABEL_DFS_BYPASS = 0x10, 17171fadf42eSAlex Deucher }; 17181fadf42eSAlex Deucher 17191fadf42eSAlex Deucher //dpphy_override 17201fadf42eSAlex Deucher enum atom_sysinfo_dpphy_override_def{ 17211fadf42eSAlex Deucher ATOM_ENABLE_DVI_TUNINGSET = 0x01, 17221fadf42eSAlex Deucher ATOM_ENABLE_HDMI_TUNINGSET = 0x02, 17231fadf42eSAlex Deucher ATOM_ENABLE_HDMI6G_TUNINGSET = 0x04, 17241fadf42eSAlex Deucher ATOM_ENABLE_DP_TUNINGSET = 0x08, 17251fadf42eSAlex Deucher ATOM_ENABLE_DP_HBR3_TUNINGSET = 0x10, 17261fadf42eSAlex Deucher }; 17271fadf42eSAlex Deucher 17281fadf42eSAlex Deucher //lvds_misc 17291fadf42eSAlex Deucher enum atom_sys_info_lvds_misc_def 17301fadf42eSAlex Deucher { 17311fadf42eSAlex Deucher SYS_INFO_LVDS_MISC_888_FPDI_MODE =0x01, 17321fadf42eSAlex Deucher SYS_INFO_LVDS_MISC_888_BPC_MODE =0x04, 17331fadf42eSAlex Deucher SYS_INFO_LVDS_MISC_OVERRIDE_EN =0x08, 17341fadf42eSAlex Deucher }; 17351fadf42eSAlex Deucher 17361fadf42eSAlex Deucher 17371fadf42eSAlex Deucher //memorytype DMI Type 17 offset 12h - Memory Type 17381fadf42eSAlex Deucher enum atom_dmi_t17_mem_type_def{ 17391fadf42eSAlex Deucher OtherMemType = 0x01, ///< Assign 01 to Other 17401fadf42eSAlex Deucher UnknownMemType, ///< Assign 02 to Unknown 17411fadf42eSAlex Deucher DramMemType, ///< Assign 03 to DRAM 17421fadf42eSAlex Deucher EdramMemType, ///< Assign 04 to EDRAM 17431fadf42eSAlex Deucher VramMemType, ///< Assign 05 to VRAM 17441fadf42eSAlex Deucher SramMemType, ///< Assign 06 to SRAM 17451fadf42eSAlex Deucher RamMemType, ///< Assign 07 to RAM 17461fadf42eSAlex Deucher RomMemType, ///< Assign 08 to ROM 17471fadf42eSAlex Deucher FlashMemType, ///< Assign 09 to Flash 17481fadf42eSAlex Deucher EepromMemType, ///< Assign 10 to EEPROM 17491fadf42eSAlex Deucher FepromMemType, ///< Assign 11 to FEPROM 17501fadf42eSAlex Deucher EpromMemType, ///< Assign 12 to EPROM 17511fadf42eSAlex Deucher CdramMemType, ///< Assign 13 to CDRAM 17521fadf42eSAlex Deucher ThreeDramMemType, ///< Assign 14 to 3DRAM 17531fadf42eSAlex Deucher SdramMemType, ///< Assign 15 to SDRAM 17541fadf42eSAlex Deucher SgramMemType, ///< Assign 16 to SGRAM 17551fadf42eSAlex Deucher RdramMemType, ///< Assign 17 to RDRAM 17561fadf42eSAlex Deucher DdrMemType, ///< Assign 18 to DDR 17571fadf42eSAlex Deucher Ddr2MemType, ///< Assign 19 to DDR2 17581fadf42eSAlex Deucher Ddr2FbdimmMemType, ///< Assign 20 to DDR2 FB-DIMM 17591fadf42eSAlex Deucher Ddr3MemType = 0x18, ///< Assign 24 to DDR3 17601fadf42eSAlex Deucher Fbd2MemType, ///< Assign 25 to FBD2 17611fadf42eSAlex Deucher Ddr4MemType, ///< Assign 26 to DDR4 17621fadf42eSAlex Deucher LpDdrMemType, ///< Assign 27 to LPDDR 17631fadf42eSAlex Deucher LpDdr2MemType, ///< Assign 28 to LPDDR2 17641fadf42eSAlex Deucher LpDdr3MemType, ///< Assign 29 to LPDDR3 17651fadf42eSAlex Deucher LpDdr4MemType, ///< Assign 30 to LPDDR4 1766af118ed9SHuang Rui GDdr6MemType, ///< Assign 31 to GDDR6 1767af118ed9SHuang Rui HbmMemType, ///< Assign 32 to HBM 1768af118ed9SHuang Rui Hbm2MemType, ///< Assign 33 to HBM2 1769af118ed9SHuang Rui Ddr5MemType, ///< Assign 34 to DDR5 1770af118ed9SHuang Rui LpDdr5MemType, ///< Assign 35 to LPDDR5 17711fadf42eSAlex Deucher }; 17721fadf42eSAlex Deucher 17731fadf42eSAlex Deucher 17741fadf42eSAlex Deucher // this Table is used starting from NL/AM, used by SBIOS and pass the IntegratedSystemInfoTable/PowerPlayInfoTable/SystemCameraInfoTable 17751fadf42eSAlex Deucher struct atom_fusion_system_info_v4 17761fadf42eSAlex Deucher { 17771fadf42eSAlex Deucher struct atom_integrated_system_info_v1_11 sysinfo; // refer to ATOM_INTEGRATED_SYSTEM_INFO_V1_8 definition 17781fadf42eSAlex Deucher uint32_t powerplayinfo[256]; // Reserve 1024 bytes space for PowerPlayInfoTable 17791fadf42eSAlex Deucher }; 17801fadf42eSAlex Deucher 17811fadf42eSAlex Deucher 17821fadf42eSAlex Deucher /* 17831fadf42eSAlex Deucher *************************************************************************** 17841fadf42eSAlex Deucher Data Table gfx_info structure 17851fadf42eSAlex Deucher *************************************************************************** 17861fadf42eSAlex Deucher */ 17871fadf42eSAlex Deucher 17881fadf42eSAlex Deucher struct atom_gfx_info_v2_2 17891fadf42eSAlex Deucher { 17901fadf42eSAlex Deucher struct atom_common_table_header table_header; 17911fadf42eSAlex Deucher uint8_t gfxip_min_ver; 17921fadf42eSAlex Deucher uint8_t gfxip_max_ver; 17931fadf42eSAlex Deucher uint8_t max_shader_engines; 17941fadf42eSAlex Deucher uint8_t max_tile_pipes; 17951fadf42eSAlex Deucher uint8_t max_cu_per_sh; 17961fadf42eSAlex Deucher uint8_t max_sh_per_se; 17971fadf42eSAlex Deucher uint8_t max_backends_per_se; 17981fadf42eSAlex Deucher uint8_t max_texture_channel_caches; 17991fadf42eSAlex Deucher uint32_t regaddr_cp_dma_src_addr; 18001fadf42eSAlex Deucher uint32_t regaddr_cp_dma_src_addr_hi; 18011fadf42eSAlex Deucher uint32_t regaddr_cp_dma_dst_addr; 18021fadf42eSAlex Deucher uint32_t regaddr_cp_dma_dst_addr_hi; 18031fadf42eSAlex Deucher uint32_t regaddr_cp_dma_command; 18041fadf42eSAlex Deucher uint32_t regaddr_cp_status; 18051fadf42eSAlex Deucher uint32_t regaddr_rlc_gpu_clock_32; 18061fadf42eSAlex Deucher uint32_t rlc_gpu_timer_refclk; 18071fadf42eSAlex Deucher }; 18081fadf42eSAlex Deucher 18093aabfcd7SJerry (Fangzhi) Zuo struct atom_gfx_info_v2_3 { 18103aabfcd7SJerry (Fangzhi) Zuo struct atom_common_table_header table_header; 18113aabfcd7SJerry (Fangzhi) Zuo uint8_t gfxip_min_ver; 18123aabfcd7SJerry (Fangzhi) Zuo uint8_t gfxip_max_ver; 18133aabfcd7SJerry (Fangzhi) Zuo uint8_t max_shader_engines; 18143aabfcd7SJerry (Fangzhi) Zuo uint8_t max_tile_pipes; 18153aabfcd7SJerry (Fangzhi) Zuo uint8_t max_cu_per_sh; 18163aabfcd7SJerry (Fangzhi) Zuo uint8_t max_sh_per_se; 18173aabfcd7SJerry (Fangzhi) Zuo uint8_t max_backends_per_se; 18183aabfcd7SJerry (Fangzhi) Zuo uint8_t max_texture_channel_caches; 18193aabfcd7SJerry (Fangzhi) Zuo uint32_t regaddr_cp_dma_src_addr; 18203aabfcd7SJerry (Fangzhi) Zuo uint32_t regaddr_cp_dma_src_addr_hi; 18213aabfcd7SJerry (Fangzhi) Zuo uint32_t regaddr_cp_dma_dst_addr; 18223aabfcd7SJerry (Fangzhi) Zuo uint32_t regaddr_cp_dma_dst_addr_hi; 18233aabfcd7SJerry (Fangzhi) Zuo uint32_t regaddr_cp_dma_command; 18243aabfcd7SJerry (Fangzhi) Zuo uint32_t regaddr_cp_status; 18253aabfcd7SJerry (Fangzhi) Zuo uint32_t regaddr_rlc_gpu_clock_32; 18263aabfcd7SJerry (Fangzhi) Zuo uint32_t rlc_gpu_timer_refclk; 18273aabfcd7SJerry (Fangzhi) Zuo uint8_t active_cu_per_sh; 18283aabfcd7SJerry (Fangzhi) Zuo uint8_t active_rb_per_se; 18293aabfcd7SJerry (Fangzhi) Zuo uint16_t gcgoldenoffset; 18303aabfcd7SJerry (Fangzhi) Zuo uint32_t rm21_sram_vmin_value; 18313aabfcd7SJerry (Fangzhi) Zuo }; 18321fadf42eSAlex Deucher 1833eaf02a4dSHuang Rui struct atom_gfx_info_v2_4 1834eaf02a4dSHuang Rui { 18356f68711dSAlex Deucher struct atom_common_table_header table_header; 18366f68711dSAlex Deucher uint8_t gfxip_min_ver; 18376f68711dSAlex Deucher uint8_t gfxip_max_ver; 1838eaf02a4dSHuang Rui uint8_t max_shader_engines; 1839eaf02a4dSHuang Rui uint8_t reserved; 1840eaf02a4dSHuang Rui uint8_t max_cu_per_sh; 1841eaf02a4dSHuang Rui uint8_t max_sh_per_se; 1842eaf02a4dSHuang Rui uint8_t max_backends_per_se; 1843eaf02a4dSHuang Rui uint8_t max_texture_channel_caches; 18446f68711dSAlex Deucher uint32_t regaddr_cp_dma_src_addr; 18456f68711dSAlex Deucher uint32_t regaddr_cp_dma_src_addr_hi; 18466f68711dSAlex Deucher uint32_t regaddr_cp_dma_dst_addr; 18476f68711dSAlex Deucher uint32_t regaddr_cp_dma_dst_addr_hi; 18486f68711dSAlex Deucher uint32_t regaddr_cp_dma_command; 18496f68711dSAlex Deucher uint32_t regaddr_cp_status; 18506f68711dSAlex Deucher uint32_t regaddr_rlc_gpu_clock_32; 18516f68711dSAlex Deucher uint32_t rlc_gpu_timer_refclk; 18526f68711dSAlex Deucher uint8_t active_cu_per_sh; 18536f68711dSAlex Deucher uint8_t active_rb_per_se; 18546f68711dSAlex Deucher uint16_t gcgoldenoffset; 18556f68711dSAlex Deucher uint16_t gc_num_gprs; 18566f68711dSAlex Deucher uint16_t gc_gsprim_buff_depth; 18576f68711dSAlex Deucher uint16_t gc_parameter_cache_depth; 18586f68711dSAlex Deucher uint16_t gc_wave_size; 18596f68711dSAlex Deucher uint16_t gc_max_waves_per_simd; 18606f68711dSAlex Deucher uint16_t gc_lds_size; 18616f68711dSAlex Deucher uint8_t gc_num_max_gs_thds; 18626f68711dSAlex Deucher uint8_t gc_gs_table_depth; 18636f68711dSAlex Deucher uint8_t gc_double_offchip_lds_buffer; 18646f68711dSAlex Deucher uint8_t gc_max_scratch_slots_per_cu; 1865f9fb22a2SShaoyun Liu uint32_t sram_rm_fuses_val; 1866f9fb22a2SShaoyun Liu uint32_t sram_custom_rm_fuses_val; 18676f68711dSAlex Deucher }; 18686f68711dSAlex Deucher 18697159a36eSHawking Zhang struct atom_gfx_info_v2_7 { 18707159a36eSHawking Zhang struct atom_common_table_header table_header; 18717159a36eSHawking Zhang uint8_t gfxip_min_ver; 18727159a36eSHawking Zhang uint8_t gfxip_max_ver; 18737159a36eSHawking Zhang uint8_t max_shader_engines; 18747159a36eSHawking Zhang uint8_t reserved; 18757159a36eSHawking Zhang uint8_t max_cu_per_sh; 18767159a36eSHawking Zhang uint8_t max_sh_per_se; 18777159a36eSHawking Zhang uint8_t max_backends_per_se; 18787159a36eSHawking Zhang uint8_t max_texture_channel_caches; 18797159a36eSHawking Zhang uint32_t regaddr_cp_dma_src_addr; 18807159a36eSHawking Zhang uint32_t regaddr_cp_dma_src_addr_hi; 18817159a36eSHawking Zhang uint32_t regaddr_cp_dma_dst_addr; 18827159a36eSHawking Zhang uint32_t regaddr_cp_dma_dst_addr_hi; 18837159a36eSHawking Zhang uint32_t regaddr_cp_dma_command; 18847159a36eSHawking Zhang uint32_t regaddr_cp_status; 18857159a36eSHawking Zhang uint32_t regaddr_rlc_gpu_clock_32; 18867159a36eSHawking Zhang uint32_t rlc_gpu_timer_refclk; 18877159a36eSHawking Zhang uint8_t active_cu_per_sh; 18887159a36eSHawking Zhang uint8_t active_rb_per_se; 18897159a36eSHawking Zhang uint16_t gcgoldenoffset; 18907159a36eSHawking Zhang uint16_t gc_num_gprs; 18917159a36eSHawking Zhang uint16_t gc_gsprim_buff_depth; 18927159a36eSHawking Zhang uint16_t gc_parameter_cache_depth; 18937159a36eSHawking Zhang uint16_t gc_wave_size; 18947159a36eSHawking Zhang uint16_t gc_max_waves_per_simd; 18957159a36eSHawking Zhang uint16_t gc_lds_size; 18967159a36eSHawking Zhang uint8_t gc_num_max_gs_thds; 18977159a36eSHawking Zhang uint8_t gc_gs_table_depth; 18987159a36eSHawking Zhang uint8_t gc_double_offchip_lds_buffer; 18997159a36eSHawking Zhang uint8_t gc_max_scratch_slots_per_cu; 19007159a36eSHawking Zhang uint32_t sram_rm_fuses_val; 19017159a36eSHawking Zhang uint32_t sram_custom_rm_fuses_val; 19027159a36eSHawking Zhang uint8_t cut_cu; 19037159a36eSHawking Zhang uint8_t active_cu_total; 19047159a36eSHawking Zhang uint8_t cu_reserved[2]; 19057159a36eSHawking Zhang uint32_t gc_config; 19067159a36eSHawking Zhang uint8_t inactive_cu_per_se[8]; 19077159a36eSHawking Zhang uint32_t reserved2[6]; 19087159a36eSHawking Zhang }; 19097159a36eSHawking Zhang 1910083e5ff6SHawking Zhang struct atom_gfx_info_v3_0 { 1911083e5ff6SHawking Zhang struct atom_common_table_header table_header; 1912083e5ff6SHawking Zhang uint8_t gfxip_min_ver; 1913083e5ff6SHawking Zhang uint8_t gfxip_max_ver; 1914083e5ff6SHawking Zhang uint8_t max_shader_engines; 1915083e5ff6SHawking Zhang uint8_t max_tile_pipes; 1916083e5ff6SHawking Zhang uint8_t max_cu_per_sh; 1917083e5ff6SHawking Zhang uint8_t max_sh_per_se; 1918083e5ff6SHawking Zhang uint8_t max_backends_per_se; 1919083e5ff6SHawking Zhang uint8_t max_texture_channel_caches; 1920083e5ff6SHawking Zhang uint32_t regaddr_lsdma_queue0_rb_rptr; 1921083e5ff6SHawking Zhang uint32_t regaddr_lsdma_queue0_rb_rptr_hi; 1922083e5ff6SHawking Zhang uint32_t regaddr_lsdma_queue0_rb_wptr; 1923083e5ff6SHawking Zhang uint32_t regaddr_lsdma_queue0_rb_wptr_hi; 1924083e5ff6SHawking Zhang uint32_t regaddr_lsdma_command; 1925083e5ff6SHawking Zhang uint32_t regaddr_lsdma_status; 1926083e5ff6SHawking Zhang uint32_t regaddr_golden_tsc_count_lower; 1927083e5ff6SHawking Zhang uint32_t golden_tsc_count_lower_refclk; 1928083e5ff6SHawking Zhang uint8_t active_wgp_per_se; 1929083e5ff6SHawking Zhang uint8_t active_rb_per_se; 1930083e5ff6SHawking Zhang uint8_t active_se; 1931083e5ff6SHawking Zhang uint8_t reserved1; 1932083e5ff6SHawking Zhang uint32_t sram_rm_fuses_val; 1933083e5ff6SHawking Zhang uint32_t sram_custom_rm_fuses_val; 1934083e5ff6SHawking Zhang uint32_t inactive_sa_mask; 1935083e5ff6SHawking Zhang uint32_t gc_config; 1936083e5ff6SHawking Zhang uint8_t inactive_wgp[16]; 1937083e5ff6SHawking Zhang uint8_t inactive_rb[16]; 1938083e5ff6SHawking Zhang uint32_t gdfll_as_wait_ctrl_val; 1939083e5ff6SHawking Zhang uint32_t gdfll_as_step_ctrl_val; 1940083e5ff6SHawking Zhang uint32_t reserved[8]; 1941083e5ff6SHawking Zhang }; 1942083e5ff6SHawking Zhang 19431fadf42eSAlex Deucher /* 19441fadf42eSAlex Deucher *************************************************************************** 19451fadf42eSAlex Deucher Data Table smu_info structure 19461fadf42eSAlex Deucher *************************************************************************** 19471fadf42eSAlex Deucher */ 19481fadf42eSAlex Deucher struct atom_smu_info_v3_1 19491fadf42eSAlex Deucher { 19501fadf42eSAlex Deucher struct atom_common_table_header table_header; 19511fadf42eSAlex Deucher uint8_t smuip_min_ver; 19521fadf42eSAlex Deucher uint8_t smuip_max_ver; 19531fadf42eSAlex Deucher uint8_t smu_rsd1; 19541fadf42eSAlex Deucher uint8_t gpuclk_ss_mode; // enum of atom_spread_spectrum_mode 19551fadf42eSAlex Deucher uint16_t sclk_ss_percentage; 19561fadf42eSAlex Deucher uint16_t sclk_ss_rate_10hz; 19571fadf42eSAlex Deucher uint16_t gpuclk_ss_percentage; // in unit of 0.001% 19581fadf42eSAlex Deucher uint16_t gpuclk_ss_rate_10hz; 19591fadf42eSAlex Deucher uint32_t core_refclk_10khz; 19601fadf42eSAlex Deucher uint8_t ac_dc_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for AC/DC switching, =0xff means invalid 19611fadf42eSAlex Deucher uint8_t ac_dc_polarity; // GPIO polarity for AC/DC switching 19621fadf42eSAlex Deucher uint8_t vr0hot_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for VR0 HOT event, =0xff means invalid 19631fadf42eSAlex Deucher uint8_t vr0hot_polarity; // GPIO polarity for VR0 HOT event 19641fadf42eSAlex Deucher uint8_t vr1hot_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for VR1 HOT event , =0xff means invalid 19651fadf42eSAlex Deucher uint8_t vr1hot_polarity; // GPIO polarity for VR1 HOT event 19661fadf42eSAlex Deucher uint8_t fw_ctf_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for CTF, =0xff means invalid 19671fadf42eSAlex Deucher uint8_t fw_ctf_polarity; // GPIO polarity for CTF 19681fadf42eSAlex Deucher }; 19691fadf42eSAlex Deucher 19703aabfcd7SJerry (Fangzhi) Zuo struct atom_smu_info_v3_2 { 19713aabfcd7SJerry (Fangzhi) Zuo struct atom_common_table_header table_header; 19723aabfcd7SJerry (Fangzhi) Zuo uint8_t smuip_min_ver; 19733aabfcd7SJerry (Fangzhi) Zuo uint8_t smuip_max_ver; 19743aabfcd7SJerry (Fangzhi) Zuo uint8_t smu_rsd1; 19753aabfcd7SJerry (Fangzhi) Zuo uint8_t gpuclk_ss_mode; 19763aabfcd7SJerry (Fangzhi) Zuo uint16_t sclk_ss_percentage; 19773aabfcd7SJerry (Fangzhi) Zuo uint16_t sclk_ss_rate_10hz; 19783aabfcd7SJerry (Fangzhi) Zuo uint16_t gpuclk_ss_percentage; // in unit of 0.001% 19793aabfcd7SJerry (Fangzhi) Zuo uint16_t gpuclk_ss_rate_10hz; 19803aabfcd7SJerry (Fangzhi) Zuo uint32_t core_refclk_10khz; 19813aabfcd7SJerry (Fangzhi) Zuo uint8_t ac_dc_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for AC/DC switching, =0xff means invalid 19823aabfcd7SJerry (Fangzhi) Zuo uint8_t ac_dc_polarity; // GPIO polarity for AC/DC switching 19833aabfcd7SJerry (Fangzhi) Zuo uint8_t vr0hot_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for VR0 HOT event, =0xff means invalid 19843aabfcd7SJerry (Fangzhi) Zuo uint8_t vr0hot_polarity; // GPIO polarity for VR0 HOT event 19853aabfcd7SJerry (Fangzhi) Zuo uint8_t vr1hot_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for VR1 HOT event , =0xff means invalid 19863aabfcd7SJerry (Fangzhi) Zuo uint8_t vr1hot_polarity; // GPIO polarity for VR1 HOT event 19873aabfcd7SJerry (Fangzhi) Zuo uint8_t fw_ctf_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for CTF, =0xff means invalid 19883aabfcd7SJerry (Fangzhi) Zuo uint8_t fw_ctf_polarity; // GPIO polarity for CTF 19893aabfcd7SJerry (Fangzhi) Zuo uint8_t pcc_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for PCC, =0xff means invalid 19903aabfcd7SJerry (Fangzhi) Zuo uint8_t pcc_gpio_polarity; // GPIO polarity for CTF 19913aabfcd7SJerry (Fangzhi) Zuo uint16_t smugoldenoffset; 19923aabfcd7SJerry (Fangzhi) Zuo uint32_t gpupll_vco_freq_10khz; 19933aabfcd7SJerry (Fangzhi) Zuo uint32_t bootup_smnclk_10khz; 19943aabfcd7SJerry (Fangzhi) Zuo uint32_t bootup_socclk_10khz; 19953aabfcd7SJerry (Fangzhi) Zuo uint32_t bootup_mp0clk_10khz; 19963aabfcd7SJerry (Fangzhi) Zuo uint32_t bootup_mp1clk_10khz; 19973aabfcd7SJerry (Fangzhi) Zuo uint32_t bootup_lclk_10khz; 19983aabfcd7SJerry (Fangzhi) Zuo uint32_t bootup_dcefclk_10khz; 19993aabfcd7SJerry (Fangzhi) Zuo uint32_t ctf_threshold_override_value; 20003aabfcd7SJerry (Fangzhi) Zuo uint32_t reserved[5]; 20013aabfcd7SJerry (Fangzhi) Zuo }; 20023aabfcd7SJerry (Fangzhi) Zuo 20033aabfcd7SJerry (Fangzhi) Zuo struct atom_smu_info_v3_3 { 20043aabfcd7SJerry (Fangzhi) Zuo struct atom_common_table_header table_header; 20053aabfcd7SJerry (Fangzhi) Zuo uint8_t smuip_min_ver; 20063aabfcd7SJerry (Fangzhi) Zuo uint8_t smuip_max_ver; 200786a484bdSLeo Li uint8_t waflclk_ss_mode; 20083aabfcd7SJerry (Fangzhi) Zuo uint8_t gpuclk_ss_mode; 20093aabfcd7SJerry (Fangzhi) Zuo uint16_t sclk_ss_percentage; 20103aabfcd7SJerry (Fangzhi) Zuo uint16_t sclk_ss_rate_10hz; 20113aabfcd7SJerry (Fangzhi) Zuo uint16_t gpuclk_ss_percentage; // in unit of 0.001% 20123aabfcd7SJerry (Fangzhi) Zuo uint16_t gpuclk_ss_rate_10hz; 20133aabfcd7SJerry (Fangzhi) Zuo uint32_t core_refclk_10khz; 20143aabfcd7SJerry (Fangzhi) Zuo uint8_t ac_dc_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for AC/DC switching, =0xff means invalid 20153aabfcd7SJerry (Fangzhi) Zuo uint8_t ac_dc_polarity; // GPIO polarity for AC/DC switching 20163aabfcd7SJerry (Fangzhi) Zuo uint8_t vr0hot_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for VR0 HOT event, =0xff means invalid 20173aabfcd7SJerry (Fangzhi) Zuo uint8_t vr0hot_polarity; // GPIO polarity for VR0 HOT event 20183aabfcd7SJerry (Fangzhi) Zuo uint8_t vr1hot_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for VR1 HOT event , =0xff means invalid 20193aabfcd7SJerry (Fangzhi) Zuo uint8_t vr1hot_polarity; // GPIO polarity for VR1 HOT event 20203aabfcd7SJerry (Fangzhi) Zuo uint8_t fw_ctf_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for CTF, =0xff means invalid 20213aabfcd7SJerry (Fangzhi) Zuo uint8_t fw_ctf_polarity; // GPIO polarity for CTF 20223aabfcd7SJerry (Fangzhi) Zuo uint8_t pcc_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for PCC, =0xff means invalid 20233aabfcd7SJerry (Fangzhi) Zuo uint8_t pcc_gpio_polarity; // GPIO polarity for CTF 20243aabfcd7SJerry (Fangzhi) Zuo uint16_t smugoldenoffset; 20253aabfcd7SJerry (Fangzhi) Zuo uint32_t gpupll_vco_freq_10khz; 20263aabfcd7SJerry (Fangzhi) Zuo uint32_t bootup_smnclk_10khz; 20273aabfcd7SJerry (Fangzhi) Zuo uint32_t bootup_socclk_10khz; 20283aabfcd7SJerry (Fangzhi) Zuo uint32_t bootup_mp0clk_10khz; 20293aabfcd7SJerry (Fangzhi) Zuo uint32_t bootup_mp1clk_10khz; 20303aabfcd7SJerry (Fangzhi) Zuo uint32_t bootup_lclk_10khz; 20313aabfcd7SJerry (Fangzhi) Zuo uint32_t bootup_dcefclk_10khz; 20323aabfcd7SJerry (Fangzhi) Zuo uint32_t ctf_threshold_override_value; 20333aabfcd7SJerry (Fangzhi) Zuo uint32_t syspll3_0_vco_freq_10khz; 20343aabfcd7SJerry (Fangzhi) Zuo uint32_t syspll3_1_vco_freq_10khz; 20353aabfcd7SJerry (Fangzhi) Zuo uint32_t bootup_fclk_10khz; 20363aabfcd7SJerry (Fangzhi) Zuo uint32_t bootup_waflclk_10khz; 203786a484bdSLeo Li uint32_t smu_info_caps; 203886a484bdSLeo Li uint16_t waflclk_ss_percentage; // in unit of 0.001% 203986a484bdSLeo Li uint16_t smuinitoffset; 204086a484bdSLeo Li uint32_t reserved; 20413aabfcd7SJerry (Fangzhi) Zuo }; 20423aabfcd7SJerry (Fangzhi) Zuo 2043b801d8adSAurabindo Pillai struct atom_smu_info_v3_5 2044b801d8adSAurabindo Pillai { 2045b801d8adSAurabindo Pillai struct atom_common_table_header table_header; 2046b801d8adSAurabindo Pillai uint8_t smuip_min_ver; 2047b801d8adSAurabindo Pillai uint8_t smuip_max_ver; 2048b801d8adSAurabindo Pillai uint8_t waflclk_ss_mode; 2049b801d8adSAurabindo Pillai uint8_t gpuclk_ss_mode; 2050b801d8adSAurabindo Pillai uint16_t sclk_ss_percentage; 2051b801d8adSAurabindo Pillai uint16_t sclk_ss_rate_10hz; 2052b801d8adSAurabindo Pillai uint16_t gpuclk_ss_percentage; // in unit of 0.001% 2053b801d8adSAurabindo Pillai uint16_t gpuclk_ss_rate_10hz; 2054b801d8adSAurabindo Pillai uint32_t core_refclk_10khz; 2055b801d8adSAurabindo Pillai uint32_t syspll0_1_vco_freq_10khz; 2056b801d8adSAurabindo Pillai uint32_t syspll0_2_vco_freq_10khz; 2057b801d8adSAurabindo Pillai uint8_t pcc_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for PCC, =0xff means invalid 2058b801d8adSAurabindo Pillai uint8_t pcc_gpio_polarity; // GPIO polarity for CTF 2059b801d8adSAurabindo Pillai uint16_t smugoldenoffset; 2060b801d8adSAurabindo Pillai uint32_t syspll0_0_vco_freq_10khz; 2061b801d8adSAurabindo Pillai uint32_t bootup_smnclk_10khz; 2062b801d8adSAurabindo Pillai uint32_t bootup_socclk_10khz; 2063b801d8adSAurabindo Pillai uint32_t bootup_mp0clk_10khz; 2064b801d8adSAurabindo Pillai uint32_t bootup_mp1clk_10khz; 2065b801d8adSAurabindo Pillai uint32_t bootup_lclk_10khz; 2066b801d8adSAurabindo Pillai uint32_t bootup_dcefclk_10khz; 2067b801d8adSAurabindo Pillai uint32_t ctf_threshold_override_value; 2068b801d8adSAurabindo Pillai uint32_t syspll3_0_vco_freq_10khz; 2069b801d8adSAurabindo Pillai uint32_t syspll3_1_vco_freq_10khz; 2070b801d8adSAurabindo Pillai uint32_t bootup_fclk_10khz; 2071b801d8adSAurabindo Pillai uint32_t bootup_waflclk_10khz; 2072b801d8adSAurabindo Pillai uint32_t smu_info_caps; 2073b801d8adSAurabindo Pillai uint16_t waflclk_ss_percentage; // in unit of 0.001% 2074b801d8adSAurabindo Pillai uint16_t smuinitoffset; 2075b801d8adSAurabindo Pillai uint32_t bootup_dprefclk_10khz; 2076b801d8adSAurabindo Pillai uint32_t bootup_usbclk_10khz; 2077b801d8adSAurabindo Pillai uint32_t smb_slave_address; 2078b801d8adSAurabindo Pillai uint32_t cg_fdo_ctrl0_val; 2079b801d8adSAurabindo Pillai uint32_t cg_fdo_ctrl1_val; 2080b801d8adSAurabindo Pillai uint32_t cg_fdo_ctrl2_val; 2081b801d8adSAurabindo Pillai uint32_t gdfll_as_wait_ctrl_val; 2082b801d8adSAurabindo Pillai uint32_t gdfll_as_step_ctrl_val; 2083b801d8adSAurabindo Pillai uint32_t bootup_dtbclk_10khz; 2084b801d8adSAurabindo Pillai uint32_t fclk_syspll_refclk_10khz; 2085b801d8adSAurabindo Pillai uint32_t smusvi_svc0_val; 2086b801d8adSAurabindo Pillai uint32_t smusvi_svc1_val; 2087b801d8adSAurabindo Pillai uint32_t smusvi_svd0_val; 2088b801d8adSAurabindo Pillai uint32_t smusvi_svd1_val; 2089b801d8adSAurabindo Pillai uint32_t smusvi_svt0_val; 2090b801d8adSAurabindo Pillai uint32_t smusvi_svt1_val; 2091b801d8adSAurabindo Pillai uint32_t cg_tach_ctrl_val; 2092b801d8adSAurabindo Pillai uint32_t cg_pump_ctrl1_val; 2093b801d8adSAurabindo Pillai uint32_t cg_pump_tach_ctrl_val; 2094b801d8adSAurabindo Pillai uint32_t thm_ctf_delay_val; 2095b801d8adSAurabindo Pillai uint32_t thm_thermal_int_ctrl_val; 2096b801d8adSAurabindo Pillai uint32_t thm_tmon_config_val; 2097b801d8adSAurabindo Pillai uint32_t reserved[16]; 2098b801d8adSAurabindo Pillai }; 2099b801d8adSAurabindo Pillai 210021c8685bSHawking Zhang struct atom_smu_info_v3_6 210121c8685bSHawking Zhang { 210221c8685bSHawking Zhang struct atom_common_table_header table_header; 210321c8685bSHawking Zhang uint8_t smuip_min_ver; 210421c8685bSHawking Zhang uint8_t smuip_max_ver; 210521c8685bSHawking Zhang uint8_t waflclk_ss_mode; 210621c8685bSHawking Zhang uint8_t gpuclk_ss_mode; 210721c8685bSHawking Zhang uint16_t sclk_ss_percentage; 210821c8685bSHawking Zhang uint16_t sclk_ss_rate_10hz; 210921c8685bSHawking Zhang uint16_t gpuclk_ss_percentage; 211021c8685bSHawking Zhang uint16_t gpuclk_ss_rate_10hz; 211121c8685bSHawking Zhang uint32_t core_refclk_10khz; 211221c8685bSHawking Zhang uint32_t syspll0_1_vco_freq_10khz; 211321c8685bSHawking Zhang uint32_t syspll0_2_vco_freq_10khz; 211421c8685bSHawking Zhang uint8_t pcc_gpio_bit; 211521c8685bSHawking Zhang uint8_t pcc_gpio_polarity; 211621c8685bSHawking Zhang uint16_t smugoldenoffset; 211721c8685bSHawking Zhang uint32_t syspll0_0_vco_freq_10khz; 211821c8685bSHawking Zhang uint32_t bootup_smnclk_10khz; 211921c8685bSHawking Zhang uint32_t bootup_socclk_10khz; 212021c8685bSHawking Zhang uint32_t bootup_mp0clk_10khz; 212121c8685bSHawking Zhang uint32_t bootup_mp1clk_10khz; 212221c8685bSHawking Zhang uint32_t bootup_lclk_10khz; 212321c8685bSHawking Zhang uint32_t bootup_dxioclk_10khz; 212421c8685bSHawking Zhang uint32_t ctf_threshold_override_value; 212521c8685bSHawking Zhang uint32_t syspll3_0_vco_freq_10khz; 212621c8685bSHawking Zhang uint32_t syspll3_1_vco_freq_10khz; 212721c8685bSHawking Zhang uint32_t bootup_fclk_10khz; 212821c8685bSHawking Zhang uint32_t bootup_waflclk_10khz; 212921c8685bSHawking Zhang uint32_t smu_info_caps; 213021c8685bSHawking Zhang uint16_t waflclk_ss_percentage; 213121c8685bSHawking Zhang uint16_t smuinitoffset; 213221c8685bSHawking Zhang uint32_t bootup_gfxavsclk_10khz; 213321c8685bSHawking Zhang uint32_t bootup_mpioclk_10khz; 213421c8685bSHawking Zhang uint32_t smb_slave_address; 213521c8685bSHawking Zhang uint32_t cg_fdo_ctrl0_val; 213621c8685bSHawking Zhang uint32_t cg_fdo_ctrl1_val; 213721c8685bSHawking Zhang uint32_t cg_fdo_ctrl2_val; 213821c8685bSHawking Zhang uint32_t gdfll_as_wait_ctrl_val; 213921c8685bSHawking Zhang uint32_t gdfll_as_step_ctrl_val; 214021c8685bSHawking Zhang uint32_t reserved_clk; 214121c8685bSHawking Zhang uint32_t fclk_syspll_refclk_10khz; 214221c8685bSHawking Zhang uint32_t smusvi_svc0_val; 214321c8685bSHawking Zhang uint32_t smusvi_svc1_val; 214421c8685bSHawking Zhang uint32_t smusvi_svd0_val; 214521c8685bSHawking Zhang uint32_t smusvi_svd1_val; 214621c8685bSHawking Zhang uint32_t smusvi_svt0_val; 214721c8685bSHawking Zhang uint32_t smusvi_svt1_val; 214821c8685bSHawking Zhang uint32_t cg_tach_ctrl_val; 214921c8685bSHawking Zhang uint32_t cg_pump_ctrl1_val; 215021c8685bSHawking Zhang uint32_t cg_pump_tach_ctrl_val; 215121c8685bSHawking Zhang uint32_t thm_ctf_delay_val; 215221c8685bSHawking Zhang uint32_t thm_thermal_int_ctrl_val; 215321c8685bSHawking Zhang uint32_t thm_tmon_config_val; 215421c8685bSHawking Zhang uint32_t bootup_vclk_10khz; 215521c8685bSHawking Zhang uint32_t bootup_dclk_10khz; 215621c8685bSHawking Zhang uint32_t smu_gpiopad_pu_en_val; 215721c8685bSHawking Zhang uint32_t smu_gpiopad_pd_en_val; 215821c8685bSHawking Zhang uint32_t reserved[12]; 215921c8685bSHawking Zhang }; 216021c8685bSHawking Zhang 216121c8685bSHawking Zhang struct atom_smu_info_v4_0 { 216221c8685bSHawking Zhang struct atom_common_table_header table_header; 216321c8685bSHawking Zhang uint32_t bootup_gfxclk_bypass_10khz; 216421c8685bSHawking Zhang uint32_t bootup_usrclk_10khz; 216521c8685bSHawking Zhang uint32_t bootup_csrclk_10khz; 216621c8685bSHawking Zhang uint32_t core_refclk_10khz; 216721c8685bSHawking Zhang uint32_t syspll1_vco_freq_10khz; 216821c8685bSHawking Zhang uint32_t syspll2_vco_freq_10khz; 216921c8685bSHawking Zhang uint8_t pcc_gpio_bit; 217021c8685bSHawking Zhang uint8_t pcc_gpio_polarity; 217121c8685bSHawking Zhang uint16_t bootup_vddusr_mv; 217221c8685bSHawking Zhang uint32_t syspll0_vco_freq_10khz; 217321c8685bSHawking Zhang uint32_t bootup_smnclk_10khz; 217421c8685bSHawking Zhang uint32_t bootup_socclk_10khz; 217521c8685bSHawking Zhang uint32_t bootup_mp0clk_10khz; 217621c8685bSHawking Zhang uint32_t bootup_mp1clk_10khz; 217721c8685bSHawking Zhang uint32_t bootup_lclk_10khz; 217821c8685bSHawking Zhang uint32_t bootup_dcefclk_10khz; 217921c8685bSHawking Zhang uint32_t ctf_threshold_override_value; 218021c8685bSHawking Zhang uint32_t syspll3_vco_freq_10khz; 218121c8685bSHawking Zhang uint32_t mm_syspll_vco_freq_10khz; 218221c8685bSHawking Zhang uint32_t bootup_fclk_10khz; 218321c8685bSHawking Zhang uint32_t bootup_waflclk_10khz; 218421c8685bSHawking Zhang uint32_t smu_info_caps; 218521c8685bSHawking Zhang uint16_t waflclk_ss_percentage; 218621c8685bSHawking Zhang uint16_t smuinitoffset; 218721c8685bSHawking Zhang uint32_t bootup_dprefclk_10khz; 218821c8685bSHawking Zhang uint32_t bootup_usbclk_10khz; 218921c8685bSHawking Zhang uint32_t smb_slave_address; 219021c8685bSHawking Zhang uint32_t cg_fdo_ctrl0_val; 219121c8685bSHawking Zhang uint32_t cg_fdo_ctrl1_val; 219221c8685bSHawking Zhang uint32_t cg_fdo_ctrl2_val; 219321c8685bSHawking Zhang uint32_t gdfll_as_wait_ctrl_val; 219421c8685bSHawking Zhang uint32_t gdfll_as_step_ctrl_val; 219521c8685bSHawking Zhang uint32_t bootup_dtbclk_10khz; 219621c8685bSHawking Zhang uint32_t fclk_syspll_refclk_10khz; 219721c8685bSHawking Zhang uint32_t smusvi_svc0_val; 219821c8685bSHawking Zhang uint32_t smusvi_svc1_val; 219921c8685bSHawking Zhang uint32_t smusvi_svd0_val; 220021c8685bSHawking Zhang uint32_t smusvi_svd1_val; 220121c8685bSHawking Zhang uint32_t smusvi_svt0_val; 220221c8685bSHawking Zhang uint32_t smusvi_svt1_val; 220321c8685bSHawking Zhang uint32_t cg_tach_ctrl_val; 220421c8685bSHawking Zhang uint32_t cg_pump_ctrl1_val; 220521c8685bSHawking Zhang uint32_t cg_pump_tach_ctrl_val; 220621c8685bSHawking Zhang uint32_t thm_ctf_delay_val; 220721c8685bSHawking Zhang uint32_t thm_thermal_int_ctrl_val; 220821c8685bSHawking Zhang uint32_t thm_tmon_config_val; 220921c8685bSHawking Zhang uint32_t smbus_timing_cntrl0_val; 221021c8685bSHawking Zhang uint32_t smbus_timing_cntrl1_val; 221121c8685bSHawking Zhang uint32_t smbus_timing_cntrl2_val; 221221c8685bSHawking Zhang uint32_t pwr_disp_timer_global_control_val; 221321c8685bSHawking Zhang uint32_t bootup_mpioclk_10khz; 221421c8685bSHawking Zhang uint32_t bootup_dclk0_10khz; 221521c8685bSHawking Zhang uint32_t bootup_vclk0_10khz; 221621c8685bSHawking Zhang uint32_t bootup_dclk1_10khz; 221721c8685bSHawking Zhang uint32_t bootup_vclk1_10khz; 221821c8685bSHawking Zhang uint32_t bootup_baco400clk_10khz; 221921c8685bSHawking Zhang uint32_t bootup_baco1200clk_bypass_10khz; 222021c8685bSHawking Zhang uint32_t bootup_baco700clk_bypass_10khz; 222121c8685bSHawking Zhang uint32_t reserved[16]; 222221c8685bSHawking Zhang }; 222321c8685bSHawking Zhang 2224f3f8864dSEvan Quan /* 2225f3f8864dSEvan Quan *************************************************************************** 2226f3f8864dSEvan Quan Data Table smc_dpm_info structure 2227f3f8864dSEvan Quan *************************************************************************** 2228f3f8864dSEvan Quan */ 2229f3f8864dSEvan Quan struct atom_smc_dpm_info_v4_1 2230f3f8864dSEvan Quan { 2231f3f8864dSEvan Quan struct atom_common_table_header table_header; 2232f3f8864dSEvan Quan uint8_t liquid1_i2c_address; 2233f3f8864dSEvan Quan uint8_t liquid2_i2c_address; 2234f3f8864dSEvan Quan uint8_t vr_i2c_address; 2235f3f8864dSEvan Quan uint8_t plx_i2c_address; 2236f3f8864dSEvan Quan 2237f3f8864dSEvan Quan uint8_t liquid_i2c_linescl; 2238f3f8864dSEvan Quan uint8_t liquid_i2c_linesda; 2239f3f8864dSEvan Quan uint8_t vr_i2c_linescl; 2240f3f8864dSEvan Quan uint8_t vr_i2c_linesda; 2241f3f8864dSEvan Quan 2242f3f8864dSEvan Quan uint8_t plx_i2c_linescl; 2243f3f8864dSEvan Quan uint8_t plx_i2c_linesda; 2244f3f8864dSEvan Quan uint8_t vrsensorpresent; 2245f3f8864dSEvan Quan uint8_t liquidsensorpresent; 2246f3f8864dSEvan Quan 2247f3f8864dSEvan Quan uint16_t maxvoltagestepgfx; 2248f3f8864dSEvan Quan uint16_t maxvoltagestepsoc; 2249f3f8864dSEvan Quan 2250f3f8864dSEvan Quan uint8_t vddgfxvrmapping; 2251f3f8864dSEvan Quan uint8_t vddsocvrmapping; 2252f3f8864dSEvan Quan uint8_t vddmem0vrmapping; 2253f3f8864dSEvan Quan uint8_t vddmem1vrmapping; 2254f3f8864dSEvan Quan 2255f3f8864dSEvan Quan uint8_t gfxulvphasesheddingmask; 2256f3f8864dSEvan Quan uint8_t soculvphasesheddingmask; 2257f3f8864dSEvan Quan uint8_t padding8_v[2]; 2258f3f8864dSEvan Quan 2259f3f8864dSEvan Quan uint16_t gfxmaxcurrent; 2260f3f8864dSEvan Quan uint8_t gfxoffset; 2261f3f8864dSEvan Quan uint8_t padding_telemetrygfx; 2262f3f8864dSEvan Quan 2263f3f8864dSEvan Quan uint16_t socmaxcurrent; 2264f3f8864dSEvan Quan uint8_t socoffset; 2265f3f8864dSEvan Quan uint8_t padding_telemetrysoc; 2266f3f8864dSEvan Quan 2267f3f8864dSEvan Quan uint16_t mem0maxcurrent; 2268f3f8864dSEvan Quan uint8_t mem0offset; 2269f3f8864dSEvan Quan uint8_t padding_telemetrymem0; 2270f3f8864dSEvan Quan 2271f3f8864dSEvan Quan uint16_t mem1maxcurrent; 2272f3f8864dSEvan Quan uint8_t mem1offset; 2273f3f8864dSEvan Quan uint8_t padding_telemetrymem1; 2274f3f8864dSEvan Quan 2275f3f8864dSEvan Quan uint8_t acdcgpio; 2276f3f8864dSEvan Quan uint8_t acdcpolarity; 2277f3f8864dSEvan Quan uint8_t vr0hotgpio; 2278f3f8864dSEvan Quan uint8_t vr0hotpolarity; 2279f3f8864dSEvan Quan 2280f3f8864dSEvan Quan uint8_t vr1hotgpio; 2281f3f8864dSEvan Quan uint8_t vr1hotpolarity; 2282f3f8864dSEvan Quan uint8_t padding1; 2283f3f8864dSEvan Quan uint8_t padding2; 2284f3f8864dSEvan Quan 2285f3f8864dSEvan Quan uint8_t ledpin0; 2286f3f8864dSEvan Quan uint8_t ledpin1; 2287f3f8864dSEvan Quan uint8_t ledpin2; 2288f3f8864dSEvan Quan uint8_t padding8_4; 2289f3f8864dSEvan Quan 22905d41535cSKenneth Feng uint8_t pllgfxclkspreadenabled; 22915d41535cSKenneth Feng uint8_t pllgfxclkspreadpercent; 22925d41535cSKenneth Feng uint16_t pllgfxclkspreadfreq; 2293f3f8864dSEvan Quan 2294f3f8864dSEvan Quan uint8_t uclkspreadenabled; 2295f3f8864dSEvan Quan uint8_t uclkspreadpercent; 2296f3f8864dSEvan Quan uint16_t uclkspreadfreq; 2297f3f8864dSEvan Quan 2298f3f8864dSEvan Quan uint8_t socclkspreadenabled; 2299f3f8864dSEvan Quan uint8_t socclkspreadpercent; 2300f3f8864dSEvan Quan uint16_t socclkspreadfreq; 2301f3f8864dSEvan Quan 23025d41535cSKenneth Feng uint8_t acggfxclkspreadenabled; 23035d41535cSKenneth Feng uint8_t acggfxclkspreadpercent; 23045d41535cSKenneth Feng uint16_t acggfxclkspreadfreq; 23055d41535cSKenneth Feng 230677564c9dSEvan Quan uint8_t Vr2_I2C_address; 230777564c9dSEvan Quan uint8_t padding_vr2[3]; 230877564c9dSEvan Quan 230977564c9dSEvan Quan uint32_t boardreserved[9]; 2310f3f8864dSEvan Quan }; 23111fadf42eSAlex Deucher 23121fadf42eSAlex Deucher /* 23137a0d7089SEvan Quan *************************************************************************** 23147a0d7089SEvan Quan Data Table smc_dpm_info structure 23157a0d7089SEvan Quan *************************************************************************** 23167a0d7089SEvan Quan */ 23177a0d7089SEvan Quan struct atom_smc_dpm_info_v4_3 23187a0d7089SEvan Quan { 23197a0d7089SEvan Quan struct atom_common_table_header table_header; 23207a0d7089SEvan Quan uint8_t liquid1_i2c_address; 23217a0d7089SEvan Quan uint8_t liquid2_i2c_address; 23227a0d7089SEvan Quan uint8_t vr_i2c_address; 23237a0d7089SEvan Quan uint8_t plx_i2c_address; 23247a0d7089SEvan Quan 23257a0d7089SEvan Quan uint8_t liquid_i2c_linescl; 23267a0d7089SEvan Quan uint8_t liquid_i2c_linesda; 23277a0d7089SEvan Quan uint8_t vr_i2c_linescl; 23287a0d7089SEvan Quan uint8_t vr_i2c_linesda; 23297a0d7089SEvan Quan 23307a0d7089SEvan Quan uint8_t plx_i2c_linescl; 23317a0d7089SEvan Quan uint8_t plx_i2c_linesda; 23327a0d7089SEvan Quan uint8_t vrsensorpresent; 23337a0d7089SEvan Quan uint8_t liquidsensorpresent; 23347a0d7089SEvan Quan 23357a0d7089SEvan Quan uint16_t maxvoltagestepgfx; 23367a0d7089SEvan Quan uint16_t maxvoltagestepsoc; 23377a0d7089SEvan Quan 23387a0d7089SEvan Quan uint8_t vddgfxvrmapping; 23397a0d7089SEvan Quan uint8_t vddsocvrmapping; 23407a0d7089SEvan Quan uint8_t vddmem0vrmapping; 23417a0d7089SEvan Quan uint8_t vddmem1vrmapping; 23427a0d7089SEvan Quan 23437a0d7089SEvan Quan uint8_t gfxulvphasesheddingmask; 23447a0d7089SEvan Quan uint8_t soculvphasesheddingmask; 23457a0d7089SEvan Quan uint8_t externalsensorpresent; 23467a0d7089SEvan Quan uint8_t padding8_v; 23477a0d7089SEvan Quan 23487a0d7089SEvan Quan uint16_t gfxmaxcurrent; 23497a0d7089SEvan Quan uint8_t gfxoffset; 23507a0d7089SEvan Quan uint8_t padding_telemetrygfx; 23517a0d7089SEvan Quan 23527a0d7089SEvan Quan uint16_t socmaxcurrent; 23537a0d7089SEvan Quan uint8_t socoffset; 23547a0d7089SEvan Quan uint8_t padding_telemetrysoc; 23557a0d7089SEvan Quan 23567a0d7089SEvan Quan uint16_t mem0maxcurrent; 23577a0d7089SEvan Quan uint8_t mem0offset; 23587a0d7089SEvan Quan uint8_t padding_telemetrymem0; 23597a0d7089SEvan Quan 23607a0d7089SEvan Quan uint16_t mem1maxcurrent; 23617a0d7089SEvan Quan uint8_t mem1offset; 23627a0d7089SEvan Quan uint8_t padding_telemetrymem1; 23637a0d7089SEvan Quan 23647a0d7089SEvan Quan uint8_t acdcgpio; 23657a0d7089SEvan Quan uint8_t acdcpolarity; 23667a0d7089SEvan Quan uint8_t vr0hotgpio; 23677a0d7089SEvan Quan uint8_t vr0hotpolarity; 23687a0d7089SEvan Quan 23697a0d7089SEvan Quan uint8_t vr1hotgpio; 23707a0d7089SEvan Quan uint8_t vr1hotpolarity; 23717a0d7089SEvan Quan uint8_t padding1; 23727a0d7089SEvan Quan uint8_t padding2; 23737a0d7089SEvan Quan 23747a0d7089SEvan Quan uint8_t ledpin0; 23757a0d7089SEvan Quan uint8_t ledpin1; 23767a0d7089SEvan Quan uint8_t ledpin2; 23777a0d7089SEvan Quan uint8_t padding8_4; 23787a0d7089SEvan Quan 23797a0d7089SEvan Quan uint8_t pllgfxclkspreadenabled; 23807a0d7089SEvan Quan uint8_t pllgfxclkspreadpercent; 23817a0d7089SEvan Quan uint16_t pllgfxclkspreadfreq; 23827a0d7089SEvan Quan 23837a0d7089SEvan Quan uint8_t uclkspreadenabled; 23847a0d7089SEvan Quan uint8_t uclkspreadpercent; 23857a0d7089SEvan Quan uint16_t uclkspreadfreq; 23867a0d7089SEvan Quan 23877a0d7089SEvan Quan uint8_t fclkspreadenabled; 23887a0d7089SEvan Quan uint8_t fclkspreadpercent; 23897a0d7089SEvan Quan uint16_t fclkspreadfreq; 23907a0d7089SEvan Quan 23917a0d7089SEvan Quan uint8_t fllgfxclkspreadenabled; 23927a0d7089SEvan Quan uint8_t fllgfxclkspreadpercent; 23937a0d7089SEvan Quan uint16_t fllgfxclkspreadfreq; 23947a0d7089SEvan Quan 23957a0d7089SEvan Quan uint32_t boardreserved[10]; 23967a0d7089SEvan Quan }; 23977a0d7089SEvan Quan 2398d579fd82SEvan Quan struct smudpm_i2ccontrollerconfig_t { 2399d579fd82SEvan Quan uint32_t enabled; 2400d579fd82SEvan Quan uint32_t slaveaddress; 2401d579fd82SEvan Quan uint32_t controllerport; 2402d579fd82SEvan Quan uint32_t controllername; 2403d579fd82SEvan Quan uint32_t thermalthrottler; 2404d579fd82SEvan Quan uint32_t i2cprotocol; 2405d579fd82SEvan Quan uint32_t i2cspeed; 2406d579fd82SEvan Quan }; 2407d579fd82SEvan Quan 2408d579fd82SEvan Quan struct atom_smc_dpm_info_v4_4 2409d579fd82SEvan Quan { 2410d579fd82SEvan Quan struct atom_common_table_header table_header; 2411d579fd82SEvan Quan uint32_t i2c_padding[3]; 2412d579fd82SEvan Quan 2413d579fd82SEvan Quan uint16_t maxvoltagestepgfx; 2414d579fd82SEvan Quan uint16_t maxvoltagestepsoc; 2415d579fd82SEvan Quan 2416d579fd82SEvan Quan uint8_t vddgfxvrmapping; 2417d579fd82SEvan Quan uint8_t vddsocvrmapping; 2418d579fd82SEvan Quan uint8_t vddmem0vrmapping; 2419d579fd82SEvan Quan uint8_t vddmem1vrmapping; 2420d579fd82SEvan Quan 2421d579fd82SEvan Quan uint8_t gfxulvphasesheddingmask; 2422d579fd82SEvan Quan uint8_t soculvphasesheddingmask; 2423d579fd82SEvan Quan uint8_t externalsensorpresent; 2424d579fd82SEvan Quan uint8_t padding8_v; 2425d579fd82SEvan Quan 2426d579fd82SEvan Quan uint16_t gfxmaxcurrent; 2427d579fd82SEvan Quan uint8_t gfxoffset; 2428d579fd82SEvan Quan uint8_t padding_telemetrygfx; 2429d579fd82SEvan Quan 2430d579fd82SEvan Quan uint16_t socmaxcurrent; 2431d579fd82SEvan Quan uint8_t socoffset; 2432d579fd82SEvan Quan uint8_t padding_telemetrysoc; 2433d579fd82SEvan Quan 2434d579fd82SEvan Quan uint16_t mem0maxcurrent; 2435d579fd82SEvan Quan uint8_t mem0offset; 2436d579fd82SEvan Quan uint8_t padding_telemetrymem0; 2437d579fd82SEvan Quan 2438d579fd82SEvan Quan uint16_t mem1maxcurrent; 2439d579fd82SEvan Quan uint8_t mem1offset; 2440d579fd82SEvan Quan uint8_t padding_telemetrymem1; 2441d579fd82SEvan Quan 2442d579fd82SEvan Quan 2443d579fd82SEvan Quan uint8_t acdcgpio; 2444d579fd82SEvan Quan uint8_t acdcpolarity; 2445d579fd82SEvan Quan uint8_t vr0hotgpio; 2446d579fd82SEvan Quan uint8_t vr0hotpolarity; 2447d579fd82SEvan Quan 2448d579fd82SEvan Quan uint8_t vr1hotgpio; 2449d579fd82SEvan Quan uint8_t vr1hotpolarity; 2450d579fd82SEvan Quan uint8_t padding1; 2451d579fd82SEvan Quan uint8_t padding2; 2452d579fd82SEvan Quan 2453d579fd82SEvan Quan 2454d579fd82SEvan Quan uint8_t ledpin0; 2455d579fd82SEvan Quan uint8_t ledpin1; 2456d579fd82SEvan Quan uint8_t ledpin2; 2457d579fd82SEvan Quan uint8_t padding8_4; 2458d579fd82SEvan Quan 2459d579fd82SEvan Quan 2460d579fd82SEvan Quan uint8_t pllgfxclkspreadenabled; 2461d579fd82SEvan Quan uint8_t pllgfxclkspreadpercent; 2462d579fd82SEvan Quan uint16_t pllgfxclkspreadfreq; 2463d579fd82SEvan Quan 2464d579fd82SEvan Quan 2465d579fd82SEvan Quan uint8_t uclkspreadenabled; 2466d579fd82SEvan Quan uint8_t uclkspreadpercent; 2467d579fd82SEvan Quan uint16_t uclkspreadfreq; 2468d579fd82SEvan Quan 2469d579fd82SEvan Quan 2470d579fd82SEvan Quan uint8_t fclkspreadenabled; 2471d579fd82SEvan Quan uint8_t fclkspreadpercent; 2472d579fd82SEvan Quan uint16_t fclkspreadfreq; 2473d579fd82SEvan Quan 2474d579fd82SEvan Quan 2475d579fd82SEvan Quan uint8_t fllgfxclkspreadenabled; 2476d579fd82SEvan Quan uint8_t fllgfxclkspreadpercent; 2477d579fd82SEvan Quan uint16_t fllgfxclkspreadfreq; 2478d579fd82SEvan Quan 2479d579fd82SEvan Quan 2480d579fd82SEvan Quan struct smudpm_i2ccontrollerconfig_t i2ccontrollers[7]; 2481d579fd82SEvan Quan 2482d579fd82SEvan Quan 2483d579fd82SEvan Quan uint32_t boardreserved[10]; 2484d579fd82SEvan Quan }; 2485d579fd82SEvan Quan 248610e4b227SHawking Zhang enum smudpm_v4_5_i2ccontrollername_e{ 248710e4b227SHawking Zhang SMC_V4_5_I2C_CONTROLLER_NAME_VR_GFX = 0, 248810e4b227SHawking Zhang SMC_V4_5_I2C_CONTROLLER_NAME_VR_SOC, 248910e4b227SHawking Zhang SMC_V4_5_I2C_CONTROLLER_NAME_VR_VDDCI, 249010e4b227SHawking Zhang SMC_V4_5_I2C_CONTROLLER_NAME_VR_MVDD, 249110e4b227SHawking Zhang SMC_V4_5_I2C_CONTROLLER_NAME_LIQUID0, 249210e4b227SHawking Zhang SMC_V4_5_I2C_CONTROLLER_NAME_LIQUID1, 249310e4b227SHawking Zhang SMC_V4_5_I2C_CONTROLLER_NAME_PLX, 249410e4b227SHawking Zhang SMC_V4_5_I2C_CONTROLLER_NAME_SPARE, 249510e4b227SHawking Zhang SMC_V4_5_I2C_CONTROLLER_NAME_COUNT, 249610e4b227SHawking Zhang }; 249710e4b227SHawking Zhang 249810e4b227SHawking Zhang enum smudpm_v4_5_i2ccontrollerthrottler_e{ 249910e4b227SHawking Zhang SMC_V4_5_I2C_CONTROLLER_THROTTLER_TYPE_NONE = 0, 250010e4b227SHawking Zhang SMC_V4_5_I2C_CONTROLLER_THROTTLER_VR_GFX, 250110e4b227SHawking Zhang SMC_V4_5_I2C_CONTROLLER_THROTTLER_VR_SOC, 250210e4b227SHawking Zhang SMC_V4_5_I2C_CONTROLLER_THROTTLER_VR_VDDCI, 250310e4b227SHawking Zhang SMC_V4_5_I2C_CONTROLLER_THROTTLER_VR_MVDD, 250410e4b227SHawking Zhang SMC_V4_5_I2C_CONTROLLER_THROTTLER_LIQUID0, 250510e4b227SHawking Zhang SMC_V4_5_I2C_CONTROLLER_THROTTLER_LIQUID1, 250610e4b227SHawking Zhang SMC_V4_5_I2C_CONTROLLER_THROTTLER_PLX, 250710e4b227SHawking Zhang SMC_V4_5_I2C_CONTROLLER_THROTTLER_COUNT, 250810e4b227SHawking Zhang }; 250910e4b227SHawking Zhang 251010e4b227SHawking Zhang enum smudpm_v4_5_i2ccontrollerprotocol_e{ 251110e4b227SHawking Zhang SMC_V4_5_I2C_CONTROLLER_PROTOCOL_VR_0, 251210e4b227SHawking Zhang SMC_V4_5_I2C_CONTROLLER_PROTOCOL_VR_1, 251310e4b227SHawking Zhang SMC_V4_5_I2C_CONTROLLER_PROTOCOL_TMP_0, 251410e4b227SHawking Zhang SMC_V4_5_I2C_CONTROLLER_PROTOCOL_TMP_1, 251510e4b227SHawking Zhang SMC_V4_5_I2C_CONTROLLER_PROTOCOL_SPARE_0, 251610e4b227SHawking Zhang SMC_V4_5_I2C_CONTROLLER_PROTOCOL_SPARE_1, 251710e4b227SHawking Zhang SMC_V4_5_I2C_CONTROLLER_PROTOCOL_COUNT, 251810e4b227SHawking Zhang }; 251910e4b227SHawking Zhang 252010e4b227SHawking Zhang struct smudpm_i2c_controller_config_v2 252110e4b227SHawking Zhang { 252210e4b227SHawking Zhang uint8_t Enabled; 252310e4b227SHawking Zhang uint8_t Speed; 252410e4b227SHawking Zhang uint8_t Padding[2]; 252510e4b227SHawking Zhang uint32_t SlaveAddress; 252610e4b227SHawking Zhang uint8_t ControllerPort; 252710e4b227SHawking Zhang uint8_t ControllerName; 252810e4b227SHawking Zhang uint8_t ThermalThrotter; 252910e4b227SHawking Zhang uint8_t I2cProtocol; 253010e4b227SHawking Zhang }; 253110e4b227SHawking Zhang 253210e4b227SHawking Zhang struct atom_smc_dpm_info_v4_5 253310e4b227SHawking Zhang { 253410e4b227SHawking Zhang struct atom_common_table_header table_header; 253510e4b227SHawking Zhang // SECTION: BOARD PARAMETERS 253610e4b227SHawking Zhang // I2C Control 253710e4b227SHawking Zhang struct smudpm_i2c_controller_config_v2 I2cControllers[8]; 253810e4b227SHawking Zhang 253910e4b227SHawking Zhang // SVI2 Board Parameters 254010e4b227SHawking Zhang uint16_t MaxVoltageStepGfx; // In mV(Q2) Max voltage step that SMU will request. Multiple steps are taken if voltage change exceeds this value. 254110e4b227SHawking Zhang uint16_t MaxVoltageStepSoc; // In mV(Q2) Max voltage step that SMU will request. Multiple steps are taken if voltage change exceeds this value. 254210e4b227SHawking Zhang 254310e4b227SHawking Zhang uint8_t VddGfxVrMapping; // Use VR_MAPPING* bitfields 254410e4b227SHawking Zhang uint8_t VddSocVrMapping; // Use VR_MAPPING* bitfields 254510e4b227SHawking Zhang uint8_t VddMem0VrMapping; // Use VR_MAPPING* bitfields 254610e4b227SHawking Zhang uint8_t VddMem1VrMapping; // Use VR_MAPPING* bitfields 254710e4b227SHawking Zhang 254810e4b227SHawking Zhang uint8_t GfxUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode 254910e4b227SHawking Zhang uint8_t SocUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode 255010e4b227SHawking Zhang uint8_t ExternalSensorPresent; // External RDI connected to TMON (aka TEMP IN) 255110e4b227SHawking Zhang uint8_t Padding8_V; 255210e4b227SHawking Zhang 255310e4b227SHawking Zhang // Telemetry Settings 255410e4b227SHawking Zhang uint16_t GfxMaxCurrent; // in Amps 255510e4b227SHawking Zhang uint8_t GfxOffset; // in Amps 255610e4b227SHawking Zhang uint8_t Padding_TelemetryGfx; 255710e4b227SHawking Zhang uint16_t SocMaxCurrent; // in Amps 255810e4b227SHawking Zhang uint8_t SocOffset; // in Amps 255910e4b227SHawking Zhang uint8_t Padding_TelemetrySoc; 256010e4b227SHawking Zhang 256110e4b227SHawking Zhang uint16_t Mem0MaxCurrent; // in Amps 256210e4b227SHawking Zhang uint8_t Mem0Offset; // in Amps 256310e4b227SHawking Zhang uint8_t Padding_TelemetryMem0; 256410e4b227SHawking Zhang 256510e4b227SHawking Zhang uint16_t Mem1MaxCurrent; // in Amps 256610e4b227SHawking Zhang uint8_t Mem1Offset; // in Amps 256710e4b227SHawking Zhang uint8_t Padding_TelemetryMem1; 256810e4b227SHawking Zhang 256910e4b227SHawking Zhang // GPIO Settings 257010e4b227SHawking Zhang uint8_t AcDcGpio; // GPIO pin configured for AC/DC switching 257110e4b227SHawking Zhang uint8_t AcDcPolarity; // GPIO polarity for AC/DC switching 257210e4b227SHawking Zhang uint8_t VR0HotGpio; // GPIO pin configured for VR0 HOT event 257310e4b227SHawking Zhang uint8_t VR0HotPolarity; // GPIO polarity for VR0 HOT event 257410e4b227SHawking Zhang 257510e4b227SHawking Zhang uint8_t VR1HotGpio; // GPIO pin configured for VR1 HOT event 257610e4b227SHawking Zhang uint8_t VR1HotPolarity; // GPIO polarity for VR1 HOT event 257710e4b227SHawking Zhang uint8_t GthrGpio; // GPIO pin configured for GTHR Event 257810e4b227SHawking Zhang uint8_t GthrPolarity; // replace GPIO polarity for GTHR 257910e4b227SHawking Zhang 258010e4b227SHawking Zhang // LED Display Settings 258110e4b227SHawking Zhang uint8_t LedPin0; // GPIO number for LedPin[0] 258210e4b227SHawking Zhang uint8_t LedPin1; // GPIO number for LedPin[1] 258310e4b227SHawking Zhang uint8_t LedPin2; // GPIO number for LedPin[2] 258410e4b227SHawking Zhang uint8_t padding8_4; 258510e4b227SHawking Zhang 258610e4b227SHawking Zhang // GFXCLK PLL Spread Spectrum 258710e4b227SHawking Zhang uint8_t PllGfxclkSpreadEnabled; // on or off 258810e4b227SHawking Zhang uint8_t PllGfxclkSpreadPercent; // Q4.4 258910e4b227SHawking Zhang uint16_t PllGfxclkSpreadFreq; // kHz 259010e4b227SHawking Zhang 259110e4b227SHawking Zhang // GFXCLK DFLL Spread Spectrum 259210e4b227SHawking Zhang uint8_t DfllGfxclkSpreadEnabled; // on or off 259310e4b227SHawking Zhang uint8_t DfllGfxclkSpreadPercent; // Q4.4 259410e4b227SHawking Zhang uint16_t DfllGfxclkSpreadFreq; // kHz 259510e4b227SHawking Zhang 259610e4b227SHawking Zhang // UCLK Spread Spectrum 259710e4b227SHawking Zhang uint8_t UclkSpreadEnabled; // on or off 259810e4b227SHawking Zhang uint8_t UclkSpreadPercent; // Q4.4 259910e4b227SHawking Zhang uint16_t UclkSpreadFreq; // kHz 260010e4b227SHawking Zhang 260110e4b227SHawking Zhang // SOCCLK Spread Spectrum 260210e4b227SHawking Zhang uint8_t SoclkSpreadEnabled; // on or off 260310e4b227SHawking Zhang uint8_t SocclkSpreadPercent; // Q4.4 260410e4b227SHawking Zhang uint16_t SocclkSpreadFreq; // kHz 260510e4b227SHawking Zhang 260610e4b227SHawking Zhang // Total board power 260710e4b227SHawking Zhang uint16_t TotalBoardPower; //Only needed for TCP Estimated case, where TCP = TGP+Total Board Power 260810e4b227SHawking Zhang uint16_t BoardPadding; 260910e4b227SHawking Zhang 261010e4b227SHawking Zhang // Mvdd Svi2 Div Ratio Setting 261110e4b227SHawking Zhang uint32_t MvddRatio; // This is used for MVDD Vid workaround. It has 16 fractional bits (Q16.16) 261210e4b227SHawking Zhang 261310e4b227SHawking Zhang uint32_t BoardReserved[9]; 261410e4b227SHawking Zhang 261510e4b227SHawking Zhang }; 261610e4b227SHawking Zhang 26174c35e778SEvan Quan struct atom_smc_dpm_info_v4_6 26184c35e778SEvan Quan { 26194c35e778SEvan Quan struct atom_common_table_header table_header; 26204c35e778SEvan Quan // section: board parameters 26214c35e778SEvan Quan uint32_t i2c_padding[3]; // old i2c control are moved to new area 26224c35e778SEvan Quan 26234c35e778SEvan Quan uint16_t maxvoltagestepgfx; // in mv(q2) max voltage step that smu will request. multiple steps are taken if voltage change exceeds this value. 26244c35e778SEvan Quan uint16_t maxvoltagestepsoc; // in mv(q2) max voltage step that smu will request. multiple steps are taken if voltage change exceeds this value. 26254c35e778SEvan Quan 26264c35e778SEvan Quan uint8_t vddgfxvrmapping; // use vr_mapping* bitfields 26274c35e778SEvan Quan uint8_t vddsocvrmapping; // use vr_mapping* bitfields 26284c35e778SEvan Quan uint8_t vddmemvrmapping; // use vr_mapping* bitfields 26294c35e778SEvan Quan uint8_t boardvrmapping; // use vr_mapping* bitfields 26304c35e778SEvan Quan 26314c35e778SEvan Quan uint8_t gfxulvphasesheddingmask; // set this to 1 to set psi0/1 to 1 in ulv mode 26324c35e778SEvan Quan uint8_t externalsensorpresent; // external rdi connected to tmon (aka temp in) 26334c35e778SEvan Quan uint8_t padding8_v[2]; 26344c35e778SEvan Quan 26354c35e778SEvan Quan // telemetry settings 26364c35e778SEvan Quan uint16_t gfxmaxcurrent; // in amps 26374c35e778SEvan Quan uint8_t gfxoffset; // in amps 26384c35e778SEvan Quan uint8_t padding_telemetrygfx; 26394c35e778SEvan Quan 26404c35e778SEvan Quan uint16_t socmaxcurrent; // in amps 26414c35e778SEvan Quan uint8_t socoffset; // in amps 26424c35e778SEvan Quan uint8_t padding_telemetrysoc; 26434c35e778SEvan Quan 26444c35e778SEvan Quan uint16_t memmaxcurrent; // in amps 26454c35e778SEvan Quan uint8_t memoffset; // in amps 26464c35e778SEvan Quan uint8_t padding_telemetrymem; 26474c35e778SEvan Quan 26484c35e778SEvan Quan uint16_t boardmaxcurrent; // in amps 26494c35e778SEvan Quan uint8_t boardoffset; // in amps 26504c35e778SEvan Quan uint8_t padding_telemetryboardinput; 26514c35e778SEvan Quan 26524c35e778SEvan Quan // gpio settings 26534c35e778SEvan Quan uint8_t vr0hotgpio; // gpio pin configured for vr0 hot event 26544c35e778SEvan Quan uint8_t vr0hotpolarity; // gpio polarity for vr0 hot event 26554c35e778SEvan Quan uint8_t vr1hotgpio; // gpio pin configured for vr1 hot event 26564c35e778SEvan Quan uint8_t vr1hotpolarity; // gpio polarity for vr1 hot event 26574c35e778SEvan Quan 26584c35e778SEvan Quan // gfxclk pll spread spectrum 26594c35e778SEvan Quan uint8_t pllgfxclkspreadenabled; // on or off 26604c35e778SEvan Quan uint8_t pllgfxclkspreadpercent; // q4.4 26614c35e778SEvan Quan uint16_t pllgfxclkspreadfreq; // khz 26624c35e778SEvan Quan 26634c35e778SEvan Quan // uclk spread spectrum 26644c35e778SEvan Quan uint8_t uclkspreadenabled; // on or off 26654c35e778SEvan Quan uint8_t uclkspreadpercent; // q4.4 26664c35e778SEvan Quan uint16_t uclkspreadfreq; // khz 26674c35e778SEvan Quan 26684c35e778SEvan Quan // fclk spread spectrum 26694c35e778SEvan Quan uint8_t fclkspreadenabled; // on or off 26704c35e778SEvan Quan uint8_t fclkspreadpercent; // q4.4 26714c35e778SEvan Quan uint16_t fclkspreadfreq; // khz 26724c35e778SEvan Quan 26734c35e778SEvan Quan 26744c35e778SEvan Quan // gfxclk fll spread spectrum 26754c35e778SEvan Quan uint8_t fllgfxclkspreadenabled; // on or off 26764c35e778SEvan Quan uint8_t fllgfxclkspreadpercent; // q4.4 26774c35e778SEvan Quan uint16_t fllgfxclkspreadfreq; // khz 26784c35e778SEvan Quan 26794c35e778SEvan Quan // i2c controller structure 26804c35e778SEvan Quan struct smudpm_i2c_controller_config_v2 i2ccontrollers[8]; 26814c35e778SEvan Quan 26824c35e778SEvan Quan // memory section 26834c35e778SEvan Quan uint32_t memorychannelenabled; // for dram use only, max 32 channels enabled bit mask. 26844c35e778SEvan Quan 26854c35e778SEvan Quan uint8_t drambitwidth; // for dram use only. see dram bit width type defines 26864c35e778SEvan Quan uint8_t paddingmem[3]; 26874c35e778SEvan Quan 26884c35e778SEvan Quan // total board power 26894c35e778SEvan Quan uint16_t totalboardpower; //only needed for tcp estimated case, where tcp = tgp+total board power 26904c35e778SEvan Quan uint16_t boardpadding; 26914c35e778SEvan Quan 26924c35e778SEvan Quan // section: xgmi training 26934c35e778SEvan Quan uint8_t xgmilinkspeed[4]; 26944c35e778SEvan Quan uint8_t xgmilinkwidth[4]; 26954c35e778SEvan Quan 26964c35e778SEvan Quan uint16_t xgmifclkfreq[4]; 26974c35e778SEvan Quan uint16_t xgmisocvoltage[4]; 26984c35e778SEvan Quan 26994c35e778SEvan Quan // reserved 27004c35e778SEvan Quan uint32_t boardreserved[10]; 27014c35e778SEvan Quan }; 27024c35e778SEvan Quan 270302c0bb4eSEvan Quan struct atom_smc_dpm_info_v4_7 270402c0bb4eSEvan Quan { 270502c0bb4eSEvan Quan struct atom_common_table_header table_header; 270602c0bb4eSEvan Quan // SECTION: BOARD PARAMETERS 270702c0bb4eSEvan Quan // I2C Control 270802c0bb4eSEvan Quan struct smudpm_i2c_controller_config_v2 I2cControllers[8]; 270902c0bb4eSEvan Quan 271002c0bb4eSEvan Quan // SVI2 Board Parameters 271102c0bb4eSEvan Quan uint16_t MaxVoltageStepGfx; // In mV(Q2) Max voltage step that SMU will request. Multiple steps are taken if voltage change exceeds this value. 271202c0bb4eSEvan Quan uint16_t MaxVoltageStepSoc; // In mV(Q2) Max voltage step that SMU will request. Multiple steps are taken if voltage change exceeds this value. 271302c0bb4eSEvan Quan 271402c0bb4eSEvan Quan uint8_t VddGfxVrMapping; // Use VR_MAPPING* bitfields 271502c0bb4eSEvan Quan uint8_t VddSocVrMapping; // Use VR_MAPPING* bitfields 271602c0bb4eSEvan Quan uint8_t VddMem0VrMapping; // Use VR_MAPPING* bitfields 271702c0bb4eSEvan Quan uint8_t VddMem1VrMapping; // Use VR_MAPPING* bitfields 271802c0bb4eSEvan Quan 271902c0bb4eSEvan Quan uint8_t GfxUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode 272002c0bb4eSEvan Quan uint8_t SocUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode 272102c0bb4eSEvan Quan uint8_t ExternalSensorPresent; // External RDI connected to TMON (aka TEMP IN) 272202c0bb4eSEvan Quan uint8_t Padding8_V; 272302c0bb4eSEvan Quan 272402c0bb4eSEvan Quan // Telemetry Settings 272502c0bb4eSEvan Quan uint16_t GfxMaxCurrent; // in Amps 272602c0bb4eSEvan Quan uint8_t GfxOffset; // in Amps 272702c0bb4eSEvan Quan uint8_t Padding_TelemetryGfx; 272802c0bb4eSEvan Quan uint16_t SocMaxCurrent; // in Amps 272902c0bb4eSEvan Quan uint8_t SocOffset; // in Amps 273002c0bb4eSEvan Quan uint8_t Padding_TelemetrySoc; 273102c0bb4eSEvan Quan 273202c0bb4eSEvan Quan uint16_t Mem0MaxCurrent; // in Amps 273302c0bb4eSEvan Quan uint8_t Mem0Offset; // in Amps 273402c0bb4eSEvan Quan uint8_t Padding_TelemetryMem0; 273502c0bb4eSEvan Quan 273602c0bb4eSEvan Quan uint16_t Mem1MaxCurrent; // in Amps 273702c0bb4eSEvan Quan uint8_t Mem1Offset; // in Amps 273802c0bb4eSEvan Quan uint8_t Padding_TelemetryMem1; 273902c0bb4eSEvan Quan 274002c0bb4eSEvan Quan // GPIO Settings 274102c0bb4eSEvan Quan uint8_t AcDcGpio; // GPIO pin configured for AC/DC switching 274202c0bb4eSEvan Quan uint8_t AcDcPolarity; // GPIO polarity for AC/DC switching 274302c0bb4eSEvan Quan uint8_t VR0HotGpio; // GPIO pin configured for VR0 HOT event 274402c0bb4eSEvan Quan uint8_t VR0HotPolarity; // GPIO polarity for VR0 HOT event 274502c0bb4eSEvan Quan 274602c0bb4eSEvan Quan uint8_t VR1HotGpio; // GPIO pin configured for VR1 HOT event 274702c0bb4eSEvan Quan uint8_t VR1HotPolarity; // GPIO polarity for VR1 HOT event 274802c0bb4eSEvan Quan uint8_t GthrGpio; // GPIO pin configured for GTHR Event 274902c0bb4eSEvan Quan uint8_t GthrPolarity; // replace GPIO polarity for GTHR 275002c0bb4eSEvan Quan 275102c0bb4eSEvan Quan // LED Display Settings 275202c0bb4eSEvan Quan uint8_t LedPin0; // GPIO number for LedPin[0] 275302c0bb4eSEvan Quan uint8_t LedPin1; // GPIO number for LedPin[1] 275402c0bb4eSEvan Quan uint8_t LedPin2; // GPIO number for LedPin[2] 275502c0bb4eSEvan Quan uint8_t padding8_4; 275602c0bb4eSEvan Quan 275702c0bb4eSEvan Quan // GFXCLK PLL Spread Spectrum 275802c0bb4eSEvan Quan uint8_t PllGfxclkSpreadEnabled; // on or off 275902c0bb4eSEvan Quan uint8_t PllGfxclkSpreadPercent; // Q4.4 276002c0bb4eSEvan Quan uint16_t PllGfxclkSpreadFreq; // kHz 276102c0bb4eSEvan Quan 276202c0bb4eSEvan Quan // GFXCLK DFLL Spread Spectrum 276302c0bb4eSEvan Quan uint8_t DfllGfxclkSpreadEnabled; // on or off 276402c0bb4eSEvan Quan uint8_t DfllGfxclkSpreadPercent; // Q4.4 276502c0bb4eSEvan Quan uint16_t DfllGfxclkSpreadFreq; // kHz 276602c0bb4eSEvan Quan 276702c0bb4eSEvan Quan // UCLK Spread Spectrum 276802c0bb4eSEvan Quan uint8_t UclkSpreadEnabled; // on or off 276902c0bb4eSEvan Quan uint8_t UclkSpreadPercent; // Q4.4 277002c0bb4eSEvan Quan uint16_t UclkSpreadFreq; // kHz 277102c0bb4eSEvan Quan 277202c0bb4eSEvan Quan // SOCCLK Spread Spectrum 277302c0bb4eSEvan Quan uint8_t SoclkSpreadEnabled; // on or off 277402c0bb4eSEvan Quan uint8_t SocclkSpreadPercent; // Q4.4 277502c0bb4eSEvan Quan uint16_t SocclkSpreadFreq; // kHz 277602c0bb4eSEvan Quan 277702c0bb4eSEvan Quan // Total board power 277802c0bb4eSEvan Quan uint16_t TotalBoardPower; //Only needed for TCP Estimated case, where TCP = TGP+Total Board Power 277902c0bb4eSEvan Quan uint16_t BoardPadding; 278002c0bb4eSEvan Quan 278102c0bb4eSEvan Quan // Mvdd Svi2 Div Ratio Setting 278202c0bb4eSEvan Quan uint32_t MvddRatio; // This is used for MVDD Vid workaround. It has 16 fractional bits (Q16.16) 278302c0bb4eSEvan Quan 278402c0bb4eSEvan Quan // GPIO pins for I2C communications with 2nd controller for Input Telemetry Sequence 278502c0bb4eSEvan Quan uint8_t GpioI2cScl; // Serial Clock 278602c0bb4eSEvan Quan uint8_t GpioI2cSda; // Serial Data 278702c0bb4eSEvan Quan uint16_t GpioPadding; 278802c0bb4eSEvan Quan 278902c0bb4eSEvan Quan // Additional LED Display Settings 279002c0bb4eSEvan Quan uint8_t LedPin3; // GPIO number for LedPin[3] - PCIE GEN Speed 279102c0bb4eSEvan Quan uint8_t LedPin4; // GPIO number for LedPin[4] - PMFW Error Status 279202c0bb4eSEvan Quan uint16_t LedEnableMask; 279302c0bb4eSEvan Quan 279402c0bb4eSEvan Quan // Power Limit Scalars 279502c0bb4eSEvan Quan uint8_t PowerLimitScalar[4]; //[PPT_THROTTLER_COUNT] 279602c0bb4eSEvan Quan 279702c0bb4eSEvan Quan uint8_t MvddUlvPhaseSheddingMask; 279802c0bb4eSEvan Quan uint8_t VddciUlvPhaseSheddingMask; 279902c0bb4eSEvan Quan uint8_t Padding8_Psi1; 280002c0bb4eSEvan Quan uint8_t Padding8_Psi2; 280102c0bb4eSEvan Quan 280202c0bb4eSEvan Quan uint32_t BoardReserved[5]; 280302c0bb4eSEvan Quan }; 280402c0bb4eSEvan Quan 280544e7139bSLikun Gao struct smudpm_i2c_controller_config_v3 280644e7139bSLikun Gao { 280744e7139bSLikun Gao uint8_t Enabled; 280844e7139bSLikun Gao uint8_t Speed; 280944e7139bSLikun Gao uint8_t SlaveAddress; 281044e7139bSLikun Gao uint8_t ControllerPort; 281144e7139bSLikun Gao uint8_t ControllerName; 281244e7139bSLikun Gao uint8_t ThermalThrotter; 281344e7139bSLikun Gao uint8_t I2cProtocol; 281444e7139bSLikun Gao uint8_t PaddingConfig; 281544e7139bSLikun Gao }; 281644e7139bSLikun Gao 281744e7139bSLikun Gao struct atom_smc_dpm_info_v4_9 281844e7139bSLikun Gao { 281944e7139bSLikun Gao struct atom_common_table_header table_header; 282044e7139bSLikun Gao 282144e7139bSLikun Gao //SECTION: Gaming Clocks 282244e7139bSLikun Gao //uint32_t GamingClk[6]; 282344e7139bSLikun Gao 282444e7139bSLikun Gao // SECTION: I2C Control 282544e7139bSLikun Gao struct smudpm_i2c_controller_config_v3 I2cControllers[16]; 282644e7139bSLikun Gao 282744e7139bSLikun Gao uint8_t GpioScl; // GPIO Number for SCL Line, used only for CKSVII2C1 282844e7139bSLikun Gao uint8_t GpioSda; // GPIO Number for SDA Line, used only for CKSVII2C1 282944e7139bSLikun Gao uint8_t FchUsbPdSlaveAddr; //For requesting USB PD controller S-states via FCH I2C when entering PME turn off 283044e7139bSLikun Gao uint8_t I2cSpare; 283144e7139bSLikun Gao 283244e7139bSLikun Gao // SECTION: SVI2 Board Parameters 283344e7139bSLikun Gao uint8_t VddGfxVrMapping; // Use VR_MAPPING* bitfields 283444e7139bSLikun Gao uint8_t VddSocVrMapping; // Use VR_MAPPING* bitfields 283544e7139bSLikun Gao uint8_t VddMem0VrMapping; // Use VR_MAPPING* bitfields 283644e7139bSLikun Gao uint8_t VddMem1VrMapping; // Use VR_MAPPING* bitfields 283744e7139bSLikun Gao 283844e7139bSLikun Gao uint8_t GfxUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode 283944e7139bSLikun Gao uint8_t SocUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode 284044e7139bSLikun Gao uint8_t VddciUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode 284144e7139bSLikun Gao uint8_t MvddUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode 284244e7139bSLikun Gao 284344e7139bSLikun Gao // SECTION: Telemetry Settings 284444e7139bSLikun Gao uint16_t GfxMaxCurrent; // in Amps 284544e7139bSLikun Gao uint8_t GfxOffset; // in Amps 284644e7139bSLikun Gao uint8_t Padding_TelemetryGfx; 284744e7139bSLikun Gao 284844e7139bSLikun Gao uint16_t SocMaxCurrent; // in Amps 284944e7139bSLikun Gao uint8_t SocOffset; // in Amps 285044e7139bSLikun Gao uint8_t Padding_TelemetrySoc; 285144e7139bSLikun Gao 285244e7139bSLikun Gao uint16_t Mem0MaxCurrent; // in Amps 285344e7139bSLikun Gao uint8_t Mem0Offset; // in Amps 285444e7139bSLikun Gao uint8_t Padding_TelemetryMem0; 285544e7139bSLikun Gao 285644e7139bSLikun Gao uint16_t Mem1MaxCurrent; // in Amps 285744e7139bSLikun Gao uint8_t Mem1Offset; // in Amps 285844e7139bSLikun Gao uint8_t Padding_TelemetryMem1; 285944e7139bSLikun Gao 286044e7139bSLikun Gao uint32_t MvddRatio; // This is used for MVDD Svi2 Div Ratio workaround. It has 16 fractional bits (Q16.16) 286144e7139bSLikun Gao 286244e7139bSLikun Gao // SECTION: GPIO Settings 286344e7139bSLikun Gao uint8_t AcDcGpio; // GPIO pin configured for AC/DC switching 286444e7139bSLikun Gao uint8_t AcDcPolarity; // GPIO polarity for AC/DC switching 286544e7139bSLikun Gao uint8_t VR0HotGpio; // GPIO pin configured for VR0 HOT event 286644e7139bSLikun Gao uint8_t VR0HotPolarity; // GPIO polarity for VR0 HOT event 286744e7139bSLikun Gao 286844e7139bSLikun Gao uint8_t VR1HotGpio; // GPIO pin configured for VR1 HOT event 286944e7139bSLikun Gao uint8_t VR1HotPolarity; // GPIO polarity for VR1 HOT event 287044e7139bSLikun Gao uint8_t GthrGpio; // GPIO pin configured for GTHR Event 287144e7139bSLikun Gao uint8_t GthrPolarity; // replace GPIO polarity for GTHR 287244e7139bSLikun Gao 287344e7139bSLikun Gao // LED Display Settings 287444e7139bSLikun Gao uint8_t LedPin0; // GPIO number for LedPin[0] 287544e7139bSLikun Gao uint8_t LedPin1; // GPIO number for LedPin[1] 287644e7139bSLikun Gao uint8_t LedPin2; // GPIO number for LedPin[2] 287744e7139bSLikun Gao uint8_t LedEnableMask; 287844e7139bSLikun Gao 287944e7139bSLikun Gao uint8_t LedPcie; // GPIO number for PCIE results 288044e7139bSLikun Gao uint8_t LedError; // GPIO number for Error Cases 288144e7139bSLikun Gao uint8_t LedSpare1[2]; 288244e7139bSLikun Gao 288344e7139bSLikun Gao // SECTION: Clock Spread Spectrum 288444e7139bSLikun Gao 288544e7139bSLikun Gao // GFXCLK PLL Spread Spectrum 288644e7139bSLikun Gao uint8_t PllGfxclkSpreadEnabled; // on or off 288744e7139bSLikun Gao uint8_t PllGfxclkSpreadPercent; // Q4.4 288844e7139bSLikun Gao uint16_t PllGfxclkSpreadFreq; // kHz 288944e7139bSLikun Gao 289044e7139bSLikun Gao // GFXCLK DFLL Spread Spectrum 289144e7139bSLikun Gao uint8_t DfllGfxclkSpreadEnabled; // on or off 289244e7139bSLikun Gao uint8_t DfllGfxclkSpreadPercent; // Q4.4 289344e7139bSLikun Gao uint16_t DfllGfxclkSpreadFreq; // kHz 289444e7139bSLikun Gao 289544e7139bSLikun Gao // UCLK Spread Spectrum 289644e7139bSLikun Gao uint8_t UclkSpreadEnabled; // on or off 289744e7139bSLikun Gao uint8_t UclkSpreadPercent; // Q4.4 289844e7139bSLikun Gao uint16_t UclkSpreadFreq; // kHz 289944e7139bSLikun Gao 290044e7139bSLikun Gao // FCLK Spread Spectrum 290144e7139bSLikun Gao uint8_t FclkSpreadEnabled; // on or off 290244e7139bSLikun Gao uint8_t FclkSpreadPercent; // Q4.4 290344e7139bSLikun Gao uint16_t FclkSpreadFreq; // kHz 290444e7139bSLikun Gao 290544e7139bSLikun Gao // Section: Memory Config 290644e7139bSLikun Gao uint32_t MemoryChannelEnabled; // For DRAM use only, Max 32 channels enabled bit mask. 290744e7139bSLikun Gao 290844e7139bSLikun Gao uint8_t DramBitWidth; // For DRAM use only. See Dram Bit width type defines 290944e7139bSLikun Gao uint8_t PaddingMem1[3]; 291044e7139bSLikun Gao 291144e7139bSLikun Gao // Section: Total Board Power 291244e7139bSLikun Gao uint16_t TotalBoardPower; //Only needed for TCP Estimated case, where TCP = TGP+Total Board Power 291344e7139bSLikun Gao uint16_t BoardPowerPadding; 291444e7139bSLikun Gao 291544e7139bSLikun Gao // SECTION: XGMI Training 291644e7139bSLikun Gao uint8_t XgmiLinkSpeed [4]; 291744e7139bSLikun Gao uint8_t XgmiLinkWidth [4]; 291844e7139bSLikun Gao 291944e7139bSLikun Gao uint16_t XgmiFclkFreq [4]; 292044e7139bSLikun Gao uint16_t XgmiSocVoltage [4]; 292144e7139bSLikun Gao 292244e7139bSLikun Gao // SECTION: Board Reserved 292344e7139bSLikun Gao 292444e7139bSLikun Gao uint32_t BoardReserved[16]; 292544e7139bSLikun Gao 292644e7139bSLikun Gao }; 292744e7139bSLikun Gao 2928b1138d5eSLijo Lazar struct atom_smc_dpm_info_v4_10 2929b1138d5eSLijo Lazar { 2930b1138d5eSLijo Lazar struct atom_common_table_header table_header; 2931b1138d5eSLijo Lazar 2932b1138d5eSLijo Lazar // SECTION: BOARD PARAMETERS 2933b1138d5eSLijo Lazar // Telemetry Settings 2934b1138d5eSLijo Lazar uint16_t GfxMaxCurrent; // in Amps 2935b1138d5eSLijo Lazar uint8_t GfxOffset; // in Amps 2936b1138d5eSLijo Lazar uint8_t Padding_TelemetryGfx; 2937b1138d5eSLijo Lazar 2938b1138d5eSLijo Lazar uint16_t SocMaxCurrent; // in Amps 2939b1138d5eSLijo Lazar uint8_t SocOffset; // in Amps 2940b1138d5eSLijo Lazar uint8_t Padding_TelemetrySoc; 2941b1138d5eSLijo Lazar 2942b1138d5eSLijo Lazar uint16_t MemMaxCurrent; // in Amps 2943b1138d5eSLijo Lazar uint8_t MemOffset; // in Amps 2944b1138d5eSLijo Lazar uint8_t Padding_TelemetryMem; 2945b1138d5eSLijo Lazar 2946b1138d5eSLijo Lazar uint16_t BoardMaxCurrent; // in Amps 2947b1138d5eSLijo Lazar uint8_t BoardOffset; // in Amps 2948b1138d5eSLijo Lazar uint8_t Padding_TelemetryBoardInput; 2949b1138d5eSLijo Lazar 2950b1138d5eSLijo Lazar // Platform input telemetry voltage coefficient 2951b1138d5eSLijo Lazar uint32_t BoardVoltageCoeffA; // decode by /1000 2952b1138d5eSLijo Lazar uint32_t BoardVoltageCoeffB; // decode by /1000 2953b1138d5eSLijo Lazar 2954b1138d5eSLijo Lazar // GPIO Settings 2955b1138d5eSLijo Lazar uint8_t VR0HotGpio; // GPIO pin configured for VR0 HOT event 2956b1138d5eSLijo Lazar uint8_t VR0HotPolarity; // GPIO polarity for VR0 HOT event 2957b1138d5eSLijo Lazar uint8_t VR1HotGpio; // GPIO pin configured for VR1 HOT event 2958b1138d5eSLijo Lazar uint8_t VR1HotPolarity; // GPIO polarity for VR1 HOT event 2959b1138d5eSLijo Lazar 2960b1138d5eSLijo Lazar // UCLK Spread Spectrum 2961b1138d5eSLijo Lazar uint8_t UclkSpreadEnabled; // on or off 2962b1138d5eSLijo Lazar uint8_t UclkSpreadPercent; // Q4.4 2963b1138d5eSLijo Lazar uint16_t UclkSpreadFreq; // kHz 2964b1138d5eSLijo Lazar 2965b1138d5eSLijo Lazar // FCLK Spread Spectrum 2966b1138d5eSLijo Lazar uint8_t FclkSpreadEnabled; // on or off 2967b1138d5eSLijo Lazar uint8_t FclkSpreadPercent; // Q4.4 2968b1138d5eSLijo Lazar uint16_t FclkSpreadFreq; // kHz 2969b1138d5eSLijo Lazar 2970b1138d5eSLijo Lazar // I2C Controller Structure 2971b1138d5eSLijo Lazar struct smudpm_i2c_controller_config_v3 I2cControllers[8]; 2972b1138d5eSLijo Lazar 2973b1138d5eSLijo Lazar // GPIO pins for I2C communications with 2nd controller for Input Telemetry Sequence 2974b1138d5eSLijo Lazar uint8_t GpioI2cScl; // Serial Clock 2975b1138d5eSLijo Lazar uint8_t GpioI2cSda; // Serial Data 2976b1138d5eSLijo Lazar uint16_t spare5; 2977b1138d5eSLijo Lazar 2978b1138d5eSLijo Lazar uint32_t reserved[16]; 2979b1138d5eSLijo Lazar }; 2980b1138d5eSLijo Lazar 29817a0d7089SEvan Quan /* 29821fadf42eSAlex Deucher *************************************************************************** 29831fadf42eSAlex Deucher Data Table asic_profiling_info structure 29841fadf42eSAlex Deucher *************************************************************************** 29851fadf42eSAlex Deucher */ 29861fadf42eSAlex Deucher struct atom_asic_profiling_info_v4_1 29871fadf42eSAlex Deucher { 29881fadf42eSAlex Deucher struct atom_common_table_header table_header; 29891fadf42eSAlex Deucher uint32_t maxvddc; 29901fadf42eSAlex Deucher uint32_t minvddc; 29911fadf42eSAlex Deucher uint32_t avfs_meannsigma_acontant0; 29921fadf42eSAlex Deucher uint32_t avfs_meannsigma_acontant1; 29931fadf42eSAlex Deucher uint32_t avfs_meannsigma_acontant2; 29941fadf42eSAlex Deucher uint16_t avfs_meannsigma_dc_tol_sigma; 29951fadf42eSAlex Deucher uint16_t avfs_meannsigma_platform_mean; 29961fadf42eSAlex Deucher uint16_t avfs_meannsigma_platform_sigma; 29971fadf42eSAlex Deucher uint32_t gb_vdroop_table_cksoff_a0; 29981fadf42eSAlex Deucher uint32_t gb_vdroop_table_cksoff_a1; 29991fadf42eSAlex Deucher uint32_t gb_vdroop_table_cksoff_a2; 30001fadf42eSAlex Deucher uint32_t gb_vdroop_table_ckson_a0; 30011fadf42eSAlex Deucher uint32_t gb_vdroop_table_ckson_a1; 30021fadf42eSAlex Deucher uint32_t gb_vdroop_table_ckson_a2; 30031fadf42eSAlex Deucher uint32_t avfsgb_fuse_table_cksoff_m1; 3004040cd2d1SRex Zhu uint32_t avfsgb_fuse_table_cksoff_m2; 30051fadf42eSAlex Deucher uint32_t avfsgb_fuse_table_cksoff_b; 30061fadf42eSAlex Deucher uint32_t avfsgb_fuse_table_ckson_m1; 3007040cd2d1SRex Zhu uint32_t avfsgb_fuse_table_ckson_m2; 30081fadf42eSAlex Deucher uint32_t avfsgb_fuse_table_ckson_b; 30091fadf42eSAlex Deucher uint16_t max_voltage_0_25mv; 30101fadf42eSAlex Deucher uint8_t enable_gb_vdroop_table_cksoff; 30111fadf42eSAlex Deucher uint8_t enable_gb_vdroop_table_ckson; 30121fadf42eSAlex Deucher uint8_t enable_gb_fuse_table_cksoff; 30131fadf42eSAlex Deucher uint8_t enable_gb_fuse_table_ckson; 30141fadf42eSAlex Deucher uint16_t psm_age_comfactor; 30151fadf42eSAlex Deucher uint8_t enable_apply_avfs_cksoff_voltage; 30161fadf42eSAlex Deucher uint8_t reserved; 30171fadf42eSAlex Deucher uint32_t dispclk2gfxclk_a; 3018040cd2d1SRex Zhu uint32_t dispclk2gfxclk_b; 30191fadf42eSAlex Deucher uint32_t dispclk2gfxclk_c; 30201fadf42eSAlex Deucher uint32_t pixclk2gfxclk_a; 3021040cd2d1SRex Zhu uint32_t pixclk2gfxclk_b; 30221fadf42eSAlex Deucher uint32_t pixclk2gfxclk_c; 30231fadf42eSAlex Deucher uint32_t dcefclk2gfxclk_a; 3024040cd2d1SRex Zhu uint32_t dcefclk2gfxclk_b; 30251fadf42eSAlex Deucher uint32_t dcefclk2gfxclk_c; 30261fadf42eSAlex Deucher uint32_t phyclk2gfxclk_a; 3027040cd2d1SRex Zhu uint32_t phyclk2gfxclk_b; 30281fadf42eSAlex Deucher uint32_t phyclk2gfxclk_c; 30291fadf42eSAlex Deucher }; 30301fadf42eSAlex Deucher 3031b7437509SRex Zhu struct atom_asic_profiling_info_v4_2 { 3032b7437509SRex Zhu struct atom_common_table_header table_header; 3033b7437509SRex Zhu uint32_t maxvddc; 3034b7437509SRex Zhu uint32_t minvddc; 3035b7437509SRex Zhu uint32_t avfs_meannsigma_acontant0; 3036b7437509SRex Zhu uint32_t avfs_meannsigma_acontant1; 3037b7437509SRex Zhu uint32_t avfs_meannsigma_acontant2; 3038b7437509SRex Zhu uint16_t avfs_meannsigma_dc_tol_sigma; 3039b7437509SRex Zhu uint16_t avfs_meannsigma_platform_mean; 3040b7437509SRex Zhu uint16_t avfs_meannsigma_platform_sigma; 3041b7437509SRex Zhu uint32_t gb_vdroop_table_cksoff_a0; 3042b7437509SRex Zhu uint32_t gb_vdroop_table_cksoff_a1; 3043b7437509SRex Zhu uint32_t gb_vdroop_table_cksoff_a2; 3044b7437509SRex Zhu uint32_t gb_vdroop_table_ckson_a0; 3045b7437509SRex Zhu uint32_t gb_vdroop_table_ckson_a1; 3046b7437509SRex Zhu uint32_t gb_vdroop_table_ckson_a2; 3047b7437509SRex Zhu uint32_t avfsgb_fuse_table_cksoff_m1; 3048b7437509SRex Zhu uint32_t avfsgb_fuse_table_cksoff_m2; 3049b7437509SRex Zhu uint32_t avfsgb_fuse_table_cksoff_b; 3050b7437509SRex Zhu uint32_t avfsgb_fuse_table_ckson_m1; 3051b7437509SRex Zhu uint32_t avfsgb_fuse_table_ckson_m2; 3052b7437509SRex Zhu uint32_t avfsgb_fuse_table_ckson_b; 3053b7437509SRex Zhu uint16_t max_voltage_0_25mv; 3054b7437509SRex Zhu uint8_t enable_gb_vdroop_table_cksoff; 3055b7437509SRex Zhu uint8_t enable_gb_vdroop_table_ckson; 3056b7437509SRex Zhu uint8_t enable_gb_fuse_table_cksoff; 3057b7437509SRex Zhu uint8_t enable_gb_fuse_table_ckson; 3058b7437509SRex Zhu uint16_t psm_age_comfactor; 3059b7437509SRex Zhu uint8_t enable_apply_avfs_cksoff_voltage; 3060b7437509SRex Zhu uint8_t reserved; 3061b7437509SRex Zhu uint32_t dispclk2gfxclk_a; 3062b7437509SRex Zhu uint32_t dispclk2gfxclk_b; 3063b7437509SRex Zhu uint32_t dispclk2gfxclk_c; 3064b7437509SRex Zhu uint32_t pixclk2gfxclk_a; 3065b7437509SRex Zhu uint32_t pixclk2gfxclk_b; 3066b7437509SRex Zhu uint32_t pixclk2gfxclk_c; 3067b7437509SRex Zhu uint32_t dcefclk2gfxclk_a; 3068b7437509SRex Zhu uint32_t dcefclk2gfxclk_b; 3069b7437509SRex Zhu uint32_t dcefclk2gfxclk_c; 3070b7437509SRex Zhu uint32_t phyclk2gfxclk_a; 3071b7437509SRex Zhu uint32_t phyclk2gfxclk_b; 3072b7437509SRex Zhu uint32_t phyclk2gfxclk_c; 3073b7437509SRex Zhu uint32_t acg_gb_vdroop_table_a0; 3074b7437509SRex Zhu uint32_t acg_gb_vdroop_table_a1; 3075b7437509SRex Zhu uint32_t acg_gb_vdroop_table_a2; 3076b7437509SRex Zhu uint32_t acg_avfsgb_fuse_table_m1; 3077b7437509SRex Zhu uint32_t acg_avfsgb_fuse_table_m2; 3078b7437509SRex Zhu uint32_t acg_avfsgb_fuse_table_b; 3079b7437509SRex Zhu uint8_t enable_acg_gb_vdroop_table; 3080b7437509SRex Zhu uint8_t enable_acg_gb_fuse_table; 3081b7437509SRex Zhu uint32_t acg_dispclk2gfxclk_a; 3082b7437509SRex Zhu uint32_t acg_dispclk2gfxclk_b; 3083b7437509SRex Zhu uint32_t acg_dispclk2gfxclk_c; 3084b7437509SRex Zhu uint32_t acg_pixclk2gfxclk_a; 3085b7437509SRex Zhu uint32_t acg_pixclk2gfxclk_b; 3086b7437509SRex Zhu uint32_t acg_pixclk2gfxclk_c; 3087b7437509SRex Zhu uint32_t acg_dcefclk2gfxclk_a; 3088b7437509SRex Zhu uint32_t acg_dcefclk2gfxclk_b; 3089b7437509SRex Zhu uint32_t acg_dcefclk2gfxclk_c; 3090b7437509SRex Zhu uint32_t acg_phyclk2gfxclk_a; 3091b7437509SRex Zhu uint32_t acg_phyclk2gfxclk_b; 3092b7437509SRex Zhu uint32_t acg_phyclk2gfxclk_c; 3093b7437509SRex Zhu }; 30941fadf42eSAlex Deucher 30951fadf42eSAlex Deucher /* 30961fadf42eSAlex Deucher *************************************************************************** 30971fadf42eSAlex Deucher Data Table multimedia_info structure 30981fadf42eSAlex Deucher *************************************************************************** 30991fadf42eSAlex Deucher */ 31001fadf42eSAlex Deucher struct atom_multimedia_info_v2_1 31011fadf42eSAlex Deucher { 31021fadf42eSAlex Deucher struct atom_common_table_header table_header; 31031fadf42eSAlex Deucher uint8_t uvdip_min_ver; 31041fadf42eSAlex Deucher uint8_t uvdip_max_ver; 31051fadf42eSAlex Deucher uint8_t vceip_min_ver; 31061fadf42eSAlex Deucher uint8_t vceip_max_ver; 31071fadf42eSAlex Deucher uint16_t uvd_enc_max_input_width_pixels; 31081fadf42eSAlex Deucher uint16_t uvd_enc_max_input_height_pixels; 31091fadf42eSAlex Deucher uint16_t vce_enc_max_input_width_pixels; 31101fadf42eSAlex Deucher uint16_t vce_enc_max_input_height_pixels; 31111fadf42eSAlex Deucher uint32_t uvd_enc_max_bandwidth; // 16x16 pixels/sec, codec independent 31121fadf42eSAlex Deucher uint32_t vce_enc_max_bandwidth; // 16x16 pixels/sec, codec independent 31131fadf42eSAlex Deucher }; 31141fadf42eSAlex Deucher 31151fadf42eSAlex Deucher 31161fadf42eSAlex Deucher /* 31171fadf42eSAlex Deucher *************************************************************************** 31181fadf42eSAlex Deucher Data Table umc_info structure 31191fadf42eSAlex Deucher *************************************************************************** 31201fadf42eSAlex Deucher */ 31211fadf42eSAlex Deucher struct atom_umc_info_v3_1 31221fadf42eSAlex Deucher { 31231fadf42eSAlex Deucher struct atom_common_table_header table_header; 31241fadf42eSAlex Deucher uint32_t ucode_version; 31251fadf42eSAlex Deucher uint32_t ucode_rom_startaddr; 31261fadf42eSAlex Deucher uint32_t ucode_length; 31271fadf42eSAlex Deucher uint16_t umc_reg_init_offset; 31281fadf42eSAlex Deucher uint16_t customer_ucode_name_offset; 31291fadf42eSAlex Deucher uint16_t mclk_ss_percentage; 31301fadf42eSAlex Deucher uint16_t mclk_ss_rate_10hz; 31311fadf42eSAlex Deucher uint8_t umcip_min_ver; 31321fadf42eSAlex Deucher uint8_t umcip_max_ver; 31331fadf42eSAlex Deucher uint8_t vram_type; //enum of atom_dgpu_vram_type 31341fadf42eSAlex Deucher uint8_t umc_config; 31351fadf42eSAlex Deucher uint32_t mem_refclk_10khz; 31361fadf42eSAlex Deucher }; 31371fadf42eSAlex Deucher 3138ed606ca3SHawking Zhang // umc_info.umc_config 3139ed606ca3SHawking Zhang enum atom_umc_config_def { 3140ed606ca3SHawking Zhang UMC_CONFIG__ENABLE_1KB_INTERLEAVE_MODE = 0x00000001, 3141ed606ca3SHawking Zhang UMC_CONFIG__DEFAULT_MEM_ECC_ENABLE = 0x00000002, 3142ed606ca3SHawking Zhang UMC_CONFIG__ENABLE_HBM_LANE_REPAIR = 0x00000004, 3143ed606ca3SHawking Zhang UMC_CONFIG__ENABLE_BANK_HARVESTING = 0x00000008, 3144ed606ca3SHawking Zhang UMC_CONFIG__ENABLE_PHY_REINIT = 0x00000010, 3145ed606ca3SHawking Zhang UMC_CONFIG__DISABLE_UCODE_CHKSTATUS = 0x00000020, 3146ed606ca3SHawking Zhang }; 3147ed606ca3SHawking Zhang 3148ed606ca3SHawking Zhang struct atom_umc_info_v3_2 3149ed606ca3SHawking Zhang { 3150ed606ca3SHawking Zhang struct atom_common_table_header table_header; 3151ed606ca3SHawking Zhang uint32_t ucode_version; 3152ed606ca3SHawking Zhang uint32_t ucode_rom_startaddr; 3153ed606ca3SHawking Zhang uint32_t ucode_length; 3154ed606ca3SHawking Zhang uint16_t umc_reg_init_offset; 3155ed606ca3SHawking Zhang uint16_t customer_ucode_name_offset; 3156ed606ca3SHawking Zhang uint16_t mclk_ss_percentage; 3157ed606ca3SHawking Zhang uint16_t mclk_ss_rate_10hz; 3158ed606ca3SHawking Zhang uint8_t umcip_min_ver; 3159ed606ca3SHawking Zhang uint8_t umcip_max_ver; 3160ed606ca3SHawking Zhang uint8_t vram_type; //enum of atom_dgpu_vram_type 3161ed606ca3SHawking Zhang uint8_t umc_config; 3162ed606ca3SHawking Zhang uint32_t mem_refclk_10khz; 3163ed606ca3SHawking Zhang uint32_t pstate_uclk_10khz[4]; 3164ed606ca3SHawking Zhang uint16_t umcgoldenoffset; 3165ed606ca3SHawking Zhang uint16_t densitygoldenoffset; 3166ed606ca3SHawking Zhang }; 3167ed606ca3SHawking Zhang 3168ed606ca3SHawking Zhang struct atom_umc_info_v3_3 3169ed606ca3SHawking Zhang { 3170ed606ca3SHawking Zhang struct atom_common_table_header table_header; 3171ed606ca3SHawking Zhang uint32_t ucode_reserved; 3172ed606ca3SHawking Zhang uint32_t ucode_rom_startaddr; 3173ed606ca3SHawking Zhang uint32_t ucode_length; 3174ed606ca3SHawking Zhang uint16_t umc_reg_init_offset; 3175ed606ca3SHawking Zhang uint16_t customer_ucode_name_offset; 3176ed606ca3SHawking Zhang uint16_t mclk_ss_percentage; 3177ed606ca3SHawking Zhang uint16_t mclk_ss_rate_10hz; 3178ed606ca3SHawking Zhang uint8_t umcip_min_ver; 3179ed606ca3SHawking Zhang uint8_t umcip_max_ver; 3180ed606ca3SHawking Zhang uint8_t vram_type; //enum of atom_dgpu_vram_type 3181ed606ca3SHawking Zhang uint8_t umc_config; 3182ed606ca3SHawking Zhang uint32_t mem_refclk_10khz; 3183ed606ca3SHawking Zhang uint32_t pstate_uclk_10khz[4]; 3184ed606ca3SHawking Zhang uint16_t umcgoldenoffset; 3185ed606ca3SHawking Zhang uint16_t densitygoldenoffset; 3186f1a8801cSHawking Zhang uint32_t umc_config1; 3187f1a8801cSHawking Zhang uint32_t bist_data_startaddr; 3188f1a8801cSHawking Zhang uint32_t reserved[2]; 3189f1a8801cSHawking Zhang }; 3190f1a8801cSHawking Zhang 3191f1a8801cSHawking Zhang enum atom_umc_config1_def { 3192f1a8801cSHawking Zhang UMC_CONFIG1__ENABLE_PSTATE_PHASE_STORE_TRAIN = 0x00000001, 3193f1a8801cSHawking Zhang UMC_CONFIG1__ENABLE_AUTO_FRAMING = 0x00000002, 3194f1a8801cSHawking Zhang UMC_CONFIG1__ENABLE_RESTORE_BIST_DATA = 0x00000004, 3195f1a8801cSHawking Zhang UMC_CONFIG1__DISABLE_STROBE_MODE = 0x00000008, 3196f1a8801cSHawking Zhang UMC_CONFIG1__DEBUG_DATA_PARITY_EN = 0x00000010, 3197f1a8801cSHawking Zhang UMC_CONFIG1__ENABLE_ECC_CAPABLE = 0x00010000, 3198ed606ca3SHawking Zhang }; 31991fadf42eSAlex Deucher 320048d02dcbSHawking Zhang struct atom_umc_info_v4_0 { 320148d02dcbSHawking Zhang struct atom_common_table_header table_header; 320248d02dcbSHawking Zhang uint32_t ucode_reserved[5]; 320348d02dcbSHawking Zhang uint8_t umcip_min_ver; 320448d02dcbSHawking Zhang uint8_t umcip_max_ver; 320548d02dcbSHawking Zhang uint8_t vram_type; 320648d02dcbSHawking Zhang uint8_t umc_config; 320748d02dcbSHawking Zhang uint32_t mem_refclk_10khz; 320848d02dcbSHawking Zhang uint32_t clk_reserved[4]; 320948d02dcbSHawking Zhang uint32_t golden_reserved; 321048d02dcbSHawking Zhang uint32_t umc_config1; 321148d02dcbSHawking Zhang uint32_t reserved[2]; 321248d02dcbSHawking Zhang uint8_t channel_num; 321348d02dcbSHawking Zhang uint8_t channel_width; 321448d02dcbSHawking Zhang uint8_t channel_reserve[2]; 321548d02dcbSHawking Zhang uint8_t umc_info_reserved[16]; 321648d02dcbSHawking Zhang }; 321748d02dcbSHawking Zhang 32181fadf42eSAlex Deucher /* 32191fadf42eSAlex Deucher *************************************************************************** 32201fadf42eSAlex Deucher Data Table vram_info structure 32211fadf42eSAlex Deucher *************************************************************************** 32221fadf42eSAlex Deucher */ 322310e4b227SHawking Zhang struct atom_vram_module_v9 { 32241fadf42eSAlex Deucher // Design Specific Values 32251fadf42eSAlex Deucher uint32_t memory_size; // Total memory size in unit of MB for CONFIG_MEMSIZE zeros 3226801281feSHawking Zhang uint32_t channel_enable; // bit vector, each bit indicate specific channel enable or not 3227801281feSHawking Zhang uint32_t max_mem_clk; // max memory clock of this memory in unit of 10kHz, =0 means it is not defined 3228801281feSHawking Zhang uint16_t reserved[3]; 3229801281feSHawking Zhang uint16_t mem_voltage; // mem_voltage 32301fadf42eSAlex Deucher uint16_t vram_module_size; // Size of atom_vram_module_v9 32311fadf42eSAlex Deucher uint8_t ext_memory_id; // Current memory module ID 32321fadf42eSAlex Deucher uint8_t memory_type; // enum of atom_dgpu_vram_type 32331fadf42eSAlex Deucher uint8_t channel_num; // Number of mem. channels supported in this module 32341fadf42eSAlex Deucher uint8_t channel_width; // CHANNEL_16BIT/CHANNEL_32BIT/CHANNEL_64BIT 32351fadf42eSAlex Deucher uint8_t density; // _8Mx32, _16Mx32, _16Mx16, _32Mx16 32361fadf42eSAlex Deucher uint8_t tunningset_id; // MC phy registers set per. 32371fadf42eSAlex Deucher uint8_t vender_rev_id; // [7:4] Revision, [3:0] Vendor code 32381fadf42eSAlex Deucher uint8_t refreshrate; // [1:0]=RefreshFactor (00=8ms, 01=16ms, 10=32ms,11=64ms) 3239801281feSHawking Zhang uint8_t hbm_ven_rev_id; // hbm_ven_rev_id 3240801281feSHawking Zhang uint8_t vram_rsd2; // reserved 32411fadf42eSAlex Deucher char dram_pnstring[20]; // part number end with '0'. 32421fadf42eSAlex Deucher }; 32431fadf42eSAlex Deucher 324410e4b227SHawking Zhang struct atom_vram_info_header_v2_3 { 32451fadf42eSAlex Deucher struct atom_common_table_header table_header; 32461fadf42eSAlex Deucher uint16_t mem_adjust_tbloffset; // offset of atom_umc_init_reg_block structure for memory vendor specific UMC adjust setting 32471fadf42eSAlex Deucher uint16_t mem_clk_patch_tbloffset; // offset of atom_umc_init_reg_block structure for memory clock specific UMC setting 32481fadf42eSAlex Deucher uint16_t mc_adjust_pertile_tbloffset; // offset of atom_umc_init_reg_block structure for Per Byte Offset Preset Settings 32491fadf42eSAlex Deucher uint16_t mc_phyinit_tbloffset; // offset of atom_umc_init_reg_block structure for MC phy init set 32501fadf42eSAlex Deucher uint16_t dram_data_remap_tbloffset; // reserved for now 3251801281feSHawking Zhang uint16_t tmrs_seq_offset; // offset of HBM tmrs 3252801281feSHawking Zhang uint16_t post_ucode_init_offset; // offset of atom_umc_init_reg_block structure for MC phy init after MC uCode complete umc init 3253801281feSHawking Zhang uint16_t vram_rsd2; 32541fadf42eSAlex Deucher uint8_t vram_module_num; // indicate number of VRAM module 325510e4b227SHawking Zhang uint8_t umcip_min_ver; 325610e4b227SHawking Zhang uint8_t umcip_max_ver; 32571fadf42eSAlex Deucher uint8_t mc_phy_tile_num; // indicate the MCD tile number which use in DramDataRemapTbl and usMcAdjustPerTileTblOffset 32581fadf42eSAlex Deucher struct atom_vram_module_v9 vram_module[16]; // just for allocation, real number of blocks is in ucNumOfVRAMModule; 32591fadf42eSAlex Deucher }; 32601fadf42eSAlex Deucher 32611a482448SHawking Zhang /* 32621a482448SHawking Zhang *************************************************************************** 32631a482448SHawking Zhang Data Table vram_info v3.0 structure 32641a482448SHawking Zhang *************************************************************************** 32651a482448SHawking Zhang */ 32661a482448SHawking Zhang struct atom_vram_module_v3_0 { 32671a482448SHawking Zhang uint8_t density; 32681a482448SHawking Zhang uint8_t tunningset_id; 32691a482448SHawking Zhang uint8_t ext_memory_id; 32701a482448SHawking Zhang uint8_t dram_vendor_id; 32711a482448SHawking Zhang uint16_t dram_info_offset; 32721a482448SHawking Zhang uint16_t mem_tuning_offset; 32731a482448SHawking Zhang uint16_t tmrs_seq_offset; 32741a482448SHawking Zhang uint16_t reserved1; 32751a482448SHawking Zhang uint32_t dram_size_per_ch; 32761a482448SHawking Zhang uint32_t reserved[3]; 32771a482448SHawking Zhang char dram_pnstring[40]; 32781a482448SHawking Zhang }; 32791a482448SHawking Zhang 32801a482448SHawking Zhang struct atom_vram_info_header_v3_0 { 32811a482448SHawking Zhang struct atom_common_table_header table_header; 32821a482448SHawking Zhang uint16_t mem_tuning_table_offset; 32831a482448SHawking Zhang uint16_t dram_info_table_offset; 32841a482448SHawking Zhang uint16_t tmrs_table_offset; 32851a482448SHawking Zhang uint16_t mc_init_table_offset; 32861a482448SHawking Zhang uint16_t dram_data_remap_table_offset; 32871a482448SHawking Zhang uint16_t umc_emuinittable_offset; 32881a482448SHawking Zhang uint16_t reserved_sub_table_offset[2]; 32891a482448SHawking Zhang uint8_t vram_module_num; 32901a482448SHawking Zhang uint8_t umcip_min_ver; 32911a482448SHawking Zhang uint8_t umcip_max_ver; 32921a482448SHawking Zhang uint8_t mc_phy_tile_num; 32931a482448SHawking Zhang uint8_t memory_type; 32941a482448SHawking Zhang uint8_t channel_num; 32951a482448SHawking Zhang uint8_t channel_width; 32961a482448SHawking Zhang uint8_t reserved1; 32971a482448SHawking Zhang uint32_t channel_enable; 32981a482448SHawking Zhang uint32_t channel1_enable; 32991a482448SHawking Zhang uint32_t feature_enable; 33001a482448SHawking Zhang uint32_t feature1_enable; 33011a482448SHawking Zhang uint32_t hardcode_mem_size; 33021a482448SHawking Zhang uint32_t reserved4[4]; 33031a482448SHawking Zhang struct atom_vram_module_v3_0 vram_module[8]; 33041a482448SHawking Zhang }; 33051a482448SHawking Zhang 33061fadf42eSAlex Deucher struct atom_umc_register_addr_info{ 33071fadf42eSAlex Deucher uint32_t umc_register_addr:24; 33081fadf42eSAlex Deucher uint32_t umc_reg_type_ind:1; 33091fadf42eSAlex Deucher uint32_t umc_reg_rsvd:7; 33101fadf42eSAlex Deucher }; 33111fadf42eSAlex Deucher 33121fadf42eSAlex Deucher //atom_umc_register_addr_info. 33131fadf42eSAlex Deucher enum atom_umc_register_addr_info_flag{ 33141fadf42eSAlex Deucher b3ATOM_UMC_REG_ADD_INFO_INDIRECT_ACCESS =0x01, 33151fadf42eSAlex Deucher }; 33161fadf42eSAlex Deucher 33171fadf42eSAlex Deucher union atom_umc_register_addr_info_access 33181fadf42eSAlex Deucher { 33191fadf42eSAlex Deucher struct atom_umc_register_addr_info umc_reg_addr; 33201fadf42eSAlex Deucher uint32_t u32umc_reg_addr; 33211fadf42eSAlex Deucher }; 33221fadf42eSAlex Deucher 33231fadf42eSAlex Deucher struct atom_umc_reg_setting_id_config{ 33241fadf42eSAlex Deucher uint32_t memclockrange:24; 33251fadf42eSAlex Deucher uint32_t mem_blk_id:8; 33261fadf42eSAlex Deucher }; 33271fadf42eSAlex Deucher 33281fadf42eSAlex Deucher union atom_umc_reg_setting_id_config_access 33291fadf42eSAlex Deucher { 33301fadf42eSAlex Deucher struct atom_umc_reg_setting_id_config umc_id_access; 33311fadf42eSAlex Deucher uint32_t u32umc_id_access; 33321fadf42eSAlex Deucher }; 33331fadf42eSAlex Deucher 33341fadf42eSAlex Deucher struct atom_umc_reg_setting_data_block{ 33351fadf42eSAlex Deucher union atom_umc_reg_setting_id_config_access block_id; 33361fadf42eSAlex Deucher uint32_t u32umc_reg_data[1]; 33371fadf42eSAlex Deucher }; 33381fadf42eSAlex Deucher 33391fadf42eSAlex Deucher struct atom_umc_init_reg_block{ 33401fadf42eSAlex Deucher uint16_t umc_reg_num; 33411fadf42eSAlex Deucher uint16_t reserved; 33421fadf42eSAlex Deucher union atom_umc_register_addr_info_access umc_reg_list[1]; //for allocation purpose, the real number come from umc_reg_num; 33431fadf42eSAlex Deucher struct atom_umc_reg_setting_data_block umc_reg_setting_list[1]; 33441fadf42eSAlex Deucher }; 33451fadf42eSAlex Deucher 334610e4b227SHawking Zhang struct atom_vram_module_v10 { 334710e4b227SHawking Zhang // Design Specific Values 334810e4b227SHawking Zhang uint32_t memory_size; // Total memory size in unit of MB for CONFIG_MEMSIZE zeros 334910e4b227SHawking Zhang uint32_t channel_enable; // bit vector, each bit indicate specific channel enable or not 335010e4b227SHawking Zhang uint32_t max_mem_clk; // max memory clock of this memory in unit of 10kHz, =0 means it is not defined 335110e4b227SHawking Zhang uint16_t reserved[3]; 335210e4b227SHawking Zhang uint16_t mem_voltage; // mem_voltage 335310e4b227SHawking Zhang uint16_t vram_module_size; // Size of atom_vram_module_v9 335410e4b227SHawking Zhang uint8_t ext_memory_id; // Current memory module ID 335510e4b227SHawking Zhang uint8_t memory_type; // enum of atom_dgpu_vram_type 335610e4b227SHawking Zhang uint8_t channel_num; // Number of mem. channels supported in this module 335710e4b227SHawking Zhang uint8_t channel_width; // CHANNEL_16BIT/CHANNEL_32BIT/CHANNEL_64BIT 335810e4b227SHawking Zhang uint8_t density; // _8Mx32, _16Mx32, _16Mx16, _32Mx16 335910e4b227SHawking Zhang uint8_t tunningset_id; // MC phy registers set per 336010e4b227SHawking Zhang uint8_t vender_rev_id; // [7:4] Revision, [3:0] Vendor code 336110e4b227SHawking Zhang uint8_t refreshrate; // [1:0]=RefreshFactor (00=8ms, 01=16ms, 10=32ms,11=64ms) 336210e4b227SHawking Zhang uint8_t vram_flags; // bit0= bankgroup enable 336310e4b227SHawking Zhang uint8_t vram_rsd2; // reserved 336410e4b227SHawking Zhang uint16_t gddr6_mr10; // gddr6 mode register10 value 336510e4b227SHawking Zhang uint16_t gddr6_mr1; // gddr6 mode register1 value 336610e4b227SHawking Zhang uint16_t gddr6_mr2; // gddr6 mode register2 value 336710e4b227SHawking Zhang uint16_t gddr6_mr7; // gddr6 mode register7 value 336810e4b227SHawking Zhang char dram_pnstring[20]; // part number end with '0' 336910e4b227SHawking Zhang }; 337010e4b227SHawking Zhang 337110e4b227SHawking Zhang struct atom_vram_info_header_v2_4 { 337210e4b227SHawking Zhang struct atom_common_table_header table_header; 337310e4b227SHawking Zhang uint16_t mem_adjust_tbloffset; // offset of atom_umc_init_reg_block structure for memory vendor specific UMC adjust setting 337410e4b227SHawking Zhang uint16_t mem_clk_patch_tbloffset; // offset of atom_umc_init_reg_block structure for memory clock specific UMC setting 337510e4b227SHawking Zhang uint16_t mc_adjust_pertile_tbloffset; // offset of atom_umc_init_reg_block structure for Per Byte Offset Preset Settings 337610e4b227SHawking Zhang uint16_t mc_phyinit_tbloffset; // offset of atom_umc_init_reg_block structure for MC phy init set 337710e4b227SHawking Zhang uint16_t dram_data_remap_tbloffset; // reserved for now 337810e4b227SHawking Zhang uint16_t reserved; // offset of reserved 337910e4b227SHawking Zhang uint16_t post_ucode_init_offset; // offset of atom_umc_init_reg_block structure for MC phy init after MC uCode complete umc init 338010e4b227SHawking Zhang uint16_t vram_rsd2; 338110e4b227SHawking Zhang uint8_t vram_module_num; // indicate number of VRAM module 338210e4b227SHawking Zhang uint8_t umcip_min_ver; 338310e4b227SHawking Zhang uint8_t umcip_max_ver; 338410e4b227SHawking Zhang uint8_t mc_phy_tile_num; // indicate the MCD tile number which use in DramDataRemapTbl and usMcAdjustPerTileTblOffset 338510e4b227SHawking Zhang struct atom_vram_module_v10 vram_module[16]; // just for allocation, real number of blocks is in ucNumOfVRAMModule; 338610e4b227SHawking Zhang }; 33871fadf42eSAlex Deucher 33889d370816SHawking Zhang struct atom_vram_module_v11 { 33899d370816SHawking Zhang // Design Specific Values 33909d370816SHawking Zhang uint32_t memory_size; // Total memory size in unit of MB for CONFIG_MEMSIZE zeros 33919d370816SHawking Zhang uint32_t channel_enable; // bit vector, each bit indicate specific channel enable or not 33929d370816SHawking Zhang uint16_t mem_voltage; // mem_voltage 33939d370816SHawking Zhang uint16_t vram_module_size; // Size of atom_vram_module_v9 33949d370816SHawking Zhang uint8_t ext_memory_id; // Current memory module ID 33959d370816SHawking Zhang uint8_t memory_type; // enum of atom_dgpu_vram_type 33969d370816SHawking Zhang uint8_t channel_num; // Number of mem. channels supported in this module 33979d370816SHawking Zhang uint8_t channel_width; // CHANNEL_16BIT/CHANNEL_32BIT/CHANNEL_64BIT 33989d370816SHawking Zhang uint8_t density; // _8Mx32, _16Mx32, _16Mx16, _32Mx16 33999d370816SHawking Zhang uint8_t tunningset_id; // MC phy registers set per. 34009d370816SHawking Zhang uint16_t reserved[4]; // reserved 34019d370816SHawking Zhang uint8_t vender_rev_id; // [7:4] Revision, [3:0] Vendor code 34029d370816SHawking Zhang uint8_t refreshrate; // [1:0]=RefreshFactor (00=8ms, 01=16ms, 10=32ms,11=64ms) 34039d370816SHawking Zhang uint8_t vram_flags; // bit0= bankgroup enable 34049d370816SHawking Zhang uint8_t vram_rsd2; // reserved 34059d370816SHawking Zhang uint16_t gddr6_mr10; // gddr6 mode register10 value 34069d370816SHawking Zhang uint16_t gddr6_mr0; // gddr6 mode register0 value 34079d370816SHawking Zhang uint16_t gddr6_mr1; // gddr6 mode register1 value 34089d370816SHawking Zhang uint16_t gddr6_mr2; // gddr6 mode register2 value 34099d370816SHawking Zhang uint16_t gddr6_mr4; // gddr6 mode register4 value 34109d370816SHawking Zhang uint16_t gddr6_mr7; // gddr6 mode register7 value 34119d370816SHawking Zhang uint16_t gddr6_mr8; // gddr6 mode register8 value 34129d370816SHawking Zhang char dram_pnstring[40]; // part number end with '0'. 34139d370816SHawking Zhang }; 34149d370816SHawking Zhang 34159d370816SHawking Zhang struct atom_gddr6_ac_timing_v2_5 { 34169d370816SHawking Zhang uint32_t u32umc_id_access; 34179d370816SHawking Zhang uint8_t RL; 34189d370816SHawking Zhang uint8_t WL; 34199d370816SHawking Zhang uint8_t tRAS; 34209d370816SHawking Zhang uint8_t tRC; 34219d370816SHawking Zhang 34229d370816SHawking Zhang uint16_t tREFI; 34239d370816SHawking Zhang uint8_t tRFC; 34249d370816SHawking Zhang uint8_t tRFCpb; 34259d370816SHawking Zhang 34269d370816SHawking Zhang uint8_t tRREFD; 34279d370816SHawking Zhang uint8_t tRCDRD; 34289d370816SHawking Zhang uint8_t tRCDWR; 34299d370816SHawking Zhang uint8_t tRP; 34309d370816SHawking Zhang 34319d370816SHawking Zhang uint8_t tRRDS; 34329d370816SHawking Zhang uint8_t tRRDL; 34339d370816SHawking Zhang uint8_t tWR; 34349d370816SHawking Zhang uint8_t tWTRS; 34359d370816SHawking Zhang 34369d370816SHawking Zhang uint8_t tWTRL; 34379d370816SHawking Zhang uint8_t tFAW; 34389d370816SHawking Zhang uint8_t tCCDS; 34399d370816SHawking Zhang uint8_t tCCDL; 34409d370816SHawking Zhang 34419d370816SHawking Zhang uint8_t tCRCRL; 34429d370816SHawking Zhang uint8_t tCRCWL; 34439d370816SHawking Zhang uint8_t tCKE; 34449d370816SHawking Zhang uint8_t tCKSRE; 34459d370816SHawking Zhang 34469d370816SHawking Zhang uint8_t tCKSRX; 34479d370816SHawking Zhang uint8_t tRTPS; 34489d370816SHawking Zhang uint8_t tRTPL; 34499d370816SHawking Zhang uint8_t tMRD; 34509d370816SHawking Zhang 34519d370816SHawking Zhang uint8_t tMOD; 34529d370816SHawking Zhang uint8_t tXS; 34539d370816SHawking Zhang uint8_t tXHP; 34549d370816SHawking Zhang uint8_t tXSMRS; 34559d370816SHawking Zhang 34569d370816SHawking Zhang uint32_t tXSH; 34579d370816SHawking Zhang 34589d370816SHawking Zhang uint8_t tPD; 34599d370816SHawking Zhang uint8_t tXP; 34609d370816SHawking Zhang uint8_t tCPDED; 34619d370816SHawking Zhang uint8_t tACTPDE; 34629d370816SHawking Zhang 34639d370816SHawking Zhang uint8_t tPREPDE; 34649d370816SHawking Zhang uint8_t tREFPDE; 34659d370816SHawking Zhang uint8_t tMRSPDEN; 34669d370816SHawking Zhang uint8_t tRDSRE; 34679d370816SHawking Zhang 34689d370816SHawking Zhang uint8_t tWRSRE; 34699d370816SHawking Zhang uint8_t tPPD; 34709d370816SHawking Zhang uint8_t tCCDMW; 34719d370816SHawking Zhang uint8_t tWTRTR; 34729d370816SHawking Zhang 34739d370816SHawking Zhang uint8_t tLTLTR; 34749d370816SHawking Zhang uint8_t tREFTR; 34759d370816SHawking Zhang uint8_t VNDR; 34769d370816SHawking Zhang uint8_t reserved[9]; 34779d370816SHawking Zhang }; 34789d370816SHawking Zhang 34799d370816SHawking Zhang struct atom_gddr6_bit_byte_remap { 34809d370816SHawking Zhang uint32_t dphy_byteremap; //mmUMC_DPHY_ByteRemap 34819d370816SHawking Zhang uint32_t dphy_bitremap0; //mmUMC_DPHY_BitRemap0 34829d370816SHawking Zhang uint32_t dphy_bitremap1; //mmUMC_DPHY_BitRemap1 34839d370816SHawking Zhang uint32_t dphy_bitremap2; //mmUMC_DPHY_BitRemap2 34849d370816SHawking Zhang uint32_t aphy_bitremap0; //mmUMC_APHY_BitRemap0 34859d370816SHawking Zhang uint32_t aphy_bitremap1; //mmUMC_APHY_BitRemap1 34869d370816SHawking Zhang uint32_t phy_dram; //mmUMC_PHY_DRAM 34879d370816SHawking Zhang }; 34889d370816SHawking Zhang 34899d370816SHawking Zhang struct atom_gddr6_dram_data_remap { 34909d370816SHawking Zhang uint32_t table_size; 34919d370816SHawking Zhang uint8_t phyintf_ck_inverted[8]; //UMC_PHY_PHYINTF_CNTL.INV_CK 34929d370816SHawking Zhang struct atom_gddr6_bit_byte_remap bit_byte_remap[16]; 34939d370816SHawking Zhang }; 34949d370816SHawking Zhang 34959d370816SHawking Zhang struct atom_vram_info_header_v2_5 { 34969d370816SHawking Zhang struct atom_common_table_header table_header; 34979d370816SHawking Zhang uint16_t mem_adjust_tbloffset; // offset of atom_umc_init_reg_block structure for memory vendor specific UMC adjust settings 34989d370816SHawking Zhang uint16_t gddr6_ac_timing_offset; // offset of atom_gddr6_ac_timing_v2_5 structure for memory clock specific UMC settings 34999d370816SHawking Zhang uint16_t mc_adjust_pertile_tbloffset; // offset of atom_umc_init_reg_block structure for Per Byte Offset Preset Settings 35009d370816SHawking Zhang uint16_t mc_phyinit_tbloffset; // offset of atom_umc_init_reg_block structure for MC phy init set 35019d370816SHawking Zhang uint16_t dram_data_remap_tbloffset; // offset of atom_gddr6_dram_data_remap array to indicate DRAM data lane to GPU mapping 35029d370816SHawking Zhang uint16_t reserved; // offset of reserved 35039d370816SHawking Zhang uint16_t post_ucode_init_offset; // offset of atom_umc_init_reg_block structure for MC phy init after MC uCode complete umc init 35049d370816SHawking Zhang uint16_t strobe_mode_patch_tbloffset; // offset of atom_umc_init_reg_block structure for Strobe Mode memory clock specific UMC settings 35059d370816SHawking Zhang uint8_t vram_module_num; // indicate number of VRAM module 35069d370816SHawking Zhang uint8_t umcip_min_ver; 35079d370816SHawking Zhang uint8_t umcip_max_ver; 35089d370816SHawking Zhang uint8_t mc_phy_tile_num; // indicate the MCD tile number which use in DramDataRemapTbl and usMcAdjustPerTileTblOffset 35099d370816SHawking Zhang struct atom_vram_module_v11 vram_module[16]; // just for allocation, real number of blocks is in ucNumOfVRAMModule; 35109d370816SHawking Zhang }; 35119d370816SHawking Zhang 3512f31c4a11SHawking Zhang struct atom_vram_info_header_v2_6 { 3513f31c4a11SHawking Zhang struct atom_common_table_header table_header; 3514f31c4a11SHawking Zhang uint16_t mem_adjust_tbloffset; 3515f31c4a11SHawking Zhang uint16_t mem_clk_patch_tbloffset; 3516f31c4a11SHawking Zhang uint16_t mc_adjust_pertile_tbloffset; 3517f31c4a11SHawking Zhang uint16_t mc_phyinit_tbloffset; 3518f31c4a11SHawking Zhang uint16_t dram_data_remap_tbloffset; 3519f31c4a11SHawking Zhang uint16_t tmrs_seq_offset; 3520f31c4a11SHawking Zhang uint16_t post_ucode_init_offset; 3521f31c4a11SHawking Zhang uint16_t vram_rsd2; 3522f31c4a11SHawking Zhang uint8_t vram_module_num; 3523f31c4a11SHawking Zhang uint8_t umcip_min_ver; 3524f31c4a11SHawking Zhang uint8_t umcip_max_ver; 3525f31c4a11SHawking Zhang uint8_t mc_phy_tile_num; 3526f31c4a11SHawking Zhang struct atom_vram_module_v9 vram_module[16]; 3527f31c4a11SHawking Zhang }; 35281fadf42eSAlex Deucher /* 35291fadf42eSAlex Deucher *************************************************************************** 35301fadf42eSAlex Deucher Data Table voltageobject_info structure 35311fadf42eSAlex Deucher *************************************************************************** 35321fadf42eSAlex Deucher */ 35331fadf42eSAlex Deucher struct atom_i2c_data_entry 35341fadf42eSAlex Deucher { 35351fadf42eSAlex Deucher uint16_t i2c_reg_index; // i2c register address, can be up to 16bit 35361fadf42eSAlex Deucher uint16_t i2c_reg_data; // i2c register data, can be up to 16bit 35371fadf42eSAlex Deucher }; 35381fadf42eSAlex Deucher 35391fadf42eSAlex Deucher struct atom_voltage_object_header_v4{ 35401fadf42eSAlex Deucher uint8_t voltage_type; //enum atom_voltage_type 35411fadf42eSAlex Deucher uint8_t voltage_mode; //enum atom_voltage_object_mode 35421fadf42eSAlex Deucher uint16_t object_size; //Size of Object 35431fadf42eSAlex Deucher }; 35441fadf42eSAlex Deucher 35451fadf42eSAlex Deucher // atom_voltage_object_header_v4.voltage_mode 35461fadf42eSAlex Deucher enum atom_voltage_object_mode 35471fadf42eSAlex Deucher { 35481fadf42eSAlex Deucher VOLTAGE_OBJ_GPIO_LUT = 0, //VOLTAGE and GPIO Lookup table ->atom_gpio_voltage_object_v4 35491fadf42eSAlex Deucher VOLTAGE_OBJ_VR_I2C_INIT_SEQ = 3, //VOLTAGE REGULATOR INIT sequece through I2C -> atom_i2c_voltage_object_v4 35501fadf42eSAlex Deucher VOLTAGE_OBJ_PHASE_LUT = 4, //Set Vregulator Phase lookup table ->atom_gpio_voltage_object_v4 35511fadf42eSAlex Deucher VOLTAGE_OBJ_SVID2 = 7, //Indicate voltage control by SVID2 ->atom_svid2_voltage_object_v4 35521fadf42eSAlex Deucher VOLTAGE_OBJ_EVV = 8, 35531fadf42eSAlex Deucher VOLTAGE_OBJ_MERGED_POWER = 9, 35541fadf42eSAlex Deucher }; 35551fadf42eSAlex Deucher 35561fadf42eSAlex Deucher struct atom_i2c_voltage_object_v4 35571fadf42eSAlex Deucher { 35581fadf42eSAlex Deucher struct atom_voltage_object_header_v4 header; // voltage mode = VOLTAGE_OBJ_VR_I2C_INIT_SEQ 35591fadf42eSAlex Deucher uint8_t regulator_id; //Indicate Voltage Regulator Id 35601fadf42eSAlex Deucher uint8_t i2c_id; 35611fadf42eSAlex Deucher uint8_t i2c_slave_addr; 35621fadf42eSAlex Deucher uint8_t i2c_control_offset; 35631fadf42eSAlex Deucher uint8_t i2c_flag; // Bit0: 0 - One byte data; 1 - Two byte data 35641fadf42eSAlex Deucher uint8_t i2c_speed; // =0, use default i2c speed, otherwise use it in unit of kHz. 35651fadf42eSAlex Deucher uint8_t reserved[2]; 35661fadf42eSAlex Deucher struct atom_i2c_data_entry i2cdatalut[1]; // end with 0xff 35671fadf42eSAlex Deucher }; 35681fadf42eSAlex Deucher 35691fadf42eSAlex Deucher // ATOM_I2C_VOLTAGE_OBJECT_V3.ucVoltageControlFlag 35701fadf42eSAlex Deucher enum atom_i2c_voltage_control_flag 35711fadf42eSAlex Deucher { 35721fadf42eSAlex Deucher VOLTAGE_DATA_ONE_BYTE = 0, 35731fadf42eSAlex Deucher VOLTAGE_DATA_TWO_BYTE = 1, 35741fadf42eSAlex Deucher }; 35751fadf42eSAlex Deucher 35761fadf42eSAlex Deucher 35771fadf42eSAlex Deucher struct atom_voltage_gpio_map_lut 35781fadf42eSAlex Deucher { 35791fadf42eSAlex Deucher uint32_t voltage_gpio_reg_val; // The Voltage ID which is used to program GPIO register 35801fadf42eSAlex Deucher uint16_t voltage_level_mv; // The corresponding Voltage Value, in mV 35811fadf42eSAlex Deucher }; 35821fadf42eSAlex Deucher 35831fadf42eSAlex Deucher struct atom_gpio_voltage_object_v4 35841fadf42eSAlex Deucher { 35851fadf42eSAlex Deucher struct atom_voltage_object_header_v4 header; // voltage mode = VOLTAGE_OBJ_GPIO_LUT or VOLTAGE_OBJ_PHASE_LUT 35861fadf42eSAlex Deucher uint8_t gpio_control_id; // default is 0 which indicate control through CG VID mode 35871fadf42eSAlex Deucher uint8_t gpio_entry_num; // indiate the entry numbers of Votlage/Gpio value Look up table 35881fadf42eSAlex Deucher uint8_t phase_delay_us; // phase delay in unit of micro second 35891fadf42eSAlex Deucher uint8_t reserved; 35901fadf42eSAlex Deucher uint32_t gpio_mask_val; // GPIO Mask value 359105d9e24dSAlex Deucher struct atom_voltage_gpio_map_lut voltage_gpio_lut[] __counted_by(gpio_entry_num); 35921fadf42eSAlex Deucher }; 35931fadf42eSAlex Deucher 35941fadf42eSAlex Deucher struct atom_svid2_voltage_object_v4 35951fadf42eSAlex Deucher { 35961fadf42eSAlex Deucher struct atom_voltage_object_header_v4 header; // voltage mode = VOLTAGE_OBJ_SVID2 35971fadf42eSAlex Deucher uint8_t loadline_psi1; // bit4:0= loadline setting ( Core Loadline trim and offset trim ), bit5=0:PSI1_L disable =1: PSI1_L enable 35981fadf42eSAlex Deucher uint8_t psi0_l_vid_thresd; // VR PSI0_L VID threshold 35991fadf42eSAlex Deucher uint8_t psi0_enable; // 36001fadf42eSAlex Deucher uint8_t maxvstep; 36011fadf42eSAlex Deucher uint8_t telemetry_offset; 36021fadf42eSAlex Deucher uint8_t telemetry_gain; 36031fadf42eSAlex Deucher uint16_t reserved1; 36041fadf42eSAlex Deucher }; 36051fadf42eSAlex Deucher 36061fadf42eSAlex Deucher struct atom_merged_voltage_object_v4 36071fadf42eSAlex Deucher { 36081fadf42eSAlex Deucher struct atom_voltage_object_header_v4 header; // voltage mode = VOLTAGE_OBJ_MERGED_POWER 36091fadf42eSAlex Deucher uint8_t merged_powerrail_type; //enum atom_voltage_type 36101fadf42eSAlex Deucher uint8_t reserved[3]; 36111fadf42eSAlex Deucher }; 36121fadf42eSAlex Deucher 36131fadf42eSAlex Deucher union atom_voltage_object_v4{ 36141fadf42eSAlex Deucher struct atom_gpio_voltage_object_v4 gpio_voltage_obj; 36151fadf42eSAlex Deucher struct atom_i2c_voltage_object_v4 i2c_voltage_obj; 36161fadf42eSAlex Deucher struct atom_svid2_voltage_object_v4 svid2_voltage_obj; 36171fadf42eSAlex Deucher struct atom_merged_voltage_object_v4 merged_voltage_obj; 36181fadf42eSAlex Deucher }; 36191fadf42eSAlex Deucher 36201fadf42eSAlex Deucher struct atom_voltage_objects_info_v4_1 36211fadf42eSAlex Deucher { 36221fadf42eSAlex Deucher struct atom_common_table_header table_header; 36231fadf42eSAlex Deucher union atom_voltage_object_v4 voltage_object[1]; //Info for Voltage control 36241fadf42eSAlex Deucher }; 36251fadf42eSAlex Deucher 36261fadf42eSAlex Deucher 36271fadf42eSAlex Deucher /* 36281fadf42eSAlex Deucher *************************************************************************** 36291fadf42eSAlex Deucher All Command Function structure definition 36301fadf42eSAlex Deucher *************************************************************************** 36311fadf42eSAlex Deucher */ 36321fadf42eSAlex Deucher 36331fadf42eSAlex Deucher /* 36341fadf42eSAlex Deucher *************************************************************************** 36351fadf42eSAlex Deucher Structures used by asic_init 36361fadf42eSAlex Deucher *************************************************************************** 36371fadf42eSAlex Deucher */ 36381fadf42eSAlex Deucher 36391fadf42eSAlex Deucher struct asic_init_engine_parameters 36401fadf42eSAlex Deucher { 36411fadf42eSAlex Deucher uint32_t sclkfreqin10khz:24; 36421fadf42eSAlex Deucher uint32_t engineflag:8; /* enum atom_asic_init_engine_flag */ 36431fadf42eSAlex Deucher }; 36441fadf42eSAlex Deucher 36451fadf42eSAlex Deucher struct asic_init_mem_parameters 36461fadf42eSAlex Deucher { 36471fadf42eSAlex Deucher uint32_t mclkfreqin10khz:24; 36481fadf42eSAlex Deucher uint32_t memflag:8; /* enum atom_asic_init_mem_flag */ 36491fadf42eSAlex Deucher }; 36501fadf42eSAlex Deucher 36511fadf42eSAlex Deucher struct asic_init_parameters_v2_1 36521fadf42eSAlex Deucher { 36531fadf42eSAlex Deucher struct asic_init_engine_parameters engineparam; 36541fadf42eSAlex Deucher struct asic_init_mem_parameters memparam; 36551fadf42eSAlex Deucher }; 36561fadf42eSAlex Deucher 36571fadf42eSAlex Deucher struct asic_init_ps_allocation_v2_1 36581fadf42eSAlex Deucher { 36591fadf42eSAlex Deucher struct asic_init_parameters_v2_1 param; 36601fadf42eSAlex Deucher uint32_t reserved[16]; 36611fadf42eSAlex Deucher }; 36621fadf42eSAlex Deucher 36631fadf42eSAlex Deucher 36641fadf42eSAlex Deucher enum atom_asic_init_engine_flag 36651fadf42eSAlex Deucher { 36661fadf42eSAlex Deucher b3NORMAL_ENGINE_INIT = 0, 36671fadf42eSAlex Deucher b3SRIOV_SKIP_ASIC_INIT = 0x02, 36681fadf42eSAlex Deucher b3SRIOV_LOAD_UCODE = 0x40, 36691fadf42eSAlex Deucher }; 36701fadf42eSAlex Deucher 36711fadf42eSAlex Deucher enum atom_asic_init_mem_flag 36721fadf42eSAlex Deucher { 36731fadf42eSAlex Deucher b3NORMAL_MEM_INIT = 0, 36741fadf42eSAlex Deucher b3DRAM_SELF_REFRESH_EXIT =0x20, 36751fadf42eSAlex Deucher }; 36761fadf42eSAlex Deucher 36771fadf42eSAlex Deucher /* 36781fadf42eSAlex Deucher *************************************************************************** 36791fadf42eSAlex Deucher Structures used by setengineclock 36801fadf42eSAlex Deucher *************************************************************************** 36811fadf42eSAlex Deucher */ 36821fadf42eSAlex Deucher 36831fadf42eSAlex Deucher struct set_engine_clock_parameters_v2_1 36841fadf42eSAlex Deucher { 36851fadf42eSAlex Deucher uint32_t sclkfreqin10khz:24; 36861fadf42eSAlex Deucher uint32_t sclkflag:8; /* enum atom_set_engine_mem_clock_flag, */ 36871fadf42eSAlex Deucher uint32_t reserved[10]; 36881fadf42eSAlex Deucher }; 36891fadf42eSAlex Deucher 36901fadf42eSAlex Deucher struct set_engine_clock_ps_allocation_v2_1 36911fadf42eSAlex Deucher { 36921fadf42eSAlex Deucher struct set_engine_clock_parameters_v2_1 clockinfo; 36931fadf42eSAlex Deucher uint32_t reserved[10]; 36941fadf42eSAlex Deucher }; 36951fadf42eSAlex Deucher 36961fadf42eSAlex Deucher 36971fadf42eSAlex Deucher enum atom_set_engine_mem_clock_flag 36981fadf42eSAlex Deucher { 36991fadf42eSAlex Deucher b3NORMAL_CHANGE_CLOCK = 0, 37001fadf42eSAlex Deucher b3FIRST_TIME_CHANGE_CLOCK = 0x08, 37011fadf42eSAlex Deucher b3STORE_DPM_TRAINGING = 0x40, //Applicable to memory clock change,when set, it store specific DPM mode training result 37021fadf42eSAlex Deucher }; 37031fadf42eSAlex Deucher 37041fadf42eSAlex Deucher /* 37051fadf42eSAlex Deucher *************************************************************************** 37061fadf42eSAlex Deucher Structures used by getengineclock 37071fadf42eSAlex Deucher *************************************************************************** 37081fadf42eSAlex Deucher */ 37091fadf42eSAlex Deucher struct get_engine_clock_parameter 37101fadf42eSAlex Deucher { 37111fadf42eSAlex Deucher uint32_t sclk_10khz; // current engine speed in 10KHz unit 37121fadf42eSAlex Deucher uint32_t reserved; 37131fadf42eSAlex Deucher }; 37141fadf42eSAlex Deucher 37151fadf42eSAlex Deucher /* 37161fadf42eSAlex Deucher *************************************************************************** 37171fadf42eSAlex Deucher Structures used by setmemoryclock 37181fadf42eSAlex Deucher *************************************************************************** 37191fadf42eSAlex Deucher */ 37201fadf42eSAlex Deucher struct set_memory_clock_parameters_v2_1 37211fadf42eSAlex Deucher { 37221fadf42eSAlex Deucher uint32_t mclkfreqin10khz:24; 37231fadf42eSAlex Deucher uint32_t mclkflag:8; /* enum atom_set_engine_mem_clock_flag, */ 37241fadf42eSAlex Deucher uint32_t reserved[10]; 37251fadf42eSAlex Deucher }; 37261fadf42eSAlex Deucher 37271fadf42eSAlex Deucher struct set_memory_clock_ps_allocation_v2_1 37281fadf42eSAlex Deucher { 37291fadf42eSAlex Deucher struct set_memory_clock_parameters_v2_1 clockinfo; 37301fadf42eSAlex Deucher uint32_t reserved[10]; 37311fadf42eSAlex Deucher }; 37321fadf42eSAlex Deucher 37331fadf42eSAlex Deucher 37341fadf42eSAlex Deucher /* 37351fadf42eSAlex Deucher *************************************************************************** 37361fadf42eSAlex Deucher Structures used by getmemoryclock 37371fadf42eSAlex Deucher *************************************************************************** 37381fadf42eSAlex Deucher */ 37391fadf42eSAlex Deucher struct get_memory_clock_parameter 37401fadf42eSAlex Deucher { 37411fadf42eSAlex Deucher uint32_t mclk_10khz; // current engine speed in 10KHz unit 37421fadf42eSAlex Deucher uint32_t reserved; 37431fadf42eSAlex Deucher }; 37441fadf42eSAlex Deucher 37451fadf42eSAlex Deucher 37461fadf42eSAlex Deucher 37471fadf42eSAlex Deucher /* 37481fadf42eSAlex Deucher *************************************************************************** 37491fadf42eSAlex Deucher Structures used by setvoltage 37501fadf42eSAlex Deucher *************************************************************************** 37511fadf42eSAlex Deucher */ 37521fadf42eSAlex Deucher 37531fadf42eSAlex Deucher struct set_voltage_parameters_v1_4 37541fadf42eSAlex Deucher { 37551fadf42eSAlex Deucher uint8_t voltagetype; /* enum atom_voltage_type */ 37561fadf42eSAlex Deucher uint8_t command; /* Indicate action: Set voltage level, enum atom_set_voltage_command */ 37571fadf42eSAlex Deucher uint16_t vlevel_mv; /* real voltage level in unit of mv or Voltage Phase (0, 1, 2, .. ) */ 37581fadf42eSAlex Deucher }; 37591fadf42eSAlex Deucher 37601fadf42eSAlex Deucher //set_voltage_parameters_v2_1.voltagemode 37611fadf42eSAlex Deucher enum atom_set_voltage_command{ 37621fadf42eSAlex Deucher ATOM_SET_VOLTAGE = 0, 37631fadf42eSAlex Deucher ATOM_INIT_VOLTAGE_REGULATOR = 3, 37641fadf42eSAlex Deucher ATOM_SET_VOLTAGE_PHASE = 4, 37651fadf42eSAlex Deucher ATOM_GET_LEAKAGE_ID = 8, 37661fadf42eSAlex Deucher }; 37671fadf42eSAlex Deucher 37681fadf42eSAlex Deucher struct set_voltage_ps_allocation_v1_4 37691fadf42eSAlex Deucher { 37701fadf42eSAlex Deucher struct set_voltage_parameters_v1_4 setvoltageparam; 37711fadf42eSAlex Deucher uint32_t reserved[10]; 37721fadf42eSAlex Deucher }; 37731fadf42eSAlex Deucher 37741fadf42eSAlex Deucher 37751fadf42eSAlex Deucher /* 37761fadf42eSAlex Deucher *************************************************************************** 37771fadf42eSAlex Deucher Structures used by computegpuclockparam 37781fadf42eSAlex Deucher *************************************************************************** 37791fadf42eSAlex Deucher */ 37801fadf42eSAlex Deucher 37811fadf42eSAlex Deucher //ATOM_COMPUTE_CLOCK_FREQ.ulComputeClockFlag 37821fadf42eSAlex Deucher enum atom_gpu_clock_type 37831fadf42eSAlex Deucher { 37841fadf42eSAlex Deucher COMPUTE_GPUCLK_INPUT_FLAG_DEFAULT_GPUCLK =0x00, 37851fadf42eSAlex Deucher COMPUTE_GPUCLK_INPUT_FLAG_GFXCLK =0x01, 37861fadf42eSAlex Deucher COMPUTE_GPUCLK_INPUT_FLAG_UCLK =0x02, 37871fadf42eSAlex Deucher }; 37881fadf42eSAlex Deucher 37891fadf42eSAlex Deucher struct compute_gpu_clock_input_parameter_v1_8 37901fadf42eSAlex Deucher { 37911fadf42eSAlex Deucher uint32_t gpuclock_10khz:24; //Input= target clock, output = actual clock 37921fadf42eSAlex Deucher uint32_t gpu_clock_type:8; //Input indicate clock type: enum atom_gpu_clock_type 37931fadf42eSAlex Deucher uint32_t reserved[5]; 37941fadf42eSAlex Deucher }; 37951fadf42eSAlex Deucher 37961fadf42eSAlex Deucher 37971fadf42eSAlex Deucher struct compute_gpu_clock_output_parameter_v1_8 37981fadf42eSAlex Deucher { 37991fadf42eSAlex Deucher uint32_t gpuclock_10khz:24; //Input= target clock, output = actual clock 38001fadf42eSAlex Deucher uint32_t dfs_did:8; //return parameter: DFS divider which is used to program to register directly 38011fadf42eSAlex Deucher uint32_t pll_fb_mult; //Feedback Multiplier, bit 8:0 int, bit 15:12 post_div, bit 31:16 frac 38021fadf42eSAlex Deucher uint32_t pll_ss_fbsmult; // Spread FB Mult: bit 8:0 int, bit 31:16 frac 38031fadf42eSAlex Deucher uint16_t pll_ss_slew_frac; 38041fadf42eSAlex Deucher uint8_t pll_ss_enable; 38051fadf42eSAlex Deucher uint8_t reserved; 38061fadf42eSAlex Deucher uint32_t reserved1[2]; 38071fadf42eSAlex Deucher }; 38081fadf42eSAlex Deucher 38091fadf42eSAlex Deucher 38101fadf42eSAlex Deucher 38111fadf42eSAlex Deucher /* 38121fadf42eSAlex Deucher *************************************************************************** 38131fadf42eSAlex Deucher Structures used by ReadEfuseValue 38141fadf42eSAlex Deucher *************************************************************************** 38151fadf42eSAlex Deucher */ 38161fadf42eSAlex Deucher 38171fadf42eSAlex Deucher struct read_efuse_input_parameters_v3_1 38181fadf42eSAlex Deucher { 38191fadf42eSAlex Deucher uint16_t efuse_start_index; 38201fadf42eSAlex Deucher uint8_t reserved; 38211fadf42eSAlex Deucher uint8_t bitslen; 38221fadf42eSAlex Deucher }; 38231fadf42eSAlex Deucher 38241fadf42eSAlex Deucher // ReadEfuseValue input/output parameter 38251fadf42eSAlex Deucher union read_efuse_value_parameters_v3_1 38261fadf42eSAlex Deucher { 38271fadf42eSAlex Deucher struct read_efuse_input_parameters_v3_1 efuse_info; 38281fadf42eSAlex Deucher uint32_t efusevalue; 38291fadf42eSAlex Deucher }; 38301fadf42eSAlex Deucher 38311fadf42eSAlex Deucher 38321fadf42eSAlex Deucher /* 38331fadf42eSAlex Deucher *************************************************************************** 38341fadf42eSAlex Deucher Structures used by getsmuclockinfo 38351fadf42eSAlex Deucher *************************************************************************** 38361fadf42eSAlex Deucher */ 38371fadf42eSAlex Deucher struct atom_get_smu_clock_info_parameters_v3_1 38381fadf42eSAlex Deucher { 38391fadf42eSAlex Deucher uint8_t syspll_id; // 0= syspll0, 1=syspll1, 2=syspll2 38401fadf42eSAlex Deucher uint8_t clk_id; // atom_smu9_syspll0_clock_id (only valid when command == GET_SMU_CLOCK_INFO_V3_1_GET_CLOCK_FREQ ) 38411fadf42eSAlex Deucher uint8_t command; // enum of atom_get_smu_clock_info_command 38421fadf42eSAlex Deucher uint8_t dfsdid; // =0: get DFS DID from register, >0, give DFS divider, (only valid when command == GET_SMU_CLOCK_INFO_V3_1_GET_CLOCK_FREQ ) 38431fadf42eSAlex Deucher }; 38441fadf42eSAlex Deucher 38451fadf42eSAlex Deucher enum atom_get_smu_clock_info_command 38461fadf42eSAlex Deucher { 38471fadf42eSAlex Deucher GET_SMU_CLOCK_INFO_V3_1_GET_CLOCK_FREQ = 0, 38481fadf42eSAlex Deucher GET_SMU_CLOCK_INFO_V3_1_GET_PLLVCO_FREQ = 1, 38491fadf42eSAlex Deucher GET_SMU_CLOCK_INFO_V3_1_GET_PLLREFCLK_FREQ = 2, 38501fadf42eSAlex Deucher }; 38511fadf42eSAlex Deucher 38521fadf42eSAlex Deucher enum atom_smu9_syspll0_clock_id 38531fadf42eSAlex Deucher { 38541fadf42eSAlex Deucher SMU9_SYSPLL0_SMNCLK_ID = 0, // SMNCLK 38551fadf42eSAlex Deucher SMU9_SYSPLL0_SOCCLK_ID = 1, // SOCCLK (FCLK) 38561fadf42eSAlex Deucher SMU9_SYSPLL0_MP0CLK_ID = 2, // MP0CLK 38571fadf42eSAlex Deucher SMU9_SYSPLL0_MP1CLK_ID = 3, // MP1CLK 38581fadf42eSAlex Deucher SMU9_SYSPLL0_LCLK_ID = 4, // LCLK 38591fadf42eSAlex Deucher SMU9_SYSPLL0_DCLK_ID = 5, // DCLK 38601fadf42eSAlex Deucher SMU9_SYSPLL0_VCLK_ID = 6, // VCLK 38611fadf42eSAlex Deucher SMU9_SYSPLL0_ECLK_ID = 7, // ECLK 38621fadf42eSAlex Deucher SMU9_SYSPLL0_DCEFCLK_ID = 8, // DCEFCLK 38631fadf42eSAlex Deucher SMU9_SYSPLL0_DPREFCLK_ID = 10, // DPREFCLK 38641fadf42eSAlex Deucher SMU9_SYSPLL0_DISPCLK_ID = 11, // DISPCLK 38651fadf42eSAlex Deucher }; 38661fadf42eSAlex Deucher 38673aabfcd7SJerry (Fangzhi) Zuo enum atom_smu11_syspll_id { 38683aabfcd7SJerry (Fangzhi) Zuo SMU11_SYSPLL0_ID = 0, 38693aabfcd7SJerry (Fangzhi) Zuo SMU11_SYSPLL1_0_ID = 1, 38703aabfcd7SJerry (Fangzhi) Zuo SMU11_SYSPLL1_1_ID = 2, 38713aabfcd7SJerry (Fangzhi) Zuo SMU11_SYSPLL1_2_ID = 3, 38723aabfcd7SJerry (Fangzhi) Zuo SMU11_SYSPLL2_ID = 4, 38733aabfcd7SJerry (Fangzhi) Zuo SMU11_SYSPLL3_0_ID = 5, 38743aabfcd7SJerry (Fangzhi) Zuo SMU11_SYSPLL3_1_ID = 6, 38753aabfcd7SJerry (Fangzhi) Zuo }; 38763aabfcd7SJerry (Fangzhi) Zuo 38773aabfcd7SJerry (Fangzhi) Zuo enum atom_smu11_syspll0_clock_id { 3878ee7a99c7SEvan Quan SMU11_SYSPLL0_ECLK_ID = 0, // ECLK 3879ee7a99c7SEvan Quan SMU11_SYSPLL0_SOCCLK_ID = 1, // SOCCLK 3880ee7a99c7SEvan Quan SMU11_SYSPLL0_MP0CLK_ID = 2, // MP0CLK 3881ee7a99c7SEvan Quan SMU11_SYSPLL0_DCLK_ID = 3, // DCLK 3882ee7a99c7SEvan Quan SMU11_SYSPLL0_VCLK_ID = 4, // VCLK 38833aabfcd7SJerry (Fangzhi) Zuo SMU11_SYSPLL0_DCEFCLK_ID = 5, // DCEFCLK 38843aabfcd7SJerry (Fangzhi) Zuo }; 38853aabfcd7SJerry (Fangzhi) Zuo 38863aabfcd7SJerry (Fangzhi) Zuo enum atom_smu11_syspll1_0_clock_id { 38873aabfcd7SJerry (Fangzhi) Zuo SMU11_SYSPLL1_0_UCLKA_ID = 0, // UCLK_a 38883aabfcd7SJerry (Fangzhi) Zuo }; 38893aabfcd7SJerry (Fangzhi) Zuo 38903aabfcd7SJerry (Fangzhi) Zuo enum atom_smu11_syspll1_1_clock_id { 38913aabfcd7SJerry (Fangzhi) Zuo SMU11_SYSPLL1_0_UCLKB_ID = 0, // UCLK_b 38923aabfcd7SJerry (Fangzhi) Zuo }; 38933aabfcd7SJerry (Fangzhi) Zuo 38943aabfcd7SJerry (Fangzhi) Zuo enum atom_smu11_syspll1_2_clock_id { 38953aabfcd7SJerry (Fangzhi) Zuo SMU11_SYSPLL1_0_FCLK_ID = 0, // FCLK 38963aabfcd7SJerry (Fangzhi) Zuo }; 38973aabfcd7SJerry (Fangzhi) Zuo 38983aabfcd7SJerry (Fangzhi) Zuo enum atom_smu11_syspll2_clock_id { 38993aabfcd7SJerry (Fangzhi) Zuo SMU11_SYSPLL2_GFXCLK_ID = 0, // GFXCLK 39003aabfcd7SJerry (Fangzhi) Zuo }; 39013aabfcd7SJerry (Fangzhi) Zuo 39023aabfcd7SJerry (Fangzhi) Zuo enum atom_smu11_syspll3_0_clock_id { 39033aabfcd7SJerry (Fangzhi) Zuo SMU11_SYSPLL3_0_WAFCLK_ID = 0, // WAFCLK 39043aabfcd7SJerry (Fangzhi) Zuo SMU11_SYSPLL3_0_DISPCLK_ID = 1, // DISPCLK 39053aabfcd7SJerry (Fangzhi) Zuo SMU11_SYSPLL3_0_DPREFCLK_ID = 2, // DPREFCLK 39063aabfcd7SJerry (Fangzhi) Zuo }; 39073aabfcd7SJerry (Fangzhi) Zuo 39083aabfcd7SJerry (Fangzhi) Zuo enum atom_smu11_syspll3_1_clock_id { 39093aabfcd7SJerry (Fangzhi) Zuo SMU11_SYSPLL3_1_MP1CLK_ID = 0, // MP1CLK 39103aabfcd7SJerry (Fangzhi) Zuo SMU11_SYSPLL3_1_SMNCLK_ID = 1, // SMNCLK 39113aabfcd7SJerry (Fangzhi) Zuo SMU11_SYSPLL3_1_LCLK_ID = 2, // LCLK 39123aabfcd7SJerry (Fangzhi) Zuo }; 39133aabfcd7SJerry (Fangzhi) Zuo 3914af48a06dSXiaojian Du enum atom_smu12_syspll_id { 3915af48a06dSXiaojian Du SMU12_SYSPLL0_ID = 0, 3916af48a06dSXiaojian Du SMU12_SYSPLL1_ID = 1, 3917af48a06dSXiaojian Du SMU12_SYSPLL2_ID = 2, 3918af48a06dSXiaojian Du SMU12_SYSPLL3_0_ID = 3, 3919af48a06dSXiaojian Du SMU12_SYSPLL3_1_ID = 4, 3920af48a06dSXiaojian Du }; 3921af48a06dSXiaojian Du 3922af48a06dSXiaojian Du enum atom_smu12_syspll0_clock_id { 3923af48a06dSXiaojian Du SMU12_SYSPLL0_SMNCLK_ID = 0, // SOCCLK 3924af48a06dSXiaojian Du SMU12_SYSPLL0_SOCCLK_ID = 1, // SOCCLK 3925af48a06dSXiaojian Du SMU12_SYSPLL0_MP0CLK_ID = 2, // MP0CLK 3926af48a06dSXiaojian Du SMU12_SYSPLL0_MP1CLK_ID = 3, // MP1CLK 3927af48a06dSXiaojian Du SMU12_SYSPLL0_MP2CLK_ID = 4, // MP2CLK 3928af48a06dSXiaojian Du SMU12_SYSPLL0_VCLK_ID = 5, // VCLK 3929af48a06dSXiaojian Du SMU12_SYSPLL0_LCLK_ID = 6, // LCLK 3930af48a06dSXiaojian Du SMU12_SYSPLL0_DCLK_ID = 7, // DCLK 3931af48a06dSXiaojian Du SMU12_SYSPLL0_ACLK_ID = 8, // ACLK 3932af48a06dSXiaojian Du SMU12_SYSPLL0_ISPCLK_ID = 9, // ISPCLK 3933af48a06dSXiaojian Du SMU12_SYSPLL0_SHUBCLK_ID = 10, // SHUBCLK 3934af48a06dSXiaojian Du }; 3935af48a06dSXiaojian Du 3936af48a06dSXiaojian Du enum atom_smu12_syspll1_clock_id { 3937af48a06dSXiaojian Du SMU12_SYSPLL1_DISPCLK_ID = 0, // DISPCLK 3938af48a06dSXiaojian Du SMU12_SYSPLL1_DPPCLK_ID = 1, // DPPCLK 3939af48a06dSXiaojian Du SMU12_SYSPLL1_DPREFCLK_ID = 2, // DPREFCLK 3940af48a06dSXiaojian Du SMU12_SYSPLL1_DCFCLK_ID = 3, // DCFCLK 3941af48a06dSXiaojian Du }; 3942af48a06dSXiaojian Du 3943af48a06dSXiaojian Du enum atom_smu12_syspll2_clock_id { 3944af48a06dSXiaojian Du SMU12_SYSPLL2_Pre_GFXCLK_ID = 0, // Pre_GFXCLK 3945af48a06dSXiaojian Du }; 3946af48a06dSXiaojian Du 3947af48a06dSXiaojian Du enum atom_smu12_syspll3_0_clock_id { 3948af48a06dSXiaojian Du SMU12_SYSPLL3_0_FCLK_ID = 0, // FCLK 3949af48a06dSXiaojian Du }; 3950af48a06dSXiaojian Du 3951af48a06dSXiaojian Du enum atom_smu12_syspll3_1_clock_id { 3952af48a06dSXiaojian Du SMU12_SYSPLL3_1_UMCCLK_ID = 0, // UMCCLK 3953af48a06dSXiaojian Du }; 3954af48a06dSXiaojian Du 39551fadf42eSAlex Deucher struct atom_get_smu_clock_info_output_parameters_v3_1 39561fadf42eSAlex Deucher { 39571fadf42eSAlex Deucher union { 39581fadf42eSAlex Deucher uint32_t smu_clock_freq_hz; 39591fadf42eSAlex Deucher uint32_t syspllvcofreq_10khz; 39601fadf42eSAlex Deucher uint32_t sysspllrefclk_10khz; 39611fadf42eSAlex Deucher }atom_smu_outputclkfreq; 39621fadf42eSAlex Deucher }; 39631fadf42eSAlex Deucher 39641fadf42eSAlex Deucher 39651fadf42eSAlex Deucher 39661fadf42eSAlex Deucher /* 39671fadf42eSAlex Deucher *************************************************************************** 39681fadf42eSAlex Deucher Structures used by dynamicmemorysettings 39691fadf42eSAlex Deucher *************************************************************************** 39701fadf42eSAlex Deucher */ 39711fadf42eSAlex Deucher 39721fadf42eSAlex Deucher enum atom_dynamic_memory_setting_command 39731fadf42eSAlex Deucher { 39741fadf42eSAlex Deucher COMPUTE_MEMORY_PLL_PARAM = 1, 39751fadf42eSAlex Deucher COMPUTE_ENGINE_PLL_PARAM = 2, 39761fadf42eSAlex Deucher ADJUST_MC_SETTING_PARAM = 3, 39771fadf42eSAlex Deucher }; 39781fadf42eSAlex Deucher 39791fadf42eSAlex Deucher /* when command = COMPUTE_MEMORY_PLL_PARAM or ADJUST_MC_SETTING_PARAM */ 39801fadf42eSAlex Deucher struct dynamic_mclk_settings_parameters_v2_1 39811fadf42eSAlex Deucher { 39821fadf42eSAlex Deucher uint32_t mclk_10khz:24; //Input= target mclk 39831fadf42eSAlex Deucher uint32_t command:8; //command enum of atom_dynamic_memory_setting_command 39841fadf42eSAlex Deucher uint32_t reserved; 39851fadf42eSAlex Deucher }; 39861fadf42eSAlex Deucher 39871fadf42eSAlex Deucher /* when command = COMPUTE_ENGINE_PLL_PARAM */ 39881fadf42eSAlex Deucher struct dynamic_sclk_settings_parameters_v2_1 39891fadf42eSAlex Deucher { 39901fadf42eSAlex Deucher uint32_t sclk_10khz:24; //Input= target mclk 39911fadf42eSAlex Deucher uint32_t command:8; //command enum of atom_dynamic_memory_setting_command 39921fadf42eSAlex Deucher uint32_t mclk_10khz; 39931fadf42eSAlex Deucher uint32_t reserved; 39941fadf42eSAlex Deucher }; 39951fadf42eSAlex Deucher 39961fadf42eSAlex Deucher union dynamic_memory_settings_parameters_v2_1 39971fadf42eSAlex Deucher { 39981fadf42eSAlex Deucher struct dynamic_mclk_settings_parameters_v2_1 mclk_setting; 39991fadf42eSAlex Deucher struct dynamic_sclk_settings_parameters_v2_1 sclk_setting; 40001fadf42eSAlex Deucher }; 40011fadf42eSAlex Deucher 40021fadf42eSAlex Deucher 40031fadf42eSAlex Deucher 40041fadf42eSAlex Deucher /* 40051fadf42eSAlex Deucher *************************************************************************** 40061fadf42eSAlex Deucher Structures used by memorytraining 40071fadf42eSAlex Deucher *************************************************************************** 40081fadf42eSAlex Deucher */ 40091fadf42eSAlex Deucher 40101fadf42eSAlex Deucher enum atom_umc6_0_ucode_function_call_enum_id 40111fadf42eSAlex Deucher { 40121fadf42eSAlex Deucher UMC60_UCODE_FUNC_ID_REINIT = 0, 40131fadf42eSAlex Deucher UMC60_UCODE_FUNC_ID_ENTER_SELFREFRESH = 1, 40141fadf42eSAlex Deucher UMC60_UCODE_FUNC_ID_EXIT_SELFREFRESH = 2, 40151fadf42eSAlex Deucher }; 40161fadf42eSAlex Deucher 40171fadf42eSAlex Deucher 40181fadf42eSAlex Deucher struct memory_training_parameters_v2_1 40191fadf42eSAlex Deucher { 40201fadf42eSAlex Deucher uint8_t ucode_func_id; 40211fadf42eSAlex Deucher uint8_t ucode_reserved[3]; 40221fadf42eSAlex Deucher uint32_t reserved[5]; 40231fadf42eSAlex Deucher }; 40241fadf42eSAlex Deucher 40251fadf42eSAlex Deucher 40261fadf42eSAlex Deucher /* 40271fadf42eSAlex Deucher *************************************************************************** 40281fadf42eSAlex Deucher Structures used by setpixelclock 40291fadf42eSAlex Deucher *************************************************************************** 40301fadf42eSAlex Deucher */ 40311fadf42eSAlex Deucher 40321fadf42eSAlex Deucher struct set_pixel_clock_parameter_v1_7 40331fadf42eSAlex Deucher { 40341fadf42eSAlex Deucher uint32_t pixclk_100hz; // target the pixel clock to drive the CRTC timing in unit of 100Hz. 40351fadf42eSAlex Deucher 40361fadf42eSAlex Deucher uint8_t pll_id; // ATOM_PHY_PLL0/ATOM_PHY_PLL1/ATOM_PPLL0 40371fadf42eSAlex Deucher uint8_t encoderobjid; // ASIC encoder id defined in objectId.h, 40381fadf42eSAlex Deucher // indicate which graphic encoder will be used. 40391fadf42eSAlex Deucher uint8_t encoder_mode; // Encoder mode: 40401fadf42eSAlex Deucher uint8_t miscinfo; // enum atom_set_pixel_clock_v1_7_misc_info 40411fadf42eSAlex Deucher uint8_t crtc_id; // enum of atom_crtc_def 40421fadf42eSAlex Deucher uint8_t deep_color_ratio; // HDMI panel bit depth: enum atom_set_pixel_clock_v1_7_deepcolor_ratio 40431fadf42eSAlex Deucher uint8_t reserved1[2]; 40441fadf42eSAlex Deucher uint32_t reserved2; 40451fadf42eSAlex Deucher }; 40461fadf42eSAlex Deucher 40471fadf42eSAlex Deucher //ucMiscInfo 40481fadf42eSAlex Deucher enum atom_set_pixel_clock_v1_7_misc_info 40491fadf42eSAlex Deucher { 40501fadf42eSAlex Deucher PIXEL_CLOCK_V7_MISC_FORCE_PROG_PPLL = 0x01, 40511fadf42eSAlex Deucher PIXEL_CLOCK_V7_MISC_PROG_PHYPLL = 0x02, 40521fadf42eSAlex Deucher PIXEL_CLOCK_V7_MISC_YUV420_MODE = 0x04, 40531fadf42eSAlex Deucher PIXEL_CLOCK_V7_MISC_DVI_DUALLINK_EN = 0x08, 40541fadf42eSAlex Deucher PIXEL_CLOCK_V7_MISC_REF_DIV_SRC = 0x30, 40551fadf42eSAlex Deucher PIXEL_CLOCK_V7_MISC_REF_DIV_SRC_XTALIN = 0x00, 40561fadf42eSAlex Deucher PIXEL_CLOCK_V7_MISC_REF_DIV_SRC_PCIE = 0x10, 40571fadf42eSAlex Deucher PIXEL_CLOCK_V7_MISC_REF_DIV_SRC_GENLK = 0x20, 40581fadf42eSAlex Deucher PIXEL_CLOCK_V7_MISC_REF_DIV_SRC_REFPAD = 0x30, 40591fadf42eSAlex Deucher PIXEL_CLOCK_V7_MISC_ATOMIC_UPDATE = 0x40, 40601fadf42eSAlex Deucher PIXEL_CLOCK_V7_MISC_FORCE_SS_DIS = 0x80, 40611fadf42eSAlex Deucher }; 40621fadf42eSAlex Deucher 40631fadf42eSAlex Deucher /* deep_color_ratio */ 40641fadf42eSAlex Deucher enum atom_set_pixel_clock_v1_7_deepcolor_ratio 40651fadf42eSAlex Deucher { 40661fadf42eSAlex Deucher PIXEL_CLOCK_V7_DEEPCOLOR_RATIO_DIS = 0x00, //00 - DCCG_DEEP_COLOR_DTO_DISABLE: Disable Deep Color DTO 40671fadf42eSAlex Deucher PIXEL_CLOCK_V7_DEEPCOLOR_RATIO_5_4 = 0x01, //01 - DCCG_DEEP_COLOR_DTO_5_4_RATIO: Set Deep Color DTO to 5:4 40681fadf42eSAlex Deucher PIXEL_CLOCK_V7_DEEPCOLOR_RATIO_3_2 = 0x02, //02 - DCCG_DEEP_COLOR_DTO_3_2_RATIO: Set Deep Color DTO to 3:2 40691fadf42eSAlex Deucher PIXEL_CLOCK_V7_DEEPCOLOR_RATIO_2_1 = 0x03, //03 - DCCG_DEEP_COLOR_DTO_2_1_RATIO: Set Deep Color DTO to 2:1 40701fadf42eSAlex Deucher }; 40711fadf42eSAlex Deucher 40721fadf42eSAlex Deucher /* 40731fadf42eSAlex Deucher *************************************************************************** 40741fadf42eSAlex Deucher Structures used by setdceclock 40751fadf42eSAlex Deucher *************************************************************************** 40761fadf42eSAlex Deucher */ 40771fadf42eSAlex Deucher 40781fadf42eSAlex Deucher // SetDCEClock input parameter for DCE11.2( ELM and BF ) and above 40791fadf42eSAlex Deucher struct set_dce_clock_parameters_v2_1 40801fadf42eSAlex Deucher { 40811fadf42eSAlex Deucher uint32_t dceclk_10khz; // target DCE frequency in unit of 10KHZ, return real DISPCLK/DPREFCLK frequency. 40821fadf42eSAlex Deucher uint8_t dceclktype; // =0: DISPCLK =1: DPREFCLK =2: PIXCLK 40831fadf42eSAlex Deucher uint8_t dceclksrc; // ATOM_PLL0 or ATOM_GCK_DFS or ATOM_FCH_CLK or ATOM_COMBOPHY_PLLx 40841fadf42eSAlex Deucher uint8_t dceclkflag; // Bit [1:0] = PPLL ref clock source ( when ucDCEClkSrc= ATOM_PPLL0 ) 40851fadf42eSAlex Deucher uint8_t crtc_id; // ucDisp Pipe Id, ATOM_CRTC0/1/2/..., use only when ucDCEClkType = PIXCLK 40861fadf42eSAlex Deucher }; 40871fadf42eSAlex Deucher 40881fadf42eSAlex Deucher //ucDCEClkType 40891fadf42eSAlex Deucher enum atom_set_dce_clock_clock_type 40901fadf42eSAlex Deucher { 40911fadf42eSAlex Deucher DCE_CLOCK_TYPE_DISPCLK = 0, 40921fadf42eSAlex Deucher DCE_CLOCK_TYPE_DPREFCLK = 1, 40931fadf42eSAlex Deucher DCE_CLOCK_TYPE_PIXELCLK = 2, // used by VBIOS internally, called by SetPixelClock 40941fadf42eSAlex Deucher }; 40951fadf42eSAlex Deucher 40961fadf42eSAlex Deucher //ucDCEClkFlag when ucDCEClkType == DPREFCLK 40971fadf42eSAlex Deucher enum atom_set_dce_clock_dprefclk_flag 40981fadf42eSAlex Deucher { 40991fadf42eSAlex Deucher DCE_CLOCK_FLAG_PLL_REFCLK_SRC_MASK = 0x03, 41001fadf42eSAlex Deucher DCE_CLOCK_FLAG_PLL_REFCLK_SRC_GENERICA = 0x00, 41011fadf42eSAlex Deucher DCE_CLOCK_FLAG_PLL_REFCLK_SRC_GENLK = 0x01, 41021fadf42eSAlex Deucher DCE_CLOCK_FLAG_PLL_REFCLK_SRC_PCIE = 0x02, 41031fadf42eSAlex Deucher DCE_CLOCK_FLAG_PLL_REFCLK_SRC_XTALIN = 0x03, 41041fadf42eSAlex Deucher }; 41051fadf42eSAlex Deucher 41061fadf42eSAlex Deucher //ucDCEClkFlag when ucDCEClkType == PIXCLK 41071fadf42eSAlex Deucher enum atom_set_dce_clock_pixclk_flag 41081fadf42eSAlex Deucher { 41091fadf42eSAlex Deucher DCE_CLOCK_FLAG_PCLK_DEEPCOLOR_RATIO_MASK = 0x03, 41101fadf42eSAlex Deucher DCE_CLOCK_FLAG_PCLK_DEEPCOLOR_RATIO_DIS = 0x00, //00 - DCCG_DEEP_COLOR_DTO_DISABLE: Disable Deep Color DTO 41111fadf42eSAlex Deucher DCE_CLOCK_FLAG_PCLK_DEEPCOLOR_RATIO_5_4 = 0x01, //01 - DCCG_DEEP_COLOR_DTO_5_4_RATIO: Set Deep Color DTO to 5:4 41121fadf42eSAlex Deucher DCE_CLOCK_FLAG_PCLK_DEEPCOLOR_RATIO_3_2 = 0x02, //02 - DCCG_DEEP_COLOR_DTO_3_2_RATIO: Set Deep Color DTO to 3:2 41131fadf42eSAlex Deucher DCE_CLOCK_FLAG_PCLK_DEEPCOLOR_RATIO_2_1 = 0x03, //03 - DCCG_DEEP_COLOR_DTO_2_1_RATIO: Set Deep Color DTO to 2:1 41141fadf42eSAlex Deucher DCE_CLOCK_FLAG_PIXCLK_YUV420_MODE = 0x04, 41151fadf42eSAlex Deucher }; 41161fadf42eSAlex Deucher 41171fadf42eSAlex Deucher struct set_dce_clock_ps_allocation_v2_1 41181fadf42eSAlex Deucher { 41191fadf42eSAlex Deucher struct set_dce_clock_parameters_v2_1 param; 41201fadf42eSAlex Deucher uint32_t ulReserved[2]; 41211fadf42eSAlex Deucher }; 41221fadf42eSAlex Deucher 41231fadf42eSAlex Deucher 41241fadf42eSAlex Deucher /****************************************************************************/ 41251fadf42eSAlex Deucher // Structures used by BlankCRTC 41261fadf42eSAlex Deucher /****************************************************************************/ 41271fadf42eSAlex Deucher struct blank_crtc_parameters 41281fadf42eSAlex Deucher { 41291fadf42eSAlex Deucher uint8_t crtc_id; // enum atom_crtc_def 41301fadf42eSAlex Deucher uint8_t blanking; // enum atom_blank_crtc_command 41311fadf42eSAlex Deucher uint16_t reserved; 41321fadf42eSAlex Deucher uint32_t reserved1; 41331fadf42eSAlex Deucher }; 41341fadf42eSAlex Deucher 41351fadf42eSAlex Deucher enum atom_blank_crtc_command 41361fadf42eSAlex Deucher { 41371fadf42eSAlex Deucher ATOM_BLANKING = 1, 41381fadf42eSAlex Deucher ATOM_BLANKING_OFF = 0, 41391fadf42eSAlex Deucher }; 41401fadf42eSAlex Deucher 41411fadf42eSAlex Deucher /****************************************************************************/ 41421fadf42eSAlex Deucher // Structures used by enablecrtc 41431fadf42eSAlex Deucher /****************************************************************************/ 41441fadf42eSAlex Deucher struct enable_crtc_parameters 41451fadf42eSAlex Deucher { 41461fadf42eSAlex Deucher uint8_t crtc_id; // enum atom_crtc_def 41471fadf42eSAlex Deucher uint8_t enable; // ATOM_ENABLE or ATOM_DISABLE 41481fadf42eSAlex Deucher uint8_t padding[2]; 41491fadf42eSAlex Deucher }; 41501fadf42eSAlex Deucher 41511fadf42eSAlex Deucher 41521fadf42eSAlex Deucher /****************************************************************************/ 41531fadf42eSAlex Deucher // Structure used by EnableDispPowerGating 41541fadf42eSAlex Deucher /****************************************************************************/ 41551fadf42eSAlex Deucher struct enable_disp_power_gating_parameters_v2_1 41561fadf42eSAlex Deucher { 41571fadf42eSAlex Deucher uint8_t disp_pipe_id; // ATOM_CRTC1, ATOM_CRTC2, ... 41581fadf42eSAlex Deucher uint8_t enable; // ATOM_ENABLE or ATOM_DISABLE 41591fadf42eSAlex Deucher uint8_t padding[2]; 41601fadf42eSAlex Deucher }; 41611fadf42eSAlex Deucher 41621fadf42eSAlex Deucher struct enable_disp_power_gating_ps_allocation 41631fadf42eSAlex Deucher { 41641fadf42eSAlex Deucher struct enable_disp_power_gating_parameters_v2_1 param; 41651fadf42eSAlex Deucher uint32_t ulReserved[4]; 41661fadf42eSAlex Deucher }; 41671fadf42eSAlex Deucher 41681fadf42eSAlex Deucher /****************************************************************************/ 41691fadf42eSAlex Deucher // Structure used in setcrtc_usingdtdtiming 41701fadf42eSAlex Deucher /****************************************************************************/ 41711fadf42eSAlex Deucher struct set_crtc_using_dtd_timing_parameters 41721fadf42eSAlex Deucher { 41731fadf42eSAlex Deucher uint16_t h_size; 41741fadf42eSAlex Deucher uint16_t h_blanking_time; 41751fadf42eSAlex Deucher uint16_t v_size; 41761fadf42eSAlex Deucher uint16_t v_blanking_time; 41771fadf42eSAlex Deucher uint16_t h_syncoffset; 41781fadf42eSAlex Deucher uint16_t h_syncwidth; 41791fadf42eSAlex Deucher uint16_t v_syncoffset; 41801fadf42eSAlex Deucher uint16_t v_syncwidth; 41811fadf42eSAlex Deucher uint16_t modemiscinfo; 41821fadf42eSAlex Deucher uint8_t h_border; 41831fadf42eSAlex Deucher uint8_t v_border; 41841fadf42eSAlex Deucher uint8_t crtc_id; // enum atom_crtc_def 41851fadf42eSAlex Deucher uint8_t encoder_mode; // atom_encode_mode_def 41861fadf42eSAlex Deucher uint8_t padding[2]; 41871fadf42eSAlex Deucher }; 41881fadf42eSAlex Deucher 41891fadf42eSAlex Deucher 41901fadf42eSAlex Deucher /****************************************************************************/ 41911fadf42eSAlex Deucher // Structures used by processi2cchanneltransaction 41921fadf42eSAlex Deucher /****************************************************************************/ 41931fadf42eSAlex Deucher struct process_i2c_channel_transaction_parameters 41941fadf42eSAlex Deucher { 41951fadf42eSAlex Deucher uint8_t i2cspeed_khz; 41961fadf42eSAlex Deucher union { 41971fadf42eSAlex Deucher uint8_t regindex; 41981fadf42eSAlex Deucher uint8_t status; /* enum atom_process_i2c_flag */ 41991fadf42eSAlex Deucher } regind_status; 42001fadf42eSAlex Deucher uint16_t i2c_data_out; 42011fadf42eSAlex Deucher uint8_t flag; /* enum atom_process_i2c_status */ 42021fadf42eSAlex Deucher uint8_t trans_bytes; 42031fadf42eSAlex Deucher uint8_t slave_addr; 42041fadf42eSAlex Deucher uint8_t i2c_id; 42051fadf42eSAlex Deucher }; 42061fadf42eSAlex Deucher 42071fadf42eSAlex Deucher //ucFlag 42081fadf42eSAlex Deucher enum atom_process_i2c_flag 42091fadf42eSAlex Deucher { 42101fadf42eSAlex Deucher HW_I2C_WRITE = 1, 42111fadf42eSAlex Deucher HW_I2C_READ = 0, 42121fadf42eSAlex Deucher I2C_2BYTE_ADDR = 0x02, 42131fadf42eSAlex Deucher HW_I2C_SMBUS_BYTE_WR = 0x04, 42141fadf42eSAlex Deucher }; 42151fadf42eSAlex Deucher 42161fadf42eSAlex Deucher //status 42171fadf42eSAlex Deucher enum atom_process_i2c_status 42181fadf42eSAlex Deucher { 42191fadf42eSAlex Deucher HW_ASSISTED_I2C_STATUS_FAILURE =2, 42201fadf42eSAlex Deucher HW_ASSISTED_I2C_STATUS_SUCCESS =1, 42211fadf42eSAlex Deucher }; 42221fadf42eSAlex Deucher 42231fadf42eSAlex Deucher 42241fadf42eSAlex Deucher /****************************************************************************/ 42251fadf42eSAlex Deucher // Structures used by processauxchanneltransaction 42261fadf42eSAlex Deucher /****************************************************************************/ 42271fadf42eSAlex Deucher 42281fadf42eSAlex Deucher struct process_aux_channel_transaction_parameters_v1_2 42291fadf42eSAlex Deucher { 42301fadf42eSAlex Deucher uint16_t aux_request; 42311fadf42eSAlex Deucher uint16_t dataout; 42321fadf42eSAlex Deucher uint8_t channelid; 42331fadf42eSAlex Deucher union { 42341fadf42eSAlex Deucher uint8_t reply_status; 42351fadf42eSAlex Deucher uint8_t aux_delay; 42361fadf42eSAlex Deucher } aux_status_delay; 42371fadf42eSAlex Deucher uint8_t dataout_len; 42381fadf42eSAlex Deucher uint8_t hpd_id; //=0: HPD1, =1: HPD2, =2: HPD3, =3: HPD4, =4: HPD5, =5: HPD6 42391fadf42eSAlex Deucher }; 42401fadf42eSAlex Deucher 42411fadf42eSAlex Deucher 42421fadf42eSAlex Deucher /****************************************************************************/ 42431fadf42eSAlex Deucher // Structures used by selectcrtc_source 42441fadf42eSAlex Deucher /****************************************************************************/ 42451fadf42eSAlex Deucher 42461fadf42eSAlex Deucher struct select_crtc_source_parameters_v2_3 42471fadf42eSAlex Deucher { 42481fadf42eSAlex Deucher uint8_t crtc_id; // enum atom_crtc_def 42491fadf42eSAlex Deucher uint8_t encoder_id; // enum atom_dig_def 42501fadf42eSAlex Deucher uint8_t encode_mode; // enum atom_encode_mode_def 42511fadf42eSAlex Deucher uint8_t dst_bpc; // enum atom_panel_bit_per_color 42521fadf42eSAlex Deucher }; 42531fadf42eSAlex Deucher 42541fadf42eSAlex Deucher 42551fadf42eSAlex Deucher /****************************************************************************/ 42561fadf42eSAlex Deucher // Structures used by digxencodercontrol 42571fadf42eSAlex Deucher /****************************************************************************/ 42581fadf42eSAlex Deucher 42591fadf42eSAlex Deucher // ucAction: 42601fadf42eSAlex Deucher enum atom_dig_encoder_control_action 42611fadf42eSAlex Deucher { 42621fadf42eSAlex Deucher ATOM_ENCODER_CMD_DISABLE_DIG = 0, 42631fadf42eSAlex Deucher ATOM_ENCODER_CMD_ENABLE_DIG = 1, 42641fadf42eSAlex Deucher ATOM_ENCODER_CMD_DP_LINK_TRAINING_START = 0x08, 42651fadf42eSAlex Deucher ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN1 = 0x09, 42661fadf42eSAlex Deucher ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN2 = 0x0a, 42671fadf42eSAlex Deucher ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN3 = 0x13, 42681fadf42eSAlex Deucher ATOM_ENCODER_CMD_DP_LINK_TRAINING_COMPLETE = 0x0b, 42691fadf42eSAlex Deucher ATOM_ENCODER_CMD_DP_VIDEO_OFF = 0x0c, 42701fadf42eSAlex Deucher ATOM_ENCODER_CMD_DP_VIDEO_ON = 0x0d, 42711fadf42eSAlex Deucher ATOM_ENCODER_CMD_SETUP_PANEL_MODE = 0x10, 42721fadf42eSAlex Deucher ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN4 = 0x14, 42731fadf42eSAlex Deucher ATOM_ENCODER_CMD_STREAM_SETUP = 0x0F, 42741fadf42eSAlex Deucher ATOM_ENCODER_CMD_LINK_SETUP = 0x11, 42751fadf42eSAlex Deucher ATOM_ENCODER_CMD_ENCODER_BLANK = 0x12, 42761fadf42eSAlex Deucher }; 42771fadf42eSAlex Deucher 42781fadf42eSAlex Deucher //define ucPanelMode 42791fadf42eSAlex Deucher enum atom_dig_encoder_control_panelmode 42801fadf42eSAlex Deucher { 42811fadf42eSAlex Deucher DP_PANEL_MODE_DISABLE = 0x00, 42821fadf42eSAlex Deucher DP_PANEL_MODE_ENABLE_eDP_MODE = 0x01, 42831fadf42eSAlex Deucher DP_PANEL_MODE_ENABLE_LVLINK_MODE = 0x11, 42841fadf42eSAlex Deucher }; 42851fadf42eSAlex Deucher 42861fadf42eSAlex Deucher //ucDigId 42871fadf42eSAlex Deucher enum atom_dig_encoder_control_v5_digid 42881fadf42eSAlex Deucher { 42891fadf42eSAlex Deucher ATOM_ENCODER_CONFIG_V5_DIG0_ENCODER = 0x00, 42901fadf42eSAlex Deucher ATOM_ENCODER_CONFIG_V5_DIG1_ENCODER = 0x01, 42911fadf42eSAlex Deucher ATOM_ENCODER_CONFIG_V5_DIG2_ENCODER = 0x02, 42921fadf42eSAlex Deucher ATOM_ENCODER_CONFIG_V5_DIG3_ENCODER = 0x03, 42931fadf42eSAlex Deucher ATOM_ENCODER_CONFIG_V5_DIG4_ENCODER = 0x04, 42941fadf42eSAlex Deucher ATOM_ENCODER_CONFIG_V5_DIG5_ENCODER = 0x05, 42951fadf42eSAlex Deucher ATOM_ENCODER_CONFIG_V5_DIG6_ENCODER = 0x06, 42961fadf42eSAlex Deucher ATOM_ENCODER_CONFIG_V5_DIG7_ENCODER = 0x07, 42971fadf42eSAlex Deucher }; 42981fadf42eSAlex Deucher 42991fadf42eSAlex Deucher struct dig_encoder_stream_setup_parameters_v1_5 43001fadf42eSAlex Deucher { 43011fadf42eSAlex Deucher uint8_t digid; // 0~6 map to DIG0~DIG6 enum atom_dig_encoder_control_v5_digid 43021fadf42eSAlex Deucher uint8_t action; // = ATOM_ENOCODER_CMD_STREAM_SETUP 43031fadf42eSAlex Deucher uint8_t digmode; // ATOM_ENCODER_MODE_DP/ATOM_ENCODER_MODE_DVI/ATOM_ENCODER_MODE_HDMI 43041fadf42eSAlex Deucher uint8_t lanenum; // Lane number 43051fadf42eSAlex Deucher uint32_t pclk_10khz; // Pixel Clock in 10Khz 43061fadf42eSAlex Deucher uint8_t bitpercolor; 43071fadf42eSAlex Deucher uint8_t dplinkrate_270mhz;//= DP link rate/270Mhz, =6: 1.62G = 10: 2.7G, =20: 5.4Ghz, =30: 8.1Ghz etc 43081fadf42eSAlex Deucher uint8_t reserved[2]; 43091fadf42eSAlex Deucher }; 43101fadf42eSAlex Deucher 43111fadf42eSAlex Deucher struct dig_encoder_link_setup_parameters_v1_5 43121fadf42eSAlex Deucher { 43131fadf42eSAlex Deucher uint8_t digid; // 0~6 map to DIG0~DIG6 enum atom_dig_encoder_control_v5_digid 43141fadf42eSAlex Deucher uint8_t action; // = ATOM_ENOCODER_CMD_LINK_SETUP 43151fadf42eSAlex Deucher uint8_t digmode; // ATOM_ENCODER_MODE_DP/ATOM_ENCODER_MODE_DVI/ATOM_ENCODER_MODE_HDMI 43161fadf42eSAlex Deucher uint8_t lanenum; // Lane number 43171fadf42eSAlex Deucher uint8_t symclk_10khz; // Symbol Clock in 10Khz 43181fadf42eSAlex Deucher uint8_t hpd_sel; 43191fadf42eSAlex Deucher uint8_t digfe_sel; // DIG stream( front-end ) selection, bit0 means DIG0 FE is enable, 43201fadf42eSAlex Deucher uint8_t reserved[2]; 43211fadf42eSAlex Deucher }; 43221fadf42eSAlex Deucher 43231fadf42eSAlex Deucher struct dp_panel_mode_set_parameters_v1_5 43241fadf42eSAlex Deucher { 43251fadf42eSAlex Deucher uint8_t digid; // 0~6 map to DIG0~DIG6 enum atom_dig_encoder_control_v5_digid 43261fadf42eSAlex Deucher uint8_t action; // = ATOM_ENCODER_CMD_DPLINK_SETUP 43271fadf42eSAlex Deucher uint8_t panelmode; // enum atom_dig_encoder_control_panelmode 43281fadf42eSAlex Deucher uint8_t reserved1; 43291fadf42eSAlex Deucher uint32_t reserved2[2]; 43301fadf42eSAlex Deucher }; 43311fadf42eSAlex Deucher 43321fadf42eSAlex Deucher struct dig_encoder_generic_cmd_parameters_v1_5 43331fadf42eSAlex Deucher { 43341fadf42eSAlex Deucher uint8_t digid; // 0~6 map to DIG0~DIG6 enum atom_dig_encoder_control_v5_digid 43351fadf42eSAlex Deucher uint8_t action; // = rest of generic encoder command which does not carry any parameters 43361fadf42eSAlex Deucher uint8_t reserved1[2]; 43371fadf42eSAlex Deucher uint32_t reserved2[2]; 43381fadf42eSAlex Deucher }; 43391fadf42eSAlex Deucher 43401fadf42eSAlex Deucher union dig_encoder_control_parameters_v1_5 43411fadf42eSAlex Deucher { 43421fadf42eSAlex Deucher struct dig_encoder_generic_cmd_parameters_v1_5 cmd_param; 43431fadf42eSAlex Deucher struct dig_encoder_stream_setup_parameters_v1_5 stream_param; 43441fadf42eSAlex Deucher struct dig_encoder_link_setup_parameters_v1_5 link_param; 43451fadf42eSAlex Deucher struct dp_panel_mode_set_parameters_v1_5 dppanel_param; 43461fadf42eSAlex Deucher }; 43471fadf42eSAlex Deucher 43481fadf42eSAlex Deucher /* 43491fadf42eSAlex Deucher *************************************************************************** 43501fadf42eSAlex Deucher Structures used by dig1transmittercontrol 43511fadf42eSAlex Deucher *************************************************************************** 43521fadf42eSAlex Deucher */ 43531fadf42eSAlex Deucher struct dig_transmitter_control_parameters_v1_6 43541fadf42eSAlex Deucher { 43551fadf42eSAlex Deucher uint8_t phyid; // 0=UNIPHYA, 1=UNIPHYB, 2=UNIPHYC, 3=UNIPHYD, 4= UNIPHYE 5=UNIPHYF 43561fadf42eSAlex Deucher uint8_t action; // define as ATOM_TRANSMITER_ACTION_xxx 43571fadf42eSAlex Deucher union { 43581fadf42eSAlex Deucher uint8_t digmode; // enum atom_encode_mode_def 43591fadf42eSAlex Deucher uint8_t dplaneset; // DP voltage swing and pre-emphasis value defined in DPCD DP_LANE_SET, "DP_LANE_SET__xDB_y_zV" 43601fadf42eSAlex Deucher } mode_laneset; 43611fadf42eSAlex Deucher uint8_t lanenum; // Lane number 1, 2, 4, 8 43621fadf42eSAlex Deucher uint32_t symclk_10khz; // Symbol Clock in 10Khz 43631fadf42eSAlex Deucher uint8_t hpdsel; // =1: HPD1, =2: HPD2, .... =6: HPD6, =0: HPD is not assigned 43641fadf42eSAlex Deucher uint8_t digfe_sel; // DIG stream( front-end ) selection, bit0 means DIG0 FE is enable, 43651fadf42eSAlex Deucher uint8_t connobj_id; // Connector Object Id defined in ObjectId.h 43661fadf42eSAlex Deucher uint8_t reserved; 43671fadf42eSAlex Deucher uint32_t reserved1; 43681fadf42eSAlex Deucher }; 43691fadf42eSAlex Deucher 43701fadf42eSAlex Deucher struct dig_transmitter_control_ps_allocation_v1_6 43711fadf42eSAlex Deucher { 43721fadf42eSAlex Deucher struct dig_transmitter_control_parameters_v1_6 param; 43731fadf42eSAlex Deucher uint32_t reserved[4]; 43741fadf42eSAlex Deucher }; 43751fadf42eSAlex Deucher 43761fadf42eSAlex Deucher //ucAction 43771fadf42eSAlex Deucher enum atom_dig_transmitter_control_action 43781fadf42eSAlex Deucher { 43791fadf42eSAlex Deucher ATOM_TRANSMITTER_ACTION_DISABLE = 0, 43801fadf42eSAlex Deucher ATOM_TRANSMITTER_ACTION_ENABLE = 1, 43811fadf42eSAlex Deucher ATOM_TRANSMITTER_ACTION_LCD_BLOFF = 2, 43821fadf42eSAlex Deucher ATOM_TRANSMITTER_ACTION_LCD_BLON = 3, 43831fadf42eSAlex Deucher ATOM_TRANSMITTER_ACTION_BL_BRIGHTNESS_CONTROL = 4, 43841fadf42eSAlex Deucher ATOM_TRANSMITTER_ACTION_LCD_SELFTEST_START = 5, 43851fadf42eSAlex Deucher ATOM_TRANSMITTER_ACTION_LCD_SELFTEST_STOP = 6, 43861fadf42eSAlex Deucher ATOM_TRANSMITTER_ACTION_INIT = 7, 43871fadf42eSAlex Deucher ATOM_TRANSMITTER_ACTION_DISABLE_OUTPUT = 8, 43881fadf42eSAlex Deucher ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT = 9, 43891fadf42eSAlex Deucher ATOM_TRANSMITTER_ACTION_SETUP = 10, 43901fadf42eSAlex Deucher ATOM_TRANSMITTER_ACTION_SETUP_VSEMPH = 11, 43911fadf42eSAlex Deucher ATOM_TRANSMITTER_ACTION_POWER_ON = 12, 43921fadf42eSAlex Deucher ATOM_TRANSMITTER_ACTION_POWER_OFF = 13, 43931fadf42eSAlex Deucher }; 43941fadf42eSAlex Deucher 43951fadf42eSAlex Deucher // digfe_sel 43961fadf42eSAlex Deucher enum atom_dig_transmitter_control_digfe_sel 43971fadf42eSAlex Deucher { 43981fadf42eSAlex Deucher ATOM_TRANMSITTER_V6__DIGA_SEL = 0x01, 43991fadf42eSAlex Deucher ATOM_TRANMSITTER_V6__DIGB_SEL = 0x02, 44001fadf42eSAlex Deucher ATOM_TRANMSITTER_V6__DIGC_SEL = 0x04, 44011fadf42eSAlex Deucher ATOM_TRANMSITTER_V6__DIGD_SEL = 0x08, 44021fadf42eSAlex Deucher ATOM_TRANMSITTER_V6__DIGE_SEL = 0x10, 44031fadf42eSAlex Deucher ATOM_TRANMSITTER_V6__DIGF_SEL = 0x20, 44041fadf42eSAlex Deucher ATOM_TRANMSITTER_V6__DIGG_SEL = 0x40, 44051fadf42eSAlex Deucher }; 44061fadf42eSAlex Deucher 44071fadf42eSAlex Deucher 44081fadf42eSAlex Deucher //ucHPDSel 44091fadf42eSAlex Deucher enum atom_dig_transmitter_control_hpd_sel 44101fadf42eSAlex Deucher { 44111fadf42eSAlex Deucher ATOM_TRANSMITTER_V6_NO_HPD_SEL = 0x00, 44121fadf42eSAlex Deucher ATOM_TRANSMITTER_V6_HPD1_SEL = 0x01, 44131fadf42eSAlex Deucher ATOM_TRANSMITTER_V6_HPD2_SEL = 0x02, 44141fadf42eSAlex Deucher ATOM_TRANSMITTER_V6_HPD3_SEL = 0x03, 44151fadf42eSAlex Deucher ATOM_TRANSMITTER_V6_HPD4_SEL = 0x04, 44161fadf42eSAlex Deucher ATOM_TRANSMITTER_V6_HPD5_SEL = 0x05, 44171fadf42eSAlex Deucher ATOM_TRANSMITTER_V6_HPD6_SEL = 0x06, 44181fadf42eSAlex Deucher }; 44191fadf42eSAlex Deucher 44201fadf42eSAlex Deucher // ucDPLaneSet 44211fadf42eSAlex Deucher enum atom_dig_transmitter_control_dplaneset 44221fadf42eSAlex Deucher { 44231fadf42eSAlex Deucher DP_LANE_SET__0DB_0_4V = 0x00, 44241fadf42eSAlex Deucher DP_LANE_SET__0DB_0_6V = 0x01, 44251fadf42eSAlex Deucher DP_LANE_SET__0DB_0_8V = 0x02, 44261fadf42eSAlex Deucher DP_LANE_SET__0DB_1_2V = 0x03, 44271fadf42eSAlex Deucher DP_LANE_SET__3_5DB_0_4V = 0x08, 44281fadf42eSAlex Deucher DP_LANE_SET__3_5DB_0_6V = 0x09, 44291fadf42eSAlex Deucher DP_LANE_SET__3_5DB_0_8V = 0x0a, 44301fadf42eSAlex Deucher DP_LANE_SET__6DB_0_4V = 0x10, 44311fadf42eSAlex Deucher DP_LANE_SET__6DB_0_6V = 0x11, 44321fadf42eSAlex Deucher DP_LANE_SET__9_5DB_0_4V = 0x18, 44331fadf42eSAlex Deucher }; 44341fadf42eSAlex Deucher 44351fadf42eSAlex Deucher 44361fadf42eSAlex Deucher 44371fadf42eSAlex Deucher /****************************************************************************/ 44381fadf42eSAlex Deucher // Structures used by ExternalEncoderControl V2.4 44391fadf42eSAlex Deucher /****************************************************************************/ 44401fadf42eSAlex Deucher 44411fadf42eSAlex Deucher struct external_encoder_control_parameters_v2_4 44421fadf42eSAlex Deucher { 44431fadf42eSAlex Deucher uint16_t pixelclock_10khz; // pixel clock in 10Khz, valid when ucAction=SETUP/ENABLE_OUTPUT 44441fadf42eSAlex Deucher uint8_t config; // indicate which encoder, and DP link rate when ucAction = SETUP/ENABLE_OUTPUT 44451fadf42eSAlex Deucher uint8_t action; // 44461fadf42eSAlex Deucher uint8_t encodermode; // encoder mode, only used when ucAction = SETUP/ENABLE_OUTPUT 44471fadf42eSAlex Deucher uint8_t lanenum; // lane number, only used when ucAction = SETUP/ENABLE_OUTPUT 44481fadf42eSAlex Deucher uint8_t bitpercolor; // output bit per color, only valid when ucAction = SETUP/ENABLE_OUTPUT and ucEncodeMode= DP 44491fadf42eSAlex Deucher uint8_t hpd_id; 44501fadf42eSAlex Deucher }; 44511fadf42eSAlex Deucher 44521fadf42eSAlex Deucher 44531fadf42eSAlex Deucher // ucAction 44541fadf42eSAlex Deucher enum external_encoder_control_action_def 44551fadf42eSAlex Deucher { 44561fadf42eSAlex Deucher EXTERNAL_ENCODER_ACTION_V3_DISABLE_OUTPUT = 0x00, 44571fadf42eSAlex Deucher EXTERNAL_ENCODER_ACTION_V3_ENABLE_OUTPUT = 0x01, 44581fadf42eSAlex Deucher EXTERNAL_ENCODER_ACTION_V3_ENCODER_INIT = 0x07, 44591fadf42eSAlex Deucher EXTERNAL_ENCODER_ACTION_V3_ENCODER_SETUP = 0x0f, 44601fadf42eSAlex Deucher EXTERNAL_ENCODER_ACTION_V3_ENCODER_BLANKING_OFF = 0x10, 44611fadf42eSAlex Deucher EXTERNAL_ENCODER_ACTION_V3_ENCODER_BLANKING = 0x11, 44621fadf42eSAlex Deucher EXTERNAL_ENCODER_ACTION_V3_DACLOAD_DETECTION = 0x12, 44631fadf42eSAlex Deucher EXTERNAL_ENCODER_ACTION_V3_DDC_SETUP = 0x14, 44641fadf42eSAlex Deucher }; 44651fadf42eSAlex Deucher 44661fadf42eSAlex Deucher // ucConfig 44671fadf42eSAlex Deucher enum external_encoder_control_v2_4_config_def 44681fadf42eSAlex Deucher { 44691fadf42eSAlex Deucher EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_MASK = 0x03, 44701fadf42eSAlex Deucher EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_1_62GHZ = 0x00, 44711fadf42eSAlex Deucher EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_2_70GHZ = 0x01, 44721fadf42eSAlex Deucher EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_5_40GHZ = 0x02, 44731fadf42eSAlex Deucher EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_3_24GHZ = 0x03, 44741fadf42eSAlex Deucher EXTERNAL_ENCODER_CONFIG_V3_ENCODER_SEL_MAKS = 0x70, 44751fadf42eSAlex Deucher EXTERNAL_ENCODER_CONFIG_V3_ENCODER1 = 0x00, 44761fadf42eSAlex Deucher EXTERNAL_ENCODER_CONFIG_V3_ENCODER2 = 0x10, 44771fadf42eSAlex Deucher EXTERNAL_ENCODER_CONFIG_V3_ENCODER3 = 0x20, 44781fadf42eSAlex Deucher }; 44791fadf42eSAlex Deucher 44801fadf42eSAlex Deucher struct external_encoder_control_ps_allocation_v2_4 44811fadf42eSAlex Deucher { 44821fadf42eSAlex Deucher struct external_encoder_control_parameters_v2_4 sExtEncoder; 44831fadf42eSAlex Deucher uint32_t reserved[2]; 44841fadf42eSAlex Deucher }; 44851fadf42eSAlex Deucher 44861fadf42eSAlex Deucher 44871fadf42eSAlex Deucher /* 44881fadf42eSAlex Deucher *************************************************************************** 44891fadf42eSAlex Deucher AMD ACPI Table 44901fadf42eSAlex Deucher 44911fadf42eSAlex Deucher *************************************************************************** 44921fadf42eSAlex Deucher */ 44931fadf42eSAlex Deucher 44941fadf42eSAlex Deucher struct amd_acpi_description_header{ 44951fadf42eSAlex Deucher uint32_t signature; 44961fadf42eSAlex Deucher uint32_t tableLength; //Length 44971fadf42eSAlex Deucher uint8_t revision; 44981fadf42eSAlex Deucher uint8_t checksum; 44991fadf42eSAlex Deucher uint8_t oemId[6]; 45001fadf42eSAlex Deucher uint8_t oemTableId[8]; //UINT64 OemTableId; 45011fadf42eSAlex Deucher uint32_t oemRevision; 45021fadf42eSAlex Deucher uint32_t creatorId; 45031fadf42eSAlex Deucher uint32_t creatorRevision; 45041fadf42eSAlex Deucher }; 45051fadf42eSAlex Deucher 45061fadf42eSAlex Deucher struct uefi_acpi_vfct{ 45071fadf42eSAlex Deucher struct amd_acpi_description_header sheader; 45081fadf42eSAlex Deucher uint8_t tableUUID[16]; //0x24 45091fadf42eSAlex Deucher uint32_t vbiosimageoffset; //0x34. Offset to the first GOP_VBIOS_CONTENT block from the beginning of the stucture. 45101fadf42eSAlex Deucher uint32_t lib1Imageoffset; //0x38. Offset to the first GOP_LIB1_CONTENT block from the beginning of the stucture. 45111fadf42eSAlex Deucher uint32_t reserved[4]; //0x3C 45121fadf42eSAlex Deucher }; 45131fadf42eSAlex Deucher 45141fadf42eSAlex Deucher struct vfct_image_header{ 45151fadf42eSAlex Deucher uint32_t pcibus; //0x4C 45161fadf42eSAlex Deucher uint32_t pcidevice; //0x50 45171fadf42eSAlex Deucher uint32_t pcifunction; //0x54 45181fadf42eSAlex Deucher uint16_t vendorid; //0x58 45191fadf42eSAlex Deucher uint16_t deviceid; //0x5A 45201fadf42eSAlex Deucher uint16_t ssvid; //0x5C 45211fadf42eSAlex Deucher uint16_t ssid; //0x5E 45221fadf42eSAlex Deucher uint32_t revision; //0x60 45231fadf42eSAlex Deucher uint32_t imagelength; //0x64 45241fadf42eSAlex Deucher }; 45251fadf42eSAlex Deucher 45261fadf42eSAlex Deucher 45271fadf42eSAlex Deucher struct gop_vbios_content { 45281fadf42eSAlex Deucher struct vfct_image_header vbiosheader; 45291fadf42eSAlex Deucher uint8_t vbioscontent[1]; 45301fadf42eSAlex Deucher }; 45311fadf42eSAlex Deucher 45321fadf42eSAlex Deucher struct gop_lib1_content { 45331fadf42eSAlex Deucher struct vfct_image_header lib1header; 45341fadf42eSAlex Deucher uint8_t lib1content[1]; 45351fadf42eSAlex Deucher }; 45361fadf42eSAlex Deucher 45371fadf42eSAlex Deucher 45381fadf42eSAlex Deucher 45391fadf42eSAlex Deucher /* 45401fadf42eSAlex Deucher *************************************************************************** 45411fadf42eSAlex Deucher Scratch Register definitions 45421fadf42eSAlex Deucher Each number below indicates which scratch regiser request, Active and 45431fadf42eSAlex Deucher Connect all share the same definitions as display_device_tag defines 45441fadf42eSAlex Deucher *************************************************************************** 45451fadf42eSAlex Deucher */ 45461fadf42eSAlex Deucher 45471fadf42eSAlex Deucher enum scratch_register_def{ 45481fadf42eSAlex Deucher ATOM_DEVICE_CONNECT_INFO_DEF = 0, 45491fadf42eSAlex Deucher ATOM_BL_BRI_LEVEL_INFO_DEF = 2, 45501fadf42eSAlex Deucher ATOM_ACTIVE_INFO_DEF = 3, 45511fadf42eSAlex Deucher ATOM_LCD_INFO_DEF = 4, 45521fadf42eSAlex Deucher ATOM_DEVICE_REQ_INFO_DEF = 5, 45531fadf42eSAlex Deucher ATOM_ACC_CHANGE_INFO_DEF = 6, 45541fadf42eSAlex Deucher ATOM_PRE_OS_MODE_INFO_DEF = 7, 45551fadf42eSAlex Deucher ATOM_PRE_OS_ASSERTION_DEF = 8, //For GOP to record a 32bit assertion code, this is enabled by default in prodution GOP drivers. 45561fadf42eSAlex Deucher ATOM_INTERNAL_TIMER_INFO_DEF = 10, 45571fadf42eSAlex Deucher }; 45581fadf42eSAlex Deucher 45591fadf42eSAlex Deucher enum scratch_device_connect_info_bit_def{ 45601fadf42eSAlex Deucher ATOM_DISPLAY_LCD1_CONNECT =0x0002, 45611fadf42eSAlex Deucher ATOM_DISPLAY_DFP1_CONNECT =0x0008, 45621fadf42eSAlex Deucher ATOM_DISPLAY_DFP2_CONNECT =0x0080, 45631fadf42eSAlex Deucher ATOM_DISPLAY_DFP3_CONNECT =0x0200, 45641fadf42eSAlex Deucher ATOM_DISPLAY_DFP4_CONNECT =0x0400, 45651fadf42eSAlex Deucher ATOM_DISPLAY_DFP5_CONNECT =0x0800, 45661fadf42eSAlex Deucher ATOM_DISPLAY_DFP6_CONNECT =0x0040, 45671fadf42eSAlex Deucher ATOM_DISPLAY_DFPx_CONNECT =0x0ec8, 45681fadf42eSAlex Deucher ATOM_CONNECT_INFO_DEVICE_MASK =0x0fff, 45691fadf42eSAlex Deucher }; 45701fadf42eSAlex Deucher 45711fadf42eSAlex Deucher enum scratch_bl_bri_level_info_bit_def{ 45721fadf42eSAlex Deucher ATOM_CURRENT_BL_LEVEL_SHIFT =0x8, 45731fadf42eSAlex Deucher #ifndef _H2INC 45741fadf42eSAlex Deucher ATOM_CURRENT_BL_LEVEL_MASK =0x0000ff00, 45751fadf42eSAlex Deucher ATOM_DEVICE_DPMS_STATE =0x00010000, 45761fadf42eSAlex Deucher #endif 45771fadf42eSAlex Deucher }; 45781fadf42eSAlex Deucher 45791fadf42eSAlex Deucher enum scratch_active_info_bits_def{ 45801fadf42eSAlex Deucher ATOM_DISPLAY_LCD1_ACTIVE =0x0002, 45811fadf42eSAlex Deucher ATOM_DISPLAY_DFP1_ACTIVE =0x0008, 45821fadf42eSAlex Deucher ATOM_DISPLAY_DFP2_ACTIVE =0x0080, 45831fadf42eSAlex Deucher ATOM_DISPLAY_DFP3_ACTIVE =0x0200, 45841fadf42eSAlex Deucher ATOM_DISPLAY_DFP4_ACTIVE =0x0400, 45851fadf42eSAlex Deucher ATOM_DISPLAY_DFP5_ACTIVE =0x0800, 45861fadf42eSAlex Deucher ATOM_DISPLAY_DFP6_ACTIVE =0x0040, 45871fadf42eSAlex Deucher ATOM_ACTIVE_INFO_DEVICE_MASK =0x0fff, 45881fadf42eSAlex Deucher }; 45891fadf42eSAlex Deucher 45901fadf42eSAlex Deucher enum scratch_device_req_info_bits_def{ 45911fadf42eSAlex Deucher ATOM_DISPLAY_LCD1_REQ =0x0002, 45921fadf42eSAlex Deucher ATOM_DISPLAY_DFP1_REQ =0x0008, 45931fadf42eSAlex Deucher ATOM_DISPLAY_DFP2_REQ =0x0080, 45941fadf42eSAlex Deucher ATOM_DISPLAY_DFP3_REQ =0x0200, 45951fadf42eSAlex Deucher ATOM_DISPLAY_DFP4_REQ =0x0400, 45961fadf42eSAlex Deucher ATOM_DISPLAY_DFP5_REQ =0x0800, 45971fadf42eSAlex Deucher ATOM_DISPLAY_DFP6_REQ =0x0040, 45981fadf42eSAlex Deucher ATOM_REQ_INFO_DEVICE_MASK =0x0fff, 45991fadf42eSAlex Deucher }; 46001fadf42eSAlex Deucher 46011fadf42eSAlex Deucher enum scratch_acc_change_info_bitshift_def{ 46021fadf42eSAlex Deucher ATOM_ACC_CHANGE_ACC_MODE_SHIFT =4, 46031fadf42eSAlex Deucher ATOM_ACC_CHANGE_LID_STATUS_SHIFT =6, 46041fadf42eSAlex Deucher }; 46051fadf42eSAlex Deucher 46061fadf42eSAlex Deucher enum scratch_acc_change_info_bits_def{ 46071fadf42eSAlex Deucher ATOM_ACC_CHANGE_ACC_MODE =0x00000010, 46081fadf42eSAlex Deucher ATOM_ACC_CHANGE_LID_STATUS =0x00000040, 46091fadf42eSAlex Deucher }; 46101fadf42eSAlex Deucher 46111fadf42eSAlex Deucher enum scratch_pre_os_mode_info_bits_def{ 46121fadf42eSAlex Deucher ATOM_PRE_OS_MODE_MASK =0x00000003, 46131fadf42eSAlex Deucher ATOM_PRE_OS_MODE_VGA =0x00000000, 46141fadf42eSAlex Deucher ATOM_PRE_OS_MODE_VESA =0x00000001, 46151fadf42eSAlex Deucher ATOM_PRE_OS_MODE_GOP =0x00000002, 46161fadf42eSAlex Deucher ATOM_PRE_OS_MODE_PIXEL_DEPTH =0x0000000C, 46171fadf42eSAlex Deucher ATOM_PRE_OS_MODE_PIXEL_FORMAT_MASK=0x000000F0, 46181fadf42eSAlex Deucher ATOM_PRE_OS_MODE_8BIT_PAL_EN =0x00000100, 46191fadf42eSAlex Deucher ATOM_ASIC_INIT_COMPLETE =0x00000200, 46201fadf42eSAlex Deucher #ifndef _H2INC 46211fadf42eSAlex Deucher ATOM_PRE_OS_MODE_NUMBER_MASK =0xFFFF0000, 46221fadf42eSAlex Deucher #endif 46231fadf42eSAlex Deucher }; 46241fadf42eSAlex Deucher 46251fadf42eSAlex Deucher 46261fadf42eSAlex Deucher 46271fadf42eSAlex Deucher /* 46281fadf42eSAlex Deucher *************************************************************************** 46291fadf42eSAlex Deucher ATOM firmware ID header file 46301fadf42eSAlex Deucher !! Please keep it at end of the atomfirmware.h !! 46311fadf42eSAlex Deucher *************************************************************************** 46321fadf42eSAlex Deucher */ 46331fadf42eSAlex Deucher #include "atomfirmwareid.h" 46341fadf42eSAlex Deucher #pragma pack() 46351fadf42eSAlex Deucher 46361fadf42eSAlex Deucher #endif 46371fadf42eSAlex Deucher 4638