xref: /dflybsd-src/sys/dev/drm/amd/include/atomfirmware.h (revision b843c749addef9340ee7d4e250b09fdd492602a1)
1*b843c749SSergey Zigachev /****************************************************************************\
2*b843c749SSergey Zigachev *
3*b843c749SSergey Zigachev *  File Name      atomfirmware.h
4*b843c749SSergey Zigachev *  Project        This is an interface header file between atombios and OS GPU drivers for SoC15 products
5*b843c749SSergey Zigachev *
6*b843c749SSergey Zigachev *  Description    header file of general definitions for OS nd pre-OS video drivers
7*b843c749SSergey Zigachev *
8*b843c749SSergey Zigachev *  Copyright 2014 Advanced Micro Devices, Inc.
9*b843c749SSergey Zigachev *
10*b843c749SSergey Zigachev * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
11*b843c749SSergey Zigachev * and associated documentation files (the "Software"), to deal in the Software without restriction,
12*b843c749SSergey Zigachev * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
13*b843c749SSergey Zigachev * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
14*b843c749SSergey Zigachev * subject to the following conditions:
15*b843c749SSergey Zigachev *
16*b843c749SSergey Zigachev * The above copyright notice and this permission notice shall be included in all copies or substantial
17*b843c749SSergey Zigachev * portions of the Software.
18*b843c749SSergey Zigachev *
19*b843c749SSergey Zigachev * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20*b843c749SSergey Zigachev * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21*b843c749SSergey Zigachev * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
22*b843c749SSergey Zigachev * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
23*b843c749SSergey Zigachev * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
24*b843c749SSergey Zigachev * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
25*b843c749SSergey Zigachev * OTHER DEALINGS IN THE SOFTWARE.
26*b843c749SSergey Zigachev *
27*b843c749SSergey Zigachev \****************************************************************************/
28*b843c749SSergey Zigachev 
29*b843c749SSergey Zigachev /*IMPORTANT NOTES
30*b843c749SSergey Zigachev * If a change in VBIOS/Driver/Tool's interface is only needed for SoC15 and forward products, then the change is only needed in this atomfirmware.h header file.
31*b843c749SSergey Zigachev * If a change in VBIOS/Driver/Tool's interface is only needed for pre-SoC15 products, then the change is only needed in atombios.h header file.
32*b843c749SSergey Zigachev * If a change is needed for both pre and post SoC15 products, then the change has to be made separately and might be differently in both atomfirmware.h and atombios.h.
33*b843c749SSergey Zigachev */
34*b843c749SSergey Zigachev 
35*b843c749SSergey Zigachev #ifndef _ATOMFIRMWARE_H_
36*b843c749SSergey Zigachev #define _ATOMFIRMWARE_H_
37*b843c749SSergey Zigachev 
38*b843c749SSergey Zigachev enum  atom_bios_header_version_def{
39*b843c749SSergey Zigachev   ATOM_MAJOR_VERSION        =0x0003,
40*b843c749SSergey Zigachev   ATOM_MINOR_VERSION        =0x0003,
41*b843c749SSergey Zigachev };
42*b843c749SSergey Zigachev 
43*b843c749SSergey Zigachev #ifdef _H2INC
44*b843c749SSergey Zigachev   #ifndef uint32_t
45*b843c749SSergey Zigachev     typedef unsigned long uint32_t;
46*b843c749SSergey Zigachev   #endif
47*b843c749SSergey Zigachev 
48*b843c749SSergey Zigachev   #ifndef uint16_t
49*b843c749SSergey Zigachev     typedef unsigned short uint16_t;
50*b843c749SSergey Zigachev   #endif
51*b843c749SSergey Zigachev 
52*b843c749SSergey Zigachev   #ifndef uint8_t
53*b843c749SSergey Zigachev     typedef unsigned char uint8_t;
54*b843c749SSergey Zigachev   #endif
55*b843c749SSergey Zigachev #endif
56*b843c749SSergey Zigachev 
57*b843c749SSergey Zigachev enum atom_crtc_def{
58*b843c749SSergey Zigachev   ATOM_CRTC1      =0,
59*b843c749SSergey Zigachev   ATOM_CRTC2      =1,
60*b843c749SSergey Zigachev   ATOM_CRTC3      =2,
61*b843c749SSergey Zigachev   ATOM_CRTC4      =3,
62*b843c749SSergey Zigachev   ATOM_CRTC5      =4,
63*b843c749SSergey Zigachev   ATOM_CRTC6      =5,
64*b843c749SSergey Zigachev   ATOM_CRTC_INVALID  =0xff,
65*b843c749SSergey Zigachev };
66*b843c749SSergey Zigachev 
67*b843c749SSergey Zigachev enum atom_ppll_def{
68*b843c749SSergey Zigachev   ATOM_PPLL0          =2,
69*b843c749SSergey Zigachev   ATOM_GCK_DFS        =8,
70*b843c749SSergey Zigachev   ATOM_FCH_CLK        =9,
71*b843c749SSergey Zigachev   ATOM_DP_DTO         =11,
72*b843c749SSergey Zigachev   ATOM_COMBOPHY_PLL0  =20,
73*b843c749SSergey Zigachev   ATOM_COMBOPHY_PLL1  =21,
74*b843c749SSergey Zigachev   ATOM_COMBOPHY_PLL2  =22,
75*b843c749SSergey Zigachev   ATOM_COMBOPHY_PLL3  =23,
76*b843c749SSergey Zigachev   ATOM_COMBOPHY_PLL4  =24,
77*b843c749SSergey Zigachev   ATOM_COMBOPHY_PLL5  =25,
78*b843c749SSergey Zigachev   ATOM_PPLL_INVALID   =0xff,
79*b843c749SSergey Zigachev };
80*b843c749SSergey Zigachev 
81*b843c749SSergey Zigachev // define ASIC internal encoder id ( bit vector ), used for CRTC_SourceSel
82*b843c749SSergey Zigachev enum atom_dig_def{
83*b843c749SSergey Zigachev   ASIC_INT_DIG1_ENCODER_ID  =0x03,
84*b843c749SSergey Zigachev   ASIC_INT_DIG2_ENCODER_ID  =0x09,
85*b843c749SSergey Zigachev   ASIC_INT_DIG3_ENCODER_ID  =0x0a,
86*b843c749SSergey Zigachev   ASIC_INT_DIG4_ENCODER_ID  =0x0b,
87*b843c749SSergey Zigachev   ASIC_INT_DIG5_ENCODER_ID  =0x0c,
88*b843c749SSergey Zigachev   ASIC_INT_DIG6_ENCODER_ID  =0x0d,
89*b843c749SSergey Zigachev   ASIC_INT_DIG7_ENCODER_ID  =0x0e,
90*b843c749SSergey Zigachev };
91*b843c749SSergey Zigachev 
92*b843c749SSergey Zigachev //ucEncoderMode
93*b843c749SSergey Zigachev enum atom_encode_mode_def
94*b843c749SSergey Zigachev {
95*b843c749SSergey Zigachev   ATOM_ENCODER_MODE_DP          =0,
96*b843c749SSergey Zigachev   ATOM_ENCODER_MODE_DP_SST      =0,
97*b843c749SSergey Zigachev   ATOM_ENCODER_MODE_LVDS        =1,
98*b843c749SSergey Zigachev   ATOM_ENCODER_MODE_DVI         =2,
99*b843c749SSergey Zigachev   ATOM_ENCODER_MODE_HDMI        =3,
100*b843c749SSergey Zigachev   ATOM_ENCODER_MODE_DP_AUDIO    =5,
101*b843c749SSergey Zigachev   ATOM_ENCODER_MODE_DP_MST      =5,
102*b843c749SSergey Zigachev   ATOM_ENCODER_MODE_CRT         =15,
103*b843c749SSergey Zigachev   ATOM_ENCODER_MODE_DVO         =16,
104*b843c749SSergey Zigachev };
105*b843c749SSergey Zigachev 
106*b843c749SSergey Zigachev enum atom_encoder_refclk_src_def{
107*b843c749SSergey Zigachev   ENCODER_REFCLK_SRC_P1PLL      =0,
108*b843c749SSergey Zigachev   ENCODER_REFCLK_SRC_P2PLL      =1,
109*b843c749SSergey Zigachev   ENCODER_REFCLK_SRC_P3PLL      =2,
110*b843c749SSergey Zigachev   ENCODER_REFCLK_SRC_EXTCLK     =3,
111*b843c749SSergey Zigachev   ENCODER_REFCLK_SRC_INVALID    =0xff,
112*b843c749SSergey Zigachev };
113*b843c749SSergey Zigachev 
114*b843c749SSergey Zigachev enum atom_scaler_def{
115*b843c749SSergey Zigachev   ATOM_SCALER_DISABLE          =0,  /*scaler bypass mode, auto-center & no replication*/
116*b843c749SSergey Zigachev   ATOM_SCALER_CENTER           =1,  //For Fudo, it's bypass and auto-center & auto replication
117*b843c749SSergey Zigachev   ATOM_SCALER_EXPANSION        =2,  /*scaler expansion by 2 tap alpha blending mode*/
118*b843c749SSergey Zigachev };
119*b843c749SSergey Zigachev 
120*b843c749SSergey Zigachev enum atom_operation_def{
121*b843c749SSergey Zigachev   ATOM_DISABLE             = 0,
122*b843c749SSergey Zigachev   ATOM_ENABLE              = 1,
123*b843c749SSergey Zigachev   ATOM_INIT                = 7,
124*b843c749SSergey Zigachev   ATOM_GET_STATUS          = 8,
125*b843c749SSergey Zigachev };
126*b843c749SSergey Zigachev 
127*b843c749SSergey Zigachev enum atom_embedded_display_op_def{
128*b843c749SSergey Zigachev   ATOM_LCD_BL_OFF                = 2,
129*b843c749SSergey Zigachev   ATOM_LCD_BL_OM                 = 3,
130*b843c749SSergey Zigachev   ATOM_LCD_BL_BRIGHTNESS_CONTROL = 4,
131*b843c749SSergey Zigachev   ATOM_LCD_SELFTEST_START        = 5,
132*b843c749SSergey Zigachev   ATOM_LCD_SELFTEST_STOP         = 6,
133*b843c749SSergey Zigachev };
134*b843c749SSergey Zigachev 
135*b843c749SSergey Zigachev enum atom_spread_spectrum_mode{
136*b843c749SSergey Zigachev   ATOM_SS_CENTER_OR_DOWN_MODE_MASK  = 0x01,
137*b843c749SSergey Zigachev   ATOM_SS_DOWN_SPREAD_MODE          = 0x00,
138*b843c749SSergey Zigachev   ATOM_SS_CENTRE_SPREAD_MODE        = 0x01,
139*b843c749SSergey Zigachev   ATOM_INT_OR_EXT_SS_MASK           = 0x02,
140*b843c749SSergey Zigachev   ATOM_INTERNAL_SS_MASK             = 0x00,
141*b843c749SSergey Zigachev   ATOM_EXTERNAL_SS_MASK             = 0x02,
142*b843c749SSergey Zigachev };
143*b843c749SSergey Zigachev 
144*b843c749SSergey Zigachev /* define panel bit per color  */
145*b843c749SSergey Zigachev enum atom_panel_bit_per_color{
146*b843c749SSergey Zigachev   PANEL_BPC_UNDEFINE     =0x00,
147*b843c749SSergey Zigachev   PANEL_6BIT_PER_COLOR   =0x01,
148*b843c749SSergey Zigachev   PANEL_8BIT_PER_COLOR   =0x02,
149*b843c749SSergey Zigachev   PANEL_10BIT_PER_COLOR  =0x03,
150*b843c749SSergey Zigachev   PANEL_12BIT_PER_COLOR  =0x04,
151*b843c749SSergey Zigachev   PANEL_16BIT_PER_COLOR  =0x05,
152*b843c749SSergey Zigachev };
153*b843c749SSergey Zigachev 
154*b843c749SSergey Zigachev //ucVoltageType
155*b843c749SSergey Zigachev enum atom_voltage_type
156*b843c749SSergey Zigachev {
157*b843c749SSergey Zigachev   VOLTAGE_TYPE_VDDC = 1,
158*b843c749SSergey Zigachev   VOLTAGE_TYPE_MVDDC = 2,
159*b843c749SSergey Zigachev   VOLTAGE_TYPE_MVDDQ = 3,
160*b843c749SSergey Zigachev   VOLTAGE_TYPE_VDDCI = 4,
161*b843c749SSergey Zigachev   VOLTAGE_TYPE_VDDGFX = 5,
162*b843c749SSergey Zigachev   VOLTAGE_TYPE_PCC = 6,
163*b843c749SSergey Zigachev   VOLTAGE_TYPE_MVPP = 7,
164*b843c749SSergey Zigachev   VOLTAGE_TYPE_LEDDPM = 8,
165*b843c749SSergey Zigachev   VOLTAGE_TYPE_PCC_MVDD = 9,
166*b843c749SSergey Zigachev   VOLTAGE_TYPE_PCIE_VDDC = 10,
167*b843c749SSergey Zigachev   VOLTAGE_TYPE_PCIE_VDDR = 11,
168*b843c749SSergey Zigachev   VOLTAGE_TYPE_GENERIC_I2C_1 = 0x11,
169*b843c749SSergey Zigachev   VOLTAGE_TYPE_GENERIC_I2C_2 = 0x12,
170*b843c749SSergey Zigachev   VOLTAGE_TYPE_GENERIC_I2C_3 = 0x13,
171*b843c749SSergey Zigachev   VOLTAGE_TYPE_GENERIC_I2C_4 = 0x14,
172*b843c749SSergey Zigachev   VOLTAGE_TYPE_GENERIC_I2C_5 = 0x15,
173*b843c749SSergey Zigachev   VOLTAGE_TYPE_GENERIC_I2C_6 = 0x16,
174*b843c749SSergey Zigachev   VOLTAGE_TYPE_GENERIC_I2C_7 = 0x17,
175*b843c749SSergey Zigachev   VOLTAGE_TYPE_GENERIC_I2C_8 = 0x18,
176*b843c749SSergey Zigachev   VOLTAGE_TYPE_GENERIC_I2C_9 = 0x19,
177*b843c749SSergey Zigachev   VOLTAGE_TYPE_GENERIC_I2C_10 = 0x1A,
178*b843c749SSergey Zigachev };
179*b843c749SSergey Zigachev 
180*b843c749SSergey Zigachev enum atom_dgpu_vram_type{
181*b843c749SSergey Zigachev   ATOM_DGPU_VRAM_TYPE_GDDR5 = 0x50,
182*b843c749SSergey Zigachev   ATOM_DGPU_VRAM_TYPE_HBM   = 0x60,
183*b843c749SSergey Zigachev };
184*b843c749SSergey Zigachev 
185*b843c749SSergey Zigachev enum atom_dp_vs_preemph_def{
186*b843c749SSergey Zigachev   DP_VS_LEVEL0_PREEMPH_LEVEL0 = 0x00,
187*b843c749SSergey Zigachev   DP_VS_LEVEL1_PREEMPH_LEVEL0 = 0x01,
188*b843c749SSergey Zigachev   DP_VS_LEVEL2_PREEMPH_LEVEL0 = 0x02,
189*b843c749SSergey Zigachev   DP_VS_LEVEL3_PREEMPH_LEVEL0 = 0x03,
190*b843c749SSergey Zigachev   DP_VS_LEVEL0_PREEMPH_LEVEL1 = 0x08,
191*b843c749SSergey Zigachev   DP_VS_LEVEL1_PREEMPH_LEVEL1 = 0x09,
192*b843c749SSergey Zigachev   DP_VS_LEVEL2_PREEMPH_LEVEL1 = 0x0a,
193*b843c749SSergey Zigachev   DP_VS_LEVEL0_PREEMPH_LEVEL2 = 0x10,
194*b843c749SSergey Zigachev   DP_VS_LEVEL1_PREEMPH_LEVEL2 = 0x11,
195*b843c749SSergey Zigachev   DP_VS_LEVEL0_PREEMPH_LEVEL3 = 0x18,
196*b843c749SSergey Zigachev };
197*b843c749SSergey Zigachev 
198*b843c749SSergey Zigachev 
199*b843c749SSergey Zigachev /*
200*b843c749SSergey Zigachev enum atom_string_def{
201*b843c749SSergey Zigachev asic_bus_type_pcie_string = "PCI_EXPRESS",
202*b843c749SSergey Zigachev atom_fire_gl_string       = "FGL",
203*b843c749SSergey Zigachev atom_bios_string          = "ATOM"
204*b843c749SSergey Zigachev };
205*b843c749SSergey Zigachev */
206*b843c749SSergey Zigachev 
207*b843c749SSergey Zigachev #pragma pack(1)                          /* BIOS data must use byte aligment*/
208*b843c749SSergey Zigachev 
209*b843c749SSergey Zigachev enum atombios_image_offset{
210*b843c749SSergey Zigachev OFFSET_TO_ATOM_ROM_HEADER_POINTER          =0x00000048,
211*b843c749SSergey Zigachev OFFSET_TO_ATOM_ROM_IMAGE_SIZE              =0x00000002,
212*b843c749SSergey Zigachev OFFSET_TO_ATOMBIOS_ASIC_BUS_MEM_TYPE       =0x94,
213*b843c749SSergey Zigachev MAXSIZE_OF_ATOMBIOS_ASIC_BUS_MEM_TYPE      =20,  /*including the terminator 0x0!*/
214*b843c749SSergey Zigachev OFFSET_TO_GET_ATOMBIOS_NUMBER_OF_STRINGS   =0x2f,
215*b843c749SSergey Zigachev OFFSET_TO_GET_ATOMBIOS_STRING_START        =0x6e,
216*b843c749SSergey Zigachev };
217*b843c749SSergey Zigachev 
218*b843c749SSergey Zigachev /****************************************************************************
219*b843c749SSergey Zigachev * Common header for all tables (Data table, Command function).
220*b843c749SSergey Zigachev * Every table pointed in _ATOM_MASTER_DATA_TABLE has this common header.
221*b843c749SSergey Zigachev * And the pointer actually points to this header.
222*b843c749SSergey Zigachev ****************************************************************************/
223*b843c749SSergey Zigachev 
224*b843c749SSergey Zigachev struct atom_common_table_header
225*b843c749SSergey Zigachev {
226*b843c749SSergey Zigachev   uint16_t structuresize;
227*b843c749SSergey Zigachev   uint8_t  format_revision;   //mainly used for a hw function, when the parser is not backward compatible
228*b843c749SSergey Zigachev   uint8_t  content_revision;  //change it when a data table has a structure change, or a hw function has a input/output parameter change
229*b843c749SSergey Zigachev };
230*b843c749SSergey Zigachev 
231*b843c749SSergey Zigachev /****************************************************************************
232*b843c749SSergey Zigachev * Structure stores the ROM header.
233*b843c749SSergey Zigachev ****************************************************************************/
234*b843c749SSergey Zigachev struct atom_rom_header_v2_2
235*b843c749SSergey Zigachev {
236*b843c749SSergey Zigachev   struct atom_common_table_header table_header;
237*b843c749SSergey Zigachev   uint8_t  atom_bios_string[4];        //enum atom_string_def atom_bios_string;     //Signature to distinguish between Atombios and non-atombios,
238*b843c749SSergey Zigachev   uint16_t bios_segment_address;
239*b843c749SSergey Zigachev   uint16_t protectedmodeoffset;
240*b843c749SSergey Zigachev   uint16_t configfilenameoffset;
241*b843c749SSergey Zigachev   uint16_t crc_block_offset;
242*b843c749SSergey Zigachev   uint16_t vbios_bootupmessageoffset;
243*b843c749SSergey Zigachev   uint16_t int10_offset;
244*b843c749SSergey Zigachev   uint16_t pcibusdevinitcode;
245*b843c749SSergey Zigachev   uint16_t iobaseaddress;
246*b843c749SSergey Zigachev   uint16_t subsystem_vendor_id;
247*b843c749SSergey Zigachev   uint16_t subsystem_id;
248*b843c749SSergey Zigachev   uint16_t pci_info_offset;
249*b843c749SSergey Zigachev   uint16_t masterhwfunction_offset;      //Offest for SW to get all command function offsets, Don't change the position
250*b843c749SSergey Zigachev   uint16_t masterdatatable_offset;       //Offest for SW to get all data table offsets, Don't change the position
251*b843c749SSergey Zigachev   uint16_t reserved;
252*b843c749SSergey Zigachev   uint32_t pspdirtableoffset;
253*b843c749SSergey Zigachev };
254*b843c749SSergey Zigachev 
255*b843c749SSergey Zigachev /*==============================hw function portion======================================================================*/
256*b843c749SSergey Zigachev 
257*b843c749SSergey Zigachev 
258*b843c749SSergey Zigachev /****************************************************************************
259*b843c749SSergey Zigachev * Structures used in Command.mtb, each function name is not given here since those function could change from time to time
260*b843c749SSergey Zigachev * The real functionality of each function is associated with the parameter structure version when defined
261*b843c749SSergey Zigachev * For all internal cmd function definitions, please reference to atomstruct.h
262*b843c749SSergey Zigachev ****************************************************************************/
263*b843c749SSergey Zigachev struct atom_master_list_of_command_functions_v2_1{
264*b843c749SSergey Zigachev   uint16_t asic_init;                   //Function
265*b843c749SSergey Zigachev   uint16_t cmd_function1;               //used as an internal one
266*b843c749SSergey Zigachev   uint16_t cmd_function2;               //used as an internal one
267*b843c749SSergey Zigachev   uint16_t cmd_function3;               //used as an internal one
268*b843c749SSergey Zigachev   uint16_t digxencodercontrol;          //Function
269*b843c749SSergey Zigachev   uint16_t cmd_function5;               //used as an internal one
270*b843c749SSergey Zigachev   uint16_t cmd_function6;               //used as an internal one
271*b843c749SSergey Zigachev   uint16_t cmd_function7;               //used as an internal one
272*b843c749SSergey Zigachev   uint16_t cmd_function8;               //used as an internal one
273*b843c749SSergey Zigachev   uint16_t cmd_function9;               //used as an internal one
274*b843c749SSergey Zigachev   uint16_t setengineclock;              //Function
275*b843c749SSergey Zigachev   uint16_t setmemoryclock;              //Function
276*b843c749SSergey Zigachev   uint16_t setpixelclock;               //Function
277*b843c749SSergey Zigachev   uint16_t enabledisppowergating;       //Function
278*b843c749SSergey Zigachev   uint16_t cmd_function14;              //used as an internal one
279*b843c749SSergey Zigachev   uint16_t cmd_function15;              //used as an internal one
280*b843c749SSergey Zigachev   uint16_t cmd_function16;              //used as an internal one
281*b843c749SSergey Zigachev   uint16_t cmd_function17;              //used as an internal one
282*b843c749SSergey Zigachev   uint16_t cmd_function18;              //used as an internal one
283*b843c749SSergey Zigachev   uint16_t cmd_function19;              //used as an internal one
284*b843c749SSergey Zigachev   uint16_t cmd_function20;              //used as an internal one
285*b843c749SSergey Zigachev   uint16_t cmd_function21;              //used as an internal one
286*b843c749SSergey Zigachev   uint16_t cmd_function22;              //used as an internal one
287*b843c749SSergey Zigachev   uint16_t cmd_function23;              //used as an internal one
288*b843c749SSergey Zigachev   uint16_t cmd_function24;              //used as an internal one
289*b843c749SSergey Zigachev   uint16_t cmd_function25;              //used as an internal one
290*b843c749SSergey Zigachev   uint16_t cmd_function26;              //used as an internal one
291*b843c749SSergey Zigachev   uint16_t cmd_function27;              //used as an internal one
292*b843c749SSergey Zigachev   uint16_t cmd_function28;              //used as an internal one
293*b843c749SSergey Zigachev   uint16_t cmd_function29;              //used as an internal one
294*b843c749SSergey Zigachev   uint16_t cmd_function30;              //used as an internal one
295*b843c749SSergey Zigachev   uint16_t cmd_function31;              //used as an internal one
296*b843c749SSergey Zigachev   uint16_t cmd_function32;              //used as an internal one
297*b843c749SSergey Zigachev   uint16_t cmd_function33;              //used as an internal one
298*b843c749SSergey Zigachev   uint16_t blankcrtc;                   //Function
299*b843c749SSergey Zigachev   uint16_t enablecrtc;                  //Function
300*b843c749SSergey Zigachev   uint16_t cmd_function36;              //used as an internal one
301*b843c749SSergey Zigachev   uint16_t cmd_function37;              //used as an internal one
302*b843c749SSergey Zigachev   uint16_t cmd_function38;              //used as an internal one
303*b843c749SSergey Zigachev   uint16_t cmd_function39;              //used as an internal one
304*b843c749SSergey Zigachev   uint16_t cmd_function40;              //used as an internal one
305*b843c749SSergey Zigachev   uint16_t getsmuclockinfo;             //Function
306*b843c749SSergey Zigachev   uint16_t selectcrtc_source;           //Function
307*b843c749SSergey Zigachev   uint16_t cmd_function43;              //used as an internal one
308*b843c749SSergey Zigachev   uint16_t cmd_function44;              //used as an internal one
309*b843c749SSergey Zigachev   uint16_t cmd_function45;              //used as an internal one
310*b843c749SSergey Zigachev   uint16_t setdceclock;                 //Function
311*b843c749SSergey Zigachev   uint16_t getmemoryclock;              //Function
312*b843c749SSergey Zigachev   uint16_t getengineclock;              //Function
313*b843c749SSergey Zigachev   uint16_t setcrtc_usingdtdtiming;      //Function
314*b843c749SSergey Zigachev   uint16_t externalencodercontrol;      //Function
315*b843c749SSergey Zigachev   uint16_t cmd_function51;              //used as an internal one
316*b843c749SSergey Zigachev   uint16_t cmd_function52;              //used as an internal one
317*b843c749SSergey Zigachev   uint16_t cmd_function53;              //used as an internal one
318*b843c749SSergey Zigachev   uint16_t processi2cchanneltransaction;//Function
319*b843c749SSergey Zigachev   uint16_t cmd_function55;              //used as an internal one
320*b843c749SSergey Zigachev   uint16_t cmd_function56;              //used as an internal one
321*b843c749SSergey Zigachev   uint16_t cmd_function57;              //used as an internal one
322*b843c749SSergey Zigachev   uint16_t cmd_function58;              //used as an internal one
323*b843c749SSergey Zigachev   uint16_t cmd_function59;              //used as an internal one
324*b843c749SSergey Zigachev   uint16_t computegpuclockparam;        //Function
325*b843c749SSergey Zigachev   uint16_t cmd_function61;              //used as an internal one
326*b843c749SSergey Zigachev   uint16_t cmd_function62;              //used as an internal one
327*b843c749SSergey Zigachev   uint16_t dynamicmemorysettings;       //Function function
328*b843c749SSergey Zigachev   uint16_t memorytraining;              //Function function
329*b843c749SSergey Zigachev   uint16_t cmd_function65;              //used as an internal one
330*b843c749SSergey Zigachev   uint16_t cmd_function66;              //used as an internal one
331*b843c749SSergey Zigachev   uint16_t setvoltage;                  //Function
332*b843c749SSergey Zigachev   uint16_t cmd_function68;              //used as an internal one
333*b843c749SSergey Zigachev   uint16_t readefusevalue;              //Function
334*b843c749SSergey Zigachev   uint16_t cmd_function70;              //used as an internal one
335*b843c749SSergey Zigachev   uint16_t cmd_function71;              //used as an internal one
336*b843c749SSergey Zigachev   uint16_t cmd_function72;              //used as an internal one
337*b843c749SSergey Zigachev   uint16_t cmd_function73;              //used as an internal one
338*b843c749SSergey Zigachev   uint16_t cmd_function74;              //used as an internal one
339*b843c749SSergey Zigachev   uint16_t cmd_function75;              //used as an internal one
340*b843c749SSergey Zigachev   uint16_t dig1transmittercontrol;      //Function
341*b843c749SSergey Zigachev   uint16_t cmd_function77;              //used as an internal one
342*b843c749SSergey Zigachev   uint16_t processauxchanneltransaction;//Function
343*b843c749SSergey Zigachev   uint16_t cmd_function79;              //used as an internal one
344*b843c749SSergey Zigachev   uint16_t getvoltageinfo;              //Function
345*b843c749SSergey Zigachev };
346*b843c749SSergey Zigachev 
347*b843c749SSergey Zigachev struct atom_master_command_function_v2_1
348*b843c749SSergey Zigachev {
349*b843c749SSergey Zigachev   struct atom_common_table_header  table_header;
350*b843c749SSergey Zigachev   struct atom_master_list_of_command_functions_v2_1 listofcmdfunctions;
351*b843c749SSergey Zigachev };
352*b843c749SSergey Zigachev 
353*b843c749SSergey Zigachev /****************************************************************************
354*b843c749SSergey Zigachev * Structures used in every command function
355*b843c749SSergey Zigachev ****************************************************************************/
356*b843c749SSergey Zigachev struct atom_function_attribute
357*b843c749SSergey Zigachev {
358*b843c749SSergey Zigachev   uint16_t  ws_in_bytes:8;            //[7:0]=Size of workspace in Bytes (in multiple of a dword),
359*b843c749SSergey Zigachev   uint16_t  ps_in_bytes:7;            //[14:8]=Size of parameter space in Bytes (multiple of a dword),
360*b843c749SSergey Zigachev   uint16_t  updated_by_util:1;        //[15]=flag to indicate the function is updated by util
361*b843c749SSergey Zigachev };
362*b843c749SSergey Zigachev 
363*b843c749SSergey Zigachev 
364*b843c749SSergey Zigachev /****************************************************************************
365*b843c749SSergey Zigachev * Common header for all hw functions.
366*b843c749SSergey Zigachev * Every function pointed by _master_list_of_hw_function has this common header.
367*b843c749SSergey Zigachev * And the pointer actually points to this header.
368*b843c749SSergey Zigachev ****************************************************************************/
369*b843c749SSergey Zigachev struct atom_rom_hw_function_header
370*b843c749SSergey Zigachev {
371*b843c749SSergey Zigachev   struct atom_common_table_header func_header;
372*b843c749SSergey Zigachev   struct atom_function_attribute func_attrib;
373*b843c749SSergey Zigachev };
374*b843c749SSergey Zigachev 
375*b843c749SSergey Zigachev 
376*b843c749SSergey Zigachev /*==============================sw data table portion======================================================================*/
377*b843c749SSergey Zigachev /****************************************************************************
378*b843c749SSergey Zigachev * Structures used in data.mtb, each data table name is not given here since those data table could change from time to time
379*b843c749SSergey Zigachev * The real name of each table is given when its data structure version is defined
380*b843c749SSergey Zigachev ****************************************************************************/
381*b843c749SSergey Zigachev struct atom_master_list_of_data_tables_v2_1{
382*b843c749SSergey Zigachev   uint16_t utilitypipeline;               /* Offest for the utility to get parser info,Don't change this position!*/
383*b843c749SSergey Zigachev   uint16_t multimedia_info;
384*b843c749SSergey Zigachev   uint16_t smc_dpm_info;
385*b843c749SSergey Zigachev   uint16_t sw_datatable3;
386*b843c749SSergey Zigachev   uint16_t firmwareinfo;                  /* Shared by various SW components */
387*b843c749SSergey Zigachev   uint16_t sw_datatable5;
388*b843c749SSergey Zigachev   uint16_t lcd_info;                      /* Shared by various SW components */
389*b843c749SSergey Zigachev   uint16_t sw_datatable7;
390*b843c749SSergey Zigachev   uint16_t smu_info;
391*b843c749SSergey Zigachev   uint16_t sw_datatable9;
392*b843c749SSergey Zigachev   uint16_t sw_datatable10;
393*b843c749SSergey Zigachev   uint16_t vram_usagebyfirmware;          /* Shared by various SW components */
394*b843c749SSergey Zigachev   uint16_t gpio_pin_lut;                  /* Shared by various SW components */
395*b843c749SSergey Zigachev   uint16_t sw_datatable13;
396*b843c749SSergey Zigachev   uint16_t gfx_info;
397*b843c749SSergey Zigachev   uint16_t powerplayinfo;                 /* Shared by various SW components */
398*b843c749SSergey Zigachev   uint16_t sw_datatable16;
399*b843c749SSergey Zigachev   uint16_t sw_datatable17;
400*b843c749SSergey Zigachev   uint16_t sw_datatable18;
401*b843c749SSergey Zigachev   uint16_t sw_datatable19;
402*b843c749SSergey Zigachev   uint16_t sw_datatable20;
403*b843c749SSergey Zigachev   uint16_t sw_datatable21;
404*b843c749SSergey Zigachev   uint16_t displayobjectinfo;             /* Shared by various SW components */
405*b843c749SSergey Zigachev   uint16_t indirectioaccess;			  /* used as an internal one */
406*b843c749SSergey Zigachev   uint16_t umc_info;                      /* Shared by various SW components */
407*b843c749SSergey Zigachev   uint16_t sw_datatable25;
408*b843c749SSergey Zigachev   uint16_t sw_datatable26;
409*b843c749SSergey Zigachev   uint16_t dce_info;                      /* Shared by various SW components */
410*b843c749SSergey Zigachev   uint16_t vram_info;                     /* Shared by various SW components */
411*b843c749SSergey Zigachev   uint16_t sw_datatable29;
412*b843c749SSergey Zigachev   uint16_t integratedsysteminfo;          /* Shared by various SW components */
413*b843c749SSergey Zigachev   uint16_t asic_profiling_info;           /* Shared by various SW components */
414*b843c749SSergey Zigachev   uint16_t voltageobject_info;            /* shared by various SW components */
415*b843c749SSergey Zigachev   uint16_t sw_datatable33;
416*b843c749SSergey Zigachev   uint16_t sw_datatable34;
417*b843c749SSergey Zigachev };
418*b843c749SSergey Zigachev 
419*b843c749SSergey Zigachev 
420*b843c749SSergey Zigachev struct atom_master_data_table_v2_1
421*b843c749SSergey Zigachev {
422*b843c749SSergey Zigachev   struct atom_common_table_header table_header;
423*b843c749SSergey Zigachev   struct atom_master_list_of_data_tables_v2_1 listOfdatatables;
424*b843c749SSergey Zigachev };
425*b843c749SSergey Zigachev 
426*b843c749SSergey Zigachev 
427*b843c749SSergey Zigachev struct atom_dtd_format
428*b843c749SSergey Zigachev {
429*b843c749SSergey Zigachev   uint16_t  pixclk;
430*b843c749SSergey Zigachev   uint16_t  h_active;
431*b843c749SSergey Zigachev   uint16_t  h_blanking_time;
432*b843c749SSergey Zigachev   uint16_t  v_active;
433*b843c749SSergey Zigachev   uint16_t  v_blanking_time;
434*b843c749SSergey Zigachev   uint16_t  h_sync_offset;
435*b843c749SSergey Zigachev   uint16_t  h_sync_width;
436*b843c749SSergey Zigachev   uint16_t  v_sync_offset;
437*b843c749SSergey Zigachev   uint16_t  v_syncwidth;
438*b843c749SSergey Zigachev   uint16_t  reserved;
439*b843c749SSergey Zigachev   uint16_t  reserved0;
440*b843c749SSergey Zigachev   uint8_t   h_border;
441*b843c749SSergey Zigachev   uint8_t   v_border;
442*b843c749SSergey Zigachev   uint16_t  miscinfo;
443*b843c749SSergey Zigachev   uint8_t   atom_mode_id;
444*b843c749SSergey Zigachev   uint8_t   refreshrate;
445*b843c749SSergey Zigachev };
446*b843c749SSergey Zigachev 
447*b843c749SSergey Zigachev /* atom_dtd_format.modemiscinfo defintion */
448*b843c749SSergey Zigachev enum atom_dtd_format_modemiscinfo{
449*b843c749SSergey Zigachev   ATOM_HSYNC_POLARITY    = 0x0002,
450*b843c749SSergey Zigachev   ATOM_VSYNC_POLARITY    = 0x0004,
451*b843c749SSergey Zigachev   ATOM_H_REPLICATIONBY2  = 0x0010,
452*b843c749SSergey Zigachev   ATOM_V_REPLICATIONBY2  = 0x0020,
453*b843c749SSergey Zigachev   ATOM_INTERLACE         = 0x0080,
454*b843c749SSergey Zigachev   ATOM_COMPOSITESYNC     = 0x0040,
455*b843c749SSergey Zigachev };
456*b843c749SSergey Zigachev 
457*b843c749SSergey Zigachev 
458*b843c749SSergey Zigachev /* utilitypipeline
459*b843c749SSergey Zigachev  * 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.
460*b843c749SSergey Zigachev  * the location of it can't change
461*b843c749SSergey Zigachev */
462*b843c749SSergey Zigachev 
463*b843c749SSergey Zigachev 
464*b843c749SSergey Zigachev /*
465*b843c749SSergey Zigachev   ***************************************************************************
466*b843c749SSergey Zigachev     Data Table firmwareinfo  structure
467*b843c749SSergey Zigachev   ***************************************************************************
468*b843c749SSergey Zigachev */
469*b843c749SSergey Zigachev 
470*b843c749SSergey Zigachev struct atom_firmware_info_v3_1
471*b843c749SSergey Zigachev {
472*b843c749SSergey Zigachev   struct atom_common_table_header table_header;
473*b843c749SSergey Zigachev   uint32_t firmware_revision;
474*b843c749SSergey Zigachev   uint32_t bootup_sclk_in10khz;
475*b843c749SSergey Zigachev   uint32_t bootup_mclk_in10khz;
476*b843c749SSergey Zigachev   uint32_t firmware_capability;             // enum atombios_firmware_capability
477*b843c749SSergey Zigachev   uint32_t main_call_parser_entry;          /* direct address of main parser call in VBIOS binary. */
478*b843c749SSergey Zigachev   uint32_t bios_scratch_reg_startaddr;      // 1st bios scratch register dword address
479*b843c749SSergey Zigachev   uint16_t bootup_vddc_mv;
480*b843c749SSergey Zigachev   uint16_t bootup_vddci_mv;
481*b843c749SSergey Zigachev   uint16_t bootup_mvddc_mv;
482*b843c749SSergey Zigachev   uint16_t bootup_vddgfx_mv;
483*b843c749SSergey Zigachev   uint8_t  mem_module_id;
484*b843c749SSergey Zigachev   uint8_t  coolingsolution_id;              /*0: Air cooling; 1: Liquid cooling ... */
485*b843c749SSergey Zigachev   uint8_t  reserved1[2];
486*b843c749SSergey Zigachev   uint32_t mc_baseaddr_high;
487*b843c749SSergey Zigachev   uint32_t mc_baseaddr_low;
488*b843c749SSergey Zigachev   uint32_t reserved2[6];
489*b843c749SSergey Zigachev };
490*b843c749SSergey Zigachev 
491*b843c749SSergey Zigachev /* Total 32bit cap indication */
492*b843c749SSergey Zigachev enum atombios_firmware_capability
493*b843c749SSergey Zigachev {
494*b843c749SSergey Zigachev   ATOM_FIRMWARE_CAP_FIRMWARE_POSTED = 0x00000001,
495*b843c749SSergey Zigachev   ATOM_FIRMWARE_CAP_GPU_VIRTUALIZATION  = 0x00000002,
496*b843c749SSergey Zigachev   ATOM_FIRMWARE_CAP_WMI_SUPPORT  = 0x00000040,
497*b843c749SSergey Zigachev };
498*b843c749SSergey Zigachev 
499*b843c749SSergey Zigachev enum atom_cooling_solution_id{
500*b843c749SSergey Zigachev   AIR_COOLING    = 0x00,
501*b843c749SSergey Zigachev   LIQUID_COOLING = 0x01
502*b843c749SSergey Zigachev };
503*b843c749SSergey Zigachev 
504*b843c749SSergey Zigachev struct atom_firmware_info_v3_2 {
505*b843c749SSergey Zigachev   struct atom_common_table_header table_header;
506*b843c749SSergey Zigachev   uint32_t firmware_revision;
507*b843c749SSergey Zigachev   uint32_t bootup_sclk_in10khz;
508*b843c749SSergey Zigachev   uint32_t bootup_mclk_in10khz;
509*b843c749SSergey Zigachev   uint32_t firmware_capability;             // enum atombios_firmware_capability
510*b843c749SSergey Zigachev   uint32_t main_call_parser_entry;          /* direct address of main parser call in VBIOS binary. */
511*b843c749SSergey Zigachev   uint32_t bios_scratch_reg_startaddr;      // 1st bios scratch register dword address
512*b843c749SSergey Zigachev   uint16_t bootup_vddc_mv;
513*b843c749SSergey Zigachev   uint16_t bootup_vddci_mv;
514*b843c749SSergey Zigachev   uint16_t bootup_mvddc_mv;
515*b843c749SSergey Zigachev   uint16_t bootup_vddgfx_mv;
516*b843c749SSergey Zigachev   uint8_t  mem_module_id;
517*b843c749SSergey Zigachev   uint8_t  coolingsolution_id;              /*0: Air cooling; 1: Liquid cooling ... */
518*b843c749SSergey Zigachev   uint8_t  reserved1[2];
519*b843c749SSergey Zigachev   uint32_t mc_baseaddr_high;
520*b843c749SSergey Zigachev   uint32_t mc_baseaddr_low;
521*b843c749SSergey Zigachev   uint8_t  board_i2c_feature_id;            // enum of atom_board_i2c_feature_id_def
522*b843c749SSergey Zigachev   uint8_t  board_i2c_feature_gpio_id;       // i2c id find in gpio_lut data table gpio_id
523*b843c749SSergey Zigachev   uint8_t  board_i2c_feature_slave_addr;
524*b843c749SSergey Zigachev   uint8_t  reserved3;
525*b843c749SSergey Zigachev   uint16_t bootup_mvddq_mv;
526*b843c749SSergey Zigachev   uint16_t bootup_mvpp_mv;
527*b843c749SSergey Zigachev   uint32_t zfbstartaddrin16mb;
528*b843c749SSergey Zigachev   uint32_t reserved2[3];
529*b843c749SSergey Zigachev };
530*b843c749SSergey Zigachev 
531*b843c749SSergey Zigachev /*
532*b843c749SSergey Zigachev   ***************************************************************************
533*b843c749SSergey Zigachev     Data Table lcd_info  structure
534*b843c749SSergey Zigachev   ***************************************************************************
535*b843c749SSergey Zigachev */
536*b843c749SSergey Zigachev 
537*b843c749SSergey Zigachev struct lcd_info_v2_1
538*b843c749SSergey Zigachev {
539*b843c749SSergey Zigachev   struct  atom_common_table_header table_header;
540*b843c749SSergey Zigachev   struct  atom_dtd_format  lcd_timing;
541*b843c749SSergey Zigachev   uint16_t backlight_pwm;
542*b843c749SSergey Zigachev   uint16_t special_handle_cap;
543*b843c749SSergey Zigachev   uint16_t panel_misc;
544*b843c749SSergey Zigachev   uint16_t lvds_max_slink_pclk;
545*b843c749SSergey Zigachev   uint16_t lvds_ss_percentage;
546*b843c749SSergey Zigachev   uint16_t lvds_ss_rate_10hz;
547*b843c749SSergey Zigachev   uint8_t  pwr_on_digon_to_de;          /*all pwr sequence numbers below are in uint of 4ms*/
548*b843c749SSergey Zigachev   uint8_t  pwr_on_de_to_vary_bl;
549*b843c749SSergey Zigachev   uint8_t  pwr_down_vary_bloff_to_de;
550*b843c749SSergey Zigachev   uint8_t  pwr_down_de_to_digoff;
551*b843c749SSergey Zigachev   uint8_t  pwr_off_delay;
552*b843c749SSergey Zigachev   uint8_t  pwr_on_vary_bl_to_blon;
553*b843c749SSergey Zigachev   uint8_t  pwr_down_bloff_to_vary_bloff;
554*b843c749SSergey Zigachev   uint8_t  panel_bpc;
555*b843c749SSergey Zigachev   uint8_t  dpcd_edp_config_cap;
556*b843c749SSergey Zigachev   uint8_t  dpcd_max_link_rate;
557*b843c749SSergey Zigachev   uint8_t  dpcd_max_lane_count;
558*b843c749SSergey Zigachev   uint8_t  dpcd_max_downspread;
559*b843c749SSergey Zigachev   uint8_t  min_allowed_bl_level;
560*b843c749SSergey Zigachev   uint8_t  max_allowed_bl_level;
561*b843c749SSergey Zigachev   uint8_t  bootup_bl_level;
562*b843c749SSergey Zigachev   uint8_t  dplvdsrxid;
563*b843c749SSergey Zigachev   uint32_t reserved1[8];
564*b843c749SSergey Zigachev };
565*b843c749SSergey Zigachev 
566*b843c749SSergey Zigachev /* lcd_info_v2_1.panel_misc defintion */
567*b843c749SSergey Zigachev enum atom_lcd_info_panel_misc{
568*b843c749SSergey Zigachev   ATOM_PANEL_MISC_FPDI            =0x0002,
569*b843c749SSergey Zigachev };
570*b843c749SSergey Zigachev 
571*b843c749SSergey Zigachev //uceDPToLVDSRxId
572*b843c749SSergey Zigachev enum atom_lcd_info_dptolvds_rx_id
573*b843c749SSergey Zigachev {
574*b843c749SSergey Zigachev   eDP_TO_LVDS_RX_DISABLE                 = 0x00,       // no eDP->LVDS translator chip
575*b843c749SSergey Zigachev   eDP_TO_LVDS_COMMON_ID                  = 0x01,       // common eDP->LVDS translator chip without AMD SW init
576*b843c749SSergey Zigachev   eDP_TO_LVDS_REALTEK_ID                 = 0x02,       // Realtek tansaltor which require AMD SW init
577*b843c749SSergey Zigachev };
578*b843c749SSergey Zigachev 
579*b843c749SSergey Zigachev 
580*b843c749SSergey Zigachev /*
581*b843c749SSergey Zigachev   ***************************************************************************
582*b843c749SSergey Zigachev     Data Table gpio_pin_lut  structure
583*b843c749SSergey Zigachev   ***************************************************************************
584*b843c749SSergey Zigachev */
585*b843c749SSergey Zigachev 
586*b843c749SSergey Zigachev struct atom_gpio_pin_assignment
587*b843c749SSergey Zigachev {
588*b843c749SSergey Zigachev   uint32_t data_a_reg_index;
589*b843c749SSergey Zigachev   uint8_t  gpio_bitshift;
590*b843c749SSergey Zigachev   uint8_t  gpio_mask_bitshift;
591*b843c749SSergey Zigachev   uint8_t  gpio_id;
592*b843c749SSergey Zigachev   uint8_t  reserved;
593*b843c749SSergey Zigachev };
594*b843c749SSergey Zigachev 
595*b843c749SSergey Zigachev /* atom_gpio_pin_assignment.gpio_id definition */
596*b843c749SSergey Zigachev enum atom_gpio_pin_assignment_gpio_id {
597*b843c749SSergey Zigachev   I2C_HW_LANE_MUX        =0x0f, /* only valid when bit7=1 */
598*b843c749SSergey Zigachev   I2C_HW_ENGINE_ID_MASK  =0x70, /* only valid when bit7=1 */
599*b843c749SSergey Zigachev   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 */
600*b843c749SSergey Zigachev 
601*b843c749SSergey Zigachev   /* gpio_id pre-define id for multiple usage */
602*b843c749SSergey Zigachev   /* GPIO use to control PCIE_VDDC in certain SLT board */
603*b843c749SSergey Zigachev   PCIE_VDDC_CONTROL_GPIO_PINID = 56,
604*b843c749SSergey Zigachev   /* if PP_AC_DC_SWITCH_GPIO_PINID in Gpio_Pin_LutTable, AC/DC swithing feature is enable */
605*b843c749SSergey Zigachev   PP_AC_DC_SWITCH_GPIO_PINID = 60,
606*b843c749SSergey Zigachev   /* VDDC_REGULATOR_VRHOT_GPIO_PINID in Gpio_Pin_LutTable, VRHot feature is enable */
607*b843c749SSergey Zigachev   VDDC_VRHOT_GPIO_PINID = 61,
608*b843c749SSergey Zigachev   /*if VDDC_PCC_GPIO_PINID in GPIO_LUTable, Peak Current Control feature is enabled */
609*b843c749SSergey Zigachev   VDDC_PCC_GPIO_PINID = 62,
610*b843c749SSergey Zigachev   /* Only used on certain SLT/PA board to allow utility to cut Efuse. */
611*b843c749SSergey Zigachev   EFUSE_CUT_ENABLE_GPIO_PINID = 63,
612*b843c749SSergey Zigachev   /* ucGPIO=DRAM_SELF_REFRESH_GPIO_PIND uses  for memory self refresh (ucGPIO=0, DRAM self-refresh; ucGPIO= */
613*b843c749SSergey Zigachev   DRAM_SELF_REFRESH_GPIO_PINID = 64,
614*b843c749SSergey Zigachev   /* Thermal interrupt output->system thermal chip GPIO pin */
615*b843c749SSergey Zigachev   THERMAL_INT_OUTPUT_GPIO_PINID =65,
616*b843c749SSergey Zigachev };
617*b843c749SSergey Zigachev 
618*b843c749SSergey Zigachev 
619*b843c749SSergey Zigachev struct atom_gpio_pin_lut_v2_1
620*b843c749SSergey Zigachev {
621*b843c749SSergey Zigachev   struct  atom_common_table_header  table_header;
622*b843c749SSergey Zigachev   /*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  */
623*b843c749SSergey Zigachev   struct  atom_gpio_pin_assignment  gpio_pin[8];
624*b843c749SSergey Zigachev };
625*b843c749SSergey Zigachev 
626*b843c749SSergey Zigachev 
627*b843c749SSergey Zigachev /*
628*b843c749SSergey Zigachev   ***************************************************************************
629*b843c749SSergey Zigachev     Data Table vram_usagebyfirmware  structure
630*b843c749SSergey Zigachev   ***************************************************************************
631*b843c749SSergey Zigachev */
632*b843c749SSergey Zigachev 
633*b843c749SSergey Zigachev struct vram_usagebyfirmware_v2_1
634*b843c749SSergey Zigachev {
635*b843c749SSergey Zigachev   struct  atom_common_table_header  table_header;
636*b843c749SSergey Zigachev   uint32_t  start_address_in_kb;
637*b843c749SSergey Zigachev   uint16_t  used_by_firmware_in_kb;
638*b843c749SSergey Zigachev   uint16_t  used_by_driver_in_kb;
639*b843c749SSergey Zigachev };
640*b843c749SSergey Zigachev 
641*b843c749SSergey Zigachev 
642*b843c749SSergey Zigachev /*
643*b843c749SSergey Zigachev   ***************************************************************************
644*b843c749SSergey Zigachev     Data Table displayobjectinfo  structure
645*b843c749SSergey Zigachev   ***************************************************************************
646*b843c749SSergey Zigachev */
647*b843c749SSergey Zigachev 
648*b843c749SSergey Zigachev enum atom_object_record_type_id
649*b843c749SSergey Zigachev {
650*b843c749SSergey Zigachev   ATOM_I2C_RECORD_TYPE =1,
651*b843c749SSergey Zigachev   ATOM_HPD_INT_RECORD_TYPE =2,
652*b843c749SSergey Zigachev   ATOM_OBJECT_GPIO_CNTL_RECORD_TYPE =9,
653*b843c749SSergey Zigachev   ATOM_CONNECTOR_HPDPIN_LUT_RECORD_TYPE =16,
654*b843c749SSergey Zigachev   ATOM_CONNECTOR_AUXDDC_LUT_RECORD_TYPE =17,
655*b843c749SSergey Zigachev   ATOM_ENCODER_CAP_RECORD_TYPE=20,
656*b843c749SSergey Zigachev   ATOM_BRACKET_LAYOUT_RECORD_TYPE=21,
657*b843c749SSergey Zigachev   ATOM_CONNECTOR_FORCED_TMDS_CAP_RECORD_TYPE=22,
658*b843c749SSergey Zigachev   ATOM_RECORD_END_TYPE  =0xFF,
659*b843c749SSergey Zigachev };
660*b843c749SSergey Zigachev 
661*b843c749SSergey Zigachev struct atom_common_record_header
662*b843c749SSergey Zigachev {
663*b843c749SSergey Zigachev   uint8_t record_type;                      //An emun to indicate the record type
664*b843c749SSergey Zigachev   uint8_t record_size;                      //The size of the whole record in byte
665*b843c749SSergey Zigachev };
666*b843c749SSergey Zigachev 
667*b843c749SSergey Zigachev struct atom_i2c_record
668*b843c749SSergey Zigachev {
669*b843c749SSergey Zigachev   struct atom_common_record_header record_header;   //record_type = ATOM_I2C_RECORD_TYPE
670*b843c749SSergey Zigachev   uint8_t i2c_id;
671*b843c749SSergey Zigachev   uint8_t i2c_slave_addr;                   //The slave address, it's 0 when the record is attached to connector for DDC
672*b843c749SSergey Zigachev };
673*b843c749SSergey Zigachev 
674*b843c749SSergey Zigachev struct atom_hpd_int_record
675*b843c749SSergey Zigachev {
676*b843c749SSergey Zigachev   struct atom_common_record_header record_header;  //record_type = ATOM_HPD_INT_RECORD_TYPE
677*b843c749SSergey Zigachev   uint8_t  pin_id;              //Corresponding block in GPIO_PIN_INFO table gives the pin info
678*b843c749SSergey Zigachev   uint8_t  plugin_pin_state;
679*b843c749SSergey Zigachev };
680*b843c749SSergey Zigachev 
681*b843c749SSergey Zigachev // Bit maps for ATOM_ENCODER_CAP_RECORD.usEncoderCap
682*b843c749SSergey Zigachev enum atom_encoder_caps_def
683*b843c749SSergey Zigachev {
684*b843c749SSergey Zigachev   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
685*b843c749SSergey Zigachev   ATOM_ENCODER_CAP_RECORD_MST_EN                =0x01,         // from SI, this bit means DP MST is enable or not.
686*b843c749SSergey Zigachev   ATOM_ENCODER_CAP_RECORD_HBR2_EN               =0x02,         // DP1.2 HBR2 setting is qualified and HBR2 can be enabled
687*b843c749SSergey Zigachev   ATOM_ENCODER_CAP_RECORD_HDMI6Gbps_EN          =0x04,         // HDMI2.0 6Gbps enable or not.
688*b843c749SSergey Zigachev   ATOM_ENCODER_CAP_RECORD_HBR3_EN               =0x08,         // DP1.3 HBR3 is supported by board.
689*b843c749SSergey Zigachev };
690*b843c749SSergey Zigachev 
691*b843c749SSergey Zigachev struct  atom_encoder_caps_record
692*b843c749SSergey Zigachev {
693*b843c749SSergey Zigachev   struct atom_common_record_header record_header;  //record_type = ATOM_ENCODER_CAP_RECORD_TYPE
694*b843c749SSergey Zigachev   uint32_t  encodercaps;
695*b843c749SSergey Zigachev };
696*b843c749SSergey Zigachev 
697*b843c749SSergey Zigachev enum atom_connector_caps_def
698*b843c749SSergey Zigachev {
699*b843c749SSergey Zigachev   ATOM_CONNECTOR_CAP_INTERNAL_DISPLAY         = 0x01,        //a cap bit to indicate that this non-embedded display connector is an internal display
700*b843c749SSergey Zigachev   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
701*b843c749SSergey Zigachev };
702*b843c749SSergey Zigachev 
703*b843c749SSergey Zigachev struct atom_disp_connector_caps_record
704*b843c749SSergey Zigachev {
705*b843c749SSergey Zigachev   struct atom_common_record_header record_header;
706*b843c749SSergey Zigachev   uint32_t connectcaps;
707*b843c749SSergey Zigachev };
708*b843c749SSergey Zigachev 
709*b843c749SSergey Zigachev //The following generic object gpio pin control record type will replace JTAG_RECORD/FPGA_CONTROL_RECORD/DVI_EXT_INPUT_RECORD above gradually
710*b843c749SSergey Zigachev struct atom_gpio_pin_control_pair
711*b843c749SSergey Zigachev {
712*b843c749SSergey Zigachev   uint8_t gpio_id;               // GPIO_ID, find the corresponding ID in GPIO_LUT table
713*b843c749SSergey Zigachev   uint8_t gpio_pinstate;         // Pin state showing how to set-up the pin
714*b843c749SSergey Zigachev };
715*b843c749SSergey Zigachev 
716*b843c749SSergey Zigachev struct atom_object_gpio_cntl_record
717*b843c749SSergey Zigachev {
718*b843c749SSergey Zigachev   struct atom_common_record_header record_header;
719*b843c749SSergey Zigachev   uint8_t flag;                   // Future expnadibility
720*b843c749SSergey Zigachev   uint8_t number_of_pins;         // Number of GPIO pins used to control the object
721*b843c749SSergey Zigachev   struct atom_gpio_pin_control_pair gpio[1];              // the real gpio pin pair determined by number of pins ucNumberOfPins
722*b843c749SSergey Zigachev };
723*b843c749SSergey Zigachev 
724*b843c749SSergey Zigachev //Definitions for GPIO pin state
725*b843c749SSergey Zigachev enum atom_gpio_pin_control_pinstate_def
726*b843c749SSergey Zigachev {
727*b843c749SSergey Zigachev   GPIO_PIN_TYPE_INPUT             = 0x00,
728*b843c749SSergey Zigachev   GPIO_PIN_TYPE_OUTPUT            = 0x10,
729*b843c749SSergey Zigachev   GPIO_PIN_TYPE_HW_CONTROL        = 0x20,
730*b843c749SSergey Zigachev 
731*b843c749SSergey Zigachev //For GPIO_PIN_TYPE_OUTPUT the following is defined
732*b843c749SSergey Zigachev   GPIO_PIN_OUTPUT_STATE_MASK      = 0x01,
733*b843c749SSergey Zigachev   GPIO_PIN_OUTPUT_STATE_SHIFT     = 0,
734*b843c749SSergey Zigachev   GPIO_PIN_STATE_ACTIVE_LOW       = 0x0,
735*b843c749SSergey Zigachev   GPIO_PIN_STATE_ACTIVE_HIGH      = 0x1,
736*b843c749SSergey Zigachev };
737*b843c749SSergey Zigachev 
738*b843c749SSergey Zigachev // Indexes to GPIO array in GLSync record
739*b843c749SSergey Zigachev // GLSync record is for Frame Lock/Gen Lock feature.
740*b843c749SSergey Zigachev enum atom_glsync_record_gpio_index_def
741*b843c749SSergey Zigachev {
742*b843c749SSergey Zigachev   ATOM_GPIO_INDEX_GLSYNC_REFCLK    = 0,
743*b843c749SSergey Zigachev   ATOM_GPIO_INDEX_GLSYNC_HSYNC     = 1,
744*b843c749SSergey Zigachev   ATOM_GPIO_INDEX_GLSYNC_VSYNC     = 2,
745*b843c749SSergey Zigachev   ATOM_GPIO_INDEX_GLSYNC_SWAP_REQ  = 3,
746*b843c749SSergey Zigachev   ATOM_GPIO_INDEX_GLSYNC_SWAP_GNT  = 4,
747*b843c749SSergey Zigachev   ATOM_GPIO_INDEX_GLSYNC_INTERRUPT = 5,
748*b843c749SSergey Zigachev   ATOM_GPIO_INDEX_GLSYNC_V_RESET   = 6,
749*b843c749SSergey Zigachev   ATOM_GPIO_INDEX_GLSYNC_SWAP_CNTL = 7,
750*b843c749SSergey Zigachev   ATOM_GPIO_INDEX_GLSYNC_SWAP_SEL  = 8,
751*b843c749SSergey Zigachev   ATOM_GPIO_INDEX_GLSYNC_MAX       = 9,
752*b843c749SSergey Zigachev };
753*b843c749SSergey Zigachev 
754*b843c749SSergey Zigachev 
755*b843c749SSergey Zigachev struct atom_connector_hpdpin_lut_record     //record for ATOM_CONNECTOR_HPDPIN_LUT_RECORD_TYPE
756*b843c749SSergey Zigachev {
757*b843c749SSergey Zigachev   struct atom_common_record_header record_header;
758*b843c749SSergey Zigachev   uint8_t hpd_pin_map[8];
759*b843c749SSergey Zigachev };
760*b843c749SSergey Zigachev 
761*b843c749SSergey Zigachev struct atom_connector_auxddc_lut_record     //record for ATOM_CONNECTOR_AUXDDC_LUT_RECORD_TYPE
762*b843c749SSergey Zigachev {
763*b843c749SSergey Zigachev   struct atom_common_record_header record_header;
764*b843c749SSergey Zigachev   uint8_t aux_ddc_map[8];
765*b843c749SSergey Zigachev };
766*b843c749SSergey Zigachev 
767*b843c749SSergey Zigachev struct atom_connector_forced_tmds_cap_record
768*b843c749SSergey Zigachev {
769*b843c749SSergey Zigachev   struct atom_common_record_header record_header;
770*b843c749SSergey Zigachev   // override TMDS capability on this connector when it operate in TMDS mode.  usMaxTmdsClkRate = max TMDS Clock in Mhz/2.5
771*b843c749SSergey Zigachev   uint8_t  maxtmdsclkrate_in2_5mhz;
772*b843c749SSergey Zigachev   uint8_t  reserved;
773*b843c749SSergey Zigachev };
774*b843c749SSergey Zigachev 
775*b843c749SSergey Zigachev struct atom_connector_layout_info
776*b843c749SSergey Zigachev {
777*b843c749SSergey Zigachev   uint16_t connectorobjid;
778*b843c749SSergey Zigachev   uint8_t  connector_type;
779*b843c749SSergey Zigachev   uint8_t  position;
780*b843c749SSergey Zigachev };
781*b843c749SSergey Zigachev 
782*b843c749SSergey Zigachev // define ATOM_CONNECTOR_LAYOUT_INFO.ucConnectorType to describe the display connector size
783*b843c749SSergey Zigachev enum atom_connector_layout_info_connector_type_def
784*b843c749SSergey Zigachev {
785*b843c749SSergey Zigachev   CONNECTOR_TYPE_DVI_D                 = 1,
786*b843c749SSergey Zigachev 
787*b843c749SSergey Zigachev   CONNECTOR_TYPE_HDMI                  = 4,
788*b843c749SSergey Zigachev   CONNECTOR_TYPE_DISPLAY_PORT          = 5,
789*b843c749SSergey Zigachev   CONNECTOR_TYPE_MINI_DISPLAY_PORT     = 6,
790*b843c749SSergey Zigachev };
791*b843c749SSergey Zigachev 
792*b843c749SSergey Zigachev struct  atom_bracket_layout_record
793*b843c749SSergey Zigachev {
794*b843c749SSergey Zigachev   struct atom_common_record_header record_header;
795*b843c749SSergey Zigachev   uint8_t bracketlen;
796*b843c749SSergey Zigachev   uint8_t bracketwidth;
797*b843c749SSergey Zigachev   uint8_t conn_num;
798*b843c749SSergey Zigachev   uint8_t reserved;
799*b843c749SSergey Zigachev   struct atom_connector_layout_info  conn_info[1];
800*b843c749SSergey Zigachev };
801*b843c749SSergey Zigachev 
802*b843c749SSergey Zigachev enum atom_display_device_tag_def{
803*b843c749SSergey Zigachev   ATOM_DISPLAY_LCD1_SUPPORT            = 0x0002,  //an embedded display is either an LVDS or eDP signal type of display
804*b843c749SSergey Zigachev   ATOM_DISPLAY_DFP1_SUPPORT            = 0x0008,
805*b843c749SSergey Zigachev   ATOM_DISPLAY_DFP2_SUPPORT            = 0x0080,
806*b843c749SSergey Zigachev   ATOM_DISPLAY_DFP3_SUPPORT            = 0x0200,
807*b843c749SSergey Zigachev   ATOM_DISPLAY_DFP4_SUPPORT            = 0x0400,
808*b843c749SSergey Zigachev   ATOM_DISPLAY_DFP5_SUPPORT            = 0x0800,
809*b843c749SSergey Zigachev   ATOM_DISPLAY_DFP6_SUPPORT            = 0x0040,
810*b843c749SSergey Zigachev   ATOM_DISPLAY_DFPx_SUPPORT            = 0x0ec8,
811*b843c749SSergey Zigachev };
812*b843c749SSergey Zigachev 
813*b843c749SSergey Zigachev struct atom_display_object_path_v2
814*b843c749SSergey Zigachev {
815*b843c749SSergey Zigachev   uint16_t display_objid;                  //Connector Object ID or Misc Object ID
816*b843c749SSergey Zigachev   uint16_t disp_recordoffset;
817*b843c749SSergey Zigachev   uint16_t encoderobjid;                   //first encoder closer to the connector, could be either an external or intenal encoder
818*b843c749SSergey Zigachev   uint16_t extencoderobjid;                //2nd encoder after the first encoder, from the connector point of view;
819*b843c749SSergey Zigachev   uint16_t encoder_recordoffset;
820*b843c749SSergey Zigachev   uint16_t extencoder_recordoffset;
821*b843c749SSergey Zigachev   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
822*b843c749SSergey Zigachev   uint8_t  priority_id;
823*b843c749SSergey Zigachev   uint8_t  reserved;
824*b843c749SSergey Zigachev };
825*b843c749SSergey Zigachev 
826*b843c749SSergey Zigachev struct display_object_info_table_v1_4
827*b843c749SSergey Zigachev {
828*b843c749SSergey Zigachev   struct    atom_common_table_header  table_header;
829*b843c749SSergey Zigachev   uint16_t  supporteddevices;
830*b843c749SSergey Zigachev   uint8_t   number_of_path;
831*b843c749SSergey Zigachev   uint8_t   reserved;
832*b843c749SSergey Zigachev   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
833*b843c749SSergey Zigachev };
834*b843c749SSergey Zigachev 
835*b843c749SSergey Zigachev 
836*b843c749SSergey Zigachev /*
837*b843c749SSergey Zigachev   ***************************************************************************
838*b843c749SSergey Zigachev     Data Table dce_info  structure
839*b843c749SSergey Zigachev   ***************************************************************************
840*b843c749SSergey Zigachev */
841*b843c749SSergey Zigachev struct atom_display_controller_info_v4_1
842*b843c749SSergey Zigachev {
843*b843c749SSergey Zigachev   struct  atom_common_table_header  table_header;
844*b843c749SSergey Zigachev   uint32_t display_caps;
845*b843c749SSergey Zigachev   uint32_t bootup_dispclk_10khz;
846*b843c749SSergey Zigachev   uint16_t dce_refclk_10khz;
847*b843c749SSergey Zigachev   uint16_t i2c_engine_refclk_10khz;
848*b843c749SSergey Zigachev   uint16_t dvi_ss_percentage;       // in unit of 0.001%
849*b843c749SSergey Zigachev   uint16_t dvi_ss_rate_10hz;
850*b843c749SSergey Zigachev   uint16_t hdmi_ss_percentage;      // in unit of 0.001%
851*b843c749SSergey Zigachev   uint16_t hdmi_ss_rate_10hz;
852*b843c749SSergey Zigachev   uint16_t dp_ss_percentage;        // in unit of 0.001%
853*b843c749SSergey Zigachev   uint16_t dp_ss_rate_10hz;
854*b843c749SSergey Zigachev   uint8_t  dvi_ss_mode;             // enum of atom_spread_spectrum_mode
855*b843c749SSergey Zigachev   uint8_t  hdmi_ss_mode;            // enum of atom_spread_spectrum_mode
856*b843c749SSergey Zigachev   uint8_t  dp_ss_mode;              // enum of atom_spread_spectrum_mode
857*b843c749SSergey Zigachev   uint8_t  ss_reserved;
858*b843c749SSergey Zigachev   uint8_t  hardcode_mode_num;       // a hardcode mode number defined in StandardVESA_TimingTable when a CRT or DFP EDID is not available
859*b843c749SSergey Zigachev   uint8_t  reserved1[3];
860*b843c749SSergey Zigachev   uint16_t dpphy_refclk_10khz;
861*b843c749SSergey Zigachev   uint16_t reserved2;
862*b843c749SSergey Zigachev   uint8_t  dceip_min_ver;
863*b843c749SSergey Zigachev   uint8_t  dceip_max_ver;
864*b843c749SSergey Zigachev   uint8_t  max_disp_pipe_num;
865*b843c749SSergey Zigachev   uint8_t  max_vbios_active_disp_pipe_num;
866*b843c749SSergey Zigachev   uint8_t  max_ppll_num;
867*b843c749SSergey Zigachev   uint8_t  max_disp_phy_num;
868*b843c749SSergey Zigachev   uint8_t  max_aux_pairs;
869*b843c749SSergey Zigachev   uint8_t  remotedisplayconfig;
870*b843c749SSergey Zigachev   uint8_t  reserved3[8];
871*b843c749SSergey Zigachev };
872*b843c749SSergey Zigachev 
873*b843c749SSergey Zigachev 
874*b843c749SSergey Zigachev struct atom_display_controller_info_v4_2
875*b843c749SSergey Zigachev {
876*b843c749SSergey Zigachev   struct  atom_common_table_header  table_header;
877*b843c749SSergey Zigachev   uint32_t display_caps;
878*b843c749SSergey Zigachev   uint32_t bootup_dispclk_10khz;
879*b843c749SSergey Zigachev   uint16_t dce_refclk_10khz;
880*b843c749SSergey Zigachev   uint16_t i2c_engine_refclk_10khz;
881*b843c749SSergey Zigachev   uint16_t dvi_ss_percentage;       // in unit of 0.001%
882*b843c749SSergey Zigachev   uint16_t dvi_ss_rate_10hz;
883*b843c749SSergey Zigachev   uint16_t hdmi_ss_percentage;      // in unit of 0.001%
884*b843c749SSergey Zigachev   uint16_t hdmi_ss_rate_10hz;
885*b843c749SSergey Zigachev   uint16_t dp_ss_percentage;        // in unit of 0.001%
886*b843c749SSergey Zigachev   uint16_t dp_ss_rate_10hz;
887*b843c749SSergey Zigachev   uint8_t  dvi_ss_mode;             // enum of atom_spread_spectrum_mode
888*b843c749SSergey Zigachev   uint8_t  hdmi_ss_mode;            // enum of atom_spread_spectrum_mode
889*b843c749SSergey Zigachev   uint8_t  dp_ss_mode;              // enum of atom_spread_spectrum_mode
890*b843c749SSergey Zigachev   uint8_t  ss_reserved;
891*b843c749SSergey Zigachev   uint8_t  dfp_hardcode_mode_num;   // DFP hardcode mode number defined in StandardVESA_TimingTable when EDID is not available
892*b843c749SSergey Zigachev   uint8_t  dfp_hardcode_refreshrate;// DFP hardcode mode refreshrate defined in StandardVESA_TimingTable when EDID is not available
893*b843c749SSergey Zigachev   uint8_t  vga_hardcode_mode_num;   // VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable
894*b843c749SSergey Zigachev   uint8_t  vga_hardcode_refreshrate;// VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable
895*b843c749SSergey Zigachev   uint16_t dpphy_refclk_10khz;
896*b843c749SSergey Zigachev   uint16_t reserved2;
897*b843c749SSergey Zigachev   uint8_t  dcnip_min_ver;
898*b843c749SSergey Zigachev   uint8_t  dcnip_max_ver;
899*b843c749SSergey Zigachev   uint8_t  max_disp_pipe_num;
900*b843c749SSergey Zigachev   uint8_t  max_vbios_active_disp_pipe_num;
901*b843c749SSergey Zigachev   uint8_t  max_ppll_num;
902*b843c749SSergey Zigachev   uint8_t  max_disp_phy_num;
903*b843c749SSergey Zigachev   uint8_t  max_aux_pairs;
904*b843c749SSergey Zigachev   uint8_t  remotedisplayconfig;
905*b843c749SSergey Zigachev   uint8_t  reserved3[8];
906*b843c749SSergey Zigachev };
907*b843c749SSergey Zigachev 
908*b843c749SSergey Zigachev 
909*b843c749SSergey Zigachev enum dce_info_caps_def
910*b843c749SSergey Zigachev {
911*b843c749SSergey Zigachev   // only for VBIOS
912*b843c749SSergey Zigachev   DCE_INFO_CAPS_FORCE_DISPDEV_CONNECTED  =0x02,
913*b843c749SSergey Zigachev   // only for VBIOS
914*b843c749SSergey Zigachev   DCE_INFO_CAPS_DISABLE_DFP_DP_HBR2      =0x04,
915*b843c749SSergey Zigachev   // only for VBIOS
916*b843c749SSergey Zigachev   DCE_INFO_CAPS_ENABLE_INTERLAC_TIMING   =0x08,
917*b843c749SSergey Zigachev 
918*b843c749SSergey Zigachev };
919*b843c749SSergey Zigachev 
920*b843c749SSergey Zigachev /*
921*b843c749SSergey Zigachev   ***************************************************************************
922*b843c749SSergey Zigachev     Data Table ATOM_EXTERNAL_DISPLAY_CONNECTION_INFO  structure
923*b843c749SSergey Zigachev   ***************************************************************************
924*b843c749SSergey Zigachev */
925*b843c749SSergey Zigachev struct atom_ext_display_path
926*b843c749SSergey Zigachev {
927*b843c749SSergey Zigachev   uint16_t  device_tag;                      //A bit vector to show what devices are supported
928*b843c749SSergey Zigachev   uint16_t  device_acpi_enum;                //16bit device ACPI id.
929*b843c749SSergey Zigachev   uint16_t  connectorobjid;                  //A physical connector for displays to plug in, using object connector definitions
930*b843c749SSergey Zigachev   uint8_t   auxddclut_index;                 //An index into external AUX/DDC channel LUT
931*b843c749SSergey Zigachev   uint8_t   hpdlut_index;                    //An index into external HPD pin LUT
932*b843c749SSergey Zigachev   uint16_t  ext_encoder_objid;               //external encoder object id
933*b843c749SSergey Zigachev   uint8_t   channelmapping;                  // if ucChannelMapping=0, using default one to one mapping
934*b843c749SSergey Zigachev   uint8_t   chpninvert;                      // bit vector for up to 8 lanes, =0: P and N is not invert, =1 P and N is inverted
935*b843c749SSergey Zigachev   uint16_t  caps;
936*b843c749SSergey Zigachev   uint16_t  reserved;
937*b843c749SSergey Zigachev };
938*b843c749SSergey Zigachev 
939*b843c749SSergey Zigachev //usCaps
940*b843c749SSergey Zigachev enum ext_display_path_cap_def
941*b843c749SSergey Zigachev {
942*b843c749SSergey Zigachev   EXT_DISPLAY_PATH_CAPS__HBR2_DISABLE               =0x0001,
943*b843c749SSergey Zigachev   EXT_DISPLAY_PATH_CAPS__DP_FIXED_VS_EN             =0x0002,
944*b843c749SSergey Zigachev   EXT_DISPLAY_PATH_CAPS__EXT_CHIP_MASK              =0x007C,
945*b843c749SSergey Zigachev };
946*b843c749SSergey Zigachev 
947*b843c749SSergey Zigachev struct atom_external_display_connection_info
948*b843c749SSergey Zigachev {
949*b843c749SSergey Zigachev   struct  atom_common_table_header  table_header;
950*b843c749SSergey Zigachev   uint8_t                  guid[16];                                  // a GUID is a 16 byte long string
951*b843c749SSergey Zigachev   struct atom_ext_display_path path[7];                               // total of fixed 7 entries.
952*b843c749SSergey Zigachev   uint8_t                  checksum;                                  // a simple Checksum of the sum of whole structure equal to 0x0.
953*b843c749SSergey Zigachev   uint8_t                  stereopinid;                               // use for eDP panel
954*b843c749SSergey Zigachev   uint8_t                  remotedisplayconfig;
955*b843c749SSergey Zigachev   uint8_t                  edptolvdsrxid;
956*b843c749SSergey Zigachev   uint8_t                  fixdpvoltageswing;                         // usCaps[1]=1, this indicate DP_LANE_SET value
957*b843c749SSergey Zigachev   uint8_t                  reserved[3];                               // for potential expansion
958*b843c749SSergey Zigachev };
959*b843c749SSergey Zigachev 
960*b843c749SSergey Zigachev /*
961*b843c749SSergey Zigachev   ***************************************************************************
962*b843c749SSergey Zigachev     Data Table integratedsysteminfo  structure
963*b843c749SSergey Zigachev   ***************************************************************************
964*b843c749SSergey Zigachev */
965*b843c749SSergey Zigachev 
966*b843c749SSergey Zigachev struct atom_camera_dphy_timing_param
967*b843c749SSergey Zigachev {
968*b843c749SSergey Zigachev   uint8_t  profile_id;       // SENSOR_PROFILES
969*b843c749SSergey Zigachev   uint32_t param;
970*b843c749SSergey Zigachev };
971*b843c749SSergey Zigachev 
972*b843c749SSergey Zigachev struct atom_camera_dphy_elec_param
973*b843c749SSergey Zigachev {
974*b843c749SSergey Zigachev   uint16_t param[3];
975*b843c749SSergey Zigachev };
976*b843c749SSergey Zigachev 
977*b843c749SSergey Zigachev struct atom_camera_module_info
978*b843c749SSergey Zigachev {
979*b843c749SSergey Zigachev   uint8_t module_id;                    // 0: Rear, 1: Front right of user, 2: Front left of user
980*b843c749SSergey Zigachev   uint8_t module_name[8];
981*b843c749SSergey Zigachev   struct atom_camera_dphy_timing_param timingparam[6]; // Exact number is under estimation and confirmation from sensor vendor
982*b843c749SSergey Zigachev };
983*b843c749SSergey Zigachev 
984*b843c749SSergey Zigachev struct atom_camera_flashlight_info
985*b843c749SSergey Zigachev {
986*b843c749SSergey Zigachev   uint8_t flashlight_id;                // 0: Rear, 1: Front
987*b843c749SSergey Zigachev   uint8_t name[8];
988*b843c749SSergey Zigachev };
989*b843c749SSergey Zigachev 
990*b843c749SSergey Zigachev struct atom_camera_data
991*b843c749SSergey Zigachev {
992*b843c749SSergey Zigachev   uint32_t versionCode;
993*b843c749SSergey Zigachev   struct atom_camera_module_info cameraInfo[3];      // Assuming 3 camera sensors max
994*b843c749SSergey Zigachev   struct atom_camera_flashlight_info flashInfo;      // Assuming 1 flashlight max
995*b843c749SSergey Zigachev   struct atom_camera_dphy_elec_param dphy_param;
996*b843c749SSergey Zigachev   uint32_t crc_val;         // CRC
997*b843c749SSergey Zigachev };
998*b843c749SSergey Zigachev 
999*b843c749SSergey Zigachev 
1000*b843c749SSergey Zigachev struct atom_14nm_dpphy_dvihdmi_tuningset
1001*b843c749SSergey Zigachev {
1002*b843c749SSergey Zigachev   uint32_t max_symclk_in10khz;
1003*b843c749SSergey Zigachev   uint8_t encoder_mode;            //atom_encode_mode_def, =2: DVI, =3: HDMI mode
1004*b843c749SSergey Zigachev   uint8_t phy_sel;                 //bit vector of phy, bit0= phya, bit1=phyb, ....bit5 = phyf
1005*b843c749SSergey Zigachev   uint16_t margindeemph;           //COMMON_MAR_DEEMPH_NOM[7:0]tx_margin_nom [15:8]deemph_gen1_nom
1006*b843c749SSergey Zigachev   uint8_t deemph_6db_4;            //COMMON_SELDEEMPH60[31:24]deemph_6db_4
1007*b843c749SSergey Zigachev   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
1008*b843c749SSergey Zigachev   uint8_t tx_driver_fifty_ohms;    //COMMON_ZCALCODE_CTRL[21].tx_driver_fifty_ohms
1009*b843c749SSergey Zigachev   uint8_t deemph_sel;              //MARGIN_DEEMPH_LANE0.DEEMPH_SEL
1010*b843c749SSergey Zigachev };
1011*b843c749SSergey Zigachev 
1012*b843c749SSergey Zigachev struct atom_14nm_dpphy_dp_setting{
1013*b843c749SSergey Zigachev   uint8_t dp_vs_pemph_level;       //enum of atom_dp_vs_preemph_def
1014*b843c749SSergey Zigachev   uint16_t margindeemph;           //COMMON_MAR_DEEMPH_NOM[7:0]tx_margin_nom [15:8]deemph_gen1_nom
1015*b843c749SSergey Zigachev   uint8_t deemph_6db_4;            //COMMON_SELDEEMPH60[31:24]deemph_6db_4
1016*b843c749SSergey Zigachev   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
1017*b843c749SSergey Zigachev };
1018*b843c749SSergey Zigachev 
1019*b843c749SSergey Zigachev struct atom_14nm_dpphy_dp_tuningset{
1020*b843c749SSergey Zigachev   uint8_t phy_sel;                 // bit vector of phy, bit0= phya, bit1=phyb, ....bit5 = phyf
1021*b843c749SSergey Zigachev   uint8_t version;
1022*b843c749SSergey Zigachev   uint16_t table_size;             // size of atom_14nm_dpphy_dp_tuningset
1023*b843c749SSergey Zigachev   uint16_t reserved;
1024*b843c749SSergey Zigachev   struct atom_14nm_dpphy_dp_setting dptuning[10];
1025*b843c749SSergey Zigachev };
1026*b843c749SSergey Zigachev 
1027*b843c749SSergey Zigachev struct atom_14nm_dig_transmitter_info_header_v4_0{
1028*b843c749SSergey Zigachev   struct  atom_common_table_header  table_header;
1029*b843c749SSergey Zigachev   uint16_t pcie_phy_tmds_hdmi_macro_settings_offset;     // offset of PCIEPhyTMDSHDMIMacroSettingsTbl
1030*b843c749SSergey Zigachev   uint16_t uniphy_vs_emph_lookup_table_offset;           // offset of UniphyVSEmphLookUpTbl
1031*b843c749SSergey Zigachev   uint16_t uniphy_xbar_settings_table_offset;            // offset of UniphyXbarSettingsTbl
1032*b843c749SSergey Zigachev };
1033*b843c749SSergey Zigachev 
1034*b843c749SSergey Zigachev struct atom_14nm_combphy_tmds_vs_set
1035*b843c749SSergey Zigachev {
1036*b843c749SSergey Zigachev   uint8_t sym_clk;
1037*b843c749SSergey Zigachev   uint8_t dig_mode;
1038*b843c749SSergey Zigachev   uint8_t phy_sel;
1039*b843c749SSergey Zigachev   uint16_t common_mar_deemph_nom__margin_deemph_val;
1040*b843c749SSergey Zigachev   uint8_t common_seldeemph60__deemph_6db_4_val;
1041*b843c749SSergey Zigachev   uint8_t cmd_bus_global_for_tx_lane0__boostadj_val ;
1042*b843c749SSergey Zigachev   uint8_t common_zcalcode_ctrl__tx_driver_fifty_ohms_val;
1043*b843c749SSergey Zigachev   uint8_t margin_deemph_lane0__deemph_sel_val;
1044*b843c749SSergey Zigachev };
1045*b843c749SSergey Zigachev 
1046*b843c749SSergey Zigachev struct atom_i2c_reg_info {
1047*b843c749SSergey Zigachev   uint8_t ucI2cRegIndex;
1048*b843c749SSergey Zigachev   uint8_t ucI2cRegVal;
1049*b843c749SSergey Zigachev };
1050*b843c749SSergey Zigachev 
1051*b843c749SSergey Zigachev struct atom_hdmi_retimer_redriver_set {
1052*b843c749SSergey Zigachev   uint8_t HdmiSlvAddr;
1053*b843c749SSergey Zigachev   uint8_t HdmiRegNum;
1054*b843c749SSergey Zigachev   uint8_t Hdmi6GRegNum;
1055*b843c749SSergey Zigachev   struct atom_i2c_reg_info HdmiRegSetting[9];        //For non 6G Hz use
1056*b843c749SSergey Zigachev   struct atom_i2c_reg_info Hdmi6GhzRegSetting[3];    //For 6G Hz use.
1057*b843c749SSergey Zigachev };
1058*b843c749SSergey Zigachev 
1059*b843c749SSergey Zigachev struct atom_integrated_system_info_v1_11
1060*b843c749SSergey Zigachev {
1061*b843c749SSergey Zigachev   struct  atom_common_table_header  table_header;
1062*b843c749SSergey Zigachev   uint32_t  vbios_misc;                       //enum of atom_system_vbiosmisc_def
1063*b843c749SSergey Zigachev   uint32_t  gpucapinfo;                       //enum of atom_system_gpucapinf_def
1064*b843c749SSergey Zigachev   uint32_t  system_config;
1065*b843c749SSergey Zigachev   uint32_t  cpucapinfo;
1066*b843c749SSergey Zigachev   uint16_t  gpuclk_ss_percentage;             //unit of 0.001%,   1000 mean 1%
1067*b843c749SSergey Zigachev   uint16_t  gpuclk_ss_type;
1068*b843c749SSergey Zigachev   uint16_t  lvds_ss_percentage;               //unit of 0.001%,   1000 mean 1%
1069*b843c749SSergey Zigachev   uint16_t  lvds_ss_rate_10hz;
1070*b843c749SSergey Zigachev   uint16_t  hdmi_ss_percentage;               //unit of 0.001%,   1000 mean 1%
1071*b843c749SSergey Zigachev   uint16_t  hdmi_ss_rate_10hz;
1072*b843c749SSergey Zigachev   uint16_t  dvi_ss_percentage;                //unit of 0.001%,   1000 mean 1%
1073*b843c749SSergey Zigachev   uint16_t  dvi_ss_rate_10hz;
1074*b843c749SSergey Zigachev   uint16_t  dpphy_override;                   // bit vector, enum of atom_sysinfo_dpphy_override_def
1075*b843c749SSergey Zigachev   uint16_t  lvds_misc;                        // enum of atom_sys_info_lvds_misc_def
1076*b843c749SSergey Zigachev   uint16_t  backlight_pwm_hz;                 // pwm frequency in hz
1077*b843c749SSergey Zigachev   uint8_t   memorytype;                       // enum of atom_dmi_t17_mem_type_def, APU memory type indication.
1078*b843c749SSergey Zigachev   uint8_t   umachannelnumber;                 // number of memory channels
1079*b843c749SSergey Zigachev   uint8_t   pwr_on_digon_to_de;               /* all pwr sequence numbers below are in uint of 4ms */
1080*b843c749SSergey Zigachev   uint8_t   pwr_on_de_to_vary_bl;
1081*b843c749SSergey Zigachev   uint8_t   pwr_down_vary_bloff_to_de;
1082*b843c749SSergey Zigachev   uint8_t   pwr_down_de_to_digoff;
1083*b843c749SSergey Zigachev   uint8_t   pwr_off_delay;
1084*b843c749SSergey Zigachev   uint8_t   pwr_on_vary_bl_to_blon;
1085*b843c749SSergey Zigachev   uint8_t   pwr_down_bloff_to_vary_bloff;
1086*b843c749SSergey Zigachev   uint8_t   min_allowed_bl_level;
1087*b843c749SSergey Zigachev   uint8_t   htc_hyst_limit;
1088*b843c749SSergey Zigachev   uint8_t   htc_tmp_limit;
1089*b843c749SSergey Zigachev   uint8_t   reserved1;
1090*b843c749SSergey Zigachev   uint8_t   reserved2;
1091*b843c749SSergey Zigachev   struct atom_external_display_connection_info extdispconninfo;
1092*b843c749SSergey Zigachev   struct atom_14nm_dpphy_dvihdmi_tuningset dvi_tuningset;
1093*b843c749SSergey Zigachev   struct atom_14nm_dpphy_dvihdmi_tuningset hdmi_tuningset;
1094*b843c749SSergey Zigachev   struct atom_14nm_dpphy_dvihdmi_tuningset hdmi6g_tuningset;
1095*b843c749SSergey Zigachev   struct atom_14nm_dpphy_dp_tuningset dp_tuningset;        // rbr 1.62G dp tuning set
1096*b843c749SSergey Zigachev   struct atom_14nm_dpphy_dp_tuningset dp_hbr3_tuningset;   // HBR3 dp tuning set
1097*b843c749SSergey Zigachev   struct atom_camera_data  camera_info;
1098*b843c749SSergey Zigachev   struct atom_hdmi_retimer_redriver_set dp0_retimer_set;   //for DP0
1099*b843c749SSergey Zigachev   struct atom_hdmi_retimer_redriver_set dp1_retimer_set;   //for DP1
1100*b843c749SSergey Zigachev   struct atom_hdmi_retimer_redriver_set dp2_retimer_set;   //for DP2
1101*b843c749SSergey Zigachev   struct atom_hdmi_retimer_redriver_set dp3_retimer_set;   //for DP3
1102*b843c749SSergey Zigachev   struct atom_14nm_dpphy_dp_tuningset dp_hbr_tuningset;    //hbr 2.7G dp tuning set
1103*b843c749SSergey Zigachev   struct atom_14nm_dpphy_dp_tuningset dp_hbr2_tuningset;   //hbr2 5.4G dp turnig set
1104*b843c749SSergey Zigachev   struct atom_14nm_dpphy_dp_tuningset edp_tuningset;       //edp tuning set
1105*b843c749SSergey Zigachev   uint32_t  reserved[66];
1106*b843c749SSergey Zigachev };
1107*b843c749SSergey Zigachev 
1108*b843c749SSergey Zigachev 
1109*b843c749SSergey Zigachev // system_config
1110*b843c749SSergey Zigachev enum atom_system_vbiosmisc_def{
1111*b843c749SSergey Zigachev   INTEGRATED_SYSTEM_INFO__GET_EDID_CALLBACK_FUNC_SUPPORT = 0x01,
1112*b843c749SSergey Zigachev };
1113*b843c749SSergey Zigachev 
1114*b843c749SSergey Zigachev 
1115*b843c749SSergey Zigachev // gpucapinfo
1116*b843c749SSergey Zigachev enum atom_system_gpucapinf_def{
1117*b843c749SSergey Zigachev   SYS_INFO_GPUCAPS__ENABEL_DFS_BYPASS  = 0x10,
1118*b843c749SSergey Zigachev };
1119*b843c749SSergey Zigachev 
1120*b843c749SSergey Zigachev //dpphy_override
1121*b843c749SSergey Zigachev enum atom_sysinfo_dpphy_override_def{
1122*b843c749SSergey Zigachev   ATOM_ENABLE_DVI_TUNINGSET   = 0x01,
1123*b843c749SSergey Zigachev   ATOM_ENABLE_HDMI_TUNINGSET  = 0x02,
1124*b843c749SSergey Zigachev   ATOM_ENABLE_HDMI6G_TUNINGSET  = 0x04,
1125*b843c749SSergey Zigachev   ATOM_ENABLE_DP_TUNINGSET  = 0x08,
1126*b843c749SSergey Zigachev   ATOM_ENABLE_DP_HBR3_TUNINGSET  = 0x10,
1127*b843c749SSergey Zigachev };
1128*b843c749SSergey Zigachev 
1129*b843c749SSergey Zigachev //lvds_misc
1130*b843c749SSergey Zigachev enum atom_sys_info_lvds_misc_def
1131*b843c749SSergey Zigachev {
1132*b843c749SSergey Zigachev   SYS_INFO_LVDS_MISC_888_FPDI_MODE                 =0x01,
1133*b843c749SSergey Zigachev   SYS_INFO_LVDS_MISC_888_BPC_MODE                  =0x04,
1134*b843c749SSergey Zigachev   SYS_INFO_LVDS_MISC_OVERRIDE_EN                   =0x08,
1135*b843c749SSergey Zigachev };
1136*b843c749SSergey Zigachev 
1137*b843c749SSergey Zigachev 
1138*b843c749SSergey Zigachev //memorytype  DMI Type 17 offset 12h - Memory Type
1139*b843c749SSergey Zigachev enum atom_dmi_t17_mem_type_def{
1140*b843c749SSergey Zigachev   OtherMemType = 0x01,                                  ///< Assign 01 to Other
1141*b843c749SSergey Zigachev   UnknownMemType,                                       ///< Assign 02 to Unknown
1142*b843c749SSergey Zigachev   DramMemType,                                          ///< Assign 03 to DRAM
1143*b843c749SSergey Zigachev   EdramMemType,                                         ///< Assign 04 to EDRAM
1144*b843c749SSergey Zigachev   VramMemType,                                          ///< Assign 05 to VRAM
1145*b843c749SSergey Zigachev   SramMemType,                                          ///< Assign 06 to SRAM
1146*b843c749SSergey Zigachev   RamMemType,                                           ///< Assign 07 to RAM
1147*b843c749SSergey Zigachev   RomMemType,                                           ///< Assign 08 to ROM
1148*b843c749SSergey Zigachev   FlashMemType,                                         ///< Assign 09 to Flash
1149*b843c749SSergey Zigachev   EepromMemType,                                        ///< Assign 10 to EEPROM
1150*b843c749SSergey Zigachev   FepromMemType,                                        ///< Assign 11 to FEPROM
1151*b843c749SSergey Zigachev   EpromMemType,                                         ///< Assign 12 to EPROM
1152*b843c749SSergey Zigachev   CdramMemType,                                         ///< Assign 13 to CDRAM
1153*b843c749SSergey Zigachev   ThreeDramMemType,                                     ///< Assign 14 to 3DRAM
1154*b843c749SSergey Zigachev   SdramMemType,                                         ///< Assign 15 to SDRAM
1155*b843c749SSergey Zigachev   SgramMemType,                                         ///< Assign 16 to SGRAM
1156*b843c749SSergey Zigachev   RdramMemType,                                         ///< Assign 17 to RDRAM
1157*b843c749SSergey Zigachev   DdrMemType,                                           ///< Assign 18 to DDR
1158*b843c749SSergey Zigachev   Ddr2MemType,                                          ///< Assign 19 to DDR2
1159*b843c749SSergey Zigachev   Ddr2FbdimmMemType,                                    ///< Assign 20 to DDR2 FB-DIMM
1160*b843c749SSergey Zigachev   Ddr3MemType = 0x18,                                   ///< Assign 24 to DDR3
1161*b843c749SSergey Zigachev   Fbd2MemType,                                          ///< Assign 25 to FBD2
1162*b843c749SSergey Zigachev   Ddr4MemType,                                          ///< Assign 26 to DDR4
1163*b843c749SSergey Zigachev   LpDdrMemType,                                         ///< Assign 27 to LPDDR
1164*b843c749SSergey Zigachev   LpDdr2MemType,                                        ///< Assign 28 to LPDDR2
1165*b843c749SSergey Zigachev   LpDdr3MemType,                                        ///< Assign 29 to LPDDR3
1166*b843c749SSergey Zigachev   LpDdr4MemType,                                        ///< Assign 30 to LPDDR4
1167*b843c749SSergey Zigachev };
1168*b843c749SSergey Zigachev 
1169*b843c749SSergey Zigachev 
1170*b843c749SSergey Zigachev // this Table is used starting from NL/AM, used by SBIOS and pass the IntegratedSystemInfoTable/PowerPlayInfoTable/SystemCameraInfoTable
1171*b843c749SSergey Zigachev struct atom_fusion_system_info_v4
1172*b843c749SSergey Zigachev {
1173*b843c749SSergey Zigachev   struct atom_integrated_system_info_v1_11   sysinfo;           // refer to ATOM_INTEGRATED_SYSTEM_INFO_V1_8 definition
1174*b843c749SSergey Zigachev   uint32_t   powerplayinfo[256];                                // Reserve 1024 bytes space for PowerPlayInfoTable
1175*b843c749SSergey Zigachev };
1176*b843c749SSergey Zigachev 
1177*b843c749SSergey Zigachev 
1178*b843c749SSergey Zigachev /*
1179*b843c749SSergey Zigachev   ***************************************************************************
1180*b843c749SSergey Zigachev     Data Table gfx_info  structure
1181*b843c749SSergey Zigachev   ***************************************************************************
1182*b843c749SSergey Zigachev */
1183*b843c749SSergey Zigachev 
1184*b843c749SSergey Zigachev struct  atom_gfx_info_v2_2
1185*b843c749SSergey Zigachev {
1186*b843c749SSergey Zigachev   struct  atom_common_table_header  table_header;
1187*b843c749SSergey Zigachev   uint8_t gfxip_min_ver;
1188*b843c749SSergey Zigachev   uint8_t gfxip_max_ver;
1189*b843c749SSergey Zigachev   uint8_t max_shader_engines;
1190*b843c749SSergey Zigachev   uint8_t max_tile_pipes;
1191*b843c749SSergey Zigachev   uint8_t max_cu_per_sh;
1192*b843c749SSergey Zigachev   uint8_t max_sh_per_se;
1193*b843c749SSergey Zigachev   uint8_t max_backends_per_se;
1194*b843c749SSergey Zigachev   uint8_t max_texture_channel_caches;
1195*b843c749SSergey Zigachev   uint32_t regaddr_cp_dma_src_addr;
1196*b843c749SSergey Zigachev   uint32_t regaddr_cp_dma_src_addr_hi;
1197*b843c749SSergey Zigachev   uint32_t regaddr_cp_dma_dst_addr;
1198*b843c749SSergey Zigachev   uint32_t regaddr_cp_dma_dst_addr_hi;
1199*b843c749SSergey Zigachev   uint32_t regaddr_cp_dma_command;
1200*b843c749SSergey Zigachev   uint32_t regaddr_cp_status;
1201*b843c749SSergey Zigachev   uint32_t regaddr_rlc_gpu_clock_32;
1202*b843c749SSergey Zigachev   uint32_t rlc_gpu_timer_refclk;
1203*b843c749SSergey Zigachev };
1204*b843c749SSergey Zigachev 
1205*b843c749SSergey Zigachev struct  atom_gfx_info_v2_3 {
1206*b843c749SSergey Zigachev   struct  atom_common_table_header  table_header;
1207*b843c749SSergey Zigachev   uint8_t gfxip_min_ver;
1208*b843c749SSergey Zigachev   uint8_t gfxip_max_ver;
1209*b843c749SSergey Zigachev   uint8_t max_shader_engines;
1210*b843c749SSergey Zigachev   uint8_t max_tile_pipes;
1211*b843c749SSergey Zigachev   uint8_t max_cu_per_sh;
1212*b843c749SSergey Zigachev   uint8_t max_sh_per_se;
1213*b843c749SSergey Zigachev   uint8_t max_backends_per_se;
1214*b843c749SSergey Zigachev   uint8_t max_texture_channel_caches;
1215*b843c749SSergey Zigachev   uint32_t regaddr_cp_dma_src_addr;
1216*b843c749SSergey Zigachev   uint32_t regaddr_cp_dma_src_addr_hi;
1217*b843c749SSergey Zigachev   uint32_t regaddr_cp_dma_dst_addr;
1218*b843c749SSergey Zigachev   uint32_t regaddr_cp_dma_dst_addr_hi;
1219*b843c749SSergey Zigachev   uint32_t regaddr_cp_dma_command;
1220*b843c749SSergey Zigachev   uint32_t regaddr_cp_status;
1221*b843c749SSergey Zigachev   uint32_t regaddr_rlc_gpu_clock_32;
1222*b843c749SSergey Zigachev   uint32_t rlc_gpu_timer_refclk;
1223*b843c749SSergey Zigachev   uint8_t active_cu_per_sh;
1224*b843c749SSergey Zigachev   uint8_t active_rb_per_se;
1225*b843c749SSergey Zigachev   uint16_t gcgoldenoffset;
1226*b843c749SSergey Zigachev   uint32_t rm21_sram_vmin_value;
1227*b843c749SSergey Zigachev };
1228*b843c749SSergey Zigachev 
1229*b843c749SSergey Zigachev struct  atom_gfx_info_v2_4 {
1230*b843c749SSergey Zigachev   struct  atom_common_table_header  table_header;
1231*b843c749SSergey Zigachev   uint8_t gfxip_min_ver;
1232*b843c749SSergey Zigachev   uint8_t gfxip_max_ver;
1233*b843c749SSergey Zigachev   uint8_t gc_num_se;
1234*b843c749SSergey Zigachev   uint8_t max_tile_pipes;
1235*b843c749SSergey Zigachev   uint8_t gc_num_cu_per_sh;
1236*b843c749SSergey Zigachev   uint8_t gc_num_sh_per_se;
1237*b843c749SSergey Zigachev   uint8_t gc_num_rb_per_se;
1238*b843c749SSergey Zigachev   uint8_t gc_num_tccs;
1239*b843c749SSergey Zigachev   uint32_t regaddr_cp_dma_src_addr;
1240*b843c749SSergey Zigachev   uint32_t regaddr_cp_dma_src_addr_hi;
1241*b843c749SSergey Zigachev   uint32_t regaddr_cp_dma_dst_addr;
1242*b843c749SSergey Zigachev   uint32_t regaddr_cp_dma_dst_addr_hi;
1243*b843c749SSergey Zigachev   uint32_t regaddr_cp_dma_command;
1244*b843c749SSergey Zigachev   uint32_t regaddr_cp_status;
1245*b843c749SSergey Zigachev   uint32_t regaddr_rlc_gpu_clock_32;
1246*b843c749SSergey Zigachev   uint32_t rlc_gpu_timer_refclk;
1247*b843c749SSergey Zigachev   uint8_t active_cu_per_sh;
1248*b843c749SSergey Zigachev   uint8_t active_rb_per_se;
1249*b843c749SSergey Zigachev   uint16_t gcgoldenoffset;
1250*b843c749SSergey Zigachev   uint16_t gc_num_gprs;
1251*b843c749SSergey Zigachev   uint16_t gc_gsprim_buff_depth;
1252*b843c749SSergey Zigachev   uint16_t gc_parameter_cache_depth;
1253*b843c749SSergey Zigachev   uint16_t gc_wave_size;
1254*b843c749SSergey Zigachev   uint16_t gc_max_waves_per_simd;
1255*b843c749SSergey Zigachev   uint16_t gc_lds_size;
1256*b843c749SSergey Zigachev   uint8_t gc_num_max_gs_thds;
1257*b843c749SSergey Zigachev   uint8_t gc_gs_table_depth;
1258*b843c749SSergey Zigachev   uint8_t gc_double_offchip_lds_buffer;
1259*b843c749SSergey Zigachev   uint8_t gc_max_scratch_slots_per_cu;
1260*b843c749SSergey Zigachev   uint32_t sram_rm_fuses_val;
1261*b843c749SSergey Zigachev   uint32_t sram_custom_rm_fuses_val;
1262*b843c749SSergey Zigachev };
1263*b843c749SSergey Zigachev 
1264*b843c749SSergey Zigachev /*
1265*b843c749SSergey Zigachev   ***************************************************************************
1266*b843c749SSergey Zigachev     Data Table smu_info  structure
1267*b843c749SSergey Zigachev   ***************************************************************************
1268*b843c749SSergey Zigachev */
1269*b843c749SSergey Zigachev struct atom_smu_info_v3_1
1270*b843c749SSergey Zigachev {
1271*b843c749SSergey Zigachev   struct  atom_common_table_header  table_header;
1272*b843c749SSergey Zigachev   uint8_t smuip_min_ver;
1273*b843c749SSergey Zigachev   uint8_t smuip_max_ver;
1274*b843c749SSergey Zigachev   uint8_t smu_rsd1;
1275*b843c749SSergey Zigachev   uint8_t gpuclk_ss_mode;           // enum of atom_spread_spectrum_mode
1276*b843c749SSergey Zigachev   uint16_t sclk_ss_percentage;
1277*b843c749SSergey Zigachev   uint16_t sclk_ss_rate_10hz;
1278*b843c749SSergey Zigachev   uint16_t gpuclk_ss_percentage;    // in unit of 0.001%
1279*b843c749SSergey Zigachev   uint16_t gpuclk_ss_rate_10hz;
1280*b843c749SSergey Zigachev   uint32_t core_refclk_10khz;
1281*b843c749SSergey Zigachev   uint8_t  ac_dc_gpio_bit;          // GPIO bit shift in SMU_GPIOPAD_A  configured for AC/DC switching, =0xff means invalid
1282*b843c749SSergey Zigachev   uint8_t  ac_dc_polarity;          // GPIO polarity for AC/DC switching
1283*b843c749SSergey Zigachev   uint8_t  vr0hot_gpio_bit;         // GPIO bit shift in SMU_GPIOPAD_A  configured for VR0 HOT event, =0xff means invalid
1284*b843c749SSergey Zigachev   uint8_t  vr0hot_polarity;         // GPIO polarity for VR0 HOT event
1285*b843c749SSergey Zigachev   uint8_t  vr1hot_gpio_bit;         // GPIO bit shift in SMU_GPIOPAD_A configured for VR1 HOT event , =0xff means invalid
1286*b843c749SSergey Zigachev   uint8_t  vr1hot_polarity;         // GPIO polarity for VR1 HOT event
1287*b843c749SSergey Zigachev   uint8_t  fw_ctf_gpio_bit;         // GPIO bit shift in SMU_GPIOPAD_A configured for CTF, =0xff means invalid
1288*b843c749SSergey Zigachev   uint8_t  fw_ctf_polarity;         // GPIO polarity for CTF
1289*b843c749SSergey Zigachev };
1290*b843c749SSergey Zigachev 
1291*b843c749SSergey Zigachev struct atom_smu_info_v3_2 {
1292*b843c749SSergey Zigachev   struct   atom_common_table_header  table_header;
1293*b843c749SSergey Zigachev   uint8_t  smuip_min_ver;
1294*b843c749SSergey Zigachev   uint8_t  smuip_max_ver;
1295*b843c749SSergey Zigachev   uint8_t  smu_rsd1;
1296*b843c749SSergey Zigachev   uint8_t  gpuclk_ss_mode;
1297*b843c749SSergey Zigachev   uint16_t sclk_ss_percentage;
1298*b843c749SSergey Zigachev   uint16_t sclk_ss_rate_10hz;
1299*b843c749SSergey Zigachev   uint16_t gpuclk_ss_percentage;    // in unit of 0.001%
1300*b843c749SSergey Zigachev   uint16_t gpuclk_ss_rate_10hz;
1301*b843c749SSergey Zigachev   uint32_t core_refclk_10khz;
1302*b843c749SSergey Zigachev   uint8_t  ac_dc_gpio_bit;          // GPIO bit shift in SMU_GPIOPAD_A  configured for AC/DC switching, =0xff means invalid
1303*b843c749SSergey Zigachev   uint8_t  ac_dc_polarity;          // GPIO polarity for AC/DC switching
1304*b843c749SSergey Zigachev   uint8_t  vr0hot_gpio_bit;         // GPIO bit shift in SMU_GPIOPAD_A  configured for VR0 HOT event, =0xff means invalid
1305*b843c749SSergey Zigachev   uint8_t  vr0hot_polarity;         // GPIO polarity for VR0 HOT event
1306*b843c749SSergey Zigachev   uint8_t  vr1hot_gpio_bit;         // GPIO bit shift in SMU_GPIOPAD_A configured for VR1 HOT event , =0xff means invalid
1307*b843c749SSergey Zigachev   uint8_t  vr1hot_polarity;         // GPIO polarity for VR1 HOT event
1308*b843c749SSergey Zigachev   uint8_t  fw_ctf_gpio_bit;         // GPIO bit shift in SMU_GPIOPAD_A configured for CTF, =0xff means invalid
1309*b843c749SSergey Zigachev   uint8_t  fw_ctf_polarity;         // GPIO polarity for CTF
1310*b843c749SSergey Zigachev   uint8_t  pcc_gpio_bit;            // GPIO bit shift in SMU_GPIOPAD_A configured for PCC, =0xff means invalid
1311*b843c749SSergey Zigachev   uint8_t  pcc_gpio_polarity;       // GPIO polarity for CTF
1312*b843c749SSergey Zigachev   uint16_t smugoldenoffset;
1313*b843c749SSergey Zigachev   uint32_t gpupll_vco_freq_10khz;
1314*b843c749SSergey Zigachev   uint32_t bootup_smnclk_10khz;
1315*b843c749SSergey Zigachev   uint32_t bootup_socclk_10khz;
1316*b843c749SSergey Zigachev   uint32_t bootup_mp0clk_10khz;
1317*b843c749SSergey Zigachev   uint32_t bootup_mp1clk_10khz;
1318*b843c749SSergey Zigachev   uint32_t bootup_lclk_10khz;
1319*b843c749SSergey Zigachev   uint32_t bootup_dcefclk_10khz;
1320*b843c749SSergey Zigachev   uint32_t ctf_threshold_override_value;
1321*b843c749SSergey Zigachev   uint32_t reserved[5];
1322*b843c749SSergey Zigachev };
1323*b843c749SSergey Zigachev 
1324*b843c749SSergey Zigachev struct atom_smu_info_v3_3 {
1325*b843c749SSergey Zigachev   struct   atom_common_table_header  table_header;
1326*b843c749SSergey Zigachev   uint8_t  smuip_min_ver;
1327*b843c749SSergey Zigachev   uint8_t  smuip_max_ver;
1328*b843c749SSergey Zigachev   uint8_t  smu_rsd1;
1329*b843c749SSergey Zigachev   uint8_t  gpuclk_ss_mode;
1330*b843c749SSergey Zigachev   uint16_t sclk_ss_percentage;
1331*b843c749SSergey Zigachev   uint16_t sclk_ss_rate_10hz;
1332*b843c749SSergey Zigachev   uint16_t gpuclk_ss_percentage;    // in unit of 0.001%
1333*b843c749SSergey Zigachev   uint16_t gpuclk_ss_rate_10hz;
1334*b843c749SSergey Zigachev   uint32_t core_refclk_10khz;
1335*b843c749SSergey Zigachev   uint8_t  ac_dc_gpio_bit;          // GPIO bit shift in SMU_GPIOPAD_A  configured for AC/DC switching, =0xff means invalid
1336*b843c749SSergey Zigachev   uint8_t  ac_dc_polarity;          // GPIO polarity for AC/DC switching
1337*b843c749SSergey Zigachev   uint8_t  vr0hot_gpio_bit;         // GPIO bit shift in SMU_GPIOPAD_A  configured for VR0 HOT event, =0xff means invalid
1338*b843c749SSergey Zigachev   uint8_t  vr0hot_polarity;         // GPIO polarity for VR0 HOT event
1339*b843c749SSergey Zigachev   uint8_t  vr1hot_gpio_bit;         // GPIO bit shift in SMU_GPIOPAD_A configured for VR1 HOT event , =0xff means invalid
1340*b843c749SSergey Zigachev   uint8_t  vr1hot_polarity;         // GPIO polarity for VR1 HOT event
1341*b843c749SSergey Zigachev   uint8_t  fw_ctf_gpio_bit;         // GPIO bit shift in SMU_GPIOPAD_A configured for CTF, =0xff means invalid
1342*b843c749SSergey Zigachev   uint8_t  fw_ctf_polarity;         // GPIO polarity for CTF
1343*b843c749SSergey Zigachev   uint8_t  pcc_gpio_bit;            // GPIO bit shift in SMU_GPIOPAD_A configured for PCC, =0xff means invalid
1344*b843c749SSergey Zigachev   uint8_t  pcc_gpio_polarity;       // GPIO polarity for CTF
1345*b843c749SSergey Zigachev   uint16_t smugoldenoffset;
1346*b843c749SSergey Zigachev   uint32_t gpupll_vco_freq_10khz;
1347*b843c749SSergey Zigachev   uint32_t bootup_smnclk_10khz;
1348*b843c749SSergey Zigachev   uint32_t bootup_socclk_10khz;
1349*b843c749SSergey Zigachev   uint32_t bootup_mp0clk_10khz;
1350*b843c749SSergey Zigachev   uint32_t bootup_mp1clk_10khz;
1351*b843c749SSergey Zigachev   uint32_t bootup_lclk_10khz;
1352*b843c749SSergey Zigachev   uint32_t bootup_dcefclk_10khz;
1353*b843c749SSergey Zigachev   uint32_t ctf_threshold_override_value;
1354*b843c749SSergey Zigachev   uint32_t syspll3_0_vco_freq_10khz;
1355*b843c749SSergey Zigachev   uint32_t syspll3_1_vco_freq_10khz;
1356*b843c749SSergey Zigachev   uint32_t bootup_fclk_10khz;
1357*b843c749SSergey Zigachev   uint32_t bootup_waflclk_10khz;
1358*b843c749SSergey Zigachev   uint32_t reserved[3];
1359*b843c749SSergey Zigachev };
1360*b843c749SSergey Zigachev 
1361*b843c749SSergey Zigachev /*
1362*b843c749SSergey Zigachev  ***************************************************************************
1363*b843c749SSergey Zigachev    Data Table smc_dpm_info  structure
1364*b843c749SSergey Zigachev  ***************************************************************************
1365*b843c749SSergey Zigachev  */
1366*b843c749SSergey Zigachev struct atom_smc_dpm_info_v4_1
1367*b843c749SSergey Zigachev {
1368*b843c749SSergey Zigachev   struct   atom_common_table_header  table_header;
1369*b843c749SSergey Zigachev   uint8_t  liquid1_i2c_address;
1370*b843c749SSergey Zigachev   uint8_t  liquid2_i2c_address;
1371*b843c749SSergey Zigachev   uint8_t  vr_i2c_address;
1372*b843c749SSergey Zigachev   uint8_t  plx_i2c_address;
1373*b843c749SSergey Zigachev 
1374*b843c749SSergey Zigachev   uint8_t  liquid_i2c_linescl;
1375*b843c749SSergey Zigachev   uint8_t  liquid_i2c_linesda;
1376*b843c749SSergey Zigachev   uint8_t  vr_i2c_linescl;
1377*b843c749SSergey Zigachev   uint8_t  vr_i2c_linesda;
1378*b843c749SSergey Zigachev 
1379*b843c749SSergey Zigachev   uint8_t  plx_i2c_linescl;
1380*b843c749SSergey Zigachev   uint8_t  plx_i2c_linesda;
1381*b843c749SSergey Zigachev   uint8_t  vrsensorpresent;
1382*b843c749SSergey Zigachev   uint8_t  liquidsensorpresent;
1383*b843c749SSergey Zigachev 
1384*b843c749SSergey Zigachev   uint16_t maxvoltagestepgfx;
1385*b843c749SSergey Zigachev   uint16_t maxvoltagestepsoc;
1386*b843c749SSergey Zigachev 
1387*b843c749SSergey Zigachev   uint8_t  vddgfxvrmapping;
1388*b843c749SSergey Zigachev   uint8_t  vddsocvrmapping;
1389*b843c749SSergey Zigachev   uint8_t  vddmem0vrmapping;
1390*b843c749SSergey Zigachev   uint8_t  vddmem1vrmapping;
1391*b843c749SSergey Zigachev 
1392*b843c749SSergey Zigachev   uint8_t  gfxulvphasesheddingmask;
1393*b843c749SSergey Zigachev   uint8_t  soculvphasesheddingmask;
1394*b843c749SSergey Zigachev   uint8_t  padding8_v[2];
1395*b843c749SSergey Zigachev 
1396*b843c749SSergey Zigachev   uint16_t gfxmaxcurrent;
1397*b843c749SSergey Zigachev   uint8_t  gfxoffset;
1398*b843c749SSergey Zigachev   uint8_t  padding_telemetrygfx;
1399*b843c749SSergey Zigachev 
1400*b843c749SSergey Zigachev   uint16_t socmaxcurrent;
1401*b843c749SSergey Zigachev   uint8_t  socoffset;
1402*b843c749SSergey Zigachev   uint8_t  padding_telemetrysoc;
1403*b843c749SSergey Zigachev 
1404*b843c749SSergey Zigachev   uint16_t mem0maxcurrent;
1405*b843c749SSergey Zigachev   uint8_t  mem0offset;
1406*b843c749SSergey Zigachev   uint8_t  padding_telemetrymem0;
1407*b843c749SSergey Zigachev 
1408*b843c749SSergey Zigachev   uint16_t mem1maxcurrent;
1409*b843c749SSergey Zigachev   uint8_t  mem1offset;
1410*b843c749SSergey Zigachev   uint8_t  padding_telemetrymem1;
1411*b843c749SSergey Zigachev 
1412*b843c749SSergey Zigachev   uint8_t  acdcgpio;
1413*b843c749SSergey Zigachev   uint8_t  acdcpolarity;
1414*b843c749SSergey Zigachev   uint8_t  vr0hotgpio;
1415*b843c749SSergey Zigachev   uint8_t  vr0hotpolarity;
1416*b843c749SSergey Zigachev 
1417*b843c749SSergey Zigachev   uint8_t  vr1hotgpio;
1418*b843c749SSergey Zigachev   uint8_t  vr1hotpolarity;
1419*b843c749SSergey Zigachev   uint8_t  padding1;
1420*b843c749SSergey Zigachev   uint8_t  padding2;
1421*b843c749SSergey Zigachev 
1422*b843c749SSergey Zigachev   uint8_t  ledpin0;
1423*b843c749SSergey Zigachev   uint8_t  ledpin1;
1424*b843c749SSergey Zigachev   uint8_t  ledpin2;
1425*b843c749SSergey Zigachev   uint8_t  padding8_4;
1426*b843c749SSergey Zigachev 
1427*b843c749SSergey Zigachev 	uint8_t  pllgfxclkspreadenabled;
1428*b843c749SSergey Zigachev 	uint8_t  pllgfxclkspreadpercent;
1429*b843c749SSergey Zigachev 	uint16_t pllgfxclkspreadfreq;
1430*b843c749SSergey Zigachev 
1431*b843c749SSergey Zigachev   uint8_t uclkspreadenabled;
1432*b843c749SSergey Zigachev   uint8_t uclkspreadpercent;
1433*b843c749SSergey Zigachev   uint16_t uclkspreadfreq;
1434*b843c749SSergey Zigachev 
1435*b843c749SSergey Zigachev   uint8_t socclkspreadenabled;
1436*b843c749SSergey Zigachev   uint8_t socclkspreadpercent;
1437*b843c749SSergey Zigachev   uint16_t socclkspreadfreq;
1438*b843c749SSergey Zigachev 
1439*b843c749SSergey Zigachev 	uint8_t  acggfxclkspreadenabled;
1440*b843c749SSergey Zigachev 	uint8_t  acggfxclkspreadpercent;
1441*b843c749SSergey Zigachev 	uint16_t acggfxclkspreadfreq;
1442*b843c749SSergey Zigachev 
1443*b843c749SSergey Zigachev 	uint8_t Vr2_I2C_address;
1444*b843c749SSergey Zigachev 	uint8_t padding_vr2[3];
1445*b843c749SSergey Zigachev 
1446*b843c749SSergey Zigachev 	uint32_t boardreserved[9];
1447*b843c749SSergey Zigachev };
1448*b843c749SSergey Zigachev 
1449*b843c749SSergey Zigachev /*
1450*b843c749SSergey Zigachev   ***************************************************************************
1451*b843c749SSergey Zigachev     Data Table asic_profiling_info  structure
1452*b843c749SSergey Zigachev   ***************************************************************************
1453*b843c749SSergey Zigachev */
1454*b843c749SSergey Zigachev struct  atom_asic_profiling_info_v4_1
1455*b843c749SSergey Zigachev {
1456*b843c749SSergey Zigachev   struct  atom_common_table_header  table_header;
1457*b843c749SSergey Zigachev   uint32_t  maxvddc;
1458*b843c749SSergey Zigachev   uint32_t  minvddc;
1459*b843c749SSergey Zigachev   uint32_t  avfs_meannsigma_acontant0;
1460*b843c749SSergey Zigachev   uint32_t  avfs_meannsigma_acontant1;
1461*b843c749SSergey Zigachev   uint32_t  avfs_meannsigma_acontant2;
1462*b843c749SSergey Zigachev   uint16_t  avfs_meannsigma_dc_tol_sigma;
1463*b843c749SSergey Zigachev   uint16_t  avfs_meannsigma_platform_mean;
1464*b843c749SSergey Zigachev   uint16_t  avfs_meannsigma_platform_sigma;
1465*b843c749SSergey Zigachev   uint32_t  gb_vdroop_table_cksoff_a0;
1466*b843c749SSergey Zigachev   uint32_t  gb_vdroop_table_cksoff_a1;
1467*b843c749SSergey Zigachev   uint32_t  gb_vdroop_table_cksoff_a2;
1468*b843c749SSergey Zigachev   uint32_t  gb_vdroop_table_ckson_a0;
1469*b843c749SSergey Zigachev   uint32_t  gb_vdroop_table_ckson_a1;
1470*b843c749SSergey Zigachev   uint32_t  gb_vdroop_table_ckson_a2;
1471*b843c749SSergey Zigachev   uint32_t  avfsgb_fuse_table_cksoff_m1;
1472*b843c749SSergey Zigachev   uint32_t  avfsgb_fuse_table_cksoff_m2;
1473*b843c749SSergey Zigachev   uint32_t  avfsgb_fuse_table_cksoff_b;
1474*b843c749SSergey Zigachev   uint32_t  avfsgb_fuse_table_ckson_m1;
1475*b843c749SSergey Zigachev   uint32_t  avfsgb_fuse_table_ckson_m2;
1476*b843c749SSergey Zigachev   uint32_t  avfsgb_fuse_table_ckson_b;
1477*b843c749SSergey Zigachev   uint16_t  max_voltage_0_25mv;
1478*b843c749SSergey Zigachev   uint8_t   enable_gb_vdroop_table_cksoff;
1479*b843c749SSergey Zigachev   uint8_t   enable_gb_vdroop_table_ckson;
1480*b843c749SSergey Zigachev   uint8_t   enable_gb_fuse_table_cksoff;
1481*b843c749SSergey Zigachev   uint8_t   enable_gb_fuse_table_ckson;
1482*b843c749SSergey Zigachev   uint16_t  psm_age_comfactor;
1483*b843c749SSergey Zigachev   uint8_t   enable_apply_avfs_cksoff_voltage;
1484*b843c749SSergey Zigachev   uint8_t   reserved;
1485*b843c749SSergey Zigachev   uint32_t  dispclk2gfxclk_a;
1486*b843c749SSergey Zigachev   uint32_t  dispclk2gfxclk_b;
1487*b843c749SSergey Zigachev   uint32_t  dispclk2gfxclk_c;
1488*b843c749SSergey Zigachev   uint32_t  pixclk2gfxclk_a;
1489*b843c749SSergey Zigachev   uint32_t  pixclk2gfxclk_b;
1490*b843c749SSergey Zigachev   uint32_t  pixclk2gfxclk_c;
1491*b843c749SSergey Zigachev   uint32_t  dcefclk2gfxclk_a;
1492*b843c749SSergey Zigachev   uint32_t  dcefclk2gfxclk_b;
1493*b843c749SSergey Zigachev   uint32_t  dcefclk2gfxclk_c;
1494*b843c749SSergey Zigachev   uint32_t  phyclk2gfxclk_a;
1495*b843c749SSergey Zigachev   uint32_t  phyclk2gfxclk_b;
1496*b843c749SSergey Zigachev   uint32_t  phyclk2gfxclk_c;
1497*b843c749SSergey Zigachev };
1498*b843c749SSergey Zigachev 
1499*b843c749SSergey Zigachev struct  atom_asic_profiling_info_v4_2 {
1500*b843c749SSergey Zigachev 	struct  atom_common_table_header  table_header;
1501*b843c749SSergey Zigachev 	uint32_t  maxvddc;
1502*b843c749SSergey Zigachev 	uint32_t  minvddc;
1503*b843c749SSergey Zigachev 	uint32_t  avfs_meannsigma_acontant0;
1504*b843c749SSergey Zigachev 	uint32_t  avfs_meannsigma_acontant1;
1505*b843c749SSergey Zigachev 	uint32_t  avfs_meannsigma_acontant2;
1506*b843c749SSergey Zigachev 	uint16_t  avfs_meannsigma_dc_tol_sigma;
1507*b843c749SSergey Zigachev 	uint16_t  avfs_meannsigma_platform_mean;
1508*b843c749SSergey Zigachev 	uint16_t  avfs_meannsigma_platform_sigma;
1509*b843c749SSergey Zigachev 	uint32_t  gb_vdroop_table_cksoff_a0;
1510*b843c749SSergey Zigachev 	uint32_t  gb_vdroop_table_cksoff_a1;
1511*b843c749SSergey Zigachev 	uint32_t  gb_vdroop_table_cksoff_a2;
1512*b843c749SSergey Zigachev 	uint32_t  gb_vdroop_table_ckson_a0;
1513*b843c749SSergey Zigachev 	uint32_t  gb_vdroop_table_ckson_a1;
1514*b843c749SSergey Zigachev 	uint32_t  gb_vdroop_table_ckson_a2;
1515*b843c749SSergey Zigachev 	uint32_t  avfsgb_fuse_table_cksoff_m1;
1516*b843c749SSergey Zigachev 	uint32_t  avfsgb_fuse_table_cksoff_m2;
1517*b843c749SSergey Zigachev 	uint32_t  avfsgb_fuse_table_cksoff_b;
1518*b843c749SSergey Zigachev 	uint32_t  avfsgb_fuse_table_ckson_m1;
1519*b843c749SSergey Zigachev 	uint32_t  avfsgb_fuse_table_ckson_m2;
1520*b843c749SSergey Zigachev 	uint32_t  avfsgb_fuse_table_ckson_b;
1521*b843c749SSergey Zigachev 	uint16_t  max_voltage_0_25mv;
1522*b843c749SSergey Zigachev 	uint8_t   enable_gb_vdroop_table_cksoff;
1523*b843c749SSergey Zigachev 	uint8_t   enable_gb_vdroop_table_ckson;
1524*b843c749SSergey Zigachev 	uint8_t   enable_gb_fuse_table_cksoff;
1525*b843c749SSergey Zigachev 	uint8_t   enable_gb_fuse_table_ckson;
1526*b843c749SSergey Zigachev 	uint16_t  psm_age_comfactor;
1527*b843c749SSergey Zigachev 	uint8_t   enable_apply_avfs_cksoff_voltage;
1528*b843c749SSergey Zigachev 	uint8_t   reserved;
1529*b843c749SSergey Zigachev 	uint32_t  dispclk2gfxclk_a;
1530*b843c749SSergey Zigachev 	uint32_t  dispclk2gfxclk_b;
1531*b843c749SSergey Zigachev 	uint32_t  dispclk2gfxclk_c;
1532*b843c749SSergey Zigachev 	uint32_t  pixclk2gfxclk_a;
1533*b843c749SSergey Zigachev 	uint32_t  pixclk2gfxclk_b;
1534*b843c749SSergey Zigachev 	uint32_t  pixclk2gfxclk_c;
1535*b843c749SSergey Zigachev 	uint32_t  dcefclk2gfxclk_a;
1536*b843c749SSergey Zigachev 	uint32_t  dcefclk2gfxclk_b;
1537*b843c749SSergey Zigachev 	uint32_t  dcefclk2gfxclk_c;
1538*b843c749SSergey Zigachev 	uint32_t  phyclk2gfxclk_a;
1539*b843c749SSergey Zigachev 	uint32_t  phyclk2gfxclk_b;
1540*b843c749SSergey Zigachev 	uint32_t  phyclk2gfxclk_c;
1541*b843c749SSergey Zigachev 	uint32_t  acg_gb_vdroop_table_a0;
1542*b843c749SSergey Zigachev 	uint32_t  acg_gb_vdroop_table_a1;
1543*b843c749SSergey Zigachev 	uint32_t  acg_gb_vdroop_table_a2;
1544*b843c749SSergey Zigachev 	uint32_t  acg_avfsgb_fuse_table_m1;
1545*b843c749SSergey Zigachev 	uint32_t  acg_avfsgb_fuse_table_m2;
1546*b843c749SSergey Zigachev 	uint32_t  acg_avfsgb_fuse_table_b;
1547*b843c749SSergey Zigachev 	uint8_t   enable_acg_gb_vdroop_table;
1548*b843c749SSergey Zigachev 	uint8_t   enable_acg_gb_fuse_table;
1549*b843c749SSergey Zigachev 	uint32_t  acg_dispclk2gfxclk_a;
1550*b843c749SSergey Zigachev 	uint32_t  acg_dispclk2gfxclk_b;
1551*b843c749SSergey Zigachev 	uint32_t  acg_dispclk2gfxclk_c;
1552*b843c749SSergey Zigachev 	uint32_t  acg_pixclk2gfxclk_a;
1553*b843c749SSergey Zigachev 	uint32_t  acg_pixclk2gfxclk_b;
1554*b843c749SSergey Zigachev 	uint32_t  acg_pixclk2gfxclk_c;
1555*b843c749SSergey Zigachev 	uint32_t  acg_dcefclk2gfxclk_a;
1556*b843c749SSergey Zigachev 	uint32_t  acg_dcefclk2gfxclk_b;
1557*b843c749SSergey Zigachev 	uint32_t  acg_dcefclk2gfxclk_c;
1558*b843c749SSergey Zigachev 	uint32_t  acg_phyclk2gfxclk_a;
1559*b843c749SSergey Zigachev 	uint32_t  acg_phyclk2gfxclk_b;
1560*b843c749SSergey Zigachev 	uint32_t  acg_phyclk2gfxclk_c;
1561*b843c749SSergey Zigachev };
1562*b843c749SSergey Zigachev 
1563*b843c749SSergey Zigachev /*
1564*b843c749SSergey Zigachev   ***************************************************************************
1565*b843c749SSergey Zigachev     Data Table multimedia_info  structure
1566*b843c749SSergey Zigachev   ***************************************************************************
1567*b843c749SSergey Zigachev */
1568*b843c749SSergey Zigachev struct atom_multimedia_info_v2_1
1569*b843c749SSergey Zigachev {
1570*b843c749SSergey Zigachev   struct  atom_common_table_header  table_header;
1571*b843c749SSergey Zigachev   uint8_t uvdip_min_ver;
1572*b843c749SSergey Zigachev   uint8_t uvdip_max_ver;
1573*b843c749SSergey Zigachev   uint8_t vceip_min_ver;
1574*b843c749SSergey Zigachev   uint8_t vceip_max_ver;
1575*b843c749SSergey Zigachev   uint16_t uvd_enc_max_input_width_pixels;
1576*b843c749SSergey Zigachev   uint16_t uvd_enc_max_input_height_pixels;
1577*b843c749SSergey Zigachev   uint16_t vce_enc_max_input_width_pixels;
1578*b843c749SSergey Zigachev   uint16_t vce_enc_max_input_height_pixels;
1579*b843c749SSergey Zigachev   uint32_t uvd_enc_max_bandwidth;           // 16x16 pixels/sec, codec independent
1580*b843c749SSergey Zigachev   uint32_t vce_enc_max_bandwidth;           // 16x16 pixels/sec, codec independent
1581*b843c749SSergey Zigachev };
1582*b843c749SSergey Zigachev 
1583*b843c749SSergey Zigachev 
1584*b843c749SSergey Zigachev /*
1585*b843c749SSergey Zigachev   ***************************************************************************
1586*b843c749SSergey Zigachev     Data Table umc_info  structure
1587*b843c749SSergey Zigachev   ***************************************************************************
1588*b843c749SSergey Zigachev */
1589*b843c749SSergey Zigachev struct atom_umc_info_v3_1
1590*b843c749SSergey Zigachev {
1591*b843c749SSergey Zigachev   struct  atom_common_table_header  table_header;
1592*b843c749SSergey Zigachev   uint32_t ucode_version;
1593*b843c749SSergey Zigachev   uint32_t ucode_rom_startaddr;
1594*b843c749SSergey Zigachev   uint32_t ucode_length;
1595*b843c749SSergey Zigachev   uint16_t umc_reg_init_offset;
1596*b843c749SSergey Zigachev   uint16_t customer_ucode_name_offset;
1597*b843c749SSergey Zigachev   uint16_t mclk_ss_percentage;
1598*b843c749SSergey Zigachev   uint16_t mclk_ss_rate_10hz;
1599*b843c749SSergey Zigachev   uint8_t umcip_min_ver;
1600*b843c749SSergey Zigachev   uint8_t umcip_max_ver;
1601*b843c749SSergey Zigachev   uint8_t vram_type;              //enum of atom_dgpu_vram_type
1602*b843c749SSergey Zigachev   uint8_t umc_config;
1603*b843c749SSergey Zigachev   uint32_t mem_refclk_10khz;
1604*b843c749SSergey Zigachev };
1605*b843c749SSergey Zigachev 
1606*b843c749SSergey Zigachev 
1607*b843c749SSergey Zigachev /*
1608*b843c749SSergey Zigachev   ***************************************************************************
1609*b843c749SSergey Zigachev     Data Table vram_info  structure
1610*b843c749SSergey Zigachev   ***************************************************************************
1611*b843c749SSergey Zigachev */
1612*b843c749SSergey Zigachev struct atom_vram_module_v9
1613*b843c749SSergey Zigachev {
1614*b843c749SSergey Zigachev   // Design Specific Values
1615*b843c749SSergey Zigachev   uint32_t  memory_size;                   // Total memory size in unit of MB for CONFIG_MEMSIZE zeros
1616*b843c749SSergey Zigachev   uint32_t  channel_enable;                // for 32 channel ASIC usage
1617*b843c749SSergey Zigachev   uint32_t  umcch_addrcfg;
1618*b843c749SSergey Zigachev   uint32_t  umcch_addrsel;
1619*b843c749SSergey Zigachev   uint32_t  umcch_colsel;
1620*b843c749SSergey Zigachev   uint16_t  vram_module_size;              // Size of atom_vram_module_v9
1621*b843c749SSergey Zigachev   uint8_t   ext_memory_id;                 // Current memory module ID
1622*b843c749SSergey Zigachev   uint8_t   memory_type;                   // enum of atom_dgpu_vram_type
1623*b843c749SSergey Zigachev   uint8_t   channel_num;                   // Number of mem. channels supported in this module
1624*b843c749SSergey Zigachev   uint8_t   channel_width;                 // CHANNEL_16BIT/CHANNEL_32BIT/CHANNEL_64BIT
1625*b843c749SSergey Zigachev   uint8_t   density;                       // _8Mx32, _16Mx32, _16Mx16, _32Mx16
1626*b843c749SSergey Zigachev   uint8_t   tunningset_id;                 // MC phy registers set per.
1627*b843c749SSergey Zigachev   uint8_t   vender_rev_id;                 // [7:4] Revision, [3:0] Vendor code
1628*b843c749SSergey Zigachev   uint8_t   refreshrate;                   // [1:0]=RefreshFactor (00=8ms, 01=16ms, 10=32ms,11=64ms)
1629*b843c749SSergey Zigachev   uint16_t  vram_rsd2;                     // reserved
1630*b843c749SSergey Zigachev   char    dram_pnstring[20];               // part number end with '0'.
1631*b843c749SSergey Zigachev };
1632*b843c749SSergey Zigachev 
1633*b843c749SSergey Zigachev 
1634*b843c749SSergey Zigachev struct atom_vram_info_header_v2_3
1635*b843c749SSergey Zigachev {
1636*b843c749SSergey Zigachev   struct   atom_common_table_header  table_header;
1637*b843c749SSergey Zigachev   uint16_t mem_adjust_tbloffset;                         // offset of atom_umc_init_reg_block structure for memory vendor specific UMC adjust setting
1638*b843c749SSergey Zigachev   uint16_t mem_clk_patch_tbloffset;                      // offset of atom_umc_init_reg_block structure for memory clock specific UMC setting
1639*b843c749SSergey Zigachev   uint16_t mc_adjust_pertile_tbloffset;                  // offset of atom_umc_init_reg_block structure for Per Byte Offset Preset Settings
1640*b843c749SSergey Zigachev   uint16_t mc_phyinit_tbloffset;                         // offset of atom_umc_init_reg_block structure for MC phy init set
1641*b843c749SSergey Zigachev   uint16_t dram_data_remap_tbloffset;                    // reserved for now
1642*b843c749SSergey Zigachev   uint16_t vram_rsd2[3];
1643*b843c749SSergey Zigachev   uint8_t  vram_module_num;                              // indicate number of VRAM module
1644*b843c749SSergey Zigachev   uint8_t  vram_rsd1[2];
1645*b843c749SSergey Zigachev   uint8_t  mc_phy_tile_num;                              // indicate the MCD tile number which use in DramDataRemapTbl and usMcAdjustPerTileTblOffset
1646*b843c749SSergey Zigachev   struct   atom_vram_module_v9  vram_module[16];         // just for allocation, real number of blocks is in ucNumOfVRAMModule;
1647*b843c749SSergey Zigachev };
1648*b843c749SSergey Zigachev 
1649*b843c749SSergey Zigachev struct atom_umc_register_addr_info{
1650*b843c749SSergey Zigachev   uint32_t  umc_register_addr:24;
1651*b843c749SSergey Zigachev   uint32_t  umc_reg_type_ind:1;
1652*b843c749SSergey Zigachev   uint32_t  umc_reg_rsvd:7;
1653*b843c749SSergey Zigachev };
1654*b843c749SSergey Zigachev 
1655*b843c749SSergey Zigachev //atom_umc_register_addr_info.
1656*b843c749SSergey Zigachev enum atom_umc_register_addr_info_flag{
1657*b843c749SSergey Zigachev   b3ATOM_UMC_REG_ADD_INFO_INDIRECT_ACCESS  =0x01,
1658*b843c749SSergey Zigachev };
1659*b843c749SSergey Zigachev 
1660*b843c749SSergey Zigachev union atom_umc_register_addr_info_access
1661*b843c749SSergey Zigachev {
1662*b843c749SSergey Zigachev   struct atom_umc_register_addr_info umc_reg_addr;
1663*b843c749SSergey Zigachev   uint32_t u32umc_reg_addr;
1664*b843c749SSergey Zigachev };
1665*b843c749SSergey Zigachev 
1666*b843c749SSergey Zigachev struct atom_umc_reg_setting_id_config{
1667*b843c749SSergey Zigachev   uint32_t memclockrange:24;
1668*b843c749SSergey Zigachev   uint32_t mem_blk_id:8;
1669*b843c749SSergey Zigachev };
1670*b843c749SSergey Zigachev 
1671*b843c749SSergey Zigachev union atom_umc_reg_setting_id_config_access
1672*b843c749SSergey Zigachev {
1673*b843c749SSergey Zigachev   struct atom_umc_reg_setting_id_config umc_id_access;
1674*b843c749SSergey Zigachev   uint32_t  u32umc_id_access;
1675*b843c749SSergey Zigachev };
1676*b843c749SSergey Zigachev 
1677*b843c749SSergey Zigachev struct atom_umc_reg_setting_data_block{
1678*b843c749SSergey Zigachev   union atom_umc_reg_setting_id_config_access  block_id;
1679*b843c749SSergey Zigachev   uint32_t u32umc_reg_data[1];
1680*b843c749SSergey Zigachev };
1681*b843c749SSergey Zigachev 
1682*b843c749SSergey Zigachev struct atom_umc_init_reg_block{
1683*b843c749SSergey Zigachev   uint16_t umc_reg_num;
1684*b843c749SSergey Zigachev   uint16_t reserved;
1685*b843c749SSergey Zigachev   union atom_umc_register_addr_info_access umc_reg_list[1];     //for allocation purpose, the real number come from umc_reg_num;
1686*b843c749SSergey Zigachev   struct atom_umc_reg_setting_data_block umc_reg_setting_list[1];
1687*b843c749SSergey Zigachev };
1688*b843c749SSergey Zigachev 
1689*b843c749SSergey Zigachev 
1690*b843c749SSergey Zigachev /*
1691*b843c749SSergey Zigachev   ***************************************************************************
1692*b843c749SSergey Zigachev     Data Table voltageobject_info  structure
1693*b843c749SSergey Zigachev   ***************************************************************************
1694*b843c749SSergey Zigachev */
1695*b843c749SSergey Zigachev struct  atom_i2c_data_entry
1696*b843c749SSergey Zigachev {
1697*b843c749SSergey Zigachev   uint16_t  i2c_reg_index;               // i2c register address, can be up to 16bit
1698*b843c749SSergey Zigachev   uint16_t  i2c_reg_data;                // i2c register data, can be up to 16bit
1699*b843c749SSergey Zigachev };
1700*b843c749SSergey Zigachev 
1701*b843c749SSergey Zigachev struct atom_voltage_object_header_v4{
1702*b843c749SSergey Zigachev   uint8_t    voltage_type;                           //enum atom_voltage_type
1703*b843c749SSergey Zigachev   uint8_t    voltage_mode;                           //enum atom_voltage_object_mode
1704*b843c749SSergey Zigachev   uint16_t   object_size;                            //Size of Object
1705*b843c749SSergey Zigachev };
1706*b843c749SSergey Zigachev 
1707*b843c749SSergey Zigachev // atom_voltage_object_header_v4.voltage_mode
1708*b843c749SSergey Zigachev enum atom_voltage_object_mode
1709*b843c749SSergey Zigachev {
1710*b843c749SSergey Zigachev    VOLTAGE_OBJ_GPIO_LUT              =  0,        //VOLTAGE and GPIO Lookup table ->atom_gpio_voltage_object_v4
1711*b843c749SSergey Zigachev    VOLTAGE_OBJ_VR_I2C_INIT_SEQ       =  3,        //VOLTAGE REGULATOR INIT sequece through I2C -> atom_i2c_voltage_object_v4
1712*b843c749SSergey Zigachev    VOLTAGE_OBJ_PHASE_LUT             =  4,        //Set Vregulator Phase lookup table ->atom_gpio_voltage_object_v4
1713*b843c749SSergey Zigachev    VOLTAGE_OBJ_SVID2                 =  7,        //Indicate voltage control by SVID2 ->atom_svid2_voltage_object_v4
1714*b843c749SSergey Zigachev    VOLTAGE_OBJ_EVV                   =  8,
1715*b843c749SSergey Zigachev    VOLTAGE_OBJ_MERGED_POWER          =  9,
1716*b843c749SSergey Zigachev };
1717*b843c749SSergey Zigachev 
1718*b843c749SSergey Zigachev struct  atom_i2c_voltage_object_v4
1719*b843c749SSergey Zigachev {
1720*b843c749SSergey Zigachev    struct atom_voltage_object_header_v4 header;  // voltage mode = VOLTAGE_OBJ_VR_I2C_INIT_SEQ
1721*b843c749SSergey Zigachev    uint8_t  regulator_id;                        //Indicate Voltage Regulator Id
1722*b843c749SSergey Zigachev    uint8_t  i2c_id;
1723*b843c749SSergey Zigachev    uint8_t  i2c_slave_addr;
1724*b843c749SSergey Zigachev    uint8_t  i2c_control_offset;
1725*b843c749SSergey Zigachev    uint8_t  i2c_flag;                            // Bit0: 0 - One byte data; 1 - Two byte data
1726*b843c749SSergey Zigachev    uint8_t  i2c_speed;                           // =0, use default i2c speed, otherwise use it in unit of kHz.
1727*b843c749SSergey Zigachev    uint8_t  reserved[2];
1728*b843c749SSergey Zigachev    struct atom_i2c_data_entry i2cdatalut[1];     // end with 0xff
1729*b843c749SSergey Zigachev };
1730*b843c749SSergey Zigachev 
1731*b843c749SSergey Zigachev // ATOM_I2C_VOLTAGE_OBJECT_V3.ucVoltageControlFlag
1732*b843c749SSergey Zigachev enum atom_i2c_voltage_control_flag
1733*b843c749SSergey Zigachev {
1734*b843c749SSergey Zigachev    VOLTAGE_DATA_ONE_BYTE = 0,
1735*b843c749SSergey Zigachev    VOLTAGE_DATA_TWO_BYTE = 1,
1736*b843c749SSergey Zigachev };
1737*b843c749SSergey Zigachev 
1738*b843c749SSergey Zigachev 
1739*b843c749SSergey Zigachev struct atom_voltage_gpio_map_lut
1740*b843c749SSergey Zigachev {
1741*b843c749SSergey Zigachev   uint32_t  voltage_gpio_reg_val;              // The Voltage ID which is used to program GPIO register
1742*b843c749SSergey Zigachev   uint16_t  voltage_level_mv;                  // The corresponding Voltage Value, in mV
1743*b843c749SSergey Zigachev };
1744*b843c749SSergey Zigachev 
1745*b843c749SSergey Zigachev struct atom_gpio_voltage_object_v4
1746*b843c749SSergey Zigachev {
1747*b843c749SSergey Zigachev    struct atom_voltage_object_header_v4 header;  // voltage mode = VOLTAGE_OBJ_GPIO_LUT or VOLTAGE_OBJ_PHASE_LUT
1748*b843c749SSergey Zigachev    uint8_t  gpio_control_id;                     // default is 0 which indicate control through CG VID mode
1749*b843c749SSergey Zigachev    uint8_t  gpio_entry_num;                      // indiate the entry numbers of Votlage/Gpio value Look up table
1750*b843c749SSergey Zigachev    uint8_t  phase_delay_us;                      // phase delay in unit of micro second
1751*b843c749SSergey Zigachev    uint8_t  reserved;
1752*b843c749SSergey Zigachev    uint32_t gpio_mask_val;                         // GPIO Mask value
1753*b843c749SSergey Zigachev    struct atom_voltage_gpio_map_lut voltage_gpio_lut[1];
1754*b843c749SSergey Zigachev };
1755*b843c749SSergey Zigachev 
1756*b843c749SSergey Zigachev struct  atom_svid2_voltage_object_v4
1757*b843c749SSergey Zigachev {
1758*b843c749SSergey Zigachev    struct atom_voltage_object_header_v4 header;  // voltage mode = VOLTAGE_OBJ_SVID2
1759*b843c749SSergey Zigachev    uint8_t loadline_psi1;                        // bit4:0= loadline setting ( Core Loadline trim and offset trim ), bit5=0:PSI1_L disable =1: PSI1_L enable
1760*b843c749SSergey Zigachev    uint8_t psi0_l_vid_thresd;                    // VR PSI0_L VID threshold
1761*b843c749SSergey Zigachev    uint8_t psi0_enable;                          //
1762*b843c749SSergey Zigachev    uint8_t maxvstep;
1763*b843c749SSergey Zigachev    uint8_t telemetry_offset;
1764*b843c749SSergey Zigachev    uint8_t telemetry_gain;
1765*b843c749SSergey Zigachev    uint16_t reserved1;
1766*b843c749SSergey Zigachev };
1767*b843c749SSergey Zigachev 
1768*b843c749SSergey Zigachev struct atom_merged_voltage_object_v4
1769*b843c749SSergey Zigachev {
1770*b843c749SSergey Zigachev   struct atom_voltage_object_header_v4 header;  // voltage mode = VOLTAGE_OBJ_MERGED_POWER
1771*b843c749SSergey Zigachev   uint8_t  merged_powerrail_type;               //enum atom_voltage_type
1772*b843c749SSergey Zigachev   uint8_t  reserved[3];
1773*b843c749SSergey Zigachev };
1774*b843c749SSergey Zigachev 
1775*b843c749SSergey Zigachev union atom_voltage_object_v4{
1776*b843c749SSergey Zigachev   struct atom_gpio_voltage_object_v4 gpio_voltage_obj;
1777*b843c749SSergey Zigachev   struct atom_i2c_voltage_object_v4 i2c_voltage_obj;
1778*b843c749SSergey Zigachev   struct atom_svid2_voltage_object_v4 svid2_voltage_obj;
1779*b843c749SSergey Zigachev   struct atom_merged_voltage_object_v4 merged_voltage_obj;
1780*b843c749SSergey Zigachev };
1781*b843c749SSergey Zigachev 
1782*b843c749SSergey Zigachev struct  atom_voltage_objects_info_v4_1
1783*b843c749SSergey Zigachev {
1784*b843c749SSergey Zigachev   struct atom_common_table_header table_header;
1785*b843c749SSergey Zigachev   union atom_voltage_object_v4 voltage_object[1];   //Info for Voltage control
1786*b843c749SSergey Zigachev };
1787*b843c749SSergey Zigachev 
1788*b843c749SSergey Zigachev 
1789*b843c749SSergey Zigachev /*
1790*b843c749SSergey Zigachev   ***************************************************************************
1791*b843c749SSergey Zigachev               All Command Function structure definition
1792*b843c749SSergey Zigachev   ***************************************************************************
1793*b843c749SSergey Zigachev */
1794*b843c749SSergey Zigachev 
1795*b843c749SSergey Zigachev /*
1796*b843c749SSergey Zigachev   ***************************************************************************
1797*b843c749SSergey Zigachev               Structures used by asic_init
1798*b843c749SSergey Zigachev   ***************************************************************************
1799*b843c749SSergey Zigachev */
1800*b843c749SSergey Zigachev 
1801*b843c749SSergey Zigachev struct asic_init_engine_parameters
1802*b843c749SSergey Zigachev {
1803*b843c749SSergey Zigachev   uint32_t sclkfreqin10khz:24;
1804*b843c749SSergey Zigachev   uint32_t engineflag:8;              /* enum atom_asic_init_engine_flag  */
1805*b843c749SSergey Zigachev };
1806*b843c749SSergey Zigachev 
1807*b843c749SSergey Zigachev struct asic_init_mem_parameters
1808*b843c749SSergey Zigachev {
1809*b843c749SSergey Zigachev   uint32_t mclkfreqin10khz:24;
1810*b843c749SSergey Zigachev   uint32_t memflag:8;                 /* enum atom_asic_init_mem_flag  */
1811*b843c749SSergey Zigachev };
1812*b843c749SSergey Zigachev 
1813*b843c749SSergey Zigachev struct asic_init_parameters_v2_1
1814*b843c749SSergey Zigachev {
1815*b843c749SSergey Zigachev   struct asic_init_engine_parameters engineparam;
1816*b843c749SSergey Zigachev   struct asic_init_mem_parameters memparam;
1817*b843c749SSergey Zigachev };
1818*b843c749SSergey Zigachev 
1819*b843c749SSergey Zigachev struct asic_init_ps_allocation_v2_1
1820*b843c749SSergey Zigachev {
1821*b843c749SSergey Zigachev   struct asic_init_parameters_v2_1 param;
1822*b843c749SSergey Zigachev   uint32_t reserved[16];
1823*b843c749SSergey Zigachev };
1824*b843c749SSergey Zigachev 
1825*b843c749SSergey Zigachev 
1826*b843c749SSergey Zigachev enum atom_asic_init_engine_flag
1827*b843c749SSergey Zigachev {
1828*b843c749SSergey Zigachev   b3NORMAL_ENGINE_INIT = 0,
1829*b843c749SSergey Zigachev   b3SRIOV_SKIP_ASIC_INIT = 0x02,
1830*b843c749SSergey Zigachev   b3SRIOV_LOAD_UCODE = 0x40,
1831*b843c749SSergey Zigachev };
1832*b843c749SSergey Zigachev 
1833*b843c749SSergey Zigachev enum atom_asic_init_mem_flag
1834*b843c749SSergey Zigachev {
1835*b843c749SSergey Zigachev   b3NORMAL_MEM_INIT = 0,
1836*b843c749SSergey Zigachev   b3DRAM_SELF_REFRESH_EXIT =0x20,
1837*b843c749SSergey Zigachev };
1838*b843c749SSergey Zigachev 
1839*b843c749SSergey Zigachev /*
1840*b843c749SSergey Zigachev   ***************************************************************************
1841*b843c749SSergey Zigachev               Structures used by setengineclock
1842*b843c749SSergey Zigachev   ***************************************************************************
1843*b843c749SSergey Zigachev */
1844*b843c749SSergey Zigachev 
1845*b843c749SSergey Zigachev struct set_engine_clock_parameters_v2_1
1846*b843c749SSergey Zigachev {
1847*b843c749SSergey Zigachev   uint32_t sclkfreqin10khz:24;
1848*b843c749SSergey Zigachev   uint32_t sclkflag:8;              /* enum atom_set_engine_mem_clock_flag,  */
1849*b843c749SSergey Zigachev   uint32_t reserved[10];
1850*b843c749SSergey Zigachev };
1851*b843c749SSergey Zigachev 
1852*b843c749SSergey Zigachev struct set_engine_clock_ps_allocation_v2_1
1853*b843c749SSergey Zigachev {
1854*b843c749SSergey Zigachev   struct set_engine_clock_parameters_v2_1 clockinfo;
1855*b843c749SSergey Zigachev   uint32_t reserved[10];
1856*b843c749SSergey Zigachev };
1857*b843c749SSergey Zigachev 
1858*b843c749SSergey Zigachev 
1859*b843c749SSergey Zigachev enum atom_set_engine_mem_clock_flag
1860*b843c749SSergey Zigachev {
1861*b843c749SSergey Zigachev   b3NORMAL_CHANGE_CLOCK = 0,
1862*b843c749SSergey Zigachev   b3FIRST_TIME_CHANGE_CLOCK = 0x08,
1863*b843c749SSergey Zigachev   b3STORE_DPM_TRAINGING = 0x40,         //Applicable to memory clock change,when set, it store specific DPM mode training result
1864*b843c749SSergey Zigachev };
1865*b843c749SSergey Zigachev 
1866*b843c749SSergey Zigachev /*
1867*b843c749SSergey Zigachev   ***************************************************************************
1868*b843c749SSergey Zigachev               Structures used by getengineclock
1869*b843c749SSergey Zigachev   ***************************************************************************
1870*b843c749SSergey Zigachev */
1871*b843c749SSergey Zigachev struct get_engine_clock_parameter
1872*b843c749SSergey Zigachev {
1873*b843c749SSergey Zigachev   uint32_t sclk_10khz;          // current engine speed in 10KHz unit
1874*b843c749SSergey Zigachev   uint32_t reserved;
1875*b843c749SSergey Zigachev };
1876*b843c749SSergey Zigachev 
1877*b843c749SSergey Zigachev /*
1878*b843c749SSergey Zigachev   ***************************************************************************
1879*b843c749SSergey Zigachev               Structures used by setmemoryclock
1880*b843c749SSergey Zigachev   ***************************************************************************
1881*b843c749SSergey Zigachev */
1882*b843c749SSergey Zigachev struct set_memory_clock_parameters_v2_1
1883*b843c749SSergey Zigachev {
1884*b843c749SSergey Zigachev   uint32_t mclkfreqin10khz:24;
1885*b843c749SSergey Zigachev   uint32_t mclkflag:8;              /* enum atom_set_engine_mem_clock_flag,  */
1886*b843c749SSergey Zigachev   uint32_t reserved[10];
1887*b843c749SSergey Zigachev };
1888*b843c749SSergey Zigachev 
1889*b843c749SSergey Zigachev struct set_memory_clock_ps_allocation_v2_1
1890*b843c749SSergey Zigachev {
1891*b843c749SSergey Zigachev   struct set_memory_clock_parameters_v2_1 clockinfo;
1892*b843c749SSergey Zigachev   uint32_t reserved[10];
1893*b843c749SSergey Zigachev };
1894*b843c749SSergey Zigachev 
1895*b843c749SSergey Zigachev 
1896*b843c749SSergey Zigachev /*
1897*b843c749SSergey Zigachev   ***************************************************************************
1898*b843c749SSergey Zigachev               Structures used by getmemoryclock
1899*b843c749SSergey Zigachev   ***************************************************************************
1900*b843c749SSergey Zigachev */
1901*b843c749SSergey Zigachev struct get_memory_clock_parameter
1902*b843c749SSergey Zigachev {
1903*b843c749SSergey Zigachev   uint32_t mclk_10khz;          // current engine speed in 10KHz unit
1904*b843c749SSergey Zigachev   uint32_t reserved;
1905*b843c749SSergey Zigachev };
1906*b843c749SSergey Zigachev 
1907*b843c749SSergey Zigachev 
1908*b843c749SSergey Zigachev 
1909*b843c749SSergey Zigachev /*
1910*b843c749SSergey Zigachev   ***************************************************************************
1911*b843c749SSergey Zigachev               Structures used by setvoltage
1912*b843c749SSergey Zigachev   ***************************************************************************
1913*b843c749SSergey Zigachev */
1914*b843c749SSergey Zigachev 
1915*b843c749SSergey Zigachev struct set_voltage_parameters_v1_4
1916*b843c749SSergey Zigachev {
1917*b843c749SSergey Zigachev   uint8_t  voltagetype;                /* enum atom_voltage_type */
1918*b843c749SSergey Zigachev   uint8_t  command;                    /* Indicate action: Set voltage level, enum atom_set_voltage_command */
1919*b843c749SSergey Zigachev   uint16_t vlevel_mv;                  /* real voltage level in unit of mv or Voltage Phase (0, 1, 2, .. ) */
1920*b843c749SSergey Zigachev };
1921*b843c749SSergey Zigachev 
1922*b843c749SSergey Zigachev //set_voltage_parameters_v2_1.voltagemode
1923*b843c749SSergey Zigachev enum atom_set_voltage_command{
1924*b843c749SSergey Zigachev   ATOM_SET_VOLTAGE  = 0,
1925*b843c749SSergey Zigachev   ATOM_INIT_VOLTAGE_REGULATOR = 3,
1926*b843c749SSergey Zigachev   ATOM_SET_VOLTAGE_PHASE = 4,
1927*b843c749SSergey Zigachev   ATOM_GET_LEAKAGE_ID    = 8,
1928*b843c749SSergey Zigachev };
1929*b843c749SSergey Zigachev 
1930*b843c749SSergey Zigachev struct set_voltage_ps_allocation_v1_4
1931*b843c749SSergey Zigachev {
1932*b843c749SSergey Zigachev   struct set_voltage_parameters_v1_4 setvoltageparam;
1933*b843c749SSergey Zigachev   uint32_t reserved[10];
1934*b843c749SSergey Zigachev };
1935*b843c749SSergey Zigachev 
1936*b843c749SSergey Zigachev 
1937*b843c749SSergey Zigachev /*
1938*b843c749SSergey Zigachev   ***************************************************************************
1939*b843c749SSergey Zigachev               Structures used by computegpuclockparam
1940*b843c749SSergey Zigachev   ***************************************************************************
1941*b843c749SSergey Zigachev */
1942*b843c749SSergey Zigachev 
1943*b843c749SSergey Zigachev //ATOM_COMPUTE_CLOCK_FREQ.ulComputeClockFlag
1944*b843c749SSergey Zigachev enum atom_gpu_clock_type
1945*b843c749SSergey Zigachev {
1946*b843c749SSergey Zigachev   COMPUTE_GPUCLK_INPUT_FLAG_DEFAULT_GPUCLK =0x00,
1947*b843c749SSergey Zigachev   COMPUTE_GPUCLK_INPUT_FLAG_GFXCLK =0x01,
1948*b843c749SSergey Zigachev   COMPUTE_GPUCLK_INPUT_FLAG_UCLK =0x02,
1949*b843c749SSergey Zigachev };
1950*b843c749SSergey Zigachev 
1951*b843c749SSergey Zigachev struct compute_gpu_clock_input_parameter_v1_8
1952*b843c749SSergey Zigachev {
1953*b843c749SSergey Zigachev   uint32_t  gpuclock_10khz:24;         //Input= target clock, output = actual clock
1954*b843c749SSergey Zigachev   uint32_t  gpu_clock_type:8;          //Input indicate clock type: enum atom_gpu_clock_type
1955*b843c749SSergey Zigachev   uint32_t  reserved[5];
1956*b843c749SSergey Zigachev };
1957*b843c749SSergey Zigachev 
1958*b843c749SSergey Zigachev 
1959*b843c749SSergey Zigachev struct compute_gpu_clock_output_parameter_v1_8
1960*b843c749SSergey Zigachev {
1961*b843c749SSergey Zigachev   uint32_t  gpuclock_10khz:24;              //Input= target clock, output = actual clock
1962*b843c749SSergey Zigachev   uint32_t  dfs_did:8;                      //return parameter: DFS divider which is used to program to register directly
1963*b843c749SSergey Zigachev   uint32_t  pll_fb_mult;                    //Feedback Multiplier, bit 8:0 int, bit 15:12 post_div, bit 31:16 frac
1964*b843c749SSergey Zigachev   uint32_t  pll_ss_fbsmult;                 // Spread FB Mult: bit 8:0 int, bit 31:16 frac
1965*b843c749SSergey Zigachev   uint16_t  pll_ss_slew_frac;
1966*b843c749SSergey Zigachev   uint8_t   pll_ss_enable;
1967*b843c749SSergey Zigachev   uint8_t   reserved;
1968*b843c749SSergey Zigachev   uint32_t  reserved1[2];
1969*b843c749SSergey Zigachev };
1970*b843c749SSergey Zigachev 
1971*b843c749SSergey Zigachev 
1972*b843c749SSergey Zigachev 
1973*b843c749SSergey Zigachev /*
1974*b843c749SSergey Zigachev   ***************************************************************************
1975*b843c749SSergey Zigachev               Structures used by ReadEfuseValue
1976*b843c749SSergey Zigachev   ***************************************************************************
1977*b843c749SSergey Zigachev */
1978*b843c749SSergey Zigachev 
1979*b843c749SSergey Zigachev struct read_efuse_input_parameters_v3_1
1980*b843c749SSergey Zigachev {
1981*b843c749SSergey Zigachev   uint16_t efuse_start_index;
1982*b843c749SSergey Zigachev   uint8_t  reserved;
1983*b843c749SSergey Zigachev   uint8_t  bitslen;
1984*b843c749SSergey Zigachev };
1985*b843c749SSergey Zigachev 
1986*b843c749SSergey Zigachev // ReadEfuseValue input/output parameter
1987*b843c749SSergey Zigachev union read_efuse_value_parameters_v3_1
1988*b843c749SSergey Zigachev {
1989*b843c749SSergey Zigachev   struct read_efuse_input_parameters_v3_1 efuse_info;
1990*b843c749SSergey Zigachev   uint32_t efusevalue;
1991*b843c749SSergey Zigachev };
1992*b843c749SSergey Zigachev 
1993*b843c749SSergey Zigachev 
1994*b843c749SSergey Zigachev /*
1995*b843c749SSergey Zigachev   ***************************************************************************
1996*b843c749SSergey Zigachev               Structures used by getsmuclockinfo
1997*b843c749SSergey Zigachev   ***************************************************************************
1998*b843c749SSergey Zigachev */
1999*b843c749SSergey Zigachev struct atom_get_smu_clock_info_parameters_v3_1
2000*b843c749SSergey Zigachev {
2001*b843c749SSergey Zigachev   uint8_t syspll_id;          // 0= syspll0, 1=syspll1, 2=syspll2
2002*b843c749SSergey Zigachev   uint8_t clk_id;             // atom_smu9_syspll0_clock_id  (only valid when command == GET_SMU_CLOCK_INFO_V3_1_GET_CLOCK_FREQ )
2003*b843c749SSergey Zigachev   uint8_t command;            // enum of atom_get_smu_clock_info_command
2004*b843c749SSergey Zigachev   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 )
2005*b843c749SSergey Zigachev };
2006*b843c749SSergey Zigachev 
2007*b843c749SSergey Zigachev enum atom_get_smu_clock_info_command
2008*b843c749SSergey Zigachev {
2009*b843c749SSergey Zigachev   GET_SMU_CLOCK_INFO_V3_1_GET_CLOCK_FREQ       = 0,
2010*b843c749SSergey Zigachev   GET_SMU_CLOCK_INFO_V3_1_GET_PLLVCO_FREQ      = 1,
2011*b843c749SSergey Zigachev   GET_SMU_CLOCK_INFO_V3_1_GET_PLLREFCLK_FREQ   = 2,
2012*b843c749SSergey Zigachev };
2013*b843c749SSergey Zigachev 
2014*b843c749SSergey Zigachev enum atom_smu9_syspll0_clock_id
2015*b843c749SSergey Zigachev {
2016*b843c749SSergey Zigachev   SMU9_SYSPLL0_SMNCLK_ID   = 0,       //  SMNCLK
2017*b843c749SSergey Zigachev   SMU9_SYSPLL0_SOCCLK_ID   = 1,       //	SOCCLK (FCLK)
2018*b843c749SSergey Zigachev   SMU9_SYSPLL0_MP0CLK_ID   = 2,       //	MP0CLK
2019*b843c749SSergey Zigachev   SMU9_SYSPLL0_MP1CLK_ID   = 3,       //	MP1CLK
2020*b843c749SSergey Zigachev   SMU9_SYSPLL0_LCLK_ID     = 4,       //	LCLK
2021*b843c749SSergey Zigachev   SMU9_SYSPLL0_DCLK_ID     = 5,       //	DCLK
2022*b843c749SSergey Zigachev   SMU9_SYSPLL0_VCLK_ID     = 6,       //	VCLK
2023*b843c749SSergey Zigachev   SMU9_SYSPLL0_ECLK_ID     = 7,       //	ECLK
2024*b843c749SSergey Zigachev   SMU9_SYSPLL0_DCEFCLK_ID  = 8,       //	DCEFCLK
2025*b843c749SSergey Zigachev   SMU9_SYSPLL0_DPREFCLK_ID = 10,      //	DPREFCLK
2026*b843c749SSergey Zigachev   SMU9_SYSPLL0_DISPCLK_ID  = 11,      //	DISPCLK
2027*b843c749SSergey Zigachev };
2028*b843c749SSergey Zigachev 
2029*b843c749SSergey Zigachev enum atom_smu11_syspll_id {
2030*b843c749SSergey Zigachev   SMU11_SYSPLL0_ID            = 0,
2031*b843c749SSergey Zigachev   SMU11_SYSPLL1_0_ID          = 1,
2032*b843c749SSergey Zigachev   SMU11_SYSPLL1_1_ID          = 2,
2033*b843c749SSergey Zigachev   SMU11_SYSPLL1_2_ID          = 3,
2034*b843c749SSergey Zigachev   SMU11_SYSPLL2_ID            = 4,
2035*b843c749SSergey Zigachev   SMU11_SYSPLL3_0_ID          = 5,
2036*b843c749SSergey Zigachev   SMU11_SYSPLL3_1_ID          = 6,
2037*b843c749SSergey Zigachev };
2038*b843c749SSergey Zigachev 
2039*b843c749SSergey Zigachev enum atom_smu11_syspll0_clock_id {
2040*b843c749SSergey Zigachev   SMU11_SYSPLL0_ECLK_ID     = 0,       //	ECLK
2041*b843c749SSergey Zigachev   SMU11_SYSPLL0_SOCCLK_ID   = 1,       //	SOCCLK
2042*b843c749SSergey Zigachev   SMU11_SYSPLL0_MP0CLK_ID   = 2,       //	MP0CLK
2043*b843c749SSergey Zigachev   SMU11_SYSPLL0_DCLK_ID     = 3,       //	DCLK
2044*b843c749SSergey Zigachev   SMU11_SYSPLL0_VCLK_ID     = 4,       //	VCLK
2045*b843c749SSergey Zigachev   SMU11_SYSPLL0_DCEFCLK_ID  = 5,       //	DCEFCLK
2046*b843c749SSergey Zigachev };
2047*b843c749SSergey Zigachev 
2048*b843c749SSergey Zigachev enum atom_smu11_syspll1_0_clock_id {
2049*b843c749SSergey Zigachev   SMU11_SYSPLL1_0_UCLKA_ID   = 0,       // UCLK_a
2050*b843c749SSergey Zigachev };
2051*b843c749SSergey Zigachev 
2052*b843c749SSergey Zigachev enum atom_smu11_syspll1_1_clock_id {
2053*b843c749SSergey Zigachev   SMU11_SYSPLL1_0_UCLKB_ID   = 0,       // UCLK_b
2054*b843c749SSergey Zigachev };
2055*b843c749SSergey Zigachev 
2056*b843c749SSergey Zigachev enum atom_smu11_syspll1_2_clock_id {
2057*b843c749SSergey Zigachev   SMU11_SYSPLL1_0_FCLK_ID   = 0,        // FCLK
2058*b843c749SSergey Zigachev };
2059*b843c749SSergey Zigachev 
2060*b843c749SSergey Zigachev enum atom_smu11_syspll2_clock_id {
2061*b843c749SSergey Zigachev   SMU11_SYSPLL2_GFXCLK_ID   = 0,        // GFXCLK
2062*b843c749SSergey Zigachev };
2063*b843c749SSergey Zigachev 
2064*b843c749SSergey Zigachev enum atom_smu11_syspll3_0_clock_id {
2065*b843c749SSergey Zigachev   SMU11_SYSPLL3_0_WAFCLK_ID = 0,       //	WAFCLK
2066*b843c749SSergey Zigachev   SMU11_SYSPLL3_0_DISPCLK_ID = 1,      //	DISPCLK
2067*b843c749SSergey Zigachev   SMU11_SYSPLL3_0_DPREFCLK_ID = 2,     //	DPREFCLK
2068*b843c749SSergey Zigachev };
2069*b843c749SSergey Zigachev 
2070*b843c749SSergey Zigachev enum atom_smu11_syspll3_1_clock_id {
2071*b843c749SSergey Zigachev   SMU11_SYSPLL3_1_MP1CLK_ID = 0,       //	MP1CLK
2072*b843c749SSergey Zigachev   SMU11_SYSPLL3_1_SMNCLK_ID = 1,       //	SMNCLK
2073*b843c749SSergey Zigachev   SMU11_SYSPLL3_1_LCLK_ID = 2,         //	LCLK
2074*b843c749SSergey Zigachev };
2075*b843c749SSergey Zigachev 
2076*b843c749SSergey Zigachev struct  atom_get_smu_clock_info_output_parameters_v3_1
2077*b843c749SSergey Zigachev {
2078*b843c749SSergey Zigachev   union {
2079*b843c749SSergey Zigachev     uint32_t smu_clock_freq_hz;
2080*b843c749SSergey Zigachev     uint32_t syspllvcofreq_10khz;
2081*b843c749SSergey Zigachev     uint32_t sysspllrefclk_10khz;
2082*b843c749SSergey Zigachev   }atom_smu_outputclkfreq;
2083*b843c749SSergey Zigachev };
2084*b843c749SSergey Zigachev 
2085*b843c749SSergey Zigachev 
2086*b843c749SSergey Zigachev 
2087*b843c749SSergey Zigachev /*
2088*b843c749SSergey Zigachev   ***************************************************************************
2089*b843c749SSergey Zigachev               Structures used by dynamicmemorysettings
2090*b843c749SSergey Zigachev   ***************************************************************************
2091*b843c749SSergey Zigachev */
2092*b843c749SSergey Zigachev 
2093*b843c749SSergey Zigachev enum atom_dynamic_memory_setting_command
2094*b843c749SSergey Zigachev {
2095*b843c749SSergey Zigachev   COMPUTE_MEMORY_PLL_PARAM = 1,
2096*b843c749SSergey Zigachev   COMPUTE_ENGINE_PLL_PARAM = 2,
2097*b843c749SSergey Zigachev   ADJUST_MC_SETTING_PARAM = 3,
2098*b843c749SSergey Zigachev };
2099*b843c749SSergey Zigachev 
2100*b843c749SSergey Zigachev /* when command = COMPUTE_MEMORY_PLL_PARAM or ADJUST_MC_SETTING_PARAM */
2101*b843c749SSergey Zigachev struct dynamic_mclk_settings_parameters_v2_1
2102*b843c749SSergey Zigachev {
2103*b843c749SSergey Zigachev   uint32_t  mclk_10khz:24;         //Input= target mclk
2104*b843c749SSergey Zigachev   uint32_t  command:8;             //command enum of atom_dynamic_memory_setting_command
2105*b843c749SSergey Zigachev   uint32_t  reserved;
2106*b843c749SSergey Zigachev };
2107*b843c749SSergey Zigachev 
2108*b843c749SSergey Zigachev /* when command = COMPUTE_ENGINE_PLL_PARAM */
2109*b843c749SSergey Zigachev struct dynamic_sclk_settings_parameters_v2_1
2110*b843c749SSergey Zigachev {
2111*b843c749SSergey Zigachev   uint32_t  sclk_10khz:24;         //Input= target mclk
2112*b843c749SSergey Zigachev   uint32_t  command:8;             //command enum of atom_dynamic_memory_setting_command
2113*b843c749SSergey Zigachev   uint32_t  mclk_10khz;
2114*b843c749SSergey Zigachev   uint32_t  reserved;
2115*b843c749SSergey Zigachev };
2116*b843c749SSergey Zigachev 
2117*b843c749SSergey Zigachev union dynamic_memory_settings_parameters_v2_1
2118*b843c749SSergey Zigachev {
2119*b843c749SSergey Zigachev   struct dynamic_mclk_settings_parameters_v2_1 mclk_setting;
2120*b843c749SSergey Zigachev   struct dynamic_sclk_settings_parameters_v2_1 sclk_setting;
2121*b843c749SSergey Zigachev };
2122*b843c749SSergey Zigachev 
2123*b843c749SSergey Zigachev 
2124*b843c749SSergey Zigachev 
2125*b843c749SSergey Zigachev /*
2126*b843c749SSergey Zigachev   ***************************************************************************
2127*b843c749SSergey Zigachev               Structures used by memorytraining
2128*b843c749SSergey Zigachev   ***************************************************************************
2129*b843c749SSergey Zigachev */
2130*b843c749SSergey Zigachev 
2131*b843c749SSergey Zigachev enum atom_umc6_0_ucode_function_call_enum_id
2132*b843c749SSergey Zigachev {
2133*b843c749SSergey Zigachev   UMC60_UCODE_FUNC_ID_REINIT                 = 0,
2134*b843c749SSergey Zigachev   UMC60_UCODE_FUNC_ID_ENTER_SELFREFRESH      = 1,
2135*b843c749SSergey Zigachev   UMC60_UCODE_FUNC_ID_EXIT_SELFREFRESH       = 2,
2136*b843c749SSergey Zigachev };
2137*b843c749SSergey Zigachev 
2138*b843c749SSergey Zigachev 
2139*b843c749SSergey Zigachev struct memory_training_parameters_v2_1
2140*b843c749SSergey Zigachev {
2141*b843c749SSergey Zigachev   uint8_t ucode_func_id;
2142*b843c749SSergey Zigachev   uint8_t ucode_reserved[3];
2143*b843c749SSergey Zigachev   uint32_t reserved[5];
2144*b843c749SSergey Zigachev };
2145*b843c749SSergey Zigachev 
2146*b843c749SSergey Zigachev 
2147*b843c749SSergey Zigachev /*
2148*b843c749SSergey Zigachev   ***************************************************************************
2149*b843c749SSergey Zigachev               Structures used by setpixelclock
2150*b843c749SSergey Zigachev   ***************************************************************************
2151*b843c749SSergey Zigachev */
2152*b843c749SSergey Zigachev 
2153*b843c749SSergey Zigachev struct set_pixel_clock_parameter_v1_7
2154*b843c749SSergey Zigachev {
2155*b843c749SSergey Zigachev     uint32_t pixclk_100hz;               // target the pixel clock to drive the CRTC timing in unit of 100Hz.
2156*b843c749SSergey Zigachev 
2157*b843c749SSergey Zigachev     uint8_t  pll_id;                     // ATOM_PHY_PLL0/ATOM_PHY_PLL1/ATOM_PPLL0
2158*b843c749SSergey Zigachev     uint8_t  encoderobjid;               // ASIC encoder id defined in objectId.h,
2159*b843c749SSergey Zigachev                                          // indicate which graphic encoder will be used.
2160*b843c749SSergey Zigachev     uint8_t  encoder_mode;               // Encoder mode:
2161*b843c749SSergey Zigachev     uint8_t  miscinfo;                   // enum atom_set_pixel_clock_v1_7_misc_info
2162*b843c749SSergey Zigachev     uint8_t  crtc_id;                    // enum of atom_crtc_def
2163*b843c749SSergey Zigachev     uint8_t  deep_color_ratio;           // HDMI panel bit depth: enum atom_set_pixel_clock_v1_7_deepcolor_ratio
2164*b843c749SSergey Zigachev     uint8_t  reserved1[2];
2165*b843c749SSergey Zigachev     uint32_t reserved2;
2166*b843c749SSergey Zigachev };
2167*b843c749SSergey Zigachev 
2168*b843c749SSergey Zigachev //ucMiscInfo
2169*b843c749SSergey Zigachev enum atom_set_pixel_clock_v1_7_misc_info
2170*b843c749SSergey Zigachev {
2171*b843c749SSergey Zigachev   PIXEL_CLOCK_V7_MISC_FORCE_PROG_PPLL         = 0x01,
2172*b843c749SSergey Zigachev   PIXEL_CLOCK_V7_MISC_PROG_PHYPLL             = 0x02,
2173*b843c749SSergey Zigachev   PIXEL_CLOCK_V7_MISC_YUV420_MODE             = 0x04,
2174*b843c749SSergey Zigachev   PIXEL_CLOCK_V7_MISC_DVI_DUALLINK_EN         = 0x08,
2175*b843c749SSergey Zigachev   PIXEL_CLOCK_V7_MISC_REF_DIV_SRC             = 0x30,
2176*b843c749SSergey Zigachev   PIXEL_CLOCK_V7_MISC_REF_DIV_SRC_XTALIN      = 0x00,
2177*b843c749SSergey Zigachev   PIXEL_CLOCK_V7_MISC_REF_DIV_SRC_PCIE        = 0x10,
2178*b843c749SSergey Zigachev   PIXEL_CLOCK_V7_MISC_REF_DIV_SRC_GENLK       = 0x20,
2179*b843c749SSergey Zigachev   PIXEL_CLOCK_V7_MISC_REF_DIV_SRC_REFPAD      = 0x30,
2180*b843c749SSergey Zigachev   PIXEL_CLOCK_V7_MISC_ATOMIC_UPDATE           = 0x40,
2181*b843c749SSergey Zigachev   PIXEL_CLOCK_V7_MISC_FORCE_SS_DIS            = 0x80,
2182*b843c749SSergey Zigachev };
2183*b843c749SSergey Zigachev 
2184*b843c749SSergey Zigachev /* deep_color_ratio */
2185*b843c749SSergey Zigachev enum atom_set_pixel_clock_v1_7_deepcolor_ratio
2186*b843c749SSergey Zigachev {
2187*b843c749SSergey Zigachev   PIXEL_CLOCK_V7_DEEPCOLOR_RATIO_DIS          = 0x00,      //00 - DCCG_DEEP_COLOR_DTO_DISABLE: Disable Deep Color DTO
2188*b843c749SSergey Zigachev   PIXEL_CLOCK_V7_DEEPCOLOR_RATIO_5_4          = 0x01,      //01 - DCCG_DEEP_COLOR_DTO_5_4_RATIO: Set Deep Color DTO to 5:4
2189*b843c749SSergey Zigachev   PIXEL_CLOCK_V7_DEEPCOLOR_RATIO_3_2          = 0x02,      //02 - DCCG_DEEP_COLOR_DTO_3_2_RATIO: Set Deep Color DTO to 3:2
2190*b843c749SSergey Zigachev   PIXEL_CLOCK_V7_DEEPCOLOR_RATIO_2_1          = 0x03,      //03 - DCCG_DEEP_COLOR_DTO_2_1_RATIO: Set Deep Color DTO to 2:1
2191*b843c749SSergey Zigachev };
2192*b843c749SSergey Zigachev 
2193*b843c749SSergey Zigachev /*
2194*b843c749SSergey Zigachev   ***************************************************************************
2195*b843c749SSergey Zigachev               Structures used by setdceclock
2196*b843c749SSergey Zigachev   ***************************************************************************
2197*b843c749SSergey Zigachev */
2198*b843c749SSergey Zigachev 
2199*b843c749SSergey Zigachev // SetDCEClock input parameter for DCE11.2( ELM and BF ) and above
2200*b843c749SSergey Zigachev struct set_dce_clock_parameters_v2_1
2201*b843c749SSergey Zigachev {
2202*b843c749SSergey Zigachev   uint32_t dceclk_10khz;                               // target DCE frequency in unit of 10KHZ, return real DISPCLK/DPREFCLK frequency.
2203*b843c749SSergey Zigachev   uint8_t  dceclktype;                                 // =0: DISPCLK  =1: DPREFCLK  =2: PIXCLK
2204*b843c749SSergey Zigachev   uint8_t  dceclksrc;                                  // ATOM_PLL0 or ATOM_GCK_DFS or ATOM_FCH_CLK or ATOM_COMBOPHY_PLLx
2205*b843c749SSergey Zigachev   uint8_t  dceclkflag;                                 // Bit [1:0] = PPLL ref clock source ( when ucDCEClkSrc= ATOM_PPLL0 )
2206*b843c749SSergey Zigachev   uint8_t  crtc_id;                                    // ucDisp Pipe Id, ATOM_CRTC0/1/2/..., use only when ucDCEClkType = PIXCLK
2207*b843c749SSergey Zigachev };
2208*b843c749SSergey Zigachev 
2209*b843c749SSergey Zigachev //ucDCEClkType
2210*b843c749SSergey Zigachev enum atom_set_dce_clock_clock_type
2211*b843c749SSergey Zigachev {
2212*b843c749SSergey Zigachev   DCE_CLOCK_TYPE_DISPCLK                      = 0,
2213*b843c749SSergey Zigachev   DCE_CLOCK_TYPE_DPREFCLK                     = 1,
2214*b843c749SSergey Zigachev   DCE_CLOCK_TYPE_PIXELCLK                     = 2,        // used by VBIOS internally, called by SetPixelClock
2215*b843c749SSergey Zigachev };
2216*b843c749SSergey Zigachev 
2217*b843c749SSergey Zigachev //ucDCEClkFlag when ucDCEClkType == DPREFCLK
2218*b843c749SSergey Zigachev enum atom_set_dce_clock_dprefclk_flag
2219*b843c749SSergey Zigachev {
2220*b843c749SSergey Zigachev   DCE_CLOCK_FLAG_PLL_REFCLK_SRC_MASK          = 0x03,
2221*b843c749SSergey Zigachev   DCE_CLOCK_FLAG_PLL_REFCLK_SRC_GENERICA      = 0x00,
2222*b843c749SSergey Zigachev   DCE_CLOCK_FLAG_PLL_REFCLK_SRC_GENLK         = 0x01,
2223*b843c749SSergey Zigachev   DCE_CLOCK_FLAG_PLL_REFCLK_SRC_PCIE          = 0x02,
2224*b843c749SSergey Zigachev   DCE_CLOCK_FLAG_PLL_REFCLK_SRC_XTALIN        = 0x03,
2225*b843c749SSergey Zigachev };
2226*b843c749SSergey Zigachev 
2227*b843c749SSergey Zigachev //ucDCEClkFlag when ucDCEClkType == PIXCLK
2228*b843c749SSergey Zigachev enum atom_set_dce_clock_pixclk_flag
2229*b843c749SSergey Zigachev {
2230*b843c749SSergey Zigachev   DCE_CLOCK_FLAG_PCLK_DEEPCOLOR_RATIO_MASK    = 0x03,
2231*b843c749SSergey Zigachev   DCE_CLOCK_FLAG_PCLK_DEEPCOLOR_RATIO_DIS     = 0x00,      //00 - DCCG_DEEP_COLOR_DTO_DISABLE: Disable Deep Color DTO
2232*b843c749SSergey Zigachev   DCE_CLOCK_FLAG_PCLK_DEEPCOLOR_RATIO_5_4     = 0x01,      //01 - DCCG_DEEP_COLOR_DTO_5_4_RATIO: Set Deep Color DTO to 5:4
2233*b843c749SSergey Zigachev   DCE_CLOCK_FLAG_PCLK_DEEPCOLOR_RATIO_3_2     = 0x02,      //02 - DCCG_DEEP_COLOR_DTO_3_2_RATIO: Set Deep Color DTO to 3:2
2234*b843c749SSergey Zigachev   DCE_CLOCK_FLAG_PCLK_DEEPCOLOR_RATIO_2_1     = 0x03,      //03 - DCCG_DEEP_COLOR_DTO_2_1_RATIO: Set Deep Color DTO to 2:1
2235*b843c749SSergey Zigachev   DCE_CLOCK_FLAG_PIXCLK_YUV420_MODE           = 0x04,
2236*b843c749SSergey Zigachev };
2237*b843c749SSergey Zigachev 
2238*b843c749SSergey Zigachev struct set_dce_clock_ps_allocation_v2_1
2239*b843c749SSergey Zigachev {
2240*b843c749SSergey Zigachev   struct set_dce_clock_parameters_v2_1 param;
2241*b843c749SSergey Zigachev   uint32_t ulReserved[2];
2242*b843c749SSergey Zigachev };
2243*b843c749SSergey Zigachev 
2244*b843c749SSergey Zigachev 
2245*b843c749SSergey Zigachev /****************************************************************************/
2246*b843c749SSergey Zigachev // Structures used by BlankCRTC
2247*b843c749SSergey Zigachev /****************************************************************************/
2248*b843c749SSergey Zigachev struct blank_crtc_parameters
2249*b843c749SSergey Zigachev {
2250*b843c749SSergey Zigachev   uint8_t  crtc_id;                   // enum atom_crtc_def
2251*b843c749SSergey Zigachev   uint8_t  blanking;                  // enum atom_blank_crtc_command
2252*b843c749SSergey Zigachev   uint16_t reserved;
2253*b843c749SSergey Zigachev   uint32_t reserved1;
2254*b843c749SSergey Zigachev };
2255*b843c749SSergey Zigachev 
2256*b843c749SSergey Zigachev enum atom_blank_crtc_command
2257*b843c749SSergey Zigachev {
2258*b843c749SSergey Zigachev   ATOM_BLANKING         = 1,
2259*b843c749SSergey Zigachev   ATOM_BLANKING_OFF     = 0,
2260*b843c749SSergey Zigachev };
2261*b843c749SSergey Zigachev 
2262*b843c749SSergey Zigachev /****************************************************************************/
2263*b843c749SSergey Zigachev // Structures used by enablecrtc
2264*b843c749SSergey Zigachev /****************************************************************************/
2265*b843c749SSergey Zigachev struct enable_crtc_parameters
2266*b843c749SSergey Zigachev {
2267*b843c749SSergey Zigachev   uint8_t crtc_id;                    // enum atom_crtc_def
2268*b843c749SSergey Zigachev   uint8_t enable;                     // ATOM_ENABLE or ATOM_DISABLE
2269*b843c749SSergey Zigachev   uint8_t padding[2];
2270*b843c749SSergey Zigachev };
2271*b843c749SSergey Zigachev 
2272*b843c749SSergey Zigachev 
2273*b843c749SSergey Zigachev /****************************************************************************/
2274*b843c749SSergey Zigachev // Structure used by EnableDispPowerGating
2275*b843c749SSergey Zigachev /****************************************************************************/
2276*b843c749SSergey Zigachev struct enable_disp_power_gating_parameters_v2_1
2277*b843c749SSergey Zigachev {
2278*b843c749SSergey Zigachev   uint8_t disp_pipe_id;                // ATOM_CRTC1, ATOM_CRTC2, ...
2279*b843c749SSergey Zigachev   uint8_t enable;                     // ATOM_ENABLE or ATOM_DISABLE
2280*b843c749SSergey Zigachev   uint8_t padding[2];
2281*b843c749SSergey Zigachev };
2282*b843c749SSergey Zigachev 
2283*b843c749SSergey Zigachev struct enable_disp_power_gating_ps_allocation
2284*b843c749SSergey Zigachev {
2285*b843c749SSergey Zigachev   struct enable_disp_power_gating_parameters_v2_1 param;
2286*b843c749SSergey Zigachev   uint32_t ulReserved[4];
2287*b843c749SSergey Zigachev };
2288*b843c749SSergey Zigachev 
2289*b843c749SSergey Zigachev /****************************************************************************/
2290*b843c749SSergey Zigachev // Structure used in setcrtc_usingdtdtiming
2291*b843c749SSergey Zigachev /****************************************************************************/
2292*b843c749SSergey Zigachev struct set_crtc_using_dtd_timing_parameters
2293*b843c749SSergey Zigachev {
2294*b843c749SSergey Zigachev   uint16_t  h_size;
2295*b843c749SSergey Zigachev   uint16_t  h_blanking_time;
2296*b843c749SSergey Zigachev   uint16_t  v_size;
2297*b843c749SSergey Zigachev   uint16_t  v_blanking_time;
2298*b843c749SSergey Zigachev   uint16_t  h_syncoffset;
2299*b843c749SSergey Zigachev   uint16_t  h_syncwidth;
2300*b843c749SSergey Zigachev   uint16_t  v_syncoffset;
2301*b843c749SSergey Zigachev   uint16_t  v_syncwidth;
2302*b843c749SSergey Zigachev   uint16_t  modemiscinfo;
2303*b843c749SSergey Zigachev   uint8_t   h_border;
2304*b843c749SSergey Zigachev   uint8_t   v_border;
2305*b843c749SSergey Zigachev   uint8_t   crtc_id;                   // enum atom_crtc_def
2306*b843c749SSergey Zigachev   uint8_t   encoder_mode;			   // atom_encode_mode_def
2307*b843c749SSergey Zigachev   uint8_t   padding[2];
2308*b843c749SSergey Zigachev };
2309*b843c749SSergey Zigachev 
2310*b843c749SSergey Zigachev 
2311*b843c749SSergey Zigachev /****************************************************************************/
2312*b843c749SSergey Zigachev // Structures used by processi2cchanneltransaction
2313*b843c749SSergey Zigachev /****************************************************************************/
2314*b843c749SSergey Zigachev struct process_i2c_channel_transaction_parameters
2315*b843c749SSergey Zigachev {
2316*b843c749SSergey Zigachev   uint8_t i2cspeed_khz;
2317*b843c749SSergey Zigachev   union {
2318*b843c749SSergey Zigachev     uint8_t regindex;
2319*b843c749SSergey Zigachev     uint8_t status;                  /* enum atom_process_i2c_flag */
2320*b843c749SSergey Zigachev   } regind_status;
2321*b843c749SSergey Zigachev   uint16_t  i2c_data_out;
2322*b843c749SSergey Zigachev   uint8_t   flag;                    /* enum atom_process_i2c_status */
2323*b843c749SSergey Zigachev   uint8_t   trans_bytes;
2324*b843c749SSergey Zigachev   uint8_t   slave_addr;
2325*b843c749SSergey Zigachev   uint8_t   i2c_id;
2326*b843c749SSergey Zigachev };
2327*b843c749SSergey Zigachev 
2328*b843c749SSergey Zigachev //ucFlag
2329*b843c749SSergey Zigachev enum atom_process_i2c_flag
2330*b843c749SSergey Zigachev {
2331*b843c749SSergey Zigachev   HW_I2C_WRITE          = 1,
2332*b843c749SSergey Zigachev   HW_I2C_READ           = 0,
2333*b843c749SSergey Zigachev   I2C_2BYTE_ADDR        = 0x02,
2334*b843c749SSergey Zigachev   HW_I2C_SMBUS_BYTE_WR  = 0x04,
2335*b843c749SSergey Zigachev };
2336*b843c749SSergey Zigachev 
2337*b843c749SSergey Zigachev //status
2338*b843c749SSergey Zigachev enum atom_process_i2c_status
2339*b843c749SSergey Zigachev {
2340*b843c749SSergey Zigachev   HW_ASSISTED_I2C_STATUS_FAILURE     =2,
2341*b843c749SSergey Zigachev   HW_ASSISTED_I2C_STATUS_SUCCESS     =1,
2342*b843c749SSergey Zigachev };
2343*b843c749SSergey Zigachev 
2344*b843c749SSergey Zigachev 
2345*b843c749SSergey Zigachev /****************************************************************************/
2346*b843c749SSergey Zigachev // Structures used by processauxchanneltransaction
2347*b843c749SSergey Zigachev /****************************************************************************/
2348*b843c749SSergey Zigachev 
2349*b843c749SSergey Zigachev struct process_aux_channel_transaction_parameters_v1_2
2350*b843c749SSergey Zigachev {
2351*b843c749SSergey Zigachev   uint16_t aux_request;
2352*b843c749SSergey Zigachev   uint16_t dataout;
2353*b843c749SSergey Zigachev   uint8_t  channelid;
2354*b843c749SSergey Zigachev   union {
2355*b843c749SSergey Zigachev     uint8_t   reply_status;
2356*b843c749SSergey Zigachev     uint8_t   aux_delay;
2357*b843c749SSergey Zigachev   } aux_status_delay;
2358*b843c749SSergey Zigachev   uint8_t   dataout_len;
2359*b843c749SSergey Zigachev   uint8_t   hpd_id;                                       //=0: HPD1, =1: HPD2, =2: HPD3, =3: HPD4, =4: HPD5, =5: HPD6
2360*b843c749SSergey Zigachev };
2361*b843c749SSergey Zigachev 
2362*b843c749SSergey Zigachev 
2363*b843c749SSergey Zigachev /****************************************************************************/
2364*b843c749SSergey Zigachev // Structures used by selectcrtc_source
2365*b843c749SSergey Zigachev /****************************************************************************/
2366*b843c749SSergey Zigachev 
2367*b843c749SSergey Zigachev struct select_crtc_source_parameters_v2_3
2368*b843c749SSergey Zigachev {
2369*b843c749SSergey Zigachev   uint8_t crtc_id;                        // enum atom_crtc_def
2370*b843c749SSergey Zigachev   uint8_t encoder_id;                     // enum atom_dig_def
2371*b843c749SSergey Zigachev   uint8_t encode_mode;                    // enum atom_encode_mode_def
2372*b843c749SSergey Zigachev   uint8_t dst_bpc;                        // enum atom_panel_bit_per_color
2373*b843c749SSergey Zigachev };
2374*b843c749SSergey Zigachev 
2375*b843c749SSergey Zigachev 
2376*b843c749SSergey Zigachev /****************************************************************************/
2377*b843c749SSergey Zigachev // Structures used by digxencodercontrol
2378*b843c749SSergey Zigachev /****************************************************************************/
2379*b843c749SSergey Zigachev 
2380*b843c749SSergey Zigachev // ucAction:
2381*b843c749SSergey Zigachev enum atom_dig_encoder_control_action
2382*b843c749SSergey Zigachev {
2383*b843c749SSergey Zigachev   ATOM_ENCODER_CMD_DISABLE_DIG                  = 0,
2384*b843c749SSergey Zigachev   ATOM_ENCODER_CMD_ENABLE_DIG                   = 1,
2385*b843c749SSergey Zigachev   ATOM_ENCODER_CMD_DP_LINK_TRAINING_START       = 0x08,
2386*b843c749SSergey Zigachev   ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN1    = 0x09,
2387*b843c749SSergey Zigachev   ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN2    = 0x0a,
2388*b843c749SSergey Zigachev   ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN3    = 0x13,
2389*b843c749SSergey Zigachev   ATOM_ENCODER_CMD_DP_LINK_TRAINING_COMPLETE    = 0x0b,
2390*b843c749SSergey Zigachev   ATOM_ENCODER_CMD_DP_VIDEO_OFF                 = 0x0c,
2391*b843c749SSergey Zigachev   ATOM_ENCODER_CMD_DP_VIDEO_ON                  = 0x0d,
2392*b843c749SSergey Zigachev   ATOM_ENCODER_CMD_SETUP_PANEL_MODE             = 0x10,
2393*b843c749SSergey Zigachev   ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN4    = 0x14,
2394*b843c749SSergey Zigachev   ATOM_ENCODER_CMD_STREAM_SETUP                 = 0x0F,
2395*b843c749SSergey Zigachev   ATOM_ENCODER_CMD_LINK_SETUP                   = 0x11,
2396*b843c749SSergey Zigachev   ATOM_ENCODER_CMD_ENCODER_BLANK                = 0x12,
2397*b843c749SSergey Zigachev };
2398*b843c749SSergey Zigachev 
2399*b843c749SSergey Zigachev //define ucPanelMode
2400*b843c749SSergey Zigachev enum atom_dig_encoder_control_panelmode
2401*b843c749SSergey Zigachev {
2402*b843c749SSergey Zigachev   DP_PANEL_MODE_DISABLE                        = 0x00,
2403*b843c749SSergey Zigachev   DP_PANEL_MODE_ENABLE_eDP_MODE                = 0x01,
2404*b843c749SSergey Zigachev   DP_PANEL_MODE_ENABLE_LVLINK_MODE             = 0x11,
2405*b843c749SSergey Zigachev };
2406*b843c749SSergey Zigachev 
2407*b843c749SSergey Zigachev //ucDigId
2408*b843c749SSergey Zigachev enum atom_dig_encoder_control_v5_digid
2409*b843c749SSergey Zigachev {
2410*b843c749SSergey Zigachev   ATOM_ENCODER_CONFIG_V5_DIG0_ENCODER           = 0x00,
2411*b843c749SSergey Zigachev   ATOM_ENCODER_CONFIG_V5_DIG1_ENCODER           = 0x01,
2412*b843c749SSergey Zigachev   ATOM_ENCODER_CONFIG_V5_DIG2_ENCODER           = 0x02,
2413*b843c749SSergey Zigachev   ATOM_ENCODER_CONFIG_V5_DIG3_ENCODER           = 0x03,
2414*b843c749SSergey Zigachev   ATOM_ENCODER_CONFIG_V5_DIG4_ENCODER           = 0x04,
2415*b843c749SSergey Zigachev   ATOM_ENCODER_CONFIG_V5_DIG5_ENCODER           = 0x05,
2416*b843c749SSergey Zigachev   ATOM_ENCODER_CONFIG_V5_DIG6_ENCODER           = 0x06,
2417*b843c749SSergey Zigachev   ATOM_ENCODER_CONFIG_V5_DIG7_ENCODER           = 0x07,
2418*b843c749SSergey Zigachev };
2419*b843c749SSergey Zigachev 
2420*b843c749SSergey Zigachev struct dig_encoder_stream_setup_parameters_v1_5
2421*b843c749SSergey Zigachev {
2422*b843c749SSergey Zigachev   uint8_t digid;            // 0~6 map to DIG0~DIG6 enum atom_dig_encoder_control_v5_digid
2423*b843c749SSergey Zigachev   uint8_t action;           // =  ATOM_ENOCODER_CMD_STREAM_SETUP
2424*b843c749SSergey Zigachev   uint8_t digmode;          // ATOM_ENCODER_MODE_DP/ATOM_ENCODER_MODE_DVI/ATOM_ENCODER_MODE_HDMI
2425*b843c749SSergey Zigachev   uint8_t lanenum;          // Lane number
2426*b843c749SSergey Zigachev   uint32_t pclk_10khz;      // Pixel Clock in 10Khz
2427*b843c749SSergey Zigachev   uint8_t bitpercolor;
2428*b843c749SSergey Zigachev   uint8_t dplinkrate_270mhz;//= DP link rate/270Mhz, =6: 1.62G  = 10: 2.7G, =20: 5.4Ghz, =30: 8.1Ghz etc
2429*b843c749SSergey Zigachev   uint8_t reserved[2];
2430*b843c749SSergey Zigachev };
2431*b843c749SSergey Zigachev 
2432*b843c749SSergey Zigachev struct dig_encoder_link_setup_parameters_v1_5
2433*b843c749SSergey Zigachev {
2434*b843c749SSergey Zigachev   uint8_t digid;           // 0~6 map to DIG0~DIG6 enum atom_dig_encoder_control_v5_digid
2435*b843c749SSergey Zigachev   uint8_t action;          // =  ATOM_ENOCODER_CMD_LINK_SETUP
2436*b843c749SSergey Zigachev   uint8_t digmode;         // ATOM_ENCODER_MODE_DP/ATOM_ENCODER_MODE_DVI/ATOM_ENCODER_MODE_HDMI
2437*b843c749SSergey Zigachev   uint8_t lanenum;         // Lane number
2438*b843c749SSergey Zigachev   uint8_t symclk_10khz;    // Symbol Clock in 10Khz
2439*b843c749SSergey Zigachev   uint8_t hpd_sel;
2440*b843c749SSergey Zigachev   uint8_t digfe_sel;       // DIG stream( front-end ) selection, bit0 means DIG0 FE is enable,
2441*b843c749SSergey Zigachev   uint8_t reserved[2];
2442*b843c749SSergey Zigachev };
2443*b843c749SSergey Zigachev 
2444*b843c749SSergey Zigachev struct dp_panel_mode_set_parameters_v1_5
2445*b843c749SSergey Zigachev {
2446*b843c749SSergey Zigachev   uint8_t digid;              // 0~6 map to DIG0~DIG6 enum atom_dig_encoder_control_v5_digid
2447*b843c749SSergey Zigachev   uint8_t action;             // = ATOM_ENCODER_CMD_DPLINK_SETUP
2448*b843c749SSergey Zigachev   uint8_t panelmode;      // enum atom_dig_encoder_control_panelmode
2449*b843c749SSergey Zigachev   uint8_t reserved1;
2450*b843c749SSergey Zigachev   uint32_t reserved2[2];
2451*b843c749SSergey Zigachev };
2452*b843c749SSergey Zigachev 
2453*b843c749SSergey Zigachev struct dig_encoder_generic_cmd_parameters_v1_5
2454*b843c749SSergey Zigachev {
2455*b843c749SSergey Zigachev   uint8_t digid;           // 0~6 map to DIG0~DIG6 enum atom_dig_encoder_control_v5_digid
2456*b843c749SSergey Zigachev   uint8_t action;          // = rest of generic encoder command which does not carry any parameters
2457*b843c749SSergey Zigachev   uint8_t reserved1[2];
2458*b843c749SSergey Zigachev   uint32_t reserved2[2];
2459*b843c749SSergey Zigachev };
2460*b843c749SSergey Zigachev 
2461*b843c749SSergey Zigachev union dig_encoder_control_parameters_v1_5
2462*b843c749SSergey Zigachev {
2463*b843c749SSergey Zigachev   struct dig_encoder_generic_cmd_parameters_v1_5  cmd_param;
2464*b843c749SSergey Zigachev   struct dig_encoder_stream_setup_parameters_v1_5 stream_param;
2465*b843c749SSergey Zigachev   struct dig_encoder_link_setup_parameters_v1_5   link_param;
2466*b843c749SSergey Zigachev   struct dp_panel_mode_set_parameters_v1_5 dppanel_param;
2467*b843c749SSergey Zigachev };
2468*b843c749SSergey Zigachev 
2469*b843c749SSergey Zigachev /*
2470*b843c749SSergey Zigachev   ***************************************************************************
2471*b843c749SSergey Zigachev               Structures used by dig1transmittercontrol
2472*b843c749SSergey Zigachev   ***************************************************************************
2473*b843c749SSergey Zigachev */
2474*b843c749SSergey Zigachev struct dig_transmitter_control_parameters_v1_6
2475*b843c749SSergey Zigachev {
2476*b843c749SSergey Zigachev   uint8_t phyid;           // 0=UNIPHYA, 1=UNIPHYB, 2=UNIPHYC, 3=UNIPHYD, 4= UNIPHYE 5=UNIPHYF
2477*b843c749SSergey Zigachev   uint8_t action;          // define as ATOM_TRANSMITER_ACTION_xxx
2478*b843c749SSergey Zigachev   union {
2479*b843c749SSergey Zigachev     uint8_t digmode;        // enum atom_encode_mode_def
2480*b843c749SSergey Zigachev     uint8_t dplaneset;      // DP voltage swing and pre-emphasis value defined in DPCD DP_LANE_SET, "DP_LANE_SET__xDB_y_zV"
2481*b843c749SSergey Zigachev   } mode_laneset;
2482*b843c749SSergey Zigachev   uint8_t  lanenum;        // Lane number 1, 2, 4, 8
2483*b843c749SSergey Zigachev   uint32_t symclk_10khz;   // Symbol Clock in 10Khz
2484*b843c749SSergey Zigachev   uint8_t  hpdsel;         // =1: HPD1, =2: HPD2, .... =6: HPD6, =0: HPD is not assigned
2485*b843c749SSergey Zigachev   uint8_t  digfe_sel;      // DIG stream( front-end ) selection, bit0 means DIG0 FE is enable,
2486*b843c749SSergey Zigachev   uint8_t  connobj_id;     // Connector Object Id defined in ObjectId.h
2487*b843c749SSergey Zigachev   uint8_t  reserved;
2488*b843c749SSergey Zigachev   uint32_t reserved1;
2489*b843c749SSergey Zigachev };
2490*b843c749SSergey Zigachev 
2491*b843c749SSergey Zigachev struct dig_transmitter_control_ps_allocation_v1_6
2492*b843c749SSergey Zigachev {
2493*b843c749SSergey Zigachev   struct dig_transmitter_control_parameters_v1_6 param;
2494*b843c749SSergey Zigachev   uint32_t reserved[4];
2495*b843c749SSergey Zigachev };
2496*b843c749SSergey Zigachev 
2497*b843c749SSergey Zigachev //ucAction
2498*b843c749SSergey Zigachev enum atom_dig_transmitter_control_action
2499*b843c749SSergey Zigachev {
2500*b843c749SSergey Zigachev   ATOM_TRANSMITTER_ACTION_DISABLE                 = 0,
2501*b843c749SSergey Zigachev   ATOM_TRANSMITTER_ACTION_ENABLE                  = 1,
2502*b843c749SSergey Zigachev   ATOM_TRANSMITTER_ACTION_LCD_BLOFF               = 2,
2503*b843c749SSergey Zigachev   ATOM_TRANSMITTER_ACTION_LCD_BLON                = 3,
2504*b843c749SSergey Zigachev   ATOM_TRANSMITTER_ACTION_BL_BRIGHTNESS_CONTROL   = 4,
2505*b843c749SSergey Zigachev   ATOM_TRANSMITTER_ACTION_LCD_SELFTEST_START      = 5,
2506*b843c749SSergey Zigachev   ATOM_TRANSMITTER_ACTION_LCD_SELFTEST_STOP       = 6,
2507*b843c749SSergey Zigachev   ATOM_TRANSMITTER_ACTION_INIT                    = 7,
2508*b843c749SSergey Zigachev   ATOM_TRANSMITTER_ACTION_DISABLE_OUTPUT          = 8,
2509*b843c749SSergey Zigachev   ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT           = 9,
2510*b843c749SSergey Zigachev   ATOM_TRANSMITTER_ACTION_SETUP                   = 10,
2511*b843c749SSergey Zigachev   ATOM_TRANSMITTER_ACTION_SETUP_VSEMPH            = 11,
2512*b843c749SSergey Zigachev   ATOM_TRANSMITTER_ACTION_POWER_ON                = 12,
2513*b843c749SSergey Zigachev   ATOM_TRANSMITTER_ACTION_POWER_OFF               = 13,
2514*b843c749SSergey Zigachev };
2515*b843c749SSergey Zigachev 
2516*b843c749SSergey Zigachev // digfe_sel
2517*b843c749SSergey Zigachev enum atom_dig_transmitter_control_digfe_sel
2518*b843c749SSergey Zigachev {
2519*b843c749SSergey Zigachev   ATOM_TRANMSITTER_V6__DIGA_SEL                   = 0x01,
2520*b843c749SSergey Zigachev   ATOM_TRANMSITTER_V6__DIGB_SEL                   = 0x02,
2521*b843c749SSergey Zigachev   ATOM_TRANMSITTER_V6__DIGC_SEL                   = 0x04,
2522*b843c749SSergey Zigachev   ATOM_TRANMSITTER_V6__DIGD_SEL                   = 0x08,
2523*b843c749SSergey Zigachev   ATOM_TRANMSITTER_V6__DIGE_SEL                   = 0x10,
2524*b843c749SSergey Zigachev   ATOM_TRANMSITTER_V6__DIGF_SEL                   = 0x20,
2525*b843c749SSergey Zigachev   ATOM_TRANMSITTER_V6__DIGG_SEL                   = 0x40,
2526*b843c749SSergey Zigachev };
2527*b843c749SSergey Zigachev 
2528*b843c749SSergey Zigachev 
2529*b843c749SSergey Zigachev //ucHPDSel
2530*b843c749SSergey Zigachev enum atom_dig_transmitter_control_hpd_sel
2531*b843c749SSergey Zigachev {
2532*b843c749SSergey Zigachev   ATOM_TRANSMITTER_V6_NO_HPD_SEL                  = 0x00,
2533*b843c749SSergey Zigachev   ATOM_TRANSMITTER_V6_HPD1_SEL                    = 0x01,
2534*b843c749SSergey Zigachev   ATOM_TRANSMITTER_V6_HPD2_SEL                    = 0x02,
2535*b843c749SSergey Zigachev   ATOM_TRANSMITTER_V6_HPD3_SEL                    = 0x03,
2536*b843c749SSergey Zigachev   ATOM_TRANSMITTER_V6_HPD4_SEL                    = 0x04,
2537*b843c749SSergey Zigachev   ATOM_TRANSMITTER_V6_HPD5_SEL                    = 0x05,
2538*b843c749SSergey Zigachev   ATOM_TRANSMITTER_V6_HPD6_SEL                    = 0x06,
2539*b843c749SSergey Zigachev };
2540*b843c749SSergey Zigachev 
2541*b843c749SSergey Zigachev // ucDPLaneSet
2542*b843c749SSergey Zigachev enum atom_dig_transmitter_control_dplaneset
2543*b843c749SSergey Zigachev {
2544*b843c749SSergey Zigachev   DP_LANE_SET__0DB_0_4V                           = 0x00,
2545*b843c749SSergey Zigachev   DP_LANE_SET__0DB_0_6V                           = 0x01,
2546*b843c749SSergey Zigachev   DP_LANE_SET__0DB_0_8V                           = 0x02,
2547*b843c749SSergey Zigachev   DP_LANE_SET__0DB_1_2V                           = 0x03,
2548*b843c749SSergey Zigachev   DP_LANE_SET__3_5DB_0_4V                         = 0x08,
2549*b843c749SSergey Zigachev   DP_LANE_SET__3_5DB_0_6V                         = 0x09,
2550*b843c749SSergey Zigachev   DP_LANE_SET__3_5DB_0_8V                         = 0x0a,
2551*b843c749SSergey Zigachev   DP_LANE_SET__6DB_0_4V                           = 0x10,
2552*b843c749SSergey Zigachev   DP_LANE_SET__6DB_0_6V                           = 0x11,
2553*b843c749SSergey Zigachev   DP_LANE_SET__9_5DB_0_4V                         = 0x18,
2554*b843c749SSergey Zigachev };
2555*b843c749SSergey Zigachev 
2556*b843c749SSergey Zigachev 
2557*b843c749SSergey Zigachev 
2558*b843c749SSergey Zigachev /****************************************************************************/
2559*b843c749SSergey Zigachev // Structures used by ExternalEncoderControl V2.4
2560*b843c749SSergey Zigachev /****************************************************************************/
2561*b843c749SSergey Zigachev 
2562*b843c749SSergey Zigachev struct external_encoder_control_parameters_v2_4
2563*b843c749SSergey Zigachev {
2564*b843c749SSergey Zigachev   uint16_t pixelclock_10khz;  // pixel clock in 10Khz, valid when ucAction=SETUP/ENABLE_OUTPUT
2565*b843c749SSergey Zigachev   uint8_t  config;            // indicate which encoder, and DP link rate when ucAction = SETUP/ENABLE_OUTPUT
2566*b843c749SSergey Zigachev   uint8_t  action;            //
2567*b843c749SSergey Zigachev   uint8_t  encodermode;       // encoder mode, only used when ucAction = SETUP/ENABLE_OUTPUT
2568*b843c749SSergey Zigachev   uint8_t  lanenum;           // lane number, only used when ucAction = SETUP/ENABLE_OUTPUT
2569*b843c749SSergey Zigachev   uint8_t  bitpercolor;       // output bit per color, only valid when ucAction = SETUP/ENABLE_OUTPUT and ucEncodeMode= DP
2570*b843c749SSergey Zigachev   uint8_t  hpd_id;
2571*b843c749SSergey Zigachev };
2572*b843c749SSergey Zigachev 
2573*b843c749SSergey Zigachev 
2574*b843c749SSergey Zigachev // ucAction
2575*b843c749SSergey Zigachev enum external_encoder_control_action_def
2576*b843c749SSergey Zigachev {
2577*b843c749SSergey Zigachev   EXTERNAL_ENCODER_ACTION_V3_DISABLE_OUTPUT           = 0x00,
2578*b843c749SSergey Zigachev   EXTERNAL_ENCODER_ACTION_V3_ENABLE_OUTPUT            = 0x01,
2579*b843c749SSergey Zigachev   EXTERNAL_ENCODER_ACTION_V3_ENCODER_INIT             = 0x07,
2580*b843c749SSergey Zigachev   EXTERNAL_ENCODER_ACTION_V3_ENCODER_SETUP            = 0x0f,
2581*b843c749SSergey Zigachev   EXTERNAL_ENCODER_ACTION_V3_ENCODER_BLANKING_OFF     = 0x10,
2582*b843c749SSergey Zigachev   EXTERNAL_ENCODER_ACTION_V3_ENCODER_BLANKING         = 0x11,
2583*b843c749SSergey Zigachev   EXTERNAL_ENCODER_ACTION_V3_DACLOAD_DETECTION        = 0x12,
2584*b843c749SSergey Zigachev   EXTERNAL_ENCODER_ACTION_V3_DDC_SETUP                = 0x14,
2585*b843c749SSergey Zigachev };
2586*b843c749SSergey Zigachev 
2587*b843c749SSergey Zigachev // ucConfig
2588*b843c749SSergey Zigachev enum external_encoder_control_v2_4_config_def
2589*b843c749SSergey Zigachev {
2590*b843c749SSergey Zigachev   EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_MASK          = 0x03,
2591*b843c749SSergey Zigachev   EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_1_62GHZ       = 0x00,
2592*b843c749SSergey Zigachev   EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_2_70GHZ       = 0x01,
2593*b843c749SSergey Zigachev   EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_5_40GHZ       = 0x02,
2594*b843c749SSergey Zigachev   EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_3_24GHZ       = 0x03,
2595*b843c749SSergey Zigachev   EXTERNAL_ENCODER_CONFIG_V3_ENCODER_SEL_MAKS         = 0x70,
2596*b843c749SSergey Zigachev   EXTERNAL_ENCODER_CONFIG_V3_ENCODER1                 = 0x00,
2597*b843c749SSergey Zigachev   EXTERNAL_ENCODER_CONFIG_V3_ENCODER2                 = 0x10,
2598*b843c749SSergey Zigachev   EXTERNAL_ENCODER_CONFIG_V3_ENCODER3                 = 0x20,
2599*b843c749SSergey Zigachev };
2600*b843c749SSergey Zigachev 
2601*b843c749SSergey Zigachev struct external_encoder_control_ps_allocation_v2_4
2602*b843c749SSergey Zigachev {
2603*b843c749SSergey Zigachev   struct external_encoder_control_parameters_v2_4 sExtEncoder;
2604*b843c749SSergey Zigachev   uint32_t reserved[2];
2605*b843c749SSergey Zigachev };
2606*b843c749SSergey Zigachev 
2607*b843c749SSergey Zigachev 
2608*b843c749SSergey Zigachev /*
2609*b843c749SSergey Zigachev   ***************************************************************************
2610*b843c749SSergey Zigachev                            AMD ACPI Table
2611*b843c749SSergey Zigachev 
2612*b843c749SSergey Zigachev   ***************************************************************************
2613*b843c749SSergey Zigachev */
2614*b843c749SSergey Zigachev 
2615*b843c749SSergey Zigachev struct amd_acpi_description_header{
2616*b843c749SSergey Zigachev   uint32_t signature;
2617*b843c749SSergey Zigachev   uint32_t tableLength;      //Length
2618*b843c749SSergey Zigachev   uint8_t  revision;
2619*b843c749SSergey Zigachev   uint8_t  checksum;
2620*b843c749SSergey Zigachev   uint8_t  oemId[6];
2621*b843c749SSergey Zigachev   uint8_t  oemTableId[8];    //UINT64  OemTableId;
2622*b843c749SSergey Zigachev   uint32_t oemRevision;
2623*b843c749SSergey Zigachev   uint32_t creatorId;
2624*b843c749SSergey Zigachev   uint32_t creatorRevision;
2625*b843c749SSergey Zigachev };
2626*b843c749SSergey Zigachev 
2627*b843c749SSergey Zigachev struct uefi_acpi_vfct{
2628*b843c749SSergey Zigachev   struct   amd_acpi_description_header sheader;
2629*b843c749SSergey Zigachev   uint8_t  tableUUID[16];    //0x24
2630*b843c749SSergey Zigachev   uint32_t vbiosimageoffset; //0x34. Offset to the first GOP_VBIOS_CONTENT block from the beginning of the stucture.
2631*b843c749SSergey Zigachev   uint32_t lib1Imageoffset;  //0x38. Offset to the first GOP_LIB1_CONTENT block from the beginning of the stucture.
2632*b843c749SSergey Zigachev   uint32_t reserved[4];      //0x3C
2633*b843c749SSergey Zigachev };
2634*b843c749SSergey Zigachev 
2635*b843c749SSergey Zigachev struct vfct_image_header{
2636*b843c749SSergey Zigachev   uint32_t  pcibus;          //0x4C
2637*b843c749SSergey Zigachev   uint32_t  pcidevice;       //0x50
2638*b843c749SSergey Zigachev   uint32_t  pcifunction;     //0x54
2639*b843c749SSergey Zigachev   uint16_t  vendorid;        //0x58
2640*b843c749SSergey Zigachev   uint16_t  deviceid;        //0x5A
2641*b843c749SSergey Zigachev   uint16_t  ssvid;           //0x5C
2642*b843c749SSergey Zigachev   uint16_t  ssid;            //0x5E
2643*b843c749SSergey Zigachev   uint32_t  revision;        //0x60
2644*b843c749SSergey Zigachev   uint32_t  imagelength;     //0x64
2645*b843c749SSergey Zigachev };
2646*b843c749SSergey Zigachev 
2647*b843c749SSergey Zigachev 
2648*b843c749SSergey Zigachev struct gop_vbios_content {
2649*b843c749SSergey Zigachev   struct vfct_image_header vbiosheader;
2650*b843c749SSergey Zigachev   uint8_t                  vbioscontent[1];
2651*b843c749SSergey Zigachev };
2652*b843c749SSergey Zigachev 
2653*b843c749SSergey Zigachev struct gop_lib1_content {
2654*b843c749SSergey Zigachev   struct vfct_image_header lib1header;
2655*b843c749SSergey Zigachev   uint8_t                  lib1content[1];
2656*b843c749SSergey Zigachev };
2657*b843c749SSergey Zigachev 
2658*b843c749SSergey Zigachev 
2659*b843c749SSergey Zigachev 
2660*b843c749SSergey Zigachev /*
2661*b843c749SSergey Zigachev   ***************************************************************************
2662*b843c749SSergey Zigachev                    Scratch Register definitions
2663*b843c749SSergey Zigachev   Each number below indicates which scratch regiser request, Active and
2664*b843c749SSergey Zigachev   Connect all share the same definitions as display_device_tag defines
2665*b843c749SSergey Zigachev   ***************************************************************************
2666*b843c749SSergey Zigachev */
2667*b843c749SSergey Zigachev 
2668*b843c749SSergey Zigachev enum scratch_register_def{
2669*b843c749SSergey Zigachev   ATOM_DEVICE_CONNECT_INFO_DEF      = 0,
2670*b843c749SSergey Zigachev   ATOM_BL_BRI_LEVEL_INFO_DEF        = 2,
2671*b843c749SSergey Zigachev   ATOM_ACTIVE_INFO_DEF              = 3,
2672*b843c749SSergey Zigachev   ATOM_LCD_INFO_DEF                 = 4,
2673*b843c749SSergey Zigachev   ATOM_DEVICE_REQ_INFO_DEF          = 5,
2674*b843c749SSergey Zigachev   ATOM_ACC_CHANGE_INFO_DEF          = 6,
2675*b843c749SSergey Zigachev   ATOM_PRE_OS_MODE_INFO_DEF         = 7,
2676*b843c749SSergey Zigachev   ATOM_PRE_OS_ASSERTION_DEF      = 8,    //For GOP to record a 32bit assertion code, this is enabled by default in prodution GOP drivers.
2677*b843c749SSergey Zigachev   ATOM_INTERNAL_TIMER_INFO_DEF      = 10,
2678*b843c749SSergey Zigachev };
2679*b843c749SSergey Zigachev 
2680*b843c749SSergey Zigachev enum scratch_device_connect_info_bit_def{
2681*b843c749SSergey Zigachev   ATOM_DISPLAY_LCD1_CONNECT           =0x0002,
2682*b843c749SSergey Zigachev   ATOM_DISPLAY_DFP1_CONNECT           =0x0008,
2683*b843c749SSergey Zigachev   ATOM_DISPLAY_DFP2_CONNECT           =0x0080,
2684*b843c749SSergey Zigachev   ATOM_DISPLAY_DFP3_CONNECT           =0x0200,
2685*b843c749SSergey Zigachev   ATOM_DISPLAY_DFP4_CONNECT           =0x0400,
2686*b843c749SSergey Zigachev   ATOM_DISPLAY_DFP5_CONNECT           =0x0800,
2687*b843c749SSergey Zigachev   ATOM_DISPLAY_DFP6_CONNECT           =0x0040,
2688*b843c749SSergey Zigachev   ATOM_DISPLAY_DFPx_CONNECT           =0x0ec8,
2689*b843c749SSergey Zigachev   ATOM_CONNECT_INFO_DEVICE_MASK       =0x0fff,
2690*b843c749SSergey Zigachev };
2691*b843c749SSergey Zigachev 
2692*b843c749SSergey Zigachev enum scratch_bl_bri_level_info_bit_def{
2693*b843c749SSergey Zigachev   ATOM_CURRENT_BL_LEVEL_SHIFT         =0x8,
2694*b843c749SSergey Zigachev #ifndef _H2INC
2695*b843c749SSergey Zigachev   ATOM_CURRENT_BL_LEVEL_MASK          =0x0000ff00,
2696*b843c749SSergey Zigachev   ATOM_DEVICE_DPMS_STATE              =0x00010000,
2697*b843c749SSergey Zigachev #endif
2698*b843c749SSergey Zigachev };
2699*b843c749SSergey Zigachev 
2700*b843c749SSergey Zigachev enum scratch_active_info_bits_def{
2701*b843c749SSergey Zigachev   ATOM_DISPLAY_LCD1_ACTIVE            =0x0002,
2702*b843c749SSergey Zigachev   ATOM_DISPLAY_DFP1_ACTIVE            =0x0008,
2703*b843c749SSergey Zigachev   ATOM_DISPLAY_DFP2_ACTIVE            =0x0080,
2704*b843c749SSergey Zigachev   ATOM_DISPLAY_DFP3_ACTIVE            =0x0200,
2705*b843c749SSergey Zigachev   ATOM_DISPLAY_DFP4_ACTIVE            =0x0400,
2706*b843c749SSergey Zigachev   ATOM_DISPLAY_DFP5_ACTIVE            =0x0800,
2707*b843c749SSergey Zigachev   ATOM_DISPLAY_DFP6_ACTIVE            =0x0040,
2708*b843c749SSergey Zigachev   ATOM_ACTIVE_INFO_DEVICE_MASK        =0x0fff,
2709*b843c749SSergey Zigachev };
2710*b843c749SSergey Zigachev 
2711*b843c749SSergey Zigachev enum scratch_device_req_info_bits_def{
2712*b843c749SSergey Zigachev   ATOM_DISPLAY_LCD1_REQ               =0x0002,
2713*b843c749SSergey Zigachev   ATOM_DISPLAY_DFP1_REQ               =0x0008,
2714*b843c749SSergey Zigachev   ATOM_DISPLAY_DFP2_REQ               =0x0080,
2715*b843c749SSergey Zigachev   ATOM_DISPLAY_DFP3_REQ               =0x0200,
2716*b843c749SSergey Zigachev   ATOM_DISPLAY_DFP4_REQ               =0x0400,
2717*b843c749SSergey Zigachev   ATOM_DISPLAY_DFP5_REQ               =0x0800,
2718*b843c749SSergey Zigachev   ATOM_DISPLAY_DFP6_REQ               =0x0040,
2719*b843c749SSergey Zigachev   ATOM_REQ_INFO_DEVICE_MASK           =0x0fff,
2720*b843c749SSergey Zigachev };
2721*b843c749SSergey Zigachev 
2722*b843c749SSergey Zigachev enum scratch_acc_change_info_bitshift_def{
2723*b843c749SSergey Zigachev   ATOM_ACC_CHANGE_ACC_MODE_SHIFT    =4,
2724*b843c749SSergey Zigachev   ATOM_ACC_CHANGE_LID_STATUS_SHIFT  =6,
2725*b843c749SSergey Zigachev };
2726*b843c749SSergey Zigachev 
2727*b843c749SSergey Zigachev enum scratch_acc_change_info_bits_def{
2728*b843c749SSergey Zigachev   ATOM_ACC_CHANGE_ACC_MODE          =0x00000010,
2729*b843c749SSergey Zigachev   ATOM_ACC_CHANGE_LID_STATUS        =0x00000040,
2730*b843c749SSergey Zigachev };
2731*b843c749SSergey Zigachev 
2732*b843c749SSergey Zigachev enum scratch_pre_os_mode_info_bits_def{
2733*b843c749SSergey Zigachev   ATOM_PRE_OS_MODE_MASK             =0x00000003,
2734*b843c749SSergey Zigachev   ATOM_PRE_OS_MODE_VGA              =0x00000000,
2735*b843c749SSergey Zigachev   ATOM_PRE_OS_MODE_VESA             =0x00000001,
2736*b843c749SSergey Zigachev   ATOM_PRE_OS_MODE_GOP              =0x00000002,
2737*b843c749SSergey Zigachev   ATOM_PRE_OS_MODE_PIXEL_DEPTH      =0x0000000C,
2738*b843c749SSergey Zigachev   ATOM_PRE_OS_MODE_PIXEL_FORMAT_MASK=0x000000F0,
2739*b843c749SSergey Zigachev   ATOM_PRE_OS_MODE_8BIT_PAL_EN      =0x00000100,
2740*b843c749SSergey Zigachev   ATOM_ASIC_INIT_COMPLETE           =0x00000200,
2741*b843c749SSergey Zigachev #ifndef _H2INC
2742*b843c749SSergey Zigachev   ATOM_PRE_OS_MODE_NUMBER_MASK      =0xFFFF0000,
2743*b843c749SSergey Zigachev #endif
2744*b843c749SSergey Zigachev };
2745*b843c749SSergey Zigachev 
2746*b843c749SSergey Zigachev 
2747*b843c749SSergey Zigachev 
2748*b843c749SSergey Zigachev /*
2749*b843c749SSergey Zigachev   ***************************************************************************
2750*b843c749SSergey Zigachev                        ATOM firmware ID header file
2751*b843c749SSergey Zigachev               !! Please keep it at end of the atomfirmware.h !!
2752*b843c749SSergey Zigachev   ***************************************************************************
2753*b843c749SSergey Zigachev */
2754*b843c749SSergey Zigachev #include "atomfirmwareid.h"
2755*b843c749SSergey Zigachev #pragma pack()
2756*b843c749SSergey Zigachev 
2757*b843c749SSergey Zigachev #endif
2758*b843c749SSergey Zigachev 
2759