xref: /openbsd-src/sys/dev/pci/drm/amd/include/atomfirmware.h (revision 0ab45afa115cb277d16876c96e0510c7b5b8a61e)
1fb4d8502Sjsg /****************************************************************************\
2fb4d8502Sjsg *
3fb4d8502Sjsg *  File Name      atomfirmware.h
4fb4d8502Sjsg *  Project        This is an interface header file between atombios and OS GPU drivers for SoC15 products
5fb4d8502Sjsg *
61bb76ff1Sjsg *  Description    header file of general definitions for OS and pre-OS video drivers
7fb4d8502Sjsg *
8fb4d8502Sjsg *  Copyright 2014 Advanced Micro Devices, Inc.
9fb4d8502Sjsg *
10fb4d8502Sjsg * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
11fb4d8502Sjsg * and associated documentation files (the "Software"), to deal in the Software without restriction,
12fb4d8502Sjsg * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
13fb4d8502Sjsg * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
14fb4d8502Sjsg * subject to the following conditions:
15fb4d8502Sjsg *
16fb4d8502Sjsg * The above copyright notice and this permission notice shall be included in all copies or substantial
17fb4d8502Sjsg * portions of the Software.
18fb4d8502Sjsg *
19fb4d8502Sjsg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20fb4d8502Sjsg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21fb4d8502Sjsg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
22fb4d8502Sjsg * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
23fb4d8502Sjsg * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
24fb4d8502Sjsg * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
25fb4d8502Sjsg * OTHER DEALINGS IN THE SOFTWARE.
26fb4d8502Sjsg *
27fb4d8502Sjsg \****************************************************************************/
28fb4d8502Sjsg 
29fb4d8502Sjsg /*IMPORTANT NOTES
30fb4d8502Sjsg * 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.
31fb4d8502Sjsg * 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.
32fb4d8502Sjsg * 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.
33fb4d8502Sjsg */
34fb4d8502Sjsg 
35fb4d8502Sjsg #ifndef _ATOMFIRMWARE_H_
36fb4d8502Sjsg #define _ATOMFIRMWARE_H_
37fb4d8502Sjsg 
38fb4d8502Sjsg enum  atom_bios_header_version_def{
39fb4d8502Sjsg   ATOM_MAJOR_VERSION        =0x0003,
40fb4d8502Sjsg   ATOM_MINOR_VERSION        =0x0003,
41fb4d8502Sjsg };
42fb4d8502Sjsg 
43fb4d8502Sjsg #ifdef _H2INC
44fb4d8502Sjsg   #ifndef uint32_t
45fb4d8502Sjsg     typedef unsigned long uint32_t;
46fb4d8502Sjsg   #endif
47fb4d8502Sjsg 
48fb4d8502Sjsg   #ifndef uint16_t
49fb4d8502Sjsg     typedef unsigned short uint16_t;
50fb4d8502Sjsg   #endif
51fb4d8502Sjsg 
52fb4d8502Sjsg   #ifndef uint8_t
53fb4d8502Sjsg     typedef unsigned char uint8_t;
54fb4d8502Sjsg   #endif
55fb4d8502Sjsg #endif
56fb4d8502Sjsg 
57fb4d8502Sjsg enum atom_crtc_def{
58fb4d8502Sjsg   ATOM_CRTC1      =0,
59fb4d8502Sjsg   ATOM_CRTC2      =1,
60fb4d8502Sjsg   ATOM_CRTC3      =2,
61fb4d8502Sjsg   ATOM_CRTC4      =3,
62fb4d8502Sjsg   ATOM_CRTC5      =4,
63fb4d8502Sjsg   ATOM_CRTC6      =5,
64fb4d8502Sjsg   ATOM_CRTC_INVALID  =0xff,
65fb4d8502Sjsg };
66fb4d8502Sjsg 
67fb4d8502Sjsg enum atom_ppll_def{
68fb4d8502Sjsg   ATOM_PPLL0          =2,
69fb4d8502Sjsg   ATOM_GCK_DFS        =8,
70fb4d8502Sjsg   ATOM_FCH_CLK        =9,
71fb4d8502Sjsg   ATOM_DP_DTO         =11,
72fb4d8502Sjsg   ATOM_COMBOPHY_PLL0  =20,
73fb4d8502Sjsg   ATOM_COMBOPHY_PLL1  =21,
74fb4d8502Sjsg   ATOM_COMBOPHY_PLL2  =22,
75fb4d8502Sjsg   ATOM_COMBOPHY_PLL3  =23,
76fb4d8502Sjsg   ATOM_COMBOPHY_PLL4  =24,
77fb4d8502Sjsg   ATOM_COMBOPHY_PLL5  =25,
78fb4d8502Sjsg   ATOM_PPLL_INVALID   =0xff,
79fb4d8502Sjsg };
80fb4d8502Sjsg 
81fb4d8502Sjsg // define ASIC internal encoder id ( bit vector ), used for CRTC_SourceSel
82fb4d8502Sjsg enum atom_dig_def{
83fb4d8502Sjsg   ASIC_INT_DIG1_ENCODER_ID  =0x03,
84fb4d8502Sjsg   ASIC_INT_DIG2_ENCODER_ID  =0x09,
85fb4d8502Sjsg   ASIC_INT_DIG3_ENCODER_ID  =0x0a,
86fb4d8502Sjsg   ASIC_INT_DIG4_ENCODER_ID  =0x0b,
87fb4d8502Sjsg   ASIC_INT_DIG5_ENCODER_ID  =0x0c,
88fb4d8502Sjsg   ASIC_INT_DIG6_ENCODER_ID  =0x0d,
89fb4d8502Sjsg   ASIC_INT_DIG7_ENCODER_ID  =0x0e,
90fb4d8502Sjsg };
91fb4d8502Sjsg 
92fb4d8502Sjsg //ucEncoderMode
93fb4d8502Sjsg enum atom_encode_mode_def
94fb4d8502Sjsg {
95fb4d8502Sjsg   ATOM_ENCODER_MODE_DP          =0,
96fb4d8502Sjsg   ATOM_ENCODER_MODE_DP_SST      =0,
97fb4d8502Sjsg   ATOM_ENCODER_MODE_LVDS        =1,
98fb4d8502Sjsg   ATOM_ENCODER_MODE_DVI         =2,
99fb4d8502Sjsg   ATOM_ENCODER_MODE_HDMI        =3,
100fb4d8502Sjsg   ATOM_ENCODER_MODE_DP_AUDIO    =5,
101fb4d8502Sjsg   ATOM_ENCODER_MODE_DP_MST      =5,
102fb4d8502Sjsg   ATOM_ENCODER_MODE_CRT         =15,
103fb4d8502Sjsg   ATOM_ENCODER_MODE_DVO         =16,
104fb4d8502Sjsg };
105fb4d8502Sjsg 
106fb4d8502Sjsg enum atom_encoder_refclk_src_def{
107fb4d8502Sjsg   ENCODER_REFCLK_SRC_P1PLL      =0,
108fb4d8502Sjsg   ENCODER_REFCLK_SRC_P2PLL      =1,
109fb4d8502Sjsg   ENCODER_REFCLK_SRC_P3PLL      =2,
110fb4d8502Sjsg   ENCODER_REFCLK_SRC_EXTCLK     =3,
111fb4d8502Sjsg   ENCODER_REFCLK_SRC_INVALID    =0xff,
112fb4d8502Sjsg };
113fb4d8502Sjsg 
114fb4d8502Sjsg enum atom_scaler_def{
115fb4d8502Sjsg   ATOM_SCALER_DISABLE          =0,  /*scaler bypass mode, auto-center & no replication*/
116fb4d8502Sjsg   ATOM_SCALER_CENTER           =1,  //For Fudo, it's bypass and auto-center & auto replication
117fb4d8502Sjsg   ATOM_SCALER_EXPANSION        =2,  /*scaler expansion by 2 tap alpha blending mode*/
118fb4d8502Sjsg };
119fb4d8502Sjsg 
120fb4d8502Sjsg enum atom_operation_def{
121fb4d8502Sjsg   ATOM_DISABLE             = 0,
122fb4d8502Sjsg   ATOM_ENABLE              = 1,
123fb4d8502Sjsg   ATOM_INIT                = 7,
124fb4d8502Sjsg   ATOM_GET_STATUS          = 8,
125fb4d8502Sjsg };
126fb4d8502Sjsg 
127fb4d8502Sjsg enum atom_embedded_display_op_def{
128fb4d8502Sjsg   ATOM_LCD_BL_OFF                = 2,
129fb4d8502Sjsg   ATOM_LCD_BL_OM                 = 3,
130fb4d8502Sjsg   ATOM_LCD_BL_BRIGHTNESS_CONTROL = 4,
131fb4d8502Sjsg   ATOM_LCD_SELFTEST_START        = 5,
132fb4d8502Sjsg   ATOM_LCD_SELFTEST_STOP         = 6,
133fb4d8502Sjsg };
134fb4d8502Sjsg 
135fb4d8502Sjsg enum atom_spread_spectrum_mode{
136fb4d8502Sjsg   ATOM_SS_CENTER_OR_DOWN_MODE_MASK  = 0x01,
137fb4d8502Sjsg   ATOM_SS_DOWN_SPREAD_MODE          = 0x00,
138fb4d8502Sjsg   ATOM_SS_CENTRE_SPREAD_MODE        = 0x01,
139fb4d8502Sjsg   ATOM_INT_OR_EXT_SS_MASK           = 0x02,
140fb4d8502Sjsg   ATOM_INTERNAL_SS_MASK             = 0x00,
141fb4d8502Sjsg   ATOM_EXTERNAL_SS_MASK             = 0x02,
142fb4d8502Sjsg };
143fb4d8502Sjsg 
144fb4d8502Sjsg /* define panel bit per color  */
145fb4d8502Sjsg enum atom_panel_bit_per_color{
146fb4d8502Sjsg   PANEL_BPC_UNDEFINE     =0x00,
147fb4d8502Sjsg   PANEL_6BIT_PER_COLOR   =0x01,
148fb4d8502Sjsg   PANEL_8BIT_PER_COLOR   =0x02,
149fb4d8502Sjsg   PANEL_10BIT_PER_COLOR  =0x03,
150fb4d8502Sjsg   PANEL_12BIT_PER_COLOR  =0x04,
151fb4d8502Sjsg   PANEL_16BIT_PER_COLOR  =0x05,
152fb4d8502Sjsg };
153fb4d8502Sjsg 
154fb4d8502Sjsg //ucVoltageType
155fb4d8502Sjsg enum atom_voltage_type
156fb4d8502Sjsg {
157fb4d8502Sjsg   VOLTAGE_TYPE_VDDC = 1,
158fb4d8502Sjsg   VOLTAGE_TYPE_MVDDC = 2,
159fb4d8502Sjsg   VOLTAGE_TYPE_MVDDQ = 3,
160fb4d8502Sjsg   VOLTAGE_TYPE_VDDCI = 4,
161fb4d8502Sjsg   VOLTAGE_TYPE_VDDGFX = 5,
162fb4d8502Sjsg   VOLTAGE_TYPE_PCC = 6,
163fb4d8502Sjsg   VOLTAGE_TYPE_MVPP = 7,
164fb4d8502Sjsg   VOLTAGE_TYPE_LEDDPM = 8,
165fb4d8502Sjsg   VOLTAGE_TYPE_PCC_MVDD = 9,
166fb4d8502Sjsg   VOLTAGE_TYPE_PCIE_VDDC = 10,
167fb4d8502Sjsg   VOLTAGE_TYPE_PCIE_VDDR = 11,
168fb4d8502Sjsg   VOLTAGE_TYPE_GENERIC_I2C_1 = 0x11,
169fb4d8502Sjsg   VOLTAGE_TYPE_GENERIC_I2C_2 = 0x12,
170fb4d8502Sjsg   VOLTAGE_TYPE_GENERIC_I2C_3 = 0x13,
171fb4d8502Sjsg   VOLTAGE_TYPE_GENERIC_I2C_4 = 0x14,
172fb4d8502Sjsg   VOLTAGE_TYPE_GENERIC_I2C_5 = 0x15,
173fb4d8502Sjsg   VOLTAGE_TYPE_GENERIC_I2C_6 = 0x16,
174fb4d8502Sjsg   VOLTAGE_TYPE_GENERIC_I2C_7 = 0x17,
175fb4d8502Sjsg   VOLTAGE_TYPE_GENERIC_I2C_8 = 0x18,
176fb4d8502Sjsg   VOLTAGE_TYPE_GENERIC_I2C_9 = 0x19,
177fb4d8502Sjsg   VOLTAGE_TYPE_GENERIC_I2C_10 = 0x1A,
178fb4d8502Sjsg };
179fb4d8502Sjsg 
180fb4d8502Sjsg enum atom_dgpu_vram_type {
181fb4d8502Sjsg   ATOM_DGPU_VRAM_TYPE_GDDR5 = 0x50,
182c349dbc7Sjsg   ATOM_DGPU_VRAM_TYPE_HBM2  = 0x60,
1835ca02815Sjsg   ATOM_DGPU_VRAM_TYPE_HBM2E = 0x61,
184c349dbc7Sjsg   ATOM_DGPU_VRAM_TYPE_GDDR6 = 0x70,
185f005ef32Sjsg   ATOM_DGPU_VRAM_TYPE_HBM3 = 0x80,
186fb4d8502Sjsg };
187fb4d8502Sjsg 
188fb4d8502Sjsg enum atom_dp_vs_preemph_def{
189fb4d8502Sjsg   DP_VS_LEVEL0_PREEMPH_LEVEL0 = 0x00,
190fb4d8502Sjsg   DP_VS_LEVEL1_PREEMPH_LEVEL0 = 0x01,
191fb4d8502Sjsg   DP_VS_LEVEL2_PREEMPH_LEVEL0 = 0x02,
192fb4d8502Sjsg   DP_VS_LEVEL3_PREEMPH_LEVEL0 = 0x03,
193fb4d8502Sjsg   DP_VS_LEVEL0_PREEMPH_LEVEL1 = 0x08,
194fb4d8502Sjsg   DP_VS_LEVEL1_PREEMPH_LEVEL1 = 0x09,
195fb4d8502Sjsg   DP_VS_LEVEL2_PREEMPH_LEVEL1 = 0x0a,
196fb4d8502Sjsg   DP_VS_LEVEL0_PREEMPH_LEVEL2 = 0x10,
197fb4d8502Sjsg   DP_VS_LEVEL1_PREEMPH_LEVEL2 = 0x11,
198fb4d8502Sjsg   DP_VS_LEVEL0_PREEMPH_LEVEL3 = 0x18,
199fb4d8502Sjsg };
200fb4d8502Sjsg 
2015ca02815Sjsg #define BIOS_ATOM_PREFIX   "ATOMBIOS"
2025ca02815Sjsg #define BIOS_VERSION_PREFIX  "ATOMBIOSBK-AMD"
2035ca02815Sjsg #define BIOS_STRING_LENGTH 43
204fb4d8502Sjsg 
205fb4d8502Sjsg /*
206fb4d8502Sjsg enum atom_string_def{
207fb4d8502Sjsg asic_bus_type_pcie_string = "PCI_EXPRESS",
208fb4d8502Sjsg atom_fire_gl_string       = "FGL",
209fb4d8502Sjsg atom_bios_string          = "ATOM"
210fb4d8502Sjsg };
211fb4d8502Sjsg */
212fb4d8502Sjsg 
213fb4d8502Sjsg #pragma pack(1)                          /* BIOS data must use byte aligment*/
214fb4d8502Sjsg 
215fb4d8502Sjsg enum atombios_image_offset{
216fb4d8502Sjsg   OFFSET_TO_ATOM_ROM_HEADER_POINTER          = 0x00000048,
217fb4d8502Sjsg   OFFSET_TO_ATOM_ROM_IMAGE_SIZE              = 0x00000002,
218fb4d8502Sjsg   OFFSET_TO_ATOMBIOS_ASIC_BUS_MEM_TYPE       = 0x94,
219fb4d8502Sjsg   MAXSIZE_OF_ATOMBIOS_ASIC_BUS_MEM_TYPE      = 20,  /*including the terminator 0x0!*/
220fb4d8502Sjsg   OFFSET_TO_GET_ATOMBIOS_NUMBER_OF_STRINGS   = 0x2f,
221fb4d8502Sjsg   OFFSET_TO_GET_ATOMBIOS_STRING_START        = 0x6e,
2225ca02815Sjsg   OFFSET_TO_VBIOS_PART_NUMBER                = 0x80,
2235ca02815Sjsg   OFFSET_TO_VBIOS_DATE                       = 0x50,
224fb4d8502Sjsg };
225fb4d8502Sjsg 
226fb4d8502Sjsg /****************************************************************************
227fb4d8502Sjsg * Common header for all tables (Data table, Command function).
228fb4d8502Sjsg * Every table pointed in _ATOM_MASTER_DATA_TABLE has this common header.
229fb4d8502Sjsg * And the pointer actually points to this header.
230fb4d8502Sjsg ****************************************************************************/
231fb4d8502Sjsg 
232fb4d8502Sjsg struct atom_common_table_header
233fb4d8502Sjsg {
234fb4d8502Sjsg   uint16_t structuresize;
235fb4d8502Sjsg   uint8_t  format_revision;   //mainly used for a hw function, when the parser is not backward compatible
236fb4d8502Sjsg   uint8_t  content_revision;  //change it when a data table has a structure change, or a hw function has a input/output parameter change
237fb4d8502Sjsg };
238fb4d8502Sjsg 
239fb4d8502Sjsg /****************************************************************************
240fb4d8502Sjsg * Structure stores the ROM header.
241fb4d8502Sjsg ****************************************************************************/
242fb4d8502Sjsg struct atom_rom_header_v2_2
243fb4d8502Sjsg {
244fb4d8502Sjsg   struct atom_common_table_header table_header;
245fb4d8502Sjsg   uint8_t  atom_bios_string[4];        //enum atom_string_def atom_bios_string;     //Signature to distinguish between Atombios and non-atombios,
246fb4d8502Sjsg   uint16_t bios_segment_address;
247fb4d8502Sjsg   uint16_t protectedmodeoffset;
248fb4d8502Sjsg   uint16_t configfilenameoffset;
249fb4d8502Sjsg   uint16_t crc_block_offset;
250fb4d8502Sjsg   uint16_t vbios_bootupmessageoffset;
251fb4d8502Sjsg   uint16_t int10_offset;
252fb4d8502Sjsg   uint16_t pcibusdevinitcode;
253fb4d8502Sjsg   uint16_t iobaseaddress;
254fb4d8502Sjsg   uint16_t subsystem_vendor_id;
255fb4d8502Sjsg   uint16_t subsystem_id;
256fb4d8502Sjsg   uint16_t pci_info_offset;
257fb4d8502Sjsg   uint16_t masterhwfunction_offset;      //Offest for SW to get all command function offsets, Don't change the position
258fb4d8502Sjsg   uint16_t masterdatatable_offset;       //Offest for SW to get all data table offsets, Don't change the position
259fb4d8502Sjsg   uint16_t reserved;
260fb4d8502Sjsg   uint32_t pspdirtableoffset;
261fb4d8502Sjsg };
262fb4d8502Sjsg 
263fb4d8502Sjsg /*==============================hw function portion======================================================================*/
264fb4d8502Sjsg 
265fb4d8502Sjsg 
266fb4d8502Sjsg /****************************************************************************
267fb4d8502Sjsg * Structures used in Command.mtb, each function name is not given here since those function could change from time to time
268fb4d8502Sjsg * The real functionality of each function is associated with the parameter structure version when defined
269fb4d8502Sjsg * For all internal cmd function definitions, please reference to atomstruct.h
270fb4d8502Sjsg ****************************************************************************/
271fb4d8502Sjsg struct atom_master_list_of_command_functions_v2_1{
272fb4d8502Sjsg   uint16_t asic_init;                   //Function
273fb4d8502Sjsg   uint16_t cmd_function1;               //used as an internal one
274fb4d8502Sjsg   uint16_t cmd_function2;               //used as an internal one
275fb4d8502Sjsg   uint16_t cmd_function3;               //used as an internal one
276fb4d8502Sjsg   uint16_t digxencodercontrol;          //Function
277fb4d8502Sjsg   uint16_t cmd_function5;               //used as an internal one
278fb4d8502Sjsg   uint16_t cmd_function6;               //used as an internal one
279fb4d8502Sjsg   uint16_t cmd_function7;               //used as an internal one
280fb4d8502Sjsg   uint16_t cmd_function8;               //used as an internal one
281fb4d8502Sjsg   uint16_t cmd_function9;               //used as an internal one
282fb4d8502Sjsg   uint16_t setengineclock;              //Function
283fb4d8502Sjsg   uint16_t setmemoryclock;              //Function
284fb4d8502Sjsg   uint16_t setpixelclock;               //Function
285fb4d8502Sjsg   uint16_t enabledisppowergating;       //Function
286fb4d8502Sjsg   uint16_t cmd_function14;              //used as an internal one
287fb4d8502Sjsg   uint16_t cmd_function15;              //used as an internal one
288fb4d8502Sjsg   uint16_t cmd_function16;              //used as an internal one
289fb4d8502Sjsg   uint16_t cmd_function17;              //used as an internal one
290fb4d8502Sjsg   uint16_t cmd_function18;              //used as an internal one
291fb4d8502Sjsg   uint16_t cmd_function19;              //used as an internal one
292fb4d8502Sjsg   uint16_t cmd_function20;              //used as an internal one
293fb4d8502Sjsg   uint16_t cmd_function21;              //used as an internal one
294fb4d8502Sjsg   uint16_t cmd_function22;              //used as an internal one
295fb4d8502Sjsg   uint16_t cmd_function23;              //used as an internal one
296fb4d8502Sjsg   uint16_t cmd_function24;              //used as an internal one
297fb4d8502Sjsg   uint16_t cmd_function25;              //used as an internal one
298fb4d8502Sjsg   uint16_t cmd_function26;              //used as an internal one
299fb4d8502Sjsg   uint16_t cmd_function27;              //used as an internal one
300fb4d8502Sjsg   uint16_t cmd_function28;              //used as an internal one
301fb4d8502Sjsg   uint16_t cmd_function29;              //used as an internal one
302fb4d8502Sjsg   uint16_t cmd_function30;              //used as an internal one
303fb4d8502Sjsg   uint16_t cmd_function31;              //used as an internal one
304fb4d8502Sjsg   uint16_t cmd_function32;              //used as an internal one
305fb4d8502Sjsg   uint16_t cmd_function33;              //used as an internal one
306fb4d8502Sjsg   uint16_t blankcrtc;                   //Function
307fb4d8502Sjsg   uint16_t enablecrtc;                  //Function
308fb4d8502Sjsg   uint16_t cmd_function36;              //used as an internal one
309fb4d8502Sjsg   uint16_t cmd_function37;              //used as an internal one
310fb4d8502Sjsg   uint16_t cmd_function38;              //used as an internal one
311fb4d8502Sjsg   uint16_t cmd_function39;              //used as an internal one
312fb4d8502Sjsg   uint16_t cmd_function40;              //used as an internal one
313fb4d8502Sjsg   uint16_t getsmuclockinfo;             //Function
314fb4d8502Sjsg   uint16_t selectcrtc_source;           //Function
315fb4d8502Sjsg   uint16_t cmd_function43;              //used as an internal one
316fb4d8502Sjsg   uint16_t cmd_function44;              //used as an internal one
317fb4d8502Sjsg   uint16_t cmd_function45;              //used as an internal one
318fb4d8502Sjsg   uint16_t setdceclock;                 //Function
319fb4d8502Sjsg   uint16_t getmemoryclock;              //Function
320fb4d8502Sjsg   uint16_t getengineclock;              //Function
321fb4d8502Sjsg   uint16_t setcrtc_usingdtdtiming;      //Function
322fb4d8502Sjsg   uint16_t externalencodercontrol;      //Function
323fb4d8502Sjsg   uint16_t cmd_function51;              //used as an internal one
324fb4d8502Sjsg   uint16_t cmd_function52;              //used as an internal one
325fb4d8502Sjsg   uint16_t cmd_function53;              //used as an internal one
326fb4d8502Sjsg   uint16_t processi2cchanneltransaction;//Function
327fb4d8502Sjsg   uint16_t cmd_function55;              //used as an internal one
328fb4d8502Sjsg   uint16_t cmd_function56;              //used as an internal one
329fb4d8502Sjsg   uint16_t cmd_function57;              //used as an internal one
330fb4d8502Sjsg   uint16_t cmd_function58;              //used as an internal one
331fb4d8502Sjsg   uint16_t cmd_function59;              //used as an internal one
332fb4d8502Sjsg   uint16_t computegpuclockparam;        //Function
333fb4d8502Sjsg   uint16_t cmd_function61;              //used as an internal one
334fb4d8502Sjsg   uint16_t cmd_function62;              //used as an internal one
335fb4d8502Sjsg   uint16_t dynamicmemorysettings;       //Function function
336fb4d8502Sjsg   uint16_t memorytraining;              //Function function
337fb4d8502Sjsg   uint16_t cmd_function65;              //used as an internal one
338fb4d8502Sjsg   uint16_t cmd_function66;              //used as an internal one
339fb4d8502Sjsg   uint16_t setvoltage;                  //Function
340fb4d8502Sjsg   uint16_t cmd_function68;              //used as an internal one
341fb4d8502Sjsg   uint16_t readefusevalue;              //Function
342fb4d8502Sjsg   uint16_t cmd_function70;              //used as an internal one
343fb4d8502Sjsg   uint16_t cmd_function71;              //used as an internal one
344fb4d8502Sjsg   uint16_t cmd_function72;              //used as an internal one
345fb4d8502Sjsg   uint16_t cmd_function73;              //used as an internal one
346fb4d8502Sjsg   uint16_t cmd_function74;              //used as an internal one
347fb4d8502Sjsg   uint16_t cmd_function75;              //used as an internal one
348fb4d8502Sjsg   uint16_t dig1transmittercontrol;      //Function
349fb4d8502Sjsg   uint16_t cmd_function77;              //used as an internal one
350fb4d8502Sjsg   uint16_t processauxchanneltransaction;//Function
351fb4d8502Sjsg   uint16_t cmd_function79;              //used as an internal one
352fb4d8502Sjsg   uint16_t getvoltageinfo;              //Function
353fb4d8502Sjsg };
354fb4d8502Sjsg 
355fb4d8502Sjsg struct atom_master_command_function_v2_1
356fb4d8502Sjsg {
357fb4d8502Sjsg   struct atom_common_table_header  table_header;
358fb4d8502Sjsg   struct atom_master_list_of_command_functions_v2_1 listofcmdfunctions;
359fb4d8502Sjsg };
360fb4d8502Sjsg 
361fb4d8502Sjsg /****************************************************************************
362fb4d8502Sjsg * Structures used in every command function
363fb4d8502Sjsg ****************************************************************************/
364fb4d8502Sjsg struct atom_function_attribute
365fb4d8502Sjsg {
366fb4d8502Sjsg   uint16_t  ws_in_bytes:8;            //[7:0]=Size of workspace in Bytes (in multiple of a dword),
367fb4d8502Sjsg   uint16_t  ps_in_bytes:7;            //[14:8]=Size of parameter space in Bytes (multiple of a dword),
368fb4d8502Sjsg   uint16_t  updated_by_util:1;        //[15]=flag to indicate the function is updated by util
369fb4d8502Sjsg };
370fb4d8502Sjsg 
371fb4d8502Sjsg 
372fb4d8502Sjsg /****************************************************************************
373fb4d8502Sjsg * Common header for all hw functions.
374fb4d8502Sjsg * Every function pointed by _master_list_of_hw_function has this common header.
375fb4d8502Sjsg * And the pointer actually points to this header.
376fb4d8502Sjsg ****************************************************************************/
377fb4d8502Sjsg struct atom_rom_hw_function_header
378fb4d8502Sjsg {
379fb4d8502Sjsg   struct atom_common_table_header func_header;
380fb4d8502Sjsg   struct atom_function_attribute func_attrib;
381fb4d8502Sjsg };
382fb4d8502Sjsg 
383fb4d8502Sjsg 
384fb4d8502Sjsg /*==============================sw data table portion======================================================================*/
385fb4d8502Sjsg /****************************************************************************
386fb4d8502Sjsg * Structures used in data.mtb, each data table name is not given here since those data table could change from time to time
387fb4d8502Sjsg * The real name of each table is given when its data structure version is defined
388fb4d8502Sjsg ****************************************************************************/
389fb4d8502Sjsg struct atom_master_list_of_data_tables_v2_1{
390fb4d8502Sjsg   uint16_t utilitypipeline;               /* Offest for the utility to get parser info,Don't change this position!*/
391fb4d8502Sjsg   uint16_t multimedia_info;
392fb4d8502Sjsg   uint16_t smc_dpm_info;
393fb4d8502Sjsg   uint16_t sw_datatable3;
394fb4d8502Sjsg   uint16_t firmwareinfo;                  /* Shared by various SW components */
395fb4d8502Sjsg   uint16_t sw_datatable5;
396fb4d8502Sjsg   uint16_t lcd_info;                      /* Shared by various SW components */
397fb4d8502Sjsg   uint16_t sw_datatable7;
398fb4d8502Sjsg   uint16_t smu_info;
399fb4d8502Sjsg   uint16_t sw_datatable9;
400fb4d8502Sjsg   uint16_t sw_datatable10;
401fb4d8502Sjsg   uint16_t vram_usagebyfirmware;          /* Shared by various SW components */
402fb4d8502Sjsg   uint16_t gpio_pin_lut;                  /* Shared by various SW components */
403fb4d8502Sjsg   uint16_t sw_datatable13;
404fb4d8502Sjsg   uint16_t gfx_info;
405fb4d8502Sjsg   uint16_t powerplayinfo;                 /* Shared by various SW components */
406fb4d8502Sjsg   uint16_t sw_datatable16;
407fb4d8502Sjsg   uint16_t sw_datatable17;
408fb4d8502Sjsg   uint16_t sw_datatable18;
409fb4d8502Sjsg   uint16_t sw_datatable19;
410fb4d8502Sjsg   uint16_t sw_datatable20;
411fb4d8502Sjsg   uint16_t sw_datatable21;
412fb4d8502Sjsg   uint16_t displayobjectinfo;             /* Shared by various SW components */
413fb4d8502Sjsg   uint16_t indirectioaccess;			  /* used as an internal one */
414fb4d8502Sjsg   uint16_t umc_info;                      /* Shared by various SW components */
415fb4d8502Sjsg   uint16_t sw_datatable25;
416fb4d8502Sjsg   uint16_t sw_datatable26;
417fb4d8502Sjsg   uint16_t dce_info;                      /* Shared by various SW components */
418fb4d8502Sjsg   uint16_t vram_info;                     /* Shared by various SW components */
419fb4d8502Sjsg   uint16_t sw_datatable29;
420fb4d8502Sjsg   uint16_t integratedsysteminfo;          /* Shared by various SW components */
421fb4d8502Sjsg   uint16_t asic_profiling_info;           /* Shared by various SW components */
422fb4d8502Sjsg   uint16_t voltageobject_info;            /* shared by various SW components */
423fb4d8502Sjsg   uint16_t sw_datatable33;
424fb4d8502Sjsg   uint16_t sw_datatable34;
425fb4d8502Sjsg };
426fb4d8502Sjsg 
427fb4d8502Sjsg 
428fb4d8502Sjsg struct atom_master_data_table_v2_1
429fb4d8502Sjsg {
430fb4d8502Sjsg   struct atom_common_table_header table_header;
431fb4d8502Sjsg   struct atom_master_list_of_data_tables_v2_1 listOfdatatables;
432fb4d8502Sjsg };
433fb4d8502Sjsg 
434fb4d8502Sjsg 
435fb4d8502Sjsg struct atom_dtd_format
436fb4d8502Sjsg {
437fb4d8502Sjsg   uint16_t  pixclk;
438fb4d8502Sjsg   uint16_t  h_active;
439fb4d8502Sjsg   uint16_t  h_blanking_time;
440fb4d8502Sjsg   uint16_t  v_active;
441fb4d8502Sjsg   uint16_t  v_blanking_time;
442fb4d8502Sjsg   uint16_t  h_sync_offset;
443fb4d8502Sjsg   uint16_t  h_sync_width;
444fb4d8502Sjsg   uint16_t  v_sync_offset;
445fb4d8502Sjsg   uint16_t  v_syncwidth;
446fb4d8502Sjsg   uint16_t  reserved;
447fb4d8502Sjsg   uint16_t  reserved0;
448fb4d8502Sjsg   uint8_t   h_border;
449fb4d8502Sjsg   uint8_t   v_border;
450fb4d8502Sjsg   uint16_t  miscinfo;
451fb4d8502Sjsg   uint8_t   atom_mode_id;
452fb4d8502Sjsg   uint8_t   refreshrate;
453fb4d8502Sjsg };
454fb4d8502Sjsg 
455fb4d8502Sjsg /* atom_dtd_format.modemiscinfo defintion */
456fb4d8502Sjsg enum atom_dtd_format_modemiscinfo{
457fb4d8502Sjsg   ATOM_HSYNC_POLARITY    = 0x0002,
458fb4d8502Sjsg   ATOM_VSYNC_POLARITY    = 0x0004,
459fb4d8502Sjsg   ATOM_H_REPLICATIONBY2  = 0x0010,
460fb4d8502Sjsg   ATOM_V_REPLICATIONBY2  = 0x0020,
461fb4d8502Sjsg   ATOM_INTERLACE         = 0x0080,
462fb4d8502Sjsg   ATOM_COMPOSITESYNC     = 0x0040,
463fb4d8502Sjsg };
464fb4d8502Sjsg 
465fb4d8502Sjsg 
466fb4d8502Sjsg /* utilitypipeline
467fb4d8502Sjsg  * 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.
468fb4d8502Sjsg  * the location of it can't change
469fb4d8502Sjsg */
470fb4d8502Sjsg 
471fb4d8502Sjsg 
472fb4d8502Sjsg /*
473fb4d8502Sjsg   ***************************************************************************
474fb4d8502Sjsg     Data Table firmwareinfo  structure
475fb4d8502Sjsg   ***************************************************************************
476fb4d8502Sjsg */
477fb4d8502Sjsg 
478fb4d8502Sjsg struct atom_firmware_info_v3_1
479fb4d8502Sjsg {
480fb4d8502Sjsg   struct atom_common_table_header table_header;
481fb4d8502Sjsg   uint32_t firmware_revision;
482fb4d8502Sjsg   uint32_t bootup_sclk_in10khz;
483fb4d8502Sjsg   uint32_t bootup_mclk_in10khz;
484fb4d8502Sjsg   uint32_t firmware_capability;             // enum atombios_firmware_capability
485fb4d8502Sjsg   uint32_t main_call_parser_entry;          /* direct address of main parser call in VBIOS binary. */
486fb4d8502Sjsg   uint32_t bios_scratch_reg_startaddr;      // 1st bios scratch register dword address
487fb4d8502Sjsg   uint16_t bootup_vddc_mv;
488fb4d8502Sjsg   uint16_t bootup_vddci_mv;
489fb4d8502Sjsg   uint16_t bootup_mvddc_mv;
490fb4d8502Sjsg   uint16_t bootup_vddgfx_mv;
491fb4d8502Sjsg   uint8_t  mem_module_id;
492fb4d8502Sjsg   uint8_t  coolingsolution_id;              /*0: Air cooling; 1: Liquid cooling ... */
493fb4d8502Sjsg   uint8_t  reserved1[2];
494fb4d8502Sjsg   uint32_t mc_baseaddr_high;
495fb4d8502Sjsg   uint32_t mc_baseaddr_low;
496fb4d8502Sjsg   uint32_t reserved2[6];
497fb4d8502Sjsg };
498fb4d8502Sjsg 
499fb4d8502Sjsg /* Total 32bit cap indication */
500fb4d8502Sjsg enum atombios_firmware_capability
501fb4d8502Sjsg {
502fb4d8502Sjsg 	ATOM_FIRMWARE_CAP_FIRMWARE_POSTED = 0x00000001,
503fb4d8502Sjsg 	ATOM_FIRMWARE_CAP_GPU_VIRTUALIZATION  = 0x00000002,
504fb4d8502Sjsg 	ATOM_FIRMWARE_CAP_WMI_SUPPORT  = 0x00000040,
505c349dbc7Sjsg 	ATOM_FIRMWARE_CAP_HWEMU_ENABLE  = 0x00000080,
506c349dbc7Sjsg 	ATOM_FIRMWARE_CAP_HWEMU_UMC_CFG = 0x00000100,
507c349dbc7Sjsg 	ATOM_FIRMWARE_CAP_SRAM_ECC      = 0x00000200,
508c349dbc7Sjsg 	ATOM_FIRMWARE_CAP_ENABLE_2STAGE_BIST_TRAINING  = 0x00000400,
5095ca02815Sjsg 	ATOM_FIRMWARE_CAP_ENABLE_2ND_USB20PORT = 0x0008000,
5105ca02815Sjsg 	ATOM_FIRMWARE_CAP_DYNAMIC_BOOT_CFG_ENABLE = 0x0020000,
511fb4d8502Sjsg };
512fb4d8502Sjsg 
513fb4d8502Sjsg enum atom_cooling_solution_id{
514fb4d8502Sjsg   AIR_COOLING    = 0x00,
515fb4d8502Sjsg   LIQUID_COOLING = 0x01
516fb4d8502Sjsg };
517fb4d8502Sjsg 
518fb4d8502Sjsg struct atom_firmware_info_v3_2 {
519fb4d8502Sjsg   struct atom_common_table_header table_header;
520fb4d8502Sjsg   uint32_t firmware_revision;
521fb4d8502Sjsg   uint32_t bootup_sclk_in10khz;
522fb4d8502Sjsg   uint32_t bootup_mclk_in10khz;
523fb4d8502Sjsg   uint32_t firmware_capability;             // enum atombios_firmware_capability
524fb4d8502Sjsg   uint32_t main_call_parser_entry;          /* direct address of main parser call in VBIOS binary. */
525fb4d8502Sjsg   uint32_t bios_scratch_reg_startaddr;      // 1st bios scratch register dword address
526fb4d8502Sjsg   uint16_t bootup_vddc_mv;
527fb4d8502Sjsg   uint16_t bootup_vddci_mv;
528fb4d8502Sjsg   uint16_t bootup_mvddc_mv;
529fb4d8502Sjsg   uint16_t bootup_vddgfx_mv;
530fb4d8502Sjsg   uint8_t  mem_module_id;
531fb4d8502Sjsg   uint8_t  coolingsolution_id;              /*0: Air cooling; 1: Liquid cooling ... */
532fb4d8502Sjsg   uint8_t  reserved1[2];
533fb4d8502Sjsg   uint32_t mc_baseaddr_high;
534fb4d8502Sjsg   uint32_t mc_baseaddr_low;
535fb4d8502Sjsg   uint8_t  board_i2c_feature_id;            // enum of atom_board_i2c_feature_id_def
536fb4d8502Sjsg   uint8_t  board_i2c_feature_gpio_id;       // i2c id find in gpio_lut data table gpio_id
537fb4d8502Sjsg   uint8_t  board_i2c_feature_slave_addr;
538fb4d8502Sjsg   uint8_t  reserved3;
539fb4d8502Sjsg   uint16_t bootup_mvddq_mv;
540fb4d8502Sjsg   uint16_t bootup_mvpp_mv;
541fb4d8502Sjsg   uint32_t zfbstartaddrin16mb;
542fb4d8502Sjsg   uint32_t reserved2[3];
543fb4d8502Sjsg };
544fb4d8502Sjsg 
545c349dbc7Sjsg struct atom_firmware_info_v3_3
546c349dbc7Sjsg {
547c349dbc7Sjsg   struct atom_common_table_header table_header;
548c349dbc7Sjsg   uint32_t firmware_revision;
549c349dbc7Sjsg   uint32_t bootup_sclk_in10khz;
550c349dbc7Sjsg   uint32_t bootup_mclk_in10khz;
551c349dbc7Sjsg   uint32_t firmware_capability;             // enum atombios_firmware_capability
552c349dbc7Sjsg   uint32_t main_call_parser_entry;          /* direct address of main parser call in VBIOS binary. */
553c349dbc7Sjsg   uint32_t bios_scratch_reg_startaddr;      // 1st bios scratch register dword address
554c349dbc7Sjsg   uint16_t bootup_vddc_mv;
555c349dbc7Sjsg   uint16_t bootup_vddci_mv;
556c349dbc7Sjsg   uint16_t bootup_mvddc_mv;
557c349dbc7Sjsg   uint16_t bootup_vddgfx_mv;
558c349dbc7Sjsg   uint8_t  mem_module_id;
559c349dbc7Sjsg   uint8_t  coolingsolution_id;              /*0: Air cooling; 1: Liquid cooling ... */
560c349dbc7Sjsg   uint8_t  reserved1[2];
561c349dbc7Sjsg   uint32_t mc_baseaddr_high;
562c349dbc7Sjsg   uint32_t mc_baseaddr_low;
563c349dbc7Sjsg   uint8_t  board_i2c_feature_id;            // enum of atom_board_i2c_feature_id_def
564c349dbc7Sjsg   uint8_t  board_i2c_feature_gpio_id;       // i2c id find in gpio_lut data table gpio_id
565c349dbc7Sjsg   uint8_t  board_i2c_feature_slave_addr;
566c349dbc7Sjsg   uint8_t  reserved3;
567c349dbc7Sjsg   uint16_t bootup_mvddq_mv;
568c349dbc7Sjsg   uint16_t bootup_mvpp_mv;
569c349dbc7Sjsg   uint32_t zfbstartaddrin16mb;
570c349dbc7Sjsg   uint32_t pplib_pptable_id;                // if pplib_pptable_id!=0, pplib get powerplay table inside driver instead of from VBIOS
571c349dbc7Sjsg   uint32_t reserved2[2];
572c349dbc7Sjsg };
573c349dbc7Sjsg 
574ad8b1aafSjsg struct atom_firmware_info_v3_4 {
575ad8b1aafSjsg 	struct atom_common_table_header table_header;
576ad8b1aafSjsg 	uint32_t firmware_revision;
577ad8b1aafSjsg 	uint32_t bootup_sclk_in10khz;
578ad8b1aafSjsg 	uint32_t bootup_mclk_in10khz;
579ad8b1aafSjsg 	uint32_t firmware_capability;             // enum atombios_firmware_capability
580ad8b1aafSjsg 	uint32_t main_call_parser_entry;          /* direct address of main parser call in VBIOS binary. */
581ad8b1aafSjsg 	uint32_t bios_scratch_reg_startaddr;      // 1st bios scratch register dword address
582ad8b1aafSjsg 	uint16_t bootup_vddc_mv;
583ad8b1aafSjsg 	uint16_t bootup_vddci_mv;
584ad8b1aafSjsg 	uint16_t bootup_mvddc_mv;
585ad8b1aafSjsg 	uint16_t bootup_vddgfx_mv;
586ad8b1aafSjsg 	uint8_t  mem_module_id;
587ad8b1aafSjsg 	uint8_t  coolingsolution_id;              /*0: Air cooling; 1: Liquid cooling ... */
588ad8b1aafSjsg 	uint8_t  reserved1[2];
589ad8b1aafSjsg 	uint32_t mc_baseaddr_high;
590ad8b1aafSjsg 	uint32_t mc_baseaddr_low;
591ad8b1aafSjsg 	uint8_t  board_i2c_feature_id;            // enum of atom_board_i2c_feature_id_def
592ad8b1aafSjsg 	uint8_t  board_i2c_feature_gpio_id;       // i2c id find in gpio_lut data table gpio_id
593ad8b1aafSjsg 	uint8_t  board_i2c_feature_slave_addr;
5945ca02815Sjsg 	uint8_t  ras_rom_i2c_slave_addr;
595ad8b1aafSjsg 	uint16_t bootup_mvddq_mv;
596ad8b1aafSjsg 	uint16_t bootup_mvpp_mv;
597ad8b1aafSjsg 	uint32_t zfbstartaddrin16mb;
598ad8b1aafSjsg 	uint32_t pplib_pptable_id;                // if pplib_pptable_id!=0, pplib get powerplay table inside driver instead of from VBIOS
599ad8b1aafSjsg 	uint32_t mvdd_ratio;                      // mvdd_raio = (real mvdd in power rail)*1000/(mvdd_output_from_svi2)
600ad8b1aafSjsg 	uint16_t hw_bootup_vddgfx_mv;             // hw default vddgfx voltage level decide by board strap
601ad8b1aafSjsg 	uint16_t hw_bootup_vddc_mv;               // hw default vddc voltage level decide by board strap
602ad8b1aafSjsg 	uint16_t hw_bootup_mvddc_mv;              // hw default mvddc voltage level decide by board strap
603ad8b1aafSjsg 	uint16_t hw_bootup_vddci_mv;              // hw default vddci voltage level decide by board strap
604ad8b1aafSjsg 	uint32_t maco_pwrlimit_mw;                // bomaco mode power limit in unit of m-watt
605ad8b1aafSjsg 	uint32_t usb_pwrlimit_mw;                 // power limit when USB is enable in unit of m-watt
606ad8b1aafSjsg 	uint32_t fw_reserved_size_in_kb;          // VBIOS reserved extra fw size in unit of kb.
6075ca02815Sjsg         uint32_t pspbl_init_done_reg_addr;
6085ca02815Sjsg         uint32_t pspbl_init_done_value;
6095ca02815Sjsg         uint32_t pspbl_init_done_check_timeout;   // time out in unit of us when polling pspbl init done
6105ca02815Sjsg         uint32_t reserved[2];
611ad8b1aafSjsg };
612ad8b1aafSjsg 
613fb4d8502Sjsg /*
614fb4d8502Sjsg   ***************************************************************************
615fb4d8502Sjsg     Data Table lcd_info  structure
616fb4d8502Sjsg   ***************************************************************************
617fb4d8502Sjsg */
618fb4d8502Sjsg 
619fb4d8502Sjsg struct lcd_info_v2_1
620fb4d8502Sjsg {
621fb4d8502Sjsg   struct  atom_common_table_header table_header;
622fb4d8502Sjsg   struct  atom_dtd_format  lcd_timing;
623fb4d8502Sjsg   uint16_t backlight_pwm;
624fb4d8502Sjsg   uint16_t special_handle_cap;
625fb4d8502Sjsg   uint16_t panel_misc;
626fb4d8502Sjsg   uint16_t lvds_max_slink_pclk;
627fb4d8502Sjsg   uint16_t lvds_ss_percentage;
628fb4d8502Sjsg   uint16_t lvds_ss_rate_10hz;
629fb4d8502Sjsg   uint8_t  pwr_on_digon_to_de;          /*all pwr sequence numbers below are in uint of 4ms*/
630fb4d8502Sjsg   uint8_t  pwr_on_de_to_vary_bl;
631fb4d8502Sjsg   uint8_t  pwr_down_vary_bloff_to_de;
632fb4d8502Sjsg   uint8_t  pwr_down_de_to_digoff;
633fb4d8502Sjsg   uint8_t  pwr_off_delay;
634fb4d8502Sjsg   uint8_t  pwr_on_vary_bl_to_blon;
635fb4d8502Sjsg   uint8_t  pwr_down_bloff_to_vary_bloff;
636fb4d8502Sjsg   uint8_t  panel_bpc;
637fb4d8502Sjsg   uint8_t  dpcd_edp_config_cap;
638fb4d8502Sjsg   uint8_t  dpcd_max_link_rate;
639fb4d8502Sjsg   uint8_t  dpcd_max_lane_count;
640fb4d8502Sjsg   uint8_t  dpcd_max_downspread;
641fb4d8502Sjsg   uint8_t  min_allowed_bl_level;
642fb4d8502Sjsg   uint8_t  max_allowed_bl_level;
643fb4d8502Sjsg   uint8_t  bootup_bl_level;
644fb4d8502Sjsg   uint8_t  dplvdsrxid;
645fb4d8502Sjsg   uint32_t reserved1[8];
646fb4d8502Sjsg };
647fb4d8502Sjsg 
648fb4d8502Sjsg /* lcd_info_v2_1.panel_misc defintion */
649fb4d8502Sjsg enum atom_lcd_info_panel_misc{
650fb4d8502Sjsg   ATOM_PANEL_MISC_FPDI            =0x0002,
651fb4d8502Sjsg };
652fb4d8502Sjsg 
653fb4d8502Sjsg //uceDPToLVDSRxId
654fb4d8502Sjsg enum atom_lcd_info_dptolvds_rx_id
655fb4d8502Sjsg {
656fb4d8502Sjsg   eDP_TO_LVDS_RX_DISABLE                 = 0x00,       // no eDP->LVDS translator chip
657fb4d8502Sjsg   eDP_TO_LVDS_COMMON_ID                  = 0x01,       // common eDP->LVDS translator chip without AMD SW init
658fb4d8502Sjsg   eDP_TO_LVDS_REALTEK_ID                 = 0x02,       // Realtek tansaltor which require AMD SW init
659fb4d8502Sjsg };
660fb4d8502Sjsg 
661fb4d8502Sjsg 
662fb4d8502Sjsg /*
663fb4d8502Sjsg   ***************************************************************************
664fb4d8502Sjsg     Data Table gpio_pin_lut  structure
665fb4d8502Sjsg   ***************************************************************************
666fb4d8502Sjsg */
667fb4d8502Sjsg 
668fb4d8502Sjsg struct atom_gpio_pin_assignment
669fb4d8502Sjsg {
670fb4d8502Sjsg   uint32_t data_a_reg_index;
671fb4d8502Sjsg   uint8_t  gpio_bitshift;
672fb4d8502Sjsg   uint8_t  gpio_mask_bitshift;
673fb4d8502Sjsg   uint8_t  gpio_id;
674fb4d8502Sjsg   uint8_t  reserved;
675fb4d8502Sjsg };
676fb4d8502Sjsg 
677fb4d8502Sjsg /* atom_gpio_pin_assignment.gpio_id definition */
678fb4d8502Sjsg enum atom_gpio_pin_assignment_gpio_id {
679fb4d8502Sjsg   I2C_HW_LANE_MUX        =0x0f, /* only valid when bit7=1 */
680fb4d8502Sjsg   I2C_HW_ENGINE_ID_MASK  =0x70, /* only valid when bit7=1 */
681fb4d8502Sjsg   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 */
682fb4d8502Sjsg 
683fb4d8502Sjsg   /* gpio_id pre-define id for multiple usage */
684fb4d8502Sjsg   /* GPIO use to control PCIE_VDDC in certain SLT board */
685fb4d8502Sjsg   PCIE_VDDC_CONTROL_GPIO_PINID = 56,
686fb4d8502Sjsg   /* if PP_AC_DC_SWITCH_GPIO_PINID in Gpio_Pin_LutTable, AC/DC swithing feature is enable */
687fb4d8502Sjsg   PP_AC_DC_SWITCH_GPIO_PINID = 60,
688fb4d8502Sjsg   /* VDDC_REGULATOR_VRHOT_GPIO_PINID in Gpio_Pin_LutTable, VRHot feature is enable */
689fb4d8502Sjsg   VDDC_VRHOT_GPIO_PINID = 61,
690fb4d8502Sjsg   /*if VDDC_PCC_GPIO_PINID in GPIO_LUTable, Peak Current Control feature is enabled */
691fb4d8502Sjsg   VDDC_PCC_GPIO_PINID = 62,
692fb4d8502Sjsg   /* Only used on certain SLT/PA board to allow utility to cut Efuse. */
693fb4d8502Sjsg   EFUSE_CUT_ENABLE_GPIO_PINID = 63,
694fb4d8502Sjsg   /* ucGPIO=DRAM_SELF_REFRESH_GPIO_PIND uses  for memory self refresh (ucGPIO=0, DRAM self-refresh; ucGPIO= */
695fb4d8502Sjsg   DRAM_SELF_REFRESH_GPIO_PINID = 64,
696fb4d8502Sjsg   /* Thermal interrupt output->system thermal chip GPIO pin */
697fb4d8502Sjsg   THERMAL_INT_OUTPUT_GPIO_PINID =65,
698fb4d8502Sjsg };
699fb4d8502Sjsg 
700fb4d8502Sjsg 
701fb4d8502Sjsg struct atom_gpio_pin_lut_v2_1
702fb4d8502Sjsg {
703fb4d8502Sjsg   struct  atom_common_table_header  table_header;
704fb4d8502Sjsg   /*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  */
705327b7bbaSjsg   struct  atom_gpio_pin_assignment  gpio_pin[];
706fb4d8502Sjsg };
707fb4d8502Sjsg 
708fb4d8502Sjsg 
709fb4d8502Sjsg /*
7100b078e87Sjsg  * VBIOS/PRE-OS always reserve a FB region at the top of frame buffer. driver should not write
7110b078e87Sjsg  * access that region. driver can allocate their own reservation region as long as it does not
7120b078e87Sjsg  * overlap firwmare's reservation region.
7130b078e87Sjsg  * if (pre-NV1X) atom data table firmwareInfoTable version < 3.3:
7140b078e87Sjsg  * in this case, atom data table vram_usagebyfirmwareTable version always <= 2.1
7150b078e87Sjsg  *   if VBIOS/UEFI GOP is posted:
7160b078e87Sjsg  *     VBIOS/UEFIGOP update used_by_firmware_in_kb = total reserved size by VBIOS
7170b078e87Sjsg  *     update start_address_in_kb = total_mem_size_in_kb - used_by_firmware_in_kb;
7180b078e87Sjsg  *     ( total_mem_size_in_kb = reg(CONFIG_MEMSIZE)<<10)
7190b078e87Sjsg  *     driver can allocate driver reservation region under firmware reservation,
7200b078e87Sjsg  *     used_by_driver_in_kb = driver reservation size
7210b078e87Sjsg  *     driver reservation start address =  (start_address_in_kb - used_by_driver_in_kb)
7220b078e87Sjsg  *     Comment1[hchan]: There is only one reservation at the beginning of the FB reserved by
7230b078e87Sjsg  *     host driver. Host driver would overwrite the table with the following
7240b078e87Sjsg  *     used_by_firmware_in_kb = total reserved size for pf-vf info exchange and
7250b078e87Sjsg  *     set SRIOV_MSG_SHARE_RESERVATION mask start_address_in_kb = 0
7260b078e87Sjsg  *   else there is no VBIOS reservation region:
7270b078e87Sjsg  *     driver must allocate driver reservation region at top of FB.
7280b078e87Sjsg  *     driver set used_by_driver_in_kb = driver reservation size
7290b078e87Sjsg  *     driver reservation start address =  (total_mem_size_in_kb - used_by_driver_in_kb)
7300b078e87Sjsg  *     same as Comment1
7310b078e87Sjsg  * else (NV1X and after):
7320b078e87Sjsg  *   if VBIOS/UEFI GOP is posted:
7330b078e87Sjsg  *     VBIOS/UEFIGOP update:
7340b078e87Sjsg  *       used_by_firmware_in_kb = atom_firmware_Info_v3_3.fw_reserved_size_in_kb;
7350b078e87Sjsg  *       start_address_in_kb = total_mem_size_in_kb - used_by_firmware_in_kb;
7360b078e87Sjsg  *       (total_mem_size_in_kb = reg(CONFIG_MEMSIZE)<<10)
7370b078e87Sjsg  *   if vram_usagebyfirmwareTable version <= 2.1:
7380b078e87Sjsg  *     driver can allocate driver reservation region under firmware reservation,
7390b078e87Sjsg  *     driver set used_by_driver_in_kb = driver reservation size
7400b078e87Sjsg  *     driver reservation start address = start_address_in_kb - used_by_driver_in_kb
7410b078e87Sjsg  *     same as Comment1
7420b078e87Sjsg  *   else driver can:
7430b078e87Sjsg  *     allocate it reservation any place as long as it does overlap pre-OS FW reservation area
7440b078e87Sjsg  *     set used_by_driver_region0_in_kb = driver reservation size
7450b078e87Sjsg  *     set driver_region0_start_address_in_kb =  driver reservation region start address
7460b078e87Sjsg  *     Comment2[hchan]: Host driver can set used_by_firmware_in_kb and start_address_in_kb to
7470b078e87Sjsg  *     zero as the reservation for VF as it doesn’t exist.  And Host driver should also
7480b078e87Sjsg  *     update atom_firmware_Info table to remove the same VBIOS reservation as well.
749fb4d8502Sjsg  */
750fb4d8502Sjsg 
751fb4d8502Sjsg struct vram_usagebyfirmware_v2_1
752fb4d8502Sjsg {
753fb4d8502Sjsg 	struct  atom_common_table_header  table_header;
754fb4d8502Sjsg 	uint32_t  start_address_in_kb;
755fb4d8502Sjsg 	uint16_t  used_by_firmware_in_kb;
756fb4d8502Sjsg 	uint16_t  used_by_driver_in_kb;
757fb4d8502Sjsg };
758fb4d8502Sjsg 
7590b078e87Sjsg struct vram_usagebyfirmware_v2_2 {
7600b078e87Sjsg 	struct  atom_common_table_header  table_header;
7610b078e87Sjsg 	uint32_t  fw_region_start_address_in_kb;
7620b078e87Sjsg 	uint16_t  used_by_firmware_in_kb;
7630b078e87Sjsg 	uint16_t  reserved;
7640b078e87Sjsg 	uint32_t  driver_region0_start_address_in_kb;
7650b078e87Sjsg 	uint32_t  used_by_driver_region0_in_kb;
7660b078e87Sjsg 	uint32_t  reserved32[7];
7670b078e87Sjsg };
768fb4d8502Sjsg 
769fb4d8502Sjsg /*
770fb4d8502Sjsg   ***************************************************************************
771fb4d8502Sjsg     Data Table displayobjectinfo  structure
772fb4d8502Sjsg   ***************************************************************************
773fb4d8502Sjsg */
774fb4d8502Sjsg 
7751bb76ff1Sjsg enum atom_object_record_type_id {
776fb4d8502Sjsg 	ATOM_I2C_RECORD_TYPE = 1,
777fb4d8502Sjsg 	ATOM_HPD_INT_RECORD_TYPE = 2,
7781bb76ff1Sjsg 	ATOM_CONNECTOR_CAP_RECORD_TYPE = 3,
7791bb76ff1Sjsg 	ATOM_CONNECTOR_SPEED_UPTO = 4,
780fb4d8502Sjsg 	ATOM_OBJECT_GPIO_CNTL_RECORD_TYPE = 9,
781fb4d8502Sjsg 	ATOM_CONNECTOR_HPDPIN_LUT_RECORD_TYPE = 16,
782fb4d8502Sjsg 	ATOM_CONNECTOR_AUXDDC_LUT_RECORD_TYPE = 17,
783fb4d8502Sjsg 	ATOM_ENCODER_CAP_RECORD_TYPE = 20,
784fb4d8502Sjsg 	ATOM_BRACKET_LAYOUT_RECORD_TYPE = 21,
785fb4d8502Sjsg 	ATOM_CONNECTOR_FORCED_TMDS_CAP_RECORD_TYPE = 22,
7865ca02815Sjsg 	ATOM_DISP_CONNECTOR_CAPS_RECORD_TYPE = 23,
7871bb76ff1Sjsg 	ATOM_BRACKET_LAYOUT_V2_RECORD_TYPE = 25,
788fb4d8502Sjsg 	ATOM_RECORD_END_TYPE = 0xFF,
789fb4d8502Sjsg };
790fb4d8502Sjsg 
791fb4d8502Sjsg struct atom_common_record_header
792fb4d8502Sjsg {
793fb4d8502Sjsg   uint8_t record_type;                      //An emun to indicate the record type
794fb4d8502Sjsg   uint8_t record_size;                      //The size of the whole record in byte
795fb4d8502Sjsg };
796fb4d8502Sjsg 
797fb4d8502Sjsg struct atom_i2c_record
798fb4d8502Sjsg {
799fb4d8502Sjsg   struct atom_common_record_header record_header;   //record_type = ATOM_I2C_RECORD_TYPE
800fb4d8502Sjsg   uint8_t i2c_id;
801fb4d8502Sjsg   uint8_t i2c_slave_addr;                   //The slave address, it's 0 when the record is attached to connector for DDC
802fb4d8502Sjsg };
803fb4d8502Sjsg 
804fb4d8502Sjsg struct atom_hpd_int_record
805fb4d8502Sjsg {
806fb4d8502Sjsg   struct atom_common_record_header record_header;  //record_type = ATOM_HPD_INT_RECORD_TYPE
807fb4d8502Sjsg   uint8_t  pin_id;              //Corresponding block in GPIO_PIN_INFO table gives the pin info
808fb4d8502Sjsg   uint8_t  plugin_pin_state;
809fb4d8502Sjsg };
810fb4d8502Sjsg 
8111bb76ff1Sjsg struct atom_connector_caps_record {
8121bb76ff1Sjsg 	struct atom_common_record_header
8131bb76ff1Sjsg 		record_header; //record_type = ATOM_CONN_CAP_RECORD_TYPE
8141bb76ff1Sjsg 	uint16_t connector_caps; //01b if internal display is checked; 10b if internal BL is checked; 0 of Not
8151bb76ff1Sjsg };
8161bb76ff1Sjsg 
8171bb76ff1Sjsg struct atom_connector_speed_record {
8181bb76ff1Sjsg 	struct atom_common_record_header
8191bb76ff1Sjsg 		record_header; //record_type = ATOM_CONN_SPEED_UPTO
8201bb76ff1Sjsg 	uint32_t connector_max_speed; // connector Max speed attribute, it sets 8100 in Mhz when DP connector @8.1Ghz.
8211bb76ff1Sjsg 	uint16_t reserved;
8221bb76ff1Sjsg };
8231bb76ff1Sjsg 
824fb4d8502Sjsg // Bit maps for ATOM_ENCODER_CAP_RECORD.usEncoderCap
825fb4d8502Sjsg enum atom_encoder_caps_def
826fb4d8502Sjsg {
827fb4d8502Sjsg   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
828fb4d8502Sjsg   ATOM_ENCODER_CAP_RECORD_MST_EN                =0x01,         // from SI, this bit means DP MST is enable or not.
829fb4d8502Sjsg   ATOM_ENCODER_CAP_RECORD_HBR2_EN               =0x02,         // DP1.2 HBR2 setting is qualified and HBR2 can be enabled
830fb4d8502Sjsg   ATOM_ENCODER_CAP_RECORD_HDMI6Gbps_EN          =0x04,         // HDMI2.0 6Gbps enable or not.
831fb4d8502Sjsg   ATOM_ENCODER_CAP_RECORD_HBR3_EN               =0x08,         // DP1.3 HBR3 is supported by board.
8321bb76ff1Sjsg   ATOM_ENCODER_CAP_RECORD_DP2                   =0x10,         // DP2 is supported by ASIC/board.
8331bb76ff1Sjsg   ATOM_ENCODER_CAP_RECORD_UHBR10_EN             =0x20,         // DP2.0 UHBR10 settings is supported by board
8341bb76ff1Sjsg   ATOM_ENCODER_CAP_RECORD_UHBR13_5_EN           =0x40,         // DP2.0 UHBR13.5 settings is supported by board
8351bb76ff1Sjsg   ATOM_ENCODER_CAP_RECORD_UHBR20_EN             =0x80,         // DP2.0 UHBR20 settings is supported by board
836c349dbc7Sjsg   ATOM_ENCODER_CAP_RECORD_USB_C_TYPE            =0x100,        // the DP connector is a USB-C type.
837fb4d8502Sjsg };
838fb4d8502Sjsg 
839fb4d8502Sjsg struct  atom_encoder_caps_record
840fb4d8502Sjsg {
841fb4d8502Sjsg   struct atom_common_record_header record_header;  //record_type = ATOM_ENCODER_CAP_RECORD_TYPE
842fb4d8502Sjsg   uint32_t  encodercaps;
843fb4d8502Sjsg };
844fb4d8502Sjsg 
845fb4d8502Sjsg enum atom_connector_caps_def
846fb4d8502Sjsg {
847fb4d8502Sjsg   ATOM_CONNECTOR_CAP_INTERNAL_DISPLAY         = 0x01,        //a cap bit to indicate that this non-embedded display connector is an internal display
848fb4d8502Sjsg   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
849fb4d8502Sjsg };
850fb4d8502Sjsg 
851fb4d8502Sjsg struct atom_disp_connector_caps_record
852fb4d8502Sjsg {
853fb4d8502Sjsg   struct atom_common_record_header record_header;
854fb4d8502Sjsg   uint32_t connectcaps;
855fb4d8502Sjsg };
856fb4d8502Sjsg 
857fb4d8502Sjsg //The following generic object gpio pin control record type will replace JTAG_RECORD/FPGA_CONTROL_RECORD/DVI_EXT_INPUT_RECORD above gradually
858fb4d8502Sjsg struct atom_gpio_pin_control_pair
859fb4d8502Sjsg {
860fb4d8502Sjsg   uint8_t gpio_id;               // GPIO_ID, find the corresponding ID in GPIO_LUT table
861fb4d8502Sjsg   uint8_t gpio_pinstate;         // Pin state showing how to set-up the pin
862fb4d8502Sjsg };
863fb4d8502Sjsg 
864fb4d8502Sjsg struct atom_object_gpio_cntl_record
865fb4d8502Sjsg {
866fb4d8502Sjsg   struct atom_common_record_header record_header;
867fb4d8502Sjsg   uint8_t flag;                   // Future expnadibility
868fb4d8502Sjsg   uint8_t number_of_pins;         // Number of GPIO pins used to control the object
869fb4d8502Sjsg   struct atom_gpio_pin_control_pair gpio[1];              // the real gpio pin pair determined by number of pins ucNumberOfPins
870fb4d8502Sjsg };
871fb4d8502Sjsg 
872fb4d8502Sjsg //Definitions for GPIO pin state
873fb4d8502Sjsg enum atom_gpio_pin_control_pinstate_def
874fb4d8502Sjsg {
875fb4d8502Sjsg   GPIO_PIN_TYPE_INPUT             = 0x00,
876fb4d8502Sjsg   GPIO_PIN_TYPE_OUTPUT            = 0x10,
877fb4d8502Sjsg   GPIO_PIN_TYPE_HW_CONTROL        = 0x20,
878fb4d8502Sjsg 
879fb4d8502Sjsg //For GPIO_PIN_TYPE_OUTPUT the following is defined
880fb4d8502Sjsg   GPIO_PIN_OUTPUT_STATE_MASK      = 0x01,
881fb4d8502Sjsg   GPIO_PIN_OUTPUT_STATE_SHIFT     = 0,
882fb4d8502Sjsg   GPIO_PIN_STATE_ACTIVE_LOW       = 0x0,
883fb4d8502Sjsg   GPIO_PIN_STATE_ACTIVE_HIGH      = 0x1,
884fb4d8502Sjsg };
885fb4d8502Sjsg 
886fb4d8502Sjsg // Indexes to GPIO array in GLSync record
887fb4d8502Sjsg // GLSync record is for Frame Lock/Gen Lock feature.
888fb4d8502Sjsg enum atom_glsync_record_gpio_index_def
889fb4d8502Sjsg {
890fb4d8502Sjsg   ATOM_GPIO_INDEX_GLSYNC_REFCLK    = 0,
891fb4d8502Sjsg   ATOM_GPIO_INDEX_GLSYNC_HSYNC     = 1,
892fb4d8502Sjsg   ATOM_GPIO_INDEX_GLSYNC_VSYNC     = 2,
893fb4d8502Sjsg   ATOM_GPIO_INDEX_GLSYNC_SWAP_REQ  = 3,
894fb4d8502Sjsg   ATOM_GPIO_INDEX_GLSYNC_SWAP_GNT  = 4,
895fb4d8502Sjsg   ATOM_GPIO_INDEX_GLSYNC_INTERRUPT = 5,
896fb4d8502Sjsg   ATOM_GPIO_INDEX_GLSYNC_V_RESET   = 6,
897fb4d8502Sjsg   ATOM_GPIO_INDEX_GLSYNC_SWAP_CNTL = 7,
898fb4d8502Sjsg   ATOM_GPIO_INDEX_GLSYNC_SWAP_SEL  = 8,
899fb4d8502Sjsg   ATOM_GPIO_INDEX_GLSYNC_MAX       = 9,
900fb4d8502Sjsg };
901fb4d8502Sjsg 
902fb4d8502Sjsg 
903fb4d8502Sjsg struct atom_connector_hpdpin_lut_record     //record for ATOM_CONNECTOR_HPDPIN_LUT_RECORD_TYPE
904fb4d8502Sjsg {
905fb4d8502Sjsg   struct atom_common_record_header record_header;
906fb4d8502Sjsg   uint8_t hpd_pin_map[8];
907fb4d8502Sjsg };
908fb4d8502Sjsg 
909fb4d8502Sjsg struct atom_connector_auxddc_lut_record     //record for ATOM_CONNECTOR_AUXDDC_LUT_RECORD_TYPE
910fb4d8502Sjsg {
911fb4d8502Sjsg   struct atom_common_record_header record_header;
912fb4d8502Sjsg   uint8_t aux_ddc_map[8];
913fb4d8502Sjsg };
914fb4d8502Sjsg 
915fb4d8502Sjsg struct atom_connector_forced_tmds_cap_record
916fb4d8502Sjsg {
917fb4d8502Sjsg   struct atom_common_record_header record_header;
918fb4d8502Sjsg   // override TMDS capability on this connector when it operate in TMDS mode.  usMaxTmdsClkRate = max TMDS Clock in Mhz/2.5
919fb4d8502Sjsg   uint8_t  maxtmdsclkrate_in2_5mhz;
920fb4d8502Sjsg   uint8_t  reserved;
921fb4d8502Sjsg };
922fb4d8502Sjsg 
923fb4d8502Sjsg struct atom_connector_layout_info
924fb4d8502Sjsg {
925fb4d8502Sjsg   uint16_t connectorobjid;
926fb4d8502Sjsg   uint8_t  connector_type;
927fb4d8502Sjsg   uint8_t  position;
928fb4d8502Sjsg };
929fb4d8502Sjsg 
930fb4d8502Sjsg // define ATOM_CONNECTOR_LAYOUT_INFO.ucConnectorType to describe the display connector size
931fb4d8502Sjsg enum atom_connector_layout_info_connector_type_def
932fb4d8502Sjsg {
933fb4d8502Sjsg   CONNECTOR_TYPE_DVI_D                 = 1,
934fb4d8502Sjsg 
935fb4d8502Sjsg   CONNECTOR_TYPE_HDMI                  = 4,
936fb4d8502Sjsg   CONNECTOR_TYPE_DISPLAY_PORT          = 5,
937fb4d8502Sjsg   CONNECTOR_TYPE_MINI_DISPLAY_PORT     = 6,
938fb4d8502Sjsg };
939fb4d8502Sjsg 
940fb4d8502Sjsg struct  atom_bracket_layout_record
941fb4d8502Sjsg {
942fb4d8502Sjsg   struct atom_common_record_header record_header;
943fb4d8502Sjsg   uint8_t bracketlen;
944fb4d8502Sjsg   uint8_t bracketwidth;
945fb4d8502Sjsg   uint8_t conn_num;
946fb4d8502Sjsg   uint8_t reserved;
947fb4d8502Sjsg   struct atom_connector_layout_info  conn_info[1];
948fb4d8502Sjsg };
9491bb76ff1Sjsg struct atom_bracket_layout_record_v2 {
9501bb76ff1Sjsg 	struct atom_common_record_header
9511bb76ff1Sjsg 		record_header; //record_type =  ATOM_BRACKET_LAYOUT_RECORD_TYPE
9521bb76ff1Sjsg 	uint8_t bracketlen; //Bracket Length in mm
9531bb76ff1Sjsg 	uint8_t bracketwidth; //Bracket Width in mm
9541bb76ff1Sjsg 	uint8_t conn_num; //Connector numbering
9551bb76ff1Sjsg 	uint8_t mini_type; //Mini Type (0 = Normal; 1 = Mini)
9561bb76ff1Sjsg 	uint8_t reserved1;
9571bb76ff1Sjsg 	uint8_t reserved2;
9581bb76ff1Sjsg };
9591bb76ff1Sjsg 
9601bb76ff1Sjsg enum atom_connector_layout_info_mini_type_def {
9611bb76ff1Sjsg 	MINI_TYPE_NORMAL = 0,
9621bb76ff1Sjsg 	MINI_TYPE_MINI = 1,
9631bb76ff1Sjsg };
964fb4d8502Sjsg 
965fb4d8502Sjsg enum atom_display_device_tag_def{
966fb4d8502Sjsg   ATOM_DISPLAY_LCD1_SUPPORT            = 0x0002, //an embedded display is either an LVDS or eDP signal type of display
9675ca02815Sjsg   ATOM_DISPLAY_LCD2_SUPPORT			       = 0x0020, //second edp device tag 0x0020 for backward compability
968fb4d8502Sjsg   ATOM_DISPLAY_DFP1_SUPPORT            = 0x0008,
969fb4d8502Sjsg   ATOM_DISPLAY_DFP2_SUPPORT            = 0x0080,
970fb4d8502Sjsg   ATOM_DISPLAY_DFP3_SUPPORT            = 0x0200,
971fb4d8502Sjsg   ATOM_DISPLAY_DFP4_SUPPORT            = 0x0400,
972fb4d8502Sjsg   ATOM_DISPLAY_DFP5_SUPPORT            = 0x0800,
973fb4d8502Sjsg   ATOM_DISPLAY_DFP6_SUPPORT            = 0x0040,
974fb4d8502Sjsg   ATOM_DISPLAY_DFPx_SUPPORT            = 0x0ec8,
975fb4d8502Sjsg };
976fb4d8502Sjsg 
977fb4d8502Sjsg struct atom_display_object_path_v2
978fb4d8502Sjsg {
979fb4d8502Sjsg   uint16_t display_objid;                  //Connector Object ID or Misc Object ID
980fb4d8502Sjsg   uint16_t disp_recordoffset;
981fb4d8502Sjsg   uint16_t encoderobjid;                   //first encoder closer to the connector, could be either an external or intenal encoder
982fb4d8502Sjsg   uint16_t extencoderobjid;                //2nd encoder after the first encoder, from the connector point of view;
983fb4d8502Sjsg   uint16_t encoder_recordoffset;
984fb4d8502Sjsg   uint16_t extencoder_recordoffset;
985fb4d8502Sjsg   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
986fb4d8502Sjsg   uint8_t  priority_id;
987fb4d8502Sjsg   uint8_t  reserved;
988fb4d8502Sjsg };
989fb4d8502Sjsg 
9901bb76ff1Sjsg struct atom_display_object_path_v3 {
9911bb76ff1Sjsg 	uint16_t display_objid; //Connector Object ID or Misc Object ID
9921bb76ff1Sjsg 	uint16_t disp_recordoffset;
9931bb76ff1Sjsg 	uint16_t encoderobjid; //first encoder closer to the connector, could be either an external or intenal encoder
9941bb76ff1Sjsg 	uint16_t reserved1; //only on USBC case, otherwise always = 0
9951bb76ff1Sjsg 	uint16_t reserved2; //reserved and always = 0
9961bb76ff1Sjsg 	uint16_t reserved3; //reserved and always = 0
9971bb76ff1Sjsg 	//a supported device vector, each display path starts with this.the paths are enumerated in the way of priority,
9981bb76ff1Sjsg 	//a path appears first
9991bb76ff1Sjsg 	uint16_t device_tag;
10001bb76ff1Sjsg 	uint16_t reserved4; //reserved and always = 0
10011bb76ff1Sjsg };
10021bb76ff1Sjsg 
1003fb4d8502Sjsg struct display_object_info_table_v1_4
1004fb4d8502Sjsg {
1005fb4d8502Sjsg   struct    atom_common_table_header  table_header;
1006fb4d8502Sjsg   uint16_t  supporteddevices;
1007fb4d8502Sjsg   uint8_t   number_of_path;
1008fb4d8502Sjsg   uint8_t   reserved;
1009*0ab45afaSjsg   struct    atom_display_object_path_v2 display_path[];   //the real number of this included in the structure is calculated by using the (whole structure size - the header size- number_of_path)/size of atom_display_object_path
1010fb4d8502Sjsg };
1011fb4d8502Sjsg 
10121bb76ff1Sjsg struct display_object_info_table_v1_5 {
10131bb76ff1Sjsg 	struct atom_common_table_header table_header;
10141bb76ff1Sjsg 	uint16_t supporteddevices;
10151bb76ff1Sjsg 	uint8_t number_of_path;
10161bb76ff1Sjsg 	uint8_t reserved;
10171bb76ff1Sjsg 	// the real number of this included in the structure is calculated by using the
10181bb76ff1Sjsg 	// (whole structure size - the header size- number_of_path)/size of atom_display_object_path
1019*0ab45afaSjsg 	struct atom_display_object_path_v3 display_path[];
10201bb76ff1Sjsg };
1021fb4d8502Sjsg 
1022fb4d8502Sjsg /*
1023fb4d8502Sjsg   ***************************************************************************
1024fb4d8502Sjsg     Data Table dce_info  structure
1025fb4d8502Sjsg   ***************************************************************************
1026fb4d8502Sjsg */
1027fb4d8502Sjsg struct atom_display_controller_info_v4_1
1028fb4d8502Sjsg {
1029fb4d8502Sjsg   struct  atom_common_table_header  table_header;
1030fb4d8502Sjsg   uint32_t display_caps;
1031fb4d8502Sjsg   uint32_t bootup_dispclk_10khz;
1032fb4d8502Sjsg   uint16_t dce_refclk_10khz;
1033fb4d8502Sjsg   uint16_t i2c_engine_refclk_10khz;
1034fb4d8502Sjsg   uint16_t dvi_ss_percentage;       // in unit of 0.001%
1035fb4d8502Sjsg   uint16_t dvi_ss_rate_10hz;
1036fb4d8502Sjsg   uint16_t hdmi_ss_percentage;      // in unit of 0.001%
1037fb4d8502Sjsg   uint16_t hdmi_ss_rate_10hz;
1038fb4d8502Sjsg   uint16_t dp_ss_percentage;        // in unit of 0.001%
1039fb4d8502Sjsg   uint16_t dp_ss_rate_10hz;
1040fb4d8502Sjsg   uint8_t  dvi_ss_mode;             // enum of atom_spread_spectrum_mode
1041fb4d8502Sjsg   uint8_t  hdmi_ss_mode;            // enum of atom_spread_spectrum_mode
1042fb4d8502Sjsg   uint8_t  dp_ss_mode;              // enum of atom_spread_spectrum_mode
1043fb4d8502Sjsg   uint8_t  ss_reserved;
1044fb4d8502Sjsg   uint8_t  hardcode_mode_num;       // a hardcode mode number defined in StandardVESA_TimingTable when a CRT or DFP EDID is not available
1045fb4d8502Sjsg   uint8_t  reserved1[3];
1046fb4d8502Sjsg   uint16_t dpphy_refclk_10khz;
1047fb4d8502Sjsg   uint16_t reserved2;
1048fb4d8502Sjsg   uint8_t  dceip_min_ver;
1049fb4d8502Sjsg   uint8_t  dceip_max_ver;
1050fb4d8502Sjsg   uint8_t  max_disp_pipe_num;
1051fb4d8502Sjsg   uint8_t  max_vbios_active_disp_pipe_num;
1052fb4d8502Sjsg   uint8_t  max_ppll_num;
1053fb4d8502Sjsg   uint8_t  max_disp_phy_num;
1054fb4d8502Sjsg   uint8_t  max_aux_pairs;
1055fb4d8502Sjsg   uint8_t  remotedisplayconfig;
1056fb4d8502Sjsg   uint8_t  reserved3[8];
1057fb4d8502Sjsg };
1058fb4d8502Sjsg 
1059fb4d8502Sjsg struct atom_display_controller_info_v4_2
1060fb4d8502Sjsg {
1061fb4d8502Sjsg   struct  atom_common_table_header  table_header;
1062fb4d8502Sjsg   uint32_t display_caps;
1063fb4d8502Sjsg   uint32_t bootup_dispclk_10khz;
1064fb4d8502Sjsg   uint16_t dce_refclk_10khz;
1065fb4d8502Sjsg   uint16_t i2c_engine_refclk_10khz;
1066fb4d8502Sjsg   uint16_t dvi_ss_percentage;       // in unit of 0.001%
1067fb4d8502Sjsg   uint16_t dvi_ss_rate_10hz;
1068fb4d8502Sjsg   uint16_t hdmi_ss_percentage;      // in unit of 0.001%
1069fb4d8502Sjsg   uint16_t hdmi_ss_rate_10hz;
1070fb4d8502Sjsg   uint16_t dp_ss_percentage;        // in unit of 0.001%
1071fb4d8502Sjsg   uint16_t dp_ss_rate_10hz;
1072fb4d8502Sjsg   uint8_t  dvi_ss_mode;             // enum of atom_spread_spectrum_mode
1073fb4d8502Sjsg   uint8_t  hdmi_ss_mode;            // enum of atom_spread_spectrum_mode
1074fb4d8502Sjsg   uint8_t  dp_ss_mode;              // enum of atom_spread_spectrum_mode
1075fb4d8502Sjsg   uint8_t  ss_reserved;
1076fb4d8502Sjsg   uint8_t  dfp_hardcode_mode_num;   // DFP hardcode mode number defined in StandardVESA_TimingTable when EDID is not available
1077fb4d8502Sjsg   uint8_t  dfp_hardcode_refreshrate;// DFP hardcode mode refreshrate defined in StandardVESA_TimingTable when EDID is not available
1078fb4d8502Sjsg   uint8_t  vga_hardcode_mode_num;   // VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable
1079fb4d8502Sjsg   uint8_t  vga_hardcode_refreshrate;// VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable
1080fb4d8502Sjsg   uint16_t dpphy_refclk_10khz;
1081fb4d8502Sjsg   uint16_t reserved2;
1082fb4d8502Sjsg   uint8_t  dcnip_min_ver;
1083fb4d8502Sjsg   uint8_t  dcnip_max_ver;
1084fb4d8502Sjsg   uint8_t  max_disp_pipe_num;
1085fb4d8502Sjsg   uint8_t  max_vbios_active_disp_pipe_num;
1086fb4d8502Sjsg   uint8_t  max_ppll_num;
1087fb4d8502Sjsg   uint8_t  max_disp_phy_num;
1088fb4d8502Sjsg   uint8_t  max_aux_pairs;
1089fb4d8502Sjsg   uint8_t  remotedisplayconfig;
1090fb4d8502Sjsg   uint8_t  reserved3[8];
1091fb4d8502Sjsg };
1092fb4d8502Sjsg 
10935ca02815Sjsg struct atom_display_controller_info_v4_3
10945ca02815Sjsg {
10955ca02815Sjsg   struct  atom_common_table_header  table_header;
10965ca02815Sjsg   uint32_t display_caps;
10975ca02815Sjsg   uint32_t bootup_dispclk_10khz;
10985ca02815Sjsg   uint16_t dce_refclk_10khz;
10995ca02815Sjsg   uint16_t i2c_engine_refclk_10khz;
11005ca02815Sjsg   uint16_t dvi_ss_percentage;       // in unit of 0.001%
11015ca02815Sjsg   uint16_t dvi_ss_rate_10hz;
11025ca02815Sjsg   uint16_t hdmi_ss_percentage;      // in unit of 0.001%
11035ca02815Sjsg   uint16_t hdmi_ss_rate_10hz;
11045ca02815Sjsg   uint16_t dp_ss_percentage;        // in unit of 0.001%
11055ca02815Sjsg   uint16_t dp_ss_rate_10hz;
11065ca02815Sjsg   uint8_t  dvi_ss_mode;             // enum of atom_spread_spectrum_mode
11075ca02815Sjsg   uint8_t  hdmi_ss_mode;            // enum of atom_spread_spectrum_mode
11085ca02815Sjsg   uint8_t  dp_ss_mode;              // enum of atom_spread_spectrum_mode
11095ca02815Sjsg   uint8_t  ss_reserved;
11105ca02815Sjsg   uint8_t  dfp_hardcode_mode_num;   // DFP hardcode mode number defined in StandardVESA_TimingTable when EDID is not available
11115ca02815Sjsg   uint8_t  dfp_hardcode_refreshrate;// DFP hardcode mode refreshrate defined in StandardVESA_TimingTable when EDID is not available
11125ca02815Sjsg   uint8_t  vga_hardcode_mode_num;   // VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable
11135ca02815Sjsg   uint8_t  vga_hardcode_refreshrate;// VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable
11145ca02815Sjsg   uint16_t dpphy_refclk_10khz;
11155ca02815Sjsg   uint16_t reserved2;
11165ca02815Sjsg   uint8_t  dcnip_min_ver;
11175ca02815Sjsg   uint8_t  dcnip_max_ver;
11185ca02815Sjsg   uint8_t  max_disp_pipe_num;
11195ca02815Sjsg   uint8_t  max_vbios_active_disp_pipe_num;
11205ca02815Sjsg   uint8_t  max_ppll_num;
11215ca02815Sjsg   uint8_t  max_disp_phy_num;
11225ca02815Sjsg   uint8_t  max_aux_pairs;
11235ca02815Sjsg   uint8_t  remotedisplayconfig;
11245ca02815Sjsg   uint8_t  reserved3[8];
11255ca02815Sjsg };
11265ca02815Sjsg 
1127ad8b1aafSjsg struct atom_display_controller_info_v4_4 {
1128ad8b1aafSjsg 	struct atom_common_table_header table_header;
1129ad8b1aafSjsg 	uint32_t display_caps;
1130ad8b1aafSjsg 	uint32_t bootup_dispclk_10khz;
1131ad8b1aafSjsg 	uint16_t dce_refclk_10khz;
1132ad8b1aafSjsg 	uint16_t i2c_engine_refclk_10khz;
1133ad8b1aafSjsg 	uint16_t dvi_ss_percentage;	 // in unit of 0.001%
1134ad8b1aafSjsg 	uint16_t dvi_ss_rate_10hz;
1135ad8b1aafSjsg 	uint16_t hdmi_ss_percentage;	 // in unit of 0.001%
1136ad8b1aafSjsg 	uint16_t hdmi_ss_rate_10hz;
1137ad8b1aafSjsg 	uint16_t dp_ss_percentage;	 // in unit of 0.001%
1138ad8b1aafSjsg 	uint16_t dp_ss_rate_10hz;
1139ad8b1aafSjsg 	uint8_t dvi_ss_mode;		 // enum of atom_spread_spectrum_mode
1140ad8b1aafSjsg 	uint8_t hdmi_ss_mode;		 // enum of atom_spread_spectrum_mode
1141ad8b1aafSjsg 	uint8_t dp_ss_mode;		 // enum of atom_spread_spectrum_mode
1142ad8b1aafSjsg 	uint8_t ss_reserved;
1143ad8b1aafSjsg 	uint8_t dfp_hardcode_mode_num;	 // DFP hardcode mode number defined in StandardVESA_TimingTable when EDID is not available
1144ad8b1aafSjsg 	uint8_t dfp_hardcode_refreshrate;// DFP hardcode mode refreshrate defined in StandardVESA_TimingTable when EDID is not available
1145ad8b1aafSjsg 	uint8_t vga_hardcode_mode_num;	 // VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable
1146ad8b1aafSjsg 	uint8_t vga_hardcode_refreshrate;// VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable
1147ad8b1aafSjsg 	uint16_t dpphy_refclk_10khz;
1148ad8b1aafSjsg 	uint16_t hw_chip_id;
1149ad8b1aafSjsg 	uint8_t dcnip_min_ver;
1150ad8b1aafSjsg 	uint8_t dcnip_max_ver;
1151ad8b1aafSjsg 	uint8_t max_disp_pipe_num;
1152ad8b1aafSjsg 	uint8_t max_vbios_active_disp_pipum;
1153ad8b1aafSjsg 	uint8_t max_ppll_num;
1154ad8b1aafSjsg 	uint8_t max_disp_phy_num;
1155ad8b1aafSjsg 	uint8_t max_aux_pairs;
1156ad8b1aafSjsg 	uint8_t remotedisplayconfig;
1157ad8b1aafSjsg 	uint32_t dispclk_pll_vco_freq;
1158ad8b1aafSjsg 	uint32_t dp_ref_clk_freq;
1159ad8b1aafSjsg 	uint32_t max_mclk_chg_lat;	 // Worst case blackout duration for a memory clock frequency (p-state) change, units of 100s of ns (0.1 us)
1160ad8b1aafSjsg 	uint32_t max_sr_exit_lat;	 // Worst case memory self refresh exit time, units of 100ns of ns (0.1us)
1161ad8b1aafSjsg 	uint32_t max_sr_enter_exit_lat;	 // Worst case memory self refresh entry followed by immediate exit time, units of 100ns of ns (0.1us)
1162ad8b1aafSjsg 	uint16_t dc_golden_table_offset; // point of struct of atom_dc_golden_table_vxx
1163ad8b1aafSjsg 	uint16_t dc_golden_table_ver;
1164ad8b1aafSjsg 	uint32_t reserved3[3];
1165ad8b1aafSjsg };
1166ad8b1aafSjsg 
1167ad8b1aafSjsg struct atom_dc_golden_table_v1
1168ad8b1aafSjsg {
1169ad8b1aafSjsg 	uint32_t aux_dphy_rx_control0_val;
1170ad8b1aafSjsg 	uint32_t aux_dphy_tx_control_val;
1171ad8b1aafSjsg 	uint32_t aux_dphy_rx_control1_val;
1172ad8b1aafSjsg 	uint32_t dc_gpio_aux_ctrl_0_val;
1173ad8b1aafSjsg 	uint32_t dc_gpio_aux_ctrl_1_val;
1174ad8b1aafSjsg 	uint32_t dc_gpio_aux_ctrl_2_val;
1175ad8b1aafSjsg 	uint32_t dc_gpio_aux_ctrl_3_val;
1176ad8b1aafSjsg 	uint32_t dc_gpio_aux_ctrl_4_val;
1177ad8b1aafSjsg 	uint32_t dc_gpio_aux_ctrl_5_val;
1178ad8b1aafSjsg 	uint32_t reserved[23];
1179ad8b1aafSjsg };
1180fb4d8502Sjsg 
11811bb76ff1Sjsg enum dce_info_caps_def {
1182fb4d8502Sjsg 	// only for VBIOS
1183fb4d8502Sjsg 	DCE_INFO_CAPS_FORCE_DISPDEV_CONNECTED = 0x02,
1184fb4d8502Sjsg 	// only for VBIOS
1185fb4d8502Sjsg 	DCE_INFO_CAPS_DISABLE_DFP_DP_HBR2 = 0x04,
1186fb4d8502Sjsg 	// only for VBIOS
1187fb4d8502Sjsg 	DCE_INFO_CAPS_ENABLE_INTERLAC_TIMING = 0x08,
11885ca02815Sjsg 	// only for VBIOS
11895ca02815Sjsg 	DCE_INFO_CAPS_LTTPR_SUPPORT_ENABLE = 0x20,
11905ca02815Sjsg 	DCE_INFO_CAPS_VBIOS_LTTPR_TRANSPARENT_ENABLE = 0x40,
1191fb4d8502Sjsg };
1192fb4d8502Sjsg 
11931bb76ff1Sjsg struct atom_display_controller_info_v4_5
11941bb76ff1Sjsg {
11951bb76ff1Sjsg   struct  atom_common_table_header  table_header;
11961bb76ff1Sjsg   uint32_t display_caps;
11971bb76ff1Sjsg   uint32_t bootup_dispclk_10khz;
11981bb76ff1Sjsg   uint16_t dce_refclk_10khz;
11991bb76ff1Sjsg   uint16_t i2c_engine_refclk_10khz;
12001bb76ff1Sjsg   uint16_t dvi_ss_percentage;       // in unit of 0.001%
12011bb76ff1Sjsg   uint16_t dvi_ss_rate_10hz;
12021bb76ff1Sjsg   uint16_t hdmi_ss_percentage;      // in unit of 0.001%
12031bb76ff1Sjsg   uint16_t hdmi_ss_rate_10hz;
12041bb76ff1Sjsg   uint16_t dp_ss_percentage;        // in unit of 0.001%
12051bb76ff1Sjsg   uint16_t dp_ss_rate_10hz;
12061bb76ff1Sjsg   uint8_t  dvi_ss_mode;             // enum of atom_spread_spectrum_mode
12071bb76ff1Sjsg   uint8_t  hdmi_ss_mode;            // enum of atom_spread_spectrum_mode
12081bb76ff1Sjsg   uint8_t  dp_ss_mode;              // enum of atom_spread_spectrum_mode
12091bb76ff1Sjsg   uint8_t  ss_reserved;
12101bb76ff1Sjsg   // DFP hardcode mode number defined in StandardVESA_TimingTable when EDID is not available
12111bb76ff1Sjsg   uint8_t  dfp_hardcode_mode_num;
12121bb76ff1Sjsg   // DFP hardcode mode refreshrate defined in StandardVESA_TimingTable when EDID is not available
12131bb76ff1Sjsg   uint8_t  dfp_hardcode_refreshrate;
12141bb76ff1Sjsg   // VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable
12151bb76ff1Sjsg   uint8_t  vga_hardcode_mode_num;
12161bb76ff1Sjsg   // VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable
12171bb76ff1Sjsg   uint8_t  vga_hardcode_refreshrate;
12181bb76ff1Sjsg   uint16_t dpphy_refclk_10khz;
12191bb76ff1Sjsg   uint16_t hw_chip_id;
12201bb76ff1Sjsg   uint8_t  dcnip_min_ver;
12211bb76ff1Sjsg   uint8_t  dcnip_max_ver;
12221bb76ff1Sjsg   uint8_t  max_disp_pipe_num;
12231bb76ff1Sjsg   uint8_t  max_vbios_active_disp_pipe_num;
12241bb76ff1Sjsg   uint8_t  max_ppll_num;
12251bb76ff1Sjsg   uint8_t  max_disp_phy_num;
12261bb76ff1Sjsg   uint8_t  max_aux_pairs;
12271bb76ff1Sjsg   uint8_t  remotedisplayconfig;
12281bb76ff1Sjsg   uint32_t dispclk_pll_vco_freq;
12291bb76ff1Sjsg   uint32_t dp_ref_clk_freq;
12301bb76ff1Sjsg   // Worst case blackout duration for a memory clock frequency (p-state) change, units of 100s of ns (0.1 us)
12311bb76ff1Sjsg   uint32_t max_mclk_chg_lat;
12321bb76ff1Sjsg   // Worst case memory self refresh exit time, units of 100ns of ns (0.1us)
12331bb76ff1Sjsg   uint32_t max_sr_exit_lat;
12341bb76ff1Sjsg   // Worst case memory self refresh entry followed by immediate exit time, units of 100ns of ns (0.1us)
12351bb76ff1Sjsg   uint32_t max_sr_enter_exit_lat;
12361bb76ff1Sjsg   uint16_t dc_golden_table_offset;  // point of struct of atom_dc_golden_table_vxx
12371bb76ff1Sjsg   uint16_t dc_golden_table_ver;
12381bb76ff1Sjsg   uint32_t aux_dphy_rx_control0_val;
12391bb76ff1Sjsg   uint32_t aux_dphy_tx_control_val;
12401bb76ff1Sjsg   uint32_t aux_dphy_rx_control1_val;
12411bb76ff1Sjsg   uint32_t dc_gpio_aux_ctrl_0_val;
12421bb76ff1Sjsg   uint32_t dc_gpio_aux_ctrl_1_val;
12431bb76ff1Sjsg   uint32_t dc_gpio_aux_ctrl_2_val;
12441bb76ff1Sjsg   uint32_t dc_gpio_aux_ctrl_3_val;
12451bb76ff1Sjsg   uint32_t dc_gpio_aux_ctrl_4_val;
12461bb76ff1Sjsg   uint32_t dc_gpio_aux_ctrl_5_val;
12471bb76ff1Sjsg   uint32_t reserved[26];
12481bb76ff1Sjsg };
12491bb76ff1Sjsg 
1250fb4d8502Sjsg /*
1251fb4d8502Sjsg   ***************************************************************************
1252fb4d8502Sjsg     Data Table ATOM_EXTERNAL_DISPLAY_CONNECTION_INFO  structure
1253fb4d8502Sjsg   ***************************************************************************
1254fb4d8502Sjsg */
1255fb4d8502Sjsg struct atom_ext_display_path
1256fb4d8502Sjsg {
1257fb4d8502Sjsg   uint16_t  device_tag;                      //A bit vector to show what devices are supported
1258fb4d8502Sjsg   uint16_t  device_acpi_enum;                //16bit device ACPI id.
1259fb4d8502Sjsg   uint16_t  connectorobjid;                  //A physical connector for displays to plug in, using object connector definitions
1260fb4d8502Sjsg   uint8_t   auxddclut_index;                 //An index into external AUX/DDC channel LUT
1261fb4d8502Sjsg   uint8_t   hpdlut_index;                    //An index into external HPD pin LUT
1262fb4d8502Sjsg   uint16_t  ext_encoder_objid;               //external encoder object id
1263fb4d8502Sjsg   uint8_t   channelmapping;                  // if ucChannelMapping=0, using default one to one mapping
1264fb4d8502Sjsg   uint8_t   chpninvert;                      // bit vector for up to 8 lanes, =0: P and N is not invert, =1 P and N is inverted
1265fb4d8502Sjsg   uint16_t  caps;
1266fb4d8502Sjsg   uint16_t  reserved;
1267fb4d8502Sjsg };
1268fb4d8502Sjsg 
1269fb4d8502Sjsg //usCaps
1270ad8b1aafSjsg enum ext_display_path_cap_def {
1271fb4d8502Sjsg 	EXT_DISPLAY_PATH_CAPS__HBR2_DISABLE =           0x0001,
1272fb4d8502Sjsg 	EXT_DISPLAY_PATH_CAPS__DP_FIXED_VS_EN =         0x0002,
1273fb4d8502Sjsg 	EXT_DISPLAY_PATH_CAPS__EXT_CHIP_MASK =          0x007C,
1274ad8b1aafSjsg 	EXT_DISPLAY_PATH_CAPS__HDMI20_PI3EQX1204 =      (0x01 << 2), //PI redriver chip
1275ad8b1aafSjsg 	EXT_DISPLAY_PATH_CAPS__HDMI20_TISN65DP159RSBT = (0x02 << 2), //TI retimer chip
1276ad8b1aafSjsg 	EXT_DISPLAY_PATH_CAPS__HDMI20_PARADE_PS175 =    (0x03 << 2)  //Parade DP->HDMI recoverter chip
1277fb4d8502Sjsg };
1278fb4d8502Sjsg 
1279fb4d8502Sjsg struct atom_external_display_connection_info
1280fb4d8502Sjsg {
1281fb4d8502Sjsg   struct  atom_common_table_header  table_header;
1282fb4d8502Sjsg   uint8_t                  guid[16];                                  // a GUID is a 16 byte long string
1283fb4d8502Sjsg   struct atom_ext_display_path path[7];                               // total of fixed 7 entries.
1284fb4d8502Sjsg   uint8_t                  checksum;                                  // a simple Checksum of the sum of whole structure equal to 0x0.
1285fb4d8502Sjsg   uint8_t                  stereopinid;                               // use for eDP panel
1286fb4d8502Sjsg   uint8_t                  remotedisplayconfig;
1287fb4d8502Sjsg   uint8_t                  edptolvdsrxid;
1288fb4d8502Sjsg   uint8_t                  fixdpvoltageswing;                         // usCaps[1]=1, this indicate DP_LANE_SET value
1289fb4d8502Sjsg   uint8_t                  reserved[3];                               // for potential expansion
1290fb4d8502Sjsg };
1291fb4d8502Sjsg 
1292fb4d8502Sjsg /*
1293fb4d8502Sjsg   ***************************************************************************
1294fb4d8502Sjsg     Data Table integratedsysteminfo  structure
1295fb4d8502Sjsg   ***************************************************************************
1296fb4d8502Sjsg */
1297fb4d8502Sjsg 
1298fb4d8502Sjsg struct atom_camera_dphy_timing_param
1299fb4d8502Sjsg {
1300fb4d8502Sjsg   uint8_t  profile_id;       // SENSOR_PROFILES
1301fb4d8502Sjsg   uint32_t param;
1302fb4d8502Sjsg };
1303fb4d8502Sjsg 
1304fb4d8502Sjsg struct atom_camera_dphy_elec_param
1305fb4d8502Sjsg {
1306fb4d8502Sjsg   uint16_t param[3];
1307fb4d8502Sjsg };
1308fb4d8502Sjsg 
1309fb4d8502Sjsg struct atom_camera_module_info
1310fb4d8502Sjsg {
1311fb4d8502Sjsg   uint8_t module_id;                    // 0: Rear, 1: Front right of user, 2: Front left of user
1312fb4d8502Sjsg   uint8_t module_name[8];
1313fb4d8502Sjsg   struct atom_camera_dphy_timing_param timingparam[6]; // Exact number is under estimation and confirmation from sensor vendor
1314fb4d8502Sjsg };
1315fb4d8502Sjsg 
1316fb4d8502Sjsg struct atom_camera_flashlight_info
1317fb4d8502Sjsg {
1318fb4d8502Sjsg   uint8_t flashlight_id;                // 0: Rear, 1: Front
1319fb4d8502Sjsg   uint8_t name[8];
1320fb4d8502Sjsg };
1321fb4d8502Sjsg 
1322fb4d8502Sjsg struct atom_camera_data
1323fb4d8502Sjsg {
1324fb4d8502Sjsg   uint32_t versionCode;
1325fb4d8502Sjsg   struct atom_camera_module_info cameraInfo[3];      // Assuming 3 camera sensors max
1326fb4d8502Sjsg   struct atom_camera_flashlight_info flashInfo;      // Assuming 1 flashlight max
1327fb4d8502Sjsg   struct atom_camera_dphy_elec_param dphy_param;
1328fb4d8502Sjsg   uint32_t crc_val;         // CRC
1329fb4d8502Sjsg };
1330fb4d8502Sjsg 
1331fb4d8502Sjsg 
1332fb4d8502Sjsg struct atom_14nm_dpphy_dvihdmi_tuningset
1333fb4d8502Sjsg {
1334fb4d8502Sjsg   uint32_t max_symclk_in10khz;
1335fb4d8502Sjsg   uint8_t encoder_mode;            //atom_encode_mode_def, =2: DVI, =3: HDMI mode
1336fb4d8502Sjsg   uint8_t phy_sel;                 //bit vector of phy, bit0= phya, bit1=phyb, ....bit5 = phyf
1337fb4d8502Sjsg   uint16_t margindeemph;           //COMMON_MAR_DEEMPH_NOM[7:0]tx_margin_nom [15:8]deemph_gen1_nom
1338fb4d8502Sjsg   uint8_t deemph_6db_4;            //COMMON_SELDEEMPH60[31:24]deemph_6db_4
1339fb4d8502Sjsg   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
1340fb4d8502Sjsg   uint8_t tx_driver_fifty_ohms;    //COMMON_ZCALCODE_CTRL[21].tx_driver_fifty_ohms
1341fb4d8502Sjsg   uint8_t deemph_sel;              //MARGIN_DEEMPH_LANE0.DEEMPH_SEL
1342fb4d8502Sjsg };
1343fb4d8502Sjsg 
1344fb4d8502Sjsg struct atom_14nm_dpphy_dp_setting{
1345fb4d8502Sjsg   uint8_t dp_vs_pemph_level;       //enum of atom_dp_vs_preemph_def
1346fb4d8502Sjsg   uint16_t margindeemph;           //COMMON_MAR_DEEMPH_NOM[7:0]tx_margin_nom [15:8]deemph_gen1_nom
1347fb4d8502Sjsg   uint8_t deemph_6db_4;            //COMMON_SELDEEMPH60[31:24]deemph_6db_4
1348fb4d8502Sjsg   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
1349fb4d8502Sjsg };
1350fb4d8502Sjsg 
1351fb4d8502Sjsg struct atom_14nm_dpphy_dp_tuningset{
1352fb4d8502Sjsg   uint8_t phy_sel;                 // bit vector of phy, bit0= phya, bit1=phyb, ....bit5 = phyf
1353fb4d8502Sjsg   uint8_t version;
1354fb4d8502Sjsg   uint16_t table_size;             // size of atom_14nm_dpphy_dp_tuningset
1355fb4d8502Sjsg   uint16_t reserved;
1356fb4d8502Sjsg   struct atom_14nm_dpphy_dp_setting dptuning[10];
1357fb4d8502Sjsg };
1358fb4d8502Sjsg 
1359fb4d8502Sjsg struct atom_14nm_dig_transmitter_info_header_v4_0{
1360fb4d8502Sjsg   struct  atom_common_table_header  table_header;
1361fb4d8502Sjsg   uint16_t pcie_phy_tmds_hdmi_macro_settings_offset;     // offset of PCIEPhyTMDSHDMIMacroSettingsTbl
1362fb4d8502Sjsg   uint16_t uniphy_vs_emph_lookup_table_offset;           // offset of UniphyVSEmphLookUpTbl
1363fb4d8502Sjsg   uint16_t uniphy_xbar_settings_table_offset;            // offset of UniphyXbarSettingsTbl
1364fb4d8502Sjsg };
1365fb4d8502Sjsg 
1366fb4d8502Sjsg struct atom_14nm_combphy_tmds_vs_set
1367fb4d8502Sjsg {
1368fb4d8502Sjsg   uint8_t sym_clk;
1369fb4d8502Sjsg   uint8_t dig_mode;
1370fb4d8502Sjsg   uint8_t phy_sel;
1371fb4d8502Sjsg   uint16_t common_mar_deemph_nom__margin_deemph_val;
1372fb4d8502Sjsg   uint8_t common_seldeemph60__deemph_6db_4_val;
1373fb4d8502Sjsg   uint8_t cmd_bus_global_for_tx_lane0__boostadj_val ;
1374fb4d8502Sjsg   uint8_t common_zcalcode_ctrl__tx_driver_fifty_ohms_val;
1375fb4d8502Sjsg   uint8_t margin_deemph_lane0__deemph_sel_val;
1376fb4d8502Sjsg };
1377fb4d8502Sjsg 
1378ad8b1aafSjsg struct atom_DCN_dpphy_dvihdmi_tuningset
1379ad8b1aafSjsg {
1380ad8b1aafSjsg   uint32_t max_symclk_in10khz;
1381ad8b1aafSjsg   uint8_t  encoder_mode;           //atom_encode_mode_def, =2: DVI, =3: HDMI mode
1382ad8b1aafSjsg   uint8_t  phy_sel;                //bit vector of phy, bit0= phya, bit1=phyb, ....bit5 = phyf
1383ad8b1aafSjsg   uint8_t  tx_eq_main;             // map to RDPCSTX_PHY_FUSE0/1/2/3[5:0](EQ_MAIN)
1384ad8b1aafSjsg   uint8_t  tx_eq_pre;              // map to RDPCSTX_PHY_FUSE0/1/2/3[11:6](EQ_PRE)
1385ad8b1aafSjsg   uint8_t  tx_eq_post;             // map to RDPCSTX_PHY_FUSE0/1/2/3[17:12](EQ_POST)
1386ad8b1aafSjsg   uint8_t  reserved1;
1387ad8b1aafSjsg   uint8_t  tx_vboost_lvl;          // tx_vboost_lvl, map to RDPCSTX_PHY_CNTL0.RDPCS_PHY_TX_VBOOST_LVL
1388ad8b1aafSjsg   uint8_t  reserved2;
1389ad8b1aafSjsg };
1390ad8b1aafSjsg 
1391ad8b1aafSjsg struct atom_DCN_dpphy_dp_setting{
1392ad8b1aafSjsg   uint8_t dp_vs_pemph_level;       //enum of atom_dp_vs_preemph_def
1393ad8b1aafSjsg   uint8_t tx_eq_main;             // map to RDPCSTX_PHY_FUSE0/1/2/3[5:0](EQ_MAIN)
1394ad8b1aafSjsg   uint8_t tx_eq_pre;              // map to RDPCSTX_PHY_FUSE0/1/2/3[11:6](EQ_PRE)
1395ad8b1aafSjsg   uint8_t tx_eq_post;             // map to RDPCSTX_PHY_FUSE0/1/2/3[17:12](EQ_POST)
1396ad8b1aafSjsg   uint8_t tx_vboost_lvl;          // tx_vboost_lvl, map to RDPCSTX_PHY_CNTL0.RDPCS_PHY_TX_VBOOST_LVL
1397ad8b1aafSjsg };
1398ad8b1aafSjsg 
1399ad8b1aafSjsg struct atom_DCN_dpphy_dp_tuningset{
1400ad8b1aafSjsg   uint8_t phy_sel;                 // bit vector of phy, bit0= phya, bit1=phyb, ....bit5 = phyf
1401ad8b1aafSjsg   uint8_t version;
1402ad8b1aafSjsg   uint16_t table_size;             // size of atom_14nm_dpphy_dp_setting
1403ad8b1aafSjsg   uint16_t reserved;
1404ad8b1aafSjsg   struct atom_DCN_dpphy_dp_setting dptunings[10];
1405ad8b1aafSjsg };
1406ad8b1aafSjsg 
1407fb4d8502Sjsg struct atom_i2c_reg_info {
1408fb4d8502Sjsg   uint8_t ucI2cRegIndex;
1409fb4d8502Sjsg   uint8_t ucI2cRegVal;
1410fb4d8502Sjsg };
1411fb4d8502Sjsg 
1412fb4d8502Sjsg struct atom_hdmi_retimer_redriver_set {
1413fb4d8502Sjsg   uint8_t HdmiSlvAddr;
1414fb4d8502Sjsg   uint8_t HdmiRegNum;
1415fb4d8502Sjsg   uint8_t Hdmi6GRegNum;
1416fb4d8502Sjsg   struct atom_i2c_reg_info HdmiRegSetting[9];        //For non 6G Hz use
1417fb4d8502Sjsg   struct atom_i2c_reg_info Hdmi6GhzRegSetting[3];    //For 6G Hz use.
1418fb4d8502Sjsg };
1419fb4d8502Sjsg 
1420fb4d8502Sjsg struct atom_integrated_system_info_v1_11
1421fb4d8502Sjsg {
1422fb4d8502Sjsg   struct  atom_common_table_header  table_header;
1423fb4d8502Sjsg   uint32_t  vbios_misc;                       //enum of atom_system_vbiosmisc_def
1424fb4d8502Sjsg   uint32_t  gpucapinfo;                       //enum of atom_system_gpucapinf_def
1425fb4d8502Sjsg   uint32_t  system_config;
1426fb4d8502Sjsg   uint32_t  cpucapinfo;
1427fb4d8502Sjsg   uint16_t  gpuclk_ss_percentage;             //unit of 0.001%,   1000 mean 1%
1428fb4d8502Sjsg   uint16_t  gpuclk_ss_type;
1429fb4d8502Sjsg   uint16_t  lvds_ss_percentage;               //unit of 0.001%,   1000 mean 1%
1430fb4d8502Sjsg   uint16_t  lvds_ss_rate_10hz;
1431fb4d8502Sjsg   uint16_t  hdmi_ss_percentage;               //unit of 0.001%,   1000 mean 1%
1432fb4d8502Sjsg   uint16_t  hdmi_ss_rate_10hz;
1433fb4d8502Sjsg   uint16_t  dvi_ss_percentage;                //unit of 0.001%,   1000 mean 1%
1434fb4d8502Sjsg   uint16_t  dvi_ss_rate_10hz;
1435fb4d8502Sjsg   uint16_t  dpphy_override;                   // bit vector, enum of atom_sysinfo_dpphy_override_def
1436fb4d8502Sjsg   uint16_t  lvds_misc;                        // enum of atom_sys_info_lvds_misc_def
1437fb4d8502Sjsg   uint16_t  backlight_pwm_hz;                 // pwm frequency in hz
1438fb4d8502Sjsg   uint8_t   memorytype;                       // enum of atom_dmi_t17_mem_type_def, APU memory type indication.
1439fb4d8502Sjsg   uint8_t   umachannelnumber;                 // number of memory channels
1440fb4d8502Sjsg   uint8_t   pwr_on_digon_to_de;               /* all pwr sequence numbers below are in uint of 4ms */
1441fb4d8502Sjsg   uint8_t   pwr_on_de_to_vary_bl;
1442fb4d8502Sjsg   uint8_t   pwr_down_vary_bloff_to_de;
1443fb4d8502Sjsg   uint8_t   pwr_down_de_to_digoff;
1444fb4d8502Sjsg   uint8_t   pwr_off_delay;
1445fb4d8502Sjsg   uint8_t   pwr_on_vary_bl_to_blon;
1446fb4d8502Sjsg   uint8_t   pwr_down_bloff_to_vary_bloff;
1447fb4d8502Sjsg   uint8_t   min_allowed_bl_level;
1448fb4d8502Sjsg   uint8_t   htc_hyst_limit;
1449fb4d8502Sjsg   uint8_t   htc_tmp_limit;
1450fb4d8502Sjsg   uint8_t   reserved1;
1451fb4d8502Sjsg   uint8_t   reserved2;
1452fb4d8502Sjsg   struct atom_external_display_connection_info extdispconninfo;
1453fb4d8502Sjsg   struct atom_14nm_dpphy_dvihdmi_tuningset dvi_tuningset;
1454fb4d8502Sjsg   struct atom_14nm_dpphy_dvihdmi_tuningset hdmi_tuningset;
1455fb4d8502Sjsg   struct atom_14nm_dpphy_dvihdmi_tuningset hdmi6g_tuningset;
1456fb4d8502Sjsg   struct atom_14nm_dpphy_dp_tuningset dp_tuningset;        // rbr 1.62G dp tuning set
1457fb4d8502Sjsg   struct atom_14nm_dpphy_dp_tuningset dp_hbr3_tuningset;   // HBR3 dp tuning set
1458fb4d8502Sjsg   struct atom_camera_data  camera_info;
1459fb4d8502Sjsg   struct atom_hdmi_retimer_redriver_set dp0_retimer_set;   //for DP0
1460fb4d8502Sjsg   struct atom_hdmi_retimer_redriver_set dp1_retimer_set;   //for DP1
1461fb4d8502Sjsg   struct atom_hdmi_retimer_redriver_set dp2_retimer_set;   //for DP2
1462fb4d8502Sjsg   struct atom_hdmi_retimer_redriver_set dp3_retimer_set;   //for DP3
1463fb4d8502Sjsg   struct atom_14nm_dpphy_dp_tuningset dp_hbr_tuningset;    //hbr 2.7G dp tuning set
1464fb4d8502Sjsg   struct atom_14nm_dpphy_dp_tuningset dp_hbr2_tuningset;   //hbr2 5.4G dp turnig set
1465fb4d8502Sjsg   struct atom_14nm_dpphy_dp_tuningset edp_tuningset;       //edp tuning set
1466fb4d8502Sjsg   uint32_t  reserved[66];
1467fb4d8502Sjsg };
1468fb4d8502Sjsg 
1469ad8b1aafSjsg struct atom_integrated_system_info_v1_12
1470ad8b1aafSjsg {
1471ad8b1aafSjsg   struct  atom_common_table_header  table_header;
1472ad8b1aafSjsg   uint32_t  vbios_misc;                       //enum of atom_system_vbiosmisc_def
1473ad8b1aafSjsg   uint32_t  gpucapinfo;                       //enum of atom_system_gpucapinf_def
1474ad8b1aafSjsg   uint32_t  system_config;
1475ad8b1aafSjsg   uint32_t  cpucapinfo;
1476ad8b1aafSjsg   uint16_t  gpuclk_ss_percentage;             //unit of 0.001%,   1000 mean 1%
1477ad8b1aafSjsg   uint16_t  gpuclk_ss_type;
1478ad8b1aafSjsg   uint16_t  lvds_ss_percentage;               //unit of 0.001%,   1000 mean 1%
1479ad8b1aafSjsg   uint16_t  lvds_ss_rate_10hz;
1480ad8b1aafSjsg   uint16_t  hdmi_ss_percentage;               //unit of 0.001%,   1000 mean 1%
1481ad8b1aafSjsg   uint16_t  hdmi_ss_rate_10hz;
1482ad8b1aafSjsg   uint16_t  dvi_ss_percentage;                //unit of 0.001%,   1000 mean 1%
1483ad8b1aafSjsg   uint16_t  dvi_ss_rate_10hz;
1484ad8b1aafSjsg   uint16_t  dpphy_override;                   // bit vector, enum of atom_sysinfo_dpphy_override_def
1485ad8b1aafSjsg   uint16_t  lvds_misc;                        // enum of atom_sys_info_lvds_misc_def
1486ad8b1aafSjsg   uint16_t  backlight_pwm_hz;                 // pwm frequency in hz
1487ad8b1aafSjsg   uint8_t   memorytype;                       // enum of atom_dmi_t17_mem_type_def, APU memory type indication.
1488ad8b1aafSjsg   uint8_t   umachannelnumber;                 // number of memory channels
1489ad8b1aafSjsg   uint8_t   pwr_on_digon_to_de;               // all pwr sequence numbers below are in uint of 4ms //
1490ad8b1aafSjsg   uint8_t   pwr_on_de_to_vary_bl;
1491ad8b1aafSjsg   uint8_t   pwr_down_vary_bloff_to_de;
1492ad8b1aafSjsg   uint8_t   pwr_down_de_to_digoff;
1493ad8b1aafSjsg   uint8_t   pwr_off_delay;
1494ad8b1aafSjsg   uint8_t   pwr_on_vary_bl_to_blon;
1495ad8b1aafSjsg   uint8_t   pwr_down_bloff_to_vary_bloff;
1496ad8b1aafSjsg   uint8_t   min_allowed_bl_level;
1497ad8b1aafSjsg   uint8_t   htc_hyst_limit;
1498ad8b1aafSjsg   uint8_t   htc_tmp_limit;
1499ad8b1aafSjsg   uint8_t   reserved1;
1500ad8b1aafSjsg   uint8_t   reserved2;
1501ad8b1aafSjsg   struct atom_external_display_connection_info extdispconninfo;
1502ad8b1aafSjsg   struct atom_DCN_dpphy_dvihdmi_tuningset  TMDS_tuningset;
1503ad8b1aafSjsg   struct atom_DCN_dpphy_dvihdmi_tuningset  hdmiCLK5_tuningset;
1504ad8b1aafSjsg   struct atom_DCN_dpphy_dvihdmi_tuningset  hdmiCLK8_tuningset;
1505ad8b1aafSjsg   struct atom_DCN_dpphy_dp_tuningset rbr_tuningset;        // rbr 1.62G dp tuning set
1506ad8b1aafSjsg   struct atom_DCN_dpphy_dp_tuningset hbr3_tuningset;   // HBR3 dp tuning set
1507ad8b1aafSjsg   struct atom_camera_data  camera_info;
1508ad8b1aafSjsg   struct atom_hdmi_retimer_redriver_set dp0_retimer_set;   //for DP0
1509ad8b1aafSjsg   struct atom_hdmi_retimer_redriver_set dp1_retimer_set;   //for DP1
1510ad8b1aafSjsg   struct atom_hdmi_retimer_redriver_set dp2_retimer_set;   //for DP2
1511ad8b1aafSjsg   struct atom_hdmi_retimer_redriver_set dp3_retimer_set;   //for DP3
1512ad8b1aafSjsg   struct atom_DCN_dpphy_dp_tuningset hbr_tuningset;    //hbr 2.7G dp tuning set
1513ad8b1aafSjsg   struct atom_DCN_dpphy_dp_tuningset hbr2_tuningset;   //hbr2 5.4G dp turnig set
1514ad8b1aafSjsg   struct atom_DCN_dpphy_dp_tuningset edp_tunings;       //edp tuning set
1515ad8b1aafSjsg   struct atom_DCN_dpphy_dvihdmi_tuningset  hdmiCLK6_tuningset;
1516ad8b1aafSjsg   uint32_t  reserved[63];
1517ad8b1aafSjsg };
1518fb4d8502Sjsg 
15195ca02815Sjsg struct edp_info_table
15205ca02815Sjsg {
15215ca02815Sjsg         uint16_t edp_backlight_pwm_hz;
15225ca02815Sjsg         uint16_t edp_ss_percentage;
15235ca02815Sjsg         uint16_t edp_ss_rate_10hz;
15245ca02815Sjsg         uint16_t reserved1;
15255ca02815Sjsg         uint32_t reserved2;
15265ca02815Sjsg         uint8_t  edp_pwr_on_off_delay;
15275ca02815Sjsg         uint8_t  edp_pwr_on_vary_bl_to_blon;
15285ca02815Sjsg         uint8_t  edp_pwr_down_bloff_to_vary_bloff;
15295ca02815Sjsg         uint8_t  edp_panel_bpc;
15305ca02815Sjsg         uint8_t  edp_bootup_bl_level;
15315ca02815Sjsg         uint8_t  reserved3[3];
15325ca02815Sjsg         uint32_t reserved4[3];
15335ca02815Sjsg };
15345ca02815Sjsg 
15355ca02815Sjsg struct atom_integrated_system_info_v2_1
15365ca02815Sjsg {
15375ca02815Sjsg         struct  atom_common_table_header  table_header;
15385ca02815Sjsg         uint32_t  vbios_misc;                       //enum of atom_system_vbiosmisc_def
15395ca02815Sjsg         uint32_t  gpucapinfo;                       //enum of atom_system_gpucapinf_def
15405ca02815Sjsg         uint32_t  system_config;
15415ca02815Sjsg         uint32_t  cpucapinfo;
15425ca02815Sjsg         uint16_t  gpuclk_ss_percentage;             //unit of 0.001%,   1000 mean 1%
15435ca02815Sjsg         uint16_t  gpuclk_ss_type;
15445ca02815Sjsg         uint16_t  dpphy_override;                   // bit vector, enum of atom_sysinfo_dpphy_override_def
15455ca02815Sjsg         uint8_t   memorytype;                       // enum of atom_dmi_t17_mem_type_def, APU memory type indication.
15465ca02815Sjsg         uint8_t   umachannelnumber;                 // number of memory channels
15475ca02815Sjsg         uint8_t   htc_hyst_limit;
15485ca02815Sjsg         uint8_t   htc_tmp_limit;
15495ca02815Sjsg         uint8_t   reserved1;
15505ca02815Sjsg         uint8_t   reserved2;
15515ca02815Sjsg         struct edp_info_table edp1_info;
15525ca02815Sjsg         struct edp_info_table edp2_info;
15535ca02815Sjsg         uint32_t  reserved3[8];
15545ca02815Sjsg         struct atom_external_display_connection_info extdispconninfo;
15555ca02815Sjsg         struct atom_DCN_dpphy_dvihdmi_tuningset  TMDS_tuningset;
15565ca02815Sjsg         struct atom_DCN_dpphy_dvihdmi_tuningset  hdmiCLK5_tuningset; //add clk6
15575ca02815Sjsg         struct atom_DCN_dpphy_dvihdmi_tuningset  hdmiCLK6_tuningset;
15585ca02815Sjsg         struct atom_DCN_dpphy_dvihdmi_tuningset  hdmiCLK8_tuningset;
15595ca02815Sjsg         uint32_t reserved4[6];//reserve 2*sizeof(atom_DCN_dpphy_dvihdmi_tuningset)
15605ca02815Sjsg         struct atom_DCN_dpphy_dp_tuningset rbr_tuningset;        // rbr 1.62G dp tuning set
15615ca02815Sjsg         struct atom_DCN_dpphy_dp_tuningset hbr_tuningset;    //hbr 2.7G dp tuning set
15625ca02815Sjsg         struct atom_DCN_dpphy_dp_tuningset hbr2_tuningset;   //hbr2 5.4G dp turnig set
15635ca02815Sjsg         struct atom_DCN_dpphy_dp_tuningset hbr3_tuningset;   // HBR3 dp tuning set
15645ca02815Sjsg         struct atom_DCN_dpphy_dp_tuningset edp_tunings;       //edp tuning set
15655ca02815Sjsg         uint32_t reserved5[28];//reserve 2*sizeof(atom_DCN_dpphy_dp_tuningset)
15665ca02815Sjsg         struct atom_hdmi_retimer_redriver_set dp0_retimer_set;   //for DP0
15675ca02815Sjsg         struct atom_hdmi_retimer_redriver_set dp1_retimer_set;   //for DP1
15685ca02815Sjsg         struct atom_hdmi_retimer_redriver_set dp2_retimer_set;   //for DP2
15695ca02815Sjsg         struct atom_hdmi_retimer_redriver_set dp3_retimer_set;   //for DP3
15705ca02815Sjsg         uint32_t reserved6[30];// reserve size of(atom_camera_data) for camera_info
15715ca02815Sjsg         uint32_t reserved7[32];
15725ca02815Sjsg 
15735ca02815Sjsg };
15745ca02815Sjsg 
15755ca02815Sjsg struct atom_n6_display_phy_tuning_set {
15765ca02815Sjsg 	uint8_t display_signal_type;
15775ca02815Sjsg 	uint8_t phy_sel;
15785ca02815Sjsg 	uint8_t preset_level;
15795ca02815Sjsg 	uint8_t reserved1;
15805ca02815Sjsg 	uint32_t reserved2;
15815ca02815Sjsg 	uint32_t speed_upto;
15825ca02815Sjsg 	uint8_t tx_vboost_level;
15835ca02815Sjsg 	uint8_t tx_vreg_v2i;
15845ca02815Sjsg 	uint8_t tx_vregdrv_byp;
15855ca02815Sjsg 	uint8_t tx_term_cntl;
15865ca02815Sjsg 	uint8_t tx_peak_level;
15875ca02815Sjsg 	uint8_t tx_slew_en;
15885ca02815Sjsg 	uint8_t tx_eq_pre;
15895ca02815Sjsg 	uint8_t tx_eq_main;
15905ca02815Sjsg 	uint8_t tx_eq_post;
15915ca02815Sjsg 	uint8_t tx_en_inv_pre;
15925ca02815Sjsg 	uint8_t tx_en_inv_post;
15935ca02815Sjsg 	uint8_t reserved3;
15945ca02815Sjsg 	uint32_t reserved4;
15955ca02815Sjsg 	uint32_t reserved5;
15965ca02815Sjsg 	uint32_t reserved6;
15975ca02815Sjsg };
15985ca02815Sjsg 
15995ca02815Sjsg struct atom_display_phy_tuning_info {
16005ca02815Sjsg 	struct atom_common_table_header table_header;
16015ca02815Sjsg 	struct atom_n6_display_phy_tuning_set disp_phy_tuning[1];
16025ca02815Sjsg };
16035ca02815Sjsg 
16045ca02815Sjsg struct atom_integrated_system_info_v2_2
16055ca02815Sjsg {
16065ca02815Sjsg 	struct  atom_common_table_header  table_header;
16075ca02815Sjsg 	uint32_t  vbios_misc;                       //enum of atom_system_vbiosmisc_def
16085ca02815Sjsg 	uint32_t  gpucapinfo;                       //enum of atom_system_gpucapinf_def
16095ca02815Sjsg 	uint32_t  system_config;
16105ca02815Sjsg 	uint32_t  cpucapinfo;
16115ca02815Sjsg 	uint16_t  gpuclk_ss_percentage;             //unit of 0.001%,   1000 mean 1%
16125ca02815Sjsg 	uint16_t  gpuclk_ss_type;
16135ca02815Sjsg 	uint16_t  dpphy_override;                   // bit vector, enum of atom_sysinfo_dpphy_override_def
16145ca02815Sjsg 	uint8_t   memorytype;                       // enum of atom_dmi_t17_mem_type_def, APU memory type indication.
16155ca02815Sjsg 	uint8_t   umachannelnumber;                 // number of memory channels
16165ca02815Sjsg 	uint8_t   htc_hyst_limit;
16175ca02815Sjsg 	uint8_t   htc_tmp_limit;
16185ca02815Sjsg 	uint8_t   reserved1;
16195ca02815Sjsg 	uint8_t   reserved2;
16205ca02815Sjsg 	struct edp_info_table edp1_info;
16215ca02815Sjsg 	struct edp_info_table edp2_info;
16225ca02815Sjsg 	uint32_t  reserved3[8];
16235ca02815Sjsg 	struct atom_external_display_connection_info extdispconninfo;
16245ca02815Sjsg 
16255ca02815Sjsg 	uint32_t  reserved4[189];
16265ca02815Sjsg };
16275ca02815Sjsg 
1628c5a8dd44Sjsg struct uma_carveout_option {
1629c5a8dd44Sjsg   char       optionName[29];        //max length of string is 28chars + '\0'. Current design is for "minimum", "Medium", "High". This makes entire struct size 64bits
1630c5a8dd44Sjsg   uint8_t    memoryCarvedGb;        //memory carved out with setting
1631c5a8dd44Sjsg   uint8_t    memoryRemainingGb;     //memory remaining on system
1632c5a8dd44Sjsg   union {
1633c5a8dd44Sjsg     struct _flags {
1634c5a8dd44Sjsg       uint8_t Auto     : 1;
1635c5a8dd44Sjsg       uint8_t Custom   : 1;
1636c5a8dd44Sjsg       uint8_t Reserved : 6;
1637c5a8dd44Sjsg     } flags;
1638c5a8dd44Sjsg     uint8_t all8;
1639c5a8dd44Sjsg   } uma_carveout_option_flags;
1640c5a8dd44Sjsg };
1641c5a8dd44Sjsg 
1642c5a8dd44Sjsg struct atom_integrated_system_info_v2_3 {
1643c5a8dd44Sjsg   struct  atom_common_table_header table_header;
1644c5a8dd44Sjsg   uint32_t  vbios_misc; // enum of atom_system_vbiosmisc_def
1645c5a8dd44Sjsg   uint32_t  gpucapinfo; // enum of atom_system_gpucapinf_def
1646c5a8dd44Sjsg   uint32_t  system_config;
1647c5a8dd44Sjsg   uint32_t  cpucapinfo;
1648c5a8dd44Sjsg   uint16_t  gpuclk_ss_percentage; // unit of 0.001%,   1000 mean 1%
1649c5a8dd44Sjsg   uint16_t  gpuclk_ss_type;
1650c5a8dd44Sjsg   uint16_t  dpphy_override;  // bit vector, enum of atom_sysinfo_dpphy_override_def
1651c5a8dd44Sjsg   uint8_t memorytype;       // enum of atom_dmi_t17_mem_type_def, APU memory type indication.
1652c5a8dd44Sjsg   uint8_t umachannelnumber; // number of memory channels
1653c5a8dd44Sjsg   uint8_t htc_hyst_limit;
1654c5a8dd44Sjsg   uint8_t htc_tmp_limit;
1655c5a8dd44Sjsg   uint8_t reserved1; // dp_ss_control
1656c5a8dd44Sjsg   uint8_t gpu_package_id;
1657c5a8dd44Sjsg   struct  edp_info_table  edp1_info;
1658c5a8dd44Sjsg   struct  edp_info_table  edp2_info;
1659c5a8dd44Sjsg   uint32_t  reserved2[8];
1660c5a8dd44Sjsg   struct  atom_external_display_connection_info extdispconninfo;
1661c5a8dd44Sjsg   uint8_t UMACarveoutVersion;
1662c5a8dd44Sjsg   uint8_t UMACarveoutIndexMax;
1663c5a8dd44Sjsg   uint8_t UMACarveoutTypeDefault;
1664c5a8dd44Sjsg   uint8_t UMACarveoutIndexDefault;
1665c5a8dd44Sjsg   uint8_t UMACarveoutType;           //Auto or Custom
1666c5a8dd44Sjsg   uint8_t UMACarveoutIndex;
1667c5a8dd44Sjsg   struct  uma_carveout_option UMASizeControlOption[20];
1668c5a8dd44Sjsg   uint8_t reserved3[110];
1669c5a8dd44Sjsg };
1670c5a8dd44Sjsg 
1671fb4d8502Sjsg // system_config
1672fb4d8502Sjsg enum atom_system_vbiosmisc_def{
1673fb4d8502Sjsg   INTEGRATED_SYSTEM_INFO__GET_EDID_CALLBACK_FUNC_SUPPORT = 0x01,
1674fb4d8502Sjsg };
1675fb4d8502Sjsg 
1676fb4d8502Sjsg 
1677fb4d8502Sjsg // gpucapinfo
1678fb4d8502Sjsg enum atom_system_gpucapinf_def{
1679fb4d8502Sjsg   SYS_INFO_GPUCAPS__ENABEL_DFS_BYPASS  = 0x10,
1680fb4d8502Sjsg };
1681fb4d8502Sjsg 
1682fb4d8502Sjsg //dpphy_override
1683fb4d8502Sjsg enum atom_sysinfo_dpphy_override_def{
1684fb4d8502Sjsg   ATOM_ENABLE_DVI_TUNINGSET   = 0x01,
1685fb4d8502Sjsg   ATOM_ENABLE_HDMI_TUNINGSET  = 0x02,
1686fb4d8502Sjsg   ATOM_ENABLE_HDMI6G_TUNINGSET  = 0x04,
1687fb4d8502Sjsg   ATOM_ENABLE_DP_TUNINGSET  = 0x08,
1688fb4d8502Sjsg   ATOM_ENABLE_DP_HBR3_TUNINGSET  = 0x10,
1689fb4d8502Sjsg };
1690fb4d8502Sjsg 
1691fb4d8502Sjsg //lvds_misc
1692fb4d8502Sjsg enum atom_sys_info_lvds_misc_def
1693fb4d8502Sjsg {
1694fb4d8502Sjsg   SYS_INFO_LVDS_MISC_888_FPDI_MODE                 =0x01,
1695fb4d8502Sjsg   SYS_INFO_LVDS_MISC_888_BPC_MODE                  =0x04,
1696fb4d8502Sjsg   SYS_INFO_LVDS_MISC_OVERRIDE_EN                   =0x08,
1697fb4d8502Sjsg };
1698fb4d8502Sjsg 
1699fb4d8502Sjsg 
1700fb4d8502Sjsg //memorytype  DMI Type 17 offset 12h - Memory Type
1701fb4d8502Sjsg enum atom_dmi_t17_mem_type_def{
1702fb4d8502Sjsg   OtherMemType = 0x01,                                  ///< Assign 01 to Other
1703fb4d8502Sjsg   UnknownMemType,                                       ///< Assign 02 to Unknown
1704fb4d8502Sjsg   DramMemType,                                          ///< Assign 03 to DRAM
1705fb4d8502Sjsg   EdramMemType,                                         ///< Assign 04 to EDRAM
1706fb4d8502Sjsg   VramMemType,                                          ///< Assign 05 to VRAM
1707fb4d8502Sjsg   SramMemType,                                          ///< Assign 06 to SRAM
1708fb4d8502Sjsg   RamMemType,                                           ///< Assign 07 to RAM
1709fb4d8502Sjsg   RomMemType,                                           ///< Assign 08 to ROM
1710fb4d8502Sjsg   FlashMemType,                                         ///< Assign 09 to Flash
1711fb4d8502Sjsg   EepromMemType,                                        ///< Assign 10 to EEPROM
1712fb4d8502Sjsg   FepromMemType,                                        ///< Assign 11 to FEPROM
1713fb4d8502Sjsg   EpromMemType,                                         ///< Assign 12 to EPROM
1714fb4d8502Sjsg   CdramMemType,                                         ///< Assign 13 to CDRAM
1715fb4d8502Sjsg   ThreeDramMemType,                                     ///< Assign 14 to 3DRAM
1716fb4d8502Sjsg   SdramMemType,                                         ///< Assign 15 to SDRAM
1717fb4d8502Sjsg   SgramMemType,                                         ///< Assign 16 to SGRAM
1718fb4d8502Sjsg   RdramMemType,                                         ///< Assign 17 to RDRAM
1719fb4d8502Sjsg   DdrMemType,                                           ///< Assign 18 to DDR
1720fb4d8502Sjsg   Ddr2MemType,                                          ///< Assign 19 to DDR2
1721fb4d8502Sjsg   Ddr2FbdimmMemType,                                    ///< Assign 20 to DDR2 FB-DIMM
1722fb4d8502Sjsg   Ddr3MemType = 0x18,                                   ///< Assign 24 to DDR3
1723fb4d8502Sjsg   Fbd2MemType,                                          ///< Assign 25 to FBD2
1724fb4d8502Sjsg   Ddr4MemType,                                          ///< Assign 26 to DDR4
1725fb4d8502Sjsg   LpDdrMemType,                                         ///< Assign 27 to LPDDR
1726fb4d8502Sjsg   LpDdr2MemType,                                        ///< Assign 28 to LPDDR2
1727fb4d8502Sjsg   LpDdr3MemType,                                        ///< Assign 29 to LPDDR3
1728fb4d8502Sjsg   LpDdr4MemType,                                        ///< Assign 30 to LPDDR4
17295ca02815Sjsg   GDdr6MemType,                                         ///< Assign 31 to GDDR6
17305ca02815Sjsg   HbmMemType,                                           ///< Assign 32 to HBM
17315ca02815Sjsg   Hbm2MemType,                                          ///< Assign 33 to HBM2
17325ca02815Sjsg   Ddr5MemType,                                          ///< Assign 34 to DDR5
17335ca02815Sjsg   LpDdr5MemType,                                        ///< Assign 35 to LPDDR5
1734fb4d8502Sjsg };
1735fb4d8502Sjsg 
1736fb4d8502Sjsg 
1737fb4d8502Sjsg // this Table is used starting from NL/AM, used by SBIOS and pass the IntegratedSystemInfoTable/PowerPlayInfoTable/SystemCameraInfoTable
1738fb4d8502Sjsg struct atom_fusion_system_info_v4
1739fb4d8502Sjsg {
1740fb4d8502Sjsg   struct atom_integrated_system_info_v1_11   sysinfo;           // refer to ATOM_INTEGRATED_SYSTEM_INFO_V1_8 definition
1741fb4d8502Sjsg   uint32_t   powerplayinfo[256];                                // Reserve 1024 bytes space for PowerPlayInfoTable
1742fb4d8502Sjsg };
1743fb4d8502Sjsg 
1744fb4d8502Sjsg 
1745fb4d8502Sjsg /*
1746fb4d8502Sjsg   ***************************************************************************
1747fb4d8502Sjsg     Data Table gfx_info  structure
1748fb4d8502Sjsg   ***************************************************************************
1749fb4d8502Sjsg */
1750fb4d8502Sjsg 
1751fb4d8502Sjsg struct  atom_gfx_info_v2_2
1752fb4d8502Sjsg {
1753fb4d8502Sjsg   struct  atom_common_table_header  table_header;
1754fb4d8502Sjsg   uint8_t gfxip_min_ver;
1755fb4d8502Sjsg   uint8_t gfxip_max_ver;
1756fb4d8502Sjsg   uint8_t max_shader_engines;
1757fb4d8502Sjsg   uint8_t max_tile_pipes;
1758fb4d8502Sjsg   uint8_t max_cu_per_sh;
1759fb4d8502Sjsg   uint8_t max_sh_per_se;
1760fb4d8502Sjsg   uint8_t max_backends_per_se;
1761fb4d8502Sjsg   uint8_t max_texture_channel_caches;
1762fb4d8502Sjsg   uint32_t regaddr_cp_dma_src_addr;
1763fb4d8502Sjsg   uint32_t regaddr_cp_dma_src_addr_hi;
1764fb4d8502Sjsg   uint32_t regaddr_cp_dma_dst_addr;
1765fb4d8502Sjsg   uint32_t regaddr_cp_dma_dst_addr_hi;
1766fb4d8502Sjsg   uint32_t regaddr_cp_dma_command;
1767fb4d8502Sjsg   uint32_t regaddr_cp_status;
1768fb4d8502Sjsg   uint32_t regaddr_rlc_gpu_clock_32;
1769fb4d8502Sjsg   uint32_t rlc_gpu_timer_refclk;
1770fb4d8502Sjsg };
1771fb4d8502Sjsg 
1772fb4d8502Sjsg struct  atom_gfx_info_v2_3 {
1773fb4d8502Sjsg   struct  atom_common_table_header  table_header;
1774fb4d8502Sjsg   uint8_t gfxip_min_ver;
1775fb4d8502Sjsg   uint8_t gfxip_max_ver;
1776fb4d8502Sjsg   uint8_t max_shader_engines;
1777fb4d8502Sjsg   uint8_t max_tile_pipes;
1778fb4d8502Sjsg   uint8_t max_cu_per_sh;
1779fb4d8502Sjsg   uint8_t max_sh_per_se;
1780fb4d8502Sjsg   uint8_t max_backends_per_se;
1781fb4d8502Sjsg   uint8_t max_texture_channel_caches;
1782fb4d8502Sjsg   uint32_t regaddr_cp_dma_src_addr;
1783fb4d8502Sjsg   uint32_t regaddr_cp_dma_src_addr_hi;
1784fb4d8502Sjsg   uint32_t regaddr_cp_dma_dst_addr;
1785fb4d8502Sjsg   uint32_t regaddr_cp_dma_dst_addr_hi;
1786fb4d8502Sjsg   uint32_t regaddr_cp_dma_command;
1787fb4d8502Sjsg   uint32_t regaddr_cp_status;
1788fb4d8502Sjsg   uint32_t regaddr_rlc_gpu_clock_32;
1789fb4d8502Sjsg   uint32_t rlc_gpu_timer_refclk;
1790fb4d8502Sjsg   uint8_t active_cu_per_sh;
1791fb4d8502Sjsg   uint8_t active_rb_per_se;
1792fb4d8502Sjsg   uint16_t gcgoldenoffset;
1793fb4d8502Sjsg   uint32_t rm21_sram_vmin_value;
1794fb4d8502Sjsg };
1795fb4d8502Sjsg 
1796c349dbc7Sjsg struct  atom_gfx_info_v2_4
1797c349dbc7Sjsg {
1798fb4d8502Sjsg   struct  atom_common_table_header  table_header;
1799fb4d8502Sjsg   uint8_t gfxip_min_ver;
1800fb4d8502Sjsg   uint8_t gfxip_max_ver;
1801c349dbc7Sjsg   uint8_t max_shader_engines;
1802c349dbc7Sjsg   uint8_t reserved;
1803c349dbc7Sjsg   uint8_t max_cu_per_sh;
1804c349dbc7Sjsg   uint8_t max_sh_per_se;
1805c349dbc7Sjsg   uint8_t max_backends_per_se;
1806c349dbc7Sjsg   uint8_t max_texture_channel_caches;
1807fb4d8502Sjsg   uint32_t regaddr_cp_dma_src_addr;
1808fb4d8502Sjsg   uint32_t regaddr_cp_dma_src_addr_hi;
1809fb4d8502Sjsg   uint32_t regaddr_cp_dma_dst_addr;
1810fb4d8502Sjsg   uint32_t regaddr_cp_dma_dst_addr_hi;
1811fb4d8502Sjsg   uint32_t regaddr_cp_dma_command;
1812fb4d8502Sjsg   uint32_t regaddr_cp_status;
1813fb4d8502Sjsg   uint32_t regaddr_rlc_gpu_clock_32;
1814fb4d8502Sjsg   uint32_t rlc_gpu_timer_refclk;
1815fb4d8502Sjsg   uint8_t active_cu_per_sh;
1816fb4d8502Sjsg   uint8_t active_rb_per_se;
1817fb4d8502Sjsg   uint16_t gcgoldenoffset;
1818fb4d8502Sjsg   uint16_t gc_num_gprs;
1819fb4d8502Sjsg   uint16_t gc_gsprim_buff_depth;
1820fb4d8502Sjsg   uint16_t gc_parameter_cache_depth;
1821fb4d8502Sjsg   uint16_t gc_wave_size;
1822fb4d8502Sjsg   uint16_t gc_max_waves_per_simd;
1823fb4d8502Sjsg   uint16_t gc_lds_size;
1824fb4d8502Sjsg   uint8_t gc_num_max_gs_thds;
1825fb4d8502Sjsg   uint8_t gc_gs_table_depth;
1826fb4d8502Sjsg   uint8_t gc_double_offchip_lds_buffer;
1827fb4d8502Sjsg   uint8_t gc_max_scratch_slots_per_cu;
1828fb4d8502Sjsg   uint32_t sram_rm_fuses_val;
1829fb4d8502Sjsg   uint32_t sram_custom_rm_fuses_val;
1830fb4d8502Sjsg };
1831fb4d8502Sjsg 
18325ca02815Sjsg struct atom_gfx_info_v2_7 {
18335ca02815Sjsg 	struct atom_common_table_header table_header;
18345ca02815Sjsg 	uint8_t gfxip_min_ver;
18355ca02815Sjsg 	uint8_t gfxip_max_ver;
18365ca02815Sjsg 	uint8_t max_shader_engines;
18375ca02815Sjsg 	uint8_t reserved;
18385ca02815Sjsg 	uint8_t max_cu_per_sh;
18395ca02815Sjsg 	uint8_t max_sh_per_se;
18405ca02815Sjsg 	uint8_t max_backends_per_se;
18415ca02815Sjsg 	uint8_t max_texture_channel_caches;
18425ca02815Sjsg 	uint32_t regaddr_cp_dma_src_addr;
18435ca02815Sjsg 	uint32_t regaddr_cp_dma_src_addr_hi;
18445ca02815Sjsg 	uint32_t regaddr_cp_dma_dst_addr;
18455ca02815Sjsg 	uint32_t regaddr_cp_dma_dst_addr_hi;
18465ca02815Sjsg 	uint32_t regaddr_cp_dma_command;
18475ca02815Sjsg 	uint32_t regaddr_cp_status;
18485ca02815Sjsg 	uint32_t regaddr_rlc_gpu_clock_32;
18495ca02815Sjsg 	uint32_t rlc_gpu_timer_refclk;
18505ca02815Sjsg 	uint8_t active_cu_per_sh;
18515ca02815Sjsg 	uint8_t active_rb_per_se;
18525ca02815Sjsg 	uint16_t gcgoldenoffset;
18535ca02815Sjsg 	uint16_t gc_num_gprs;
18545ca02815Sjsg 	uint16_t gc_gsprim_buff_depth;
18555ca02815Sjsg 	uint16_t gc_parameter_cache_depth;
18565ca02815Sjsg 	uint16_t gc_wave_size;
18575ca02815Sjsg 	uint16_t gc_max_waves_per_simd;
18585ca02815Sjsg 	uint16_t gc_lds_size;
18595ca02815Sjsg 	uint8_t gc_num_max_gs_thds;
18605ca02815Sjsg 	uint8_t gc_gs_table_depth;
18615ca02815Sjsg 	uint8_t gc_double_offchip_lds_buffer;
18625ca02815Sjsg 	uint8_t gc_max_scratch_slots_per_cu;
18635ca02815Sjsg 	uint32_t sram_rm_fuses_val;
18645ca02815Sjsg 	uint32_t sram_custom_rm_fuses_val;
18655ca02815Sjsg 	uint8_t cut_cu;
18665ca02815Sjsg 	uint8_t active_cu_total;
18675ca02815Sjsg 	uint8_t cu_reserved[2];
18685ca02815Sjsg 	uint32_t gc_config;
18695ca02815Sjsg 	uint8_t inactive_cu_per_se[8];
18705ca02815Sjsg 	uint32_t reserved2[6];
18715ca02815Sjsg };
18725ca02815Sjsg 
18731bb76ff1Sjsg struct atom_gfx_info_v3_0 {
18741bb76ff1Sjsg 	struct atom_common_table_header table_header;
18751bb76ff1Sjsg 	uint8_t gfxip_min_ver;
18761bb76ff1Sjsg 	uint8_t gfxip_max_ver;
18771bb76ff1Sjsg 	uint8_t max_shader_engines;
18781bb76ff1Sjsg 	uint8_t max_tile_pipes;
18791bb76ff1Sjsg 	uint8_t max_cu_per_sh;
18801bb76ff1Sjsg 	uint8_t max_sh_per_se;
18811bb76ff1Sjsg 	uint8_t max_backends_per_se;
18821bb76ff1Sjsg 	uint8_t max_texture_channel_caches;
18831bb76ff1Sjsg 	uint32_t regaddr_lsdma_queue0_rb_rptr;
18841bb76ff1Sjsg 	uint32_t regaddr_lsdma_queue0_rb_rptr_hi;
18851bb76ff1Sjsg 	uint32_t regaddr_lsdma_queue0_rb_wptr;
18861bb76ff1Sjsg 	uint32_t regaddr_lsdma_queue0_rb_wptr_hi;
18871bb76ff1Sjsg 	uint32_t regaddr_lsdma_command;
18881bb76ff1Sjsg 	uint32_t regaddr_lsdma_status;
18891bb76ff1Sjsg 	uint32_t regaddr_golden_tsc_count_lower;
18901bb76ff1Sjsg 	uint32_t golden_tsc_count_lower_refclk;
18911bb76ff1Sjsg 	uint8_t active_wgp_per_se;
18921bb76ff1Sjsg 	uint8_t active_rb_per_se;
18931bb76ff1Sjsg 	uint8_t active_se;
18941bb76ff1Sjsg 	uint8_t reserved1;
18951bb76ff1Sjsg 	uint32_t sram_rm_fuses_val;
18961bb76ff1Sjsg 	uint32_t sram_custom_rm_fuses_val;
18971bb76ff1Sjsg 	uint32_t inactive_sa_mask;
18981bb76ff1Sjsg 	uint32_t gc_config;
18991bb76ff1Sjsg 	uint8_t inactive_wgp[16];
19001bb76ff1Sjsg 	uint8_t inactive_rb[16];
19011bb76ff1Sjsg 	uint32_t gdfll_as_wait_ctrl_val;
19021bb76ff1Sjsg 	uint32_t gdfll_as_step_ctrl_val;
19031bb76ff1Sjsg 	uint32_t reserved[8];
19041bb76ff1Sjsg };
19051bb76ff1Sjsg 
1906fb4d8502Sjsg /*
1907fb4d8502Sjsg   ***************************************************************************
1908fb4d8502Sjsg     Data Table smu_info  structure
1909fb4d8502Sjsg   ***************************************************************************
1910fb4d8502Sjsg */
1911fb4d8502Sjsg struct atom_smu_info_v3_1
1912fb4d8502Sjsg {
1913fb4d8502Sjsg   struct  atom_common_table_header  table_header;
1914fb4d8502Sjsg   uint8_t smuip_min_ver;
1915fb4d8502Sjsg   uint8_t smuip_max_ver;
1916fb4d8502Sjsg   uint8_t smu_rsd1;
1917fb4d8502Sjsg   uint8_t gpuclk_ss_mode;           // enum of atom_spread_spectrum_mode
1918fb4d8502Sjsg   uint16_t sclk_ss_percentage;
1919fb4d8502Sjsg   uint16_t sclk_ss_rate_10hz;
1920fb4d8502Sjsg   uint16_t gpuclk_ss_percentage;    // in unit of 0.001%
1921fb4d8502Sjsg   uint16_t gpuclk_ss_rate_10hz;
1922fb4d8502Sjsg   uint32_t core_refclk_10khz;
1923fb4d8502Sjsg   uint8_t  ac_dc_gpio_bit;          // GPIO bit shift in SMU_GPIOPAD_A  configured for AC/DC switching, =0xff means invalid
1924fb4d8502Sjsg   uint8_t  ac_dc_polarity;          // GPIO polarity for AC/DC switching
1925fb4d8502Sjsg   uint8_t  vr0hot_gpio_bit;         // GPIO bit shift in SMU_GPIOPAD_A  configured for VR0 HOT event, =0xff means invalid
1926fb4d8502Sjsg   uint8_t  vr0hot_polarity;         // GPIO polarity for VR0 HOT event
1927fb4d8502Sjsg   uint8_t  vr1hot_gpio_bit;         // GPIO bit shift in SMU_GPIOPAD_A configured for VR1 HOT event , =0xff means invalid
1928fb4d8502Sjsg   uint8_t  vr1hot_polarity;         // GPIO polarity for VR1 HOT event
1929fb4d8502Sjsg   uint8_t  fw_ctf_gpio_bit;         // GPIO bit shift in SMU_GPIOPAD_A configured for CTF, =0xff means invalid
1930fb4d8502Sjsg   uint8_t  fw_ctf_polarity;         // GPIO polarity for CTF
1931fb4d8502Sjsg };
1932fb4d8502Sjsg 
1933fb4d8502Sjsg struct atom_smu_info_v3_2 {
1934fb4d8502Sjsg   struct   atom_common_table_header  table_header;
1935fb4d8502Sjsg   uint8_t  smuip_min_ver;
1936fb4d8502Sjsg   uint8_t  smuip_max_ver;
1937fb4d8502Sjsg   uint8_t  smu_rsd1;
1938fb4d8502Sjsg   uint8_t  gpuclk_ss_mode;
1939fb4d8502Sjsg   uint16_t sclk_ss_percentage;
1940fb4d8502Sjsg   uint16_t sclk_ss_rate_10hz;
1941fb4d8502Sjsg   uint16_t gpuclk_ss_percentage;    // in unit of 0.001%
1942fb4d8502Sjsg   uint16_t gpuclk_ss_rate_10hz;
1943fb4d8502Sjsg   uint32_t core_refclk_10khz;
1944fb4d8502Sjsg   uint8_t  ac_dc_gpio_bit;          // GPIO bit shift in SMU_GPIOPAD_A  configured for AC/DC switching, =0xff means invalid
1945fb4d8502Sjsg   uint8_t  ac_dc_polarity;          // GPIO polarity for AC/DC switching
1946fb4d8502Sjsg   uint8_t  vr0hot_gpio_bit;         // GPIO bit shift in SMU_GPIOPAD_A  configured for VR0 HOT event, =0xff means invalid
1947fb4d8502Sjsg   uint8_t  vr0hot_polarity;         // GPIO polarity for VR0 HOT event
1948fb4d8502Sjsg   uint8_t  vr1hot_gpio_bit;         // GPIO bit shift in SMU_GPIOPAD_A configured for VR1 HOT event , =0xff means invalid
1949fb4d8502Sjsg   uint8_t  vr1hot_polarity;         // GPIO polarity for VR1 HOT event
1950fb4d8502Sjsg   uint8_t  fw_ctf_gpio_bit;         // GPIO bit shift in SMU_GPIOPAD_A configured for CTF, =0xff means invalid
1951fb4d8502Sjsg   uint8_t  fw_ctf_polarity;         // GPIO polarity for CTF
1952fb4d8502Sjsg   uint8_t  pcc_gpio_bit;            // GPIO bit shift in SMU_GPIOPAD_A configured for PCC, =0xff means invalid
1953fb4d8502Sjsg   uint8_t  pcc_gpio_polarity;       // GPIO polarity for CTF
1954fb4d8502Sjsg   uint16_t smugoldenoffset;
1955fb4d8502Sjsg   uint32_t gpupll_vco_freq_10khz;
1956fb4d8502Sjsg   uint32_t bootup_smnclk_10khz;
1957fb4d8502Sjsg   uint32_t bootup_socclk_10khz;
1958fb4d8502Sjsg   uint32_t bootup_mp0clk_10khz;
1959fb4d8502Sjsg   uint32_t bootup_mp1clk_10khz;
1960fb4d8502Sjsg   uint32_t bootup_lclk_10khz;
1961fb4d8502Sjsg   uint32_t bootup_dcefclk_10khz;
1962fb4d8502Sjsg   uint32_t ctf_threshold_override_value;
1963fb4d8502Sjsg   uint32_t reserved[5];
1964fb4d8502Sjsg };
1965fb4d8502Sjsg 
1966fb4d8502Sjsg struct atom_smu_info_v3_3 {
1967fb4d8502Sjsg   struct   atom_common_table_header  table_header;
1968fb4d8502Sjsg   uint8_t  smuip_min_ver;
1969fb4d8502Sjsg   uint8_t  smuip_max_ver;
1970c349dbc7Sjsg   uint8_t  waflclk_ss_mode;
1971fb4d8502Sjsg   uint8_t  gpuclk_ss_mode;
1972fb4d8502Sjsg   uint16_t sclk_ss_percentage;
1973fb4d8502Sjsg   uint16_t sclk_ss_rate_10hz;
1974fb4d8502Sjsg   uint16_t gpuclk_ss_percentage;    // in unit of 0.001%
1975fb4d8502Sjsg   uint16_t gpuclk_ss_rate_10hz;
1976fb4d8502Sjsg   uint32_t core_refclk_10khz;
1977fb4d8502Sjsg   uint8_t  ac_dc_gpio_bit;          // GPIO bit shift in SMU_GPIOPAD_A  configured for AC/DC switching, =0xff means invalid
1978fb4d8502Sjsg   uint8_t  ac_dc_polarity;          // GPIO polarity for AC/DC switching
1979fb4d8502Sjsg   uint8_t  vr0hot_gpio_bit;         // GPIO bit shift in SMU_GPIOPAD_A  configured for VR0 HOT event, =0xff means invalid
1980fb4d8502Sjsg   uint8_t  vr0hot_polarity;         // GPIO polarity for VR0 HOT event
1981fb4d8502Sjsg   uint8_t  vr1hot_gpio_bit;         // GPIO bit shift in SMU_GPIOPAD_A configured for VR1 HOT event , =0xff means invalid
1982fb4d8502Sjsg   uint8_t  vr1hot_polarity;         // GPIO polarity for VR1 HOT event
1983fb4d8502Sjsg   uint8_t  fw_ctf_gpio_bit;         // GPIO bit shift in SMU_GPIOPAD_A configured for CTF, =0xff means invalid
1984fb4d8502Sjsg   uint8_t  fw_ctf_polarity;         // GPIO polarity for CTF
1985fb4d8502Sjsg   uint8_t  pcc_gpio_bit;            // GPIO bit shift in SMU_GPIOPAD_A configured for PCC, =0xff means invalid
1986fb4d8502Sjsg   uint8_t  pcc_gpio_polarity;       // GPIO polarity for CTF
1987fb4d8502Sjsg   uint16_t smugoldenoffset;
1988fb4d8502Sjsg   uint32_t gpupll_vco_freq_10khz;
1989fb4d8502Sjsg   uint32_t bootup_smnclk_10khz;
1990fb4d8502Sjsg   uint32_t bootup_socclk_10khz;
1991fb4d8502Sjsg   uint32_t bootup_mp0clk_10khz;
1992fb4d8502Sjsg   uint32_t bootup_mp1clk_10khz;
1993fb4d8502Sjsg   uint32_t bootup_lclk_10khz;
1994fb4d8502Sjsg   uint32_t bootup_dcefclk_10khz;
1995fb4d8502Sjsg   uint32_t ctf_threshold_override_value;
1996fb4d8502Sjsg   uint32_t syspll3_0_vco_freq_10khz;
1997fb4d8502Sjsg   uint32_t syspll3_1_vco_freq_10khz;
1998fb4d8502Sjsg   uint32_t bootup_fclk_10khz;
1999fb4d8502Sjsg   uint32_t bootup_waflclk_10khz;
2000c349dbc7Sjsg   uint32_t smu_info_caps;
2001c349dbc7Sjsg   uint16_t waflclk_ss_percentage;    // in unit of 0.001%
2002c349dbc7Sjsg   uint16_t smuinitoffset;
2003c349dbc7Sjsg   uint32_t reserved;
2004fb4d8502Sjsg };
2005fb4d8502Sjsg 
20061bb76ff1Sjsg struct atom_smu_info_v3_5
20071bb76ff1Sjsg {
20081bb76ff1Sjsg   struct   atom_common_table_header  table_header;
20091bb76ff1Sjsg   uint8_t  smuip_min_ver;
20101bb76ff1Sjsg   uint8_t  smuip_max_ver;
20111bb76ff1Sjsg   uint8_t  waflclk_ss_mode;
20121bb76ff1Sjsg   uint8_t  gpuclk_ss_mode;
20131bb76ff1Sjsg   uint16_t sclk_ss_percentage;
20141bb76ff1Sjsg   uint16_t sclk_ss_rate_10hz;
20151bb76ff1Sjsg   uint16_t gpuclk_ss_percentage;    // in unit of 0.001%
20161bb76ff1Sjsg   uint16_t gpuclk_ss_rate_10hz;
20171bb76ff1Sjsg   uint32_t core_refclk_10khz;
20181bb76ff1Sjsg   uint32_t syspll0_1_vco_freq_10khz;
20191bb76ff1Sjsg   uint32_t syspll0_2_vco_freq_10khz;
20201bb76ff1Sjsg   uint8_t  pcc_gpio_bit;            // GPIO bit shift in SMU_GPIOPAD_A configured for PCC, =0xff means invalid
20211bb76ff1Sjsg   uint8_t  pcc_gpio_polarity;       // GPIO polarity for CTF
20221bb76ff1Sjsg   uint16_t smugoldenoffset;
20231bb76ff1Sjsg   uint32_t syspll0_0_vco_freq_10khz;
20241bb76ff1Sjsg   uint32_t bootup_smnclk_10khz;
20251bb76ff1Sjsg   uint32_t bootup_socclk_10khz;
20261bb76ff1Sjsg   uint32_t bootup_mp0clk_10khz;
20271bb76ff1Sjsg   uint32_t bootup_mp1clk_10khz;
20281bb76ff1Sjsg   uint32_t bootup_lclk_10khz;
20291bb76ff1Sjsg   uint32_t bootup_dcefclk_10khz;
20301bb76ff1Sjsg   uint32_t ctf_threshold_override_value;
20311bb76ff1Sjsg   uint32_t syspll3_0_vco_freq_10khz;
20321bb76ff1Sjsg   uint32_t syspll3_1_vco_freq_10khz;
20331bb76ff1Sjsg   uint32_t bootup_fclk_10khz;
20341bb76ff1Sjsg   uint32_t bootup_waflclk_10khz;
20351bb76ff1Sjsg   uint32_t smu_info_caps;
20361bb76ff1Sjsg   uint16_t waflclk_ss_percentage;    // in unit of 0.001%
20371bb76ff1Sjsg   uint16_t smuinitoffset;
20381bb76ff1Sjsg   uint32_t bootup_dprefclk_10khz;
20391bb76ff1Sjsg   uint32_t bootup_usbclk_10khz;
20401bb76ff1Sjsg   uint32_t smb_slave_address;
20411bb76ff1Sjsg   uint32_t cg_fdo_ctrl0_val;
20421bb76ff1Sjsg   uint32_t cg_fdo_ctrl1_val;
20431bb76ff1Sjsg   uint32_t cg_fdo_ctrl2_val;
20441bb76ff1Sjsg   uint32_t gdfll_as_wait_ctrl_val;
20451bb76ff1Sjsg   uint32_t gdfll_as_step_ctrl_val;
20461bb76ff1Sjsg   uint32_t bootup_dtbclk_10khz;
20471bb76ff1Sjsg   uint32_t fclk_syspll_refclk_10khz;
20481bb76ff1Sjsg   uint32_t smusvi_svc0_val;
20491bb76ff1Sjsg   uint32_t smusvi_svc1_val;
20501bb76ff1Sjsg   uint32_t smusvi_svd0_val;
20511bb76ff1Sjsg   uint32_t smusvi_svd1_val;
20521bb76ff1Sjsg   uint32_t smusvi_svt0_val;
20531bb76ff1Sjsg   uint32_t smusvi_svt1_val;
20541bb76ff1Sjsg   uint32_t cg_tach_ctrl_val;
20551bb76ff1Sjsg   uint32_t cg_pump_ctrl1_val;
20561bb76ff1Sjsg   uint32_t cg_pump_tach_ctrl_val;
20571bb76ff1Sjsg   uint32_t thm_ctf_delay_val;
20581bb76ff1Sjsg   uint32_t thm_thermal_int_ctrl_val;
20591bb76ff1Sjsg   uint32_t thm_tmon_config_val;
20601bb76ff1Sjsg   uint32_t reserved[16];
20611bb76ff1Sjsg };
20621bb76ff1Sjsg 
20631bb76ff1Sjsg struct atom_smu_info_v3_6
20641bb76ff1Sjsg {
20651bb76ff1Sjsg 	struct   atom_common_table_header  table_header;
20661bb76ff1Sjsg 	uint8_t  smuip_min_ver;
20671bb76ff1Sjsg 	uint8_t  smuip_max_ver;
20681bb76ff1Sjsg 	uint8_t  waflclk_ss_mode;
20691bb76ff1Sjsg 	uint8_t  gpuclk_ss_mode;
20701bb76ff1Sjsg 	uint16_t sclk_ss_percentage;
20711bb76ff1Sjsg 	uint16_t sclk_ss_rate_10hz;
20721bb76ff1Sjsg 	uint16_t gpuclk_ss_percentage;
20731bb76ff1Sjsg 	uint16_t gpuclk_ss_rate_10hz;
20741bb76ff1Sjsg 	uint32_t core_refclk_10khz;
20751bb76ff1Sjsg 	uint32_t syspll0_1_vco_freq_10khz;
20761bb76ff1Sjsg 	uint32_t syspll0_2_vco_freq_10khz;
20771bb76ff1Sjsg 	uint8_t  pcc_gpio_bit;
20781bb76ff1Sjsg 	uint8_t  pcc_gpio_polarity;
20791bb76ff1Sjsg 	uint16_t smugoldenoffset;
20801bb76ff1Sjsg 	uint32_t syspll0_0_vco_freq_10khz;
20811bb76ff1Sjsg 	uint32_t bootup_smnclk_10khz;
20821bb76ff1Sjsg 	uint32_t bootup_socclk_10khz;
20831bb76ff1Sjsg 	uint32_t bootup_mp0clk_10khz;
20841bb76ff1Sjsg 	uint32_t bootup_mp1clk_10khz;
20851bb76ff1Sjsg 	uint32_t bootup_lclk_10khz;
20861bb76ff1Sjsg 	uint32_t bootup_dxioclk_10khz;
20871bb76ff1Sjsg 	uint32_t ctf_threshold_override_value;
20881bb76ff1Sjsg 	uint32_t syspll3_0_vco_freq_10khz;
20891bb76ff1Sjsg 	uint32_t syspll3_1_vco_freq_10khz;
20901bb76ff1Sjsg 	uint32_t bootup_fclk_10khz;
20911bb76ff1Sjsg 	uint32_t bootup_waflclk_10khz;
20921bb76ff1Sjsg 	uint32_t smu_info_caps;
20931bb76ff1Sjsg 	uint16_t waflclk_ss_percentage;
20941bb76ff1Sjsg 	uint16_t smuinitoffset;
20951bb76ff1Sjsg 	uint32_t bootup_gfxavsclk_10khz;
20961bb76ff1Sjsg 	uint32_t bootup_mpioclk_10khz;
20971bb76ff1Sjsg 	uint32_t smb_slave_address;
20981bb76ff1Sjsg 	uint32_t cg_fdo_ctrl0_val;
20991bb76ff1Sjsg 	uint32_t cg_fdo_ctrl1_val;
21001bb76ff1Sjsg 	uint32_t cg_fdo_ctrl2_val;
21011bb76ff1Sjsg 	uint32_t gdfll_as_wait_ctrl_val;
21021bb76ff1Sjsg 	uint32_t gdfll_as_step_ctrl_val;
21031bb76ff1Sjsg 	uint32_t reserved_clk;
21041bb76ff1Sjsg 	uint32_t fclk_syspll_refclk_10khz;
21051bb76ff1Sjsg 	uint32_t smusvi_svc0_val;
21061bb76ff1Sjsg 	uint32_t smusvi_svc1_val;
21071bb76ff1Sjsg 	uint32_t smusvi_svd0_val;
21081bb76ff1Sjsg 	uint32_t smusvi_svd1_val;
21091bb76ff1Sjsg 	uint32_t smusvi_svt0_val;
21101bb76ff1Sjsg 	uint32_t smusvi_svt1_val;
21111bb76ff1Sjsg 	uint32_t cg_tach_ctrl_val;
21121bb76ff1Sjsg 	uint32_t cg_pump_ctrl1_val;
21131bb76ff1Sjsg 	uint32_t cg_pump_tach_ctrl_val;
21141bb76ff1Sjsg 	uint32_t thm_ctf_delay_val;
21151bb76ff1Sjsg 	uint32_t thm_thermal_int_ctrl_val;
21161bb76ff1Sjsg 	uint32_t thm_tmon_config_val;
21171bb76ff1Sjsg 	uint32_t bootup_vclk_10khz;
21181bb76ff1Sjsg 	uint32_t bootup_dclk_10khz;
21191bb76ff1Sjsg 	uint32_t smu_gpiopad_pu_en_val;
21201bb76ff1Sjsg 	uint32_t smu_gpiopad_pd_en_val;
21211bb76ff1Sjsg 	uint32_t reserved[12];
21221bb76ff1Sjsg };
21231bb76ff1Sjsg 
21241bb76ff1Sjsg struct atom_smu_info_v4_0 {
21251bb76ff1Sjsg 	struct atom_common_table_header table_header;
21261bb76ff1Sjsg 	uint32_t bootup_gfxclk_bypass_10khz;
21271bb76ff1Sjsg 	uint32_t bootup_usrclk_10khz;
21281bb76ff1Sjsg 	uint32_t bootup_csrclk_10khz;
21291bb76ff1Sjsg 	uint32_t core_refclk_10khz;
21301bb76ff1Sjsg 	uint32_t syspll1_vco_freq_10khz;
21311bb76ff1Sjsg 	uint32_t syspll2_vco_freq_10khz;
21321bb76ff1Sjsg 	uint8_t pcc_gpio_bit;
21331bb76ff1Sjsg 	uint8_t pcc_gpio_polarity;
21341bb76ff1Sjsg 	uint16_t bootup_vddusr_mv;
21351bb76ff1Sjsg 	uint32_t syspll0_vco_freq_10khz;
21361bb76ff1Sjsg 	uint32_t bootup_smnclk_10khz;
21371bb76ff1Sjsg 	uint32_t bootup_socclk_10khz;
21381bb76ff1Sjsg 	uint32_t bootup_mp0clk_10khz;
21391bb76ff1Sjsg 	uint32_t bootup_mp1clk_10khz;
21401bb76ff1Sjsg 	uint32_t bootup_lclk_10khz;
21411bb76ff1Sjsg 	uint32_t bootup_dcefclk_10khz;
21421bb76ff1Sjsg 	uint32_t ctf_threshold_override_value;
21431bb76ff1Sjsg 	uint32_t syspll3_vco_freq_10khz;
21441bb76ff1Sjsg 	uint32_t mm_syspll_vco_freq_10khz;
21451bb76ff1Sjsg 	uint32_t bootup_fclk_10khz;
21461bb76ff1Sjsg 	uint32_t bootup_waflclk_10khz;
21471bb76ff1Sjsg 	uint32_t smu_info_caps;
21481bb76ff1Sjsg 	uint16_t waflclk_ss_percentage;
21491bb76ff1Sjsg 	uint16_t smuinitoffset;
21501bb76ff1Sjsg 	uint32_t bootup_dprefclk_10khz;
21511bb76ff1Sjsg 	uint32_t bootup_usbclk_10khz;
21521bb76ff1Sjsg 	uint32_t smb_slave_address;
21531bb76ff1Sjsg 	uint32_t cg_fdo_ctrl0_val;
21541bb76ff1Sjsg 	uint32_t cg_fdo_ctrl1_val;
21551bb76ff1Sjsg 	uint32_t cg_fdo_ctrl2_val;
21561bb76ff1Sjsg 	uint32_t gdfll_as_wait_ctrl_val;
21571bb76ff1Sjsg 	uint32_t gdfll_as_step_ctrl_val;
21581bb76ff1Sjsg 	uint32_t bootup_dtbclk_10khz;
21591bb76ff1Sjsg 	uint32_t fclk_syspll_refclk_10khz;
21601bb76ff1Sjsg 	uint32_t smusvi_svc0_val;
21611bb76ff1Sjsg 	uint32_t smusvi_svc1_val;
21621bb76ff1Sjsg 	uint32_t smusvi_svd0_val;
21631bb76ff1Sjsg 	uint32_t smusvi_svd1_val;
21641bb76ff1Sjsg 	uint32_t smusvi_svt0_val;
21651bb76ff1Sjsg 	uint32_t smusvi_svt1_val;
21661bb76ff1Sjsg 	uint32_t cg_tach_ctrl_val;
21671bb76ff1Sjsg 	uint32_t cg_pump_ctrl1_val;
21681bb76ff1Sjsg 	uint32_t cg_pump_tach_ctrl_val;
21691bb76ff1Sjsg 	uint32_t thm_ctf_delay_val;
21701bb76ff1Sjsg 	uint32_t thm_thermal_int_ctrl_val;
21711bb76ff1Sjsg 	uint32_t thm_tmon_config_val;
21721bb76ff1Sjsg 	uint32_t smbus_timing_cntrl0_val;
21731bb76ff1Sjsg 	uint32_t smbus_timing_cntrl1_val;
21741bb76ff1Sjsg 	uint32_t smbus_timing_cntrl2_val;
21751bb76ff1Sjsg 	uint32_t pwr_disp_timer_global_control_val;
21761bb76ff1Sjsg 	uint32_t bootup_mpioclk_10khz;
21771bb76ff1Sjsg 	uint32_t bootup_dclk0_10khz;
21781bb76ff1Sjsg 	uint32_t bootup_vclk0_10khz;
21791bb76ff1Sjsg 	uint32_t bootup_dclk1_10khz;
21801bb76ff1Sjsg 	uint32_t bootup_vclk1_10khz;
21811bb76ff1Sjsg 	uint32_t bootup_baco400clk_10khz;
21821bb76ff1Sjsg 	uint32_t bootup_baco1200clk_bypass_10khz;
21831bb76ff1Sjsg 	uint32_t bootup_baco700clk_bypass_10khz;
21841bb76ff1Sjsg 	uint32_t reserved[16];
21851bb76ff1Sjsg };
21861bb76ff1Sjsg 
2187fb4d8502Sjsg /*
2188fb4d8502Sjsg  ***************************************************************************
2189fb4d8502Sjsg    Data Table smc_dpm_info  structure
2190fb4d8502Sjsg  ***************************************************************************
2191fb4d8502Sjsg  */
2192fb4d8502Sjsg struct atom_smc_dpm_info_v4_1
2193fb4d8502Sjsg {
2194fb4d8502Sjsg   struct   atom_common_table_header  table_header;
2195fb4d8502Sjsg   uint8_t  liquid1_i2c_address;
2196fb4d8502Sjsg   uint8_t  liquid2_i2c_address;
2197fb4d8502Sjsg   uint8_t  vr_i2c_address;
2198fb4d8502Sjsg   uint8_t  plx_i2c_address;
2199fb4d8502Sjsg 
2200fb4d8502Sjsg   uint8_t  liquid_i2c_linescl;
2201fb4d8502Sjsg   uint8_t  liquid_i2c_linesda;
2202fb4d8502Sjsg   uint8_t  vr_i2c_linescl;
2203fb4d8502Sjsg   uint8_t  vr_i2c_linesda;
2204fb4d8502Sjsg 
2205fb4d8502Sjsg   uint8_t  plx_i2c_linescl;
2206fb4d8502Sjsg   uint8_t  plx_i2c_linesda;
2207fb4d8502Sjsg   uint8_t  vrsensorpresent;
2208fb4d8502Sjsg   uint8_t  liquidsensorpresent;
2209fb4d8502Sjsg 
2210fb4d8502Sjsg   uint16_t maxvoltagestepgfx;
2211fb4d8502Sjsg   uint16_t maxvoltagestepsoc;
2212fb4d8502Sjsg 
2213fb4d8502Sjsg   uint8_t  vddgfxvrmapping;
2214fb4d8502Sjsg   uint8_t  vddsocvrmapping;
2215fb4d8502Sjsg   uint8_t  vddmem0vrmapping;
2216fb4d8502Sjsg   uint8_t  vddmem1vrmapping;
2217fb4d8502Sjsg 
2218fb4d8502Sjsg   uint8_t  gfxulvphasesheddingmask;
2219fb4d8502Sjsg   uint8_t  soculvphasesheddingmask;
2220fb4d8502Sjsg   uint8_t  padding8_v[2];
2221fb4d8502Sjsg 
2222fb4d8502Sjsg   uint16_t gfxmaxcurrent;
2223fb4d8502Sjsg   uint8_t  gfxoffset;
2224fb4d8502Sjsg   uint8_t  padding_telemetrygfx;
2225fb4d8502Sjsg 
2226fb4d8502Sjsg   uint16_t socmaxcurrent;
2227fb4d8502Sjsg   uint8_t  socoffset;
2228fb4d8502Sjsg   uint8_t  padding_telemetrysoc;
2229fb4d8502Sjsg 
2230fb4d8502Sjsg   uint16_t mem0maxcurrent;
2231fb4d8502Sjsg   uint8_t  mem0offset;
2232fb4d8502Sjsg   uint8_t  padding_telemetrymem0;
2233fb4d8502Sjsg 
2234fb4d8502Sjsg   uint16_t mem1maxcurrent;
2235fb4d8502Sjsg   uint8_t  mem1offset;
2236fb4d8502Sjsg   uint8_t  padding_telemetrymem1;
2237fb4d8502Sjsg 
2238fb4d8502Sjsg   uint8_t  acdcgpio;
2239fb4d8502Sjsg   uint8_t  acdcpolarity;
2240fb4d8502Sjsg   uint8_t  vr0hotgpio;
2241fb4d8502Sjsg   uint8_t  vr0hotpolarity;
2242fb4d8502Sjsg 
2243fb4d8502Sjsg   uint8_t  vr1hotgpio;
2244fb4d8502Sjsg   uint8_t  vr1hotpolarity;
2245fb4d8502Sjsg   uint8_t  padding1;
2246fb4d8502Sjsg   uint8_t  padding2;
2247fb4d8502Sjsg 
2248fb4d8502Sjsg   uint8_t  ledpin0;
2249fb4d8502Sjsg   uint8_t  ledpin1;
2250fb4d8502Sjsg   uint8_t  ledpin2;
2251fb4d8502Sjsg   uint8_t  padding8_4;
2252fb4d8502Sjsg 
2253fb4d8502Sjsg 	uint8_t  pllgfxclkspreadenabled;
2254fb4d8502Sjsg 	uint8_t  pllgfxclkspreadpercent;
2255fb4d8502Sjsg 	uint16_t pllgfxclkspreadfreq;
2256fb4d8502Sjsg 
2257fb4d8502Sjsg   uint8_t uclkspreadenabled;
2258fb4d8502Sjsg   uint8_t uclkspreadpercent;
2259fb4d8502Sjsg   uint16_t uclkspreadfreq;
2260fb4d8502Sjsg 
2261fb4d8502Sjsg   uint8_t socclkspreadenabled;
2262fb4d8502Sjsg   uint8_t socclkspreadpercent;
2263fb4d8502Sjsg   uint16_t socclkspreadfreq;
2264fb4d8502Sjsg 
2265fb4d8502Sjsg 	uint8_t  acggfxclkspreadenabled;
2266fb4d8502Sjsg 	uint8_t  acggfxclkspreadpercent;
2267fb4d8502Sjsg 	uint16_t acggfxclkspreadfreq;
2268fb4d8502Sjsg 
2269fb4d8502Sjsg 	uint8_t Vr2_I2C_address;
2270fb4d8502Sjsg 	uint8_t padding_vr2[3];
2271fb4d8502Sjsg 
2272fb4d8502Sjsg 	uint32_t boardreserved[9];
2273fb4d8502Sjsg };
2274fb4d8502Sjsg 
2275fb4d8502Sjsg /*
2276fb4d8502Sjsg  ***************************************************************************
2277c349dbc7Sjsg    Data Table smc_dpm_info  structure
2278c349dbc7Sjsg  ***************************************************************************
2279c349dbc7Sjsg  */
2280c349dbc7Sjsg struct atom_smc_dpm_info_v4_3
2281c349dbc7Sjsg {
2282c349dbc7Sjsg   struct   atom_common_table_header  table_header;
2283c349dbc7Sjsg   uint8_t  liquid1_i2c_address;
2284c349dbc7Sjsg   uint8_t  liquid2_i2c_address;
2285c349dbc7Sjsg   uint8_t  vr_i2c_address;
2286c349dbc7Sjsg   uint8_t  plx_i2c_address;
2287c349dbc7Sjsg 
2288c349dbc7Sjsg   uint8_t  liquid_i2c_linescl;
2289c349dbc7Sjsg   uint8_t  liquid_i2c_linesda;
2290c349dbc7Sjsg   uint8_t  vr_i2c_linescl;
2291c349dbc7Sjsg   uint8_t  vr_i2c_linesda;
2292c349dbc7Sjsg 
2293c349dbc7Sjsg   uint8_t  plx_i2c_linescl;
2294c349dbc7Sjsg   uint8_t  plx_i2c_linesda;
2295c349dbc7Sjsg   uint8_t  vrsensorpresent;
2296c349dbc7Sjsg   uint8_t  liquidsensorpresent;
2297c349dbc7Sjsg 
2298c349dbc7Sjsg   uint16_t maxvoltagestepgfx;
2299c349dbc7Sjsg   uint16_t maxvoltagestepsoc;
2300c349dbc7Sjsg 
2301c349dbc7Sjsg   uint8_t  vddgfxvrmapping;
2302c349dbc7Sjsg   uint8_t  vddsocvrmapping;
2303c349dbc7Sjsg   uint8_t  vddmem0vrmapping;
2304c349dbc7Sjsg   uint8_t  vddmem1vrmapping;
2305c349dbc7Sjsg 
2306c349dbc7Sjsg   uint8_t  gfxulvphasesheddingmask;
2307c349dbc7Sjsg   uint8_t  soculvphasesheddingmask;
2308c349dbc7Sjsg   uint8_t  externalsensorpresent;
2309c349dbc7Sjsg   uint8_t  padding8_v;
2310c349dbc7Sjsg 
2311c349dbc7Sjsg   uint16_t gfxmaxcurrent;
2312c349dbc7Sjsg   uint8_t  gfxoffset;
2313c349dbc7Sjsg   uint8_t  padding_telemetrygfx;
2314c349dbc7Sjsg 
2315c349dbc7Sjsg   uint16_t socmaxcurrent;
2316c349dbc7Sjsg   uint8_t  socoffset;
2317c349dbc7Sjsg   uint8_t  padding_telemetrysoc;
2318c349dbc7Sjsg 
2319c349dbc7Sjsg   uint16_t mem0maxcurrent;
2320c349dbc7Sjsg   uint8_t  mem0offset;
2321c349dbc7Sjsg   uint8_t  padding_telemetrymem0;
2322c349dbc7Sjsg 
2323c349dbc7Sjsg   uint16_t mem1maxcurrent;
2324c349dbc7Sjsg   uint8_t  mem1offset;
2325c349dbc7Sjsg   uint8_t  padding_telemetrymem1;
2326c349dbc7Sjsg 
2327c349dbc7Sjsg   uint8_t  acdcgpio;
2328c349dbc7Sjsg   uint8_t  acdcpolarity;
2329c349dbc7Sjsg   uint8_t  vr0hotgpio;
2330c349dbc7Sjsg   uint8_t  vr0hotpolarity;
2331c349dbc7Sjsg 
2332c349dbc7Sjsg   uint8_t  vr1hotgpio;
2333c349dbc7Sjsg   uint8_t  vr1hotpolarity;
2334c349dbc7Sjsg   uint8_t  padding1;
2335c349dbc7Sjsg   uint8_t  padding2;
2336c349dbc7Sjsg 
2337c349dbc7Sjsg   uint8_t  ledpin0;
2338c349dbc7Sjsg   uint8_t  ledpin1;
2339c349dbc7Sjsg   uint8_t  ledpin2;
2340c349dbc7Sjsg   uint8_t  padding8_4;
2341c349dbc7Sjsg 
2342c349dbc7Sjsg   uint8_t  pllgfxclkspreadenabled;
2343c349dbc7Sjsg   uint8_t  pllgfxclkspreadpercent;
2344c349dbc7Sjsg   uint16_t pllgfxclkspreadfreq;
2345c349dbc7Sjsg 
2346c349dbc7Sjsg   uint8_t uclkspreadenabled;
2347c349dbc7Sjsg   uint8_t uclkspreadpercent;
2348c349dbc7Sjsg   uint16_t uclkspreadfreq;
2349c349dbc7Sjsg 
2350c349dbc7Sjsg   uint8_t fclkspreadenabled;
2351c349dbc7Sjsg   uint8_t fclkspreadpercent;
2352c349dbc7Sjsg   uint16_t fclkspreadfreq;
2353c349dbc7Sjsg 
2354c349dbc7Sjsg   uint8_t fllgfxclkspreadenabled;
2355c349dbc7Sjsg   uint8_t fllgfxclkspreadpercent;
2356c349dbc7Sjsg   uint16_t fllgfxclkspreadfreq;
2357c349dbc7Sjsg 
2358c349dbc7Sjsg   uint32_t boardreserved[10];
2359c349dbc7Sjsg };
2360c349dbc7Sjsg 
2361c349dbc7Sjsg struct smudpm_i2ccontrollerconfig_t {
2362c349dbc7Sjsg   uint32_t  enabled;
2363c349dbc7Sjsg   uint32_t  slaveaddress;
2364c349dbc7Sjsg   uint32_t  controllerport;
2365c349dbc7Sjsg   uint32_t  controllername;
2366c349dbc7Sjsg   uint32_t  thermalthrottler;
2367c349dbc7Sjsg   uint32_t  i2cprotocol;
2368c349dbc7Sjsg   uint32_t  i2cspeed;
2369c349dbc7Sjsg };
2370c349dbc7Sjsg 
2371c349dbc7Sjsg struct atom_smc_dpm_info_v4_4
2372c349dbc7Sjsg {
2373c349dbc7Sjsg   struct   atom_common_table_header  table_header;
2374c349dbc7Sjsg   uint32_t  i2c_padding[3];
2375c349dbc7Sjsg 
2376c349dbc7Sjsg   uint16_t maxvoltagestepgfx;
2377c349dbc7Sjsg   uint16_t maxvoltagestepsoc;
2378c349dbc7Sjsg 
2379c349dbc7Sjsg   uint8_t  vddgfxvrmapping;
2380c349dbc7Sjsg   uint8_t  vddsocvrmapping;
2381c349dbc7Sjsg   uint8_t  vddmem0vrmapping;
2382c349dbc7Sjsg   uint8_t  vddmem1vrmapping;
2383c349dbc7Sjsg 
2384c349dbc7Sjsg   uint8_t  gfxulvphasesheddingmask;
2385c349dbc7Sjsg   uint8_t  soculvphasesheddingmask;
2386c349dbc7Sjsg   uint8_t  externalsensorpresent;
2387c349dbc7Sjsg   uint8_t  padding8_v;
2388c349dbc7Sjsg 
2389c349dbc7Sjsg   uint16_t gfxmaxcurrent;
2390c349dbc7Sjsg   uint8_t  gfxoffset;
2391c349dbc7Sjsg   uint8_t  padding_telemetrygfx;
2392c349dbc7Sjsg 
2393c349dbc7Sjsg   uint16_t socmaxcurrent;
2394c349dbc7Sjsg   uint8_t  socoffset;
2395c349dbc7Sjsg   uint8_t  padding_telemetrysoc;
2396c349dbc7Sjsg 
2397c349dbc7Sjsg   uint16_t mem0maxcurrent;
2398c349dbc7Sjsg   uint8_t  mem0offset;
2399c349dbc7Sjsg   uint8_t  padding_telemetrymem0;
2400c349dbc7Sjsg 
2401c349dbc7Sjsg   uint16_t mem1maxcurrent;
2402c349dbc7Sjsg   uint8_t  mem1offset;
2403c349dbc7Sjsg   uint8_t  padding_telemetrymem1;
2404c349dbc7Sjsg 
2405c349dbc7Sjsg 
2406c349dbc7Sjsg   uint8_t  acdcgpio;
2407c349dbc7Sjsg   uint8_t  acdcpolarity;
2408c349dbc7Sjsg   uint8_t  vr0hotgpio;
2409c349dbc7Sjsg   uint8_t  vr0hotpolarity;
2410c349dbc7Sjsg 
2411c349dbc7Sjsg   uint8_t  vr1hotgpio;
2412c349dbc7Sjsg   uint8_t  vr1hotpolarity;
2413c349dbc7Sjsg   uint8_t  padding1;
2414c349dbc7Sjsg   uint8_t  padding2;
2415c349dbc7Sjsg 
2416c349dbc7Sjsg 
2417c349dbc7Sjsg   uint8_t  ledpin0;
2418c349dbc7Sjsg   uint8_t  ledpin1;
2419c349dbc7Sjsg   uint8_t  ledpin2;
2420c349dbc7Sjsg   uint8_t  padding8_4;
2421c349dbc7Sjsg 
2422c349dbc7Sjsg 
2423c349dbc7Sjsg   uint8_t  pllgfxclkspreadenabled;
2424c349dbc7Sjsg   uint8_t  pllgfxclkspreadpercent;
2425c349dbc7Sjsg   uint16_t pllgfxclkspreadfreq;
2426c349dbc7Sjsg 
2427c349dbc7Sjsg 
2428c349dbc7Sjsg   uint8_t  uclkspreadenabled;
2429c349dbc7Sjsg   uint8_t  uclkspreadpercent;
2430c349dbc7Sjsg   uint16_t uclkspreadfreq;
2431c349dbc7Sjsg 
2432c349dbc7Sjsg 
2433c349dbc7Sjsg   uint8_t  fclkspreadenabled;
2434c349dbc7Sjsg   uint8_t  fclkspreadpercent;
2435c349dbc7Sjsg   uint16_t fclkspreadfreq;
2436c349dbc7Sjsg 
2437c349dbc7Sjsg 
2438c349dbc7Sjsg   uint8_t  fllgfxclkspreadenabled;
2439c349dbc7Sjsg   uint8_t  fllgfxclkspreadpercent;
2440c349dbc7Sjsg   uint16_t fllgfxclkspreadfreq;
2441c349dbc7Sjsg 
2442c349dbc7Sjsg 
2443c349dbc7Sjsg   struct smudpm_i2ccontrollerconfig_t  i2ccontrollers[7];
2444c349dbc7Sjsg 
2445c349dbc7Sjsg 
2446c349dbc7Sjsg   uint32_t boardreserved[10];
2447c349dbc7Sjsg };
2448c349dbc7Sjsg 
2449c349dbc7Sjsg enum smudpm_v4_5_i2ccontrollername_e{
2450c349dbc7Sjsg     SMC_V4_5_I2C_CONTROLLER_NAME_VR_GFX = 0,
2451c349dbc7Sjsg     SMC_V4_5_I2C_CONTROLLER_NAME_VR_SOC,
2452c349dbc7Sjsg     SMC_V4_5_I2C_CONTROLLER_NAME_VR_VDDCI,
2453c349dbc7Sjsg     SMC_V4_5_I2C_CONTROLLER_NAME_VR_MVDD,
2454c349dbc7Sjsg     SMC_V4_5_I2C_CONTROLLER_NAME_LIQUID0,
2455c349dbc7Sjsg     SMC_V4_5_I2C_CONTROLLER_NAME_LIQUID1,
2456c349dbc7Sjsg     SMC_V4_5_I2C_CONTROLLER_NAME_PLX,
2457c349dbc7Sjsg     SMC_V4_5_I2C_CONTROLLER_NAME_SPARE,
2458c349dbc7Sjsg     SMC_V4_5_I2C_CONTROLLER_NAME_COUNT,
2459c349dbc7Sjsg };
2460c349dbc7Sjsg 
2461c349dbc7Sjsg enum smudpm_v4_5_i2ccontrollerthrottler_e{
2462c349dbc7Sjsg     SMC_V4_5_I2C_CONTROLLER_THROTTLER_TYPE_NONE = 0,
2463c349dbc7Sjsg     SMC_V4_5_I2C_CONTROLLER_THROTTLER_VR_GFX,
2464c349dbc7Sjsg     SMC_V4_5_I2C_CONTROLLER_THROTTLER_VR_SOC,
2465c349dbc7Sjsg     SMC_V4_5_I2C_CONTROLLER_THROTTLER_VR_VDDCI,
2466c349dbc7Sjsg     SMC_V4_5_I2C_CONTROLLER_THROTTLER_VR_MVDD,
2467c349dbc7Sjsg     SMC_V4_5_I2C_CONTROLLER_THROTTLER_LIQUID0,
2468c349dbc7Sjsg     SMC_V4_5_I2C_CONTROLLER_THROTTLER_LIQUID1,
2469c349dbc7Sjsg     SMC_V4_5_I2C_CONTROLLER_THROTTLER_PLX,
2470c349dbc7Sjsg     SMC_V4_5_I2C_CONTROLLER_THROTTLER_COUNT,
2471c349dbc7Sjsg };
2472c349dbc7Sjsg 
2473c349dbc7Sjsg enum smudpm_v4_5_i2ccontrollerprotocol_e{
2474c349dbc7Sjsg     SMC_V4_5_I2C_CONTROLLER_PROTOCOL_VR_0,
2475c349dbc7Sjsg     SMC_V4_5_I2C_CONTROLLER_PROTOCOL_VR_1,
2476c349dbc7Sjsg     SMC_V4_5_I2C_CONTROLLER_PROTOCOL_TMP_0,
2477c349dbc7Sjsg     SMC_V4_5_I2C_CONTROLLER_PROTOCOL_TMP_1,
2478c349dbc7Sjsg     SMC_V4_5_I2C_CONTROLLER_PROTOCOL_SPARE_0,
2479c349dbc7Sjsg     SMC_V4_5_I2C_CONTROLLER_PROTOCOL_SPARE_1,
2480c349dbc7Sjsg     SMC_V4_5_I2C_CONTROLLER_PROTOCOL_COUNT,
2481c349dbc7Sjsg };
2482c349dbc7Sjsg 
2483c349dbc7Sjsg struct smudpm_i2c_controller_config_v2
2484c349dbc7Sjsg {
2485c349dbc7Sjsg     uint8_t   Enabled;
2486c349dbc7Sjsg     uint8_t   Speed;
2487c349dbc7Sjsg     uint8_t   Padding[2];
2488c349dbc7Sjsg     uint32_t  SlaveAddress;
2489c349dbc7Sjsg     uint8_t   ControllerPort;
2490c349dbc7Sjsg     uint8_t   ControllerName;
2491c349dbc7Sjsg     uint8_t   ThermalThrotter;
2492c349dbc7Sjsg     uint8_t   I2cProtocol;
2493c349dbc7Sjsg };
2494c349dbc7Sjsg 
2495c349dbc7Sjsg struct atom_smc_dpm_info_v4_5
2496c349dbc7Sjsg {
2497c349dbc7Sjsg   struct   atom_common_table_header  table_header;
2498c349dbc7Sjsg     // SECTION: BOARD PARAMETERS
2499c349dbc7Sjsg     // I2C Control
2500c349dbc7Sjsg   struct smudpm_i2c_controller_config_v2  I2cControllers[8];
2501c349dbc7Sjsg 
2502c349dbc7Sjsg   // SVI2 Board Parameters
2503c349dbc7Sjsg   uint16_t     MaxVoltageStepGfx; // In mV(Q2) Max voltage step that SMU will request. Multiple steps are taken if voltage change exceeds this value.
2504c349dbc7Sjsg   uint16_t     MaxVoltageStepSoc; // In mV(Q2) Max voltage step that SMU will request. Multiple steps are taken if voltage change exceeds this value.
2505c349dbc7Sjsg 
2506c349dbc7Sjsg   uint8_t      VddGfxVrMapping;   // Use VR_MAPPING* bitfields
2507c349dbc7Sjsg   uint8_t      VddSocVrMapping;   // Use VR_MAPPING* bitfields
2508c349dbc7Sjsg   uint8_t      VddMem0VrMapping;  // Use VR_MAPPING* bitfields
2509c349dbc7Sjsg   uint8_t      VddMem1VrMapping;  // Use VR_MAPPING* bitfields
2510c349dbc7Sjsg 
2511c349dbc7Sjsg   uint8_t      GfxUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode
2512c349dbc7Sjsg   uint8_t      SocUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode
2513c349dbc7Sjsg   uint8_t      ExternalSensorPresent; // External RDI connected to TMON (aka TEMP IN)
2514c349dbc7Sjsg   uint8_t      Padding8_V;
2515c349dbc7Sjsg 
2516c349dbc7Sjsg   // Telemetry Settings
2517c349dbc7Sjsg   uint16_t     GfxMaxCurrent;   // in Amps
2518c349dbc7Sjsg   uint8_t      GfxOffset;       // in Amps
2519c349dbc7Sjsg   uint8_t      Padding_TelemetryGfx;
2520c349dbc7Sjsg   uint16_t     SocMaxCurrent;   // in Amps
2521c349dbc7Sjsg   uint8_t      SocOffset;       // in Amps
2522c349dbc7Sjsg   uint8_t      Padding_TelemetrySoc;
2523c349dbc7Sjsg 
2524c349dbc7Sjsg   uint16_t     Mem0MaxCurrent;   // in Amps
2525c349dbc7Sjsg   uint8_t      Mem0Offset;       // in Amps
2526c349dbc7Sjsg   uint8_t      Padding_TelemetryMem0;
2527c349dbc7Sjsg 
2528c349dbc7Sjsg   uint16_t     Mem1MaxCurrent;   // in Amps
2529c349dbc7Sjsg   uint8_t      Mem1Offset;       // in Amps
2530c349dbc7Sjsg   uint8_t      Padding_TelemetryMem1;
2531c349dbc7Sjsg 
2532c349dbc7Sjsg   // GPIO Settings
2533c349dbc7Sjsg   uint8_t      AcDcGpio;        // GPIO pin configured for AC/DC switching
2534c349dbc7Sjsg   uint8_t      AcDcPolarity;    // GPIO polarity for AC/DC switching
2535c349dbc7Sjsg   uint8_t      VR0HotGpio;      // GPIO pin configured for VR0 HOT event
2536c349dbc7Sjsg   uint8_t      VR0HotPolarity;  // GPIO polarity for VR0 HOT event
2537c349dbc7Sjsg 
2538c349dbc7Sjsg   uint8_t      VR1HotGpio;      // GPIO pin configured for VR1 HOT event
2539c349dbc7Sjsg   uint8_t      VR1HotPolarity;  // GPIO polarity for VR1 HOT event
2540c349dbc7Sjsg   uint8_t      GthrGpio;        // GPIO pin configured for GTHR Event
2541c349dbc7Sjsg   uint8_t      GthrPolarity;    // replace GPIO polarity for GTHR
2542c349dbc7Sjsg 
2543c349dbc7Sjsg   // LED Display Settings
2544c349dbc7Sjsg   uint8_t      LedPin0;         // GPIO number for LedPin[0]
2545c349dbc7Sjsg   uint8_t      LedPin1;         // GPIO number for LedPin[1]
2546c349dbc7Sjsg   uint8_t      LedPin2;         // GPIO number for LedPin[2]
2547c349dbc7Sjsg   uint8_t      padding8_4;
2548c349dbc7Sjsg 
2549c349dbc7Sjsg   // GFXCLK PLL Spread Spectrum
2550c349dbc7Sjsg   uint8_t      PllGfxclkSpreadEnabled;   // on or off
2551c349dbc7Sjsg   uint8_t      PllGfxclkSpreadPercent;   // Q4.4
2552c349dbc7Sjsg   uint16_t     PllGfxclkSpreadFreq;      // kHz
2553c349dbc7Sjsg 
2554c349dbc7Sjsg   // GFXCLK DFLL Spread Spectrum
2555c349dbc7Sjsg   uint8_t      DfllGfxclkSpreadEnabled;   // on or off
2556c349dbc7Sjsg   uint8_t      DfllGfxclkSpreadPercent;   // Q4.4
2557c349dbc7Sjsg   uint16_t     DfllGfxclkSpreadFreq;      // kHz
2558c349dbc7Sjsg 
2559c349dbc7Sjsg   // UCLK Spread Spectrum
2560c349dbc7Sjsg   uint8_t      UclkSpreadEnabled;   // on or off
2561c349dbc7Sjsg   uint8_t      UclkSpreadPercent;   // Q4.4
2562c349dbc7Sjsg   uint16_t     UclkSpreadFreq;      // kHz
2563c349dbc7Sjsg 
2564c349dbc7Sjsg   // SOCCLK Spread Spectrum
2565c349dbc7Sjsg   uint8_t      SoclkSpreadEnabled;   // on or off
2566c349dbc7Sjsg   uint8_t      SocclkSpreadPercent;   // Q4.4
2567c349dbc7Sjsg   uint16_t     SocclkSpreadFreq;      // kHz
2568c349dbc7Sjsg 
2569c349dbc7Sjsg   // Total board power
2570c349dbc7Sjsg   uint16_t     TotalBoardPower;     //Only needed for TCP Estimated case, where TCP = TGP+Total Board Power
2571c349dbc7Sjsg   uint16_t     BoardPadding;
2572c349dbc7Sjsg 
2573c349dbc7Sjsg   // Mvdd Svi2 Div Ratio Setting
2574c349dbc7Sjsg   uint32_t MvddRatio; // This is used for MVDD Vid workaround. It has 16 fractional bits (Q16.16)
2575c349dbc7Sjsg 
2576c349dbc7Sjsg   uint32_t     BoardReserved[9];
2577c349dbc7Sjsg 
2578c349dbc7Sjsg };
2579c349dbc7Sjsg 
2580c349dbc7Sjsg struct atom_smc_dpm_info_v4_6
2581c349dbc7Sjsg {
2582c349dbc7Sjsg   struct   atom_common_table_header  table_header;
2583c349dbc7Sjsg   // section: board parameters
2584c349dbc7Sjsg   uint32_t     i2c_padding[3];   // old i2c control are moved to new area
2585c349dbc7Sjsg 
2586c349dbc7Sjsg   uint16_t     maxvoltagestepgfx; // in mv(q2) max voltage step that smu will request. multiple steps are taken if voltage change exceeds this value.
2587c349dbc7Sjsg   uint16_t     maxvoltagestepsoc; // in mv(q2) max voltage step that smu will request. multiple steps are taken if voltage change exceeds this value.
2588c349dbc7Sjsg 
2589c349dbc7Sjsg   uint8_t      vddgfxvrmapping;     // use vr_mapping* bitfields
2590c349dbc7Sjsg   uint8_t      vddsocvrmapping;     // use vr_mapping* bitfields
2591c349dbc7Sjsg   uint8_t      vddmemvrmapping;     // use vr_mapping* bitfields
2592c349dbc7Sjsg   uint8_t      boardvrmapping;      // use vr_mapping* bitfields
2593c349dbc7Sjsg 
2594c349dbc7Sjsg   uint8_t      gfxulvphasesheddingmask; // set this to 1 to set psi0/1 to 1 in ulv mode
2595c349dbc7Sjsg   uint8_t      externalsensorpresent; // external rdi connected to tmon (aka temp in)
2596c349dbc7Sjsg   uint8_t      padding8_v[2];
2597c349dbc7Sjsg 
2598c349dbc7Sjsg   // telemetry settings
2599c349dbc7Sjsg   uint16_t     gfxmaxcurrent;   // in amps
2600c349dbc7Sjsg   uint8_t      gfxoffset;       // in amps
2601c349dbc7Sjsg   uint8_t      padding_telemetrygfx;
2602c349dbc7Sjsg 
2603c349dbc7Sjsg   uint16_t     socmaxcurrent;   // in amps
2604c349dbc7Sjsg   uint8_t      socoffset;       // in amps
2605c349dbc7Sjsg   uint8_t      padding_telemetrysoc;
2606c349dbc7Sjsg 
2607c349dbc7Sjsg   uint16_t     memmaxcurrent;   // in amps
2608c349dbc7Sjsg   uint8_t      memoffset;       // in amps
2609c349dbc7Sjsg   uint8_t      padding_telemetrymem;
2610c349dbc7Sjsg 
2611c349dbc7Sjsg   uint16_t     boardmaxcurrent;   // in amps
2612c349dbc7Sjsg   uint8_t      boardoffset;       // in amps
2613c349dbc7Sjsg   uint8_t      padding_telemetryboardinput;
2614c349dbc7Sjsg 
2615c349dbc7Sjsg   // gpio settings
2616c349dbc7Sjsg   uint8_t      vr0hotgpio;      // gpio pin configured for vr0 hot event
2617c349dbc7Sjsg   uint8_t      vr0hotpolarity;  // gpio polarity for vr0 hot event
2618c349dbc7Sjsg   uint8_t      vr1hotgpio;      // gpio pin configured for vr1 hot event
2619c349dbc7Sjsg   uint8_t      vr1hotpolarity;  // gpio polarity for vr1 hot event
2620c349dbc7Sjsg 
2621c349dbc7Sjsg  // gfxclk pll spread spectrum
2622c349dbc7Sjsg   uint8_t	   pllgfxclkspreadenabled;	// on or off
2623c349dbc7Sjsg   uint8_t	   pllgfxclkspreadpercent;	// q4.4
2624c349dbc7Sjsg   uint16_t	   pllgfxclkspreadfreq;		// khz
2625c349dbc7Sjsg 
2626c349dbc7Sjsg  // uclk spread spectrum
2627c349dbc7Sjsg   uint8_t	   uclkspreadenabled;   // on or off
2628c349dbc7Sjsg   uint8_t	   uclkspreadpercent;   // q4.4
2629c349dbc7Sjsg   uint16_t	   uclkspreadfreq;	   // khz
2630c349dbc7Sjsg 
2631c349dbc7Sjsg  // fclk spread spectrum
2632c349dbc7Sjsg   uint8_t	   fclkspreadenabled;   // on or off
2633c349dbc7Sjsg   uint8_t	   fclkspreadpercent;   // q4.4
2634c349dbc7Sjsg   uint16_t	   fclkspreadfreq;	   // khz
2635c349dbc7Sjsg 
2636c349dbc7Sjsg 
2637c349dbc7Sjsg   // gfxclk fll spread spectrum
2638c349dbc7Sjsg   uint8_t      fllgfxclkspreadenabled;   // on or off
2639c349dbc7Sjsg   uint8_t      fllgfxclkspreadpercent;   // q4.4
2640c349dbc7Sjsg   uint16_t     fllgfxclkspreadfreq;      // khz
2641c349dbc7Sjsg 
2642c349dbc7Sjsg   // i2c controller structure
2643c349dbc7Sjsg   struct smudpm_i2c_controller_config_v2 i2ccontrollers[8];
2644c349dbc7Sjsg 
2645c349dbc7Sjsg   // memory section
2646c349dbc7Sjsg   uint32_t	 memorychannelenabled; // for dram use only, max 32 channels enabled bit mask.
2647c349dbc7Sjsg 
2648c349dbc7Sjsg   uint8_t 	 drambitwidth; // for dram use only.  see dram bit width type defines
2649c349dbc7Sjsg   uint8_t 	 paddingmem[3];
2650c349dbc7Sjsg 
2651c349dbc7Sjsg 	// total board power
2652c349dbc7Sjsg   uint16_t	 totalboardpower;	  //only needed for tcp estimated case, where tcp = tgp+total board power
2653c349dbc7Sjsg   uint16_t	 boardpadding;
2654c349dbc7Sjsg 
2655c349dbc7Sjsg 	// section: xgmi training
2656c349dbc7Sjsg   uint8_t 	 xgmilinkspeed[4];
2657c349dbc7Sjsg   uint8_t 	 xgmilinkwidth[4];
2658c349dbc7Sjsg 
2659c349dbc7Sjsg   uint16_t	 xgmifclkfreq[4];
2660c349dbc7Sjsg   uint16_t	 xgmisocvoltage[4];
2661c349dbc7Sjsg 
2662c349dbc7Sjsg   // reserved
2663c349dbc7Sjsg   uint32_t   boardreserved[10];
2664c349dbc7Sjsg };
2665c349dbc7Sjsg 
2666ad8b1aafSjsg struct atom_smc_dpm_info_v4_7
2667ad8b1aafSjsg {
2668ad8b1aafSjsg   struct   atom_common_table_header  table_header;
2669ad8b1aafSjsg     // SECTION: BOARD PARAMETERS
2670ad8b1aafSjsg     // I2C Control
2671ad8b1aafSjsg   struct smudpm_i2c_controller_config_v2  I2cControllers[8];
2672ad8b1aafSjsg 
2673ad8b1aafSjsg   // SVI2 Board Parameters
2674ad8b1aafSjsg   uint16_t     MaxVoltageStepGfx; // In mV(Q2) Max voltage step that SMU will request. Multiple steps are taken if voltage change exceeds this value.
2675ad8b1aafSjsg   uint16_t     MaxVoltageStepSoc; // In mV(Q2) Max voltage step that SMU will request. Multiple steps are taken if voltage change exceeds this value.
2676ad8b1aafSjsg 
2677ad8b1aafSjsg   uint8_t      VddGfxVrMapping;   // Use VR_MAPPING* bitfields
2678ad8b1aafSjsg   uint8_t      VddSocVrMapping;   // Use VR_MAPPING* bitfields
2679ad8b1aafSjsg   uint8_t      VddMem0VrMapping;  // Use VR_MAPPING* bitfields
2680ad8b1aafSjsg   uint8_t      VddMem1VrMapping;  // Use VR_MAPPING* bitfields
2681ad8b1aafSjsg 
2682ad8b1aafSjsg   uint8_t      GfxUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode
2683ad8b1aafSjsg   uint8_t      SocUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode
2684ad8b1aafSjsg   uint8_t      ExternalSensorPresent; // External RDI connected to TMON (aka TEMP IN)
2685ad8b1aafSjsg   uint8_t      Padding8_V;
2686ad8b1aafSjsg 
2687ad8b1aafSjsg   // Telemetry Settings
2688ad8b1aafSjsg   uint16_t     GfxMaxCurrent;   // in Amps
2689ad8b1aafSjsg   uint8_t      GfxOffset;       // in Amps
2690ad8b1aafSjsg   uint8_t      Padding_TelemetryGfx;
2691ad8b1aafSjsg   uint16_t     SocMaxCurrent;   // in Amps
2692ad8b1aafSjsg   uint8_t      SocOffset;       // in Amps
2693ad8b1aafSjsg   uint8_t      Padding_TelemetrySoc;
2694ad8b1aafSjsg 
2695ad8b1aafSjsg   uint16_t     Mem0MaxCurrent;   // in Amps
2696ad8b1aafSjsg   uint8_t      Mem0Offset;       // in Amps
2697ad8b1aafSjsg   uint8_t      Padding_TelemetryMem0;
2698ad8b1aafSjsg 
2699ad8b1aafSjsg   uint16_t     Mem1MaxCurrent;   // in Amps
2700ad8b1aafSjsg   uint8_t      Mem1Offset;       // in Amps
2701ad8b1aafSjsg   uint8_t      Padding_TelemetryMem1;
2702ad8b1aafSjsg 
2703ad8b1aafSjsg   // GPIO Settings
2704ad8b1aafSjsg   uint8_t      AcDcGpio;        // GPIO pin configured for AC/DC switching
2705ad8b1aafSjsg   uint8_t      AcDcPolarity;    // GPIO polarity for AC/DC switching
2706ad8b1aafSjsg   uint8_t      VR0HotGpio;      // GPIO pin configured for VR0 HOT event
2707ad8b1aafSjsg   uint8_t      VR0HotPolarity;  // GPIO polarity for VR0 HOT event
2708ad8b1aafSjsg 
2709ad8b1aafSjsg   uint8_t      VR1HotGpio;      // GPIO pin configured for VR1 HOT event
2710ad8b1aafSjsg   uint8_t      VR1HotPolarity;  // GPIO polarity for VR1 HOT event
2711ad8b1aafSjsg   uint8_t      GthrGpio;        // GPIO pin configured for GTHR Event
2712ad8b1aafSjsg   uint8_t      GthrPolarity;    // replace GPIO polarity for GTHR
2713ad8b1aafSjsg 
2714ad8b1aafSjsg   // LED Display Settings
2715ad8b1aafSjsg   uint8_t      LedPin0;         // GPIO number for LedPin[0]
2716ad8b1aafSjsg   uint8_t      LedPin1;         // GPIO number for LedPin[1]
2717ad8b1aafSjsg   uint8_t      LedPin2;         // GPIO number for LedPin[2]
2718ad8b1aafSjsg   uint8_t      padding8_4;
2719ad8b1aafSjsg 
2720ad8b1aafSjsg   // GFXCLK PLL Spread Spectrum
2721ad8b1aafSjsg   uint8_t      PllGfxclkSpreadEnabled;   // on or off
2722ad8b1aafSjsg   uint8_t      PllGfxclkSpreadPercent;   // Q4.4
2723ad8b1aafSjsg   uint16_t     PllGfxclkSpreadFreq;      // kHz
2724ad8b1aafSjsg 
2725ad8b1aafSjsg   // GFXCLK DFLL Spread Spectrum
2726ad8b1aafSjsg   uint8_t      DfllGfxclkSpreadEnabled;   // on or off
2727ad8b1aafSjsg   uint8_t      DfllGfxclkSpreadPercent;   // Q4.4
2728ad8b1aafSjsg   uint16_t     DfllGfxclkSpreadFreq;      // kHz
2729ad8b1aafSjsg 
2730ad8b1aafSjsg   // UCLK Spread Spectrum
2731ad8b1aafSjsg   uint8_t      UclkSpreadEnabled;   // on or off
2732ad8b1aafSjsg   uint8_t      UclkSpreadPercent;   // Q4.4
2733ad8b1aafSjsg   uint16_t     UclkSpreadFreq;      // kHz
2734ad8b1aafSjsg 
2735ad8b1aafSjsg   // SOCCLK Spread Spectrum
2736ad8b1aafSjsg   uint8_t      SoclkSpreadEnabled;   // on or off
2737ad8b1aafSjsg   uint8_t      SocclkSpreadPercent;   // Q4.4
2738ad8b1aafSjsg   uint16_t     SocclkSpreadFreq;      // kHz
2739ad8b1aafSjsg 
2740ad8b1aafSjsg   // Total board power
2741ad8b1aafSjsg   uint16_t     TotalBoardPower;     //Only needed for TCP Estimated case, where TCP = TGP+Total Board Power
2742ad8b1aafSjsg   uint16_t     BoardPadding;
2743ad8b1aafSjsg 
2744ad8b1aafSjsg   // Mvdd Svi2 Div Ratio Setting
2745ad8b1aafSjsg   uint32_t     MvddRatio; // This is used for MVDD Vid workaround. It has 16 fractional bits (Q16.16)
2746ad8b1aafSjsg 
2747ad8b1aafSjsg   // GPIO pins for I2C communications with 2nd controller for Input Telemetry Sequence
2748ad8b1aafSjsg   uint8_t      GpioI2cScl;          // Serial Clock
2749ad8b1aafSjsg   uint8_t      GpioI2cSda;          // Serial Data
2750ad8b1aafSjsg   uint16_t     GpioPadding;
2751ad8b1aafSjsg 
2752ad8b1aafSjsg   // Additional LED Display Settings
2753ad8b1aafSjsg   uint8_t      LedPin3;         // GPIO number for LedPin[3] - PCIE GEN Speed
2754ad8b1aafSjsg   uint8_t      LedPin4;         // GPIO number for LedPin[4] - PMFW Error Status
2755ad8b1aafSjsg   uint16_t     LedEnableMask;
2756ad8b1aafSjsg 
2757ad8b1aafSjsg   // Power Limit Scalars
2758ad8b1aafSjsg   uint8_t      PowerLimitScalar[4];    //[PPT_THROTTLER_COUNT]
2759ad8b1aafSjsg 
2760ad8b1aafSjsg   uint8_t      MvddUlvPhaseSheddingMask;
2761ad8b1aafSjsg   uint8_t      VddciUlvPhaseSheddingMask;
2762ad8b1aafSjsg   uint8_t      Padding8_Psi1;
2763ad8b1aafSjsg   uint8_t      Padding8_Psi2;
2764ad8b1aafSjsg 
2765ad8b1aafSjsg   uint32_t     BoardReserved[5];
2766ad8b1aafSjsg };
2767ad8b1aafSjsg 
2768ad8b1aafSjsg struct smudpm_i2c_controller_config_v3
2769ad8b1aafSjsg {
2770ad8b1aafSjsg   uint8_t   Enabled;
2771ad8b1aafSjsg   uint8_t   Speed;
2772ad8b1aafSjsg   uint8_t   SlaveAddress;
2773ad8b1aafSjsg   uint8_t   ControllerPort;
2774ad8b1aafSjsg   uint8_t   ControllerName;
2775ad8b1aafSjsg   uint8_t   ThermalThrotter;
2776ad8b1aafSjsg   uint8_t   I2cProtocol;
2777ad8b1aafSjsg   uint8_t   PaddingConfig;
2778ad8b1aafSjsg };
2779ad8b1aafSjsg 
2780ad8b1aafSjsg struct atom_smc_dpm_info_v4_9
2781ad8b1aafSjsg {
2782ad8b1aafSjsg   struct   atom_common_table_header  table_header;
2783ad8b1aafSjsg 
2784ad8b1aafSjsg   //SECTION: Gaming Clocks
2785ad8b1aafSjsg   //uint32_t     GamingClk[6];
2786ad8b1aafSjsg 
2787ad8b1aafSjsg   // SECTION: I2C Control
2788ad8b1aafSjsg   struct smudpm_i2c_controller_config_v3  I2cControllers[16];
2789ad8b1aafSjsg 
2790ad8b1aafSjsg   uint8_t      GpioScl;  // GPIO Number for SCL Line, used only for CKSVII2C1
2791ad8b1aafSjsg   uint8_t      GpioSda;  // GPIO Number for SDA Line, used only for CKSVII2C1
2792ad8b1aafSjsg   uint8_t      FchUsbPdSlaveAddr; //For requesting USB PD controller S-states via FCH I2C when entering PME turn off
2793ad8b1aafSjsg   uint8_t      I2cSpare;
2794ad8b1aafSjsg 
2795ad8b1aafSjsg   // SECTION: SVI2 Board Parameters
2796ad8b1aafSjsg   uint8_t      VddGfxVrMapping;   // Use VR_MAPPING* bitfields
2797ad8b1aafSjsg   uint8_t      VddSocVrMapping;   // Use VR_MAPPING* bitfields
2798ad8b1aafSjsg   uint8_t      VddMem0VrMapping;  // Use VR_MAPPING* bitfields
2799ad8b1aafSjsg   uint8_t      VddMem1VrMapping;  // Use VR_MAPPING* bitfields
2800ad8b1aafSjsg 
2801ad8b1aafSjsg   uint8_t      GfxUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode
2802ad8b1aafSjsg   uint8_t      SocUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode
2803ad8b1aafSjsg   uint8_t      VddciUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode
2804ad8b1aafSjsg   uint8_t      MvddUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode
2805ad8b1aafSjsg 
2806ad8b1aafSjsg   // SECTION: Telemetry Settings
2807ad8b1aafSjsg   uint16_t     GfxMaxCurrent;   // in Amps
2808ad8b1aafSjsg   uint8_t      GfxOffset;       // in Amps
2809ad8b1aafSjsg   uint8_t      Padding_TelemetryGfx;
2810ad8b1aafSjsg 
2811ad8b1aafSjsg   uint16_t     SocMaxCurrent;   // in Amps
2812ad8b1aafSjsg   uint8_t      SocOffset;       // in Amps
2813ad8b1aafSjsg   uint8_t      Padding_TelemetrySoc;
2814ad8b1aafSjsg 
2815ad8b1aafSjsg   uint16_t     Mem0MaxCurrent;   // in Amps
2816ad8b1aafSjsg   uint8_t      Mem0Offset;       // in Amps
2817ad8b1aafSjsg   uint8_t      Padding_TelemetryMem0;
2818ad8b1aafSjsg 
2819ad8b1aafSjsg   uint16_t     Mem1MaxCurrent;   // in Amps
2820ad8b1aafSjsg   uint8_t      Mem1Offset;       // in Amps
2821ad8b1aafSjsg   uint8_t      Padding_TelemetryMem1;
2822ad8b1aafSjsg 
2823ad8b1aafSjsg   uint32_t     MvddRatio; // This is used for MVDD  Svi2 Div Ratio workaround. It has 16 fractional bits (Q16.16)
2824ad8b1aafSjsg 
2825ad8b1aafSjsg   // SECTION: GPIO Settings
2826ad8b1aafSjsg   uint8_t      AcDcGpio;        // GPIO pin configured for AC/DC switching
2827ad8b1aafSjsg   uint8_t      AcDcPolarity;    // GPIO polarity for AC/DC switching
2828ad8b1aafSjsg   uint8_t      VR0HotGpio;      // GPIO pin configured for VR0 HOT event
2829ad8b1aafSjsg   uint8_t      VR0HotPolarity;  // GPIO polarity for VR0 HOT event
2830ad8b1aafSjsg 
2831ad8b1aafSjsg   uint8_t      VR1HotGpio;      // GPIO pin configured for VR1 HOT event
2832ad8b1aafSjsg   uint8_t      VR1HotPolarity;  // GPIO polarity for VR1 HOT event
2833ad8b1aafSjsg   uint8_t      GthrGpio;        // GPIO pin configured for GTHR Event
2834ad8b1aafSjsg   uint8_t      GthrPolarity;    // replace GPIO polarity for GTHR
2835ad8b1aafSjsg 
2836ad8b1aafSjsg   // LED Display Settings
2837ad8b1aafSjsg   uint8_t      LedPin0;         // GPIO number for LedPin[0]
2838ad8b1aafSjsg   uint8_t      LedPin1;         // GPIO number for LedPin[1]
2839ad8b1aafSjsg   uint8_t      LedPin2;         // GPIO number for LedPin[2]
2840ad8b1aafSjsg   uint8_t      LedEnableMask;
2841ad8b1aafSjsg 
2842ad8b1aafSjsg   uint8_t      LedPcie;        // GPIO number for PCIE results
2843ad8b1aafSjsg   uint8_t      LedError;       // GPIO number for Error Cases
2844ad8b1aafSjsg   uint8_t      LedSpare1[2];
2845ad8b1aafSjsg 
2846ad8b1aafSjsg   // SECTION: Clock Spread Spectrum
2847ad8b1aafSjsg 
2848ad8b1aafSjsg   // GFXCLK PLL Spread Spectrum
2849ad8b1aafSjsg   uint8_t      PllGfxclkSpreadEnabled;   // on or off
2850ad8b1aafSjsg   uint8_t      PllGfxclkSpreadPercent;   // Q4.4
2851ad8b1aafSjsg   uint16_t     PllGfxclkSpreadFreq;      // kHz
2852ad8b1aafSjsg 
2853ad8b1aafSjsg   // GFXCLK DFLL Spread Spectrum
2854ad8b1aafSjsg   uint8_t      DfllGfxclkSpreadEnabled;   // on or off
2855ad8b1aafSjsg   uint8_t      DfllGfxclkSpreadPercent;   // Q4.4
2856ad8b1aafSjsg   uint16_t     DfllGfxclkSpreadFreq;      // kHz
2857ad8b1aafSjsg 
2858ad8b1aafSjsg   // UCLK Spread Spectrum
2859ad8b1aafSjsg   uint8_t      UclkSpreadEnabled;   // on or off
2860ad8b1aafSjsg   uint8_t      UclkSpreadPercent;   // Q4.4
2861ad8b1aafSjsg   uint16_t     UclkSpreadFreq;      // kHz
2862ad8b1aafSjsg 
2863ad8b1aafSjsg   // FCLK Spread Spectrum
2864ad8b1aafSjsg   uint8_t      FclkSpreadEnabled;   // on or off
2865ad8b1aafSjsg   uint8_t      FclkSpreadPercent;   // Q4.4
2866ad8b1aafSjsg   uint16_t     FclkSpreadFreq;      // kHz
2867ad8b1aafSjsg 
2868ad8b1aafSjsg   // Section: Memory Config
2869ad8b1aafSjsg   uint32_t     MemoryChannelEnabled; // For DRAM use only, Max 32 channels enabled bit mask.
2870ad8b1aafSjsg 
2871ad8b1aafSjsg   uint8_t      DramBitWidth; // For DRAM use only.  See Dram Bit width type defines
2872ad8b1aafSjsg   uint8_t      PaddingMem1[3];
2873ad8b1aafSjsg 
2874ad8b1aafSjsg   // Section: Total Board Power
2875ad8b1aafSjsg   uint16_t     TotalBoardPower;     //Only needed for TCP Estimated case, where TCP = TGP+Total Board Power
2876ad8b1aafSjsg   uint16_t     BoardPowerPadding;
2877ad8b1aafSjsg 
2878ad8b1aafSjsg   // SECTION: XGMI Training
2879ad8b1aafSjsg   uint8_t      XgmiLinkSpeed   [4];
2880ad8b1aafSjsg   uint8_t      XgmiLinkWidth   [4];
2881ad8b1aafSjsg 
2882ad8b1aafSjsg   uint16_t     XgmiFclkFreq    [4];
2883ad8b1aafSjsg   uint16_t     XgmiSocVoltage  [4];
2884ad8b1aafSjsg 
2885ad8b1aafSjsg   // SECTION: Board Reserved
2886ad8b1aafSjsg 
2887ad8b1aafSjsg   uint32_t     BoardReserved[16];
2888ad8b1aafSjsg 
2889ad8b1aafSjsg };
2890ad8b1aafSjsg 
28915ca02815Sjsg struct atom_smc_dpm_info_v4_10
28925ca02815Sjsg {
28935ca02815Sjsg   struct   atom_common_table_header  table_header;
28945ca02815Sjsg 
28955ca02815Sjsg   // SECTION: BOARD PARAMETERS
28965ca02815Sjsg   // Telemetry Settings
28975ca02815Sjsg   uint16_t GfxMaxCurrent; // in Amps
28985ca02815Sjsg   uint8_t   GfxOffset;     // in Amps
28995ca02815Sjsg   uint8_t  Padding_TelemetryGfx;
29005ca02815Sjsg 
29015ca02815Sjsg   uint16_t SocMaxCurrent; // in Amps
29025ca02815Sjsg   uint8_t   SocOffset;     // in Amps
29035ca02815Sjsg   uint8_t  Padding_TelemetrySoc;
29045ca02815Sjsg 
29055ca02815Sjsg   uint16_t MemMaxCurrent; // in Amps
29065ca02815Sjsg   uint8_t   MemOffset;     // in Amps
29075ca02815Sjsg   uint8_t  Padding_TelemetryMem;
29085ca02815Sjsg 
29095ca02815Sjsg   uint16_t BoardMaxCurrent; // in Amps
29105ca02815Sjsg   uint8_t   BoardOffset;     // in Amps
29115ca02815Sjsg   uint8_t  Padding_TelemetryBoardInput;
29125ca02815Sjsg 
29135ca02815Sjsg   // Platform input telemetry voltage coefficient
29145ca02815Sjsg   uint32_t BoardVoltageCoeffA; // decode by /1000
29155ca02815Sjsg   uint32_t BoardVoltageCoeffB; // decode by /1000
29165ca02815Sjsg 
29175ca02815Sjsg   // GPIO Settings
29185ca02815Sjsg   uint8_t  VR0HotGpio;     // GPIO pin configured for VR0 HOT event
29195ca02815Sjsg   uint8_t  VR0HotPolarity; // GPIO polarity for VR0 HOT event
29205ca02815Sjsg   uint8_t  VR1HotGpio;     // GPIO pin configured for VR1 HOT event
29215ca02815Sjsg   uint8_t  VR1HotPolarity; // GPIO polarity for VR1 HOT event
29225ca02815Sjsg 
29235ca02815Sjsg   // UCLK Spread Spectrum
29245ca02815Sjsg   uint8_t  UclkSpreadEnabled; // on or off
29255ca02815Sjsg   uint8_t  UclkSpreadPercent; // Q4.4
29265ca02815Sjsg   uint16_t UclkSpreadFreq;    // kHz
29275ca02815Sjsg 
29285ca02815Sjsg   // FCLK Spread Spectrum
29295ca02815Sjsg   uint8_t  FclkSpreadEnabled; // on or off
29305ca02815Sjsg   uint8_t  FclkSpreadPercent; // Q4.4
29315ca02815Sjsg   uint16_t FclkSpreadFreq;    // kHz
29325ca02815Sjsg 
29335ca02815Sjsg   // I2C Controller Structure
29345ca02815Sjsg   struct smudpm_i2c_controller_config_v3  I2cControllers[8];
29355ca02815Sjsg 
29365ca02815Sjsg   // GPIO pins for I2C communications with 2nd controller for Input Telemetry Sequence
29375ca02815Sjsg   uint8_t  GpioI2cScl; // Serial Clock
29385ca02815Sjsg   uint8_t  GpioI2cSda; // Serial Data
29395ca02815Sjsg   uint16_t spare5;
29405ca02815Sjsg 
29415ca02815Sjsg   uint32_t reserved[16];
29425ca02815Sjsg };
29435ca02815Sjsg 
2944c349dbc7Sjsg /*
2945c349dbc7Sjsg   ***************************************************************************
2946fb4d8502Sjsg     Data Table asic_profiling_info  structure
2947fb4d8502Sjsg   ***************************************************************************
2948fb4d8502Sjsg */
2949fb4d8502Sjsg struct  atom_asic_profiling_info_v4_1
2950fb4d8502Sjsg {
2951fb4d8502Sjsg   struct  atom_common_table_header  table_header;
2952fb4d8502Sjsg   uint32_t  maxvddc;
2953fb4d8502Sjsg   uint32_t  minvddc;
2954fb4d8502Sjsg   uint32_t  avfs_meannsigma_acontant0;
2955fb4d8502Sjsg   uint32_t  avfs_meannsigma_acontant1;
2956fb4d8502Sjsg   uint32_t  avfs_meannsigma_acontant2;
2957fb4d8502Sjsg   uint16_t  avfs_meannsigma_dc_tol_sigma;
2958fb4d8502Sjsg   uint16_t  avfs_meannsigma_platform_mean;
2959fb4d8502Sjsg   uint16_t  avfs_meannsigma_platform_sigma;
2960fb4d8502Sjsg   uint32_t  gb_vdroop_table_cksoff_a0;
2961fb4d8502Sjsg   uint32_t  gb_vdroop_table_cksoff_a1;
2962fb4d8502Sjsg   uint32_t  gb_vdroop_table_cksoff_a2;
2963fb4d8502Sjsg   uint32_t  gb_vdroop_table_ckson_a0;
2964fb4d8502Sjsg   uint32_t  gb_vdroop_table_ckson_a1;
2965fb4d8502Sjsg   uint32_t  gb_vdroop_table_ckson_a2;
2966fb4d8502Sjsg   uint32_t  avfsgb_fuse_table_cksoff_m1;
2967fb4d8502Sjsg   uint32_t  avfsgb_fuse_table_cksoff_m2;
2968fb4d8502Sjsg   uint32_t  avfsgb_fuse_table_cksoff_b;
2969fb4d8502Sjsg   uint32_t  avfsgb_fuse_table_ckson_m1;
2970fb4d8502Sjsg   uint32_t  avfsgb_fuse_table_ckson_m2;
2971fb4d8502Sjsg   uint32_t  avfsgb_fuse_table_ckson_b;
2972fb4d8502Sjsg   uint16_t  max_voltage_0_25mv;
2973fb4d8502Sjsg   uint8_t   enable_gb_vdroop_table_cksoff;
2974fb4d8502Sjsg   uint8_t   enable_gb_vdroop_table_ckson;
2975fb4d8502Sjsg   uint8_t   enable_gb_fuse_table_cksoff;
2976fb4d8502Sjsg   uint8_t   enable_gb_fuse_table_ckson;
2977fb4d8502Sjsg   uint16_t  psm_age_comfactor;
2978fb4d8502Sjsg   uint8_t   enable_apply_avfs_cksoff_voltage;
2979fb4d8502Sjsg   uint8_t   reserved;
2980fb4d8502Sjsg   uint32_t  dispclk2gfxclk_a;
2981fb4d8502Sjsg   uint32_t  dispclk2gfxclk_b;
2982fb4d8502Sjsg   uint32_t  dispclk2gfxclk_c;
2983fb4d8502Sjsg   uint32_t  pixclk2gfxclk_a;
2984fb4d8502Sjsg   uint32_t  pixclk2gfxclk_b;
2985fb4d8502Sjsg   uint32_t  pixclk2gfxclk_c;
2986fb4d8502Sjsg   uint32_t  dcefclk2gfxclk_a;
2987fb4d8502Sjsg   uint32_t  dcefclk2gfxclk_b;
2988fb4d8502Sjsg   uint32_t  dcefclk2gfxclk_c;
2989fb4d8502Sjsg   uint32_t  phyclk2gfxclk_a;
2990fb4d8502Sjsg   uint32_t  phyclk2gfxclk_b;
2991fb4d8502Sjsg   uint32_t  phyclk2gfxclk_c;
2992fb4d8502Sjsg };
2993fb4d8502Sjsg 
2994fb4d8502Sjsg struct  atom_asic_profiling_info_v4_2 {
2995fb4d8502Sjsg 	struct  atom_common_table_header  table_header;
2996fb4d8502Sjsg 	uint32_t  maxvddc;
2997fb4d8502Sjsg 	uint32_t  minvddc;
2998fb4d8502Sjsg 	uint32_t  avfs_meannsigma_acontant0;
2999fb4d8502Sjsg 	uint32_t  avfs_meannsigma_acontant1;
3000fb4d8502Sjsg 	uint32_t  avfs_meannsigma_acontant2;
3001fb4d8502Sjsg 	uint16_t  avfs_meannsigma_dc_tol_sigma;
3002fb4d8502Sjsg 	uint16_t  avfs_meannsigma_platform_mean;
3003fb4d8502Sjsg 	uint16_t  avfs_meannsigma_platform_sigma;
3004fb4d8502Sjsg 	uint32_t  gb_vdroop_table_cksoff_a0;
3005fb4d8502Sjsg 	uint32_t  gb_vdroop_table_cksoff_a1;
3006fb4d8502Sjsg 	uint32_t  gb_vdroop_table_cksoff_a2;
3007fb4d8502Sjsg 	uint32_t  gb_vdroop_table_ckson_a0;
3008fb4d8502Sjsg 	uint32_t  gb_vdroop_table_ckson_a1;
3009fb4d8502Sjsg 	uint32_t  gb_vdroop_table_ckson_a2;
3010fb4d8502Sjsg 	uint32_t  avfsgb_fuse_table_cksoff_m1;
3011fb4d8502Sjsg 	uint32_t  avfsgb_fuse_table_cksoff_m2;
3012fb4d8502Sjsg 	uint32_t  avfsgb_fuse_table_cksoff_b;
3013fb4d8502Sjsg 	uint32_t  avfsgb_fuse_table_ckson_m1;
3014fb4d8502Sjsg 	uint32_t  avfsgb_fuse_table_ckson_m2;
3015fb4d8502Sjsg 	uint32_t  avfsgb_fuse_table_ckson_b;
3016fb4d8502Sjsg 	uint16_t  max_voltage_0_25mv;
3017fb4d8502Sjsg 	uint8_t   enable_gb_vdroop_table_cksoff;
3018fb4d8502Sjsg 	uint8_t   enable_gb_vdroop_table_ckson;
3019fb4d8502Sjsg 	uint8_t   enable_gb_fuse_table_cksoff;
3020fb4d8502Sjsg 	uint8_t   enable_gb_fuse_table_ckson;
3021fb4d8502Sjsg 	uint16_t  psm_age_comfactor;
3022fb4d8502Sjsg 	uint8_t   enable_apply_avfs_cksoff_voltage;
3023fb4d8502Sjsg 	uint8_t   reserved;
3024fb4d8502Sjsg 	uint32_t  dispclk2gfxclk_a;
3025fb4d8502Sjsg 	uint32_t  dispclk2gfxclk_b;
3026fb4d8502Sjsg 	uint32_t  dispclk2gfxclk_c;
3027fb4d8502Sjsg 	uint32_t  pixclk2gfxclk_a;
3028fb4d8502Sjsg 	uint32_t  pixclk2gfxclk_b;
3029fb4d8502Sjsg 	uint32_t  pixclk2gfxclk_c;
3030fb4d8502Sjsg 	uint32_t  dcefclk2gfxclk_a;
3031fb4d8502Sjsg 	uint32_t  dcefclk2gfxclk_b;
3032fb4d8502Sjsg 	uint32_t  dcefclk2gfxclk_c;
3033fb4d8502Sjsg 	uint32_t  phyclk2gfxclk_a;
3034fb4d8502Sjsg 	uint32_t  phyclk2gfxclk_b;
3035fb4d8502Sjsg 	uint32_t  phyclk2gfxclk_c;
3036fb4d8502Sjsg 	uint32_t  acg_gb_vdroop_table_a0;
3037fb4d8502Sjsg 	uint32_t  acg_gb_vdroop_table_a1;
3038fb4d8502Sjsg 	uint32_t  acg_gb_vdroop_table_a2;
3039fb4d8502Sjsg 	uint32_t  acg_avfsgb_fuse_table_m1;
3040fb4d8502Sjsg 	uint32_t  acg_avfsgb_fuse_table_m2;
3041fb4d8502Sjsg 	uint32_t  acg_avfsgb_fuse_table_b;
3042fb4d8502Sjsg 	uint8_t   enable_acg_gb_vdroop_table;
3043fb4d8502Sjsg 	uint8_t   enable_acg_gb_fuse_table;
3044fb4d8502Sjsg 	uint32_t  acg_dispclk2gfxclk_a;
3045fb4d8502Sjsg 	uint32_t  acg_dispclk2gfxclk_b;
3046fb4d8502Sjsg 	uint32_t  acg_dispclk2gfxclk_c;
3047fb4d8502Sjsg 	uint32_t  acg_pixclk2gfxclk_a;
3048fb4d8502Sjsg 	uint32_t  acg_pixclk2gfxclk_b;
3049fb4d8502Sjsg 	uint32_t  acg_pixclk2gfxclk_c;
3050fb4d8502Sjsg 	uint32_t  acg_dcefclk2gfxclk_a;
3051fb4d8502Sjsg 	uint32_t  acg_dcefclk2gfxclk_b;
3052fb4d8502Sjsg 	uint32_t  acg_dcefclk2gfxclk_c;
3053fb4d8502Sjsg 	uint32_t  acg_phyclk2gfxclk_a;
3054fb4d8502Sjsg 	uint32_t  acg_phyclk2gfxclk_b;
3055fb4d8502Sjsg 	uint32_t  acg_phyclk2gfxclk_c;
3056fb4d8502Sjsg };
3057fb4d8502Sjsg 
3058fb4d8502Sjsg /*
3059fb4d8502Sjsg   ***************************************************************************
3060fb4d8502Sjsg     Data Table multimedia_info  structure
3061fb4d8502Sjsg   ***************************************************************************
3062fb4d8502Sjsg */
3063fb4d8502Sjsg struct atom_multimedia_info_v2_1
3064fb4d8502Sjsg {
3065fb4d8502Sjsg   struct  atom_common_table_header  table_header;
3066fb4d8502Sjsg   uint8_t uvdip_min_ver;
3067fb4d8502Sjsg   uint8_t uvdip_max_ver;
3068fb4d8502Sjsg   uint8_t vceip_min_ver;
3069fb4d8502Sjsg   uint8_t vceip_max_ver;
3070fb4d8502Sjsg   uint16_t uvd_enc_max_input_width_pixels;
3071fb4d8502Sjsg   uint16_t uvd_enc_max_input_height_pixels;
3072fb4d8502Sjsg   uint16_t vce_enc_max_input_width_pixels;
3073fb4d8502Sjsg   uint16_t vce_enc_max_input_height_pixels;
3074fb4d8502Sjsg   uint32_t uvd_enc_max_bandwidth;           // 16x16 pixels/sec, codec independent
3075fb4d8502Sjsg   uint32_t vce_enc_max_bandwidth;           // 16x16 pixels/sec, codec independent
3076fb4d8502Sjsg };
3077fb4d8502Sjsg 
3078fb4d8502Sjsg 
3079fb4d8502Sjsg /*
3080fb4d8502Sjsg   ***************************************************************************
3081fb4d8502Sjsg     Data Table umc_info  structure
3082fb4d8502Sjsg   ***************************************************************************
3083fb4d8502Sjsg */
3084fb4d8502Sjsg struct atom_umc_info_v3_1
3085fb4d8502Sjsg {
3086fb4d8502Sjsg   struct  atom_common_table_header  table_header;
3087fb4d8502Sjsg   uint32_t ucode_version;
3088fb4d8502Sjsg   uint32_t ucode_rom_startaddr;
3089fb4d8502Sjsg   uint32_t ucode_length;
3090fb4d8502Sjsg   uint16_t umc_reg_init_offset;
3091fb4d8502Sjsg   uint16_t customer_ucode_name_offset;
3092fb4d8502Sjsg   uint16_t mclk_ss_percentage;
3093fb4d8502Sjsg   uint16_t mclk_ss_rate_10hz;
3094fb4d8502Sjsg   uint8_t umcip_min_ver;
3095fb4d8502Sjsg   uint8_t umcip_max_ver;
3096fb4d8502Sjsg   uint8_t vram_type;              //enum of atom_dgpu_vram_type
3097fb4d8502Sjsg   uint8_t umc_config;
3098fb4d8502Sjsg   uint32_t mem_refclk_10khz;
3099fb4d8502Sjsg };
3100fb4d8502Sjsg 
3101c349dbc7Sjsg // umc_info.umc_config
3102c349dbc7Sjsg enum atom_umc_config_def {
3103c349dbc7Sjsg   UMC_CONFIG__ENABLE_1KB_INTERLEAVE_MODE  =   0x00000001,
3104c349dbc7Sjsg   UMC_CONFIG__DEFAULT_MEM_ECC_ENABLE      =   0x00000002,
3105c349dbc7Sjsg   UMC_CONFIG__ENABLE_HBM_LANE_REPAIR      =   0x00000004,
3106c349dbc7Sjsg   UMC_CONFIG__ENABLE_BANK_HARVESTING      =   0x00000008,
3107c349dbc7Sjsg   UMC_CONFIG__ENABLE_PHY_REINIT           =   0x00000010,
3108c349dbc7Sjsg   UMC_CONFIG__DISABLE_UCODE_CHKSTATUS     =   0x00000020,
3109c349dbc7Sjsg };
3110c349dbc7Sjsg 
3111c349dbc7Sjsg struct atom_umc_info_v3_2
3112c349dbc7Sjsg {
3113c349dbc7Sjsg   struct  atom_common_table_header  table_header;
3114c349dbc7Sjsg   uint32_t ucode_version;
3115c349dbc7Sjsg   uint32_t ucode_rom_startaddr;
3116c349dbc7Sjsg   uint32_t ucode_length;
3117c349dbc7Sjsg   uint16_t umc_reg_init_offset;
3118c349dbc7Sjsg   uint16_t customer_ucode_name_offset;
3119c349dbc7Sjsg   uint16_t mclk_ss_percentage;
3120c349dbc7Sjsg   uint16_t mclk_ss_rate_10hz;
3121c349dbc7Sjsg   uint8_t umcip_min_ver;
3122c349dbc7Sjsg   uint8_t umcip_max_ver;
3123c349dbc7Sjsg   uint8_t vram_type;              //enum of atom_dgpu_vram_type
3124c349dbc7Sjsg   uint8_t umc_config;
3125c349dbc7Sjsg   uint32_t mem_refclk_10khz;
3126c349dbc7Sjsg   uint32_t pstate_uclk_10khz[4];
3127c349dbc7Sjsg   uint16_t umcgoldenoffset;
3128c349dbc7Sjsg   uint16_t densitygoldenoffset;
3129c349dbc7Sjsg };
3130c349dbc7Sjsg 
3131c349dbc7Sjsg struct atom_umc_info_v3_3
3132c349dbc7Sjsg {
3133c349dbc7Sjsg   struct  atom_common_table_header  table_header;
3134c349dbc7Sjsg   uint32_t ucode_reserved;
3135c349dbc7Sjsg   uint32_t ucode_rom_startaddr;
3136c349dbc7Sjsg   uint32_t ucode_length;
3137c349dbc7Sjsg   uint16_t umc_reg_init_offset;
3138c349dbc7Sjsg   uint16_t customer_ucode_name_offset;
3139c349dbc7Sjsg   uint16_t mclk_ss_percentage;
3140c349dbc7Sjsg   uint16_t mclk_ss_rate_10hz;
3141c349dbc7Sjsg   uint8_t umcip_min_ver;
3142c349dbc7Sjsg   uint8_t umcip_max_ver;
3143c349dbc7Sjsg   uint8_t vram_type;              //enum of atom_dgpu_vram_type
3144c349dbc7Sjsg   uint8_t umc_config;
3145c349dbc7Sjsg   uint32_t mem_refclk_10khz;
3146c349dbc7Sjsg   uint32_t pstate_uclk_10khz[4];
3147c349dbc7Sjsg   uint16_t umcgoldenoffset;
3148c349dbc7Sjsg   uint16_t densitygoldenoffset;
31495ca02815Sjsg   uint32_t umc_config1;
31505ca02815Sjsg   uint32_t bist_data_startaddr;
31515ca02815Sjsg   uint32_t reserved[2];
31525ca02815Sjsg };
31535ca02815Sjsg 
31545ca02815Sjsg enum atom_umc_config1_def {
31555ca02815Sjsg 	UMC_CONFIG1__ENABLE_PSTATE_PHASE_STORE_TRAIN = 0x00000001,
31565ca02815Sjsg 	UMC_CONFIG1__ENABLE_AUTO_FRAMING = 0x00000002,
31575ca02815Sjsg 	UMC_CONFIG1__ENABLE_RESTORE_BIST_DATA = 0x00000004,
31585ca02815Sjsg 	UMC_CONFIG1__DISABLE_STROBE_MODE = 0x00000008,
31595ca02815Sjsg 	UMC_CONFIG1__DEBUG_DATA_PARITY_EN = 0x00000010,
31605ca02815Sjsg 	UMC_CONFIG1__ENABLE_ECC_CAPABLE = 0x00010000,
3161c349dbc7Sjsg };
3162fb4d8502Sjsg 
3163f005ef32Sjsg struct atom_umc_info_v4_0 {
3164f005ef32Sjsg 	struct atom_common_table_header table_header;
3165f005ef32Sjsg 	uint32_t ucode_reserved[5];
3166f005ef32Sjsg 	uint8_t umcip_min_ver;
3167f005ef32Sjsg 	uint8_t umcip_max_ver;
3168f005ef32Sjsg 	uint8_t vram_type;
3169f005ef32Sjsg 	uint8_t umc_config;
3170f005ef32Sjsg 	uint32_t mem_refclk_10khz;
3171f005ef32Sjsg 	uint32_t clk_reserved[4];
3172f005ef32Sjsg 	uint32_t golden_reserved;
3173f005ef32Sjsg 	uint32_t umc_config1;
3174f005ef32Sjsg 	uint32_t reserved[2];
3175f005ef32Sjsg 	uint8_t channel_num;
3176f005ef32Sjsg 	uint8_t channel_width;
3177f005ef32Sjsg 	uint8_t channel_reserve[2];
3178f005ef32Sjsg 	uint8_t umc_info_reserved[16];
3179f005ef32Sjsg };
3180f005ef32Sjsg 
3181fb4d8502Sjsg /*
3182fb4d8502Sjsg   ***************************************************************************
3183fb4d8502Sjsg     Data Table vram_info  structure
3184fb4d8502Sjsg   ***************************************************************************
3185fb4d8502Sjsg */
3186c349dbc7Sjsg struct atom_vram_module_v9 {
3187fb4d8502Sjsg   // Design Specific Values
3188fb4d8502Sjsg   uint32_t  memory_size;                   // Total memory size in unit of MB for CONFIG_MEMSIZE zeros
3189c349dbc7Sjsg   uint32_t  channel_enable;                // bit vector, each bit indicate specific channel enable or not
3190c349dbc7Sjsg   uint32_t  max_mem_clk;                   // max memory clock of this memory in unit of 10kHz, =0 means it is not defined
3191c349dbc7Sjsg   uint16_t  reserved[3];
3192c349dbc7Sjsg   uint16_t  mem_voltage;                   // mem_voltage
3193fb4d8502Sjsg   uint16_t  vram_module_size;              // Size of atom_vram_module_v9
3194fb4d8502Sjsg   uint8_t   ext_memory_id;                 // Current memory module ID
3195fb4d8502Sjsg   uint8_t   memory_type;                   // enum of atom_dgpu_vram_type
3196fb4d8502Sjsg   uint8_t   channel_num;                   // Number of mem. channels supported in this module
3197fb4d8502Sjsg   uint8_t   channel_width;                 // CHANNEL_16BIT/CHANNEL_32BIT/CHANNEL_64BIT
3198fb4d8502Sjsg   uint8_t   density;                       // _8Mx32, _16Mx32, _16Mx16, _32Mx16
3199fb4d8502Sjsg   uint8_t   tunningset_id;                 // MC phy registers set per.
3200fb4d8502Sjsg   uint8_t   vender_rev_id;                 // [7:4] Revision, [3:0] Vendor code
3201fb4d8502Sjsg   uint8_t   refreshrate;                   // [1:0]=RefreshFactor (00=8ms, 01=16ms, 10=32ms,11=64ms)
3202c349dbc7Sjsg   uint8_t   hbm_ven_rev_id;		   // hbm_ven_rev_id
3203c349dbc7Sjsg   uint8_t   vram_rsd2;			   // reserved
3204fb4d8502Sjsg   char    dram_pnstring[20];               // part number end with '0'.
3205fb4d8502Sjsg };
3206fb4d8502Sjsg 
3207c349dbc7Sjsg struct atom_vram_info_header_v2_3 {
3208fb4d8502Sjsg   struct   atom_common_table_header table_header;
3209fb4d8502Sjsg   uint16_t mem_adjust_tbloffset;                         // offset of atom_umc_init_reg_block structure for memory vendor specific UMC adjust setting
3210fb4d8502Sjsg   uint16_t mem_clk_patch_tbloffset;                      // offset of atom_umc_init_reg_block structure for memory clock specific UMC setting
3211fb4d8502Sjsg   uint16_t mc_adjust_pertile_tbloffset;                  // offset of atom_umc_init_reg_block structure for Per Byte Offset Preset Settings
3212fb4d8502Sjsg   uint16_t mc_phyinit_tbloffset;                         // offset of atom_umc_init_reg_block structure for MC phy init set
3213fb4d8502Sjsg   uint16_t dram_data_remap_tbloffset;                    // reserved for now
3214c349dbc7Sjsg   uint16_t tmrs_seq_offset;                              // offset of HBM tmrs
3215c349dbc7Sjsg   uint16_t post_ucode_init_offset;                       // offset of atom_umc_init_reg_block structure for MC phy init after MC uCode complete umc init
3216c349dbc7Sjsg   uint16_t vram_rsd2;
3217fb4d8502Sjsg   uint8_t  vram_module_num;                              // indicate number of VRAM module
3218c349dbc7Sjsg   uint8_t  umcip_min_ver;
3219c349dbc7Sjsg   uint8_t  umcip_max_ver;
3220fb4d8502Sjsg   uint8_t  mc_phy_tile_num;                              // indicate the MCD tile number which use in DramDataRemapTbl and usMcAdjustPerTileTblOffset
3221fb4d8502Sjsg   struct   atom_vram_module_v9  vram_module[16];         // just for allocation, real number of blocks is in ucNumOfVRAMModule;
3222fb4d8502Sjsg };
3223fb4d8502Sjsg 
32241bb76ff1Sjsg /*
32251bb76ff1Sjsg   ***************************************************************************
32261bb76ff1Sjsg     Data Table vram_info v3.0  structure
32271bb76ff1Sjsg   ***************************************************************************
32281bb76ff1Sjsg */
32291bb76ff1Sjsg struct atom_vram_module_v3_0 {
32301bb76ff1Sjsg 	uint8_t density;
32311bb76ff1Sjsg 	uint8_t tunningset_id;
32321bb76ff1Sjsg 	uint8_t ext_memory_id;
32331bb76ff1Sjsg 	uint8_t dram_vendor_id;
32341bb76ff1Sjsg 	uint16_t dram_info_offset;
32351bb76ff1Sjsg 	uint16_t mem_tuning_offset;
32361bb76ff1Sjsg 	uint16_t tmrs_seq_offset;
32371bb76ff1Sjsg 	uint16_t reserved1;
32381bb76ff1Sjsg 	uint32_t dram_size_per_ch;
32391bb76ff1Sjsg 	uint32_t reserved[3];
32401bb76ff1Sjsg 	char dram_pnstring[40];
32411bb76ff1Sjsg };
32421bb76ff1Sjsg 
32431bb76ff1Sjsg struct atom_vram_info_header_v3_0 {
32441bb76ff1Sjsg 	struct atom_common_table_header table_header;
32451bb76ff1Sjsg 	uint16_t mem_tuning_table_offset;
32461bb76ff1Sjsg 	uint16_t dram_info_table_offset;
32471bb76ff1Sjsg 	uint16_t tmrs_table_offset;
32481bb76ff1Sjsg 	uint16_t mc_init_table_offset;
32491bb76ff1Sjsg 	uint16_t dram_data_remap_table_offset;
32501bb76ff1Sjsg 	uint16_t umc_emuinittable_offset;
32511bb76ff1Sjsg 	uint16_t reserved_sub_table_offset[2];
32521bb76ff1Sjsg 	uint8_t vram_module_num;
32531bb76ff1Sjsg 	uint8_t umcip_min_ver;
32541bb76ff1Sjsg 	uint8_t umcip_max_ver;
32551bb76ff1Sjsg 	uint8_t mc_phy_tile_num;
32561bb76ff1Sjsg 	uint8_t memory_type;
32571bb76ff1Sjsg 	uint8_t channel_num;
32581bb76ff1Sjsg 	uint8_t channel_width;
32591bb76ff1Sjsg 	uint8_t reserved1;
32601bb76ff1Sjsg 	uint32_t channel_enable;
32611bb76ff1Sjsg 	uint32_t channel1_enable;
32621bb76ff1Sjsg 	uint32_t feature_enable;
32631bb76ff1Sjsg 	uint32_t feature1_enable;
32641bb76ff1Sjsg 	uint32_t hardcode_mem_size;
32651bb76ff1Sjsg 	uint32_t reserved4[4];
32661bb76ff1Sjsg 	struct atom_vram_module_v3_0 vram_module[8];
32671bb76ff1Sjsg };
32681bb76ff1Sjsg 
3269fb4d8502Sjsg struct atom_umc_register_addr_info{
3270fb4d8502Sjsg   uint32_t  umc_register_addr:24;
3271fb4d8502Sjsg   uint32_t  umc_reg_type_ind:1;
3272fb4d8502Sjsg   uint32_t  umc_reg_rsvd:7;
3273fb4d8502Sjsg };
3274fb4d8502Sjsg 
3275fb4d8502Sjsg //atom_umc_register_addr_info.
3276fb4d8502Sjsg enum atom_umc_register_addr_info_flag{
3277fb4d8502Sjsg   b3ATOM_UMC_REG_ADD_INFO_INDIRECT_ACCESS  =0x01,
3278fb4d8502Sjsg };
3279fb4d8502Sjsg 
3280fb4d8502Sjsg union atom_umc_register_addr_info_access
3281fb4d8502Sjsg {
3282fb4d8502Sjsg   struct atom_umc_register_addr_info umc_reg_addr;
3283fb4d8502Sjsg   uint32_t u32umc_reg_addr;
3284fb4d8502Sjsg };
3285fb4d8502Sjsg 
3286fb4d8502Sjsg struct atom_umc_reg_setting_id_config{
3287fb4d8502Sjsg   uint32_t memclockrange:24;
3288fb4d8502Sjsg   uint32_t mem_blk_id:8;
3289fb4d8502Sjsg };
3290fb4d8502Sjsg 
3291fb4d8502Sjsg union atom_umc_reg_setting_id_config_access
3292fb4d8502Sjsg {
3293fb4d8502Sjsg   struct atom_umc_reg_setting_id_config umc_id_access;
3294fb4d8502Sjsg   uint32_t  u32umc_id_access;
3295fb4d8502Sjsg };
3296fb4d8502Sjsg 
3297fb4d8502Sjsg struct atom_umc_reg_setting_data_block{
3298fb4d8502Sjsg   union atom_umc_reg_setting_id_config_access  block_id;
3299fb4d8502Sjsg   uint32_t u32umc_reg_data[1];
3300fb4d8502Sjsg };
3301fb4d8502Sjsg 
3302fb4d8502Sjsg struct atom_umc_init_reg_block{
3303fb4d8502Sjsg   uint16_t umc_reg_num;
3304fb4d8502Sjsg   uint16_t reserved;
3305fb4d8502Sjsg   union atom_umc_register_addr_info_access umc_reg_list[1];     //for allocation purpose, the real number come from umc_reg_num;
3306fb4d8502Sjsg   struct atom_umc_reg_setting_data_block umc_reg_setting_list[1];
3307fb4d8502Sjsg };
3308fb4d8502Sjsg 
3309c349dbc7Sjsg struct atom_vram_module_v10 {
3310c349dbc7Sjsg   // Design Specific Values
3311c349dbc7Sjsg   uint32_t  memory_size;                   // Total memory size in unit of MB for CONFIG_MEMSIZE zeros
3312c349dbc7Sjsg   uint32_t  channel_enable;                // bit vector, each bit indicate specific channel enable or not
3313c349dbc7Sjsg   uint32_t  max_mem_clk;                   // max memory clock of this memory in unit of 10kHz, =0 means it is not defined
3314c349dbc7Sjsg   uint16_t  reserved[3];
3315c349dbc7Sjsg   uint16_t  mem_voltage;                   // mem_voltage
3316c349dbc7Sjsg   uint16_t  vram_module_size;              // Size of atom_vram_module_v9
3317c349dbc7Sjsg   uint8_t   ext_memory_id;                 // Current memory module ID
3318c349dbc7Sjsg   uint8_t   memory_type;                   // enum of atom_dgpu_vram_type
3319c349dbc7Sjsg   uint8_t   channel_num;                   // Number of mem. channels supported in this module
3320c349dbc7Sjsg   uint8_t   channel_width;                 // CHANNEL_16BIT/CHANNEL_32BIT/CHANNEL_64BIT
3321c349dbc7Sjsg   uint8_t   density;                       // _8Mx32, _16Mx32, _16Mx16, _32Mx16
3322c349dbc7Sjsg   uint8_t   tunningset_id;                 // MC phy registers set per
3323c349dbc7Sjsg   uint8_t   vender_rev_id;                 // [7:4] Revision, [3:0] Vendor code
3324c349dbc7Sjsg   uint8_t   refreshrate;                   // [1:0]=RefreshFactor (00=8ms, 01=16ms, 10=32ms,11=64ms)
3325c349dbc7Sjsg   uint8_t   vram_flags;			   // bit0= bankgroup enable
3326c349dbc7Sjsg   uint8_t   vram_rsd2;			   // reserved
3327c349dbc7Sjsg   uint16_t  gddr6_mr10;                    // gddr6 mode register10 value
3328c349dbc7Sjsg   uint16_t  gddr6_mr1;                     // gddr6 mode register1 value
3329c349dbc7Sjsg   uint16_t  gddr6_mr2;                     // gddr6 mode register2 value
3330c349dbc7Sjsg   uint16_t  gddr6_mr7;                     // gddr6 mode register7 value
3331c349dbc7Sjsg   char    dram_pnstring[20];               // part number end with '0'
3332c349dbc7Sjsg };
3333c349dbc7Sjsg 
3334c349dbc7Sjsg struct atom_vram_info_header_v2_4 {
3335c349dbc7Sjsg   struct   atom_common_table_header table_header;
3336c349dbc7Sjsg   uint16_t mem_adjust_tbloffset;                         // offset of atom_umc_init_reg_block structure for memory vendor specific UMC adjust setting
3337c349dbc7Sjsg   uint16_t mem_clk_patch_tbloffset;                      // offset of atom_umc_init_reg_block structure for memory clock specific UMC setting
3338c349dbc7Sjsg   uint16_t mc_adjust_pertile_tbloffset;                  // offset of atom_umc_init_reg_block structure for Per Byte Offset Preset Settings
3339c349dbc7Sjsg   uint16_t mc_phyinit_tbloffset;                         // offset of atom_umc_init_reg_block structure for MC phy init set
3340c349dbc7Sjsg   uint16_t dram_data_remap_tbloffset;                    // reserved for now
3341c349dbc7Sjsg   uint16_t reserved;                                     // offset of reserved
3342c349dbc7Sjsg   uint16_t post_ucode_init_offset;                       // offset of atom_umc_init_reg_block structure for MC phy init after MC uCode complete umc init
3343c349dbc7Sjsg   uint16_t vram_rsd2;
3344c349dbc7Sjsg   uint8_t  vram_module_num;                              // indicate number of VRAM module
3345c349dbc7Sjsg   uint8_t  umcip_min_ver;
3346c349dbc7Sjsg   uint8_t  umcip_max_ver;
3347c349dbc7Sjsg   uint8_t  mc_phy_tile_num;                              // indicate the MCD tile number which use in DramDataRemapTbl and usMcAdjustPerTileTblOffset
3348c349dbc7Sjsg   struct   atom_vram_module_v10  vram_module[16];        // just for allocation, real number of blocks is in ucNumOfVRAMModule;
3349c349dbc7Sjsg };
3350fb4d8502Sjsg 
3351ad8b1aafSjsg struct atom_vram_module_v11 {
3352ad8b1aafSjsg 	// Design Specific Values
3353ad8b1aafSjsg 	uint32_t  memory_size;                   // Total memory size in unit of MB for CONFIG_MEMSIZE zeros
3354ad8b1aafSjsg 	uint32_t  channel_enable;                // bit vector, each bit indicate specific channel enable or not
3355ad8b1aafSjsg 	uint16_t  mem_voltage;                   // mem_voltage
3356ad8b1aafSjsg 	uint16_t  vram_module_size;              // Size of atom_vram_module_v9
3357ad8b1aafSjsg 	uint8_t   ext_memory_id;                 // Current memory module ID
3358ad8b1aafSjsg 	uint8_t   memory_type;                   // enum of atom_dgpu_vram_type
3359ad8b1aafSjsg 	uint8_t   channel_num;                   // Number of mem. channels supported in this module
3360ad8b1aafSjsg 	uint8_t   channel_width;                 // CHANNEL_16BIT/CHANNEL_32BIT/CHANNEL_64BIT
3361ad8b1aafSjsg 	uint8_t   density;                       // _8Mx32, _16Mx32, _16Mx16, _32Mx16
3362ad8b1aafSjsg 	uint8_t   tunningset_id;                 // MC phy registers set per.
3363ad8b1aafSjsg 	uint16_t  reserved[4];                   // reserved
3364ad8b1aafSjsg 	uint8_t   vender_rev_id;                 // [7:4] Revision, [3:0] Vendor code
3365ad8b1aafSjsg 	uint8_t   refreshrate;			 // [1:0]=RefreshFactor (00=8ms, 01=16ms, 10=32ms,11=64ms)
3366ad8b1aafSjsg 	uint8_t   vram_flags;			 // bit0= bankgroup enable
3367ad8b1aafSjsg 	uint8_t   vram_rsd2;			 // reserved
3368ad8b1aafSjsg 	uint16_t  gddr6_mr10;                    // gddr6 mode register10 value
3369ad8b1aafSjsg 	uint16_t  gddr6_mr0;                     // gddr6 mode register0 value
3370ad8b1aafSjsg 	uint16_t  gddr6_mr1;                     // gddr6 mode register1 value
3371ad8b1aafSjsg 	uint16_t  gddr6_mr2;                     // gddr6 mode register2 value
3372ad8b1aafSjsg 	uint16_t  gddr6_mr4;                     // gddr6 mode register4 value
3373ad8b1aafSjsg 	uint16_t  gddr6_mr7;                     // gddr6 mode register7 value
3374ad8b1aafSjsg 	uint16_t  gddr6_mr8;                     // gddr6 mode register8 value
3375ad8b1aafSjsg 	char    dram_pnstring[40];               // part number end with '0'.
3376ad8b1aafSjsg };
3377ad8b1aafSjsg 
3378ad8b1aafSjsg struct atom_gddr6_ac_timing_v2_5 {
3379ad8b1aafSjsg 	uint32_t  u32umc_id_access;
3380ad8b1aafSjsg 	uint8_t  RL;
3381ad8b1aafSjsg 	uint8_t  WL;
3382ad8b1aafSjsg 	uint8_t  tRAS;
3383ad8b1aafSjsg 	uint8_t  tRC;
3384ad8b1aafSjsg 
3385ad8b1aafSjsg 	uint16_t  tREFI;
3386ad8b1aafSjsg 	uint8_t  tRFC;
3387ad8b1aafSjsg 	uint8_t  tRFCpb;
3388ad8b1aafSjsg 
3389ad8b1aafSjsg 	uint8_t  tRREFD;
3390ad8b1aafSjsg 	uint8_t  tRCDRD;
3391ad8b1aafSjsg 	uint8_t  tRCDWR;
3392ad8b1aafSjsg 	uint8_t  tRP;
3393ad8b1aafSjsg 
3394ad8b1aafSjsg 	uint8_t  tRRDS;
3395ad8b1aafSjsg 	uint8_t  tRRDL;
3396ad8b1aafSjsg 	uint8_t  tWR;
3397ad8b1aafSjsg 	uint8_t  tWTRS;
3398ad8b1aafSjsg 
3399ad8b1aafSjsg 	uint8_t  tWTRL;
3400ad8b1aafSjsg 	uint8_t  tFAW;
3401ad8b1aafSjsg 	uint8_t  tCCDS;
3402ad8b1aafSjsg 	uint8_t  tCCDL;
3403ad8b1aafSjsg 
3404ad8b1aafSjsg 	uint8_t  tCRCRL;
3405ad8b1aafSjsg 	uint8_t  tCRCWL;
3406ad8b1aafSjsg 	uint8_t  tCKE;
3407ad8b1aafSjsg 	uint8_t  tCKSRE;
3408ad8b1aafSjsg 
3409ad8b1aafSjsg 	uint8_t  tCKSRX;
3410ad8b1aafSjsg 	uint8_t  tRTPS;
3411ad8b1aafSjsg 	uint8_t  tRTPL;
3412ad8b1aafSjsg 	uint8_t  tMRD;
3413ad8b1aafSjsg 
3414ad8b1aafSjsg 	uint8_t  tMOD;
3415ad8b1aafSjsg 	uint8_t  tXS;
3416ad8b1aafSjsg 	uint8_t  tXHP;
3417ad8b1aafSjsg 	uint8_t  tXSMRS;
3418ad8b1aafSjsg 
3419ad8b1aafSjsg 	uint32_t  tXSH;
3420ad8b1aafSjsg 
3421ad8b1aafSjsg 	uint8_t  tPD;
3422ad8b1aafSjsg 	uint8_t  tXP;
3423ad8b1aafSjsg 	uint8_t  tCPDED;
3424ad8b1aafSjsg 	uint8_t  tACTPDE;
3425ad8b1aafSjsg 
3426ad8b1aafSjsg 	uint8_t  tPREPDE;
3427ad8b1aafSjsg 	uint8_t  tREFPDE;
3428ad8b1aafSjsg 	uint8_t  tMRSPDEN;
3429ad8b1aafSjsg 	uint8_t  tRDSRE;
3430ad8b1aafSjsg 
3431ad8b1aafSjsg 	uint8_t  tWRSRE;
3432ad8b1aafSjsg 	uint8_t  tPPD;
3433ad8b1aafSjsg 	uint8_t  tCCDMW;
3434ad8b1aafSjsg 	uint8_t  tWTRTR;
3435ad8b1aafSjsg 
3436ad8b1aafSjsg 	uint8_t  tLTLTR;
3437ad8b1aafSjsg 	uint8_t  tREFTR;
3438ad8b1aafSjsg 	uint8_t  VNDR;
3439ad8b1aafSjsg 	uint8_t  reserved[9];
3440ad8b1aafSjsg };
3441ad8b1aafSjsg 
3442ad8b1aafSjsg struct atom_gddr6_bit_byte_remap {
3443ad8b1aafSjsg 	uint32_t dphy_byteremap;    //mmUMC_DPHY_ByteRemap
3444ad8b1aafSjsg 	uint32_t dphy_bitremap0;    //mmUMC_DPHY_BitRemap0
3445ad8b1aafSjsg 	uint32_t dphy_bitremap1;    //mmUMC_DPHY_BitRemap1
3446ad8b1aafSjsg 	uint32_t dphy_bitremap2;    //mmUMC_DPHY_BitRemap2
3447ad8b1aafSjsg 	uint32_t aphy_bitremap0;    //mmUMC_APHY_BitRemap0
3448ad8b1aafSjsg 	uint32_t aphy_bitremap1;    //mmUMC_APHY_BitRemap1
3449ad8b1aafSjsg 	uint32_t phy_dram;          //mmUMC_PHY_DRAM
3450ad8b1aafSjsg };
3451ad8b1aafSjsg 
3452ad8b1aafSjsg struct atom_gddr6_dram_data_remap {
3453ad8b1aafSjsg 	uint32_t table_size;
3454ad8b1aafSjsg 	uint8_t phyintf_ck_inverted[8];     //UMC_PHY_PHYINTF_CNTL.INV_CK
3455ad8b1aafSjsg 	struct atom_gddr6_bit_byte_remap bit_byte_remap[16];
3456ad8b1aafSjsg };
3457ad8b1aafSjsg 
3458ad8b1aafSjsg struct atom_vram_info_header_v2_5 {
3459ad8b1aafSjsg 	struct   atom_common_table_header table_header;
3460ad8b1aafSjsg 	uint16_t mem_adjust_tbloffset;                         // offset of atom_umc_init_reg_block structure for memory vendor specific UMC adjust settings
3461ad8b1aafSjsg 	uint16_t gddr6_ac_timing_offset;                     // offset of atom_gddr6_ac_timing_v2_5 structure for memory clock specific UMC settings
3462ad8b1aafSjsg 	uint16_t mc_adjust_pertile_tbloffset;                  // offset of atom_umc_init_reg_block structure for Per Byte Offset Preset Settings
3463ad8b1aafSjsg 	uint16_t mc_phyinit_tbloffset;                         // offset of atom_umc_init_reg_block structure for MC phy init set
3464ad8b1aafSjsg 	uint16_t dram_data_remap_tbloffset;                    // offset of atom_gddr6_dram_data_remap array to indicate DRAM data lane to GPU mapping
3465ad8b1aafSjsg 	uint16_t reserved;                                     // offset of reserved
3466ad8b1aafSjsg 	uint16_t post_ucode_init_offset;                       // offset of atom_umc_init_reg_block structure for MC phy init after MC uCode complete umc init
3467ad8b1aafSjsg 	uint16_t strobe_mode_patch_tbloffset;                  // offset of atom_umc_init_reg_block structure for Strobe Mode memory clock specific UMC settings
3468ad8b1aafSjsg 	uint8_t  vram_module_num;                              // indicate number of VRAM module
3469ad8b1aafSjsg 	uint8_t  umcip_min_ver;
3470ad8b1aafSjsg 	uint8_t  umcip_max_ver;
3471ad8b1aafSjsg 	uint8_t  mc_phy_tile_num;                              // indicate the MCD tile number which use in DramDataRemapTbl and usMcAdjustPerTileTblOffset
3472ad8b1aafSjsg 	struct   atom_vram_module_v11  vram_module[16];        // just for allocation, real number of blocks is in ucNumOfVRAMModule;
3473ad8b1aafSjsg };
3474ad8b1aafSjsg 
34755ca02815Sjsg struct atom_vram_info_header_v2_6 {
34765ca02815Sjsg 	struct atom_common_table_header table_header;
34775ca02815Sjsg 	uint16_t mem_adjust_tbloffset;
34785ca02815Sjsg 	uint16_t mem_clk_patch_tbloffset;
34795ca02815Sjsg 	uint16_t mc_adjust_pertile_tbloffset;
34805ca02815Sjsg 	uint16_t mc_phyinit_tbloffset;
34815ca02815Sjsg 	uint16_t dram_data_remap_tbloffset;
34825ca02815Sjsg 	uint16_t tmrs_seq_offset;
34835ca02815Sjsg 	uint16_t post_ucode_init_offset;
34845ca02815Sjsg 	uint16_t vram_rsd2;
34855ca02815Sjsg 	uint8_t  vram_module_num;
34865ca02815Sjsg 	uint8_t  umcip_min_ver;
34875ca02815Sjsg 	uint8_t  umcip_max_ver;
34885ca02815Sjsg 	uint8_t  mc_phy_tile_num;
34895ca02815Sjsg 	struct atom_vram_module_v9 vram_module[16];
34905ca02815Sjsg };
3491fb4d8502Sjsg /*
3492fb4d8502Sjsg   ***************************************************************************
3493fb4d8502Sjsg     Data Table voltageobject_info  structure
3494fb4d8502Sjsg   ***************************************************************************
3495fb4d8502Sjsg */
3496fb4d8502Sjsg struct  atom_i2c_data_entry
3497fb4d8502Sjsg {
3498fb4d8502Sjsg   uint16_t  i2c_reg_index;               // i2c register address, can be up to 16bit
3499fb4d8502Sjsg   uint16_t  i2c_reg_data;                // i2c register data, can be up to 16bit
3500fb4d8502Sjsg };
3501fb4d8502Sjsg 
3502fb4d8502Sjsg struct atom_voltage_object_header_v4{
3503fb4d8502Sjsg   uint8_t    voltage_type;                           //enum atom_voltage_type
3504fb4d8502Sjsg   uint8_t    voltage_mode;                           //enum atom_voltage_object_mode
3505fb4d8502Sjsg   uint16_t   object_size;                            //Size of Object
3506fb4d8502Sjsg };
3507fb4d8502Sjsg 
3508fb4d8502Sjsg // atom_voltage_object_header_v4.voltage_mode
3509fb4d8502Sjsg enum atom_voltage_object_mode
3510fb4d8502Sjsg {
3511fb4d8502Sjsg    VOLTAGE_OBJ_GPIO_LUT              =  0,        //VOLTAGE and GPIO Lookup table ->atom_gpio_voltage_object_v4
3512fb4d8502Sjsg    VOLTAGE_OBJ_VR_I2C_INIT_SEQ       =  3,        //VOLTAGE REGULATOR INIT sequece through I2C -> atom_i2c_voltage_object_v4
3513fb4d8502Sjsg    VOLTAGE_OBJ_PHASE_LUT             =  4,        //Set Vregulator Phase lookup table ->atom_gpio_voltage_object_v4
3514fb4d8502Sjsg    VOLTAGE_OBJ_SVID2                 =  7,        //Indicate voltage control by SVID2 ->atom_svid2_voltage_object_v4
3515fb4d8502Sjsg    VOLTAGE_OBJ_EVV                   =  8,
3516fb4d8502Sjsg    VOLTAGE_OBJ_MERGED_POWER          =  9,
3517fb4d8502Sjsg };
3518fb4d8502Sjsg 
3519fb4d8502Sjsg struct  atom_i2c_voltage_object_v4
3520fb4d8502Sjsg {
3521fb4d8502Sjsg    struct atom_voltage_object_header_v4 header;  // voltage mode = VOLTAGE_OBJ_VR_I2C_INIT_SEQ
3522fb4d8502Sjsg    uint8_t  regulator_id;                        //Indicate Voltage Regulator Id
3523fb4d8502Sjsg    uint8_t  i2c_id;
3524fb4d8502Sjsg    uint8_t  i2c_slave_addr;
3525fb4d8502Sjsg    uint8_t  i2c_control_offset;
3526fb4d8502Sjsg    uint8_t  i2c_flag;                            // Bit0: 0 - One byte data; 1 - Two byte data
3527fb4d8502Sjsg    uint8_t  i2c_speed;                           // =0, use default i2c speed, otherwise use it in unit of kHz.
3528fb4d8502Sjsg    uint8_t  reserved[2];
3529fb4d8502Sjsg    struct atom_i2c_data_entry i2cdatalut[1];     // end with 0xff
3530fb4d8502Sjsg };
3531fb4d8502Sjsg 
3532fb4d8502Sjsg // ATOM_I2C_VOLTAGE_OBJECT_V3.ucVoltageControlFlag
3533fb4d8502Sjsg enum atom_i2c_voltage_control_flag
3534fb4d8502Sjsg {
3535fb4d8502Sjsg    VOLTAGE_DATA_ONE_BYTE = 0,
3536fb4d8502Sjsg    VOLTAGE_DATA_TWO_BYTE = 1,
3537fb4d8502Sjsg };
3538fb4d8502Sjsg 
3539fb4d8502Sjsg 
3540fb4d8502Sjsg struct atom_voltage_gpio_map_lut
3541fb4d8502Sjsg {
3542fb4d8502Sjsg   uint32_t  voltage_gpio_reg_val;              // The Voltage ID which is used to program GPIO register
3543fb4d8502Sjsg   uint16_t  voltage_level_mv;                  // The corresponding Voltage Value, in mV
3544fb4d8502Sjsg };
3545fb4d8502Sjsg 
3546fb4d8502Sjsg struct atom_gpio_voltage_object_v4
3547fb4d8502Sjsg {
3548fb4d8502Sjsg    struct atom_voltage_object_header_v4 header;  // voltage mode = VOLTAGE_OBJ_GPIO_LUT or VOLTAGE_OBJ_PHASE_LUT
3549fb4d8502Sjsg    uint8_t  gpio_control_id;                     // default is 0 which indicate control through CG VID mode
3550fb4d8502Sjsg    uint8_t  gpio_entry_num;                      // indiate the entry numbers of Votlage/Gpio value Look up table
3551fb4d8502Sjsg    uint8_t  phase_delay_us;                      // phase delay in unit of micro second
3552fb4d8502Sjsg    uint8_t  reserved;
3553fb4d8502Sjsg    uint32_t gpio_mask_val;                         // GPIO Mask value
35542eb7cd5dSjsg    struct atom_voltage_gpio_map_lut voltage_gpio_lut[] __counted_by(gpio_entry_num);
3555fb4d8502Sjsg };
3556fb4d8502Sjsg 
3557fb4d8502Sjsg struct  atom_svid2_voltage_object_v4
3558fb4d8502Sjsg {
3559fb4d8502Sjsg    struct atom_voltage_object_header_v4 header;  // voltage mode = VOLTAGE_OBJ_SVID2
3560fb4d8502Sjsg    uint8_t loadline_psi1;                        // bit4:0= loadline setting ( Core Loadline trim and offset trim ), bit5=0:PSI1_L disable =1: PSI1_L enable
3561fb4d8502Sjsg    uint8_t psi0_l_vid_thresd;                    // VR PSI0_L VID threshold
3562fb4d8502Sjsg    uint8_t psi0_enable;                          //
3563fb4d8502Sjsg    uint8_t maxvstep;
3564fb4d8502Sjsg    uint8_t telemetry_offset;
3565fb4d8502Sjsg    uint8_t telemetry_gain;
3566fb4d8502Sjsg    uint16_t reserved1;
3567fb4d8502Sjsg };
3568fb4d8502Sjsg 
3569fb4d8502Sjsg struct atom_merged_voltage_object_v4
3570fb4d8502Sjsg {
3571fb4d8502Sjsg   struct atom_voltage_object_header_v4 header;  // voltage mode = VOLTAGE_OBJ_MERGED_POWER
3572fb4d8502Sjsg   uint8_t  merged_powerrail_type;               //enum atom_voltage_type
3573fb4d8502Sjsg   uint8_t  reserved[3];
3574fb4d8502Sjsg };
3575fb4d8502Sjsg 
3576fb4d8502Sjsg union atom_voltage_object_v4{
3577fb4d8502Sjsg   struct atom_gpio_voltage_object_v4 gpio_voltage_obj;
3578fb4d8502Sjsg   struct atom_i2c_voltage_object_v4 i2c_voltage_obj;
3579fb4d8502Sjsg   struct atom_svid2_voltage_object_v4 svid2_voltage_obj;
3580fb4d8502Sjsg   struct atom_merged_voltage_object_v4 merged_voltage_obj;
3581fb4d8502Sjsg };
3582fb4d8502Sjsg 
3583fb4d8502Sjsg struct  atom_voltage_objects_info_v4_1
3584fb4d8502Sjsg {
3585fb4d8502Sjsg   struct atom_common_table_header table_header;
3586fb4d8502Sjsg   union atom_voltage_object_v4 voltage_object[1];   //Info for Voltage control
3587fb4d8502Sjsg };
3588fb4d8502Sjsg 
3589fb4d8502Sjsg 
3590fb4d8502Sjsg /*
3591fb4d8502Sjsg   ***************************************************************************
3592fb4d8502Sjsg               All Command Function structure definition
3593fb4d8502Sjsg   ***************************************************************************
3594fb4d8502Sjsg */
3595fb4d8502Sjsg 
3596fb4d8502Sjsg /*
3597fb4d8502Sjsg   ***************************************************************************
3598fb4d8502Sjsg               Structures used by asic_init
3599fb4d8502Sjsg   ***************************************************************************
3600fb4d8502Sjsg */
3601fb4d8502Sjsg 
3602fb4d8502Sjsg struct asic_init_engine_parameters
3603fb4d8502Sjsg {
3604fb4d8502Sjsg   uint32_t sclkfreqin10khz:24;
3605fb4d8502Sjsg   uint32_t engineflag:8;              /* enum atom_asic_init_engine_flag  */
3606fb4d8502Sjsg };
3607fb4d8502Sjsg 
3608fb4d8502Sjsg struct asic_init_mem_parameters
3609fb4d8502Sjsg {
3610fb4d8502Sjsg   uint32_t mclkfreqin10khz:24;
3611fb4d8502Sjsg   uint32_t memflag:8;                 /* enum atom_asic_init_mem_flag  */
3612fb4d8502Sjsg };
3613fb4d8502Sjsg 
3614fb4d8502Sjsg struct asic_init_parameters_v2_1
3615fb4d8502Sjsg {
3616fb4d8502Sjsg   struct asic_init_engine_parameters engineparam;
3617fb4d8502Sjsg   struct asic_init_mem_parameters memparam;
3618fb4d8502Sjsg };
3619fb4d8502Sjsg 
3620fb4d8502Sjsg struct asic_init_ps_allocation_v2_1
3621fb4d8502Sjsg {
3622fb4d8502Sjsg   struct asic_init_parameters_v2_1 param;
3623fb4d8502Sjsg   uint32_t reserved[16];
3624fb4d8502Sjsg };
3625fb4d8502Sjsg 
3626fb4d8502Sjsg 
3627fb4d8502Sjsg enum atom_asic_init_engine_flag
3628fb4d8502Sjsg {
3629fb4d8502Sjsg   b3NORMAL_ENGINE_INIT = 0,
3630fb4d8502Sjsg   b3SRIOV_SKIP_ASIC_INIT = 0x02,
3631fb4d8502Sjsg   b3SRIOV_LOAD_UCODE = 0x40,
3632fb4d8502Sjsg };
3633fb4d8502Sjsg 
3634fb4d8502Sjsg enum atom_asic_init_mem_flag
3635fb4d8502Sjsg {
3636fb4d8502Sjsg   b3NORMAL_MEM_INIT = 0,
3637fb4d8502Sjsg   b3DRAM_SELF_REFRESH_EXIT =0x20,
3638fb4d8502Sjsg };
3639fb4d8502Sjsg 
3640fb4d8502Sjsg /*
3641fb4d8502Sjsg   ***************************************************************************
3642fb4d8502Sjsg               Structures used by setengineclock
3643fb4d8502Sjsg   ***************************************************************************
3644fb4d8502Sjsg */
3645fb4d8502Sjsg 
3646fb4d8502Sjsg struct set_engine_clock_parameters_v2_1
3647fb4d8502Sjsg {
3648fb4d8502Sjsg   uint32_t sclkfreqin10khz:24;
3649fb4d8502Sjsg   uint32_t sclkflag:8;              /* enum atom_set_engine_mem_clock_flag,  */
3650fb4d8502Sjsg   uint32_t reserved[10];
3651fb4d8502Sjsg };
3652fb4d8502Sjsg 
3653fb4d8502Sjsg struct set_engine_clock_ps_allocation_v2_1
3654fb4d8502Sjsg {
3655fb4d8502Sjsg   struct set_engine_clock_parameters_v2_1 clockinfo;
3656fb4d8502Sjsg   uint32_t reserved[10];
3657fb4d8502Sjsg };
3658fb4d8502Sjsg 
3659fb4d8502Sjsg 
3660fb4d8502Sjsg enum atom_set_engine_mem_clock_flag
3661fb4d8502Sjsg {
3662fb4d8502Sjsg   b3NORMAL_CHANGE_CLOCK = 0,
3663fb4d8502Sjsg   b3FIRST_TIME_CHANGE_CLOCK = 0x08,
3664fb4d8502Sjsg   b3STORE_DPM_TRAINGING = 0x40,         //Applicable to memory clock change,when set, it store specific DPM mode training result
3665fb4d8502Sjsg };
3666fb4d8502Sjsg 
3667fb4d8502Sjsg /*
3668fb4d8502Sjsg   ***************************************************************************
3669fb4d8502Sjsg               Structures used by getengineclock
3670fb4d8502Sjsg   ***************************************************************************
3671fb4d8502Sjsg */
3672fb4d8502Sjsg struct get_engine_clock_parameter
3673fb4d8502Sjsg {
3674fb4d8502Sjsg   uint32_t sclk_10khz;          // current engine speed in 10KHz unit
3675fb4d8502Sjsg   uint32_t reserved;
3676fb4d8502Sjsg };
3677fb4d8502Sjsg 
3678fb4d8502Sjsg /*
3679fb4d8502Sjsg   ***************************************************************************
3680fb4d8502Sjsg               Structures used by setmemoryclock
3681fb4d8502Sjsg   ***************************************************************************
3682fb4d8502Sjsg */
3683fb4d8502Sjsg struct set_memory_clock_parameters_v2_1
3684fb4d8502Sjsg {
3685fb4d8502Sjsg   uint32_t mclkfreqin10khz:24;
3686fb4d8502Sjsg   uint32_t mclkflag:8;              /* enum atom_set_engine_mem_clock_flag,  */
3687fb4d8502Sjsg   uint32_t reserved[10];
3688fb4d8502Sjsg };
3689fb4d8502Sjsg 
3690fb4d8502Sjsg struct set_memory_clock_ps_allocation_v2_1
3691fb4d8502Sjsg {
3692fb4d8502Sjsg   struct set_memory_clock_parameters_v2_1 clockinfo;
3693fb4d8502Sjsg   uint32_t reserved[10];
3694fb4d8502Sjsg };
3695fb4d8502Sjsg 
3696fb4d8502Sjsg 
3697fb4d8502Sjsg /*
3698fb4d8502Sjsg   ***************************************************************************
3699fb4d8502Sjsg               Structures used by getmemoryclock
3700fb4d8502Sjsg   ***************************************************************************
3701fb4d8502Sjsg */
3702fb4d8502Sjsg struct get_memory_clock_parameter
3703fb4d8502Sjsg {
3704fb4d8502Sjsg   uint32_t mclk_10khz;          // current engine speed in 10KHz unit
3705fb4d8502Sjsg   uint32_t reserved;
3706fb4d8502Sjsg };
3707fb4d8502Sjsg 
3708fb4d8502Sjsg 
3709fb4d8502Sjsg 
3710fb4d8502Sjsg /*
3711fb4d8502Sjsg   ***************************************************************************
3712fb4d8502Sjsg               Structures used by setvoltage
3713fb4d8502Sjsg   ***************************************************************************
3714fb4d8502Sjsg */
3715fb4d8502Sjsg 
3716fb4d8502Sjsg struct set_voltage_parameters_v1_4
3717fb4d8502Sjsg {
3718fb4d8502Sjsg   uint8_t  voltagetype;                /* enum atom_voltage_type */
3719fb4d8502Sjsg   uint8_t  command;                    /* Indicate action: Set voltage level, enum atom_set_voltage_command */
3720fb4d8502Sjsg   uint16_t vlevel_mv;                  /* real voltage level in unit of mv or Voltage Phase (0, 1, 2, .. ) */
3721fb4d8502Sjsg };
3722fb4d8502Sjsg 
3723fb4d8502Sjsg //set_voltage_parameters_v2_1.voltagemode
3724fb4d8502Sjsg enum atom_set_voltage_command{
3725fb4d8502Sjsg   ATOM_SET_VOLTAGE  = 0,
3726fb4d8502Sjsg   ATOM_INIT_VOLTAGE_REGULATOR = 3,
3727fb4d8502Sjsg   ATOM_SET_VOLTAGE_PHASE = 4,
3728fb4d8502Sjsg   ATOM_GET_LEAKAGE_ID    = 8,
3729fb4d8502Sjsg };
3730fb4d8502Sjsg 
3731fb4d8502Sjsg struct set_voltage_ps_allocation_v1_4
3732fb4d8502Sjsg {
3733fb4d8502Sjsg   struct set_voltage_parameters_v1_4 setvoltageparam;
3734fb4d8502Sjsg   uint32_t reserved[10];
3735fb4d8502Sjsg };
3736fb4d8502Sjsg 
3737fb4d8502Sjsg 
3738fb4d8502Sjsg /*
3739fb4d8502Sjsg   ***************************************************************************
3740fb4d8502Sjsg               Structures used by computegpuclockparam
3741fb4d8502Sjsg   ***************************************************************************
3742fb4d8502Sjsg */
3743fb4d8502Sjsg 
3744fb4d8502Sjsg //ATOM_COMPUTE_CLOCK_FREQ.ulComputeClockFlag
3745fb4d8502Sjsg enum atom_gpu_clock_type
3746fb4d8502Sjsg {
3747fb4d8502Sjsg   COMPUTE_GPUCLK_INPUT_FLAG_DEFAULT_GPUCLK =0x00,
3748fb4d8502Sjsg   COMPUTE_GPUCLK_INPUT_FLAG_GFXCLK =0x01,
3749fb4d8502Sjsg   COMPUTE_GPUCLK_INPUT_FLAG_UCLK =0x02,
3750fb4d8502Sjsg };
3751fb4d8502Sjsg 
3752fb4d8502Sjsg struct compute_gpu_clock_input_parameter_v1_8
3753fb4d8502Sjsg {
3754fb4d8502Sjsg   uint32_t  gpuclock_10khz:24;         //Input= target clock, output = actual clock
3755fb4d8502Sjsg   uint32_t  gpu_clock_type:8;          //Input indicate clock type: enum atom_gpu_clock_type
3756fb4d8502Sjsg   uint32_t  reserved[5];
3757fb4d8502Sjsg };
3758fb4d8502Sjsg 
3759fb4d8502Sjsg 
3760fb4d8502Sjsg struct compute_gpu_clock_output_parameter_v1_8
3761fb4d8502Sjsg {
3762fb4d8502Sjsg   uint32_t  gpuclock_10khz:24;              //Input= target clock, output = actual clock
3763fb4d8502Sjsg   uint32_t  dfs_did:8;                      //return parameter: DFS divider which is used to program to register directly
3764fb4d8502Sjsg   uint32_t  pll_fb_mult;                    //Feedback Multiplier, bit 8:0 int, bit 15:12 post_div, bit 31:16 frac
3765fb4d8502Sjsg   uint32_t  pll_ss_fbsmult;                 // Spread FB Mult: bit 8:0 int, bit 31:16 frac
3766fb4d8502Sjsg   uint16_t  pll_ss_slew_frac;
3767fb4d8502Sjsg   uint8_t   pll_ss_enable;
3768fb4d8502Sjsg   uint8_t   reserved;
3769fb4d8502Sjsg   uint32_t  reserved1[2];
3770fb4d8502Sjsg };
3771fb4d8502Sjsg 
3772fb4d8502Sjsg 
3773fb4d8502Sjsg 
3774fb4d8502Sjsg /*
3775fb4d8502Sjsg   ***************************************************************************
3776fb4d8502Sjsg               Structures used by ReadEfuseValue
3777fb4d8502Sjsg   ***************************************************************************
3778fb4d8502Sjsg */
3779fb4d8502Sjsg 
3780fb4d8502Sjsg struct read_efuse_input_parameters_v3_1
3781fb4d8502Sjsg {
3782fb4d8502Sjsg   uint16_t efuse_start_index;
3783fb4d8502Sjsg   uint8_t  reserved;
3784fb4d8502Sjsg   uint8_t  bitslen;
3785fb4d8502Sjsg };
3786fb4d8502Sjsg 
3787fb4d8502Sjsg // ReadEfuseValue input/output parameter
3788fb4d8502Sjsg union read_efuse_value_parameters_v3_1
3789fb4d8502Sjsg {
3790fb4d8502Sjsg   struct read_efuse_input_parameters_v3_1 efuse_info;
3791fb4d8502Sjsg   uint32_t efusevalue;
3792fb4d8502Sjsg };
3793fb4d8502Sjsg 
3794fb4d8502Sjsg 
3795fb4d8502Sjsg /*
3796fb4d8502Sjsg   ***************************************************************************
3797fb4d8502Sjsg               Structures used by getsmuclockinfo
3798fb4d8502Sjsg   ***************************************************************************
3799fb4d8502Sjsg */
3800fb4d8502Sjsg struct atom_get_smu_clock_info_parameters_v3_1
3801fb4d8502Sjsg {
3802fb4d8502Sjsg   uint8_t syspll_id;          // 0= syspll0, 1=syspll1, 2=syspll2
3803fb4d8502Sjsg   uint8_t clk_id;             // atom_smu9_syspll0_clock_id  (only valid when command == GET_SMU_CLOCK_INFO_V3_1_GET_CLOCK_FREQ )
3804fb4d8502Sjsg   uint8_t command;            // enum of atom_get_smu_clock_info_command
3805fb4d8502Sjsg   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 )
3806fb4d8502Sjsg };
3807fb4d8502Sjsg 
3808fb4d8502Sjsg enum atom_get_smu_clock_info_command
3809fb4d8502Sjsg {
3810fb4d8502Sjsg   GET_SMU_CLOCK_INFO_V3_1_GET_CLOCK_FREQ       = 0,
3811fb4d8502Sjsg   GET_SMU_CLOCK_INFO_V3_1_GET_PLLVCO_FREQ      = 1,
3812fb4d8502Sjsg   GET_SMU_CLOCK_INFO_V3_1_GET_PLLREFCLK_FREQ   = 2,
3813fb4d8502Sjsg };
3814fb4d8502Sjsg 
3815fb4d8502Sjsg enum atom_smu9_syspll0_clock_id
3816fb4d8502Sjsg {
3817fb4d8502Sjsg   SMU9_SYSPLL0_SMNCLK_ID   = 0,       //  SMNCLK
3818fb4d8502Sjsg   SMU9_SYSPLL0_SOCCLK_ID   = 1,       //	SOCCLK (FCLK)
3819fb4d8502Sjsg   SMU9_SYSPLL0_MP0CLK_ID   = 2,       //	MP0CLK
3820fb4d8502Sjsg   SMU9_SYSPLL0_MP1CLK_ID   = 3,       //	MP1CLK
3821fb4d8502Sjsg   SMU9_SYSPLL0_LCLK_ID     = 4,       //	LCLK
3822fb4d8502Sjsg   SMU9_SYSPLL0_DCLK_ID     = 5,       //	DCLK
3823fb4d8502Sjsg   SMU9_SYSPLL0_VCLK_ID     = 6,       //	VCLK
3824fb4d8502Sjsg   SMU9_SYSPLL0_ECLK_ID     = 7,       //	ECLK
3825fb4d8502Sjsg   SMU9_SYSPLL0_DCEFCLK_ID  = 8,       //	DCEFCLK
3826fb4d8502Sjsg   SMU9_SYSPLL0_DPREFCLK_ID = 10,      //	DPREFCLK
3827fb4d8502Sjsg   SMU9_SYSPLL0_DISPCLK_ID  = 11,      //	DISPCLK
3828fb4d8502Sjsg };
3829fb4d8502Sjsg 
3830fb4d8502Sjsg enum atom_smu11_syspll_id {
3831fb4d8502Sjsg   SMU11_SYSPLL0_ID            = 0,
3832fb4d8502Sjsg   SMU11_SYSPLL1_0_ID          = 1,
3833fb4d8502Sjsg   SMU11_SYSPLL1_1_ID          = 2,
3834fb4d8502Sjsg   SMU11_SYSPLL1_2_ID          = 3,
3835fb4d8502Sjsg   SMU11_SYSPLL2_ID            = 4,
3836fb4d8502Sjsg   SMU11_SYSPLL3_0_ID          = 5,
3837fb4d8502Sjsg   SMU11_SYSPLL3_1_ID          = 6,
3838fb4d8502Sjsg };
3839fb4d8502Sjsg 
3840fb4d8502Sjsg enum atom_smu11_syspll0_clock_id {
3841fb4d8502Sjsg   SMU11_SYSPLL0_ECLK_ID     = 0,       //	ECLK
3842fb4d8502Sjsg   SMU11_SYSPLL0_SOCCLK_ID   = 1,       //	SOCCLK
3843fb4d8502Sjsg   SMU11_SYSPLL0_MP0CLK_ID   = 2,       //	MP0CLK
3844fb4d8502Sjsg   SMU11_SYSPLL0_DCLK_ID     = 3,       //	DCLK
3845fb4d8502Sjsg   SMU11_SYSPLL0_VCLK_ID     = 4,       //	VCLK
3846fb4d8502Sjsg   SMU11_SYSPLL0_DCEFCLK_ID  = 5,       //	DCEFCLK
3847fb4d8502Sjsg };
3848fb4d8502Sjsg 
3849fb4d8502Sjsg enum atom_smu11_syspll1_0_clock_id {
3850fb4d8502Sjsg   SMU11_SYSPLL1_0_UCLKA_ID   = 0,       // UCLK_a
3851fb4d8502Sjsg };
3852fb4d8502Sjsg 
3853fb4d8502Sjsg enum atom_smu11_syspll1_1_clock_id {
3854fb4d8502Sjsg   SMU11_SYSPLL1_0_UCLKB_ID   = 0,       // UCLK_b
3855fb4d8502Sjsg };
3856fb4d8502Sjsg 
3857fb4d8502Sjsg enum atom_smu11_syspll1_2_clock_id {
3858fb4d8502Sjsg   SMU11_SYSPLL1_0_FCLK_ID   = 0,        // FCLK
3859fb4d8502Sjsg };
3860fb4d8502Sjsg 
3861fb4d8502Sjsg enum atom_smu11_syspll2_clock_id {
3862fb4d8502Sjsg   SMU11_SYSPLL2_GFXCLK_ID   = 0,        // GFXCLK
3863fb4d8502Sjsg };
3864fb4d8502Sjsg 
3865fb4d8502Sjsg enum atom_smu11_syspll3_0_clock_id {
3866fb4d8502Sjsg   SMU11_SYSPLL3_0_WAFCLK_ID = 0,       //	WAFCLK
3867fb4d8502Sjsg   SMU11_SYSPLL3_0_DISPCLK_ID = 1,      //	DISPCLK
3868fb4d8502Sjsg   SMU11_SYSPLL3_0_DPREFCLK_ID = 2,     //	DPREFCLK
3869fb4d8502Sjsg };
3870fb4d8502Sjsg 
3871fb4d8502Sjsg enum atom_smu11_syspll3_1_clock_id {
3872fb4d8502Sjsg   SMU11_SYSPLL3_1_MP1CLK_ID = 0,       //	MP1CLK
3873fb4d8502Sjsg   SMU11_SYSPLL3_1_SMNCLK_ID = 1,       //	SMNCLK
3874fb4d8502Sjsg   SMU11_SYSPLL3_1_LCLK_ID = 2,         //	LCLK
3875fb4d8502Sjsg };
3876fb4d8502Sjsg 
38775ca02815Sjsg enum atom_smu12_syspll_id {
38785ca02815Sjsg   SMU12_SYSPLL0_ID          = 0,
38795ca02815Sjsg   SMU12_SYSPLL1_ID          = 1,
38805ca02815Sjsg   SMU12_SYSPLL2_ID          = 2,
38815ca02815Sjsg   SMU12_SYSPLL3_0_ID        = 3,
38825ca02815Sjsg   SMU12_SYSPLL3_1_ID        = 4,
38835ca02815Sjsg };
38845ca02815Sjsg 
38855ca02815Sjsg enum atom_smu12_syspll0_clock_id {
38865ca02815Sjsg   SMU12_SYSPLL0_SMNCLK_ID   = 0,			//	SOCCLK
38875ca02815Sjsg   SMU12_SYSPLL0_SOCCLK_ID   = 1,			//	SOCCLK
38885ca02815Sjsg   SMU12_SYSPLL0_MP0CLK_ID   = 2,			//	MP0CLK
38895ca02815Sjsg   SMU12_SYSPLL0_MP1CLK_ID   = 3,			//	MP1CLK
38905ca02815Sjsg   SMU12_SYSPLL0_MP2CLK_ID   = 4,			//	MP2CLK
38915ca02815Sjsg   SMU12_SYSPLL0_VCLK_ID     = 5,			//	VCLK
38925ca02815Sjsg   SMU12_SYSPLL0_LCLK_ID     = 6,			//	LCLK
38935ca02815Sjsg   SMU12_SYSPLL0_DCLK_ID     = 7,			//	DCLK
38945ca02815Sjsg   SMU12_SYSPLL0_ACLK_ID     = 8,			//	ACLK
38955ca02815Sjsg   SMU12_SYSPLL0_ISPCLK_ID   = 9,			//	ISPCLK
38965ca02815Sjsg   SMU12_SYSPLL0_SHUBCLK_ID  = 10,			//	SHUBCLK
38975ca02815Sjsg };
38985ca02815Sjsg 
38995ca02815Sjsg enum atom_smu12_syspll1_clock_id {
39005ca02815Sjsg   SMU12_SYSPLL1_DISPCLK_ID  = 0,      //	DISPCLK
39015ca02815Sjsg   SMU12_SYSPLL1_DPPCLK_ID   = 1,      //	DPPCLK
39025ca02815Sjsg   SMU12_SYSPLL1_DPREFCLK_ID = 2,      //	DPREFCLK
39035ca02815Sjsg   SMU12_SYSPLL1_DCFCLK_ID   = 3,      //	DCFCLK
39045ca02815Sjsg };
39055ca02815Sjsg 
39065ca02815Sjsg enum atom_smu12_syspll2_clock_id {
39075ca02815Sjsg   SMU12_SYSPLL2_Pre_GFXCLK_ID = 0,   // Pre_GFXCLK
39085ca02815Sjsg };
39095ca02815Sjsg 
39105ca02815Sjsg enum atom_smu12_syspll3_0_clock_id {
39115ca02815Sjsg   SMU12_SYSPLL3_0_FCLK_ID = 0,      //	FCLK
39125ca02815Sjsg };
39135ca02815Sjsg 
39145ca02815Sjsg enum atom_smu12_syspll3_1_clock_id {
39155ca02815Sjsg   SMU12_SYSPLL3_1_UMCCLK_ID = 0,    //	UMCCLK
39165ca02815Sjsg };
39175ca02815Sjsg 
3918fb4d8502Sjsg struct  atom_get_smu_clock_info_output_parameters_v3_1
3919fb4d8502Sjsg {
3920fb4d8502Sjsg   union {
3921fb4d8502Sjsg     uint32_t smu_clock_freq_hz;
3922fb4d8502Sjsg     uint32_t syspllvcofreq_10khz;
3923fb4d8502Sjsg     uint32_t sysspllrefclk_10khz;
3924fb4d8502Sjsg   }atom_smu_outputclkfreq;
3925fb4d8502Sjsg };
3926fb4d8502Sjsg 
3927fb4d8502Sjsg 
3928fb4d8502Sjsg 
3929fb4d8502Sjsg /*
3930fb4d8502Sjsg   ***************************************************************************
3931fb4d8502Sjsg               Structures used by dynamicmemorysettings
3932fb4d8502Sjsg   ***************************************************************************
3933fb4d8502Sjsg */
3934fb4d8502Sjsg 
3935fb4d8502Sjsg enum atom_dynamic_memory_setting_command
3936fb4d8502Sjsg {
3937fb4d8502Sjsg   COMPUTE_MEMORY_PLL_PARAM = 1,
3938fb4d8502Sjsg   COMPUTE_ENGINE_PLL_PARAM = 2,
3939fb4d8502Sjsg   ADJUST_MC_SETTING_PARAM = 3,
3940fb4d8502Sjsg };
3941fb4d8502Sjsg 
3942fb4d8502Sjsg /* when command = COMPUTE_MEMORY_PLL_PARAM or ADJUST_MC_SETTING_PARAM */
3943fb4d8502Sjsg struct dynamic_mclk_settings_parameters_v2_1
3944fb4d8502Sjsg {
3945fb4d8502Sjsg   uint32_t  mclk_10khz:24;         //Input= target mclk
3946fb4d8502Sjsg   uint32_t  command:8;             //command enum of atom_dynamic_memory_setting_command
3947fb4d8502Sjsg   uint32_t  reserved;
3948fb4d8502Sjsg };
3949fb4d8502Sjsg 
3950fb4d8502Sjsg /* when command = COMPUTE_ENGINE_PLL_PARAM */
3951fb4d8502Sjsg struct dynamic_sclk_settings_parameters_v2_1
3952fb4d8502Sjsg {
3953fb4d8502Sjsg   uint32_t  sclk_10khz:24;         //Input= target mclk
3954fb4d8502Sjsg   uint32_t  command:8;             //command enum of atom_dynamic_memory_setting_command
3955fb4d8502Sjsg   uint32_t  mclk_10khz;
3956fb4d8502Sjsg   uint32_t  reserved;
3957fb4d8502Sjsg };
3958fb4d8502Sjsg 
3959fb4d8502Sjsg union dynamic_memory_settings_parameters_v2_1
3960fb4d8502Sjsg {
3961fb4d8502Sjsg   struct dynamic_mclk_settings_parameters_v2_1 mclk_setting;
3962fb4d8502Sjsg   struct dynamic_sclk_settings_parameters_v2_1 sclk_setting;
3963fb4d8502Sjsg };
3964fb4d8502Sjsg 
3965fb4d8502Sjsg 
3966fb4d8502Sjsg 
3967fb4d8502Sjsg /*
3968fb4d8502Sjsg   ***************************************************************************
3969fb4d8502Sjsg               Structures used by memorytraining
3970fb4d8502Sjsg   ***************************************************************************
3971fb4d8502Sjsg */
3972fb4d8502Sjsg 
3973fb4d8502Sjsg enum atom_umc6_0_ucode_function_call_enum_id
3974fb4d8502Sjsg {
3975fb4d8502Sjsg   UMC60_UCODE_FUNC_ID_REINIT                 = 0,
3976fb4d8502Sjsg   UMC60_UCODE_FUNC_ID_ENTER_SELFREFRESH      = 1,
3977fb4d8502Sjsg   UMC60_UCODE_FUNC_ID_EXIT_SELFREFRESH       = 2,
3978fb4d8502Sjsg };
3979fb4d8502Sjsg 
3980fb4d8502Sjsg 
3981fb4d8502Sjsg struct memory_training_parameters_v2_1
3982fb4d8502Sjsg {
3983fb4d8502Sjsg   uint8_t ucode_func_id;
3984fb4d8502Sjsg   uint8_t ucode_reserved[3];
3985fb4d8502Sjsg   uint32_t reserved[5];
3986fb4d8502Sjsg };
3987fb4d8502Sjsg 
3988fb4d8502Sjsg 
3989fb4d8502Sjsg /*
3990fb4d8502Sjsg   ***************************************************************************
3991fb4d8502Sjsg               Structures used by setpixelclock
3992fb4d8502Sjsg   ***************************************************************************
3993fb4d8502Sjsg */
3994fb4d8502Sjsg 
3995fb4d8502Sjsg struct set_pixel_clock_parameter_v1_7
3996fb4d8502Sjsg {
3997fb4d8502Sjsg     uint32_t pixclk_100hz;               // target the pixel clock to drive the CRTC timing in unit of 100Hz.
3998fb4d8502Sjsg 
3999fb4d8502Sjsg     uint8_t  pll_id;                     // ATOM_PHY_PLL0/ATOM_PHY_PLL1/ATOM_PPLL0
4000fb4d8502Sjsg     uint8_t  encoderobjid;               // ASIC encoder id defined in objectId.h,
4001fb4d8502Sjsg                                          // indicate which graphic encoder will be used.
4002fb4d8502Sjsg     uint8_t  encoder_mode;               // Encoder mode:
4003fb4d8502Sjsg     uint8_t  miscinfo;                   // enum atom_set_pixel_clock_v1_7_misc_info
4004fb4d8502Sjsg     uint8_t  crtc_id;                    // enum of atom_crtc_def
4005fb4d8502Sjsg     uint8_t  deep_color_ratio;           // HDMI panel bit depth: enum atom_set_pixel_clock_v1_7_deepcolor_ratio
4006fb4d8502Sjsg     uint8_t  reserved1[2];
4007fb4d8502Sjsg     uint32_t reserved2;
4008fb4d8502Sjsg };
4009fb4d8502Sjsg 
4010fb4d8502Sjsg //ucMiscInfo
4011fb4d8502Sjsg enum atom_set_pixel_clock_v1_7_misc_info
4012fb4d8502Sjsg {
4013fb4d8502Sjsg   PIXEL_CLOCK_V7_MISC_FORCE_PROG_PPLL         = 0x01,
4014fb4d8502Sjsg   PIXEL_CLOCK_V7_MISC_PROG_PHYPLL             = 0x02,
4015fb4d8502Sjsg   PIXEL_CLOCK_V7_MISC_YUV420_MODE             = 0x04,
4016fb4d8502Sjsg   PIXEL_CLOCK_V7_MISC_DVI_DUALLINK_EN         = 0x08,
4017fb4d8502Sjsg   PIXEL_CLOCK_V7_MISC_REF_DIV_SRC             = 0x30,
4018fb4d8502Sjsg   PIXEL_CLOCK_V7_MISC_REF_DIV_SRC_XTALIN      = 0x00,
4019fb4d8502Sjsg   PIXEL_CLOCK_V7_MISC_REF_DIV_SRC_PCIE        = 0x10,
4020fb4d8502Sjsg   PIXEL_CLOCK_V7_MISC_REF_DIV_SRC_GENLK       = 0x20,
4021fb4d8502Sjsg   PIXEL_CLOCK_V7_MISC_REF_DIV_SRC_REFPAD      = 0x30,
4022fb4d8502Sjsg   PIXEL_CLOCK_V7_MISC_ATOMIC_UPDATE           = 0x40,
4023fb4d8502Sjsg   PIXEL_CLOCK_V7_MISC_FORCE_SS_DIS            = 0x80,
4024fb4d8502Sjsg };
4025fb4d8502Sjsg 
4026fb4d8502Sjsg /* deep_color_ratio */
4027fb4d8502Sjsg enum atom_set_pixel_clock_v1_7_deepcolor_ratio
4028fb4d8502Sjsg {
4029fb4d8502Sjsg   PIXEL_CLOCK_V7_DEEPCOLOR_RATIO_DIS          = 0x00,      //00 - DCCG_DEEP_COLOR_DTO_DISABLE: Disable Deep Color DTO
4030fb4d8502Sjsg   PIXEL_CLOCK_V7_DEEPCOLOR_RATIO_5_4          = 0x01,      //01 - DCCG_DEEP_COLOR_DTO_5_4_RATIO: Set Deep Color DTO to 5:4
4031fb4d8502Sjsg   PIXEL_CLOCK_V7_DEEPCOLOR_RATIO_3_2          = 0x02,      //02 - DCCG_DEEP_COLOR_DTO_3_2_RATIO: Set Deep Color DTO to 3:2
4032fb4d8502Sjsg   PIXEL_CLOCK_V7_DEEPCOLOR_RATIO_2_1          = 0x03,      //03 - DCCG_DEEP_COLOR_DTO_2_1_RATIO: Set Deep Color DTO to 2:1
4033fb4d8502Sjsg };
4034fb4d8502Sjsg 
4035fb4d8502Sjsg /*
4036fb4d8502Sjsg   ***************************************************************************
4037fb4d8502Sjsg               Structures used by setdceclock
4038fb4d8502Sjsg   ***************************************************************************
4039fb4d8502Sjsg */
4040fb4d8502Sjsg 
4041fb4d8502Sjsg // SetDCEClock input parameter for DCE11.2( ELM and BF ) and above
4042fb4d8502Sjsg struct set_dce_clock_parameters_v2_1
4043fb4d8502Sjsg {
4044fb4d8502Sjsg   uint32_t dceclk_10khz;                               // target DCE frequency in unit of 10KHZ, return real DISPCLK/DPREFCLK frequency.
4045fb4d8502Sjsg   uint8_t  dceclktype;                                 // =0: DISPCLK  =1: DPREFCLK  =2: PIXCLK
4046fb4d8502Sjsg   uint8_t  dceclksrc;                                  // ATOM_PLL0 or ATOM_GCK_DFS or ATOM_FCH_CLK or ATOM_COMBOPHY_PLLx
4047fb4d8502Sjsg   uint8_t  dceclkflag;                                 // Bit [1:0] = PPLL ref clock source ( when ucDCEClkSrc= ATOM_PPLL0 )
4048fb4d8502Sjsg   uint8_t  crtc_id;                                    // ucDisp Pipe Id, ATOM_CRTC0/1/2/..., use only when ucDCEClkType = PIXCLK
4049fb4d8502Sjsg };
4050fb4d8502Sjsg 
4051fb4d8502Sjsg //ucDCEClkType
4052fb4d8502Sjsg enum atom_set_dce_clock_clock_type
4053fb4d8502Sjsg {
4054fb4d8502Sjsg   DCE_CLOCK_TYPE_DISPCLK                      = 0,
4055fb4d8502Sjsg   DCE_CLOCK_TYPE_DPREFCLK                     = 1,
4056fb4d8502Sjsg   DCE_CLOCK_TYPE_PIXELCLK                     = 2,        // used by VBIOS internally, called by SetPixelClock
4057fb4d8502Sjsg };
4058fb4d8502Sjsg 
4059fb4d8502Sjsg //ucDCEClkFlag when ucDCEClkType == DPREFCLK
4060fb4d8502Sjsg enum atom_set_dce_clock_dprefclk_flag
4061fb4d8502Sjsg {
4062fb4d8502Sjsg   DCE_CLOCK_FLAG_PLL_REFCLK_SRC_MASK          = 0x03,
4063fb4d8502Sjsg   DCE_CLOCK_FLAG_PLL_REFCLK_SRC_GENERICA      = 0x00,
4064fb4d8502Sjsg   DCE_CLOCK_FLAG_PLL_REFCLK_SRC_GENLK         = 0x01,
4065fb4d8502Sjsg   DCE_CLOCK_FLAG_PLL_REFCLK_SRC_PCIE          = 0x02,
4066fb4d8502Sjsg   DCE_CLOCK_FLAG_PLL_REFCLK_SRC_XTALIN        = 0x03,
4067fb4d8502Sjsg };
4068fb4d8502Sjsg 
4069fb4d8502Sjsg //ucDCEClkFlag when ucDCEClkType == PIXCLK
4070fb4d8502Sjsg enum atom_set_dce_clock_pixclk_flag
4071fb4d8502Sjsg {
4072fb4d8502Sjsg   DCE_CLOCK_FLAG_PCLK_DEEPCOLOR_RATIO_MASK    = 0x03,
4073fb4d8502Sjsg   DCE_CLOCK_FLAG_PCLK_DEEPCOLOR_RATIO_DIS     = 0x00,      //00 - DCCG_DEEP_COLOR_DTO_DISABLE: Disable Deep Color DTO
4074fb4d8502Sjsg   DCE_CLOCK_FLAG_PCLK_DEEPCOLOR_RATIO_5_4     = 0x01,      //01 - DCCG_DEEP_COLOR_DTO_5_4_RATIO: Set Deep Color DTO to 5:4
4075fb4d8502Sjsg   DCE_CLOCK_FLAG_PCLK_DEEPCOLOR_RATIO_3_2     = 0x02,      //02 - DCCG_DEEP_COLOR_DTO_3_2_RATIO: Set Deep Color DTO to 3:2
4076fb4d8502Sjsg   DCE_CLOCK_FLAG_PCLK_DEEPCOLOR_RATIO_2_1     = 0x03,      //03 - DCCG_DEEP_COLOR_DTO_2_1_RATIO: Set Deep Color DTO to 2:1
4077fb4d8502Sjsg   DCE_CLOCK_FLAG_PIXCLK_YUV420_MODE           = 0x04,
4078fb4d8502Sjsg };
4079fb4d8502Sjsg 
4080fb4d8502Sjsg struct set_dce_clock_ps_allocation_v2_1
4081fb4d8502Sjsg {
4082fb4d8502Sjsg   struct set_dce_clock_parameters_v2_1 param;
4083fb4d8502Sjsg   uint32_t ulReserved[2];
4084fb4d8502Sjsg };
4085fb4d8502Sjsg 
4086fb4d8502Sjsg 
4087fb4d8502Sjsg /****************************************************************************/
4088fb4d8502Sjsg // Structures used by BlankCRTC
4089fb4d8502Sjsg /****************************************************************************/
4090fb4d8502Sjsg struct blank_crtc_parameters
4091fb4d8502Sjsg {
4092fb4d8502Sjsg   uint8_t  crtc_id;                   // enum atom_crtc_def
4093fb4d8502Sjsg   uint8_t  blanking;                  // enum atom_blank_crtc_command
4094fb4d8502Sjsg   uint16_t reserved;
4095fb4d8502Sjsg   uint32_t reserved1;
4096fb4d8502Sjsg };
4097fb4d8502Sjsg 
4098fb4d8502Sjsg enum atom_blank_crtc_command
4099fb4d8502Sjsg {
4100fb4d8502Sjsg   ATOM_BLANKING         = 1,
4101fb4d8502Sjsg   ATOM_BLANKING_OFF     = 0,
4102fb4d8502Sjsg };
4103fb4d8502Sjsg 
4104fb4d8502Sjsg /****************************************************************************/
4105fb4d8502Sjsg // Structures used by enablecrtc
4106fb4d8502Sjsg /****************************************************************************/
4107fb4d8502Sjsg struct enable_crtc_parameters
4108fb4d8502Sjsg {
4109fb4d8502Sjsg   uint8_t crtc_id;                    // enum atom_crtc_def
4110fb4d8502Sjsg   uint8_t enable;                     // ATOM_ENABLE or ATOM_DISABLE
4111fb4d8502Sjsg   uint8_t padding[2];
4112fb4d8502Sjsg };
4113fb4d8502Sjsg 
4114fb4d8502Sjsg 
4115fb4d8502Sjsg /****************************************************************************/
4116fb4d8502Sjsg // Structure used by EnableDispPowerGating
4117fb4d8502Sjsg /****************************************************************************/
4118fb4d8502Sjsg struct enable_disp_power_gating_parameters_v2_1
4119fb4d8502Sjsg {
4120fb4d8502Sjsg   uint8_t disp_pipe_id;                // ATOM_CRTC1, ATOM_CRTC2, ...
4121fb4d8502Sjsg   uint8_t enable;                     // ATOM_ENABLE or ATOM_DISABLE
4122fb4d8502Sjsg   uint8_t padding[2];
4123fb4d8502Sjsg };
4124fb4d8502Sjsg 
4125fb4d8502Sjsg struct enable_disp_power_gating_ps_allocation
4126fb4d8502Sjsg {
4127fb4d8502Sjsg   struct enable_disp_power_gating_parameters_v2_1 param;
4128fb4d8502Sjsg   uint32_t ulReserved[4];
4129fb4d8502Sjsg };
4130fb4d8502Sjsg 
4131fb4d8502Sjsg /****************************************************************************/
4132fb4d8502Sjsg // Structure used in setcrtc_usingdtdtiming
4133fb4d8502Sjsg /****************************************************************************/
4134fb4d8502Sjsg struct set_crtc_using_dtd_timing_parameters
4135fb4d8502Sjsg {
4136fb4d8502Sjsg   uint16_t  h_size;
4137fb4d8502Sjsg   uint16_t  h_blanking_time;
4138fb4d8502Sjsg   uint16_t  v_size;
4139fb4d8502Sjsg   uint16_t  v_blanking_time;
4140fb4d8502Sjsg   uint16_t  h_syncoffset;
4141fb4d8502Sjsg   uint16_t  h_syncwidth;
4142fb4d8502Sjsg   uint16_t  v_syncoffset;
4143fb4d8502Sjsg   uint16_t  v_syncwidth;
4144fb4d8502Sjsg   uint16_t  modemiscinfo;
4145fb4d8502Sjsg   uint8_t   h_border;
4146fb4d8502Sjsg   uint8_t   v_border;
4147fb4d8502Sjsg   uint8_t   crtc_id;                   // enum atom_crtc_def
4148fb4d8502Sjsg   uint8_t   encoder_mode;			   // atom_encode_mode_def
4149fb4d8502Sjsg   uint8_t   padding[2];
4150fb4d8502Sjsg };
4151fb4d8502Sjsg 
4152fb4d8502Sjsg 
4153fb4d8502Sjsg /****************************************************************************/
4154fb4d8502Sjsg // Structures used by processi2cchanneltransaction
4155fb4d8502Sjsg /****************************************************************************/
4156fb4d8502Sjsg struct process_i2c_channel_transaction_parameters
4157fb4d8502Sjsg {
4158fb4d8502Sjsg   uint8_t i2cspeed_khz;
4159fb4d8502Sjsg   union {
4160fb4d8502Sjsg     uint8_t regindex;
4161fb4d8502Sjsg     uint8_t status;                  /* enum atom_process_i2c_flag */
4162fb4d8502Sjsg   } regind_status;
4163fb4d8502Sjsg   uint16_t  i2c_data_out;
4164fb4d8502Sjsg   uint8_t   flag;                    /* enum atom_process_i2c_status */
4165fb4d8502Sjsg   uint8_t   trans_bytes;
4166fb4d8502Sjsg   uint8_t   slave_addr;
4167fb4d8502Sjsg   uint8_t   i2c_id;
4168fb4d8502Sjsg };
4169fb4d8502Sjsg 
4170fb4d8502Sjsg //ucFlag
4171fb4d8502Sjsg enum atom_process_i2c_flag
4172fb4d8502Sjsg {
4173fb4d8502Sjsg   HW_I2C_WRITE          = 1,
4174fb4d8502Sjsg   HW_I2C_READ           = 0,
4175fb4d8502Sjsg   I2C_2BYTE_ADDR        = 0x02,
4176fb4d8502Sjsg   HW_I2C_SMBUS_BYTE_WR  = 0x04,
4177fb4d8502Sjsg };
4178fb4d8502Sjsg 
4179fb4d8502Sjsg //status
4180fb4d8502Sjsg enum atom_process_i2c_status
4181fb4d8502Sjsg {
4182fb4d8502Sjsg   HW_ASSISTED_I2C_STATUS_FAILURE     =2,
4183fb4d8502Sjsg   HW_ASSISTED_I2C_STATUS_SUCCESS     =1,
4184fb4d8502Sjsg };
4185fb4d8502Sjsg 
4186fb4d8502Sjsg 
4187fb4d8502Sjsg /****************************************************************************/
4188fb4d8502Sjsg // Structures used by processauxchanneltransaction
4189fb4d8502Sjsg /****************************************************************************/
4190fb4d8502Sjsg 
4191fb4d8502Sjsg struct process_aux_channel_transaction_parameters_v1_2
4192fb4d8502Sjsg {
4193fb4d8502Sjsg   uint16_t aux_request;
4194fb4d8502Sjsg   uint16_t dataout;
4195fb4d8502Sjsg   uint8_t  channelid;
4196fb4d8502Sjsg   union {
4197fb4d8502Sjsg     uint8_t   reply_status;
4198fb4d8502Sjsg     uint8_t   aux_delay;
4199fb4d8502Sjsg   } aux_status_delay;
4200fb4d8502Sjsg   uint8_t   dataout_len;
4201fb4d8502Sjsg   uint8_t   hpd_id;                                       //=0: HPD1, =1: HPD2, =2: HPD3, =3: HPD4, =4: HPD5, =5: HPD6
4202fb4d8502Sjsg };
4203fb4d8502Sjsg 
4204fb4d8502Sjsg 
4205fb4d8502Sjsg /****************************************************************************/
4206fb4d8502Sjsg // Structures used by selectcrtc_source
4207fb4d8502Sjsg /****************************************************************************/
4208fb4d8502Sjsg 
4209fb4d8502Sjsg struct select_crtc_source_parameters_v2_3
4210fb4d8502Sjsg {
4211fb4d8502Sjsg   uint8_t crtc_id;                        // enum atom_crtc_def
4212fb4d8502Sjsg   uint8_t encoder_id;                     // enum atom_dig_def
4213fb4d8502Sjsg   uint8_t encode_mode;                    // enum atom_encode_mode_def
4214fb4d8502Sjsg   uint8_t dst_bpc;                        // enum atom_panel_bit_per_color
4215fb4d8502Sjsg };
4216fb4d8502Sjsg 
4217fb4d8502Sjsg 
4218fb4d8502Sjsg /****************************************************************************/
4219fb4d8502Sjsg // Structures used by digxencodercontrol
4220fb4d8502Sjsg /****************************************************************************/
4221fb4d8502Sjsg 
4222fb4d8502Sjsg // ucAction:
4223fb4d8502Sjsg enum atom_dig_encoder_control_action
4224fb4d8502Sjsg {
4225fb4d8502Sjsg   ATOM_ENCODER_CMD_DISABLE_DIG                  = 0,
4226fb4d8502Sjsg   ATOM_ENCODER_CMD_ENABLE_DIG                   = 1,
4227fb4d8502Sjsg   ATOM_ENCODER_CMD_DP_LINK_TRAINING_START       = 0x08,
4228fb4d8502Sjsg   ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN1    = 0x09,
4229fb4d8502Sjsg   ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN2    = 0x0a,
4230fb4d8502Sjsg   ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN3    = 0x13,
4231fb4d8502Sjsg   ATOM_ENCODER_CMD_DP_LINK_TRAINING_COMPLETE    = 0x0b,
4232fb4d8502Sjsg   ATOM_ENCODER_CMD_DP_VIDEO_OFF                 = 0x0c,
4233fb4d8502Sjsg   ATOM_ENCODER_CMD_DP_VIDEO_ON                  = 0x0d,
4234fb4d8502Sjsg   ATOM_ENCODER_CMD_SETUP_PANEL_MODE             = 0x10,
4235fb4d8502Sjsg   ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN4    = 0x14,
4236fb4d8502Sjsg   ATOM_ENCODER_CMD_STREAM_SETUP                 = 0x0F,
4237fb4d8502Sjsg   ATOM_ENCODER_CMD_LINK_SETUP                   = 0x11,
4238fb4d8502Sjsg   ATOM_ENCODER_CMD_ENCODER_BLANK                = 0x12,
4239fb4d8502Sjsg };
4240fb4d8502Sjsg 
4241fb4d8502Sjsg //define ucPanelMode
4242fb4d8502Sjsg enum atom_dig_encoder_control_panelmode
4243fb4d8502Sjsg {
4244fb4d8502Sjsg   DP_PANEL_MODE_DISABLE                        = 0x00,
4245fb4d8502Sjsg   DP_PANEL_MODE_ENABLE_eDP_MODE                = 0x01,
4246fb4d8502Sjsg   DP_PANEL_MODE_ENABLE_LVLINK_MODE             = 0x11,
4247fb4d8502Sjsg };
4248fb4d8502Sjsg 
4249fb4d8502Sjsg //ucDigId
4250fb4d8502Sjsg enum atom_dig_encoder_control_v5_digid
4251fb4d8502Sjsg {
4252fb4d8502Sjsg   ATOM_ENCODER_CONFIG_V5_DIG0_ENCODER           = 0x00,
4253fb4d8502Sjsg   ATOM_ENCODER_CONFIG_V5_DIG1_ENCODER           = 0x01,
4254fb4d8502Sjsg   ATOM_ENCODER_CONFIG_V5_DIG2_ENCODER           = 0x02,
4255fb4d8502Sjsg   ATOM_ENCODER_CONFIG_V5_DIG3_ENCODER           = 0x03,
4256fb4d8502Sjsg   ATOM_ENCODER_CONFIG_V5_DIG4_ENCODER           = 0x04,
4257fb4d8502Sjsg   ATOM_ENCODER_CONFIG_V5_DIG5_ENCODER           = 0x05,
4258fb4d8502Sjsg   ATOM_ENCODER_CONFIG_V5_DIG6_ENCODER           = 0x06,
4259fb4d8502Sjsg   ATOM_ENCODER_CONFIG_V5_DIG7_ENCODER           = 0x07,
4260fb4d8502Sjsg };
4261fb4d8502Sjsg 
4262fb4d8502Sjsg struct dig_encoder_stream_setup_parameters_v1_5
4263fb4d8502Sjsg {
4264fb4d8502Sjsg   uint8_t digid;            // 0~6 map to DIG0~DIG6 enum atom_dig_encoder_control_v5_digid
4265fb4d8502Sjsg   uint8_t action;           // =  ATOM_ENOCODER_CMD_STREAM_SETUP
4266fb4d8502Sjsg   uint8_t digmode;          // ATOM_ENCODER_MODE_DP/ATOM_ENCODER_MODE_DVI/ATOM_ENCODER_MODE_HDMI
4267fb4d8502Sjsg   uint8_t lanenum;          // Lane number
4268fb4d8502Sjsg   uint32_t pclk_10khz;      // Pixel Clock in 10Khz
4269fb4d8502Sjsg   uint8_t bitpercolor;
4270fb4d8502Sjsg   uint8_t dplinkrate_270mhz;//= DP link rate/270Mhz, =6: 1.62G  = 10: 2.7G, =20: 5.4Ghz, =30: 8.1Ghz etc
4271fb4d8502Sjsg   uint8_t reserved[2];
4272fb4d8502Sjsg };
4273fb4d8502Sjsg 
4274fb4d8502Sjsg struct dig_encoder_link_setup_parameters_v1_5
4275fb4d8502Sjsg {
4276fb4d8502Sjsg   uint8_t digid;           // 0~6 map to DIG0~DIG6 enum atom_dig_encoder_control_v5_digid
4277fb4d8502Sjsg   uint8_t action;          // =  ATOM_ENOCODER_CMD_LINK_SETUP
4278fb4d8502Sjsg   uint8_t digmode;         // ATOM_ENCODER_MODE_DP/ATOM_ENCODER_MODE_DVI/ATOM_ENCODER_MODE_HDMI
4279fb4d8502Sjsg   uint8_t lanenum;         // Lane number
4280fb4d8502Sjsg   uint8_t symclk_10khz;    // Symbol Clock in 10Khz
4281fb4d8502Sjsg   uint8_t hpd_sel;
4282fb4d8502Sjsg   uint8_t digfe_sel;       // DIG stream( front-end ) selection, bit0 means DIG0 FE is enable,
4283fb4d8502Sjsg   uint8_t reserved[2];
4284fb4d8502Sjsg };
4285fb4d8502Sjsg 
4286fb4d8502Sjsg struct dp_panel_mode_set_parameters_v1_5
4287fb4d8502Sjsg {
4288fb4d8502Sjsg   uint8_t digid;              // 0~6 map to DIG0~DIG6 enum atom_dig_encoder_control_v5_digid
4289fb4d8502Sjsg   uint8_t action;             // = ATOM_ENCODER_CMD_DPLINK_SETUP
4290fb4d8502Sjsg   uint8_t panelmode;      // enum atom_dig_encoder_control_panelmode
4291fb4d8502Sjsg   uint8_t reserved1;
4292fb4d8502Sjsg   uint32_t reserved2[2];
4293fb4d8502Sjsg };
4294fb4d8502Sjsg 
4295fb4d8502Sjsg struct dig_encoder_generic_cmd_parameters_v1_5
4296fb4d8502Sjsg {
4297fb4d8502Sjsg   uint8_t digid;           // 0~6 map to DIG0~DIG6 enum atom_dig_encoder_control_v5_digid
4298fb4d8502Sjsg   uint8_t action;          // = rest of generic encoder command which does not carry any parameters
4299fb4d8502Sjsg   uint8_t reserved1[2];
4300fb4d8502Sjsg   uint32_t reserved2[2];
4301fb4d8502Sjsg };
4302fb4d8502Sjsg 
4303fb4d8502Sjsg union dig_encoder_control_parameters_v1_5
4304fb4d8502Sjsg {
4305fb4d8502Sjsg   struct dig_encoder_generic_cmd_parameters_v1_5  cmd_param;
4306fb4d8502Sjsg   struct dig_encoder_stream_setup_parameters_v1_5 stream_param;
4307fb4d8502Sjsg   struct dig_encoder_link_setup_parameters_v1_5   link_param;
4308fb4d8502Sjsg   struct dp_panel_mode_set_parameters_v1_5 dppanel_param;
4309fb4d8502Sjsg };
4310fb4d8502Sjsg 
4311fb4d8502Sjsg /*
4312fb4d8502Sjsg   ***************************************************************************
4313fb4d8502Sjsg               Structures used by dig1transmittercontrol
4314fb4d8502Sjsg   ***************************************************************************
4315fb4d8502Sjsg */
4316fb4d8502Sjsg struct dig_transmitter_control_parameters_v1_6
4317fb4d8502Sjsg {
4318fb4d8502Sjsg   uint8_t phyid;           // 0=UNIPHYA, 1=UNIPHYB, 2=UNIPHYC, 3=UNIPHYD, 4= UNIPHYE 5=UNIPHYF
4319fb4d8502Sjsg   uint8_t action;          // define as ATOM_TRANSMITER_ACTION_xxx
4320fb4d8502Sjsg   union {
4321fb4d8502Sjsg     uint8_t digmode;        // enum atom_encode_mode_def
4322fb4d8502Sjsg     uint8_t dplaneset;      // DP voltage swing and pre-emphasis value defined in DPCD DP_LANE_SET, "DP_LANE_SET__xDB_y_zV"
4323fb4d8502Sjsg   } mode_laneset;
4324fb4d8502Sjsg   uint8_t  lanenum;        // Lane number 1, 2, 4, 8
4325fb4d8502Sjsg   uint32_t symclk_10khz;   // Symbol Clock in 10Khz
4326fb4d8502Sjsg   uint8_t  hpdsel;         // =1: HPD1, =2: HPD2, .... =6: HPD6, =0: HPD is not assigned
4327fb4d8502Sjsg   uint8_t  digfe_sel;      // DIG stream( front-end ) selection, bit0 means DIG0 FE is enable,
4328fb4d8502Sjsg   uint8_t  connobj_id;     // Connector Object Id defined in ObjectId.h
4329fb4d8502Sjsg   uint8_t  reserved;
4330fb4d8502Sjsg   uint32_t reserved1;
4331fb4d8502Sjsg };
4332fb4d8502Sjsg 
4333fb4d8502Sjsg struct dig_transmitter_control_ps_allocation_v1_6
4334fb4d8502Sjsg {
4335fb4d8502Sjsg   struct dig_transmitter_control_parameters_v1_6 param;
4336fb4d8502Sjsg   uint32_t reserved[4];
4337fb4d8502Sjsg };
4338fb4d8502Sjsg 
4339fb4d8502Sjsg //ucAction
4340fb4d8502Sjsg enum atom_dig_transmitter_control_action
4341fb4d8502Sjsg {
4342fb4d8502Sjsg   ATOM_TRANSMITTER_ACTION_DISABLE                 = 0,
4343fb4d8502Sjsg   ATOM_TRANSMITTER_ACTION_ENABLE                  = 1,
4344fb4d8502Sjsg   ATOM_TRANSMITTER_ACTION_LCD_BLOFF               = 2,
4345fb4d8502Sjsg   ATOM_TRANSMITTER_ACTION_LCD_BLON                = 3,
4346fb4d8502Sjsg   ATOM_TRANSMITTER_ACTION_BL_BRIGHTNESS_CONTROL   = 4,
4347fb4d8502Sjsg   ATOM_TRANSMITTER_ACTION_LCD_SELFTEST_START      = 5,
4348fb4d8502Sjsg   ATOM_TRANSMITTER_ACTION_LCD_SELFTEST_STOP       = 6,
4349fb4d8502Sjsg   ATOM_TRANSMITTER_ACTION_INIT                    = 7,
4350fb4d8502Sjsg   ATOM_TRANSMITTER_ACTION_DISABLE_OUTPUT          = 8,
4351fb4d8502Sjsg   ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT           = 9,
4352fb4d8502Sjsg   ATOM_TRANSMITTER_ACTION_SETUP                   = 10,
4353fb4d8502Sjsg   ATOM_TRANSMITTER_ACTION_SETUP_VSEMPH            = 11,
4354fb4d8502Sjsg   ATOM_TRANSMITTER_ACTION_POWER_ON                = 12,
4355fb4d8502Sjsg   ATOM_TRANSMITTER_ACTION_POWER_OFF               = 13,
4356fb4d8502Sjsg };
4357fb4d8502Sjsg 
4358fb4d8502Sjsg // digfe_sel
4359fb4d8502Sjsg enum atom_dig_transmitter_control_digfe_sel
4360fb4d8502Sjsg {
4361fb4d8502Sjsg   ATOM_TRANMSITTER_V6__DIGA_SEL                   = 0x01,
4362fb4d8502Sjsg   ATOM_TRANMSITTER_V6__DIGB_SEL                   = 0x02,
4363fb4d8502Sjsg   ATOM_TRANMSITTER_V6__DIGC_SEL                   = 0x04,
4364fb4d8502Sjsg   ATOM_TRANMSITTER_V6__DIGD_SEL                   = 0x08,
4365fb4d8502Sjsg   ATOM_TRANMSITTER_V6__DIGE_SEL                   = 0x10,
4366fb4d8502Sjsg   ATOM_TRANMSITTER_V6__DIGF_SEL                   = 0x20,
4367fb4d8502Sjsg   ATOM_TRANMSITTER_V6__DIGG_SEL                   = 0x40,
4368fb4d8502Sjsg };
4369fb4d8502Sjsg 
4370fb4d8502Sjsg 
4371fb4d8502Sjsg //ucHPDSel
4372fb4d8502Sjsg enum atom_dig_transmitter_control_hpd_sel
4373fb4d8502Sjsg {
4374fb4d8502Sjsg   ATOM_TRANSMITTER_V6_NO_HPD_SEL                  = 0x00,
4375fb4d8502Sjsg   ATOM_TRANSMITTER_V6_HPD1_SEL                    = 0x01,
4376fb4d8502Sjsg   ATOM_TRANSMITTER_V6_HPD2_SEL                    = 0x02,
4377fb4d8502Sjsg   ATOM_TRANSMITTER_V6_HPD3_SEL                    = 0x03,
4378fb4d8502Sjsg   ATOM_TRANSMITTER_V6_HPD4_SEL                    = 0x04,
4379fb4d8502Sjsg   ATOM_TRANSMITTER_V6_HPD5_SEL                    = 0x05,
4380fb4d8502Sjsg   ATOM_TRANSMITTER_V6_HPD6_SEL                    = 0x06,
4381fb4d8502Sjsg };
4382fb4d8502Sjsg 
4383fb4d8502Sjsg // ucDPLaneSet
4384fb4d8502Sjsg enum atom_dig_transmitter_control_dplaneset
4385fb4d8502Sjsg {
4386fb4d8502Sjsg   DP_LANE_SET__0DB_0_4V                           = 0x00,
4387fb4d8502Sjsg   DP_LANE_SET__0DB_0_6V                           = 0x01,
4388fb4d8502Sjsg   DP_LANE_SET__0DB_0_8V                           = 0x02,
4389fb4d8502Sjsg   DP_LANE_SET__0DB_1_2V                           = 0x03,
4390fb4d8502Sjsg   DP_LANE_SET__3_5DB_0_4V                         = 0x08,
4391fb4d8502Sjsg   DP_LANE_SET__3_5DB_0_6V                         = 0x09,
4392fb4d8502Sjsg   DP_LANE_SET__3_5DB_0_8V                         = 0x0a,
4393fb4d8502Sjsg   DP_LANE_SET__6DB_0_4V                           = 0x10,
4394fb4d8502Sjsg   DP_LANE_SET__6DB_0_6V                           = 0x11,
4395fb4d8502Sjsg   DP_LANE_SET__9_5DB_0_4V                         = 0x18,
4396fb4d8502Sjsg };
4397fb4d8502Sjsg 
4398fb4d8502Sjsg 
4399fb4d8502Sjsg 
4400fb4d8502Sjsg /****************************************************************************/
4401fb4d8502Sjsg // Structures used by ExternalEncoderControl V2.4
4402fb4d8502Sjsg /****************************************************************************/
4403fb4d8502Sjsg 
4404fb4d8502Sjsg struct external_encoder_control_parameters_v2_4
4405fb4d8502Sjsg {
4406fb4d8502Sjsg   uint16_t pixelclock_10khz;  // pixel clock in 10Khz, valid when ucAction=SETUP/ENABLE_OUTPUT
4407fb4d8502Sjsg   uint8_t  config;            // indicate which encoder, and DP link rate when ucAction = SETUP/ENABLE_OUTPUT
4408fb4d8502Sjsg   uint8_t  action;            //
4409fb4d8502Sjsg   uint8_t  encodermode;       // encoder mode, only used when ucAction = SETUP/ENABLE_OUTPUT
4410fb4d8502Sjsg   uint8_t  lanenum;           // lane number, only used when ucAction = SETUP/ENABLE_OUTPUT
4411fb4d8502Sjsg   uint8_t  bitpercolor;       // output bit per color, only valid when ucAction = SETUP/ENABLE_OUTPUT and ucEncodeMode= DP
4412fb4d8502Sjsg   uint8_t  hpd_id;
4413fb4d8502Sjsg };
4414fb4d8502Sjsg 
4415fb4d8502Sjsg 
4416fb4d8502Sjsg // ucAction
4417fb4d8502Sjsg enum external_encoder_control_action_def
4418fb4d8502Sjsg {
4419fb4d8502Sjsg   EXTERNAL_ENCODER_ACTION_V3_DISABLE_OUTPUT           = 0x00,
4420fb4d8502Sjsg   EXTERNAL_ENCODER_ACTION_V3_ENABLE_OUTPUT            = 0x01,
4421fb4d8502Sjsg   EXTERNAL_ENCODER_ACTION_V3_ENCODER_INIT             = 0x07,
4422fb4d8502Sjsg   EXTERNAL_ENCODER_ACTION_V3_ENCODER_SETUP            = 0x0f,
4423fb4d8502Sjsg   EXTERNAL_ENCODER_ACTION_V3_ENCODER_BLANKING_OFF     = 0x10,
4424fb4d8502Sjsg   EXTERNAL_ENCODER_ACTION_V3_ENCODER_BLANKING         = 0x11,
4425fb4d8502Sjsg   EXTERNAL_ENCODER_ACTION_V3_DACLOAD_DETECTION        = 0x12,
4426fb4d8502Sjsg   EXTERNAL_ENCODER_ACTION_V3_DDC_SETUP                = 0x14,
4427fb4d8502Sjsg };
4428fb4d8502Sjsg 
4429fb4d8502Sjsg // ucConfig
4430fb4d8502Sjsg enum external_encoder_control_v2_4_config_def
4431fb4d8502Sjsg {
4432fb4d8502Sjsg   EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_MASK          = 0x03,
4433fb4d8502Sjsg   EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_1_62GHZ       = 0x00,
4434fb4d8502Sjsg   EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_2_70GHZ       = 0x01,
4435fb4d8502Sjsg   EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_5_40GHZ       = 0x02,
4436fb4d8502Sjsg   EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_3_24GHZ       = 0x03,
4437fb4d8502Sjsg   EXTERNAL_ENCODER_CONFIG_V3_ENCODER_SEL_MAKS         = 0x70,
4438fb4d8502Sjsg   EXTERNAL_ENCODER_CONFIG_V3_ENCODER1                 = 0x00,
4439fb4d8502Sjsg   EXTERNAL_ENCODER_CONFIG_V3_ENCODER2                 = 0x10,
4440fb4d8502Sjsg   EXTERNAL_ENCODER_CONFIG_V3_ENCODER3                 = 0x20,
4441fb4d8502Sjsg };
4442fb4d8502Sjsg 
4443fb4d8502Sjsg struct external_encoder_control_ps_allocation_v2_4
4444fb4d8502Sjsg {
4445fb4d8502Sjsg   struct external_encoder_control_parameters_v2_4 sExtEncoder;
4446fb4d8502Sjsg   uint32_t reserved[2];
4447fb4d8502Sjsg };
4448fb4d8502Sjsg 
4449fb4d8502Sjsg 
4450fb4d8502Sjsg /*
4451fb4d8502Sjsg   ***************************************************************************
4452fb4d8502Sjsg                            AMD ACPI Table
4453fb4d8502Sjsg 
4454fb4d8502Sjsg   ***************************************************************************
4455fb4d8502Sjsg */
4456fb4d8502Sjsg 
4457fb4d8502Sjsg struct amd_acpi_description_header{
4458fb4d8502Sjsg   uint32_t signature;
4459fb4d8502Sjsg   uint32_t tableLength;      //Length
4460fb4d8502Sjsg   uint8_t  revision;
4461fb4d8502Sjsg   uint8_t  checksum;
4462fb4d8502Sjsg   uint8_t  oemId[6];
4463fb4d8502Sjsg   uint8_t  oemTableId[8];    //UINT64  OemTableId;
4464fb4d8502Sjsg   uint32_t oemRevision;
4465fb4d8502Sjsg   uint32_t creatorId;
4466fb4d8502Sjsg   uint32_t creatorRevision;
4467fb4d8502Sjsg };
4468fb4d8502Sjsg 
4469fb4d8502Sjsg struct uefi_acpi_vfct{
4470fb4d8502Sjsg   struct   amd_acpi_description_header sheader;
4471fb4d8502Sjsg   uint8_t  tableUUID[16];    //0x24
4472fb4d8502Sjsg   uint32_t vbiosimageoffset; //0x34. Offset to the first GOP_VBIOS_CONTENT block from the beginning of the stucture.
4473fb4d8502Sjsg   uint32_t lib1Imageoffset;  //0x38. Offset to the first GOP_LIB1_CONTENT block from the beginning of the stucture.
4474fb4d8502Sjsg   uint32_t reserved[4];      //0x3C
4475fb4d8502Sjsg };
4476fb4d8502Sjsg 
4477fb4d8502Sjsg struct vfct_image_header{
4478fb4d8502Sjsg   uint32_t  pcibus;          //0x4C
4479fb4d8502Sjsg   uint32_t  pcidevice;       //0x50
4480fb4d8502Sjsg   uint32_t  pcifunction;     //0x54
4481fb4d8502Sjsg   uint16_t  vendorid;        //0x58
4482fb4d8502Sjsg   uint16_t  deviceid;        //0x5A
4483fb4d8502Sjsg   uint16_t  ssvid;           //0x5C
4484fb4d8502Sjsg   uint16_t  ssid;            //0x5E
4485fb4d8502Sjsg   uint32_t  revision;        //0x60
4486fb4d8502Sjsg   uint32_t  imagelength;     //0x64
4487fb4d8502Sjsg };
4488fb4d8502Sjsg 
4489fb4d8502Sjsg 
4490fb4d8502Sjsg struct gop_vbios_content {
4491fb4d8502Sjsg   struct vfct_image_header vbiosheader;
4492fb4d8502Sjsg   uint8_t                  vbioscontent[1];
4493fb4d8502Sjsg };
4494fb4d8502Sjsg 
4495fb4d8502Sjsg struct gop_lib1_content {
4496fb4d8502Sjsg   struct vfct_image_header lib1header;
4497fb4d8502Sjsg   uint8_t                  lib1content[1];
4498fb4d8502Sjsg };
4499fb4d8502Sjsg 
4500fb4d8502Sjsg 
4501fb4d8502Sjsg 
4502fb4d8502Sjsg /*
4503fb4d8502Sjsg   ***************************************************************************
4504fb4d8502Sjsg                    Scratch Register definitions
4505fb4d8502Sjsg   Each number below indicates which scratch regiser request, Active and
4506fb4d8502Sjsg   Connect all share the same definitions as display_device_tag defines
4507fb4d8502Sjsg   ***************************************************************************
4508fb4d8502Sjsg */
4509fb4d8502Sjsg 
4510fb4d8502Sjsg enum scratch_register_def{
4511fb4d8502Sjsg   ATOM_DEVICE_CONNECT_INFO_DEF      = 0,
4512fb4d8502Sjsg   ATOM_BL_BRI_LEVEL_INFO_DEF        = 2,
4513fb4d8502Sjsg   ATOM_ACTIVE_INFO_DEF              = 3,
4514fb4d8502Sjsg   ATOM_LCD_INFO_DEF                 = 4,
4515fb4d8502Sjsg   ATOM_DEVICE_REQ_INFO_DEF          = 5,
4516fb4d8502Sjsg   ATOM_ACC_CHANGE_INFO_DEF          = 6,
4517fb4d8502Sjsg   ATOM_PRE_OS_MODE_INFO_DEF         = 7,
4518fb4d8502Sjsg   ATOM_PRE_OS_ASSERTION_DEF      = 8,    //For GOP to record a 32bit assertion code, this is enabled by default in prodution GOP drivers.
4519fb4d8502Sjsg   ATOM_INTERNAL_TIMER_INFO_DEF      = 10,
4520fb4d8502Sjsg };
4521fb4d8502Sjsg 
4522fb4d8502Sjsg enum scratch_device_connect_info_bit_def{
4523fb4d8502Sjsg   ATOM_DISPLAY_LCD1_CONNECT           =0x0002,
4524fb4d8502Sjsg   ATOM_DISPLAY_DFP1_CONNECT           =0x0008,
4525fb4d8502Sjsg   ATOM_DISPLAY_DFP2_CONNECT           =0x0080,
4526fb4d8502Sjsg   ATOM_DISPLAY_DFP3_CONNECT           =0x0200,
4527fb4d8502Sjsg   ATOM_DISPLAY_DFP4_CONNECT           =0x0400,
4528fb4d8502Sjsg   ATOM_DISPLAY_DFP5_CONNECT           =0x0800,
4529fb4d8502Sjsg   ATOM_DISPLAY_DFP6_CONNECT           =0x0040,
4530fb4d8502Sjsg   ATOM_DISPLAY_DFPx_CONNECT           =0x0ec8,
4531fb4d8502Sjsg   ATOM_CONNECT_INFO_DEVICE_MASK       =0x0fff,
4532fb4d8502Sjsg };
4533fb4d8502Sjsg 
4534fb4d8502Sjsg enum scratch_bl_bri_level_info_bit_def{
4535fb4d8502Sjsg   ATOM_CURRENT_BL_LEVEL_SHIFT         =0x8,
4536fb4d8502Sjsg #ifndef _H2INC
4537fb4d8502Sjsg   ATOM_CURRENT_BL_LEVEL_MASK          =0x0000ff00,
4538fb4d8502Sjsg   ATOM_DEVICE_DPMS_STATE              =0x00010000,
4539fb4d8502Sjsg #endif
4540fb4d8502Sjsg };
4541fb4d8502Sjsg 
4542fb4d8502Sjsg enum scratch_active_info_bits_def{
4543fb4d8502Sjsg   ATOM_DISPLAY_LCD1_ACTIVE            =0x0002,
4544fb4d8502Sjsg   ATOM_DISPLAY_DFP1_ACTIVE            =0x0008,
4545fb4d8502Sjsg   ATOM_DISPLAY_DFP2_ACTIVE            =0x0080,
4546fb4d8502Sjsg   ATOM_DISPLAY_DFP3_ACTIVE            =0x0200,
4547fb4d8502Sjsg   ATOM_DISPLAY_DFP4_ACTIVE            =0x0400,
4548fb4d8502Sjsg   ATOM_DISPLAY_DFP5_ACTIVE            =0x0800,
4549fb4d8502Sjsg   ATOM_DISPLAY_DFP6_ACTIVE            =0x0040,
4550fb4d8502Sjsg   ATOM_ACTIVE_INFO_DEVICE_MASK        =0x0fff,
4551fb4d8502Sjsg };
4552fb4d8502Sjsg 
4553fb4d8502Sjsg enum scratch_device_req_info_bits_def{
4554fb4d8502Sjsg   ATOM_DISPLAY_LCD1_REQ               =0x0002,
4555fb4d8502Sjsg   ATOM_DISPLAY_DFP1_REQ               =0x0008,
4556fb4d8502Sjsg   ATOM_DISPLAY_DFP2_REQ               =0x0080,
4557fb4d8502Sjsg   ATOM_DISPLAY_DFP3_REQ               =0x0200,
4558fb4d8502Sjsg   ATOM_DISPLAY_DFP4_REQ               =0x0400,
4559fb4d8502Sjsg   ATOM_DISPLAY_DFP5_REQ               =0x0800,
4560fb4d8502Sjsg   ATOM_DISPLAY_DFP6_REQ               =0x0040,
4561fb4d8502Sjsg   ATOM_REQ_INFO_DEVICE_MASK           =0x0fff,
4562fb4d8502Sjsg };
4563fb4d8502Sjsg 
4564fb4d8502Sjsg enum scratch_acc_change_info_bitshift_def{
4565fb4d8502Sjsg   ATOM_ACC_CHANGE_ACC_MODE_SHIFT    =4,
4566fb4d8502Sjsg   ATOM_ACC_CHANGE_LID_STATUS_SHIFT  =6,
4567fb4d8502Sjsg };
4568fb4d8502Sjsg 
4569fb4d8502Sjsg enum scratch_acc_change_info_bits_def{
4570fb4d8502Sjsg   ATOM_ACC_CHANGE_ACC_MODE          =0x00000010,
4571fb4d8502Sjsg   ATOM_ACC_CHANGE_LID_STATUS        =0x00000040,
4572fb4d8502Sjsg };
4573fb4d8502Sjsg 
4574fb4d8502Sjsg enum scratch_pre_os_mode_info_bits_def{
4575fb4d8502Sjsg   ATOM_PRE_OS_MODE_MASK             =0x00000003,
4576fb4d8502Sjsg   ATOM_PRE_OS_MODE_VGA              =0x00000000,
4577fb4d8502Sjsg   ATOM_PRE_OS_MODE_VESA             =0x00000001,
4578fb4d8502Sjsg   ATOM_PRE_OS_MODE_GOP              =0x00000002,
4579fb4d8502Sjsg   ATOM_PRE_OS_MODE_PIXEL_DEPTH      =0x0000000C,
4580fb4d8502Sjsg   ATOM_PRE_OS_MODE_PIXEL_FORMAT_MASK=0x000000F0,
4581fb4d8502Sjsg   ATOM_PRE_OS_MODE_8BIT_PAL_EN      =0x00000100,
4582fb4d8502Sjsg   ATOM_ASIC_INIT_COMPLETE           =0x00000200,
4583fb4d8502Sjsg #ifndef _H2INC
4584fb4d8502Sjsg   ATOM_PRE_OS_MODE_NUMBER_MASK      =0xFFFF0000,
4585fb4d8502Sjsg #endif
4586fb4d8502Sjsg };
4587fb4d8502Sjsg 
4588fb4d8502Sjsg 
4589fb4d8502Sjsg 
4590fb4d8502Sjsg /*
4591fb4d8502Sjsg   ***************************************************************************
4592fb4d8502Sjsg                        ATOM firmware ID header file
4593fb4d8502Sjsg               !! Please keep it at end of the atomfirmware.h !!
4594fb4d8502Sjsg   ***************************************************************************
4595fb4d8502Sjsg */
4596fb4d8502Sjsg #include "atomfirmwareid.h"
4597fb4d8502Sjsg #pragma pack()
4598fb4d8502Sjsg 
4599fb4d8502Sjsg #endif
4600fb4d8502Sjsg 
4601