1*41ec0267Sriastradh /* $NetBSD: atomfirmware.h,v 1.2 2021/12/18 23:45:08 riastradh Exp $ */ 24e390cabSriastradh 34e390cabSriastradh /****************************************************************************\ 44e390cabSriastradh * 54e390cabSriastradh * File Name atomfirmware.h 64e390cabSriastradh * Project This is an interface header file between atombios and OS GPU drivers for SoC15 products 74e390cabSriastradh * 84e390cabSriastradh * Description header file of general definitions for OS nd pre-OS video drivers 94e390cabSriastradh * 104e390cabSriastradh * Copyright 2014 Advanced Micro Devices, Inc. 114e390cabSriastradh * 124e390cabSriastradh * Permission is hereby granted, free of charge, to any person obtaining a copy of this software 134e390cabSriastradh * and associated documentation files (the "Software"), to deal in the Software without restriction, 144e390cabSriastradh * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, 154e390cabSriastradh * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, 164e390cabSriastradh * subject to the following conditions: 174e390cabSriastradh * 184e390cabSriastradh * The above copyright notice and this permission notice shall be included in all copies or substantial 194e390cabSriastradh * portions of the Software. 204e390cabSriastradh * 214e390cabSriastradh * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 224e390cabSriastradh * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 234e390cabSriastradh * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 244e390cabSriastradh * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 254e390cabSriastradh * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 264e390cabSriastradh * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 274e390cabSriastradh * OTHER DEALINGS IN THE SOFTWARE. 284e390cabSriastradh * 294e390cabSriastradh \****************************************************************************/ 304e390cabSriastradh 314e390cabSriastradh /*IMPORTANT NOTES 324e390cabSriastradh * 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. 334e390cabSriastradh * 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. 344e390cabSriastradh * 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. 354e390cabSriastradh */ 364e390cabSriastradh 374e390cabSriastradh #ifndef _ATOMFIRMWARE_H_ 384e390cabSriastradh #define _ATOMFIRMWARE_H_ 394e390cabSriastradh 404e390cabSriastradh enum atom_bios_header_version_def{ 414e390cabSriastradh ATOM_MAJOR_VERSION =0x0003, 424e390cabSriastradh ATOM_MINOR_VERSION =0x0003, 434e390cabSriastradh }; 444e390cabSriastradh 454e390cabSriastradh #ifdef _H2INC 464e390cabSriastradh #ifndef uint32_t 474e390cabSriastradh typedef unsigned long uint32_t; 484e390cabSriastradh #endif 494e390cabSriastradh 504e390cabSriastradh #ifndef uint16_t 514e390cabSriastradh typedef unsigned short uint16_t; 524e390cabSriastradh #endif 534e390cabSriastradh 544e390cabSriastradh #ifndef uint8_t 554e390cabSriastradh typedef unsigned char uint8_t; 564e390cabSriastradh #endif 574e390cabSriastradh #endif 584e390cabSriastradh 594e390cabSriastradh enum atom_crtc_def{ 604e390cabSriastradh ATOM_CRTC1 =0, 614e390cabSriastradh ATOM_CRTC2 =1, 624e390cabSriastradh ATOM_CRTC3 =2, 634e390cabSriastradh ATOM_CRTC4 =3, 644e390cabSriastradh ATOM_CRTC5 =4, 654e390cabSriastradh ATOM_CRTC6 =5, 664e390cabSriastradh ATOM_CRTC_INVALID =0xff, 674e390cabSriastradh }; 684e390cabSriastradh 694e390cabSriastradh enum atom_ppll_def{ 704e390cabSriastradh ATOM_PPLL0 =2, 714e390cabSriastradh ATOM_GCK_DFS =8, 724e390cabSriastradh ATOM_FCH_CLK =9, 734e390cabSriastradh ATOM_DP_DTO =11, 744e390cabSriastradh ATOM_COMBOPHY_PLL0 =20, 754e390cabSriastradh ATOM_COMBOPHY_PLL1 =21, 764e390cabSriastradh ATOM_COMBOPHY_PLL2 =22, 774e390cabSriastradh ATOM_COMBOPHY_PLL3 =23, 784e390cabSriastradh ATOM_COMBOPHY_PLL4 =24, 794e390cabSriastradh ATOM_COMBOPHY_PLL5 =25, 804e390cabSriastradh ATOM_PPLL_INVALID =0xff, 814e390cabSriastradh }; 824e390cabSriastradh 834e390cabSriastradh // define ASIC internal encoder id ( bit vector ), used for CRTC_SourceSel 844e390cabSriastradh enum atom_dig_def{ 854e390cabSriastradh ASIC_INT_DIG1_ENCODER_ID =0x03, 864e390cabSriastradh ASIC_INT_DIG2_ENCODER_ID =0x09, 874e390cabSriastradh ASIC_INT_DIG3_ENCODER_ID =0x0a, 884e390cabSriastradh ASIC_INT_DIG4_ENCODER_ID =0x0b, 894e390cabSriastradh ASIC_INT_DIG5_ENCODER_ID =0x0c, 904e390cabSriastradh ASIC_INT_DIG6_ENCODER_ID =0x0d, 914e390cabSriastradh ASIC_INT_DIG7_ENCODER_ID =0x0e, 924e390cabSriastradh }; 934e390cabSriastradh 944e390cabSriastradh //ucEncoderMode 954e390cabSriastradh enum atom_encode_mode_def 964e390cabSriastradh { 974e390cabSriastradh ATOM_ENCODER_MODE_DP =0, 984e390cabSriastradh ATOM_ENCODER_MODE_DP_SST =0, 994e390cabSriastradh ATOM_ENCODER_MODE_LVDS =1, 1004e390cabSriastradh ATOM_ENCODER_MODE_DVI =2, 1014e390cabSriastradh ATOM_ENCODER_MODE_HDMI =3, 1024e390cabSriastradh ATOM_ENCODER_MODE_DP_AUDIO =5, 1034e390cabSriastradh ATOM_ENCODER_MODE_DP_MST =5, 1044e390cabSriastradh ATOM_ENCODER_MODE_CRT =15, 1054e390cabSriastradh ATOM_ENCODER_MODE_DVO =16, 1064e390cabSriastradh }; 1074e390cabSriastradh 1084e390cabSriastradh enum atom_encoder_refclk_src_def{ 1094e390cabSriastradh ENCODER_REFCLK_SRC_P1PLL =0, 1104e390cabSriastradh ENCODER_REFCLK_SRC_P2PLL =1, 1114e390cabSriastradh ENCODER_REFCLK_SRC_P3PLL =2, 1124e390cabSriastradh ENCODER_REFCLK_SRC_EXTCLK =3, 1134e390cabSriastradh ENCODER_REFCLK_SRC_INVALID =0xff, 1144e390cabSriastradh }; 1154e390cabSriastradh 1164e390cabSriastradh enum atom_scaler_def{ 1174e390cabSriastradh ATOM_SCALER_DISABLE =0, /*scaler bypass mode, auto-center & no replication*/ 1184e390cabSriastradh ATOM_SCALER_CENTER =1, //For Fudo, it's bypass and auto-center & auto replication 1194e390cabSriastradh ATOM_SCALER_EXPANSION =2, /*scaler expansion by 2 tap alpha blending mode*/ 1204e390cabSriastradh }; 1214e390cabSriastradh 1224e390cabSriastradh enum atom_operation_def{ 1234e390cabSriastradh ATOM_DISABLE = 0, 1244e390cabSriastradh ATOM_ENABLE = 1, 1254e390cabSriastradh ATOM_INIT = 7, 1264e390cabSriastradh ATOM_GET_STATUS = 8, 1274e390cabSriastradh }; 1284e390cabSriastradh 1294e390cabSriastradh enum atom_embedded_display_op_def{ 1304e390cabSriastradh ATOM_LCD_BL_OFF = 2, 1314e390cabSriastradh ATOM_LCD_BL_OM = 3, 1324e390cabSriastradh ATOM_LCD_BL_BRIGHTNESS_CONTROL = 4, 1334e390cabSriastradh ATOM_LCD_SELFTEST_START = 5, 1344e390cabSriastradh ATOM_LCD_SELFTEST_STOP = 6, 1354e390cabSriastradh }; 1364e390cabSriastradh 1374e390cabSriastradh enum atom_spread_spectrum_mode{ 1384e390cabSriastradh ATOM_SS_CENTER_OR_DOWN_MODE_MASK = 0x01, 1394e390cabSriastradh ATOM_SS_DOWN_SPREAD_MODE = 0x00, 1404e390cabSriastradh ATOM_SS_CENTRE_SPREAD_MODE = 0x01, 1414e390cabSriastradh ATOM_INT_OR_EXT_SS_MASK = 0x02, 1424e390cabSriastradh ATOM_INTERNAL_SS_MASK = 0x00, 1434e390cabSriastradh ATOM_EXTERNAL_SS_MASK = 0x02, 1444e390cabSriastradh }; 1454e390cabSriastradh 1464e390cabSriastradh /* define panel bit per color */ 1474e390cabSriastradh enum atom_panel_bit_per_color{ 1484e390cabSriastradh PANEL_BPC_UNDEFINE =0x00, 1494e390cabSriastradh PANEL_6BIT_PER_COLOR =0x01, 1504e390cabSriastradh PANEL_8BIT_PER_COLOR =0x02, 1514e390cabSriastradh PANEL_10BIT_PER_COLOR =0x03, 1524e390cabSriastradh PANEL_12BIT_PER_COLOR =0x04, 1534e390cabSriastradh PANEL_16BIT_PER_COLOR =0x05, 1544e390cabSriastradh }; 1554e390cabSriastradh 1564e390cabSriastradh //ucVoltageType 1574e390cabSriastradh enum atom_voltage_type 1584e390cabSriastradh { 1594e390cabSriastradh VOLTAGE_TYPE_VDDC = 1, 1604e390cabSriastradh VOLTAGE_TYPE_MVDDC = 2, 1614e390cabSriastradh VOLTAGE_TYPE_MVDDQ = 3, 1624e390cabSriastradh VOLTAGE_TYPE_VDDCI = 4, 1634e390cabSriastradh VOLTAGE_TYPE_VDDGFX = 5, 1644e390cabSriastradh VOLTAGE_TYPE_PCC = 6, 1654e390cabSriastradh VOLTAGE_TYPE_MVPP = 7, 1664e390cabSriastradh VOLTAGE_TYPE_LEDDPM = 8, 1674e390cabSriastradh VOLTAGE_TYPE_PCC_MVDD = 9, 1684e390cabSriastradh VOLTAGE_TYPE_PCIE_VDDC = 10, 1694e390cabSriastradh VOLTAGE_TYPE_PCIE_VDDR = 11, 1704e390cabSriastradh VOLTAGE_TYPE_GENERIC_I2C_1 = 0x11, 1714e390cabSriastradh VOLTAGE_TYPE_GENERIC_I2C_2 = 0x12, 1724e390cabSriastradh VOLTAGE_TYPE_GENERIC_I2C_3 = 0x13, 1734e390cabSriastradh VOLTAGE_TYPE_GENERIC_I2C_4 = 0x14, 1744e390cabSriastradh VOLTAGE_TYPE_GENERIC_I2C_5 = 0x15, 1754e390cabSriastradh VOLTAGE_TYPE_GENERIC_I2C_6 = 0x16, 1764e390cabSriastradh VOLTAGE_TYPE_GENERIC_I2C_7 = 0x17, 1774e390cabSriastradh VOLTAGE_TYPE_GENERIC_I2C_8 = 0x18, 1784e390cabSriastradh VOLTAGE_TYPE_GENERIC_I2C_9 = 0x19, 1794e390cabSriastradh VOLTAGE_TYPE_GENERIC_I2C_10 = 0x1A, 1804e390cabSriastradh }; 1814e390cabSriastradh 1824e390cabSriastradh enum atom_dgpu_vram_type { 1834e390cabSriastradh ATOM_DGPU_VRAM_TYPE_GDDR5 = 0x50, 1844e390cabSriastradh ATOM_DGPU_VRAM_TYPE_HBM2 = 0x60, 1854e390cabSriastradh ATOM_DGPU_VRAM_TYPE_GDDR6 = 0x70, 1864e390cabSriastradh }; 1874e390cabSriastradh 1884e390cabSriastradh enum atom_dp_vs_preemph_def{ 1894e390cabSriastradh DP_VS_LEVEL0_PREEMPH_LEVEL0 = 0x00, 1904e390cabSriastradh DP_VS_LEVEL1_PREEMPH_LEVEL0 = 0x01, 1914e390cabSriastradh DP_VS_LEVEL2_PREEMPH_LEVEL0 = 0x02, 1924e390cabSriastradh DP_VS_LEVEL3_PREEMPH_LEVEL0 = 0x03, 1934e390cabSriastradh DP_VS_LEVEL0_PREEMPH_LEVEL1 = 0x08, 1944e390cabSriastradh DP_VS_LEVEL1_PREEMPH_LEVEL1 = 0x09, 1954e390cabSriastradh DP_VS_LEVEL2_PREEMPH_LEVEL1 = 0x0a, 1964e390cabSriastradh DP_VS_LEVEL0_PREEMPH_LEVEL2 = 0x10, 1974e390cabSriastradh DP_VS_LEVEL1_PREEMPH_LEVEL2 = 0x11, 1984e390cabSriastradh DP_VS_LEVEL0_PREEMPH_LEVEL3 = 0x18, 1994e390cabSriastradh }; 2004e390cabSriastradh 2014e390cabSriastradh 2024e390cabSriastradh /* 2034e390cabSriastradh enum atom_string_def{ 2044e390cabSriastradh asic_bus_type_pcie_string = "PCI_EXPRESS", 2054e390cabSriastradh atom_fire_gl_string = "FGL", 2064e390cabSriastradh atom_bios_string = "ATOM" 2074e390cabSriastradh }; 2084e390cabSriastradh */ 2094e390cabSriastradh 2104e390cabSriastradh #pragma pack(1) /* BIOS data must use byte aligment*/ 2114e390cabSriastradh 2124e390cabSriastradh enum atombios_image_offset{ 2134e390cabSriastradh OFFSET_TO_ATOM_ROM_HEADER_POINTER =0x00000048, 2144e390cabSriastradh OFFSET_TO_ATOM_ROM_IMAGE_SIZE =0x00000002, 2154e390cabSriastradh OFFSET_TO_ATOMBIOS_ASIC_BUS_MEM_TYPE =0x94, 2164e390cabSriastradh MAXSIZE_OF_ATOMBIOS_ASIC_BUS_MEM_TYPE =20, /*including the terminator 0x0!*/ 2174e390cabSriastradh OFFSET_TO_GET_ATOMBIOS_NUMBER_OF_STRINGS =0x2f, 2184e390cabSriastradh OFFSET_TO_GET_ATOMBIOS_STRING_START =0x6e, 2194e390cabSriastradh }; 2204e390cabSriastradh 2214e390cabSriastradh /**************************************************************************** 2224e390cabSriastradh * Common header for all tables (Data table, Command function). 2234e390cabSriastradh * Every table pointed in _ATOM_MASTER_DATA_TABLE has this common header. 2244e390cabSriastradh * And the pointer actually points to this header. 2254e390cabSriastradh ****************************************************************************/ 2264e390cabSriastradh 2274e390cabSriastradh struct atom_common_table_header 2284e390cabSriastradh { 2294e390cabSriastradh uint16_t structuresize; 2304e390cabSriastradh uint8_t format_revision; //mainly used for a hw function, when the parser is not backward compatible 2314e390cabSriastradh uint8_t content_revision; //change it when a data table has a structure change, or a hw function has a input/output parameter change 2324e390cabSriastradh }; 2334e390cabSriastradh 2344e390cabSriastradh /**************************************************************************** 2354e390cabSriastradh * Structure stores the ROM header. 2364e390cabSriastradh ****************************************************************************/ 2374e390cabSriastradh struct atom_rom_header_v2_2 2384e390cabSriastradh { 2394e390cabSriastradh struct atom_common_table_header table_header; 2404e390cabSriastradh uint8_t atom_bios_string[4]; //enum atom_string_def atom_bios_string; //Signature to distinguish between Atombios and non-atombios, 2414e390cabSriastradh uint16_t bios_segment_address; 2424e390cabSriastradh uint16_t protectedmodeoffset; 2434e390cabSriastradh uint16_t configfilenameoffset; 2444e390cabSriastradh uint16_t crc_block_offset; 2454e390cabSriastradh uint16_t vbios_bootupmessageoffset; 2464e390cabSriastradh uint16_t int10_offset; 2474e390cabSriastradh uint16_t pcibusdevinitcode; 2484e390cabSriastradh uint16_t iobaseaddress; 2494e390cabSriastradh uint16_t subsystem_vendor_id; 2504e390cabSriastradh uint16_t subsystem_id; 2514e390cabSriastradh uint16_t pci_info_offset; 2524e390cabSriastradh uint16_t masterhwfunction_offset; //Offest for SW to get all command function offsets, Don't change the position 2534e390cabSriastradh uint16_t masterdatatable_offset; //Offest for SW to get all data table offsets, Don't change the position 2544e390cabSriastradh uint16_t reserved; 2554e390cabSriastradh uint32_t pspdirtableoffset; 2564e390cabSriastradh }; 2574e390cabSriastradh 2584e390cabSriastradh /*==============================hw function portion======================================================================*/ 2594e390cabSriastradh 2604e390cabSriastradh 2614e390cabSriastradh /**************************************************************************** 2624e390cabSriastradh * Structures used in Command.mtb, each function name is not given here since those function could change from time to time 2634e390cabSriastradh * The real functionality of each function is associated with the parameter structure version when defined 2644e390cabSriastradh * For all internal cmd function definitions, please reference to atomstruct.h 2654e390cabSriastradh ****************************************************************************/ 2664e390cabSriastradh struct atom_master_list_of_command_functions_v2_1{ 2674e390cabSriastradh uint16_t asic_init; //Function 2684e390cabSriastradh uint16_t cmd_function1; //used as an internal one 2694e390cabSriastradh uint16_t cmd_function2; //used as an internal one 2704e390cabSriastradh uint16_t cmd_function3; //used as an internal one 2714e390cabSriastradh uint16_t digxencodercontrol; //Function 2724e390cabSriastradh uint16_t cmd_function5; //used as an internal one 2734e390cabSriastradh uint16_t cmd_function6; //used as an internal one 2744e390cabSriastradh uint16_t cmd_function7; //used as an internal one 2754e390cabSriastradh uint16_t cmd_function8; //used as an internal one 2764e390cabSriastradh uint16_t cmd_function9; //used as an internal one 2774e390cabSriastradh uint16_t setengineclock; //Function 2784e390cabSriastradh uint16_t setmemoryclock; //Function 2794e390cabSriastradh uint16_t setpixelclock; //Function 2804e390cabSriastradh uint16_t enabledisppowergating; //Function 2814e390cabSriastradh uint16_t cmd_function14; //used as an internal one 2824e390cabSriastradh uint16_t cmd_function15; //used as an internal one 2834e390cabSriastradh uint16_t cmd_function16; //used as an internal one 2844e390cabSriastradh uint16_t cmd_function17; //used as an internal one 2854e390cabSriastradh uint16_t cmd_function18; //used as an internal one 2864e390cabSriastradh uint16_t cmd_function19; //used as an internal one 2874e390cabSriastradh uint16_t cmd_function20; //used as an internal one 2884e390cabSriastradh uint16_t cmd_function21; //used as an internal one 2894e390cabSriastradh uint16_t cmd_function22; //used as an internal one 2904e390cabSriastradh uint16_t cmd_function23; //used as an internal one 2914e390cabSriastradh uint16_t cmd_function24; //used as an internal one 2924e390cabSriastradh uint16_t cmd_function25; //used as an internal one 2934e390cabSriastradh uint16_t cmd_function26; //used as an internal one 2944e390cabSriastradh uint16_t cmd_function27; //used as an internal one 2954e390cabSriastradh uint16_t cmd_function28; //used as an internal one 2964e390cabSriastradh uint16_t cmd_function29; //used as an internal one 2974e390cabSriastradh uint16_t cmd_function30; //used as an internal one 2984e390cabSriastradh uint16_t cmd_function31; //used as an internal one 2994e390cabSriastradh uint16_t cmd_function32; //used as an internal one 3004e390cabSriastradh uint16_t cmd_function33; //used as an internal one 3014e390cabSriastradh uint16_t blankcrtc; //Function 3024e390cabSriastradh uint16_t enablecrtc; //Function 3034e390cabSriastradh uint16_t cmd_function36; //used as an internal one 3044e390cabSriastradh uint16_t cmd_function37; //used as an internal one 3054e390cabSriastradh uint16_t cmd_function38; //used as an internal one 3064e390cabSriastradh uint16_t cmd_function39; //used as an internal one 3074e390cabSriastradh uint16_t cmd_function40; //used as an internal one 3084e390cabSriastradh uint16_t getsmuclockinfo; //Function 3094e390cabSriastradh uint16_t selectcrtc_source; //Function 3104e390cabSriastradh uint16_t cmd_function43; //used as an internal one 3114e390cabSriastradh uint16_t cmd_function44; //used as an internal one 3124e390cabSriastradh uint16_t cmd_function45; //used as an internal one 3134e390cabSriastradh uint16_t setdceclock; //Function 3144e390cabSriastradh uint16_t getmemoryclock; //Function 3154e390cabSriastradh uint16_t getengineclock; //Function 3164e390cabSriastradh uint16_t setcrtc_usingdtdtiming; //Function 3174e390cabSriastradh uint16_t externalencodercontrol; //Function 3184e390cabSriastradh uint16_t cmd_function51; //used as an internal one 3194e390cabSriastradh uint16_t cmd_function52; //used as an internal one 3204e390cabSriastradh uint16_t cmd_function53; //used as an internal one 3214e390cabSriastradh uint16_t processi2cchanneltransaction;//Function 3224e390cabSriastradh uint16_t cmd_function55; //used as an internal one 3234e390cabSriastradh uint16_t cmd_function56; //used as an internal one 3244e390cabSriastradh uint16_t cmd_function57; //used as an internal one 3254e390cabSriastradh uint16_t cmd_function58; //used as an internal one 3264e390cabSriastradh uint16_t cmd_function59; //used as an internal one 3274e390cabSriastradh uint16_t computegpuclockparam; //Function 3284e390cabSriastradh uint16_t cmd_function61; //used as an internal one 3294e390cabSriastradh uint16_t cmd_function62; //used as an internal one 3304e390cabSriastradh uint16_t dynamicmemorysettings; //Function function 3314e390cabSriastradh uint16_t memorytraining; //Function function 3324e390cabSriastradh uint16_t cmd_function65; //used as an internal one 3334e390cabSriastradh uint16_t cmd_function66; //used as an internal one 3344e390cabSriastradh uint16_t setvoltage; //Function 3354e390cabSriastradh uint16_t cmd_function68; //used as an internal one 3364e390cabSriastradh uint16_t readefusevalue; //Function 3374e390cabSriastradh uint16_t cmd_function70; //used as an internal one 3384e390cabSriastradh uint16_t cmd_function71; //used as an internal one 3394e390cabSriastradh uint16_t cmd_function72; //used as an internal one 3404e390cabSriastradh uint16_t cmd_function73; //used as an internal one 3414e390cabSriastradh uint16_t cmd_function74; //used as an internal one 3424e390cabSriastradh uint16_t cmd_function75; //used as an internal one 3434e390cabSriastradh uint16_t dig1transmittercontrol; //Function 3444e390cabSriastradh uint16_t cmd_function77; //used as an internal one 3454e390cabSriastradh uint16_t processauxchanneltransaction;//Function 3464e390cabSriastradh uint16_t cmd_function79; //used as an internal one 3474e390cabSriastradh uint16_t getvoltageinfo; //Function 3484e390cabSriastradh }; 3494e390cabSriastradh 3504e390cabSriastradh struct atom_master_command_function_v2_1 3514e390cabSriastradh { 3524e390cabSriastradh struct atom_common_table_header table_header; 3534e390cabSriastradh struct atom_master_list_of_command_functions_v2_1 listofcmdfunctions; 3544e390cabSriastradh }; 3554e390cabSriastradh 3564e390cabSriastradh /**************************************************************************** 3574e390cabSriastradh * Structures used in every command function 3584e390cabSriastradh ****************************************************************************/ 3594e390cabSriastradh struct atom_function_attribute 3604e390cabSriastradh { 3614e390cabSriastradh uint16_t ws_in_bytes:8; //[7:0]=Size of workspace in Bytes (in multiple of a dword), 3624e390cabSriastradh uint16_t ps_in_bytes:7; //[14:8]=Size of parameter space in Bytes (multiple of a dword), 3634e390cabSriastradh uint16_t updated_by_util:1; //[15]=flag to indicate the function is updated by util 3644e390cabSriastradh }; 3654e390cabSriastradh 3664e390cabSriastradh 3674e390cabSriastradh /**************************************************************************** 3684e390cabSriastradh * Common header for all hw functions. 3694e390cabSriastradh * Every function pointed by _master_list_of_hw_function has this common header. 3704e390cabSriastradh * And the pointer actually points to this header. 3714e390cabSriastradh ****************************************************************************/ 3724e390cabSriastradh struct atom_rom_hw_function_header 3734e390cabSriastradh { 3744e390cabSriastradh struct atom_common_table_header func_header; 3754e390cabSriastradh struct atom_function_attribute func_attrib; 3764e390cabSriastradh }; 3774e390cabSriastradh 3784e390cabSriastradh 3794e390cabSriastradh /*==============================sw data table portion======================================================================*/ 3804e390cabSriastradh /**************************************************************************** 3814e390cabSriastradh * Structures used in data.mtb, each data table name is not given here since those data table could change from time to time 3824e390cabSriastradh * The real name of each table is given when its data structure version is defined 3834e390cabSriastradh ****************************************************************************/ 3844e390cabSriastradh struct atom_master_list_of_data_tables_v2_1{ 3854e390cabSriastradh uint16_t utilitypipeline; /* Offest for the utility to get parser info,Don't change this position!*/ 3864e390cabSriastradh uint16_t multimedia_info; 3874e390cabSriastradh uint16_t smc_dpm_info; 3884e390cabSriastradh uint16_t sw_datatable3; 3894e390cabSriastradh uint16_t firmwareinfo; /* Shared by various SW components */ 3904e390cabSriastradh uint16_t sw_datatable5; 3914e390cabSriastradh uint16_t lcd_info; /* Shared by various SW components */ 3924e390cabSriastradh uint16_t sw_datatable7; 3934e390cabSriastradh uint16_t smu_info; 3944e390cabSriastradh uint16_t sw_datatable9; 3954e390cabSriastradh uint16_t sw_datatable10; 3964e390cabSriastradh uint16_t vram_usagebyfirmware; /* Shared by various SW components */ 3974e390cabSriastradh uint16_t gpio_pin_lut; /* Shared by various SW components */ 3984e390cabSriastradh uint16_t sw_datatable13; 3994e390cabSriastradh uint16_t gfx_info; 4004e390cabSriastradh uint16_t powerplayinfo; /* Shared by various SW components */ 4014e390cabSriastradh uint16_t sw_datatable16; 4024e390cabSriastradh uint16_t sw_datatable17; 4034e390cabSriastradh uint16_t sw_datatable18; 4044e390cabSriastradh uint16_t sw_datatable19; 4054e390cabSriastradh uint16_t sw_datatable20; 4064e390cabSriastradh uint16_t sw_datatable21; 4074e390cabSriastradh uint16_t displayobjectinfo; /* Shared by various SW components */ 4084e390cabSriastradh uint16_t indirectioaccess; /* used as an internal one */ 4094e390cabSriastradh uint16_t umc_info; /* Shared by various SW components */ 4104e390cabSriastradh uint16_t sw_datatable25; 4114e390cabSriastradh uint16_t sw_datatable26; 4124e390cabSriastradh uint16_t dce_info; /* Shared by various SW components */ 4134e390cabSriastradh uint16_t vram_info; /* Shared by various SW components */ 4144e390cabSriastradh uint16_t sw_datatable29; 4154e390cabSriastradh uint16_t integratedsysteminfo; /* Shared by various SW components */ 4164e390cabSriastradh uint16_t asic_profiling_info; /* Shared by various SW components */ 4174e390cabSriastradh uint16_t voltageobject_info; /* shared by various SW components */ 4184e390cabSriastradh uint16_t sw_datatable33; 4194e390cabSriastradh uint16_t sw_datatable34; 4204e390cabSriastradh }; 4214e390cabSriastradh 4224e390cabSriastradh 4234e390cabSriastradh struct atom_master_data_table_v2_1 4244e390cabSriastradh { 4254e390cabSriastradh struct atom_common_table_header table_header; 4264e390cabSriastradh struct atom_master_list_of_data_tables_v2_1 listOfdatatables; 4274e390cabSriastradh }; 4284e390cabSriastradh 4294e390cabSriastradh 4304e390cabSriastradh struct atom_dtd_format 4314e390cabSriastradh { 4324e390cabSriastradh uint16_t pixclk; 4334e390cabSriastradh uint16_t h_active; 4344e390cabSriastradh uint16_t h_blanking_time; 4354e390cabSriastradh uint16_t v_active; 4364e390cabSriastradh uint16_t v_blanking_time; 4374e390cabSriastradh uint16_t h_sync_offset; 4384e390cabSriastradh uint16_t h_sync_width; 4394e390cabSriastradh uint16_t v_sync_offset; 4404e390cabSriastradh uint16_t v_syncwidth; 4414e390cabSriastradh uint16_t reserved; 4424e390cabSriastradh uint16_t reserved0; 4434e390cabSriastradh uint8_t h_border; 4444e390cabSriastradh uint8_t v_border; 4454e390cabSriastradh uint16_t miscinfo; 4464e390cabSriastradh uint8_t atom_mode_id; 4474e390cabSriastradh uint8_t refreshrate; 4484e390cabSriastradh }; 4494e390cabSriastradh 4504e390cabSriastradh /* atom_dtd_format.modemiscinfo defintion */ 4514e390cabSriastradh enum atom_dtd_format_modemiscinfo{ 4524e390cabSriastradh ATOM_HSYNC_POLARITY = 0x0002, 4534e390cabSriastradh ATOM_VSYNC_POLARITY = 0x0004, 4544e390cabSriastradh ATOM_H_REPLICATIONBY2 = 0x0010, 4554e390cabSriastradh ATOM_V_REPLICATIONBY2 = 0x0020, 4564e390cabSriastradh ATOM_INTERLACE = 0x0080, 4574e390cabSriastradh ATOM_COMPOSITESYNC = 0x0040, 4584e390cabSriastradh }; 4594e390cabSriastradh 4604e390cabSriastradh 4614e390cabSriastradh /* utilitypipeline 4624e390cabSriastradh * 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. 4634e390cabSriastradh * the location of it can't change 4644e390cabSriastradh */ 4654e390cabSriastradh 4664e390cabSriastradh 4674e390cabSriastradh /* 4684e390cabSriastradh *************************************************************************** 4694e390cabSriastradh Data Table firmwareinfo structure 4704e390cabSriastradh *************************************************************************** 4714e390cabSriastradh */ 4724e390cabSriastradh 4734e390cabSriastradh struct atom_firmware_info_v3_1 4744e390cabSriastradh { 4754e390cabSriastradh struct atom_common_table_header table_header; 4764e390cabSriastradh uint32_t firmware_revision; 4774e390cabSriastradh uint32_t bootup_sclk_in10khz; 4784e390cabSriastradh uint32_t bootup_mclk_in10khz; 4794e390cabSriastradh uint32_t firmware_capability; // enum atombios_firmware_capability 4804e390cabSriastradh uint32_t main_call_parser_entry; /* direct address of main parser call in VBIOS binary. */ 4814e390cabSriastradh uint32_t bios_scratch_reg_startaddr; // 1st bios scratch register dword address 4824e390cabSriastradh uint16_t bootup_vddc_mv; 4834e390cabSriastradh uint16_t bootup_vddci_mv; 4844e390cabSriastradh uint16_t bootup_mvddc_mv; 4854e390cabSriastradh uint16_t bootup_vddgfx_mv; 4864e390cabSriastradh uint8_t mem_module_id; 4874e390cabSriastradh uint8_t coolingsolution_id; /*0: Air cooling; 1: Liquid cooling ... */ 4884e390cabSriastradh uint8_t reserved1[2]; 4894e390cabSriastradh uint32_t mc_baseaddr_high; 4904e390cabSriastradh uint32_t mc_baseaddr_low; 4914e390cabSriastradh uint32_t reserved2[6]; 4924e390cabSriastradh }; 4934e390cabSriastradh 4944e390cabSriastradh /* Total 32bit cap indication */ 4954e390cabSriastradh enum atombios_firmware_capability 4964e390cabSriastradh { 4974e390cabSriastradh ATOM_FIRMWARE_CAP_FIRMWARE_POSTED = 0x00000001, 4984e390cabSriastradh ATOM_FIRMWARE_CAP_GPU_VIRTUALIZATION = 0x00000002, 4994e390cabSriastradh ATOM_FIRMWARE_CAP_WMI_SUPPORT = 0x00000040, 5004e390cabSriastradh ATOM_FIRMWARE_CAP_HWEMU_ENABLE = 0x00000080, 5014e390cabSriastradh ATOM_FIRMWARE_CAP_HWEMU_UMC_CFG = 0x00000100, 5024e390cabSriastradh ATOM_FIRMWARE_CAP_SRAM_ECC = 0x00000200, 5034e390cabSriastradh ATOM_FIRMWARE_CAP_ENABLE_2STAGE_BIST_TRAINING = 0x00000400, 5044e390cabSriastradh }; 5054e390cabSriastradh 5064e390cabSriastradh enum atom_cooling_solution_id{ 5074e390cabSriastradh AIR_COOLING = 0x00, 5084e390cabSriastradh LIQUID_COOLING = 0x01 5094e390cabSriastradh }; 5104e390cabSriastradh 5114e390cabSriastradh struct atom_firmware_info_v3_2 { 5124e390cabSriastradh struct atom_common_table_header table_header; 5134e390cabSriastradh uint32_t firmware_revision; 5144e390cabSriastradh uint32_t bootup_sclk_in10khz; 5154e390cabSriastradh uint32_t bootup_mclk_in10khz; 5164e390cabSriastradh uint32_t firmware_capability; // enum atombios_firmware_capability 5174e390cabSriastradh uint32_t main_call_parser_entry; /* direct address of main parser call in VBIOS binary. */ 5184e390cabSriastradh uint32_t bios_scratch_reg_startaddr; // 1st bios scratch register dword address 5194e390cabSriastradh uint16_t bootup_vddc_mv; 5204e390cabSriastradh uint16_t bootup_vddci_mv; 5214e390cabSriastradh uint16_t bootup_mvddc_mv; 5224e390cabSriastradh uint16_t bootup_vddgfx_mv; 5234e390cabSriastradh uint8_t mem_module_id; 5244e390cabSriastradh uint8_t coolingsolution_id; /*0: Air cooling; 1: Liquid cooling ... */ 5254e390cabSriastradh uint8_t reserved1[2]; 5264e390cabSriastradh uint32_t mc_baseaddr_high; 5274e390cabSriastradh uint32_t mc_baseaddr_low; 5284e390cabSriastradh uint8_t board_i2c_feature_id; // enum of atom_board_i2c_feature_id_def 5294e390cabSriastradh uint8_t board_i2c_feature_gpio_id; // i2c id find in gpio_lut data table gpio_id 5304e390cabSriastradh uint8_t board_i2c_feature_slave_addr; 5314e390cabSriastradh uint8_t reserved3; 5324e390cabSriastradh uint16_t bootup_mvddq_mv; 5334e390cabSriastradh uint16_t bootup_mvpp_mv; 5344e390cabSriastradh uint32_t zfbstartaddrin16mb; 5354e390cabSriastradh uint32_t reserved2[3]; 5364e390cabSriastradh }; 5374e390cabSriastradh 5384e390cabSriastradh struct atom_firmware_info_v3_3 5394e390cabSriastradh { 5404e390cabSriastradh struct atom_common_table_header table_header; 5414e390cabSriastradh uint32_t firmware_revision; 5424e390cabSriastradh uint32_t bootup_sclk_in10khz; 5434e390cabSriastradh uint32_t bootup_mclk_in10khz; 5444e390cabSriastradh uint32_t firmware_capability; // enum atombios_firmware_capability 5454e390cabSriastradh uint32_t main_call_parser_entry; /* direct address of main parser call in VBIOS binary. */ 5464e390cabSriastradh uint32_t bios_scratch_reg_startaddr; // 1st bios scratch register dword address 5474e390cabSriastradh uint16_t bootup_vddc_mv; 5484e390cabSriastradh uint16_t bootup_vddci_mv; 5494e390cabSriastradh uint16_t bootup_mvddc_mv; 5504e390cabSriastradh uint16_t bootup_vddgfx_mv; 5514e390cabSriastradh uint8_t mem_module_id; 5524e390cabSriastradh uint8_t coolingsolution_id; /*0: Air cooling; 1: Liquid cooling ... */ 5534e390cabSriastradh uint8_t reserved1[2]; 5544e390cabSriastradh uint32_t mc_baseaddr_high; 5554e390cabSriastradh uint32_t mc_baseaddr_low; 5564e390cabSriastradh uint8_t board_i2c_feature_id; // enum of atom_board_i2c_feature_id_def 5574e390cabSriastradh uint8_t board_i2c_feature_gpio_id; // i2c id find in gpio_lut data table gpio_id 5584e390cabSriastradh uint8_t board_i2c_feature_slave_addr; 5594e390cabSriastradh uint8_t reserved3; 5604e390cabSriastradh uint16_t bootup_mvddq_mv; 5614e390cabSriastradh uint16_t bootup_mvpp_mv; 5624e390cabSriastradh uint32_t zfbstartaddrin16mb; 5634e390cabSriastradh uint32_t pplib_pptable_id; // if pplib_pptable_id!=0, pplib get powerplay table inside driver instead of from VBIOS 5644e390cabSriastradh uint32_t reserved2[2]; 5654e390cabSriastradh }; 5664e390cabSriastradh 5674e390cabSriastradh /* 5684e390cabSriastradh *************************************************************************** 5694e390cabSriastradh Data Table lcd_info structure 5704e390cabSriastradh *************************************************************************** 5714e390cabSriastradh */ 5724e390cabSriastradh 5734e390cabSriastradh struct lcd_info_v2_1 5744e390cabSriastradh { 5754e390cabSriastradh struct atom_common_table_header table_header; 5764e390cabSriastradh struct atom_dtd_format lcd_timing; 5774e390cabSriastradh uint16_t backlight_pwm; 5784e390cabSriastradh uint16_t special_handle_cap; 5794e390cabSriastradh uint16_t panel_misc; 5804e390cabSriastradh uint16_t lvds_max_slink_pclk; 5814e390cabSriastradh uint16_t lvds_ss_percentage; 5824e390cabSriastradh uint16_t lvds_ss_rate_10hz; 5834e390cabSriastradh uint8_t pwr_on_digon_to_de; /*all pwr sequence numbers below are in uint of 4ms*/ 5844e390cabSriastradh uint8_t pwr_on_de_to_vary_bl; 5854e390cabSriastradh uint8_t pwr_down_vary_bloff_to_de; 5864e390cabSriastradh uint8_t pwr_down_de_to_digoff; 5874e390cabSriastradh uint8_t pwr_off_delay; 5884e390cabSriastradh uint8_t pwr_on_vary_bl_to_blon; 5894e390cabSriastradh uint8_t pwr_down_bloff_to_vary_bloff; 5904e390cabSriastradh uint8_t panel_bpc; 5914e390cabSriastradh uint8_t dpcd_edp_config_cap; 5924e390cabSriastradh uint8_t dpcd_max_link_rate; 5934e390cabSriastradh uint8_t dpcd_max_lane_count; 5944e390cabSriastradh uint8_t dpcd_max_downspread; 5954e390cabSriastradh uint8_t min_allowed_bl_level; 5964e390cabSriastradh uint8_t max_allowed_bl_level; 5974e390cabSriastradh uint8_t bootup_bl_level; 5984e390cabSriastradh uint8_t dplvdsrxid; 5994e390cabSriastradh uint32_t reserved1[8]; 6004e390cabSriastradh }; 6014e390cabSriastradh 6024e390cabSriastradh /* lcd_info_v2_1.panel_misc defintion */ 6034e390cabSriastradh enum atom_lcd_info_panel_misc{ 6044e390cabSriastradh ATOM_PANEL_MISC_FPDI =0x0002, 6054e390cabSriastradh }; 6064e390cabSriastradh 6074e390cabSriastradh //uceDPToLVDSRxId 6084e390cabSriastradh enum atom_lcd_info_dptolvds_rx_id 6094e390cabSriastradh { 6104e390cabSriastradh eDP_TO_LVDS_RX_DISABLE = 0x00, // no eDP->LVDS translator chip 6114e390cabSriastradh eDP_TO_LVDS_COMMON_ID = 0x01, // common eDP->LVDS translator chip without AMD SW init 6124e390cabSriastradh eDP_TO_LVDS_REALTEK_ID = 0x02, // Realtek tansaltor which require AMD SW init 6134e390cabSriastradh }; 6144e390cabSriastradh 6154e390cabSriastradh 6164e390cabSriastradh /* 6174e390cabSriastradh *************************************************************************** 6184e390cabSriastradh Data Table gpio_pin_lut structure 6194e390cabSriastradh *************************************************************************** 6204e390cabSriastradh */ 6214e390cabSriastradh 6224e390cabSriastradh struct atom_gpio_pin_assignment 6234e390cabSriastradh { 6244e390cabSriastradh uint32_t data_a_reg_index; 6254e390cabSriastradh uint8_t gpio_bitshift; 6264e390cabSriastradh uint8_t gpio_mask_bitshift; 6274e390cabSriastradh uint8_t gpio_id; 6284e390cabSriastradh uint8_t reserved; 6294e390cabSriastradh }; 6304e390cabSriastradh 6314e390cabSriastradh /* atom_gpio_pin_assignment.gpio_id definition */ 6324e390cabSriastradh enum atom_gpio_pin_assignment_gpio_id { 6334e390cabSriastradh I2C_HW_LANE_MUX =0x0f, /* only valid when bit7=1 */ 6344e390cabSriastradh I2C_HW_ENGINE_ID_MASK =0x70, /* only valid when bit7=1 */ 6354e390cabSriastradh 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 */ 6364e390cabSriastradh 6374e390cabSriastradh /* gpio_id pre-define id for multiple usage */ 6384e390cabSriastradh /* GPIO use to control PCIE_VDDC in certain SLT board */ 6394e390cabSriastradh PCIE_VDDC_CONTROL_GPIO_PINID = 56, 6404e390cabSriastradh /* if PP_AC_DC_SWITCH_GPIO_PINID in Gpio_Pin_LutTable, AC/DC swithing feature is enable */ 6414e390cabSriastradh PP_AC_DC_SWITCH_GPIO_PINID = 60, 6424e390cabSriastradh /* VDDC_REGULATOR_VRHOT_GPIO_PINID in Gpio_Pin_LutTable, VRHot feature is enable */ 6434e390cabSriastradh VDDC_VRHOT_GPIO_PINID = 61, 6444e390cabSriastradh /*if VDDC_PCC_GPIO_PINID in GPIO_LUTable, Peak Current Control feature is enabled */ 6454e390cabSriastradh VDDC_PCC_GPIO_PINID = 62, 6464e390cabSriastradh /* Only used on certain SLT/PA board to allow utility to cut Efuse. */ 6474e390cabSriastradh EFUSE_CUT_ENABLE_GPIO_PINID = 63, 6484e390cabSriastradh /* ucGPIO=DRAM_SELF_REFRESH_GPIO_PIND uses for memory self refresh (ucGPIO=0, DRAM self-refresh; ucGPIO= */ 6494e390cabSriastradh DRAM_SELF_REFRESH_GPIO_PINID = 64, 6504e390cabSriastradh /* Thermal interrupt output->system thermal chip GPIO pin */ 6514e390cabSriastradh THERMAL_INT_OUTPUT_GPIO_PINID =65, 6524e390cabSriastradh }; 6534e390cabSriastradh 6544e390cabSriastradh 6554e390cabSriastradh struct atom_gpio_pin_lut_v2_1 6564e390cabSriastradh { 6574e390cabSriastradh struct atom_common_table_header table_header; 6584e390cabSriastradh /*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 */ 6594e390cabSriastradh struct atom_gpio_pin_assignment gpio_pin[8]; 6604e390cabSriastradh }; 6614e390cabSriastradh 6624e390cabSriastradh 6634e390cabSriastradh /* 6644e390cabSriastradh *************************************************************************** 6654e390cabSriastradh Data Table vram_usagebyfirmware structure 6664e390cabSriastradh *************************************************************************** 6674e390cabSriastradh */ 6684e390cabSriastradh 6694e390cabSriastradh struct vram_usagebyfirmware_v2_1 6704e390cabSriastradh { 6714e390cabSriastradh struct atom_common_table_header table_header; 6724e390cabSriastradh uint32_t start_address_in_kb; 6734e390cabSriastradh uint16_t used_by_firmware_in_kb; 6744e390cabSriastradh uint16_t used_by_driver_in_kb; 6754e390cabSriastradh }; 6764e390cabSriastradh 6774e390cabSriastradh 6784e390cabSriastradh /* 6794e390cabSriastradh *************************************************************************** 6804e390cabSriastradh Data Table displayobjectinfo structure 6814e390cabSriastradh *************************************************************************** 6824e390cabSriastradh */ 6834e390cabSriastradh 6844e390cabSriastradh enum atom_object_record_type_id 6854e390cabSriastradh { 6864e390cabSriastradh ATOM_I2C_RECORD_TYPE =1, 6874e390cabSriastradh ATOM_HPD_INT_RECORD_TYPE =2, 6884e390cabSriastradh ATOM_OBJECT_GPIO_CNTL_RECORD_TYPE =9, 6894e390cabSriastradh ATOM_CONNECTOR_HPDPIN_LUT_RECORD_TYPE =16, 6904e390cabSriastradh ATOM_CONNECTOR_AUXDDC_LUT_RECORD_TYPE =17, 6914e390cabSriastradh ATOM_ENCODER_CAP_RECORD_TYPE=20, 6924e390cabSriastradh ATOM_BRACKET_LAYOUT_RECORD_TYPE=21, 6934e390cabSriastradh ATOM_CONNECTOR_FORCED_TMDS_CAP_RECORD_TYPE=22, 6944e390cabSriastradh ATOM_RECORD_END_TYPE =0xFF, 6954e390cabSriastradh }; 6964e390cabSriastradh 6974e390cabSriastradh struct atom_common_record_header 6984e390cabSriastradh { 6994e390cabSriastradh uint8_t record_type; //An emun to indicate the record type 7004e390cabSriastradh uint8_t record_size; //The size of the whole record in byte 7014e390cabSriastradh }; 7024e390cabSriastradh 7034e390cabSriastradh struct atom_i2c_record 7044e390cabSriastradh { 7054e390cabSriastradh struct atom_common_record_header record_header; //record_type = ATOM_I2C_RECORD_TYPE 7064e390cabSriastradh uint8_t i2c_id; 7074e390cabSriastradh uint8_t i2c_slave_addr; //The slave address, it's 0 when the record is attached to connector for DDC 7084e390cabSriastradh }; 7094e390cabSriastradh 7104e390cabSriastradh struct atom_hpd_int_record 7114e390cabSriastradh { 7124e390cabSriastradh struct atom_common_record_header record_header; //record_type = ATOM_HPD_INT_RECORD_TYPE 7134e390cabSriastradh uint8_t pin_id; //Corresponding block in GPIO_PIN_INFO table gives the pin info 7144e390cabSriastradh uint8_t plugin_pin_state; 7154e390cabSriastradh }; 7164e390cabSriastradh 7174e390cabSriastradh // Bit maps for ATOM_ENCODER_CAP_RECORD.usEncoderCap 7184e390cabSriastradh enum atom_encoder_caps_def 7194e390cabSriastradh { 7204e390cabSriastradh 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 7214e390cabSriastradh ATOM_ENCODER_CAP_RECORD_MST_EN =0x01, // from SI, this bit means DP MST is enable or not. 7224e390cabSriastradh ATOM_ENCODER_CAP_RECORD_HBR2_EN =0x02, // DP1.2 HBR2 setting is qualified and HBR2 can be enabled 7234e390cabSriastradh ATOM_ENCODER_CAP_RECORD_HDMI6Gbps_EN =0x04, // HDMI2.0 6Gbps enable or not. 7244e390cabSriastradh ATOM_ENCODER_CAP_RECORD_HBR3_EN =0x08, // DP1.3 HBR3 is supported by board. 7254e390cabSriastradh ATOM_ENCODER_CAP_RECORD_USB_C_TYPE =0x100, // the DP connector is a USB-C type. 7264e390cabSriastradh }; 7274e390cabSriastradh 7284e390cabSriastradh struct atom_encoder_caps_record 7294e390cabSriastradh { 7304e390cabSriastradh struct atom_common_record_header record_header; //record_type = ATOM_ENCODER_CAP_RECORD_TYPE 7314e390cabSriastradh uint32_t encodercaps; 7324e390cabSriastradh }; 7334e390cabSriastradh 7344e390cabSriastradh enum atom_connector_caps_def 7354e390cabSriastradh { 7364e390cabSriastradh ATOM_CONNECTOR_CAP_INTERNAL_DISPLAY = 0x01, //a cap bit to indicate that this non-embedded display connector is an internal display 7374e390cabSriastradh 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 7384e390cabSriastradh }; 7394e390cabSriastradh 7404e390cabSriastradh struct atom_disp_connector_caps_record 7414e390cabSriastradh { 7424e390cabSriastradh struct atom_common_record_header record_header; 7434e390cabSriastradh uint32_t connectcaps; 7444e390cabSriastradh }; 7454e390cabSriastradh 7464e390cabSriastradh //The following generic object gpio pin control record type will replace JTAG_RECORD/FPGA_CONTROL_RECORD/DVI_EXT_INPUT_RECORD above gradually 7474e390cabSriastradh struct atom_gpio_pin_control_pair 7484e390cabSriastradh { 7494e390cabSriastradh uint8_t gpio_id; // GPIO_ID, find the corresponding ID in GPIO_LUT table 7504e390cabSriastradh uint8_t gpio_pinstate; // Pin state showing how to set-up the pin 7514e390cabSriastradh }; 7524e390cabSriastradh 7534e390cabSriastradh struct atom_object_gpio_cntl_record 7544e390cabSriastradh { 7554e390cabSriastradh struct atom_common_record_header record_header; 7564e390cabSriastradh uint8_t flag; // Future expnadibility 7574e390cabSriastradh uint8_t number_of_pins; // Number of GPIO pins used to control the object 7584e390cabSriastradh struct atom_gpio_pin_control_pair gpio[1]; // the real gpio pin pair determined by number of pins ucNumberOfPins 7594e390cabSriastradh }; 7604e390cabSriastradh 7614e390cabSriastradh //Definitions for GPIO pin state 7624e390cabSriastradh enum atom_gpio_pin_control_pinstate_def 7634e390cabSriastradh { 7644e390cabSriastradh GPIO_PIN_TYPE_INPUT = 0x00, 7654e390cabSriastradh GPIO_PIN_TYPE_OUTPUT = 0x10, 7664e390cabSriastradh GPIO_PIN_TYPE_HW_CONTROL = 0x20, 7674e390cabSriastradh 7684e390cabSriastradh //For GPIO_PIN_TYPE_OUTPUT the following is defined 7694e390cabSriastradh GPIO_PIN_OUTPUT_STATE_MASK = 0x01, 7704e390cabSriastradh GPIO_PIN_OUTPUT_STATE_SHIFT = 0, 7714e390cabSriastradh GPIO_PIN_STATE_ACTIVE_LOW = 0x0, 7724e390cabSriastradh GPIO_PIN_STATE_ACTIVE_HIGH = 0x1, 7734e390cabSriastradh }; 7744e390cabSriastradh 7754e390cabSriastradh // Indexes to GPIO array in GLSync record 7764e390cabSriastradh // GLSync record is for Frame Lock/Gen Lock feature. 7774e390cabSriastradh enum atom_glsync_record_gpio_index_def 7784e390cabSriastradh { 7794e390cabSriastradh ATOM_GPIO_INDEX_GLSYNC_REFCLK = 0, 7804e390cabSriastradh ATOM_GPIO_INDEX_GLSYNC_HSYNC = 1, 7814e390cabSriastradh ATOM_GPIO_INDEX_GLSYNC_VSYNC = 2, 7824e390cabSriastradh ATOM_GPIO_INDEX_GLSYNC_SWAP_REQ = 3, 7834e390cabSriastradh ATOM_GPIO_INDEX_GLSYNC_SWAP_GNT = 4, 7844e390cabSriastradh ATOM_GPIO_INDEX_GLSYNC_INTERRUPT = 5, 7854e390cabSriastradh ATOM_GPIO_INDEX_GLSYNC_V_RESET = 6, 7864e390cabSriastradh ATOM_GPIO_INDEX_GLSYNC_SWAP_CNTL = 7, 7874e390cabSriastradh ATOM_GPIO_INDEX_GLSYNC_SWAP_SEL = 8, 7884e390cabSriastradh ATOM_GPIO_INDEX_GLSYNC_MAX = 9, 7894e390cabSriastradh }; 7904e390cabSriastradh 7914e390cabSriastradh 7924e390cabSriastradh struct atom_connector_hpdpin_lut_record //record for ATOM_CONNECTOR_HPDPIN_LUT_RECORD_TYPE 7934e390cabSriastradh { 7944e390cabSriastradh struct atom_common_record_header record_header; 7954e390cabSriastradh uint8_t hpd_pin_map[8]; 7964e390cabSriastradh }; 7974e390cabSriastradh 7984e390cabSriastradh struct atom_connector_auxddc_lut_record //record for ATOM_CONNECTOR_AUXDDC_LUT_RECORD_TYPE 7994e390cabSriastradh { 8004e390cabSriastradh struct atom_common_record_header record_header; 8014e390cabSriastradh uint8_t aux_ddc_map[8]; 8024e390cabSriastradh }; 8034e390cabSriastradh 8044e390cabSriastradh struct atom_connector_forced_tmds_cap_record 8054e390cabSriastradh { 8064e390cabSriastradh struct atom_common_record_header record_header; 8074e390cabSriastradh // override TMDS capability on this connector when it operate in TMDS mode. usMaxTmdsClkRate = max TMDS Clock in Mhz/2.5 8084e390cabSriastradh uint8_t maxtmdsclkrate_in2_5mhz; 8094e390cabSriastradh uint8_t reserved; 8104e390cabSriastradh }; 8114e390cabSriastradh 8124e390cabSriastradh struct atom_connector_layout_info 8134e390cabSriastradh { 8144e390cabSriastradh uint16_t connectorobjid; 8154e390cabSriastradh uint8_t connector_type; 8164e390cabSriastradh uint8_t position; 8174e390cabSriastradh }; 8184e390cabSriastradh 8194e390cabSriastradh // define ATOM_CONNECTOR_LAYOUT_INFO.ucConnectorType to describe the display connector size 8204e390cabSriastradh enum atom_connector_layout_info_connector_type_def 8214e390cabSriastradh { 8224e390cabSriastradh CONNECTOR_TYPE_DVI_D = 1, 8234e390cabSriastradh 8244e390cabSriastradh CONNECTOR_TYPE_HDMI = 4, 8254e390cabSriastradh CONNECTOR_TYPE_DISPLAY_PORT = 5, 8264e390cabSriastradh CONNECTOR_TYPE_MINI_DISPLAY_PORT = 6, 8274e390cabSriastradh }; 8284e390cabSriastradh 8294e390cabSriastradh struct atom_bracket_layout_record 8304e390cabSriastradh { 8314e390cabSriastradh struct atom_common_record_header record_header; 8324e390cabSriastradh uint8_t bracketlen; 8334e390cabSriastradh uint8_t bracketwidth; 8344e390cabSriastradh uint8_t conn_num; 8354e390cabSriastradh uint8_t reserved; 8364e390cabSriastradh struct atom_connector_layout_info conn_info[1]; 8374e390cabSriastradh }; 8384e390cabSriastradh 8394e390cabSriastradh enum atom_display_device_tag_def{ 8404e390cabSriastradh ATOM_DISPLAY_LCD1_SUPPORT = 0x0002, //an embedded display is either an LVDS or eDP signal type of display 8414e390cabSriastradh ATOM_DISPLAY_DFP1_SUPPORT = 0x0008, 8424e390cabSriastradh ATOM_DISPLAY_DFP2_SUPPORT = 0x0080, 8434e390cabSriastradh ATOM_DISPLAY_DFP3_SUPPORT = 0x0200, 8444e390cabSriastradh ATOM_DISPLAY_DFP4_SUPPORT = 0x0400, 8454e390cabSriastradh ATOM_DISPLAY_DFP5_SUPPORT = 0x0800, 8464e390cabSriastradh ATOM_DISPLAY_DFP6_SUPPORT = 0x0040, 8474e390cabSriastradh ATOM_DISPLAY_DFPx_SUPPORT = 0x0ec8, 8484e390cabSriastradh }; 8494e390cabSriastradh 8504e390cabSriastradh struct atom_display_object_path_v2 8514e390cabSriastradh { 8524e390cabSriastradh uint16_t display_objid; //Connector Object ID or Misc Object ID 8534e390cabSriastradh uint16_t disp_recordoffset; 8544e390cabSriastradh uint16_t encoderobjid; //first encoder closer to the connector, could be either an external or intenal encoder 8554e390cabSriastradh uint16_t extencoderobjid; //2nd encoder after the first encoder, from the connector point of view; 8564e390cabSriastradh uint16_t encoder_recordoffset; 8574e390cabSriastradh uint16_t extencoder_recordoffset; 8584e390cabSriastradh 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 8594e390cabSriastradh uint8_t priority_id; 8604e390cabSriastradh uint8_t reserved; 8614e390cabSriastradh }; 8624e390cabSriastradh 8634e390cabSriastradh struct display_object_info_table_v1_4 8644e390cabSriastradh { 8654e390cabSriastradh struct atom_common_table_header table_header; 8664e390cabSriastradh uint16_t supporteddevices; 8674e390cabSriastradh uint8_t number_of_path; 8684e390cabSriastradh uint8_t reserved; 8694e390cabSriastradh struct atom_display_object_path_v2 display_path[8]; //the real number of this included in the structure is calculated by using the (whole structure size - the header size- number_of_path)/size of atom_display_object_path 8704e390cabSriastradh }; 8714e390cabSriastradh 8724e390cabSriastradh 8734e390cabSriastradh /* 8744e390cabSriastradh *************************************************************************** 8754e390cabSriastradh Data Table dce_info structure 8764e390cabSriastradh *************************************************************************** 8774e390cabSriastradh */ 8784e390cabSriastradh struct atom_display_controller_info_v4_1 8794e390cabSriastradh { 8804e390cabSriastradh struct atom_common_table_header table_header; 8814e390cabSriastradh uint32_t display_caps; 8824e390cabSriastradh uint32_t bootup_dispclk_10khz; 8834e390cabSriastradh uint16_t dce_refclk_10khz; 8844e390cabSriastradh uint16_t i2c_engine_refclk_10khz; 8854e390cabSriastradh uint16_t dvi_ss_percentage; // in unit of 0.001% 8864e390cabSriastradh uint16_t dvi_ss_rate_10hz; 8874e390cabSriastradh uint16_t hdmi_ss_percentage; // in unit of 0.001% 8884e390cabSriastradh uint16_t hdmi_ss_rate_10hz; 8894e390cabSriastradh uint16_t dp_ss_percentage; // in unit of 0.001% 8904e390cabSriastradh uint16_t dp_ss_rate_10hz; 8914e390cabSriastradh uint8_t dvi_ss_mode; // enum of atom_spread_spectrum_mode 8924e390cabSriastradh uint8_t hdmi_ss_mode; // enum of atom_spread_spectrum_mode 8934e390cabSriastradh uint8_t dp_ss_mode; // enum of atom_spread_spectrum_mode 8944e390cabSriastradh uint8_t ss_reserved; 8954e390cabSriastradh uint8_t hardcode_mode_num; // a hardcode mode number defined in StandardVESA_TimingTable when a CRT or DFP EDID is not available 8964e390cabSriastradh uint8_t reserved1[3]; 8974e390cabSriastradh uint16_t dpphy_refclk_10khz; 8984e390cabSriastradh uint16_t reserved2; 8994e390cabSriastradh uint8_t dceip_min_ver; 9004e390cabSriastradh uint8_t dceip_max_ver; 9014e390cabSriastradh uint8_t max_disp_pipe_num; 9024e390cabSriastradh uint8_t max_vbios_active_disp_pipe_num; 9034e390cabSriastradh uint8_t max_ppll_num; 9044e390cabSriastradh uint8_t max_disp_phy_num; 9054e390cabSriastradh uint8_t max_aux_pairs; 9064e390cabSriastradh uint8_t remotedisplayconfig; 9074e390cabSriastradh uint8_t reserved3[8]; 9084e390cabSriastradh }; 9094e390cabSriastradh 9104e390cabSriastradh 9114e390cabSriastradh struct atom_display_controller_info_v4_2 9124e390cabSriastradh { 9134e390cabSriastradh struct atom_common_table_header table_header; 9144e390cabSriastradh uint32_t display_caps; 9154e390cabSriastradh uint32_t bootup_dispclk_10khz; 9164e390cabSriastradh uint16_t dce_refclk_10khz; 9174e390cabSriastradh uint16_t i2c_engine_refclk_10khz; 9184e390cabSriastradh uint16_t dvi_ss_percentage; // in unit of 0.001% 9194e390cabSriastradh uint16_t dvi_ss_rate_10hz; 9204e390cabSriastradh uint16_t hdmi_ss_percentage; // in unit of 0.001% 9214e390cabSriastradh uint16_t hdmi_ss_rate_10hz; 9224e390cabSriastradh uint16_t dp_ss_percentage; // in unit of 0.001% 9234e390cabSriastradh uint16_t dp_ss_rate_10hz; 9244e390cabSriastradh uint8_t dvi_ss_mode; // enum of atom_spread_spectrum_mode 9254e390cabSriastradh uint8_t hdmi_ss_mode; // enum of atom_spread_spectrum_mode 9264e390cabSriastradh uint8_t dp_ss_mode; // enum of atom_spread_spectrum_mode 9274e390cabSriastradh uint8_t ss_reserved; 9284e390cabSriastradh uint8_t dfp_hardcode_mode_num; // DFP hardcode mode number defined in StandardVESA_TimingTable when EDID is not available 9294e390cabSriastradh uint8_t dfp_hardcode_refreshrate;// DFP hardcode mode refreshrate defined in StandardVESA_TimingTable when EDID is not available 9304e390cabSriastradh uint8_t vga_hardcode_mode_num; // VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable 9314e390cabSriastradh uint8_t vga_hardcode_refreshrate;// VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable 9324e390cabSriastradh uint16_t dpphy_refclk_10khz; 9334e390cabSriastradh uint16_t reserved2; 9344e390cabSriastradh uint8_t dcnip_min_ver; 9354e390cabSriastradh uint8_t dcnip_max_ver; 9364e390cabSriastradh uint8_t max_disp_pipe_num; 9374e390cabSriastradh uint8_t max_vbios_active_disp_pipe_num; 9384e390cabSriastradh uint8_t max_ppll_num; 9394e390cabSriastradh uint8_t max_disp_phy_num; 9404e390cabSriastradh uint8_t max_aux_pairs; 9414e390cabSriastradh uint8_t remotedisplayconfig; 9424e390cabSriastradh uint8_t reserved3[8]; 9434e390cabSriastradh }; 9444e390cabSriastradh 9454e390cabSriastradh 9464e390cabSriastradh enum dce_info_caps_def 9474e390cabSriastradh { 9484e390cabSriastradh // only for VBIOS 9494e390cabSriastradh DCE_INFO_CAPS_FORCE_DISPDEV_CONNECTED =0x02, 9504e390cabSriastradh // only for VBIOS 9514e390cabSriastradh DCE_INFO_CAPS_DISABLE_DFP_DP_HBR2 =0x04, 9524e390cabSriastradh // only for VBIOS 9534e390cabSriastradh DCE_INFO_CAPS_ENABLE_INTERLAC_TIMING =0x08, 9544e390cabSriastradh 9554e390cabSriastradh }; 9564e390cabSriastradh 9574e390cabSriastradh /* 9584e390cabSriastradh *************************************************************************** 9594e390cabSriastradh Data Table ATOM_EXTERNAL_DISPLAY_CONNECTION_INFO structure 9604e390cabSriastradh *************************************************************************** 9614e390cabSriastradh */ 9624e390cabSriastradh struct atom_ext_display_path 9634e390cabSriastradh { 9644e390cabSriastradh uint16_t device_tag; //A bit vector to show what devices are supported 9654e390cabSriastradh uint16_t device_acpi_enum; //16bit device ACPI id. 9664e390cabSriastradh uint16_t connectorobjid; //A physical connector for displays to plug in, using object connector definitions 9674e390cabSriastradh uint8_t auxddclut_index; //An index into external AUX/DDC channel LUT 9684e390cabSriastradh uint8_t hpdlut_index; //An index into external HPD pin LUT 9694e390cabSriastradh uint16_t ext_encoder_objid; //external encoder object id 9704e390cabSriastradh uint8_t channelmapping; // if ucChannelMapping=0, using default one to one mapping 9714e390cabSriastradh uint8_t chpninvert; // bit vector for up to 8 lanes, =0: P and N is not invert, =1 P and N is inverted 9724e390cabSriastradh uint16_t caps; 9734e390cabSriastradh uint16_t reserved; 9744e390cabSriastradh }; 9754e390cabSriastradh 9764e390cabSriastradh //usCaps 9774e390cabSriastradh enum ext_display_path_cap_def 9784e390cabSriastradh { 9794e390cabSriastradh EXT_DISPLAY_PATH_CAPS__HBR2_DISABLE =0x0001, 9804e390cabSriastradh EXT_DISPLAY_PATH_CAPS__DP_FIXED_VS_EN =0x0002, 9814e390cabSriastradh EXT_DISPLAY_PATH_CAPS__EXT_CHIP_MASK =0x007C, 9824e390cabSriastradh }; 9834e390cabSriastradh 9844e390cabSriastradh struct atom_external_display_connection_info 9854e390cabSriastradh { 9864e390cabSriastradh struct atom_common_table_header table_header; 9874e390cabSriastradh uint8_t guid[16]; // a GUID is a 16 byte long string 9884e390cabSriastradh struct atom_ext_display_path path[7]; // total of fixed 7 entries. 9894e390cabSriastradh uint8_t checksum; // a simple Checksum of the sum of whole structure equal to 0x0. 9904e390cabSriastradh uint8_t stereopinid; // use for eDP panel 9914e390cabSriastradh uint8_t remotedisplayconfig; 9924e390cabSriastradh uint8_t edptolvdsrxid; 9934e390cabSriastradh uint8_t fixdpvoltageswing; // usCaps[1]=1, this indicate DP_LANE_SET value 9944e390cabSriastradh uint8_t reserved[3]; // for potential expansion 9954e390cabSriastradh }; 9964e390cabSriastradh 9974e390cabSriastradh /* 9984e390cabSriastradh *************************************************************************** 9994e390cabSriastradh Data Table integratedsysteminfo structure 10004e390cabSriastradh *************************************************************************** 10014e390cabSriastradh */ 10024e390cabSriastradh 10034e390cabSriastradh struct atom_camera_dphy_timing_param 10044e390cabSriastradh { 10054e390cabSriastradh uint8_t profile_id; // SENSOR_PROFILES 10064e390cabSriastradh uint32_t param; 10074e390cabSriastradh }; 10084e390cabSriastradh 10094e390cabSriastradh struct atom_camera_dphy_elec_param 10104e390cabSriastradh { 10114e390cabSriastradh uint16_t param[3]; 10124e390cabSriastradh }; 10134e390cabSriastradh 10144e390cabSriastradh struct atom_camera_module_info 10154e390cabSriastradh { 10164e390cabSriastradh uint8_t module_id; // 0: Rear, 1: Front right of user, 2: Front left of user 10174e390cabSriastradh uint8_t module_name[8]; 10184e390cabSriastradh struct atom_camera_dphy_timing_param timingparam[6]; // Exact number is under estimation and confirmation from sensor vendor 10194e390cabSriastradh }; 10204e390cabSriastradh 10214e390cabSriastradh struct atom_camera_flashlight_info 10224e390cabSriastradh { 10234e390cabSriastradh uint8_t flashlight_id; // 0: Rear, 1: Front 10244e390cabSriastradh uint8_t name[8]; 10254e390cabSriastradh }; 10264e390cabSriastradh 10274e390cabSriastradh struct atom_camera_data 10284e390cabSriastradh { 10294e390cabSriastradh uint32_t versionCode; 10304e390cabSriastradh struct atom_camera_module_info cameraInfo[3]; // Assuming 3 camera sensors max 10314e390cabSriastradh struct atom_camera_flashlight_info flashInfo; // Assuming 1 flashlight max 10324e390cabSriastradh struct atom_camera_dphy_elec_param dphy_param; 10334e390cabSriastradh uint32_t crc_val; // CRC 10344e390cabSriastradh }; 10354e390cabSriastradh 10364e390cabSriastradh 10374e390cabSriastradh struct atom_14nm_dpphy_dvihdmi_tuningset 10384e390cabSriastradh { 10394e390cabSriastradh uint32_t max_symclk_in10khz; 10404e390cabSriastradh uint8_t encoder_mode; //atom_encode_mode_def, =2: DVI, =3: HDMI mode 10414e390cabSriastradh uint8_t phy_sel; //bit vector of phy, bit0= phya, bit1=phyb, ....bit5 = phyf 10424e390cabSriastradh uint16_t margindeemph; //COMMON_MAR_DEEMPH_NOM[7:0]tx_margin_nom [15:8]deemph_gen1_nom 10434e390cabSriastradh uint8_t deemph_6db_4; //COMMON_SELDEEMPH60[31:24]deemph_6db_4 10444e390cabSriastradh 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 10454e390cabSriastradh uint8_t tx_driver_fifty_ohms; //COMMON_ZCALCODE_CTRL[21].tx_driver_fifty_ohms 10464e390cabSriastradh uint8_t deemph_sel; //MARGIN_DEEMPH_LANE0.DEEMPH_SEL 10474e390cabSriastradh }; 10484e390cabSriastradh 10494e390cabSriastradh struct atom_14nm_dpphy_dp_setting{ 10504e390cabSriastradh uint8_t dp_vs_pemph_level; //enum of atom_dp_vs_preemph_def 10514e390cabSriastradh uint16_t margindeemph; //COMMON_MAR_DEEMPH_NOM[7:0]tx_margin_nom [15:8]deemph_gen1_nom 10524e390cabSriastradh uint8_t deemph_6db_4; //COMMON_SELDEEMPH60[31:24]deemph_6db_4 10534e390cabSriastradh 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 10544e390cabSriastradh }; 10554e390cabSriastradh 10564e390cabSriastradh struct atom_14nm_dpphy_dp_tuningset{ 10574e390cabSriastradh uint8_t phy_sel; // bit vector of phy, bit0= phya, bit1=phyb, ....bit5 = phyf 10584e390cabSriastradh uint8_t version; 10594e390cabSriastradh uint16_t table_size; // size of atom_14nm_dpphy_dp_tuningset 10604e390cabSriastradh uint16_t reserved; 10614e390cabSriastradh struct atom_14nm_dpphy_dp_setting dptuning[10]; 10624e390cabSriastradh }; 10634e390cabSriastradh 10644e390cabSriastradh struct atom_14nm_dig_transmitter_info_header_v4_0{ 10654e390cabSriastradh struct atom_common_table_header table_header; 10664e390cabSriastradh uint16_t pcie_phy_tmds_hdmi_macro_settings_offset; // offset of PCIEPhyTMDSHDMIMacroSettingsTbl 10674e390cabSriastradh uint16_t uniphy_vs_emph_lookup_table_offset; // offset of UniphyVSEmphLookUpTbl 10684e390cabSriastradh uint16_t uniphy_xbar_settings_table_offset; // offset of UniphyXbarSettingsTbl 10694e390cabSriastradh }; 10704e390cabSriastradh 10714e390cabSriastradh struct atom_14nm_combphy_tmds_vs_set 10724e390cabSriastradh { 10734e390cabSriastradh uint8_t sym_clk; 10744e390cabSriastradh uint8_t dig_mode; 10754e390cabSriastradh uint8_t phy_sel; 10764e390cabSriastradh uint16_t common_mar_deemph_nom__margin_deemph_val; 10774e390cabSriastradh uint8_t common_seldeemph60__deemph_6db_4_val; 10784e390cabSriastradh uint8_t cmd_bus_global_for_tx_lane0__boostadj_val ; 10794e390cabSriastradh uint8_t common_zcalcode_ctrl__tx_driver_fifty_ohms_val; 10804e390cabSriastradh uint8_t margin_deemph_lane0__deemph_sel_val; 10814e390cabSriastradh }; 10824e390cabSriastradh 10834e390cabSriastradh struct atom_i2c_reg_info { 10844e390cabSriastradh uint8_t ucI2cRegIndex; 10854e390cabSriastradh uint8_t ucI2cRegVal; 10864e390cabSriastradh }; 10874e390cabSriastradh 10884e390cabSriastradh struct atom_hdmi_retimer_redriver_set { 10894e390cabSriastradh uint8_t HdmiSlvAddr; 10904e390cabSriastradh uint8_t HdmiRegNum; 10914e390cabSriastradh uint8_t Hdmi6GRegNum; 10924e390cabSriastradh struct atom_i2c_reg_info HdmiRegSetting[9]; //For non 6G Hz use 10934e390cabSriastradh struct atom_i2c_reg_info Hdmi6GhzRegSetting[3]; //For 6G Hz use. 10944e390cabSriastradh }; 10954e390cabSriastradh 10964e390cabSriastradh struct atom_integrated_system_info_v1_11 10974e390cabSriastradh { 10984e390cabSriastradh struct atom_common_table_header table_header; 10994e390cabSriastradh uint32_t vbios_misc; //enum of atom_system_vbiosmisc_def 11004e390cabSriastradh uint32_t gpucapinfo; //enum of atom_system_gpucapinf_def 11014e390cabSriastradh uint32_t system_config; 11024e390cabSriastradh uint32_t cpucapinfo; 11034e390cabSriastradh uint16_t gpuclk_ss_percentage; //unit of 0.001%, 1000 mean 1% 11044e390cabSriastradh uint16_t gpuclk_ss_type; 11054e390cabSriastradh uint16_t lvds_ss_percentage; //unit of 0.001%, 1000 mean 1% 11064e390cabSriastradh uint16_t lvds_ss_rate_10hz; 11074e390cabSriastradh uint16_t hdmi_ss_percentage; //unit of 0.001%, 1000 mean 1% 11084e390cabSriastradh uint16_t hdmi_ss_rate_10hz; 11094e390cabSriastradh uint16_t dvi_ss_percentage; //unit of 0.001%, 1000 mean 1% 11104e390cabSriastradh uint16_t dvi_ss_rate_10hz; 11114e390cabSriastradh uint16_t dpphy_override; // bit vector, enum of atom_sysinfo_dpphy_override_def 11124e390cabSriastradh uint16_t lvds_misc; // enum of atom_sys_info_lvds_misc_def 11134e390cabSriastradh uint16_t backlight_pwm_hz; // pwm frequency in hz 11144e390cabSriastradh uint8_t memorytype; // enum of atom_dmi_t17_mem_type_def, APU memory type indication. 11154e390cabSriastradh uint8_t umachannelnumber; // number of memory channels 11164e390cabSriastradh uint8_t pwr_on_digon_to_de; /* all pwr sequence numbers below are in uint of 4ms */ 11174e390cabSriastradh uint8_t pwr_on_de_to_vary_bl; 11184e390cabSriastradh uint8_t pwr_down_vary_bloff_to_de; 11194e390cabSriastradh uint8_t pwr_down_de_to_digoff; 11204e390cabSriastradh uint8_t pwr_off_delay; 11214e390cabSriastradh uint8_t pwr_on_vary_bl_to_blon; 11224e390cabSriastradh uint8_t pwr_down_bloff_to_vary_bloff; 11234e390cabSriastradh uint8_t min_allowed_bl_level; 11244e390cabSriastradh uint8_t htc_hyst_limit; 11254e390cabSriastradh uint8_t htc_tmp_limit; 11264e390cabSriastradh uint8_t reserved1; 11274e390cabSriastradh uint8_t reserved2; 11284e390cabSriastradh struct atom_external_display_connection_info extdispconninfo; 11294e390cabSriastradh struct atom_14nm_dpphy_dvihdmi_tuningset dvi_tuningset; 11304e390cabSriastradh struct atom_14nm_dpphy_dvihdmi_tuningset hdmi_tuningset; 11314e390cabSriastradh struct atom_14nm_dpphy_dvihdmi_tuningset hdmi6g_tuningset; 11324e390cabSriastradh struct atom_14nm_dpphy_dp_tuningset dp_tuningset; // rbr 1.62G dp tuning set 11334e390cabSriastradh struct atom_14nm_dpphy_dp_tuningset dp_hbr3_tuningset; // HBR3 dp tuning set 11344e390cabSriastradh struct atom_camera_data camera_info; 11354e390cabSriastradh struct atom_hdmi_retimer_redriver_set dp0_retimer_set; //for DP0 11364e390cabSriastradh struct atom_hdmi_retimer_redriver_set dp1_retimer_set; //for DP1 11374e390cabSriastradh struct atom_hdmi_retimer_redriver_set dp2_retimer_set; //for DP2 11384e390cabSriastradh struct atom_hdmi_retimer_redriver_set dp3_retimer_set; //for DP3 11394e390cabSriastradh struct atom_14nm_dpphy_dp_tuningset dp_hbr_tuningset; //hbr 2.7G dp tuning set 11404e390cabSriastradh struct atom_14nm_dpphy_dp_tuningset dp_hbr2_tuningset; //hbr2 5.4G dp turnig set 11414e390cabSriastradh struct atom_14nm_dpphy_dp_tuningset edp_tuningset; //edp tuning set 11424e390cabSriastradh uint32_t reserved[66]; 11434e390cabSriastradh }; 11444e390cabSriastradh 11454e390cabSriastradh 11464e390cabSriastradh // system_config 11474e390cabSriastradh enum atom_system_vbiosmisc_def{ 11484e390cabSriastradh INTEGRATED_SYSTEM_INFO__GET_EDID_CALLBACK_FUNC_SUPPORT = 0x01, 11494e390cabSriastradh }; 11504e390cabSriastradh 11514e390cabSriastradh 11524e390cabSriastradh // gpucapinfo 11534e390cabSriastradh enum atom_system_gpucapinf_def{ 11544e390cabSriastradh SYS_INFO_GPUCAPS__ENABEL_DFS_BYPASS = 0x10, 11554e390cabSriastradh }; 11564e390cabSriastradh 11574e390cabSriastradh //dpphy_override 11584e390cabSriastradh enum atom_sysinfo_dpphy_override_def{ 11594e390cabSriastradh ATOM_ENABLE_DVI_TUNINGSET = 0x01, 11604e390cabSriastradh ATOM_ENABLE_HDMI_TUNINGSET = 0x02, 11614e390cabSriastradh ATOM_ENABLE_HDMI6G_TUNINGSET = 0x04, 11624e390cabSriastradh ATOM_ENABLE_DP_TUNINGSET = 0x08, 11634e390cabSriastradh ATOM_ENABLE_DP_HBR3_TUNINGSET = 0x10, 11644e390cabSriastradh }; 11654e390cabSriastradh 11664e390cabSriastradh //lvds_misc 11674e390cabSriastradh enum atom_sys_info_lvds_misc_def 11684e390cabSriastradh { 11694e390cabSriastradh SYS_INFO_LVDS_MISC_888_FPDI_MODE =0x01, 11704e390cabSriastradh SYS_INFO_LVDS_MISC_888_BPC_MODE =0x04, 11714e390cabSriastradh SYS_INFO_LVDS_MISC_OVERRIDE_EN =0x08, 11724e390cabSriastradh }; 11734e390cabSriastradh 11744e390cabSriastradh 11754e390cabSriastradh //memorytype DMI Type 17 offset 12h - Memory Type 11764e390cabSriastradh enum atom_dmi_t17_mem_type_def{ 11774e390cabSriastradh OtherMemType = 0x01, ///< Assign 01 to Other 11784e390cabSriastradh UnknownMemType, ///< Assign 02 to Unknown 11794e390cabSriastradh DramMemType, ///< Assign 03 to DRAM 11804e390cabSriastradh EdramMemType, ///< Assign 04 to EDRAM 11814e390cabSriastradh VramMemType, ///< Assign 05 to VRAM 11824e390cabSriastradh SramMemType, ///< Assign 06 to SRAM 11834e390cabSriastradh RamMemType, ///< Assign 07 to RAM 11844e390cabSriastradh RomMemType, ///< Assign 08 to ROM 11854e390cabSriastradh FlashMemType, ///< Assign 09 to Flash 11864e390cabSriastradh EepromMemType, ///< Assign 10 to EEPROM 11874e390cabSriastradh FepromMemType, ///< Assign 11 to FEPROM 11884e390cabSriastradh EpromMemType, ///< Assign 12 to EPROM 11894e390cabSriastradh CdramMemType, ///< Assign 13 to CDRAM 11904e390cabSriastradh ThreeDramMemType, ///< Assign 14 to 3DRAM 11914e390cabSriastradh SdramMemType, ///< Assign 15 to SDRAM 11924e390cabSriastradh SgramMemType, ///< Assign 16 to SGRAM 11934e390cabSriastradh RdramMemType, ///< Assign 17 to RDRAM 11944e390cabSriastradh DdrMemType, ///< Assign 18 to DDR 11954e390cabSriastradh Ddr2MemType, ///< Assign 19 to DDR2 11964e390cabSriastradh Ddr2FbdimmMemType, ///< Assign 20 to DDR2 FB-DIMM 11974e390cabSriastradh Ddr3MemType = 0x18, ///< Assign 24 to DDR3 11984e390cabSriastradh Fbd2MemType, ///< Assign 25 to FBD2 11994e390cabSriastradh Ddr4MemType, ///< Assign 26 to DDR4 12004e390cabSriastradh LpDdrMemType, ///< Assign 27 to LPDDR 12014e390cabSriastradh LpDdr2MemType, ///< Assign 28 to LPDDR2 12024e390cabSriastradh LpDdr3MemType, ///< Assign 29 to LPDDR3 12034e390cabSriastradh LpDdr4MemType, ///< Assign 30 to LPDDR4 12044e390cabSriastradh }; 12054e390cabSriastradh 12064e390cabSriastradh 12074e390cabSriastradh // this Table is used starting from NL/AM, used by SBIOS and pass the IntegratedSystemInfoTable/PowerPlayInfoTable/SystemCameraInfoTable 12084e390cabSriastradh struct atom_fusion_system_info_v4 12094e390cabSriastradh { 12104e390cabSriastradh struct atom_integrated_system_info_v1_11 sysinfo; // refer to ATOM_INTEGRATED_SYSTEM_INFO_V1_8 definition 12114e390cabSriastradh uint32_t powerplayinfo[256]; // Reserve 1024 bytes space for PowerPlayInfoTable 12124e390cabSriastradh }; 12134e390cabSriastradh 12144e390cabSriastradh 12154e390cabSriastradh /* 12164e390cabSriastradh *************************************************************************** 12174e390cabSriastradh Data Table gfx_info structure 12184e390cabSriastradh *************************************************************************** 12194e390cabSriastradh */ 12204e390cabSriastradh 12214e390cabSriastradh struct atom_gfx_info_v2_2 12224e390cabSriastradh { 12234e390cabSriastradh struct atom_common_table_header table_header; 12244e390cabSriastradh uint8_t gfxip_min_ver; 12254e390cabSriastradh uint8_t gfxip_max_ver; 12264e390cabSriastradh uint8_t max_shader_engines; 12274e390cabSriastradh uint8_t max_tile_pipes; 12284e390cabSriastradh uint8_t max_cu_per_sh; 12294e390cabSriastradh uint8_t max_sh_per_se; 12304e390cabSriastradh uint8_t max_backends_per_se; 12314e390cabSriastradh uint8_t max_texture_channel_caches; 12324e390cabSriastradh uint32_t regaddr_cp_dma_src_addr; 12334e390cabSriastradh uint32_t regaddr_cp_dma_src_addr_hi; 12344e390cabSriastradh uint32_t regaddr_cp_dma_dst_addr; 12354e390cabSriastradh uint32_t regaddr_cp_dma_dst_addr_hi; 12364e390cabSriastradh uint32_t regaddr_cp_dma_command; 12374e390cabSriastradh uint32_t regaddr_cp_status; 12384e390cabSriastradh uint32_t regaddr_rlc_gpu_clock_32; 12394e390cabSriastradh uint32_t rlc_gpu_timer_refclk; 12404e390cabSriastradh }; 12414e390cabSriastradh 12424e390cabSriastradh struct atom_gfx_info_v2_3 { 12434e390cabSriastradh struct atom_common_table_header table_header; 12444e390cabSriastradh uint8_t gfxip_min_ver; 12454e390cabSriastradh uint8_t gfxip_max_ver; 12464e390cabSriastradh uint8_t max_shader_engines; 12474e390cabSriastradh uint8_t max_tile_pipes; 12484e390cabSriastradh uint8_t max_cu_per_sh; 12494e390cabSriastradh uint8_t max_sh_per_se; 12504e390cabSriastradh uint8_t max_backends_per_se; 12514e390cabSriastradh uint8_t max_texture_channel_caches; 12524e390cabSriastradh uint32_t regaddr_cp_dma_src_addr; 12534e390cabSriastradh uint32_t regaddr_cp_dma_src_addr_hi; 12544e390cabSriastradh uint32_t regaddr_cp_dma_dst_addr; 12554e390cabSriastradh uint32_t regaddr_cp_dma_dst_addr_hi; 12564e390cabSriastradh uint32_t regaddr_cp_dma_command; 12574e390cabSriastradh uint32_t regaddr_cp_status; 12584e390cabSriastradh uint32_t regaddr_rlc_gpu_clock_32; 12594e390cabSriastradh uint32_t rlc_gpu_timer_refclk; 12604e390cabSriastradh uint8_t active_cu_per_sh; 12614e390cabSriastradh uint8_t active_rb_per_se; 12624e390cabSriastradh uint16_t gcgoldenoffset; 12634e390cabSriastradh uint32_t rm21_sram_vmin_value; 12644e390cabSriastradh }; 12654e390cabSriastradh 12664e390cabSriastradh struct atom_gfx_info_v2_4 12674e390cabSriastradh { 12684e390cabSriastradh struct atom_common_table_header table_header; 12694e390cabSriastradh uint8_t gfxip_min_ver; 12704e390cabSriastradh uint8_t gfxip_max_ver; 12714e390cabSriastradh uint8_t max_shader_engines; 12724e390cabSriastradh uint8_t reserved; 12734e390cabSriastradh uint8_t max_cu_per_sh; 12744e390cabSriastradh uint8_t max_sh_per_se; 12754e390cabSriastradh uint8_t max_backends_per_se; 12764e390cabSriastradh uint8_t max_texture_channel_caches; 12774e390cabSriastradh uint32_t regaddr_cp_dma_src_addr; 12784e390cabSriastradh uint32_t regaddr_cp_dma_src_addr_hi; 12794e390cabSriastradh uint32_t regaddr_cp_dma_dst_addr; 12804e390cabSriastradh uint32_t regaddr_cp_dma_dst_addr_hi; 12814e390cabSriastradh uint32_t regaddr_cp_dma_command; 12824e390cabSriastradh uint32_t regaddr_cp_status; 12834e390cabSriastradh uint32_t regaddr_rlc_gpu_clock_32; 12844e390cabSriastradh uint32_t rlc_gpu_timer_refclk; 12854e390cabSriastradh uint8_t active_cu_per_sh; 12864e390cabSriastradh uint8_t active_rb_per_se; 12874e390cabSriastradh uint16_t gcgoldenoffset; 12884e390cabSriastradh uint16_t gc_num_gprs; 12894e390cabSriastradh uint16_t gc_gsprim_buff_depth; 12904e390cabSriastradh uint16_t gc_parameter_cache_depth; 12914e390cabSriastradh uint16_t gc_wave_size; 12924e390cabSriastradh uint16_t gc_max_waves_per_simd; 12934e390cabSriastradh uint16_t gc_lds_size; 12944e390cabSriastradh uint8_t gc_num_max_gs_thds; 12954e390cabSriastradh uint8_t gc_gs_table_depth; 12964e390cabSriastradh uint8_t gc_double_offchip_lds_buffer; 12974e390cabSriastradh uint8_t gc_max_scratch_slots_per_cu; 12984e390cabSriastradh uint32_t sram_rm_fuses_val; 12994e390cabSriastradh uint32_t sram_custom_rm_fuses_val; 13004e390cabSriastradh }; 13014e390cabSriastradh 13024e390cabSriastradh /* 13034e390cabSriastradh *************************************************************************** 13044e390cabSriastradh Data Table smu_info structure 13054e390cabSriastradh *************************************************************************** 13064e390cabSriastradh */ 13074e390cabSriastradh struct atom_smu_info_v3_1 13084e390cabSriastradh { 13094e390cabSriastradh struct atom_common_table_header table_header; 13104e390cabSriastradh uint8_t smuip_min_ver; 13114e390cabSriastradh uint8_t smuip_max_ver; 13124e390cabSriastradh uint8_t smu_rsd1; 13134e390cabSriastradh uint8_t gpuclk_ss_mode; // enum of atom_spread_spectrum_mode 13144e390cabSriastradh uint16_t sclk_ss_percentage; 13154e390cabSriastradh uint16_t sclk_ss_rate_10hz; 13164e390cabSriastradh uint16_t gpuclk_ss_percentage; // in unit of 0.001% 13174e390cabSriastradh uint16_t gpuclk_ss_rate_10hz; 13184e390cabSriastradh uint32_t core_refclk_10khz; 13194e390cabSriastradh uint8_t ac_dc_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for AC/DC switching, =0xff means invalid 13204e390cabSriastradh uint8_t ac_dc_polarity; // GPIO polarity for AC/DC switching 13214e390cabSriastradh uint8_t vr0hot_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for VR0 HOT event, =0xff means invalid 13224e390cabSriastradh uint8_t vr0hot_polarity; // GPIO polarity for VR0 HOT event 13234e390cabSriastradh uint8_t vr1hot_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for VR1 HOT event , =0xff means invalid 13244e390cabSriastradh uint8_t vr1hot_polarity; // GPIO polarity for VR1 HOT event 13254e390cabSriastradh uint8_t fw_ctf_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for CTF, =0xff means invalid 13264e390cabSriastradh uint8_t fw_ctf_polarity; // GPIO polarity for CTF 13274e390cabSriastradh }; 13284e390cabSriastradh 13294e390cabSriastradh struct atom_smu_info_v3_2 { 13304e390cabSriastradh struct atom_common_table_header table_header; 13314e390cabSriastradh uint8_t smuip_min_ver; 13324e390cabSriastradh uint8_t smuip_max_ver; 13334e390cabSriastradh uint8_t smu_rsd1; 13344e390cabSriastradh uint8_t gpuclk_ss_mode; 13354e390cabSriastradh uint16_t sclk_ss_percentage; 13364e390cabSriastradh uint16_t sclk_ss_rate_10hz; 13374e390cabSriastradh uint16_t gpuclk_ss_percentage; // in unit of 0.001% 13384e390cabSriastradh uint16_t gpuclk_ss_rate_10hz; 13394e390cabSriastradh uint32_t core_refclk_10khz; 13404e390cabSriastradh uint8_t ac_dc_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for AC/DC switching, =0xff means invalid 13414e390cabSriastradh uint8_t ac_dc_polarity; // GPIO polarity for AC/DC switching 13424e390cabSriastradh uint8_t vr0hot_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for VR0 HOT event, =0xff means invalid 13434e390cabSriastradh uint8_t vr0hot_polarity; // GPIO polarity for VR0 HOT event 13444e390cabSriastradh uint8_t vr1hot_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for VR1 HOT event , =0xff means invalid 13454e390cabSriastradh uint8_t vr1hot_polarity; // GPIO polarity for VR1 HOT event 13464e390cabSriastradh uint8_t fw_ctf_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for CTF, =0xff means invalid 13474e390cabSriastradh uint8_t fw_ctf_polarity; // GPIO polarity for CTF 13484e390cabSriastradh uint8_t pcc_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for PCC, =0xff means invalid 13494e390cabSriastradh uint8_t pcc_gpio_polarity; // GPIO polarity for CTF 13504e390cabSriastradh uint16_t smugoldenoffset; 13514e390cabSriastradh uint32_t gpupll_vco_freq_10khz; 13524e390cabSriastradh uint32_t bootup_smnclk_10khz; 13534e390cabSriastradh uint32_t bootup_socclk_10khz; 13544e390cabSriastradh uint32_t bootup_mp0clk_10khz; 13554e390cabSriastradh uint32_t bootup_mp1clk_10khz; 13564e390cabSriastradh uint32_t bootup_lclk_10khz; 13574e390cabSriastradh uint32_t bootup_dcefclk_10khz; 13584e390cabSriastradh uint32_t ctf_threshold_override_value; 13594e390cabSriastradh uint32_t reserved[5]; 13604e390cabSriastradh }; 13614e390cabSriastradh 13624e390cabSriastradh struct atom_smu_info_v3_3 { 13634e390cabSriastradh struct atom_common_table_header table_header; 13644e390cabSriastradh uint8_t smuip_min_ver; 13654e390cabSriastradh uint8_t smuip_max_ver; 13664e390cabSriastradh uint8_t waflclk_ss_mode; 13674e390cabSriastradh uint8_t gpuclk_ss_mode; 13684e390cabSriastradh uint16_t sclk_ss_percentage; 13694e390cabSriastradh uint16_t sclk_ss_rate_10hz; 13704e390cabSriastradh uint16_t gpuclk_ss_percentage; // in unit of 0.001% 13714e390cabSriastradh uint16_t gpuclk_ss_rate_10hz; 13724e390cabSriastradh uint32_t core_refclk_10khz; 13734e390cabSriastradh uint8_t ac_dc_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for AC/DC switching, =0xff means invalid 13744e390cabSriastradh uint8_t ac_dc_polarity; // GPIO polarity for AC/DC switching 13754e390cabSriastradh uint8_t vr0hot_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for VR0 HOT event, =0xff means invalid 13764e390cabSriastradh uint8_t vr0hot_polarity; // GPIO polarity for VR0 HOT event 13774e390cabSriastradh uint8_t vr1hot_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for VR1 HOT event , =0xff means invalid 13784e390cabSriastradh uint8_t vr1hot_polarity; // GPIO polarity for VR1 HOT event 13794e390cabSriastradh uint8_t fw_ctf_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for CTF, =0xff means invalid 13804e390cabSriastradh uint8_t fw_ctf_polarity; // GPIO polarity for CTF 13814e390cabSriastradh uint8_t pcc_gpio_bit; // GPIO bit shift in SMU_GPIOPAD_A configured for PCC, =0xff means invalid 13824e390cabSriastradh uint8_t pcc_gpio_polarity; // GPIO polarity for CTF 13834e390cabSriastradh uint16_t smugoldenoffset; 13844e390cabSriastradh uint32_t gpupll_vco_freq_10khz; 13854e390cabSriastradh uint32_t bootup_smnclk_10khz; 13864e390cabSriastradh uint32_t bootup_socclk_10khz; 13874e390cabSriastradh uint32_t bootup_mp0clk_10khz; 13884e390cabSriastradh uint32_t bootup_mp1clk_10khz; 13894e390cabSriastradh uint32_t bootup_lclk_10khz; 13904e390cabSriastradh uint32_t bootup_dcefclk_10khz; 13914e390cabSriastradh uint32_t ctf_threshold_override_value; 13924e390cabSriastradh uint32_t syspll3_0_vco_freq_10khz; 13934e390cabSriastradh uint32_t syspll3_1_vco_freq_10khz; 13944e390cabSriastradh uint32_t bootup_fclk_10khz; 13954e390cabSriastradh uint32_t bootup_waflclk_10khz; 13964e390cabSriastradh uint32_t smu_info_caps; 13974e390cabSriastradh uint16_t waflclk_ss_percentage; // in unit of 0.001% 13984e390cabSriastradh uint16_t smuinitoffset; 13994e390cabSriastradh uint32_t reserved; 14004e390cabSriastradh }; 14014e390cabSriastradh 14024e390cabSriastradh /* 14034e390cabSriastradh *************************************************************************** 14044e390cabSriastradh Data Table smc_dpm_info structure 14054e390cabSriastradh *************************************************************************** 14064e390cabSriastradh */ 14074e390cabSriastradh struct atom_smc_dpm_info_v4_1 14084e390cabSriastradh { 14094e390cabSriastradh struct atom_common_table_header table_header; 14104e390cabSriastradh uint8_t liquid1_i2c_address; 14114e390cabSriastradh uint8_t liquid2_i2c_address; 14124e390cabSriastradh uint8_t vr_i2c_address; 14134e390cabSriastradh uint8_t plx_i2c_address; 14144e390cabSriastradh 14154e390cabSriastradh uint8_t liquid_i2c_linescl; 14164e390cabSriastradh uint8_t liquid_i2c_linesda; 14174e390cabSriastradh uint8_t vr_i2c_linescl; 14184e390cabSriastradh uint8_t vr_i2c_linesda; 14194e390cabSriastradh 14204e390cabSriastradh uint8_t plx_i2c_linescl; 14214e390cabSriastradh uint8_t plx_i2c_linesda; 14224e390cabSriastradh uint8_t vrsensorpresent; 14234e390cabSriastradh uint8_t liquidsensorpresent; 14244e390cabSriastradh 14254e390cabSriastradh uint16_t maxvoltagestepgfx; 14264e390cabSriastradh uint16_t maxvoltagestepsoc; 14274e390cabSriastradh 14284e390cabSriastradh uint8_t vddgfxvrmapping; 14294e390cabSriastradh uint8_t vddsocvrmapping; 14304e390cabSriastradh uint8_t vddmem0vrmapping; 14314e390cabSriastradh uint8_t vddmem1vrmapping; 14324e390cabSriastradh 14334e390cabSriastradh uint8_t gfxulvphasesheddingmask; 14344e390cabSriastradh uint8_t soculvphasesheddingmask; 14354e390cabSriastradh uint8_t padding8_v[2]; 14364e390cabSriastradh 14374e390cabSriastradh uint16_t gfxmaxcurrent; 14384e390cabSriastradh uint8_t gfxoffset; 14394e390cabSriastradh uint8_t padding_telemetrygfx; 14404e390cabSriastradh 14414e390cabSriastradh uint16_t socmaxcurrent; 14424e390cabSriastradh uint8_t socoffset; 14434e390cabSriastradh uint8_t padding_telemetrysoc; 14444e390cabSriastradh 14454e390cabSriastradh uint16_t mem0maxcurrent; 14464e390cabSriastradh uint8_t mem0offset; 14474e390cabSriastradh uint8_t padding_telemetrymem0; 14484e390cabSriastradh 14494e390cabSriastradh uint16_t mem1maxcurrent; 14504e390cabSriastradh uint8_t mem1offset; 14514e390cabSriastradh uint8_t padding_telemetrymem1; 14524e390cabSriastradh 14534e390cabSriastradh uint8_t acdcgpio; 14544e390cabSriastradh uint8_t acdcpolarity; 14554e390cabSriastradh uint8_t vr0hotgpio; 14564e390cabSriastradh uint8_t vr0hotpolarity; 14574e390cabSriastradh 14584e390cabSriastradh uint8_t vr1hotgpio; 14594e390cabSriastradh uint8_t vr1hotpolarity; 14604e390cabSriastradh uint8_t padding1; 14614e390cabSriastradh uint8_t padding2; 14624e390cabSriastradh 14634e390cabSriastradh uint8_t ledpin0; 14644e390cabSriastradh uint8_t ledpin1; 14654e390cabSriastradh uint8_t ledpin2; 14664e390cabSriastradh uint8_t padding8_4; 14674e390cabSriastradh 14684e390cabSriastradh uint8_t pllgfxclkspreadenabled; 14694e390cabSriastradh uint8_t pllgfxclkspreadpercent; 14704e390cabSriastradh uint16_t pllgfxclkspreadfreq; 14714e390cabSriastradh 14724e390cabSriastradh uint8_t uclkspreadenabled; 14734e390cabSriastradh uint8_t uclkspreadpercent; 14744e390cabSriastradh uint16_t uclkspreadfreq; 14754e390cabSriastradh 14764e390cabSriastradh uint8_t socclkspreadenabled; 14774e390cabSriastradh uint8_t socclkspreadpercent; 14784e390cabSriastradh uint16_t socclkspreadfreq; 14794e390cabSriastradh 14804e390cabSriastradh uint8_t acggfxclkspreadenabled; 14814e390cabSriastradh uint8_t acggfxclkspreadpercent; 14824e390cabSriastradh uint16_t acggfxclkspreadfreq; 14834e390cabSriastradh 14844e390cabSriastradh uint8_t Vr2_I2C_address; 14854e390cabSriastradh uint8_t padding_vr2[3]; 14864e390cabSriastradh 14874e390cabSriastradh uint32_t boardreserved[9]; 14884e390cabSriastradh }; 14894e390cabSriastradh 14904e390cabSriastradh /* 14914e390cabSriastradh *************************************************************************** 14924e390cabSriastradh Data Table smc_dpm_info structure 14934e390cabSriastradh *************************************************************************** 14944e390cabSriastradh */ 14954e390cabSriastradh struct atom_smc_dpm_info_v4_3 14964e390cabSriastradh { 14974e390cabSriastradh struct atom_common_table_header table_header; 14984e390cabSriastradh uint8_t liquid1_i2c_address; 14994e390cabSriastradh uint8_t liquid2_i2c_address; 15004e390cabSriastradh uint8_t vr_i2c_address; 15014e390cabSriastradh uint8_t plx_i2c_address; 15024e390cabSriastradh 15034e390cabSriastradh uint8_t liquid_i2c_linescl; 15044e390cabSriastradh uint8_t liquid_i2c_linesda; 15054e390cabSriastradh uint8_t vr_i2c_linescl; 15064e390cabSriastradh uint8_t vr_i2c_linesda; 15074e390cabSriastradh 15084e390cabSriastradh uint8_t plx_i2c_linescl; 15094e390cabSriastradh uint8_t plx_i2c_linesda; 15104e390cabSriastradh uint8_t vrsensorpresent; 15114e390cabSriastradh uint8_t liquidsensorpresent; 15124e390cabSriastradh 15134e390cabSriastradh uint16_t maxvoltagestepgfx; 15144e390cabSriastradh uint16_t maxvoltagestepsoc; 15154e390cabSriastradh 15164e390cabSriastradh uint8_t vddgfxvrmapping; 15174e390cabSriastradh uint8_t vddsocvrmapping; 15184e390cabSriastradh uint8_t vddmem0vrmapping; 15194e390cabSriastradh uint8_t vddmem1vrmapping; 15204e390cabSriastradh 15214e390cabSriastradh uint8_t gfxulvphasesheddingmask; 15224e390cabSriastradh uint8_t soculvphasesheddingmask; 15234e390cabSriastradh uint8_t externalsensorpresent; 15244e390cabSriastradh uint8_t padding8_v; 15254e390cabSriastradh 15264e390cabSriastradh uint16_t gfxmaxcurrent; 15274e390cabSriastradh uint8_t gfxoffset; 15284e390cabSriastradh uint8_t padding_telemetrygfx; 15294e390cabSriastradh 15304e390cabSriastradh uint16_t socmaxcurrent; 15314e390cabSriastradh uint8_t socoffset; 15324e390cabSriastradh uint8_t padding_telemetrysoc; 15334e390cabSriastradh 15344e390cabSriastradh uint16_t mem0maxcurrent; 15354e390cabSriastradh uint8_t mem0offset; 15364e390cabSriastradh uint8_t padding_telemetrymem0; 15374e390cabSriastradh 15384e390cabSriastradh uint16_t mem1maxcurrent; 15394e390cabSriastradh uint8_t mem1offset; 15404e390cabSriastradh uint8_t padding_telemetrymem1; 15414e390cabSriastradh 15424e390cabSriastradh uint8_t acdcgpio; 15434e390cabSriastradh uint8_t acdcpolarity; 15444e390cabSriastradh uint8_t vr0hotgpio; 15454e390cabSriastradh uint8_t vr0hotpolarity; 15464e390cabSriastradh 15474e390cabSriastradh uint8_t vr1hotgpio; 15484e390cabSriastradh uint8_t vr1hotpolarity; 15494e390cabSriastradh uint8_t padding1; 15504e390cabSriastradh uint8_t padding2; 15514e390cabSriastradh 15524e390cabSriastradh uint8_t ledpin0; 15534e390cabSriastradh uint8_t ledpin1; 15544e390cabSriastradh uint8_t ledpin2; 15554e390cabSriastradh uint8_t padding8_4; 15564e390cabSriastradh 15574e390cabSriastradh uint8_t pllgfxclkspreadenabled; 15584e390cabSriastradh uint8_t pllgfxclkspreadpercent; 15594e390cabSriastradh uint16_t pllgfxclkspreadfreq; 15604e390cabSriastradh 15614e390cabSriastradh uint8_t uclkspreadenabled; 15624e390cabSriastradh uint8_t uclkspreadpercent; 15634e390cabSriastradh uint16_t uclkspreadfreq; 15644e390cabSriastradh 15654e390cabSriastradh uint8_t fclkspreadenabled; 15664e390cabSriastradh uint8_t fclkspreadpercent; 15674e390cabSriastradh uint16_t fclkspreadfreq; 15684e390cabSriastradh 15694e390cabSriastradh uint8_t fllgfxclkspreadenabled; 15704e390cabSriastradh uint8_t fllgfxclkspreadpercent; 15714e390cabSriastradh uint16_t fllgfxclkspreadfreq; 15724e390cabSriastradh 15734e390cabSriastradh uint32_t boardreserved[10]; 15744e390cabSriastradh }; 15754e390cabSriastradh 15764e390cabSriastradh struct smudpm_i2ccontrollerconfig_t { 15774e390cabSriastradh uint32_t enabled; 15784e390cabSriastradh uint32_t slaveaddress; 15794e390cabSriastradh uint32_t controllerport; 15804e390cabSriastradh uint32_t controllername; 15814e390cabSriastradh uint32_t thermalthrottler; 15824e390cabSriastradh uint32_t i2cprotocol; 15834e390cabSriastradh uint32_t i2cspeed; 15844e390cabSriastradh }; 15854e390cabSriastradh 15864e390cabSriastradh struct atom_smc_dpm_info_v4_4 15874e390cabSriastradh { 15884e390cabSriastradh struct atom_common_table_header table_header; 15894e390cabSriastradh uint32_t i2c_padding[3]; 15904e390cabSriastradh 15914e390cabSriastradh uint16_t maxvoltagestepgfx; 15924e390cabSriastradh uint16_t maxvoltagestepsoc; 15934e390cabSriastradh 15944e390cabSriastradh uint8_t vddgfxvrmapping; 15954e390cabSriastradh uint8_t vddsocvrmapping; 15964e390cabSriastradh uint8_t vddmem0vrmapping; 15974e390cabSriastradh uint8_t vddmem1vrmapping; 15984e390cabSriastradh 15994e390cabSriastradh uint8_t gfxulvphasesheddingmask; 16004e390cabSriastradh uint8_t soculvphasesheddingmask; 16014e390cabSriastradh uint8_t externalsensorpresent; 16024e390cabSriastradh uint8_t padding8_v; 16034e390cabSriastradh 16044e390cabSriastradh uint16_t gfxmaxcurrent; 16054e390cabSriastradh uint8_t gfxoffset; 16064e390cabSriastradh uint8_t padding_telemetrygfx; 16074e390cabSriastradh 16084e390cabSriastradh uint16_t socmaxcurrent; 16094e390cabSriastradh uint8_t socoffset; 16104e390cabSriastradh uint8_t padding_telemetrysoc; 16114e390cabSriastradh 16124e390cabSriastradh uint16_t mem0maxcurrent; 16134e390cabSriastradh uint8_t mem0offset; 16144e390cabSriastradh uint8_t padding_telemetrymem0; 16154e390cabSriastradh 16164e390cabSriastradh uint16_t mem1maxcurrent; 16174e390cabSriastradh uint8_t mem1offset; 16184e390cabSriastradh uint8_t padding_telemetrymem1; 16194e390cabSriastradh 16204e390cabSriastradh 16214e390cabSriastradh uint8_t acdcgpio; 16224e390cabSriastradh uint8_t acdcpolarity; 16234e390cabSriastradh uint8_t vr0hotgpio; 16244e390cabSriastradh uint8_t vr0hotpolarity; 16254e390cabSriastradh 16264e390cabSriastradh uint8_t vr1hotgpio; 16274e390cabSriastradh uint8_t vr1hotpolarity; 16284e390cabSriastradh uint8_t padding1; 16294e390cabSriastradh uint8_t padding2; 16304e390cabSriastradh 16314e390cabSriastradh 16324e390cabSriastradh uint8_t ledpin0; 16334e390cabSriastradh uint8_t ledpin1; 16344e390cabSriastradh uint8_t ledpin2; 16354e390cabSriastradh uint8_t padding8_4; 16364e390cabSriastradh 16374e390cabSriastradh 16384e390cabSriastradh uint8_t pllgfxclkspreadenabled; 16394e390cabSriastradh uint8_t pllgfxclkspreadpercent; 16404e390cabSriastradh uint16_t pllgfxclkspreadfreq; 16414e390cabSriastradh 16424e390cabSriastradh 16434e390cabSriastradh uint8_t uclkspreadenabled; 16444e390cabSriastradh uint8_t uclkspreadpercent; 16454e390cabSriastradh uint16_t uclkspreadfreq; 16464e390cabSriastradh 16474e390cabSriastradh 16484e390cabSriastradh uint8_t fclkspreadenabled; 16494e390cabSriastradh uint8_t fclkspreadpercent; 16504e390cabSriastradh uint16_t fclkspreadfreq; 16514e390cabSriastradh 16524e390cabSriastradh 16534e390cabSriastradh uint8_t fllgfxclkspreadenabled; 16544e390cabSriastradh uint8_t fllgfxclkspreadpercent; 16554e390cabSriastradh uint16_t fllgfxclkspreadfreq; 16564e390cabSriastradh 16574e390cabSriastradh 16584e390cabSriastradh struct smudpm_i2ccontrollerconfig_t i2ccontrollers[7]; 16594e390cabSriastradh 16604e390cabSriastradh 16614e390cabSriastradh uint32_t boardreserved[10]; 16624e390cabSriastradh }; 16634e390cabSriastradh 16644e390cabSriastradh enum smudpm_v4_5_i2ccontrollername_e{ 16654e390cabSriastradh SMC_V4_5_I2C_CONTROLLER_NAME_VR_GFX = 0, 16664e390cabSriastradh SMC_V4_5_I2C_CONTROLLER_NAME_VR_SOC, 16674e390cabSriastradh SMC_V4_5_I2C_CONTROLLER_NAME_VR_VDDCI, 16684e390cabSriastradh SMC_V4_5_I2C_CONTROLLER_NAME_VR_MVDD, 16694e390cabSriastradh SMC_V4_5_I2C_CONTROLLER_NAME_LIQUID0, 16704e390cabSriastradh SMC_V4_5_I2C_CONTROLLER_NAME_LIQUID1, 16714e390cabSriastradh SMC_V4_5_I2C_CONTROLLER_NAME_PLX, 16724e390cabSriastradh SMC_V4_5_I2C_CONTROLLER_NAME_SPARE, 16734e390cabSriastradh SMC_V4_5_I2C_CONTROLLER_NAME_COUNT, 16744e390cabSriastradh }; 16754e390cabSriastradh 16764e390cabSriastradh enum smudpm_v4_5_i2ccontrollerthrottler_e{ 16774e390cabSriastradh SMC_V4_5_I2C_CONTROLLER_THROTTLER_TYPE_NONE = 0, 16784e390cabSriastradh SMC_V4_5_I2C_CONTROLLER_THROTTLER_VR_GFX, 16794e390cabSriastradh SMC_V4_5_I2C_CONTROLLER_THROTTLER_VR_SOC, 16804e390cabSriastradh SMC_V4_5_I2C_CONTROLLER_THROTTLER_VR_VDDCI, 16814e390cabSriastradh SMC_V4_5_I2C_CONTROLLER_THROTTLER_VR_MVDD, 16824e390cabSriastradh SMC_V4_5_I2C_CONTROLLER_THROTTLER_LIQUID0, 16834e390cabSriastradh SMC_V4_5_I2C_CONTROLLER_THROTTLER_LIQUID1, 16844e390cabSriastradh SMC_V4_5_I2C_CONTROLLER_THROTTLER_PLX, 16854e390cabSriastradh SMC_V4_5_I2C_CONTROLLER_THROTTLER_COUNT, 16864e390cabSriastradh }; 16874e390cabSriastradh 16884e390cabSriastradh enum smudpm_v4_5_i2ccontrollerprotocol_e{ 16894e390cabSriastradh SMC_V4_5_I2C_CONTROLLER_PROTOCOL_VR_0, 16904e390cabSriastradh SMC_V4_5_I2C_CONTROLLER_PROTOCOL_VR_1, 16914e390cabSriastradh SMC_V4_5_I2C_CONTROLLER_PROTOCOL_TMP_0, 16924e390cabSriastradh SMC_V4_5_I2C_CONTROLLER_PROTOCOL_TMP_1, 16934e390cabSriastradh SMC_V4_5_I2C_CONTROLLER_PROTOCOL_SPARE_0, 16944e390cabSriastradh SMC_V4_5_I2C_CONTROLLER_PROTOCOL_SPARE_1, 16954e390cabSriastradh SMC_V4_5_I2C_CONTROLLER_PROTOCOL_COUNT, 16964e390cabSriastradh }; 16974e390cabSriastradh 16984e390cabSriastradh struct smudpm_i2c_controller_config_v2 16994e390cabSriastradh { 17004e390cabSriastradh uint8_t Enabled; 17014e390cabSriastradh uint8_t Speed; 17024e390cabSriastradh uint8_t Padding[2]; 17034e390cabSriastradh uint32_t SlaveAddress; 17044e390cabSriastradh uint8_t ControllerPort; 17054e390cabSriastradh uint8_t ControllerName; 17064e390cabSriastradh uint8_t ThermalThrotter; 17074e390cabSriastradh uint8_t I2cProtocol; 17084e390cabSriastradh }; 17094e390cabSriastradh 17104e390cabSriastradh struct atom_smc_dpm_info_v4_5 17114e390cabSriastradh { 17124e390cabSriastradh struct atom_common_table_header table_header; 17134e390cabSriastradh // SECTION: BOARD PARAMETERS 17144e390cabSriastradh // I2C Control 17154e390cabSriastradh struct smudpm_i2c_controller_config_v2 I2cControllers[8]; 17164e390cabSriastradh 17174e390cabSriastradh // SVI2 Board Parameters 17184e390cabSriastradh uint16_t MaxVoltageStepGfx; // In mV(Q2) Max voltage step that SMU will request. Multiple steps are taken if voltage change exceeds this value. 17194e390cabSriastradh uint16_t MaxVoltageStepSoc; // In mV(Q2) Max voltage step that SMU will request. Multiple steps are taken if voltage change exceeds this value. 17204e390cabSriastradh 17214e390cabSriastradh uint8_t VddGfxVrMapping; // Use VR_MAPPING* bitfields 17224e390cabSriastradh uint8_t VddSocVrMapping; // Use VR_MAPPING* bitfields 17234e390cabSriastradh uint8_t VddMem0VrMapping; // Use VR_MAPPING* bitfields 17244e390cabSriastradh uint8_t VddMem1VrMapping; // Use VR_MAPPING* bitfields 17254e390cabSriastradh 17264e390cabSriastradh uint8_t GfxUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode 17274e390cabSriastradh uint8_t SocUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode 17284e390cabSriastradh uint8_t ExternalSensorPresent; // External RDI connected to TMON (aka TEMP IN) 17294e390cabSriastradh uint8_t Padding8_V; 17304e390cabSriastradh 17314e390cabSriastradh // Telemetry Settings 17324e390cabSriastradh uint16_t GfxMaxCurrent; // in Amps 17334e390cabSriastradh uint8_t GfxOffset; // in Amps 17344e390cabSriastradh uint8_t Padding_TelemetryGfx; 17354e390cabSriastradh uint16_t SocMaxCurrent; // in Amps 17364e390cabSriastradh uint8_t SocOffset; // in Amps 17374e390cabSriastradh uint8_t Padding_TelemetrySoc; 17384e390cabSriastradh 17394e390cabSriastradh uint16_t Mem0MaxCurrent; // in Amps 17404e390cabSriastradh uint8_t Mem0Offset; // in Amps 17414e390cabSriastradh uint8_t Padding_TelemetryMem0; 17424e390cabSriastradh 17434e390cabSriastradh uint16_t Mem1MaxCurrent; // in Amps 17444e390cabSriastradh uint8_t Mem1Offset; // in Amps 17454e390cabSriastradh uint8_t Padding_TelemetryMem1; 17464e390cabSriastradh 17474e390cabSriastradh // GPIO Settings 17484e390cabSriastradh uint8_t AcDcGpio; // GPIO pin configured for AC/DC switching 17494e390cabSriastradh uint8_t AcDcPolarity; // GPIO polarity for AC/DC switching 17504e390cabSriastradh uint8_t VR0HotGpio; // GPIO pin configured for VR0 HOT event 17514e390cabSriastradh uint8_t VR0HotPolarity; // GPIO polarity for VR0 HOT event 17524e390cabSriastradh 17534e390cabSriastradh uint8_t VR1HotGpio; // GPIO pin configured for VR1 HOT event 17544e390cabSriastradh uint8_t VR1HotPolarity; // GPIO polarity for VR1 HOT event 17554e390cabSriastradh uint8_t GthrGpio; // GPIO pin configured for GTHR Event 17564e390cabSriastradh uint8_t GthrPolarity; // replace GPIO polarity for GTHR 17574e390cabSriastradh 17584e390cabSriastradh // LED Display Settings 17594e390cabSriastradh uint8_t LedPin0; // GPIO number for LedPin[0] 17604e390cabSriastradh uint8_t LedPin1; // GPIO number for LedPin[1] 17614e390cabSriastradh uint8_t LedPin2; // GPIO number for LedPin[2] 17624e390cabSriastradh uint8_t padding8_4; 17634e390cabSriastradh 17644e390cabSriastradh // GFXCLK PLL Spread Spectrum 17654e390cabSriastradh uint8_t PllGfxclkSpreadEnabled; // on or off 17664e390cabSriastradh uint8_t PllGfxclkSpreadPercent; // Q4.4 17674e390cabSriastradh uint16_t PllGfxclkSpreadFreq; // kHz 17684e390cabSriastradh 17694e390cabSriastradh // GFXCLK DFLL Spread Spectrum 17704e390cabSriastradh uint8_t DfllGfxclkSpreadEnabled; // on or off 17714e390cabSriastradh uint8_t DfllGfxclkSpreadPercent; // Q4.4 17724e390cabSriastradh uint16_t DfllGfxclkSpreadFreq; // kHz 17734e390cabSriastradh 17744e390cabSriastradh // UCLK Spread Spectrum 17754e390cabSriastradh uint8_t UclkSpreadEnabled; // on or off 17764e390cabSriastradh uint8_t UclkSpreadPercent; // Q4.4 17774e390cabSriastradh uint16_t UclkSpreadFreq; // kHz 17784e390cabSriastradh 17794e390cabSriastradh // SOCCLK Spread Spectrum 17804e390cabSriastradh uint8_t SoclkSpreadEnabled; // on or off 17814e390cabSriastradh uint8_t SocclkSpreadPercent; // Q4.4 17824e390cabSriastradh uint16_t SocclkSpreadFreq; // kHz 17834e390cabSriastradh 17844e390cabSriastradh // Total board power 17854e390cabSriastradh uint16_t TotalBoardPower; //Only needed for TCP Estimated case, where TCP = TGP+Total Board Power 17864e390cabSriastradh uint16_t BoardPadding; 17874e390cabSriastradh 17884e390cabSriastradh // Mvdd Svi2 Div Ratio Setting 17894e390cabSriastradh uint32_t MvddRatio; // This is used for MVDD Vid workaround. It has 16 fractional bits (Q16.16) 17904e390cabSriastradh 17914e390cabSriastradh uint32_t BoardReserved[9]; 17924e390cabSriastradh 17934e390cabSriastradh }; 17944e390cabSriastradh 17954e390cabSriastradh struct atom_smc_dpm_info_v4_6 17964e390cabSriastradh { 17974e390cabSriastradh struct atom_common_table_header table_header; 17984e390cabSriastradh // section: board parameters 17994e390cabSriastradh uint32_t i2c_padding[3]; // old i2c control are moved to new area 18004e390cabSriastradh 18014e390cabSriastradh uint16_t maxvoltagestepgfx; // in mv(q2) max voltage step that smu will request. multiple steps are taken if voltage change exceeds this value. 18024e390cabSriastradh uint16_t maxvoltagestepsoc; // in mv(q2) max voltage step that smu will request. multiple steps are taken if voltage change exceeds this value. 18034e390cabSriastradh 18044e390cabSriastradh uint8_t vddgfxvrmapping; // use vr_mapping* bitfields 18054e390cabSriastradh uint8_t vddsocvrmapping; // use vr_mapping* bitfields 18064e390cabSriastradh uint8_t vddmemvrmapping; // use vr_mapping* bitfields 18074e390cabSriastradh uint8_t boardvrmapping; // use vr_mapping* bitfields 18084e390cabSriastradh 18094e390cabSriastradh uint8_t gfxulvphasesheddingmask; // set this to 1 to set psi0/1 to 1 in ulv mode 18104e390cabSriastradh uint8_t externalsensorpresent; // external rdi connected to tmon (aka temp in) 18114e390cabSriastradh uint8_t padding8_v[2]; 18124e390cabSriastradh 18134e390cabSriastradh // telemetry settings 18144e390cabSriastradh uint16_t gfxmaxcurrent; // in amps 18154e390cabSriastradh uint8_t gfxoffset; // in amps 18164e390cabSriastradh uint8_t padding_telemetrygfx; 18174e390cabSriastradh 18184e390cabSriastradh uint16_t socmaxcurrent; // in amps 18194e390cabSriastradh uint8_t socoffset; // in amps 18204e390cabSriastradh uint8_t padding_telemetrysoc; 18214e390cabSriastradh 18224e390cabSriastradh uint16_t memmaxcurrent; // in amps 18234e390cabSriastradh uint8_t memoffset; // in amps 18244e390cabSriastradh uint8_t padding_telemetrymem; 18254e390cabSriastradh 18264e390cabSriastradh uint16_t boardmaxcurrent; // in amps 18274e390cabSriastradh uint8_t boardoffset; // in amps 18284e390cabSriastradh uint8_t padding_telemetryboardinput; 18294e390cabSriastradh 18304e390cabSriastradh // gpio settings 18314e390cabSriastradh uint8_t vr0hotgpio; // gpio pin configured for vr0 hot event 18324e390cabSriastradh uint8_t vr0hotpolarity; // gpio polarity for vr0 hot event 18334e390cabSriastradh uint8_t vr1hotgpio; // gpio pin configured for vr1 hot event 18344e390cabSriastradh uint8_t vr1hotpolarity; // gpio polarity for vr1 hot event 18354e390cabSriastradh 18364e390cabSriastradh // gfxclk pll spread spectrum 18374e390cabSriastradh uint8_t pllgfxclkspreadenabled; // on or off 18384e390cabSriastradh uint8_t pllgfxclkspreadpercent; // q4.4 18394e390cabSriastradh uint16_t pllgfxclkspreadfreq; // khz 18404e390cabSriastradh 18414e390cabSriastradh // uclk spread spectrum 18424e390cabSriastradh uint8_t uclkspreadenabled; // on or off 18434e390cabSriastradh uint8_t uclkspreadpercent; // q4.4 18444e390cabSriastradh uint16_t uclkspreadfreq; // khz 18454e390cabSriastradh 18464e390cabSriastradh // fclk spread spectrum 18474e390cabSriastradh uint8_t fclkspreadenabled; // on or off 18484e390cabSriastradh uint8_t fclkspreadpercent; // q4.4 18494e390cabSriastradh uint16_t fclkspreadfreq; // khz 18504e390cabSriastradh 18514e390cabSriastradh 18524e390cabSriastradh // gfxclk fll spread spectrum 18534e390cabSriastradh uint8_t fllgfxclkspreadenabled; // on or off 18544e390cabSriastradh uint8_t fllgfxclkspreadpercent; // q4.4 18554e390cabSriastradh uint16_t fllgfxclkspreadfreq; // khz 18564e390cabSriastradh 18574e390cabSriastradh // i2c controller structure 18584e390cabSriastradh struct smudpm_i2c_controller_config_v2 i2ccontrollers[8]; 18594e390cabSriastradh 18604e390cabSriastradh // memory section 18614e390cabSriastradh uint32_t memorychannelenabled; // for dram use only, max 32 channels enabled bit mask. 18624e390cabSriastradh 18634e390cabSriastradh uint8_t drambitwidth; // for dram use only. see dram bit width type defines 18644e390cabSriastradh uint8_t paddingmem[3]; 18654e390cabSriastradh 18664e390cabSriastradh // total board power 18674e390cabSriastradh uint16_t totalboardpower; //only needed for tcp estimated case, where tcp = tgp+total board power 18684e390cabSriastradh uint16_t boardpadding; 18694e390cabSriastradh 18704e390cabSriastradh // section: xgmi training 18714e390cabSriastradh uint8_t xgmilinkspeed[4]; 18724e390cabSriastradh uint8_t xgmilinkwidth[4]; 18734e390cabSriastradh 18744e390cabSriastradh uint16_t xgmifclkfreq[4]; 18754e390cabSriastradh uint16_t xgmisocvoltage[4]; 18764e390cabSriastradh 18774e390cabSriastradh // reserved 18784e390cabSriastradh uint32_t boardreserved[10]; 18794e390cabSriastradh }; 18804e390cabSriastradh 18814e390cabSriastradh /* 18824e390cabSriastradh *************************************************************************** 18834e390cabSriastradh Data Table asic_profiling_info structure 18844e390cabSriastradh *************************************************************************** 18854e390cabSriastradh */ 18864e390cabSriastradh struct atom_asic_profiling_info_v4_1 18874e390cabSriastradh { 18884e390cabSriastradh struct atom_common_table_header table_header; 18894e390cabSriastradh uint32_t maxvddc; 18904e390cabSriastradh uint32_t minvddc; 18914e390cabSriastradh uint32_t avfs_meannsigma_acontant0; 18924e390cabSriastradh uint32_t avfs_meannsigma_acontant1; 18934e390cabSriastradh uint32_t avfs_meannsigma_acontant2; 18944e390cabSriastradh uint16_t avfs_meannsigma_dc_tol_sigma; 18954e390cabSriastradh uint16_t avfs_meannsigma_platform_mean; 18964e390cabSriastradh uint16_t avfs_meannsigma_platform_sigma; 18974e390cabSriastradh uint32_t gb_vdroop_table_cksoff_a0; 18984e390cabSriastradh uint32_t gb_vdroop_table_cksoff_a1; 18994e390cabSriastradh uint32_t gb_vdroop_table_cksoff_a2; 19004e390cabSriastradh uint32_t gb_vdroop_table_ckson_a0; 19014e390cabSriastradh uint32_t gb_vdroop_table_ckson_a1; 19024e390cabSriastradh uint32_t gb_vdroop_table_ckson_a2; 19034e390cabSriastradh uint32_t avfsgb_fuse_table_cksoff_m1; 19044e390cabSriastradh uint32_t avfsgb_fuse_table_cksoff_m2; 19054e390cabSriastradh uint32_t avfsgb_fuse_table_cksoff_b; 19064e390cabSriastradh uint32_t avfsgb_fuse_table_ckson_m1; 19074e390cabSriastradh uint32_t avfsgb_fuse_table_ckson_m2; 19084e390cabSriastradh uint32_t avfsgb_fuse_table_ckson_b; 19094e390cabSriastradh uint16_t max_voltage_0_25mv; 19104e390cabSriastradh uint8_t enable_gb_vdroop_table_cksoff; 19114e390cabSriastradh uint8_t enable_gb_vdroop_table_ckson; 19124e390cabSriastradh uint8_t enable_gb_fuse_table_cksoff; 19134e390cabSriastradh uint8_t enable_gb_fuse_table_ckson; 19144e390cabSriastradh uint16_t psm_age_comfactor; 19154e390cabSriastradh uint8_t enable_apply_avfs_cksoff_voltage; 19164e390cabSriastradh uint8_t reserved; 19174e390cabSriastradh uint32_t dispclk2gfxclk_a; 19184e390cabSriastradh uint32_t dispclk2gfxclk_b; 19194e390cabSriastradh uint32_t dispclk2gfxclk_c; 19204e390cabSriastradh uint32_t pixclk2gfxclk_a; 19214e390cabSriastradh uint32_t pixclk2gfxclk_b; 19224e390cabSriastradh uint32_t pixclk2gfxclk_c; 19234e390cabSriastradh uint32_t dcefclk2gfxclk_a; 19244e390cabSriastradh uint32_t dcefclk2gfxclk_b; 19254e390cabSriastradh uint32_t dcefclk2gfxclk_c; 19264e390cabSriastradh uint32_t phyclk2gfxclk_a; 19274e390cabSriastradh uint32_t phyclk2gfxclk_b; 19284e390cabSriastradh uint32_t phyclk2gfxclk_c; 19294e390cabSriastradh }; 19304e390cabSriastradh 19314e390cabSriastradh struct atom_asic_profiling_info_v4_2 { 19324e390cabSriastradh struct atom_common_table_header table_header; 19334e390cabSriastradh uint32_t maxvddc; 19344e390cabSriastradh uint32_t minvddc; 19354e390cabSriastradh uint32_t avfs_meannsigma_acontant0; 19364e390cabSriastradh uint32_t avfs_meannsigma_acontant1; 19374e390cabSriastradh uint32_t avfs_meannsigma_acontant2; 19384e390cabSriastradh uint16_t avfs_meannsigma_dc_tol_sigma; 19394e390cabSriastradh uint16_t avfs_meannsigma_platform_mean; 19404e390cabSriastradh uint16_t avfs_meannsigma_platform_sigma; 19414e390cabSriastradh uint32_t gb_vdroop_table_cksoff_a0; 19424e390cabSriastradh uint32_t gb_vdroop_table_cksoff_a1; 19434e390cabSriastradh uint32_t gb_vdroop_table_cksoff_a2; 19444e390cabSriastradh uint32_t gb_vdroop_table_ckson_a0; 19454e390cabSriastradh uint32_t gb_vdroop_table_ckson_a1; 19464e390cabSriastradh uint32_t gb_vdroop_table_ckson_a2; 19474e390cabSriastradh uint32_t avfsgb_fuse_table_cksoff_m1; 19484e390cabSriastradh uint32_t avfsgb_fuse_table_cksoff_m2; 19494e390cabSriastradh uint32_t avfsgb_fuse_table_cksoff_b; 19504e390cabSriastradh uint32_t avfsgb_fuse_table_ckson_m1; 19514e390cabSriastradh uint32_t avfsgb_fuse_table_ckson_m2; 19524e390cabSriastradh uint32_t avfsgb_fuse_table_ckson_b; 19534e390cabSriastradh uint16_t max_voltage_0_25mv; 19544e390cabSriastradh uint8_t enable_gb_vdroop_table_cksoff; 19554e390cabSriastradh uint8_t enable_gb_vdroop_table_ckson; 19564e390cabSriastradh uint8_t enable_gb_fuse_table_cksoff; 19574e390cabSriastradh uint8_t enable_gb_fuse_table_ckson; 19584e390cabSriastradh uint16_t psm_age_comfactor; 19594e390cabSriastradh uint8_t enable_apply_avfs_cksoff_voltage; 19604e390cabSriastradh uint8_t reserved; 19614e390cabSriastradh uint32_t dispclk2gfxclk_a; 19624e390cabSriastradh uint32_t dispclk2gfxclk_b; 19634e390cabSriastradh uint32_t dispclk2gfxclk_c; 19644e390cabSriastradh uint32_t pixclk2gfxclk_a; 19654e390cabSriastradh uint32_t pixclk2gfxclk_b; 19664e390cabSriastradh uint32_t pixclk2gfxclk_c; 19674e390cabSriastradh uint32_t dcefclk2gfxclk_a; 19684e390cabSriastradh uint32_t dcefclk2gfxclk_b; 19694e390cabSriastradh uint32_t dcefclk2gfxclk_c; 19704e390cabSriastradh uint32_t phyclk2gfxclk_a; 19714e390cabSriastradh uint32_t phyclk2gfxclk_b; 19724e390cabSriastradh uint32_t phyclk2gfxclk_c; 19734e390cabSriastradh uint32_t acg_gb_vdroop_table_a0; 19744e390cabSriastradh uint32_t acg_gb_vdroop_table_a1; 19754e390cabSriastradh uint32_t acg_gb_vdroop_table_a2; 19764e390cabSriastradh uint32_t acg_avfsgb_fuse_table_m1; 19774e390cabSriastradh uint32_t acg_avfsgb_fuse_table_m2; 19784e390cabSriastradh uint32_t acg_avfsgb_fuse_table_b; 19794e390cabSriastradh uint8_t enable_acg_gb_vdroop_table; 19804e390cabSriastradh uint8_t enable_acg_gb_fuse_table; 19814e390cabSriastradh uint32_t acg_dispclk2gfxclk_a; 19824e390cabSriastradh uint32_t acg_dispclk2gfxclk_b; 19834e390cabSriastradh uint32_t acg_dispclk2gfxclk_c; 19844e390cabSriastradh uint32_t acg_pixclk2gfxclk_a; 19854e390cabSriastradh uint32_t acg_pixclk2gfxclk_b; 19864e390cabSriastradh uint32_t acg_pixclk2gfxclk_c; 19874e390cabSriastradh uint32_t acg_dcefclk2gfxclk_a; 19884e390cabSriastradh uint32_t acg_dcefclk2gfxclk_b; 19894e390cabSriastradh uint32_t acg_dcefclk2gfxclk_c; 19904e390cabSriastradh uint32_t acg_phyclk2gfxclk_a; 19914e390cabSriastradh uint32_t acg_phyclk2gfxclk_b; 19924e390cabSriastradh uint32_t acg_phyclk2gfxclk_c; 19934e390cabSriastradh }; 19944e390cabSriastradh 19954e390cabSriastradh /* 19964e390cabSriastradh *************************************************************************** 19974e390cabSriastradh Data Table multimedia_info structure 19984e390cabSriastradh *************************************************************************** 19994e390cabSriastradh */ 20004e390cabSriastradh struct atom_multimedia_info_v2_1 20014e390cabSriastradh { 20024e390cabSriastradh struct atom_common_table_header table_header; 20034e390cabSriastradh uint8_t uvdip_min_ver; 20044e390cabSriastradh uint8_t uvdip_max_ver; 20054e390cabSriastradh uint8_t vceip_min_ver; 20064e390cabSriastradh uint8_t vceip_max_ver; 20074e390cabSriastradh uint16_t uvd_enc_max_input_width_pixels; 20084e390cabSriastradh uint16_t uvd_enc_max_input_height_pixels; 20094e390cabSriastradh uint16_t vce_enc_max_input_width_pixels; 20104e390cabSriastradh uint16_t vce_enc_max_input_height_pixels; 20114e390cabSriastradh uint32_t uvd_enc_max_bandwidth; // 16x16 pixels/sec, codec independent 20124e390cabSriastradh uint32_t vce_enc_max_bandwidth; // 16x16 pixels/sec, codec independent 20134e390cabSriastradh }; 20144e390cabSriastradh 20154e390cabSriastradh 20164e390cabSriastradh /* 20174e390cabSriastradh *************************************************************************** 20184e390cabSriastradh Data Table umc_info structure 20194e390cabSriastradh *************************************************************************** 20204e390cabSriastradh */ 20214e390cabSriastradh struct atom_umc_info_v3_1 20224e390cabSriastradh { 20234e390cabSriastradh struct atom_common_table_header table_header; 20244e390cabSriastradh uint32_t ucode_version; 20254e390cabSriastradh uint32_t ucode_rom_startaddr; 20264e390cabSriastradh uint32_t ucode_length; 20274e390cabSriastradh uint16_t umc_reg_init_offset; 20284e390cabSriastradh uint16_t customer_ucode_name_offset; 20294e390cabSriastradh uint16_t mclk_ss_percentage; 20304e390cabSriastradh uint16_t mclk_ss_rate_10hz; 20314e390cabSriastradh uint8_t umcip_min_ver; 20324e390cabSriastradh uint8_t umcip_max_ver; 20334e390cabSriastradh uint8_t vram_type; //enum of atom_dgpu_vram_type 20344e390cabSriastradh uint8_t umc_config; 20354e390cabSriastradh uint32_t mem_refclk_10khz; 20364e390cabSriastradh }; 20374e390cabSriastradh 20384e390cabSriastradh // umc_info.umc_config 20394e390cabSriastradh enum atom_umc_config_def { 20404e390cabSriastradh UMC_CONFIG__ENABLE_1KB_INTERLEAVE_MODE = 0x00000001, 20414e390cabSriastradh UMC_CONFIG__DEFAULT_MEM_ECC_ENABLE = 0x00000002, 20424e390cabSriastradh UMC_CONFIG__ENABLE_HBM_LANE_REPAIR = 0x00000004, 20434e390cabSriastradh UMC_CONFIG__ENABLE_BANK_HARVESTING = 0x00000008, 20444e390cabSriastradh UMC_CONFIG__ENABLE_PHY_REINIT = 0x00000010, 20454e390cabSriastradh UMC_CONFIG__DISABLE_UCODE_CHKSTATUS = 0x00000020, 20464e390cabSriastradh }; 20474e390cabSriastradh 20484e390cabSriastradh struct atom_umc_info_v3_2 20494e390cabSriastradh { 20504e390cabSriastradh struct atom_common_table_header table_header; 20514e390cabSriastradh uint32_t ucode_version; 20524e390cabSriastradh uint32_t ucode_rom_startaddr; 20534e390cabSriastradh uint32_t ucode_length; 20544e390cabSriastradh uint16_t umc_reg_init_offset; 20554e390cabSriastradh uint16_t customer_ucode_name_offset; 20564e390cabSriastradh uint16_t mclk_ss_percentage; 20574e390cabSriastradh uint16_t mclk_ss_rate_10hz; 20584e390cabSriastradh uint8_t umcip_min_ver; 20594e390cabSriastradh uint8_t umcip_max_ver; 20604e390cabSriastradh uint8_t vram_type; //enum of atom_dgpu_vram_type 20614e390cabSriastradh uint8_t umc_config; 20624e390cabSriastradh uint32_t mem_refclk_10khz; 20634e390cabSriastradh uint32_t pstate_uclk_10khz[4]; 20644e390cabSriastradh uint16_t umcgoldenoffset; 20654e390cabSriastradh uint16_t densitygoldenoffset; 20664e390cabSriastradh }; 20674e390cabSriastradh 20684e390cabSriastradh struct atom_umc_info_v3_3 20694e390cabSriastradh { 20704e390cabSriastradh struct atom_common_table_header table_header; 20714e390cabSriastradh uint32_t ucode_reserved; 20724e390cabSriastradh uint32_t ucode_rom_startaddr; 20734e390cabSriastradh uint32_t ucode_length; 20744e390cabSriastradh uint16_t umc_reg_init_offset; 20754e390cabSriastradh uint16_t customer_ucode_name_offset; 20764e390cabSriastradh uint16_t mclk_ss_percentage; 20774e390cabSriastradh uint16_t mclk_ss_rate_10hz; 20784e390cabSriastradh uint8_t umcip_min_ver; 20794e390cabSriastradh uint8_t umcip_max_ver; 20804e390cabSriastradh uint8_t vram_type; //enum of atom_dgpu_vram_type 20814e390cabSriastradh uint8_t umc_config; 20824e390cabSriastradh uint32_t mem_refclk_10khz; 20834e390cabSriastradh uint32_t pstate_uclk_10khz[4]; 20844e390cabSriastradh uint16_t umcgoldenoffset; 20854e390cabSriastradh uint16_t densitygoldenoffset; 20864e390cabSriastradh uint32_t reserved[4]; 20874e390cabSriastradh }; 20884e390cabSriastradh 20894e390cabSriastradh /* 20904e390cabSriastradh *************************************************************************** 20914e390cabSriastradh Data Table vram_info structure 20924e390cabSriastradh *************************************************************************** 20934e390cabSriastradh */ 20944e390cabSriastradh struct atom_vram_module_v9 { 20954e390cabSriastradh // Design Specific Values 20964e390cabSriastradh uint32_t memory_size; // Total memory size in unit of MB for CONFIG_MEMSIZE zeros 20974e390cabSriastradh uint32_t channel_enable; // bit vector, each bit indicate specific channel enable or not 20984e390cabSriastradh uint32_t max_mem_clk; // max memory clock of this memory in unit of 10kHz, =0 means it is not defined 20994e390cabSriastradh uint16_t reserved[3]; 21004e390cabSriastradh uint16_t mem_voltage; // mem_voltage 21014e390cabSriastradh uint16_t vram_module_size; // Size of atom_vram_module_v9 21024e390cabSriastradh uint8_t ext_memory_id; // Current memory module ID 21034e390cabSriastradh uint8_t memory_type; // enum of atom_dgpu_vram_type 21044e390cabSriastradh uint8_t channel_num; // Number of mem. channels supported in this module 21054e390cabSriastradh uint8_t channel_width; // CHANNEL_16BIT/CHANNEL_32BIT/CHANNEL_64BIT 21064e390cabSriastradh uint8_t density; // _8Mx32, _16Mx32, _16Mx16, _32Mx16 21074e390cabSriastradh uint8_t tunningset_id; // MC phy registers set per. 21084e390cabSriastradh uint8_t vender_rev_id; // [7:4] Revision, [3:0] Vendor code 21094e390cabSriastradh uint8_t refreshrate; // [1:0]=RefreshFactor (00=8ms, 01=16ms, 10=32ms,11=64ms) 21104e390cabSriastradh uint8_t hbm_ven_rev_id; // hbm_ven_rev_id 21114e390cabSriastradh uint8_t vram_rsd2; // reserved 21124e390cabSriastradh char dram_pnstring[20]; // part number end with '0'. 21134e390cabSriastradh }; 21144e390cabSriastradh 21154e390cabSriastradh struct atom_vram_info_header_v2_3 { 21164e390cabSriastradh struct atom_common_table_header table_header; 21174e390cabSriastradh uint16_t mem_adjust_tbloffset; // offset of atom_umc_init_reg_block structure for memory vendor specific UMC adjust setting 21184e390cabSriastradh uint16_t mem_clk_patch_tbloffset; // offset of atom_umc_init_reg_block structure for memory clock specific UMC setting 21194e390cabSriastradh uint16_t mc_adjust_pertile_tbloffset; // offset of atom_umc_init_reg_block structure for Per Byte Offset Preset Settings 21204e390cabSriastradh uint16_t mc_phyinit_tbloffset; // offset of atom_umc_init_reg_block structure for MC phy init set 21214e390cabSriastradh uint16_t dram_data_remap_tbloffset; // reserved for now 21224e390cabSriastradh uint16_t tmrs_seq_offset; // offset of HBM tmrs 21234e390cabSriastradh uint16_t post_ucode_init_offset; // offset of atom_umc_init_reg_block structure for MC phy init after MC uCode complete umc init 21244e390cabSriastradh uint16_t vram_rsd2; 21254e390cabSriastradh uint8_t vram_module_num; // indicate number of VRAM module 21264e390cabSriastradh uint8_t umcip_min_ver; 21274e390cabSriastradh uint8_t umcip_max_ver; 21284e390cabSriastradh uint8_t mc_phy_tile_num; // indicate the MCD tile number which use in DramDataRemapTbl and usMcAdjustPerTileTblOffset 21294e390cabSriastradh struct atom_vram_module_v9 vram_module[16]; // just for allocation, real number of blocks is in ucNumOfVRAMModule; 21304e390cabSriastradh }; 21314e390cabSriastradh 21324e390cabSriastradh struct atom_umc_register_addr_info{ 21334e390cabSriastradh uint32_t umc_register_addr:24; 21344e390cabSriastradh uint32_t umc_reg_type_ind:1; 21354e390cabSriastradh uint32_t umc_reg_rsvd:7; 21364e390cabSriastradh }; 21374e390cabSriastradh 21384e390cabSriastradh //atom_umc_register_addr_info. 21394e390cabSriastradh enum atom_umc_register_addr_info_flag{ 21404e390cabSriastradh b3ATOM_UMC_REG_ADD_INFO_INDIRECT_ACCESS =0x01, 21414e390cabSriastradh }; 21424e390cabSriastradh 21434e390cabSriastradh union atom_umc_register_addr_info_access 21444e390cabSriastradh { 21454e390cabSriastradh struct atom_umc_register_addr_info umc_reg_addr; 21464e390cabSriastradh uint32_t u32umc_reg_addr; 21474e390cabSriastradh }; 21484e390cabSriastradh 21494e390cabSriastradh struct atom_umc_reg_setting_id_config{ 21504e390cabSriastradh uint32_t memclockrange:24; 21514e390cabSriastradh uint32_t mem_blk_id:8; 21524e390cabSriastradh }; 21534e390cabSriastradh 21544e390cabSriastradh union atom_umc_reg_setting_id_config_access 21554e390cabSriastradh { 21564e390cabSriastradh struct atom_umc_reg_setting_id_config umc_id_access; 21574e390cabSriastradh uint32_t u32umc_id_access; 21584e390cabSriastradh }; 21594e390cabSriastradh 21604e390cabSriastradh struct atom_umc_reg_setting_data_block{ 21614e390cabSriastradh union atom_umc_reg_setting_id_config_access block_id; 21624e390cabSriastradh uint32_t u32umc_reg_data[1]; 21634e390cabSriastradh }; 21644e390cabSriastradh 21654e390cabSriastradh struct atom_umc_init_reg_block{ 21664e390cabSriastradh uint16_t umc_reg_num; 21674e390cabSriastradh uint16_t reserved; 21684e390cabSriastradh union atom_umc_register_addr_info_access umc_reg_list[1]; //for allocation purpose, the real number come from umc_reg_num; 21694e390cabSriastradh struct atom_umc_reg_setting_data_block umc_reg_setting_list[1]; 21704e390cabSriastradh }; 21714e390cabSriastradh 21724e390cabSriastradh struct atom_vram_module_v10 { 21734e390cabSriastradh // Design Specific Values 21744e390cabSriastradh uint32_t memory_size; // Total memory size in unit of MB for CONFIG_MEMSIZE zeros 21754e390cabSriastradh uint32_t channel_enable; // bit vector, each bit indicate specific channel enable or not 21764e390cabSriastradh uint32_t max_mem_clk; // max memory clock of this memory in unit of 10kHz, =0 means it is not defined 21774e390cabSriastradh uint16_t reserved[3]; 21784e390cabSriastradh uint16_t mem_voltage; // mem_voltage 21794e390cabSriastradh uint16_t vram_module_size; // Size of atom_vram_module_v9 21804e390cabSriastradh uint8_t ext_memory_id; // Current memory module ID 21814e390cabSriastradh uint8_t memory_type; // enum of atom_dgpu_vram_type 21824e390cabSriastradh uint8_t channel_num; // Number of mem. channels supported in this module 21834e390cabSriastradh uint8_t channel_width; // CHANNEL_16BIT/CHANNEL_32BIT/CHANNEL_64BIT 21844e390cabSriastradh uint8_t density; // _8Mx32, _16Mx32, _16Mx16, _32Mx16 21854e390cabSriastradh uint8_t tunningset_id; // MC phy registers set per 21864e390cabSriastradh uint8_t vender_rev_id; // [7:4] Revision, [3:0] Vendor code 21874e390cabSriastradh uint8_t refreshrate; // [1:0]=RefreshFactor (00=8ms, 01=16ms, 10=32ms,11=64ms) 21884e390cabSriastradh uint8_t vram_flags; // bit0= bankgroup enable 21894e390cabSriastradh uint8_t vram_rsd2; // reserved 21904e390cabSriastradh uint16_t gddr6_mr10; // gddr6 mode register10 value 21914e390cabSriastradh uint16_t gddr6_mr1; // gddr6 mode register1 value 21924e390cabSriastradh uint16_t gddr6_mr2; // gddr6 mode register2 value 21934e390cabSriastradh uint16_t gddr6_mr7; // gddr6 mode register7 value 21944e390cabSriastradh char dram_pnstring[20]; // part number end with '0' 21954e390cabSriastradh }; 21964e390cabSriastradh 21974e390cabSriastradh struct atom_vram_info_header_v2_4 { 21984e390cabSriastradh struct atom_common_table_header table_header; 21994e390cabSriastradh uint16_t mem_adjust_tbloffset; // offset of atom_umc_init_reg_block structure for memory vendor specific UMC adjust setting 22004e390cabSriastradh uint16_t mem_clk_patch_tbloffset; // offset of atom_umc_init_reg_block structure for memory clock specific UMC setting 22014e390cabSriastradh uint16_t mc_adjust_pertile_tbloffset; // offset of atom_umc_init_reg_block structure for Per Byte Offset Preset Settings 22024e390cabSriastradh uint16_t mc_phyinit_tbloffset; // offset of atom_umc_init_reg_block structure for MC phy init set 22034e390cabSriastradh uint16_t dram_data_remap_tbloffset; // reserved for now 22044e390cabSriastradh uint16_t reserved; // offset of reserved 22054e390cabSriastradh uint16_t post_ucode_init_offset; // offset of atom_umc_init_reg_block structure for MC phy init after MC uCode complete umc init 22064e390cabSriastradh uint16_t vram_rsd2; 22074e390cabSriastradh uint8_t vram_module_num; // indicate number of VRAM module 22084e390cabSriastradh uint8_t umcip_min_ver; 22094e390cabSriastradh uint8_t umcip_max_ver; 22104e390cabSriastradh uint8_t mc_phy_tile_num; // indicate the MCD tile number which use in DramDataRemapTbl and usMcAdjustPerTileTblOffset 22114e390cabSriastradh struct atom_vram_module_v10 vram_module[16]; // just for allocation, real number of blocks is in ucNumOfVRAMModule; 22124e390cabSriastradh }; 22134e390cabSriastradh 22144e390cabSriastradh /* 22154e390cabSriastradh *************************************************************************** 22164e390cabSriastradh Data Table voltageobject_info structure 22174e390cabSriastradh *************************************************************************** 22184e390cabSriastradh */ 22194e390cabSriastradh struct atom_i2c_data_entry 22204e390cabSriastradh { 22214e390cabSriastradh uint16_t i2c_reg_index; // i2c register address, can be up to 16bit 22224e390cabSriastradh uint16_t i2c_reg_data; // i2c register data, can be up to 16bit 22234e390cabSriastradh }; 22244e390cabSriastradh 22254e390cabSriastradh struct atom_voltage_object_header_v4{ 22264e390cabSriastradh uint8_t voltage_type; //enum atom_voltage_type 22274e390cabSriastradh uint8_t voltage_mode; //enum atom_voltage_object_mode 22284e390cabSriastradh uint16_t object_size; //Size of Object 22294e390cabSriastradh }; 22304e390cabSriastradh 22314e390cabSriastradh // atom_voltage_object_header_v4.voltage_mode 22324e390cabSriastradh enum atom_voltage_object_mode 22334e390cabSriastradh { 22344e390cabSriastradh VOLTAGE_OBJ_GPIO_LUT = 0, //VOLTAGE and GPIO Lookup table ->atom_gpio_voltage_object_v4 22354e390cabSriastradh VOLTAGE_OBJ_VR_I2C_INIT_SEQ = 3, //VOLTAGE REGULATOR INIT sequece through I2C -> atom_i2c_voltage_object_v4 22364e390cabSriastradh VOLTAGE_OBJ_PHASE_LUT = 4, //Set Vregulator Phase lookup table ->atom_gpio_voltage_object_v4 22374e390cabSriastradh VOLTAGE_OBJ_SVID2 = 7, //Indicate voltage control by SVID2 ->atom_svid2_voltage_object_v4 22384e390cabSriastradh VOLTAGE_OBJ_EVV = 8, 22394e390cabSriastradh VOLTAGE_OBJ_MERGED_POWER = 9, 22404e390cabSriastradh }; 22414e390cabSriastradh 22424e390cabSriastradh struct atom_i2c_voltage_object_v4 22434e390cabSriastradh { 22444e390cabSriastradh struct atom_voltage_object_header_v4 header; // voltage mode = VOLTAGE_OBJ_VR_I2C_INIT_SEQ 22454e390cabSriastradh uint8_t regulator_id; //Indicate Voltage Regulator Id 22464e390cabSriastradh uint8_t i2c_id; 22474e390cabSriastradh uint8_t i2c_slave_addr; 22484e390cabSriastradh uint8_t i2c_control_offset; 22494e390cabSriastradh uint8_t i2c_flag; // Bit0: 0 - One byte data; 1 - Two byte data 22504e390cabSriastradh uint8_t i2c_speed; // =0, use default i2c speed, otherwise use it in unit of kHz. 22514e390cabSriastradh uint8_t reserved[2]; 22524e390cabSriastradh struct atom_i2c_data_entry i2cdatalut[1]; // end with 0xff 22534e390cabSriastradh }; 22544e390cabSriastradh 22554e390cabSriastradh // ATOM_I2C_VOLTAGE_OBJECT_V3.ucVoltageControlFlag 22564e390cabSriastradh enum atom_i2c_voltage_control_flag 22574e390cabSriastradh { 22584e390cabSriastradh VOLTAGE_DATA_ONE_BYTE = 0, 22594e390cabSriastradh VOLTAGE_DATA_TWO_BYTE = 1, 22604e390cabSriastradh }; 22614e390cabSriastradh 22624e390cabSriastradh 22634e390cabSriastradh struct atom_voltage_gpio_map_lut 22644e390cabSriastradh { 22654e390cabSriastradh uint32_t voltage_gpio_reg_val; // The Voltage ID which is used to program GPIO register 22664e390cabSriastradh uint16_t voltage_level_mv; // The corresponding Voltage Value, in mV 22674e390cabSriastradh }; 22684e390cabSriastradh 22694e390cabSriastradh struct atom_gpio_voltage_object_v4 22704e390cabSriastradh { 22714e390cabSriastradh struct atom_voltage_object_header_v4 header; // voltage mode = VOLTAGE_OBJ_GPIO_LUT or VOLTAGE_OBJ_PHASE_LUT 22724e390cabSriastradh uint8_t gpio_control_id; // default is 0 which indicate control through CG VID mode 22734e390cabSriastradh uint8_t gpio_entry_num; // indiate the entry numbers of Votlage/Gpio value Look up table 22744e390cabSriastradh uint8_t phase_delay_us; // phase delay in unit of micro second 22754e390cabSriastradh uint8_t reserved; 22764e390cabSriastradh uint32_t gpio_mask_val; // GPIO Mask value 22774e390cabSriastradh struct atom_voltage_gpio_map_lut voltage_gpio_lut[1]; 22784e390cabSriastradh }; 22794e390cabSriastradh 22804e390cabSriastradh struct atom_svid2_voltage_object_v4 22814e390cabSriastradh { 22824e390cabSriastradh struct atom_voltage_object_header_v4 header; // voltage mode = VOLTAGE_OBJ_SVID2 22834e390cabSriastradh uint8_t loadline_psi1; // bit4:0= loadline setting ( Core Loadline trim and offset trim ), bit5=0:PSI1_L disable =1: PSI1_L enable 22844e390cabSriastradh uint8_t psi0_l_vid_thresd; // VR PSI0_L VID threshold 22854e390cabSriastradh uint8_t psi0_enable; // 22864e390cabSriastradh uint8_t maxvstep; 22874e390cabSriastradh uint8_t telemetry_offset; 22884e390cabSriastradh uint8_t telemetry_gain; 22894e390cabSriastradh uint16_t reserved1; 22904e390cabSriastradh }; 22914e390cabSriastradh 22924e390cabSriastradh struct atom_merged_voltage_object_v4 22934e390cabSriastradh { 22944e390cabSriastradh struct atom_voltage_object_header_v4 header; // voltage mode = VOLTAGE_OBJ_MERGED_POWER 22954e390cabSriastradh uint8_t merged_powerrail_type; //enum atom_voltage_type 22964e390cabSriastradh uint8_t reserved[3]; 22974e390cabSriastradh }; 22984e390cabSriastradh 22994e390cabSriastradh union atom_voltage_object_v4{ 23004e390cabSriastradh struct atom_gpio_voltage_object_v4 gpio_voltage_obj; 23014e390cabSriastradh struct atom_i2c_voltage_object_v4 i2c_voltage_obj; 23024e390cabSriastradh struct atom_svid2_voltage_object_v4 svid2_voltage_obj; 23034e390cabSriastradh struct atom_merged_voltage_object_v4 merged_voltage_obj; 23044e390cabSriastradh }; 23054e390cabSriastradh 23064e390cabSriastradh struct atom_voltage_objects_info_v4_1 23074e390cabSriastradh { 23084e390cabSriastradh struct atom_common_table_header table_header; 23094e390cabSriastradh union atom_voltage_object_v4 voltage_object[1]; //Info for Voltage control 23104e390cabSriastradh }; 23114e390cabSriastradh 23124e390cabSriastradh 23134e390cabSriastradh /* 23144e390cabSriastradh *************************************************************************** 23154e390cabSriastradh All Command Function structure definition 23164e390cabSriastradh *************************************************************************** 23174e390cabSriastradh */ 23184e390cabSriastradh 23194e390cabSriastradh /* 23204e390cabSriastradh *************************************************************************** 23214e390cabSriastradh Structures used by asic_init 23224e390cabSriastradh *************************************************************************** 23234e390cabSriastradh */ 23244e390cabSriastradh 23254e390cabSriastradh struct asic_init_engine_parameters 23264e390cabSriastradh { 23274e390cabSriastradh uint32_t sclkfreqin10khz:24; 23284e390cabSriastradh uint32_t engineflag:8; /* enum atom_asic_init_engine_flag */ 23294e390cabSriastradh }; 23304e390cabSriastradh 23314e390cabSriastradh struct asic_init_mem_parameters 23324e390cabSriastradh { 23334e390cabSriastradh uint32_t mclkfreqin10khz:24; 23344e390cabSriastradh uint32_t memflag:8; /* enum atom_asic_init_mem_flag */ 23354e390cabSriastradh }; 23364e390cabSriastradh 23374e390cabSriastradh struct asic_init_parameters_v2_1 23384e390cabSriastradh { 23394e390cabSriastradh struct asic_init_engine_parameters engineparam; 23404e390cabSriastradh struct asic_init_mem_parameters memparam; 23414e390cabSriastradh }; 23424e390cabSriastradh 23434e390cabSriastradh struct asic_init_ps_allocation_v2_1 23444e390cabSriastradh { 23454e390cabSriastradh struct asic_init_parameters_v2_1 param; 23464e390cabSriastradh uint32_t reserved[16]; 23474e390cabSriastradh }; 23484e390cabSriastradh 23494e390cabSriastradh 23504e390cabSriastradh enum atom_asic_init_engine_flag 23514e390cabSriastradh { 23524e390cabSriastradh b3NORMAL_ENGINE_INIT = 0, 23534e390cabSriastradh b3SRIOV_SKIP_ASIC_INIT = 0x02, 23544e390cabSriastradh b3SRIOV_LOAD_UCODE = 0x40, 23554e390cabSriastradh }; 23564e390cabSriastradh 23574e390cabSriastradh enum atom_asic_init_mem_flag 23584e390cabSriastradh { 23594e390cabSriastradh b3NORMAL_MEM_INIT = 0, 23604e390cabSriastradh b3DRAM_SELF_REFRESH_EXIT =0x20, 23614e390cabSriastradh }; 23624e390cabSriastradh 23634e390cabSriastradh /* 23644e390cabSriastradh *************************************************************************** 23654e390cabSriastradh Structures used by setengineclock 23664e390cabSriastradh *************************************************************************** 23674e390cabSriastradh */ 23684e390cabSriastradh 23694e390cabSriastradh struct set_engine_clock_parameters_v2_1 23704e390cabSriastradh { 23714e390cabSriastradh uint32_t sclkfreqin10khz:24; 23724e390cabSriastradh uint32_t sclkflag:8; /* enum atom_set_engine_mem_clock_flag, */ 23734e390cabSriastradh uint32_t reserved[10]; 23744e390cabSriastradh }; 23754e390cabSriastradh 23764e390cabSriastradh struct set_engine_clock_ps_allocation_v2_1 23774e390cabSriastradh { 23784e390cabSriastradh struct set_engine_clock_parameters_v2_1 clockinfo; 23794e390cabSriastradh uint32_t reserved[10]; 23804e390cabSriastradh }; 23814e390cabSriastradh 23824e390cabSriastradh 23834e390cabSriastradh enum atom_set_engine_mem_clock_flag 23844e390cabSriastradh { 23854e390cabSriastradh b3NORMAL_CHANGE_CLOCK = 0, 23864e390cabSriastradh b3FIRST_TIME_CHANGE_CLOCK = 0x08, 23874e390cabSriastradh b3STORE_DPM_TRAINGING = 0x40, //Applicable to memory clock change,when set, it store specific DPM mode training result 23884e390cabSriastradh }; 23894e390cabSriastradh 23904e390cabSriastradh /* 23914e390cabSriastradh *************************************************************************** 23924e390cabSriastradh Structures used by getengineclock 23934e390cabSriastradh *************************************************************************** 23944e390cabSriastradh */ 23954e390cabSriastradh struct get_engine_clock_parameter 23964e390cabSriastradh { 23974e390cabSriastradh uint32_t sclk_10khz; // current engine speed in 10KHz unit 23984e390cabSriastradh uint32_t reserved; 23994e390cabSriastradh }; 24004e390cabSriastradh 24014e390cabSriastradh /* 24024e390cabSriastradh *************************************************************************** 24034e390cabSriastradh Structures used by setmemoryclock 24044e390cabSriastradh *************************************************************************** 24054e390cabSriastradh */ 24064e390cabSriastradh struct set_memory_clock_parameters_v2_1 24074e390cabSriastradh { 24084e390cabSriastradh uint32_t mclkfreqin10khz:24; 24094e390cabSriastradh uint32_t mclkflag:8; /* enum atom_set_engine_mem_clock_flag, */ 24104e390cabSriastradh uint32_t reserved[10]; 24114e390cabSriastradh }; 24124e390cabSriastradh 24134e390cabSriastradh struct set_memory_clock_ps_allocation_v2_1 24144e390cabSriastradh { 24154e390cabSriastradh struct set_memory_clock_parameters_v2_1 clockinfo; 24164e390cabSriastradh uint32_t reserved[10]; 24174e390cabSriastradh }; 24184e390cabSriastradh 24194e390cabSriastradh 24204e390cabSriastradh /* 24214e390cabSriastradh *************************************************************************** 24224e390cabSriastradh Structures used by getmemoryclock 24234e390cabSriastradh *************************************************************************** 24244e390cabSriastradh */ 24254e390cabSriastradh struct get_memory_clock_parameter 24264e390cabSriastradh { 24274e390cabSriastradh uint32_t mclk_10khz; // current engine speed in 10KHz unit 24284e390cabSriastradh uint32_t reserved; 24294e390cabSriastradh }; 24304e390cabSriastradh 24314e390cabSriastradh 24324e390cabSriastradh 24334e390cabSriastradh /* 24344e390cabSriastradh *************************************************************************** 24354e390cabSriastradh Structures used by setvoltage 24364e390cabSriastradh *************************************************************************** 24374e390cabSriastradh */ 24384e390cabSriastradh 24394e390cabSriastradh struct set_voltage_parameters_v1_4 24404e390cabSriastradh { 24414e390cabSriastradh uint8_t voltagetype; /* enum atom_voltage_type */ 24424e390cabSriastradh uint8_t command; /* Indicate action: Set voltage level, enum atom_set_voltage_command */ 24434e390cabSriastradh uint16_t vlevel_mv; /* real voltage level in unit of mv or Voltage Phase (0, 1, 2, .. ) */ 24444e390cabSriastradh }; 24454e390cabSriastradh 24464e390cabSriastradh //set_voltage_parameters_v2_1.voltagemode 24474e390cabSriastradh enum atom_set_voltage_command{ 24484e390cabSriastradh ATOM_SET_VOLTAGE = 0, 24494e390cabSriastradh ATOM_INIT_VOLTAGE_REGULATOR = 3, 24504e390cabSriastradh ATOM_SET_VOLTAGE_PHASE = 4, 24514e390cabSriastradh ATOM_GET_LEAKAGE_ID = 8, 24524e390cabSriastradh }; 24534e390cabSriastradh 24544e390cabSriastradh struct set_voltage_ps_allocation_v1_4 24554e390cabSriastradh { 24564e390cabSriastradh struct set_voltage_parameters_v1_4 setvoltageparam; 24574e390cabSriastradh uint32_t reserved[10]; 24584e390cabSriastradh }; 24594e390cabSriastradh 24604e390cabSriastradh 24614e390cabSriastradh /* 24624e390cabSriastradh *************************************************************************** 24634e390cabSriastradh Structures used by computegpuclockparam 24644e390cabSriastradh *************************************************************************** 24654e390cabSriastradh */ 24664e390cabSriastradh 24674e390cabSriastradh //ATOM_COMPUTE_CLOCK_FREQ.ulComputeClockFlag 24684e390cabSriastradh enum atom_gpu_clock_type 24694e390cabSriastradh { 24704e390cabSriastradh COMPUTE_GPUCLK_INPUT_FLAG_DEFAULT_GPUCLK =0x00, 24714e390cabSriastradh COMPUTE_GPUCLK_INPUT_FLAG_GFXCLK =0x01, 24724e390cabSriastradh COMPUTE_GPUCLK_INPUT_FLAG_UCLK =0x02, 24734e390cabSriastradh }; 24744e390cabSriastradh 24754e390cabSriastradh struct compute_gpu_clock_input_parameter_v1_8 24764e390cabSriastradh { 24774e390cabSriastradh uint32_t gpuclock_10khz:24; //Input= target clock, output = actual clock 24784e390cabSriastradh uint32_t gpu_clock_type:8; //Input indicate clock type: enum atom_gpu_clock_type 24794e390cabSriastradh uint32_t reserved[5]; 24804e390cabSriastradh }; 24814e390cabSriastradh 24824e390cabSriastradh 24834e390cabSriastradh struct compute_gpu_clock_output_parameter_v1_8 24844e390cabSriastradh { 24854e390cabSriastradh uint32_t gpuclock_10khz:24; //Input= target clock, output = actual clock 24864e390cabSriastradh uint32_t dfs_did:8; //return parameter: DFS divider which is used to program to register directly 24874e390cabSriastradh uint32_t pll_fb_mult; //Feedback Multiplier, bit 8:0 int, bit 15:12 post_div, bit 31:16 frac 24884e390cabSriastradh uint32_t pll_ss_fbsmult; // Spread FB Mult: bit 8:0 int, bit 31:16 frac 24894e390cabSriastradh uint16_t pll_ss_slew_frac; 24904e390cabSriastradh uint8_t pll_ss_enable; 24914e390cabSriastradh uint8_t reserved; 24924e390cabSriastradh uint32_t reserved1[2]; 24934e390cabSriastradh }; 24944e390cabSriastradh 24954e390cabSriastradh 24964e390cabSriastradh 24974e390cabSriastradh /* 24984e390cabSriastradh *************************************************************************** 24994e390cabSriastradh Structures used by ReadEfuseValue 25004e390cabSriastradh *************************************************************************** 25014e390cabSriastradh */ 25024e390cabSriastradh 25034e390cabSriastradh struct read_efuse_input_parameters_v3_1 25044e390cabSriastradh { 25054e390cabSriastradh uint16_t efuse_start_index; 25064e390cabSriastradh uint8_t reserved; 25074e390cabSriastradh uint8_t bitslen; 25084e390cabSriastradh }; 25094e390cabSriastradh 25104e390cabSriastradh // ReadEfuseValue input/output parameter 25114e390cabSriastradh union read_efuse_value_parameters_v3_1 25124e390cabSriastradh { 25134e390cabSriastradh struct read_efuse_input_parameters_v3_1 efuse_info; 25144e390cabSriastradh uint32_t efusevalue; 25154e390cabSriastradh }; 25164e390cabSriastradh 25174e390cabSriastradh 25184e390cabSriastradh /* 25194e390cabSriastradh *************************************************************************** 25204e390cabSriastradh Structures used by getsmuclockinfo 25214e390cabSriastradh *************************************************************************** 25224e390cabSriastradh */ 25234e390cabSriastradh struct atom_get_smu_clock_info_parameters_v3_1 25244e390cabSriastradh { 25254e390cabSriastradh uint8_t syspll_id; // 0= syspll0, 1=syspll1, 2=syspll2 25264e390cabSriastradh uint8_t clk_id; // atom_smu9_syspll0_clock_id (only valid when command == GET_SMU_CLOCK_INFO_V3_1_GET_CLOCK_FREQ ) 25274e390cabSriastradh uint8_t command; // enum of atom_get_smu_clock_info_command 25284e390cabSriastradh 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 ) 25294e390cabSriastradh }; 25304e390cabSriastradh 25314e390cabSriastradh enum atom_get_smu_clock_info_command 25324e390cabSriastradh { 25334e390cabSriastradh GET_SMU_CLOCK_INFO_V3_1_GET_CLOCK_FREQ = 0, 25344e390cabSriastradh GET_SMU_CLOCK_INFO_V3_1_GET_PLLVCO_FREQ = 1, 25354e390cabSriastradh GET_SMU_CLOCK_INFO_V3_1_GET_PLLREFCLK_FREQ = 2, 25364e390cabSriastradh }; 25374e390cabSriastradh 25384e390cabSriastradh enum atom_smu9_syspll0_clock_id 25394e390cabSriastradh { 25404e390cabSriastradh SMU9_SYSPLL0_SMNCLK_ID = 0, // SMNCLK 25414e390cabSriastradh SMU9_SYSPLL0_SOCCLK_ID = 1, // SOCCLK (FCLK) 25424e390cabSriastradh SMU9_SYSPLL0_MP0CLK_ID = 2, // MP0CLK 25434e390cabSriastradh SMU9_SYSPLL0_MP1CLK_ID = 3, // MP1CLK 25444e390cabSriastradh SMU9_SYSPLL0_LCLK_ID = 4, // LCLK 25454e390cabSriastradh SMU9_SYSPLL0_DCLK_ID = 5, // DCLK 25464e390cabSriastradh SMU9_SYSPLL0_VCLK_ID = 6, // VCLK 25474e390cabSriastradh SMU9_SYSPLL0_ECLK_ID = 7, // ECLK 25484e390cabSriastradh SMU9_SYSPLL0_DCEFCLK_ID = 8, // DCEFCLK 25494e390cabSriastradh SMU9_SYSPLL0_DPREFCLK_ID = 10, // DPREFCLK 25504e390cabSriastradh SMU9_SYSPLL0_DISPCLK_ID = 11, // DISPCLK 25514e390cabSriastradh }; 25524e390cabSriastradh 25534e390cabSriastradh enum atom_smu11_syspll_id { 25544e390cabSriastradh SMU11_SYSPLL0_ID = 0, 25554e390cabSriastradh SMU11_SYSPLL1_0_ID = 1, 25564e390cabSriastradh SMU11_SYSPLL1_1_ID = 2, 25574e390cabSriastradh SMU11_SYSPLL1_2_ID = 3, 25584e390cabSriastradh SMU11_SYSPLL2_ID = 4, 25594e390cabSriastradh SMU11_SYSPLL3_0_ID = 5, 25604e390cabSriastradh SMU11_SYSPLL3_1_ID = 6, 25614e390cabSriastradh }; 25624e390cabSriastradh 25634e390cabSriastradh enum atom_smu11_syspll0_clock_id { 25644e390cabSriastradh SMU11_SYSPLL0_ECLK_ID = 0, // ECLK 25654e390cabSriastradh SMU11_SYSPLL0_SOCCLK_ID = 1, // SOCCLK 25664e390cabSriastradh SMU11_SYSPLL0_MP0CLK_ID = 2, // MP0CLK 25674e390cabSriastradh SMU11_SYSPLL0_DCLK_ID = 3, // DCLK 25684e390cabSriastradh SMU11_SYSPLL0_VCLK_ID = 4, // VCLK 25694e390cabSriastradh SMU11_SYSPLL0_DCEFCLK_ID = 5, // DCEFCLK 25704e390cabSriastradh }; 25714e390cabSriastradh 25724e390cabSriastradh enum atom_smu11_syspll1_0_clock_id { 25734e390cabSriastradh SMU11_SYSPLL1_0_UCLKA_ID = 0, // UCLK_a 25744e390cabSriastradh }; 25754e390cabSriastradh 25764e390cabSriastradh enum atom_smu11_syspll1_1_clock_id { 25774e390cabSriastradh SMU11_SYSPLL1_0_UCLKB_ID = 0, // UCLK_b 25784e390cabSriastradh }; 25794e390cabSriastradh 25804e390cabSriastradh enum atom_smu11_syspll1_2_clock_id { 25814e390cabSriastradh SMU11_SYSPLL1_0_FCLK_ID = 0, // FCLK 25824e390cabSriastradh }; 25834e390cabSriastradh 25844e390cabSriastradh enum atom_smu11_syspll2_clock_id { 25854e390cabSriastradh SMU11_SYSPLL2_GFXCLK_ID = 0, // GFXCLK 25864e390cabSriastradh }; 25874e390cabSriastradh 25884e390cabSriastradh enum atom_smu11_syspll3_0_clock_id { 25894e390cabSriastradh SMU11_SYSPLL3_0_WAFCLK_ID = 0, // WAFCLK 25904e390cabSriastradh SMU11_SYSPLL3_0_DISPCLK_ID = 1, // DISPCLK 25914e390cabSriastradh SMU11_SYSPLL3_0_DPREFCLK_ID = 2, // DPREFCLK 25924e390cabSriastradh }; 25934e390cabSriastradh 25944e390cabSriastradh enum atom_smu11_syspll3_1_clock_id { 25954e390cabSriastradh SMU11_SYSPLL3_1_MP1CLK_ID = 0, // MP1CLK 25964e390cabSriastradh SMU11_SYSPLL3_1_SMNCLK_ID = 1, // SMNCLK 25974e390cabSriastradh SMU11_SYSPLL3_1_LCLK_ID = 2, // LCLK 25984e390cabSriastradh }; 25994e390cabSriastradh 26004e390cabSriastradh struct atom_get_smu_clock_info_output_parameters_v3_1 26014e390cabSriastradh { 26024e390cabSriastradh union { 26034e390cabSriastradh uint32_t smu_clock_freq_hz; 26044e390cabSriastradh uint32_t syspllvcofreq_10khz; 26054e390cabSriastradh uint32_t sysspllrefclk_10khz; 26064e390cabSriastradh }atom_smu_outputclkfreq; 26074e390cabSriastradh }; 26084e390cabSriastradh 26094e390cabSriastradh 26104e390cabSriastradh 26114e390cabSriastradh /* 26124e390cabSriastradh *************************************************************************** 26134e390cabSriastradh Structures used by dynamicmemorysettings 26144e390cabSriastradh *************************************************************************** 26154e390cabSriastradh */ 26164e390cabSriastradh 26174e390cabSriastradh enum atom_dynamic_memory_setting_command 26184e390cabSriastradh { 26194e390cabSriastradh COMPUTE_MEMORY_PLL_PARAM = 1, 26204e390cabSriastradh COMPUTE_ENGINE_PLL_PARAM = 2, 26214e390cabSriastradh ADJUST_MC_SETTING_PARAM = 3, 26224e390cabSriastradh }; 26234e390cabSriastradh 26244e390cabSriastradh /* when command = COMPUTE_MEMORY_PLL_PARAM or ADJUST_MC_SETTING_PARAM */ 26254e390cabSriastradh struct dynamic_mclk_settings_parameters_v2_1 26264e390cabSriastradh { 26274e390cabSriastradh uint32_t mclk_10khz:24; //Input= target mclk 26284e390cabSriastradh uint32_t command:8; //command enum of atom_dynamic_memory_setting_command 26294e390cabSriastradh uint32_t reserved; 26304e390cabSriastradh }; 26314e390cabSriastradh 26324e390cabSriastradh /* when command = COMPUTE_ENGINE_PLL_PARAM */ 26334e390cabSriastradh struct dynamic_sclk_settings_parameters_v2_1 26344e390cabSriastradh { 26354e390cabSriastradh uint32_t sclk_10khz:24; //Input= target mclk 26364e390cabSriastradh uint32_t command:8; //command enum of atom_dynamic_memory_setting_command 26374e390cabSriastradh uint32_t mclk_10khz; 26384e390cabSriastradh uint32_t reserved; 26394e390cabSriastradh }; 26404e390cabSriastradh 26414e390cabSriastradh union dynamic_memory_settings_parameters_v2_1 26424e390cabSriastradh { 26434e390cabSriastradh struct dynamic_mclk_settings_parameters_v2_1 mclk_setting; 26444e390cabSriastradh struct dynamic_sclk_settings_parameters_v2_1 sclk_setting; 26454e390cabSriastradh }; 26464e390cabSriastradh 26474e390cabSriastradh 26484e390cabSriastradh 26494e390cabSriastradh /* 26504e390cabSriastradh *************************************************************************** 26514e390cabSriastradh Structures used by memorytraining 26524e390cabSriastradh *************************************************************************** 26534e390cabSriastradh */ 26544e390cabSriastradh 26554e390cabSriastradh enum atom_umc6_0_ucode_function_call_enum_id 26564e390cabSriastradh { 26574e390cabSriastradh UMC60_UCODE_FUNC_ID_REINIT = 0, 26584e390cabSriastradh UMC60_UCODE_FUNC_ID_ENTER_SELFREFRESH = 1, 26594e390cabSriastradh UMC60_UCODE_FUNC_ID_EXIT_SELFREFRESH = 2, 26604e390cabSriastradh }; 26614e390cabSriastradh 26624e390cabSriastradh 26634e390cabSriastradh struct memory_training_parameters_v2_1 26644e390cabSriastradh { 26654e390cabSriastradh uint8_t ucode_func_id; 26664e390cabSriastradh uint8_t ucode_reserved[3]; 26674e390cabSriastradh uint32_t reserved[5]; 26684e390cabSriastradh }; 26694e390cabSriastradh 26704e390cabSriastradh 26714e390cabSriastradh /* 26724e390cabSriastradh *************************************************************************** 26734e390cabSriastradh Structures used by setpixelclock 26744e390cabSriastradh *************************************************************************** 26754e390cabSriastradh */ 26764e390cabSriastradh 26774e390cabSriastradh struct set_pixel_clock_parameter_v1_7 26784e390cabSriastradh { 26794e390cabSriastradh uint32_t pixclk_100hz; // target the pixel clock to drive the CRTC timing in unit of 100Hz. 26804e390cabSriastradh 26814e390cabSriastradh uint8_t pll_id; // ATOM_PHY_PLL0/ATOM_PHY_PLL1/ATOM_PPLL0 26824e390cabSriastradh uint8_t encoderobjid; // ASIC encoder id defined in objectId.h, 26834e390cabSriastradh // indicate which graphic encoder will be used. 26844e390cabSriastradh uint8_t encoder_mode; // Encoder mode: 26854e390cabSriastradh uint8_t miscinfo; // enum atom_set_pixel_clock_v1_7_misc_info 26864e390cabSriastradh uint8_t crtc_id; // enum of atom_crtc_def 26874e390cabSriastradh uint8_t deep_color_ratio; // HDMI panel bit depth: enum atom_set_pixel_clock_v1_7_deepcolor_ratio 26884e390cabSriastradh uint8_t reserved1[2]; 26894e390cabSriastradh uint32_t reserved2; 26904e390cabSriastradh }; 26914e390cabSriastradh 26924e390cabSriastradh //ucMiscInfo 26934e390cabSriastradh enum atom_set_pixel_clock_v1_7_misc_info 26944e390cabSriastradh { 26954e390cabSriastradh PIXEL_CLOCK_V7_MISC_FORCE_PROG_PPLL = 0x01, 26964e390cabSriastradh PIXEL_CLOCK_V7_MISC_PROG_PHYPLL = 0x02, 26974e390cabSriastradh PIXEL_CLOCK_V7_MISC_YUV420_MODE = 0x04, 26984e390cabSriastradh PIXEL_CLOCK_V7_MISC_DVI_DUALLINK_EN = 0x08, 26994e390cabSriastradh PIXEL_CLOCK_V7_MISC_REF_DIV_SRC = 0x30, 27004e390cabSriastradh PIXEL_CLOCK_V7_MISC_REF_DIV_SRC_XTALIN = 0x00, 27014e390cabSriastradh PIXEL_CLOCK_V7_MISC_REF_DIV_SRC_PCIE = 0x10, 27024e390cabSriastradh PIXEL_CLOCK_V7_MISC_REF_DIV_SRC_GENLK = 0x20, 27034e390cabSriastradh PIXEL_CLOCK_V7_MISC_REF_DIV_SRC_REFPAD = 0x30, 27044e390cabSriastradh PIXEL_CLOCK_V7_MISC_ATOMIC_UPDATE = 0x40, 27054e390cabSriastradh PIXEL_CLOCK_V7_MISC_FORCE_SS_DIS = 0x80, 27064e390cabSriastradh }; 27074e390cabSriastradh 27084e390cabSriastradh /* deep_color_ratio */ 27094e390cabSriastradh enum atom_set_pixel_clock_v1_7_deepcolor_ratio 27104e390cabSriastradh { 27114e390cabSriastradh PIXEL_CLOCK_V7_DEEPCOLOR_RATIO_DIS = 0x00, //00 - DCCG_DEEP_COLOR_DTO_DISABLE: Disable Deep Color DTO 27124e390cabSriastradh PIXEL_CLOCK_V7_DEEPCOLOR_RATIO_5_4 = 0x01, //01 - DCCG_DEEP_COLOR_DTO_5_4_RATIO: Set Deep Color DTO to 5:4 27134e390cabSriastradh PIXEL_CLOCK_V7_DEEPCOLOR_RATIO_3_2 = 0x02, //02 - DCCG_DEEP_COLOR_DTO_3_2_RATIO: Set Deep Color DTO to 3:2 27144e390cabSriastradh PIXEL_CLOCK_V7_DEEPCOLOR_RATIO_2_1 = 0x03, //03 - DCCG_DEEP_COLOR_DTO_2_1_RATIO: Set Deep Color DTO to 2:1 27154e390cabSriastradh }; 27164e390cabSriastradh 27174e390cabSriastradh /* 27184e390cabSriastradh *************************************************************************** 27194e390cabSriastradh Structures used by setdceclock 27204e390cabSriastradh *************************************************************************** 27214e390cabSriastradh */ 27224e390cabSriastradh 27234e390cabSriastradh // SetDCEClock input parameter for DCE11.2( ELM and BF ) and above 27244e390cabSriastradh struct set_dce_clock_parameters_v2_1 27254e390cabSriastradh { 27264e390cabSriastradh uint32_t dceclk_10khz; // target DCE frequency in unit of 10KHZ, return real DISPCLK/DPREFCLK frequency. 27274e390cabSriastradh uint8_t dceclktype; // =0: DISPCLK =1: DPREFCLK =2: PIXCLK 27284e390cabSriastradh uint8_t dceclksrc; // ATOM_PLL0 or ATOM_GCK_DFS or ATOM_FCH_CLK or ATOM_COMBOPHY_PLLx 27294e390cabSriastradh uint8_t dceclkflag; // Bit [1:0] = PPLL ref clock source ( when ucDCEClkSrc= ATOM_PPLL0 ) 27304e390cabSriastradh uint8_t crtc_id; // ucDisp Pipe Id, ATOM_CRTC0/1/2/..., use only when ucDCEClkType = PIXCLK 27314e390cabSriastradh }; 27324e390cabSriastradh 27334e390cabSriastradh //ucDCEClkType 27344e390cabSriastradh enum atom_set_dce_clock_clock_type 27354e390cabSriastradh { 27364e390cabSriastradh DCE_CLOCK_TYPE_DISPCLK = 0, 27374e390cabSriastradh DCE_CLOCK_TYPE_DPREFCLK = 1, 27384e390cabSriastradh DCE_CLOCK_TYPE_PIXELCLK = 2, // used by VBIOS internally, called by SetPixelClock 27394e390cabSriastradh }; 27404e390cabSriastradh 27414e390cabSriastradh //ucDCEClkFlag when ucDCEClkType == DPREFCLK 27424e390cabSriastradh enum atom_set_dce_clock_dprefclk_flag 27434e390cabSriastradh { 27444e390cabSriastradh DCE_CLOCK_FLAG_PLL_REFCLK_SRC_MASK = 0x03, 27454e390cabSriastradh DCE_CLOCK_FLAG_PLL_REFCLK_SRC_GENERICA = 0x00, 27464e390cabSriastradh DCE_CLOCK_FLAG_PLL_REFCLK_SRC_GENLK = 0x01, 27474e390cabSriastradh DCE_CLOCK_FLAG_PLL_REFCLK_SRC_PCIE = 0x02, 27484e390cabSriastradh DCE_CLOCK_FLAG_PLL_REFCLK_SRC_XTALIN = 0x03, 27494e390cabSriastradh }; 27504e390cabSriastradh 27514e390cabSriastradh //ucDCEClkFlag when ucDCEClkType == PIXCLK 27524e390cabSriastradh enum atom_set_dce_clock_pixclk_flag 27534e390cabSriastradh { 27544e390cabSriastradh DCE_CLOCK_FLAG_PCLK_DEEPCOLOR_RATIO_MASK = 0x03, 27554e390cabSriastradh DCE_CLOCK_FLAG_PCLK_DEEPCOLOR_RATIO_DIS = 0x00, //00 - DCCG_DEEP_COLOR_DTO_DISABLE: Disable Deep Color DTO 27564e390cabSriastradh DCE_CLOCK_FLAG_PCLK_DEEPCOLOR_RATIO_5_4 = 0x01, //01 - DCCG_DEEP_COLOR_DTO_5_4_RATIO: Set Deep Color DTO to 5:4 27574e390cabSriastradh DCE_CLOCK_FLAG_PCLK_DEEPCOLOR_RATIO_3_2 = 0x02, //02 - DCCG_DEEP_COLOR_DTO_3_2_RATIO: Set Deep Color DTO to 3:2 27584e390cabSriastradh DCE_CLOCK_FLAG_PCLK_DEEPCOLOR_RATIO_2_1 = 0x03, //03 - DCCG_DEEP_COLOR_DTO_2_1_RATIO: Set Deep Color DTO to 2:1 27594e390cabSriastradh DCE_CLOCK_FLAG_PIXCLK_YUV420_MODE = 0x04, 27604e390cabSriastradh }; 27614e390cabSriastradh 27624e390cabSriastradh struct set_dce_clock_ps_allocation_v2_1 27634e390cabSriastradh { 27644e390cabSriastradh struct set_dce_clock_parameters_v2_1 param; 27654e390cabSriastradh uint32_t ulReserved[2]; 27664e390cabSriastradh }; 27674e390cabSriastradh 27684e390cabSriastradh 27694e390cabSriastradh /****************************************************************************/ 27704e390cabSriastradh // Structures used by BlankCRTC 27714e390cabSriastradh /****************************************************************************/ 27724e390cabSriastradh struct blank_crtc_parameters 27734e390cabSriastradh { 27744e390cabSriastradh uint8_t crtc_id; // enum atom_crtc_def 27754e390cabSriastradh uint8_t blanking; // enum atom_blank_crtc_command 27764e390cabSriastradh uint16_t reserved; 27774e390cabSriastradh uint32_t reserved1; 27784e390cabSriastradh }; 27794e390cabSriastradh 27804e390cabSriastradh enum atom_blank_crtc_command 27814e390cabSriastradh { 27824e390cabSriastradh ATOM_BLANKING = 1, 27834e390cabSriastradh ATOM_BLANKING_OFF = 0, 27844e390cabSriastradh }; 27854e390cabSriastradh 27864e390cabSriastradh /****************************************************************************/ 27874e390cabSriastradh // Structures used by enablecrtc 27884e390cabSriastradh /****************************************************************************/ 27894e390cabSriastradh struct enable_crtc_parameters 27904e390cabSriastradh { 27914e390cabSriastradh uint8_t crtc_id; // enum atom_crtc_def 27924e390cabSriastradh uint8_t enable; // ATOM_ENABLE or ATOM_DISABLE 27934e390cabSriastradh uint8_t padding[2]; 27944e390cabSriastradh }; 27954e390cabSriastradh 27964e390cabSriastradh 27974e390cabSriastradh /****************************************************************************/ 27984e390cabSriastradh // Structure used by EnableDispPowerGating 27994e390cabSriastradh /****************************************************************************/ 28004e390cabSriastradh struct enable_disp_power_gating_parameters_v2_1 28014e390cabSriastradh { 28024e390cabSriastradh uint8_t disp_pipe_id; // ATOM_CRTC1, ATOM_CRTC2, ... 28034e390cabSriastradh uint8_t enable; // ATOM_ENABLE or ATOM_DISABLE 28044e390cabSriastradh uint8_t padding[2]; 28054e390cabSriastradh }; 28064e390cabSriastradh 28074e390cabSriastradh struct enable_disp_power_gating_ps_allocation 28084e390cabSriastradh { 28094e390cabSriastradh struct enable_disp_power_gating_parameters_v2_1 param; 28104e390cabSriastradh uint32_t ulReserved[4]; 28114e390cabSriastradh }; 28124e390cabSriastradh 28134e390cabSriastradh /****************************************************************************/ 28144e390cabSriastradh // Structure used in setcrtc_usingdtdtiming 28154e390cabSriastradh /****************************************************************************/ 28164e390cabSriastradh struct set_crtc_using_dtd_timing_parameters 28174e390cabSriastradh { 28184e390cabSriastradh uint16_t h_size; 28194e390cabSriastradh uint16_t h_blanking_time; 28204e390cabSriastradh uint16_t v_size; 28214e390cabSriastradh uint16_t v_blanking_time; 28224e390cabSriastradh uint16_t h_syncoffset; 28234e390cabSriastradh uint16_t h_syncwidth; 28244e390cabSriastradh uint16_t v_syncoffset; 28254e390cabSriastradh uint16_t v_syncwidth; 28264e390cabSriastradh uint16_t modemiscinfo; 28274e390cabSriastradh uint8_t h_border; 28284e390cabSriastradh uint8_t v_border; 28294e390cabSriastradh uint8_t crtc_id; // enum atom_crtc_def 28304e390cabSriastradh uint8_t encoder_mode; // atom_encode_mode_def 28314e390cabSriastradh uint8_t padding[2]; 28324e390cabSriastradh }; 28334e390cabSriastradh 28344e390cabSriastradh 28354e390cabSriastradh /****************************************************************************/ 28364e390cabSriastradh // Structures used by processi2cchanneltransaction 28374e390cabSriastradh /****************************************************************************/ 28384e390cabSriastradh struct process_i2c_channel_transaction_parameters 28394e390cabSriastradh { 28404e390cabSriastradh uint8_t i2cspeed_khz; 28414e390cabSriastradh union { 28424e390cabSriastradh uint8_t regindex; 28434e390cabSriastradh uint8_t status; /* enum atom_process_i2c_flag */ 28444e390cabSriastradh } regind_status; 28454e390cabSriastradh uint16_t i2c_data_out; 28464e390cabSriastradh uint8_t flag; /* enum atom_process_i2c_status */ 28474e390cabSriastradh uint8_t trans_bytes; 28484e390cabSriastradh uint8_t slave_addr; 28494e390cabSriastradh uint8_t i2c_id; 28504e390cabSriastradh }; 28514e390cabSriastradh 28524e390cabSriastradh //ucFlag 28534e390cabSriastradh enum atom_process_i2c_flag 28544e390cabSriastradh { 28554e390cabSriastradh HW_I2C_WRITE = 1, 28564e390cabSriastradh HW_I2C_READ = 0, 28574e390cabSriastradh I2C_2BYTE_ADDR = 0x02, 28584e390cabSriastradh HW_I2C_SMBUS_BYTE_WR = 0x04, 28594e390cabSriastradh }; 28604e390cabSriastradh 28614e390cabSriastradh //status 28624e390cabSriastradh enum atom_process_i2c_status 28634e390cabSriastradh { 28644e390cabSriastradh HW_ASSISTED_I2C_STATUS_FAILURE =2, 28654e390cabSriastradh HW_ASSISTED_I2C_STATUS_SUCCESS =1, 28664e390cabSriastradh }; 28674e390cabSriastradh 28684e390cabSriastradh 28694e390cabSriastradh /****************************************************************************/ 28704e390cabSriastradh // Structures used by processauxchanneltransaction 28714e390cabSriastradh /****************************************************************************/ 28724e390cabSriastradh 28734e390cabSriastradh struct process_aux_channel_transaction_parameters_v1_2 28744e390cabSriastradh { 28754e390cabSriastradh uint16_t aux_request; 28764e390cabSriastradh uint16_t dataout; 28774e390cabSriastradh uint8_t channelid; 28784e390cabSriastradh union { 28794e390cabSriastradh uint8_t reply_status; 28804e390cabSriastradh uint8_t aux_delay; 28814e390cabSriastradh } aux_status_delay; 28824e390cabSriastradh uint8_t dataout_len; 28834e390cabSriastradh uint8_t hpd_id; //=0: HPD1, =1: HPD2, =2: HPD3, =3: HPD4, =4: HPD5, =5: HPD6 28844e390cabSriastradh }; 28854e390cabSriastradh 28864e390cabSriastradh 28874e390cabSriastradh /****************************************************************************/ 28884e390cabSriastradh // Structures used by selectcrtc_source 28894e390cabSriastradh /****************************************************************************/ 28904e390cabSriastradh 28914e390cabSriastradh struct select_crtc_source_parameters_v2_3 28924e390cabSriastradh { 28934e390cabSriastradh uint8_t crtc_id; // enum atom_crtc_def 28944e390cabSriastradh uint8_t encoder_id; // enum atom_dig_def 28954e390cabSriastradh uint8_t encode_mode; // enum atom_encode_mode_def 28964e390cabSriastradh uint8_t dst_bpc; // enum atom_panel_bit_per_color 28974e390cabSriastradh }; 28984e390cabSriastradh 28994e390cabSriastradh 29004e390cabSriastradh /****************************************************************************/ 29014e390cabSriastradh // Structures used by digxencodercontrol 29024e390cabSriastradh /****************************************************************************/ 29034e390cabSriastradh 29044e390cabSriastradh // ucAction: 29054e390cabSriastradh enum atom_dig_encoder_control_action 29064e390cabSriastradh { 29074e390cabSriastradh ATOM_ENCODER_CMD_DISABLE_DIG = 0, 29084e390cabSriastradh ATOM_ENCODER_CMD_ENABLE_DIG = 1, 29094e390cabSriastradh ATOM_ENCODER_CMD_DP_LINK_TRAINING_START = 0x08, 29104e390cabSriastradh ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN1 = 0x09, 29114e390cabSriastradh ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN2 = 0x0a, 29124e390cabSriastradh ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN3 = 0x13, 29134e390cabSriastradh ATOM_ENCODER_CMD_DP_LINK_TRAINING_COMPLETE = 0x0b, 29144e390cabSriastradh ATOM_ENCODER_CMD_DP_VIDEO_OFF = 0x0c, 29154e390cabSriastradh ATOM_ENCODER_CMD_DP_VIDEO_ON = 0x0d, 29164e390cabSriastradh ATOM_ENCODER_CMD_SETUP_PANEL_MODE = 0x10, 29174e390cabSriastradh ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN4 = 0x14, 29184e390cabSriastradh ATOM_ENCODER_CMD_STREAM_SETUP = 0x0F, 29194e390cabSriastradh ATOM_ENCODER_CMD_LINK_SETUP = 0x11, 29204e390cabSriastradh ATOM_ENCODER_CMD_ENCODER_BLANK = 0x12, 29214e390cabSriastradh }; 29224e390cabSriastradh 29234e390cabSriastradh //define ucPanelMode 29244e390cabSriastradh enum atom_dig_encoder_control_panelmode 29254e390cabSriastradh { 29264e390cabSriastradh DP_PANEL_MODE_DISABLE = 0x00, 29274e390cabSriastradh DP_PANEL_MODE_ENABLE_eDP_MODE = 0x01, 29284e390cabSriastradh DP_PANEL_MODE_ENABLE_LVLINK_MODE = 0x11, 29294e390cabSriastradh }; 29304e390cabSriastradh 29314e390cabSriastradh //ucDigId 29324e390cabSriastradh enum atom_dig_encoder_control_v5_digid 29334e390cabSriastradh { 29344e390cabSriastradh ATOM_ENCODER_CONFIG_V5_DIG0_ENCODER = 0x00, 29354e390cabSriastradh ATOM_ENCODER_CONFIG_V5_DIG1_ENCODER = 0x01, 29364e390cabSriastradh ATOM_ENCODER_CONFIG_V5_DIG2_ENCODER = 0x02, 29374e390cabSriastradh ATOM_ENCODER_CONFIG_V5_DIG3_ENCODER = 0x03, 29384e390cabSriastradh ATOM_ENCODER_CONFIG_V5_DIG4_ENCODER = 0x04, 29394e390cabSriastradh ATOM_ENCODER_CONFIG_V5_DIG5_ENCODER = 0x05, 29404e390cabSriastradh ATOM_ENCODER_CONFIG_V5_DIG6_ENCODER = 0x06, 29414e390cabSriastradh ATOM_ENCODER_CONFIG_V5_DIG7_ENCODER = 0x07, 29424e390cabSriastradh }; 29434e390cabSriastradh 29444e390cabSriastradh struct dig_encoder_stream_setup_parameters_v1_5 29454e390cabSriastradh { 29464e390cabSriastradh uint8_t digid; // 0~6 map to DIG0~DIG6 enum atom_dig_encoder_control_v5_digid 29474e390cabSriastradh uint8_t action; // = ATOM_ENOCODER_CMD_STREAM_SETUP 29484e390cabSriastradh uint8_t digmode; // ATOM_ENCODER_MODE_DP/ATOM_ENCODER_MODE_DVI/ATOM_ENCODER_MODE_HDMI 29494e390cabSriastradh uint8_t lanenum; // Lane number 29504e390cabSriastradh uint32_t pclk_10khz; // Pixel Clock in 10Khz 29514e390cabSriastradh uint8_t bitpercolor; 29524e390cabSriastradh uint8_t dplinkrate_270mhz;//= DP link rate/270Mhz, =6: 1.62G = 10: 2.7G, =20: 5.4Ghz, =30: 8.1Ghz etc 29534e390cabSriastradh uint8_t reserved[2]; 29544e390cabSriastradh }; 29554e390cabSriastradh 29564e390cabSriastradh struct dig_encoder_link_setup_parameters_v1_5 29574e390cabSriastradh { 29584e390cabSriastradh uint8_t digid; // 0~6 map to DIG0~DIG6 enum atom_dig_encoder_control_v5_digid 29594e390cabSriastradh uint8_t action; // = ATOM_ENOCODER_CMD_LINK_SETUP 29604e390cabSriastradh uint8_t digmode; // ATOM_ENCODER_MODE_DP/ATOM_ENCODER_MODE_DVI/ATOM_ENCODER_MODE_HDMI 29614e390cabSriastradh uint8_t lanenum; // Lane number 29624e390cabSriastradh uint8_t symclk_10khz; // Symbol Clock in 10Khz 29634e390cabSriastradh uint8_t hpd_sel; 29644e390cabSriastradh uint8_t digfe_sel; // DIG stream( front-end ) selection, bit0 means DIG0 FE is enable, 29654e390cabSriastradh uint8_t reserved[2]; 29664e390cabSriastradh }; 29674e390cabSriastradh 29684e390cabSriastradh struct dp_panel_mode_set_parameters_v1_5 29694e390cabSriastradh { 29704e390cabSriastradh uint8_t digid; // 0~6 map to DIG0~DIG6 enum atom_dig_encoder_control_v5_digid 29714e390cabSriastradh uint8_t action; // = ATOM_ENCODER_CMD_DPLINK_SETUP 29724e390cabSriastradh uint8_t panelmode; // enum atom_dig_encoder_control_panelmode 29734e390cabSriastradh uint8_t reserved1; 29744e390cabSriastradh uint32_t reserved2[2]; 29754e390cabSriastradh }; 29764e390cabSriastradh 29774e390cabSriastradh struct dig_encoder_generic_cmd_parameters_v1_5 29784e390cabSriastradh { 29794e390cabSriastradh uint8_t digid; // 0~6 map to DIG0~DIG6 enum atom_dig_encoder_control_v5_digid 29804e390cabSriastradh uint8_t action; // = rest of generic encoder command which does not carry any parameters 29814e390cabSriastradh uint8_t reserved1[2]; 29824e390cabSriastradh uint32_t reserved2[2]; 29834e390cabSriastradh }; 29844e390cabSriastradh 29854e390cabSriastradh union dig_encoder_control_parameters_v1_5 29864e390cabSriastradh { 29874e390cabSriastradh struct dig_encoder_generic_cmd_parameters_v1_5 cmd_param; 29884e390cabSriastradh struct dig_encoder_stream_setup_parameters_v1_5 stream_param; 29894e390cabSriastradh struct dig_encoder_link_setup_parameters_v1_5 link_param; 29904e390cabSriastradh struct dp_panel_mode_set_parameters_v1_5 dppanel_param; 29914e390cabSriastradh }; 29924e390cabSriastradh 29934e390cabSriastradh /* 29944e390cabSriastradh *************************************************************************** 29954e390cabSriastradh Structures used by dig1transmittercontrol 29964e390cabSriastradh *************************************************************************** 29974e390cabSriastradh */ 29984e390cabSriastradh struct dig_transmitter_control_parameters_v1_6 29994e390cabSriastradh { 30004e390cabSriastradh uint8_t phyid; // 0=UNIPHYA, 1=UNIPHYB, 2=UNIPHYC, 3=UNIPHYD, 4= UNIPHYE 5=UNIPHYF 30014e390cabSriastradh uint8_t action; // define as ATOM_TRANSMITER_ACTION_xxx 30024e390cabSriastradh union { 30034e390cabSriastradh uint8_t digmode; // enum atom_encode_mode_def 30044e390cabSriastradh uint8_t dplaneset; // DP voltage swing and pre-emphasis value defined in DPCD DP_LANE_SET, "DP_LANE_SET__xDB_y_zV" 30054e390cabSriastradh } mode_laneset; 30064e390cabSriastradh uint8_t lanenum; // Lane number 1, 2, 4, 8 30074e390cabSriastradh uint32_t symclk_10khz; // Symbol Clock in 10Khz 30084e390cabSriastradh uint8_t hpdsel; // =1: HPD1, =2: HPD2, .... =6: HPD6, =0: HPD is not assigned 30094e390cabSriastradh uint8_t digfe_sel; // DIG stream( front-end ) selection, bit0 means DIG0 FE is enable, 30104e390cabSriastradh uint8_t connobj_id; // Connector Object Id defined in ObjectId.h 30114e390cabSriastradh uint8_t reserved; 30124e390cabSriastradh uint32_t reserved1; 30134e390cabSriastradh }; 30144e390cabSriastradh 30154e390cabSriastradh struct dig_transmitter_control_ps_allocation_v1_6 30164e390cabSriastradh { 30174e390cabSriastradh struct dig_transmitter_control_parameters_v1_6 param; 30184e390cabSriastradh uint32_t reserved[4]; 30194e390cabSriastradh }; 30204e390cabSriastradh 30214e390cabSriastradh //ucAction 30224e390cabSriastradh enum atom_dig_transmitter_control_action 30234e390cabSriastradh { 30244e390cabSriastradh ATOM_TRANSMITTER_ACTION_DISABLE = 0, 30254e390cabSriastradh ATOM_TRANSMITTER_ACTION_ENABLE = 1, 30264e390cabSriastradh ATOM_TRANSMITTER_ACTION_LCD_BLOFF = 2, 30274e390cabSriastradh ATOM_TRANSMITTER_ACTION_LCD_BLON = 3, 30284e390cabSriastradh ATOM_TRANSMITTER_ACTION_BL_BRIGHTNESS_CONTROL = 4, 30294e390cabSriastradh ATOM_TRANSMITTER_ACTION_LCD_SELFTEST_START = 5, 30304e390cabSriastradh ATOM_TRANSMITTER_ACTION_LCD_SELFTEST_STOP = 6, 30314e390cabSriastradh ATOM_TRANSMITTER_ACTION_INIT = 7, 30324e390cabSriastradh ATOM_TRANSMITTER_ACTION_DISABLE_OUTPUT = 8, 30334e390cabSriastradh ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT = 9, 30344e390cabSriastradh ATOM_TRANSMITTER_ACTION_SETUP = 10, 30354e390cabSriastradh ATOM_TRANSMITTER_ACTION_SETUP_VSEMPH = 11, 30364e390cabSriastradh ATOM_TRANSMITTER_ACTION_POWER_ON = 12, 30374e390cabSriastradh ATOM_TRANSMITTER_ACTION_POWER_OFF = 13, 30384e390cabSriastradh }; 30394e390cabSriastradh 30404e390cabSriastradh // digfe_sel 30414e390cabSriastradh enum atom_dig_transmitter_control_digfe_sel 30424e390cabSriastradh { 30434e390cabSriastradh ATOM_TRANMSITTER_V6__DIGA_SEL = 0x01, 30444e390cabSriastradh ATOM_TRANMSITTER_V6__DIGB_SEL = 0x02, 30454e390cabSriastradh ATOM_TRANMSITTER_V6__DIGC_SEL = 0x04, 30464e390cabSriastradh ATOM_TRANMSITTER_V6__DIGD_SEL = 0x08, 30474e390cabSriastradh ATOM_TRANMSITTER_V6__DIGE_SEL = 0x10, 30484e390cabSriastradh ATOM_TRANMSITTER_V6__DIGF_SEL = 0x20, 30494e390cabSriastradh ATOM_TRANMSITTER_V6__DIGG_SEL = 0x40, 30504e390cabSriastradh }; 30514e390cabSriastradh 30524e390cabSriastradh 30534e390cabSriastradh //ucHPDSel 30544e390cabSriastradh enum atom_dig_transmitter_control_hpd_sel 30554e390cabSriastradh { 30564e390cabSriastradh ATOM_TRANSMITTER_V6_NO_HPD_SEL = 0x00, 30574e390cabSriastradh ATOM_TRANSMITTER_V6_HPD1_SEL = 0x01, 30584e390cabSriastradh ATOM_TRANSMITTER_V6_HPD2_SEL = 0x02, 30594e390cabSriastradh ATOM_TRANSMITTER_V6_HPD3_SEL = 0x03, 30604e390cabSriastradh ATOM_TRANSMITTER_V6_HPD4_SEL = 0x04, 30614e390cabSriastradh ATOM_TRANSMITTER_V6_HPD5_SEL = 0x05, 30624e390cabSriastradh ATOM_TRANSMITTER_V6_HPD6_SEL = 0x06, 30634e390cabSriastradh }; 30644e390cabSriastradh 30654e390cabSriastradh // ucDPLaneSet 30664e390cabSriastradh enum atom_dig_transmitter_control_dplaneset 30674e390cabSriastradh { 30684e390cabSriastradh DP_LANE_SET__0DB_0_4V = 0x00, 30694e390cabSriastradh DP_LANE_SET__0DB_0_6V = 0x01, 30704e390cabSriastradh DP_LANE_SET__0DB_0_8V = 0x02, 30714e390cabSriastradh DP_LANE_SET__0DB_1_2V = 0x03, 30724e390cabSriastradh DP_LANE_SET__3_5DB_0_4V = 0x08, 30734e390cabSriastradh DP_LANE_SET__3_5DB_0_6V = 0x09, 30744e390cabSriastradh DP_LANE_SET__3_5DB_0_8V = 0x0a, 30754e390cabSriastradh DP_LANE_SET__6DB_0_4V = 0x10, 30764e390cabSriastradh DP_LANE_SET__6DB_0_6V = 0x11, 30774e390cabSriastradh DP_LANE_SET__9_5DB_0_4V = 0x18, 30784e390cabSriastradh }; 30794e390cabSriastradh 30804e390cabSriastradh 30814e390cabSriastradh 30824e390cabSriastradh /****************************************************************************/ 30834e390cabSriastradh // Structures used by ExternalEncoderControl V2.4 30844e390cabSriastradh /****************************************************************************/ 30854e390cabSriastradh 30864e390cabSriastradh struct external_encoder_control_parameters_v2_4 30874e390cabSriastradh { 30884e390cabSriastradh uint16_t pixelclock_10khz; // pixel clock in 10Khz, valid when ucAction=SETUP/ENABLE_OUTPUT 30894e390cabSriastradh uint8_t config; // indicate which encoder, and DP link rate when ucAction = SETUP/ENABLE_OUTPUT 30904e390cabSriastradh uint8_t action; // 30914e390cabSriastradh uint8_t encodermode; // encoder mode, only used when ucAction = SETUP/ENABLE_OUTPUT 30924e390cabSriastradh uint8_t lanenum; // lane number, only used when ucAction = SETUP/ENABLE_OUTPUT 30934e390cabSriastradh uint8_t bitpercolor; // output bit per color, only valid when ucAction = SETUP/ENABLE_OUTPUT and ucEncodeMode= DP 30944e390cabSriastradh uint8_t hpd_id; 30954e390cabSriastradh }; 30964e390cabSriastradh 30974e390cabSriastradh 30984e390cabSriastradh // ucAction 30994e390cabSriastradh enum external_encoder_control_action_def 31004e390cabSriastradh { 31014e390cabSriastradh EXTERNAL_ENCODER_ACTION_V3_DISABLE_OUTPUT = 0x00, 31024e390cabSriastradh EXTERNAL_ENCODER_ACTION_V3_ENABLE_OUTPUT = 0x01, 31034e390cabSriastradh EXTERNAL_ENCODER_ACTION_V3_ENCODER_INIT = 0x07, 31044e390cabSriastradh EXTERNAL_ENCODER_ACTION_V3_ENCODER_SETUP = 0x0f, 31054e390cabSriastradh EXTERNAL_ENCODER_ACTION_V3_ENCODER_BLANKING_OFF = 0x10, 31064e390cabSriastradh EXTERNAL_ENCODER_ACTION_V3_ENCODER_BLANKING = 0x11, 31074e390cabSriastradh EXTERNAL_ENCODER_ACTION_V3_DACLOAD_DETECTION = 0x12, 31084e390cabSriastradh EXTERNAL_ENCODER_ACTION_V3_DDC_SETUP = 0x14, 31094e390cabSriastradh }; 31104e390cabSriastradh 31114e390cabSriastradh // ucConfig 31124e390cabSriastradh enum external_encoder_control_v2_4_config_def 31134e390cabSriastradh { 31144e390cabSriastradh EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_MASK = 0x03, 31154e390cabSriastradh EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_1_62GHZ = 0x00, 31164e390cabSriastradh EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_2_70GHZ = 0x01, 31174e390cabSriastradh EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_5_40GHZ = 0x02, 31184e390cabSriastradh EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_3_24GHZ = 0x03, 31194e390cabSriastradh EXTERNAL_ENCODER_CONFIG_V3_ENCODER_SEL_MAKS = 0x70, 31204e390cabSriastradh EXTERNAL_ENCODER_CONFIG_V3_ENCODER1 = 0x00, 31214e390cabSriastradh EXTERNAL_ENCODER_CONFIG_V3_ENCODER2 = 0x10, 31224e390cabSriastradh EXTERNAL_ENCODER_CONFIG_V3_ENCODER3 = 0x20, 31234e390cabSriastradh }; 31244e390cabSriastradh 31254e390cabSriastradh struct external_encoder_control_ps_allocation_v2_4 31264e390cabSriastradh { 31274e390cabSriastradh struct external_encoder_control_parameters_v2_4 sExtEncoder; 31284e390cabSriastradh uint32_t reserved[2]; 31294e390cabSriastradh }; 31304e390cabSriastradh 31314e390cabSriastradh 31324e390cabSriastradh /* 31334e390cabSriastradh *************************************************************************** 31344e390cabSriastradh AMD ACPI Table 31354e390cabSriastradh 31364e390cabSriastradh *************************************************************************** 31374e390cabSriastradh */ 31384e390cabSriastradh 31394e390cabSriastradh struct amd_acpi_description_header{ 31404e390cabSriastradh uint32_t signature; 31414e390cabSriastradh uint32_t tableLength; //Length 31424e390cabSriastradh uint8_t revision; 31434e390cabSriastradh uint8_t checksum; 31444e390cabSriastradh uint8_t oemId[6]; 31454e390cabSriastradh uint8_t oemTableId[8]; //UINT64 OemTableId; 31464e390cabSriastradh uint32_t oemRevision; 31474e390cabSriastradh uint32_t creatorId; 31484e390cabSriastradh uint32_t creatorRevision; 31494e390cabSriastradh }; 31504e390cabSriastradh 31514e390cabSriastradh struct uefi_acpi_vfct{ 31524e390cabSriastradh struct amd_acpi_description_header sheader; 31534e390cabSriastradh uint8_t tableUUID[16]; //0x24 31544e390cabSriastradh uint32_t vbiosimageoffset; //0x34. Offset to the first GOP_VBIOS_CONTENT block from the beginning of the stucture. 31554e390cabSriastradh uint32_t lib1Imageoffset; //0x38. Offset to the first GOP_LIB1_CONTENT block from the beginning of the stucture. 31564e390cabSriastradh uint32_t reserved[4]; //0x3C 31574e390cabSriastradh }; 31584e390cabSriastradh 31594e390cabSriastradh struct vfct_image_header{ 31604e390cabSriastradh uint32_t pcibus; //0x4C 31614e390cabSriastradh uint32_t pcidevice; //0x50 31624e390cabSriastradh uint32_t pcifunction; //0x54 31634e390cabSriastradh uint16_t vendorid; //0x58 31644e390cabSriastradh uint16_t deviceid; //0x5A 31654e390cabSriastradh uint16_t ssvid; //0x5C 31664e390cabSriastradh uint16_t ssid; //0x5E 31674e390cabSriastradh uint32_t revision; //0x60 31684e390cabSriastradh uint32_t imagelength; //0x64 31694e390cabSriastradh }; 31704e390cabSriastradh 31714e390cabSriastradh 31724e390cabSriastradh struct gop_vbios_content { 31734e390cabSriastradh struct vfct_image_header vbiosheader; 31744e390cabSriastradh uint8_t vbioscontent[1]; 31754e390cabSriastradh }; 31764e390cabSriastradh 31774e390cabSriastradh struct gop_lib1_content { 31784e390cabSriastradh struct vfct_image_header lib1header; 31794e390cabSriastradh uint8_t lib1content[1]; 31804e390cabSriastradh }; 31814e390cabSriastradh 31824e390cabSriastradh 31834e390cabSriastradh 31844e390cabSriastradh /* 31854e390cabSriastradh *************************************************************************** 31864e390cabSriastradh Scratch Register definitions 31874e390cabSriastradh Each number below indicates which scratch regiser request, Active and 31884e390cabSriastradh Connect all share the same definitions as display_device_tag defines 31894e390cabSriastradh *************************************************************************** 31904e390cabSriastradh */ 31914e390cabSriastradh 31924e390cabSriastradh enum scratch_register_def{ 31934e390cabSriastradh ATOM_DEVICE_CONNECT_INFO_DEF = 0, 31944e390cabSriastradh ATOM_BL_BRI_LEVEL_INFO_DEF = 2, 31954e390cabSriastradh ATOM_ACTIVE_INFO_DEF = 3, 31964e390cabSriastradh ATOM_LCD_INFO_DEF = 4, 31974e390cabSriastradh ATOM_DEVICE_REQ_INFO_DEF = 5, 31984e390cabSriastradh ATOM_ACC_CHANGE_INFO_DEF = 6, 31994e390cabSriastradh ATOM_PRE_OS_MODE_INFO_DEF = 7, 32004e390cabSriastradh ATOM_PRE_OS_ASSERTION_DEF = 8, //For GOP to record a 32bit assertion code, this is enabled by default in prodution GOP drivers. 32014e390cabSriastradh ATOM_INTERNAL_TIMER_INFO_DEF = 10, 32024e390cabSriastradh }; 32034e390cabSriastradh 32044e390cabSriastradh enum scratch_device_connect_info_bit_def{ 32054e390cabSriastradh ATOM_DISPLAY_LCD1_CONNECT =0x0002, 32064e390cabSriastradh ATOM_DISPLAY_DFP1_CONNECT =0x0008, 32074e390cabSriastradh ATOM_DISPLAY_DFP2_CONNECT =0x0080, 32084e390cabSriastradh ATOM_DISPLAY_DFP3_CONNECT =0x0200, 32094e390cabSriastradh ATOM_DISPLAY_DFP4_CONNECT =0x0400, 32104e390cabSriastradh ATOM_DISPLAY_DFP5_CONNECT =0x0800, 32114e390cabSriastradh ATOM_DISPLAY_DFP6_CONNECT =0x0040, 32124e390cabSriastradh ATOM_DISPLAY_DFPx_CONNECT =0x0ec8, 32134e390cabSriastradh ATOM_CONNECT_INFO_DEVICE_MASK =0x0fff, 32144e390cabSriastradh }; 32154e390cabSriastradh 32164e390cabSriastradh enum scratch_bl_bri_level_info_bit_def{ 32174e390cabSriastradh ATOM_CURRENT_BL_LEVEL_SHIFT =0x8, 32184e390cabSriastradh #ifndef _H2INC 32194e390cabSriastradh ATOM_CURRENT_BL_LEVEL_MASK =0x0000ff00, 32204e390cabSriastradh ATOM_DEVICE_DPMS_STATE =0x00010000, 32214e390cabSriastradh #endif 32224e390cabSriastradh }; 32234e390cabSriastradh 32244e390cabSriastradh enum scratch_active_info_bits_def{ 32254e390cabSriastradh ATOM_DISPLAY_LCD1_ACTIVE =0x0002, 32264e390cabSriastradh ATOM_DISPLAY_DFP1_ACTIVE =0x0008, 32274e390cabSriastradh ATOM_DISPLAY_DFP2_ACTIVE =0x0080, 32284e390cabSriastradh ATOM_DISPLAY_DFP3_ACTIVE =0x0200, 32294e390cabSriastradh ATOM_DISPLAY_DFP4_ACTIVE =0x0400, 32304e390cabSriastradh ATOM_DISPLAY_DFP5_ACTIVE =0x0800, 32314e390cabSriastradh ATOM_DISPLAY_DFP6_ACTIVE =0x0040, 32324e390cabSriastradh ATOM_ACTIVE_INFO_DEVICE_MASK =0x0fff, 32334e390cabSriastradh }; 32344e390cabSriastradh 32354e390cabSriastradh enum scratch_device_req_info_bits_def{ 32364e390cabSriastradh ATOM_DISPLAY_LCD1_REQ =0x0002, 32374e390cabSriastradh ATOM_DISPLAY_DFP1_REQ =0x0008, 32384e390cabSriastradh ATOM_DISPLAY_DFP2_REQ =0x0080, 32394e390cabSriastradh ATOM_DISPLAY_DFP3_REQ =0x0200, 32404e390cabSriastradh ATOM_DISPLAY_DFP4_REQ =0x0400, 32414e390cabSriastradh ATOM_DISPLAY_DFP5_REQ =0x0800, 32424e390cabSriastradh ATOM_DISPLAY_DFP6_REQ =0x0040, 32434e390cabSriastradh ATOM_REQ_INFO_DEVICE_MASK =0x0fff, 32444e390cabSriastradh }; 32454e390cabSriastradh 32464e390cabSriastradh enum scratch_acc_change_info_bitshift_def{ 32474e390cabSriastradh ATOM_ACC_CHANGE_ACC_MODE_SHIFT =4, 32484e390cabSriastradh ATOM_ACC_CHANGE_LID_STATUS_SHIFT =6, 32494e390cabSriastradh }; 32504e390cabSriastradh 32514e390cabSriastradh enum scratch_acc_change_info_bits_def{ 32524e390cabSriastradh ATOM_ACC_CHANGE_ACC_MODE =0x00000010, 32534e390cabSriastradh ATOM_ACC_CHANGE_LID_STATUS =0x00000040, 32544e390cabSriastradh }; 32554e390cabSriastradh 32564e390cabSriastradh enum scratch_pre_os_mode_info_bits_def{ 32574e390cabSriastradh ATOM_PRE_OS_MODE_MASK =0x00000003, 32584e390cabSriastradh ATOM_PRE_OS_MODE_VGA =0x00000000, 32594e390cabSriastradh ATOM_PRE_OS_MODE_VESA =0x00000001, 32604e390cabSriastradh ATOM_PRE_OS_MODE_GOP =0x00000002, 32614e390cabSriastradh ATOM_PRE_OS_MODE_PIXEL_DEPTH =0x0000000C, 32624e390cabSriastradh ATOM_PRE_OS_MODE_PIXEL_FORMAT_MASK=0x000000F0, 32634e390cabSriastradh ATOM_PRE_OS_MODE_8BIT_PAL_EN =0x00000100, 32644e390cabSriastradh ATOM_ASIC_INIT_COMPLETE =0x00000200, 32654e390cabSriastradh #ifndef _H2INC 32664e390cabSriastradh ATOM_PRE_OS_MODE_NUMBER_MASK =0xFFFF0000, 32674e390cabSriastradh #endif 32684e390cabSriastradh }; 32694e390cabSriastradh 32704e390cabSriastradh 32714e390cabSriastradh 32724e390cabSriastradh /* 32734e390cabSriastradh *************************************************************************** 32744e390cabSriastradh ATOM firmware ID header file 32754e390cabSriastradh !! Please keep it at end of the atomfirmware.h !! 32764e390cabSriastradh *************************************************************************** 32774e390cabSriastradh */ 32784e390cabSriastradh #include "atomfirmwareid.h" 32794e390cabSriastradh #pragma pack() 32804e390cabSriastradh 32814e390cabSriastradh #endif 32824e390cabSriastradh 3283