1185377Ssam/*
2185377Ssam * Copyright 2020 Advanced Micro Devices, Inc.
3185377Ssam *
4185377Ssam * Permission is hereby granted, free of charge, to any person obtaining a
5185377Ssam * copy of this software and associated documentation files (the "Software"),
6185377Ssam * to deal in the Software without restriction, including without limitation
7185377Ssam * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8185377Ssam * and/or sell copies of the Software, and to permit persons to whom the
9185377Ssam * Software is furnished to do so, subject to the following conditions:
10185377Ssam *
11185377Ssam * The above copyright notice and this permission notice shall be included in
12185377Ssam * all copies or substantial portions of the Software.
13185377Ssam *
14185377Ssam * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15185377Ssam * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16185377Ssam * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17188968Ssam * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
18185377Ssam * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19185377Ssam * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20185377Ssam * OTHER DEALINGS IN THE SOFTWARE.
21185377Ssam *
22188968Ssam */
23185377Ssam
24185377Ssam#ifndef __SMU11_DRIVER_IF_SIENNA_CICHLID_H__
25185377Ssam#define __SMU11_DRIVER_IF_SIENNA_CICHLID_H__
26185377Ssam
27185377Ssam// *** IMPORTANT ***
28185377Ssam// SMU TEAM: Always increment the interface version if
29185377Ssam// any structure is changed in this file
30185377Ssam#define SMU11_DRIVER_IF_VERSION 0x40
31185377Ssam
32185377Ssam#define PPTABLE_Sienna_Cichlid_SMU_VERSION 7
33185377Ssam
34188979Ssam#define NUM_GFXCLK_DPM_LEVELS  16
35188979Ssam#define NUM_SMNCLK_DPM_LEVELS  2
36185377Ssam#define NUM_SOCCLK_DPM_LEVELS  8
37185377Ssam#define NUM_MP0CLK_DPM_LEVELS  2
38185377Ssam#define NUM_DCLK_DPM_LEVELS    8
39185377Ssam#define NUM_VCLK_DPM_LEVELS    8
40185377Ssam#define NUM_DCEFCLK_DPM_LEVELS 8
41185377Ssam#define NUM_PHYCLK_DPM_LEVELS  8
42185377Ssam#define NUM_DISPCLK_DPM_LEVELS 8
43225431Sadrian#define NUM_PIXCLK_DPM_LEVELS  8
44185377Ssam#define NUM_DTBCLK_DPM_LEVELS  8
45185377Ssam#define NUM_UCLK_DPM_LEVELS    4
46185377Ssam#define NUM_MP1CLK_DPM_LEVELS  2
47188976Ssam#define NUM_LINK_LEVELS        2
48188976Ssam#define NUM_FCLK_DPM_LEVELS    8
49188976Ssam#define NUM_XGMI_LEVELS        2
50234692Sadrian#define NUM_XGMI_PSTATE_LEVELS 4
51188976Ssam#define NUM_OD_FAN_MAX_POINTS  6
52234692Sadrian
53234692Sadrian#define MAX_GFXCLK_DPM_LEVEL  (NUM_GFXCLK_DPM_LEVELS  - 1)
54234692Sadrian#define MAX_SMNCLK_DPM_LEVEL  (NUM_SMNCLK_DPM_LEVELS  - 1)
55234692Sadrian#define MAX_SOCCLK_DPM_LEVEL  (NUM_SOCCLK_DPM_LEVELS  - 1)
56234692Sadrian#define MAX_MP0CLK_DPM_LEVEL  (NUM_MP0CLK_DPM_LEVELS  - 1)
57234692Sadrian#define MAX_DCLK_DPM_LEVEL    (NUM_DCLK_DPM_LEVELS    - 1)
58234692Sadrian#define MAX_VCLK_DPM_LEVEL    (NUM_VCLK_DPM_LEVELS    - 1)
59234692Sadrian#define MAX_DCEFCLK_DPM_LEVEL (NUM_DCEFCLK_DPM_LEVELS - 1)
60234692Sadrian#define MAX_DISPCLK_DPM_LEVEL (NUM_DISPCLK_DPM_LEVELS - 1)
61234692Sadrian#define MAX_PIXCLK_DPM_LEVEL  (NUM_PIXCLK_DPM_LEVELS  - 1)
62234692Sadrian#define MAX_PHYCLK_DPM_LEVEL  (NUM_PHYCLK_DPM_LEVELS  - 1)
63234692Sadrian#define MAX_DTBCLK_DPM_LEVEL  (NUM_DTBCLK_DPM_LEVELS  - 1)
64234692Sadrian#define MAX_UCLK_DPM_LEVEL    (NUM_UCLK_DPM_LEVELS    - 1)
65234692Sadrian#define MAX_MP1CLK_DPM_LEVEL  (NUM_MP1CLK_DPM_LEVELS  - 1)
66234692Sadrian#define MAX_LINK_LEVEL        (NUM_LINK_LEVELS        - 1)
67234692Sadrian#define MAX_FCLK_DPM_LEVEL    (NUM_FCLK_DPM_LEVELS    - 1)
68234692Sadrian
69234692Sadrian//Gemini Modes
70234692Sadrian#define PPSMC_GeminiModeNone   0  //Single GPU board
71188976Ssam#define PPSMC_GeminiModeMaster 1  //Master GPU on a Gemini board
72234692Sadrian#define PPSMC_GeminiModeSlave  2  //Slave GPU on a Gemini board
73234692Sadrian
74234692Sadrian// Feature Control Defines
75234692Sadrian// DPM
76234692Sadrian#define FEATURE_DPM_PREFETCHER_BIT      0
77234692Sadrian#define FEATURE_DPM_GFXCLK_BIT          1
78234692Sadrian#define FEATURE_DPM_GFX_GPO_BIT         2
79188976Ssam#define FEATURE_DPM_UCLK_BIT            3
80234692Sadrian#define FEATURE_DPM_FCLK_BIT            4
81234692Sadrian#define FEATURE_DPM_SOCCLK_BIT          5
82234692Sadrian#define FEATURE_DPM_MP0CLK_BIT          6
83234692Sadrian#define FEATURE_DPM_LINK_BIT            7
84234692Sadrian#define FEATURE_DPM_DCEFCLK_BIT         8
85234692Sadrian#define FEATURE_DPM_XGMI_BIT            9
86234692Sadrian#define FEATURE_MEM_VDDCI_SCALING_BIT   10
87188976Ssam#define FEATURE_MEM_MVDD_SCALING_BIT    11
88188976Ssam
89188976Ssam//Idle
90234692Sadrian#define FEATURE_DS_GFXCLK_BIT           12
91234692Sadrian#define FEATURE_DS_SOCCLK_BIT           13
92234692Sadrian#define FEATURE_DS_FCLK_BIT             14
93234692Sadrian#define FEATURE_DS_LCLK_BIT             15
94234692Sadrian#define FEATURE_DS_DCEFCLK_BIT          16
95234692Sadrian#define FEATURE_DS_UCLK_BIT             17
96234692Sadrian#define FEATURE_GFX_ULV_BIT             18
97234692Sadrian#define FEATURE_FW_DSTATE_BIT           19
98234692Sadrian#define FEATURE_GFXOFF_BIT              20
99185377Ssam#define FEATURE_BACO_BIT                21
100185377Ssam#define FEATURE_MM_DPM_PG_BIT           22
101234692Sadrian#define FEATURE_SPARE_23_BIT            23
102221163Sadrian//Throttler/Response
103221163Sadrian#define FEATURE_PPT_BIT                 24
104221163Sadrian#define FEATURE_TDC_BIT                 25
105221163Sadrian#define FEATURE_APCC_PLUS_BIT           26
106221163Sadrian#define FEATURE_GTHR_BIT                27
107221163Sadrian#define FEATURE_ACDC_BIT                28
108221163Sadrian#define FEATURE_VR0HOT_BIT              29
109221163Sadrian#define FEATURE_VR1HOT_BIT              30
110221163Sadrian#define FEATURE_FW_CTF_BIT              31
111221163Sadrian#define FEATURE_FAN_CONTROL_BIT         32
112221163Sadrian#define FEATURE_THERMAL_BIT             33
113221163Sadrian#define FEATURE_GFX_DCS_BIT             34
114221163Sadrian//VF
115221163Sadrian#define FEATURE_RM_BIT                  35
116221163Sadrian#define FEATURE_LED_DISPLAY_BIT         36
117221163Sadrian//Other
118221163Sadrian#define FEATURE_GFX_SS_BIT              37
119221163Sadrian#define FEATURE_OUT_OF_BAND_MONITOR_BIT 38
120221163Sadrian#define FEATURE_TEMP_DEPENDENT_VMIN_BIT 39
121221163Sadrian
122221163Sadrian#define FEATURE_MMHUB_PG_BIT            40
123221163Sadrian#define FEATURE_ATHUB_PG_BIT            41
124221163Sadrian#define FEATURE_APCC_DFLL_BIT           42
125221163Sadrian#define FEATURE_DF_SUPERV_BIT           43
126240445Sadrian#define FEATURE_RSMU_SMN_CG_BIT         44
127240445Sadrian#define FEATURE_DF_CSTATE_BIT           45
128240445Sadrian#define FEATURE_2_STEP_PSTATE_BIT       46
129240445Sadrian#define FEATURE_SMNCLK_DPM_BIT          47
130240445Sadrian#define FEATURE_PERLINK_GMIDOWN_BIT     48
131240445Sadrian#define FEATURE_GFX_EDC_BIT             49
132185377Ssam#define FEATURE_GFX_PER_PART_VMIN_BIT   50
133225125Sadrian#define FEATURE_SMART_SHIFT_BIT         51
134225125Sadrian#define FEATURE_APT_BIT                 52
135225125Sadrian#define FEATURE_SPARE_53_BIT            53
136225125Sadrian#define FEATURE_SPARE_54_BIT            54
137225125Sadrian#define FEATURE_SPARE_55_BIT            55
138225125Sadrian#define FEATURE_SPARE_56_BIT            56
139225125Sadrian#define FEATURE_SPARE_57_BIT            57
140185377Ssam#define FEATURE_SPARE_58_BIT            58
141185377Ssam#define FEATURE_SPARE_59_BIT            59
142185377Ssam#define FEATURE_SPARE_60_BIT            60
143185377Ssam#define FEATURE_SPARE_61_BIT            61
144185377Ssam#define FEATURE_SPARE_62_BIT            62
145185377Ssam#define FEATURE_SPARE_63_BIT            63
146185377Ssam#define NUM_FEATURES                    64
147185377Ssam
148234692Sadrian//For use with feature control messages
149185377Ssamtypedef enum {
150185377Ssam  FEATURE_PWR_ALL,
151185377Ssam  FEATURE_PWR_S5,
152185377Ssam  FEATURE_PWR_BACO,
153185377Ssam  FEATURE_PWR_SOC,
154185377Ssam  FEATURE_PWR_GFX,
155185377Ssam  FEATURE_PWR_DOMAIN_COUNT,
156185377Ssam} FEATURE_PWR_DOMAIN_e;
157185377Ssam
158185377Ssam
159185377Ssam// Debug Overrides Bitmask
160185377Ssam#define DPM_OVERRIDE_DISABLE_FCLK_PID                0x00000001
161185377Ssam#define DPM_OVERRIDE_DISABLE_UCLK_PID                0x00000002
162185377Ssam#define DPM_OVERRIDE_DISABLE_VOLT_LINK_VCN_FCLK      0x00000004
163185377Ssam#define DPM_OVERRIDE_ENABLE_FREQ_LINK_VCLK_FCLK      0x00000008
164185377Ssam#define DPM_OVERRIDE_ENABLE_FREQ_LINK_DCLK_FCLK      0x00000010
165185377Ssam#define DPM_OVERRIDE_ENABLE_FREQ_LINK_GFXCLK_SOCCLK  0x00000020
166185377Ssam#define DPM_OVERRIDE_ENABLE_FREQ_LINK_GFXCLK_UCLK    0x00000040
167185377Ssam#define DPM_OVERRIDE_DISABLE_VOLT_LINK_DCE_FCLK      0x00000080
168185377Ssam#define DPM_OVERRIDE_DISABLE_VOLT_LINK_MP0_SOCCLK    0x00000100
169185377Ssam#define DPM_OVERRIDE_DISABLE_DFLL_PLL_SHUTDOWN       0x00000200
170185377Ssam#define DPM_OVERRIDE_DISABLE_MEMORY_TEMPERATURE_READ 0x00000400
171185377Ssam#define DPM_OVERRIDE_DISABLE_VOLT_LINK_VCN_DCEFCLK   0x00000800
172185377Ssam#define DPM_OVERRIDE_DISABLE_FAST_FCLK_TIMER         0x00001000
173185377Ssam#define DPM_OVERRIDE_DISABLE_VCN_PG                  0x00002000
174185377Ssam#define DPM_OVERRIDE_DISABLE_FMAX_VMAX               0x00004000
175185377Ssam#define DPM_OVERRIDE_ENABLE_eGPU_USB_WA              0x00008000
176185377Ssam
177185377Ssam// VR Mapping Bit Defines
178185377Ssam#define VR_MAPPING_VR_SELECT_MASK  0x01
179185377Ssam#define VR_MAPPING_VR_SELECT_SHIFT 0x00
180185377Ssam
181185377Ssam#define VR_MAPPING_PLANE_SELECT_MASK  0x02
182244943Sadrian#define VR_MAPPING_PLANE_SELECT_SHIFT 0x01
183185377Ssam
184208711Srpaulo// PSI Bit Defines
185185377Ssam#define PSI_SEL_VR0_PLANE0_PSI0  0x01
186185377Ssam#define PSI_SEL_VR0_PLANE0_PSI1  0x02
187185377Ssam#define PSI_SEL_VR0_PLANE1_PSI0  0x04
188185377Ssam#define PSI_SEL_VR0_PLANE1_PSI1  0x08
189185377Ssam#define PSI_SEL_VR1_PLANE0_PSI0  0x10
190185377Ssam#define PSI_SEL_VR1_PLANE0_PSI1  0x20
191185377Ssam#define PSI_SEL_VR1_PLANE1_PSI0  0x40
192185377Ssam#define PSI_SEL_VR1_PLANE1_PSI1  0x80
193185377Ssam
194185377Ssam// Throttler Control/Status Bits
195185377Ssam#define THROTTLER_PADDING_BIT      0
196185377Ssam#define THROTTLER_TEMP_EDGE_BIT    1
197185377Ssam#define THROTTLER_TEMP_HOTSPOT_BIT 2
198185377Ssam#define THROTTLER_TEMP_MEM_BIT     3
199185377Ssam#define THROTTLER_TEMP_VR_GFX_BIT  4
200185377Ssam#define THROTTLER_TEMP_VR_MEM0_BIT 5
201185377Ssam#define THROTTLER_TEMP_VR_MEM1_BIT 6
202185377Ssam#define THROTTLER_TEMP_VR_SOC_BIT  7
203185377Ssam#define THROTTLER_TEMP_LIQUID0_BIT 8
204185377Ssam#define THROTTLER_TEMP_LIQUID1_BIT 9
205185377Ssam#define THROTTLER_TEMP_PLX_BIT     10
206185377Ssam#define THROTTLER_TDC_GFX_BIT      11
207185377Ssam#define THROTTLER_TDC_SOC_BIT      12
208185377Ssam#define THROTTLER_PPT0_BIT         13
209185377Ssam#define THROTTLER_PPT1_BIT         14
210185377Ssam#define THROTTLER_PPT2_BIT         15
211185377Ssam#define THROTTLER_PPT3_BIT         16
212185377Ssam#define THROTTLER_FIT_BIT          17
213185377Ssam#define THROTTLER_PPM_BIT          18
214185377Ssam#define THROTTLER_APCC_BIT         19
215185377Ssam#define THROTTLER_COUNT            20
216185377Ssam
217185377Ssam// FW DState Features Control Bits
218185377Ssam// FW DState Features Control Bits
219185377Ssam#define FW_DSTATE_SOC_ULV_BIT               0
220185377Ssam#define FW_DSTATE_G6_HSR_BIT                1
221185377Ssam#define FW_DSTATE_G6_PHY_VDDCI_OFF_BIT      2
222185377Ssam#define FW_DSTATE_MP0_DS_BIT                3
223185377Ssam#define FW_DSTATE_SMN_DS_BIT                4
224185377Ssam#define FW_DSTATE_MP1_DS_BIT                5
225185377Ssam#define FW_DSTATE_MP1_WHISPER_MODE_BIT      6
226185377Ssam#define FW_DSTATE_SOC_LIV_MIN_BIT           7
227185377Ssam#define FW_DSTATE_SOC_PLL_PWRDN_BIT         8
228185377Ssam#define FW_DSTATE_MEM_PLL_PWRDN_BIT         9
229185377Ssam#define FW_DSTATE_OPTIMIZE_MALL_REFRESH_BIT 10
230185377Ssam#define FW_DSTATE_MEM_PSI_BIT               11
231185377Ssam#define FW_DSTATE_HSR_NON_STROBE_BIT        12
232185377Ssam#define FW_DSTATE_MP0_ENTER_WFI_BIT         13
233185377Ssam
234185377Ssam#define FW_DSTATE_SOC_ULV_MASK                    (1 << FW_DSTATE_SOC_ULV_BIT          )
235185377Ssam#define FW_DSTATE_G6_HSR_MASK                     (1 << FW_DSTATE_G6_HSR_BIT           )
236185377Ssam#define FW_DSTATE_G6_PHY_VDDCI_OFF_MASK           (1 << FW_DSTATE_G6_PHY_VDDCI_OFF_BIT )
237185377Ssam#define FW_DSTATE_MP1_DS_MASK                     (1 << FW_DSTATE_MP1_DS_BIT           )
238185377Ssam#define FW_DSTATE_MP0_DS_MASK                     (1 << FW_DSTATE_MP0_DS_BIT           )
239185377Ssam#define FW_DSTATE_SMN_DS_MASK                     (1 << FW_DSTATE_SMN_DS_BIT           )
240185377Ssam#define FW_DSTATE_MP1_WHISPER_MODE_MASK           (1 << FW_DSTATE_MP1_WHISPER_MODE_BIT )
241221479Sadrian#define FW_DSTATE_SOC_LIV_MIN_MASK                (1 << FW_DSTATE_SOC_LIV_MIN_BIT      )
242221479Sadrian#define FW_DSTATE_SOC_PLL_PWRDN_MASK              (1 << FW_DSTATE_SOC_PLL_PWRDN_BIT    )
243221479Sadrian#define FW_DSTATE_MEM_PLL_PWRDN_MASK              (1 << FW_DSTATE_MEM_PLL_PWRDN_BIT    )
244221479Sadrian#define FW_DSTATE_OPTIMIZE_MALL_REFRESH_MASK      (1 << FW_DSTATE_OPTIMIZE_MALL_REFRESH_BIT    )
245221479Sadrian#define FW_DSTATE_MEM_PSI_MASK                    (1 << FW_DSTATE_MEM_PSI_BIT    )
246221479Sadrian#define FW_DSTATE_HSR_NON_STROBE_MASK             (1 << FW_DSTATE_HSR_NON_STROBE_BIT    )
247185377Ssam#define FW_DSTATE_MP0_ENTER_WFI_MASK              (1 << FW_DSTATE_MP0_ENTER_WFI_BIT    )
248185377Ssam
249185377Ssam// GFX GPO Feature Contains PACE and DEM sub features
250185377Ssam#define GFX_GPO_PACE_BIT                   0
251185377Ssam#define GFX_GPO_DEM_BIT                    1
252185377Ssam
253185377Ssam#define GFX_GPO_PACE_MASK                  (1 << GFX_GPO_PACE_BIT)
254185377Ssam#define GFX_GPO_DEM_MASK                   (1 << GFX_GPO_DEM_BIT )
255185377Ssam
256185377Ssam#define GPO_UPDATE_REQ_UCLKDPM_MASK  0x1
257185377Ssam#define GPO_UPDATE_REQ_FCLKDPM_MASK  0x2
258228834Sadrian#define GPO_UPDATE_REQ_MALLHIT_MASK  0x4
259228834Sadrian
260228834Sadrian
261185377Ssam//LED Display Mask & Control Bits
262185377Ssam#define LED_DISPLAY_GFX_DPM_BIT            0
263236009Sadrian#define LED_DISPLAY_PCIE_BIT               1
264236009Sadrian#define LED_DISPLAY_ERROR_BIT              2
265236009Sadrian
266188979Ssam//RLC Pace Table total number of levels
267188979Ssam#define RLC_PACE_TABLE_NUM_LEVELS          16
268188979Ssam#define SIENNA_CICHLID_UMC_CHANNEL_NUM     16
269188979Ssam
270236009Sadriantypedef struct {
271236009Sadrian  uint64_t mca_umc_status;
272188979Ssam  uint64_t mca_umc_addr;
273188979Ssam
274233885Sadrian  uint16_t ce_count_lo_chip;
275188979Ssam  uint16_t ce_count_hi_chip;
276188979Ssam
277188979Ssam  uint32_t eccPadding;
278188979Ssam} EccInfo_t;
279185377Ssam
280298939Spfgtypedef struct {
281185377Ssam  EccInfo_t  EccInfo[SIENNA_CICHLID_UMC_CHANNEL_NUM];
282298939Spfg} EccInfoTable_t;
283298939Spfg
284185377Ssamtypedef enum {
285185377Ssam  DRAM_BIT_WIDTH_DISABLED = 0,
286185377Ssam  DRAM_BIT_WIDTH_X_8,
287222301Sadrian  DRAM_BIT_WIDTH_X_16,
288222301Sadrian  DRAM_BIT_WIDTH_X_32,
289222301Sadrian  DRAM_BIT_WIDTH_X_64, // NOT USED.
290222301Sadrian  DRAM_BIT_WIDTH_X_128,
291185377Ssam  DRAM_BIT_WIDTH_COUNT,
292185377Ssam} DRAM_BIT_WIDTH_TYPE_e;
293185377Ssam
294185377Ssam//I2C Interface
295185377Ssam#define NUM_I2C_CONTROLLERS                16
296185377Ssam
297185377Ssam#define I2C_CONTROLLER_ENABLED             1
298185377Ssam#define I2C_CONTROLLER_DISABLED            0
299185377Ssam
300185377Ssam#define MAX_SW_I2C_COMMANDS                24
301185377Ssam
302185377Ssam
303185377Ssamtypedef enum {
304185377Ssam  I2C_CONTROLLER_PORT_0 = 0,  //CKSVII2C0
305185377Ssam  I2C_CONTROLLER_PORT_1 = 1,  //CKSVII2C1
306185377Ssam  I2C_CONTROLLER_PORT_COUNT,
307185377Ssam} I2cControllerPort_e;
308185377Ssam
309185377Ssamtypedef enum {
310225925Sadrian  I2C_CONTROLLER_NAME_VR_GFX = 0,
311185377Ssam  I2C_CONTROLLER_NAME_VR_SOC,
312185377Ssam  I2C_CONTROLLER_NAME_VR_VDDCI,
313185377Ssam  I2C_CONTROLLER_NAME_VR_MVDD,
314185377Ssam  I2C_CONTROLLER_NAME_LIQUID0,
315185377Ssam  I2C_CONTROLLER_NAME_LIQUID1,
316185377Ssam  I2C_CONTROLLER_NAME_PLX,
317185377Ssam  I2C_CONTROLLER_NAME_OTHER,
318208711Srpaulo  I2C_CONTROLLER_NAME_COUNT,
319208711Srpaulo} I2cControllerName_e;
320226759Sadrian
321226759Sadriantypedef enum {
322226759Sadrian  I2C_CONTROLLER_THROTTLER_TYPE_NONE = 0,
323226759Sadrian  I2C_CONTROLLER_THROTTLER_VR_GFX,
324226759Sadrian  I2C_CONTROLLER_THROTTLER_VR_SOC,
325226759Sadrian  I2C_CONTROLLER_THROTTLER_VR_VDDCI,
326226759Sadrian  I2C_CONTROLLER_THROTTLER_VR_MVDD,
327208711Srpaulo  I2C_CONTROLLER_THROTTLER_LIQUID0,
328185377Ssam  I2C_CONTROLLER_THROTTLER_LIQUID1,
329185377Ssam  I2C_CONTROLLER_THROTTLER_PLX,
330185377Ssam  I2C_CONTROLLER_THROTTLER_INA3221,
331185377Ssam  I2C_CONTROLLER_THROTTLER_COUNT,
332185377Ssam} I2cControllerThrottler_e;
333185377Ssam
334185377Ssamtypedef enum {
335185377Ssam  I2C_CONTROLLER_PROTOCOL_VR_XPDE132G5,
336185377Ssam  I2C_CONTROLLER_PROTOCOL_VR_IR35217,
337185377Ssam  I2C_CONTROLLER_PROTOCOL_TMP_TMP102A,
338185377Ssam  I2C_CONTROLLER_PROTOCOL_INA3221,
339185377Ssam  I2C_CONTROLLER_PROTOCOL_COUNT,
340185377Ssam} I2cControllerProtocol_e;
341185377Ssam
342185377Ssamtypedef struct {
343185377Ssam  uint8_t   Enabled;
344185377Ssam  uint8_t   Speed;
345185377Ssam  uint8_t   SlaveAddress;
346185377Ssam  uint8_t   ControllerPort;
347185377Ssam  uint8_t   ControllerName;
348185377Ssam  uint8_t   ThermalThrotter;
349185377Ssam  uint8_t   I2cProtocol;
350185377Ssam  uint8_t   PaddingConfig;
351185377Ssam} I2cControllerConfig_t;
352185377Ssam
353185377Ssamtypedef enum {
354185377Ssam  I2C_PORT_SVD_SCL = 0,
355185377Ssam  I2C_PORT_GPIO,
356185377Ssam} I2cPort_e;
357185377Ssam
358185377Ssamtypedef enum {
359185377Ssam  I2C_SPEED_FAST_50K = 0,      //50  Kbits/s
360185377Ssam  I2C_SPEED_FAST_100K,         //100 Kbits/s
361185377Ssam  I2C_SPEED_FAST_400K,         //400 Kbits/s
362185377Ssam  I2C_SPEED_FAST_PLUS_1M,      //1   Mbits/s (in fast mode)
363185377Ssam  I2C_SPEED_HIGH_1M,           //1   Mbits/s (in high speed mode)
364185377Ssam  I2C_SPEED_HIGH_2M,           //2.3 Mbits/s
365185377Ssam  I2C_SPEED_COUNT,
366185377Ssam} I2cSpeed_e;
367185377Ssam
368185377Ssamtypedef enum {
369185377Ssam  I2C_CMD_READ = 0,
370185377Ssam  I2C_CMD_WRITE,
371185377Ssam  I2C_CMD_COUNT,
372185377Ssam} I2cCmdType_e;
373188976Ssam
374188976Ssamtypedef enum {
375188976Ssam  FAN_MODE_AUTO = 0,
376188976Ssam  FAN_MODE_MANUAL_LINEAR,
377188976Ssam} FanMode_e;
378188976Ssam
379188976Ssam#define CMDCONFIG_STOP_BIT             0
380188976Ssam#define CMDCONFIG_RESTART_BIT          1
381188976Ssam#define CMDCONFIG_READWRITE_BIT        2 //bit should be 0 for read, 1 for write
382188976Ssam
383188976Ssam#define CMDCONFIG_STOP_MASK           (1 << CMDCONFIG_STOP_BIT)
384188976Ssam#define CMDCONFIG_RESTART_MASK        (1 << CMDCONFIG_RESTART_BIT)
385188976Ssam#define CMDCONFIG_READWRITE_MASK      (1 << CMDCONFIG_READWRITE_BIT)
386188976Ssam
387188976Ssamtypedef struct {
388185377Ssam  uint8_t ReadWriteData;  //Return data for read. Data to send for write
389185377Ssam  uint8_t CmdConfig; //Includes whether associated command should have a stop or restart command, and is a read or write
390185377Ssam} SwI2cCmd_t; //SW I2C Command Table
391185377Ssam
392221163Sadriantypedef struct {
393221163Sadrian  uint8_t     I2CcontrollerPort; //CKSVII2C0(0) or //CKSVII2C1(1)
394221163Sadrian  uint8_t     I2CSpeed;          //Use I2cSpeed_e to indicate speed to select
395221163Sadrian  uint8_t     SlaveAddress;      //Slave address of device
396185377Ssam  uint8_t     NumCmds;           //Number of commands
397185377Ssam
398185377Ssam  SwI2cCmd_t  SwI2cCmds[MAX_SW_I2C_COMMANDS];
399185377Ssam} SwI2cRequest_t; // SW I2C Request Table
400185377Ssam
401185377Ssamtypedef struct {
402185377Ssam  SwI2cRequest_t SwI2cRequest;
403185377Ssam
404185377Ssam  uint32_t Spare[8];
405185377Ssam  uint32_t MmHubPadding[8]; // SMU internal use
406185377Ssam} SwI2cRequestExternal_t;
407185377Ssam
408185377Ssam//D3HOT sequences
409185377Ssamtypedef enum {
410185377Ssam  BACO_SEQUENCE,
411221163Sadrian  MSR_SEQUENCE,
412221163Sadrian  BAMACO_SEQUENCE,
413221163Sadrian  ULPS_SEQUENCE,
414185377Ssam  D3HOT_SEQUENCE_COUNT,
415221163Sadrian} D3HOTSequence_e;
416185377Ssam
417185377Ssam//THis is aligned with RSMU PGFSM Register Mapping
418185377Ssamtypedef enum {
419185377Ssam  PG_DYNAMIC_MODE = 0,
420185377Ssam  PG_STATIC_MODE,
421185377Ssam} PowerGatingMode_e;
422185377Ssam
423185377Ssam//This is aligned with RSMU PGFSM Register Mapping
424185377Ssamtypedef enum {
425185377Ssam  PG_POWER_DOWN = 0,
426185377Ssam  PG_POWER_UP,
427185377Ssam} PowerGatingSettings_e;
428185377Ssam
429185377Ssamtypedef struct {
430185377Ssam  uint32_t a;  // store in IEEE float format in this variable
431185377Ssam  uint32_t b;  // store in IEEE float format in this variable
432221806Sadrian  uint32_t c;  // store in IEEE float format in this variable
433221806Sadrian} QuadraticInt_t;
434221806Sadrian
435221806Sadriantypedef struct {
436221806Sadrian  uint32_t a;  // store in fixed point, [31:20] signed integer, [19:0] fractional bits
437221806Sadrian  uint32_t b;  // store in fixed point, [31:20] signed integer, [19:0] fractional bits
438221806Sadrian  uint32_t c;  // store in fixed point, [31:20] signed integer, [19:0] fractional bits
439185377Ssam} QuadraticFixedPoint_t;
440185377Ssam
441185377Ssamtypedef struct {
442185377Ssam  uint32_t m;  // store in IEEE float format in this variable
443185377Ssam  uint32_t b;  // store in IEEE float format in this variable
444185377Ssam} LinearInt_t;
445185377Ssam
446185377Ssamtypedef struct {
447185377Ssam  uint32_t a;  // store in IEEE float format in this variable
448185377Ssam  uint32_t b;  // store in IEEE float format in this variable
449185377Ssam  uint32_t c;  // store in IEEE float format in this variable
450185377Ssam} DroopInt_t;
451185377Ssam
452185377Ssam//Piecewise linear droop model, Sienna_Cichlid currently used only for GFX DFLL
453185377Ssam#define NUM_PIECE_WISE_LINEAR_DROOP_MODEL_VF_POINTS 5
454185377Ssamtypedef enum {
455185377Ssam  PIECEWISE_LINEAR_FUSED_MODEL = 0,
456185377Ssam  PIECEWISE_LINEAR_PP_MODEL,
457185377Ssam  QUADRATIC_PP_MODEL,
458185377Ssam  PERPART_PIECEWISE_LINEAR_PP_MODEL,
459218420Sadrian} DfllDroopModelSelect_e;
460218420Sadrian
461218420Sadriantypedef struct {
462218420Sadrian  uint32_t Fset[NUM_PIECE_WISE_LINEAR_DROOP_MODEL_VF_POINTS];    //in GHz, store in IEEE float format
463185377Ssam  uint32_t Vdroop[NUM_PIECE_WISE_LINEAR_DROOP_MODEL_VF_POINTS];  //in V  , store in IEEE float format
464185377Ssam}PiecewiseLinearDroopInt_t;
465185377Ssam
466185377Ssamtypedef enum {
467185377Ssam  GFXCLK_SOURCE_PLL = 0,
468185377Ssam  GFXCLK_SOURCE_DFLL,
469185377Ssam  GFXCLK_SOURCE_COUNT,
470185377Ssam} GFXCLK_SOURCE_e;
471185377Ssam
472185377Ssam//Only Clks that have DPM descriptors are listed here
473203159Srpaulotypedef enum {
474203159Srpaulo  PPCLK_GFXCLK = 0,
475203159Srpaulo  PPCLK_SOCCLK,
476185377Ssam  PPCLK_UCLK,
477225125Sadrian  PPCLK_FCLK,
478185377Ssam  PPCLK_DCLK_0,
479265030Sadrian  PPCLK_VCLK_0,
480185377Ssam  PPCLK_DCLK_1,
481185377Ssam  PPCLK_VCLK_1,
482265030Sadrian  PPCLK_DCEFCLK,
483185377Ssam  PPCLK_DISPCLK,
484185377Ssam  PPCLK_PIXCLK,
485185377Ssam  PPCLK_PHYCLK,
486185377Ssam  PPCLK_DTBCLK,
487185377Ssam  PPCLK_COUNT,
488185377Ssam} PPCLK_e;
489185377Ssam
490185377Ssamtypedef enum {
491185377Ssam  VOLTAGE_MODE_AVFS = 0,
492185377Ssam  VOLTAGE_MODE_AVFS_SS,
493185377Ssam  VOLTAGE_MODE_SS,
494185377Ssam  VOLTAGE_MODE_COUNT,
495185377Ssam} VOLTAGE_MODE_e;
496185377Ssam
497185377Ssam
498185377Ssamtypedef enum {
499185377Ssam  AVFS_VOLTAGE_GFX = 0,
500185377Ssam  AVFS_VOLTAGE_SOC,
501185377Ssam  AVFS_VOLTAGE_COUNT,
502185377Ssam} AVFS_VOLTAGE_TYPE_e;
503185377Ssam
504185377Ssamtypedef enum {
505185377Ssam  UCLK_DIV_BY_1 = 0,
506185377Ssam  UCLK_DIV_BY_2,
507185377Ssam  UCLK_DIV_BY_4,
508185377Ssam  UCLK_DIV_BY_8,
509185377Ssam} UCLK_DIV_e;
510185377Ssam
511185377Ssamtypedef enum {
512185377Ssam  GPIO_INT_POLARITY_ACTIVE_LOW = 0,
513185377Ssam  GPIO_INT_POLARITY_ACTIVE_HIGH,
514185377Ssam} GpioIntPolarity_e;
515185377Ssam
516185377Ssamtypedef enum {
517185377Ssam  PWR_CONFIG_TDP = 0,
518185377Ssam  PWR_CONFIG_TGP,
519234692Sadrian  PWR_CONFIG_TCP_ESTIMATED,
520234692Sadrian  PWR_CONFIG_TCP_MEASURED,
521298939Spfg} PwrConfig_e;
522185377Ssam
523185377Ssamtypedef enum {
524248129Sadrian  XGMI_LINK_RATE_2 = 2,    // 2Gbps
525185377Ssam  XGMI_LINK_RATE_4 = 4,    // 4Gbps
526219978Sadrian  XGMI_LINK_RATE_8 = 8,    // 8Gbps
527219978Sadrian  XGMI_LINK_RATE_12 = 12,  // 12Gbps
528221617Sadrian  XGMI_LINK_RATE_16 = 16,  // 16Gbps
529221617Sadrian  XGMI_LINK_RATE_17 = 17,  // 17Gbps
530221617Sadrian  XGMI_LINK_RATE_18 = 18,  // 18Gbps
531221617Sadrian  XGMI_LINK_RATE_19 = 19,  // 19Gbps
532221617Sadrian  XGMI_LINK_RATE_20 = 20,  // 20Gbps
533221617Sadrian  XGMI_LINK_RATE_21 = 21,  // 21Gbps
534222301Sadrian  XGMI_LINK_RATE_22 = 22,  // 22Gbps
535208711Srpaulo  XGMI_LINK_RATE_23 = 23,  // 23Gbps
536219217Sadrian  XGMI_LINK_RATE_24 = 24,  // 24Gbps
537208711Srpaulo  XGMI_LINK_RATE_25 = 25,  // 25Gbps
538222301Sadrian  XGMI_LINK_RATE_COUNT
539222301Sadrian} XGMI_LINK_RATE_e;
540222301Sadrian
541222301Sadriantypedef enum {
542222301Sadrian  XGMI_LINK_WIDTH_1 = 0,  // x1
543222301Sadrian  XGMI_LINK_WIDTH_2,  // x2
544222301Sadrian  XGMI_LINK_WIDTH_4,  // x4
545222301Sadrian  XGMI_LINK_WIDTH_8,  // x8
546222301Sadrian  XGMI_LINK_WIDTH_9,  // x9
547222301Sadrian  XGMI_LINK_WIDTH_16, // x16
548222301Sadrian  XGMI_LINK_WIDTH_COUNT
549222301Sadrian} XGMI_LINK_WIDTH_e;
550222301Sadrian
551185377Ssamtypedef struct {
552185377Ssam  uint8_t        VoltageMode;         // 0 - AVFS only, 1- min(AVFS,SS), 2-SS only
553185377Ssam  uint8_t        SnapToDiscrete;      // 0 - Fine grained DPM, 1 - Discrete DPM
554185377Ssam  uint8_t        NumDiscreteLevels;   // Set to 2 (Fmin, Fmax) when using fine grained DPM, otherwise set to # discrete levels used
555185377Ssam  uint8_t        Padding;
556185377Ssam  LinearInt_t    ConversionToAvfsClk; // Transfer function to AVFS Clock (GHz->GHz)
557185377Ssam  QuadraticInt_t SsCurve;             // Slow-slow curve (GHz->V)
558185377Ssam  uint16_t       SsFmin;              // Fmin for SS curve. If SS curve is selected, will use V@SSFmin for F <= Fmin
559185377Ssam  uint16_t       Padding16;
560185377Ssam} DpmDescriptor_t;
561188976Ssam
562188976Ssamtypedef enum  {
563188976Ssam  PPT_THROTTLER_PPT0,
564188976Ssam  PPT_THROTTLER_PPT1,
565188976Ssam  PPT_THROTTLER_PPT2,
566188976Ssam  PPT_THROTTLER_PPT3,
567228834Sadrian  PPT_THROTTLER_COUNT
568228834Sadrian} PPT_THROTTLER_e;
569188976Ssam
570188976Ssamtypedef enum  {
571188976Ssam  TEMP_EDGE,
572188976Ssam  TEMP_HOTSPOT,
573188976Ssam  TEMP_MEM,
574188976Ssam  TEMP_VR_GFX,
575188976Ssam  TEMP_VR_MEM0,
576188976Ssam  TEMP_VR_MEM1,
577188976Ssam  TEMP_VR_SOC,
578188976Ssam  TEMP_LIQUID0,
579208711Srpaulo  TEMP_LIQUID1,
580208711Srpaulo  TEMP_PLX,
581185377Ssam  TEMP_COUNT,
582185377Ssam} TEMP_e;
583185377Ssam
584185377Ssamtypedef enum {
585203159Srpaulo  TDC_THROTTLER_GFX,
586185377Ssam  TDC_THROTTLER_SOC,
587222301Sadrian  TDC_THROTTLER_COUNT
588222301Sadrian} TDC_THROTTLER_e;
589222301Sadrian
590222301Sadriantypedef enum {
591222301Sadrian  CUSTOMER_VARIANT_ROW,
592222301Sadrian  CUSTOMER_VARIANT_FALCON,
593222301Sadrian  CUSTOMER_VARIANT_COUNT,
594222301Sadrian} CUSTOMER_VARIANT_e;
595222301Sadrian
596222301Sadrian// Used for 2-step UCLK DPM change workaround
597222301Sadriantypedef struct {
598185377Ssam  uint16_t Fmin;
599185377Ssam  uint16_t Fmax;
600185377Ssam} UclkDpmChangeRange_t;
601185377Ssam
602185377Ssam#pragma pack(push, 1)
603185377Ssamtypedef struct {
604185377Ssam  // MAJOR SECTION: SKU PARAMETERS
605185377Ssam
606249516Sadrian  uint32_t Version;
607249516Sadrian
608249516Sadrian  // SECTION: Feature Enablement
609249516Sadrian  uint32_t FeaturesToRun[NUM_FEATURES / 32];
610249516Sadrian
611249516Sadrian  // SECTION: Infrastructure Limits
612249516Sadrian  uint16_t SocketPowerLimitAc[PPT_THROTTLER_COUNT]; // Watts
613249516Sadrian  uint16_t SocketPowerLimitAcTau[PPT_THROTTLER_COUNT]; // Time constant of LPF in ms
614249516Sadrian  uint16_t SocketPowerLimitDc[PPT_THROTTLER_COUNT];  // Watts
615249516Sadrian  uint16_t SocketPowerLimitDcTau[PPT_THROTTLER_COUNT];  // Time constant of LPF in ms
616249516Sadrian
617249516Sadrian  uint16_t TdcLimit[TDC_THROTTLER_COUNT];             // Amps
618249516Sadrian  uint16_t TdcLimitTau[TDC_THROTTLER_COUNT];          // Time constant of LPF in ms
619249516Sadrian
620249516Sadrian  uint16_t TemperatureLimit[TEMP_COUNT]; // Celcius
621249516Sadrian
622249516Sadrian  uint32_t FitLimit;                // Failures in time (failures per million parts over the defined lifetime)
623249516Sadrian
624249516Sadrian  // SECTION: Power Configuration
625221573Sadrian  uint8_t      TotalPowerConfig;    //0-TDP, 1-TGP, 2-TCP Estimated, 3-TCP Measured. Use defines from PwrConfig_e
626221573Sadrian  uint8_t      TotalPowerPadding[3];
627221573Sadrian
628221573Sadrian  // SECTION: APCC Settings
629221573Sadrian  uint32_t     ApccPlusResidencyLimit;
630221573Sadrian
631221573Sadrian  //SECTION: SMNCLK DPM
632221573Sadrian  uint16_t       SmnclkDpmFreq        [NUM_SMNCLK_DPM_LEVELS];       // in MHz
633221573Sadrian  uint16_t       SmnclkDpmVoltage     [NUM_SMNCLK_DPM_LEVELS];       // mV(Q2)
634221573Sadrian
635221573Sadrian  uint32_t       PaddingAPCC;
636185377Ssam  uint16_t       PerPartDroopVsetGfxDfll[NUM_PIECE_WISE_LINEAR_DROOP_MODEL_VF_POINTS];  //In mV(Q2)
637185377Ssam  uint16_t       PaddingPerPartDroop;
638185377Ssam
639185377Ssam  // SECTION: Throttler settings
640185377Ssam  uint32_t ThrottlerControlMask;   // See Throtter masks defines
641185377Ssam
642185377Ssam  // SECTION: FW DSTATE Settings
643185377Ssam  uint32_t FwDStateMask;           // See FW DState masks defines
644185377Ssam
645185377Ssam  // SECTION: ULV Settings
646221608Sadrian  uint16_t  UlvVoltageOffsetSoc; // In mV(Q2)
647221608Sadrian  uint16_t  UlvVoltageOffsetGfx; // In mV(Q2)
648221608Sadrian
649185377Ssam  uint16_t     MinVoltageUlvGfx; // In mV(Q2)  Minimum Voltage ("Vmin") of VDD_GFX in ULV mode
650221573Sadrian  uint16_t     MinVoltageUlvSoc; // In mV(Q2)  Minimum Voltage ("Vmin") of VDD_SOC in ULV mode
651221573Sadrian
652221573Sadrian  uint16_t     SocLIVmin;        // In mV(Q2)  Long Idle Vmin (deep ULV), for VDD_SOC
653221573Sadrian  uint16_t     PaddingLIVmin;
654185377Ssam
655185377Ssam  uint8_t   GceaLinkMgrIdleThreshold;        //Set by SMU FW during enablment of GFXOFF. Controls delay for GFX SDP port disconnection during idle events
656185377Ssam  uint8_t   paddingRlcUlvParams[3];
657185377Ssam
658185377Ssam  // SECTION: Voltage Control Parameters
659185377Ssam  uint16_t     MinVoltageGfx;     // In mV(Q2) Minimum Voltage ("Vmin") of VDD_GFX
660185377Ssam  uint16_t     MinVoltageSoc;     // In mV(Q2) Minimum Voltage ("Vmin") of VDD_SOC
661185377Ssam  uint16_t     MaxVoltageGfx;     // In mV(Q2) Maximum Voltage allowable of VDD_GFX
662185377Ssam  uint16_t     MaxVoltageSoc;     // In mV(Q2) Maximum Voltage allowable of VDD_SOC
663185377Ssam
664185377Ssam  uint16_t     LoadLineResistanceGfx;   // In mOhms with 8 fractional bits
665185377Ssam  uint16_t     LoadLineResistanceSoc;   // In mOhms with 8 fractional bits
666185377Ssam
667185377Ssam  // SECTION: Temperature Dependent Vmin
668185377Ssam  uint16_t     VDDGFX_TVmin;       //Celcius
669221573Sadrian  uint16_t     VDDSOC_TVmin;       //Celcius
670221573Sadrian  uint16_t     VDDGFX_Vmin_HiTemp; // mV Q2
671221573Sadrian  uint16_t     VDDGFX_Vmin_LoTemp; // mV Q2
672221573Sadrian  uint16_t     VDDSOC_Vmin_HiTemp; // mV Q2
673221573Sadrian  uint16_t     VDDSOC_Vmin_LoTemp; // mV Q2
674221573Sadrian
675221573Sadrian  uint16_t     VDDGFX_TVminHystersis; // Celcius
676221573Sadrian  uint16_t     VDDSOC_TVminHystersis; // Celcius
677221573Sadrian
678185377Ssam  //SECTION: DPM Config 1
679185377Ssam  DpmDescriptor_t DpmDescriptor[PPCLK_COUNT];
680185377Ssam
681221573Sadrian  uint16_t       FreqTableGfx      [NUM_GFXCLK_DPM_LEVELS  ];     // In MHz
682221573Sadrian  uint16_t       FreqTableVclk     [NUM_VCLK_DPM_LEVELS    ];     // In MHz
683219217Sadrian  uint16_t       FreqTableDclk     [NUM_DCLK_DPM_LEVELS    ];     // In MHz
684221163Sadrian  uint16_t       FreqTableSocclk   [NUM_SOCCLK_DPM_LEVELS  ];     // In MHz
685185377Ssam  uint16_t       FreqTableUclk     [NUM_UCLK_DPM_LEVELS    ];     // In MHz
686185377Ssam  uint16_t       FreqTableDcefclk  [NUM_DCEFCLK_DPM_LEVELS ];     // In MHz
687185377Ssam  uint16_t       FreqTableDispclk  [NUM_DISPCLK_DPM_LEVELS ];     // In MHz
688185377Ssam  uint16_t       FreqTablePixclk   [NUM_PIXCLK_DPM_LEVELS  ];     // In MHz
689185377Ssam  uint16_t       FreqTablePhyclk   [NUM_PHYCLK_DPM_LEVELS  ];     // In MHz
690185377Ssam  uint16_t       FreqTableDtbclk   [NUM_DTBCLK_DPM_LEVELS  ];     // In MHz
691185377Ssam  uint16_t       FreqTableFclk     [NUM_FCLK_DPM_LEVELS    ];     // In MHz
692185377Ssam  uint32_t       Paddingclks;
693203159Srpaulo
694203159Srpaulo  DroopInt_t     PerPartDroopModelGfxDfll[NUM_PIECE_WISE_LINEAR_DROOP_MODEL_VF_POINTS]; //GHz ->Vstore in IEEE float format
695222301Sadrian
696227408Sadrian  uint32_t       DcModeMaxFreq     [PPCLK_COUNT            ];     // In MHz
697227408Sadrian
698227408Sadrian  uint8_t        FreqTableUclkDiv  [NUM_UCLK_DPM_LEVELS    ];     // 0:Div-1, 1:Div-1/2, 2:Div-1/4, 3:Div-1/8
699227408Sadrian
700185377Ssam  // Used for MALL performance boost
701221480Sadrian  uint16_t       FclkBoostFreq;                                   // In Mhz
702217881Sadrian  uint16_t       FclkParamPadding;
703217881Sadrian
704217881Sadrian  // SECTION: DPM Config 2
705217881Sadrian  uint16_t       Mp0clkFreq        [NUM_MP0CLK_DPM_LEVELS];       // in MHz
706185377Ssam  uint16_t       Mp0DpmVoltage     [NUM_MP0CLK_DPM_LEVELS];       // mV(Q2)
707221480Sadrian  uint16_t       MemVddciVoltage   [NUM_UCLK_DPM_LEVELS];         // mV(Q2)
708221573Sadrian  uint16_t       MemMvddVoltage    [NUM_UCLK_DPM_LEVELS];         // mV(Q2)
709221480Sadrian  // GFXCLK DPM
710221480Sadrian  uint16_t        GfxclkFgfxoffEntry;   // in Mhz
711185377Ssam  uint16_t        GfxclkFinit;          // in Mhz
712221480Sadrian  uint16_t        GfxclkFidle;          // in MHz
713221573Sadrian  uint8_t         GfxclkSource;         // 0 = PLL, 1 = DFLL
714221480Sadrian  uint8_t         GfxclkPadding;
715185377Ssam
716221480Sadrian  // GFX GPO
717221480Sadrian  uint8_t         GfxGpoSubFeatureMask; // bit 0 = PACE, bit 1 = DEM
718221163Sadrian  uint8_t         GfxGpoEnabledWorkPolicyMask; //Any policy that GPO can be enabled
719221163Sadrian  uint8_t         GfxGpoDisabledWorkPolicyMask; //Any policy that GPO can be disabled
720221480Sadrian  uint8_t         GfxGpoPadding[1];
721221163Sadrian  uint32_t        GfxGpoVotingAllow;    //For indicating which feature changes should result in a GPO table recalculation
722221163Sadrian
723221480Sadrian  uint32_t        GfxGpoPadding32[4];
724221480Sadrian
725185377Ssam  uint16_t        GfxDcsFopt;           // Optimal GFXCLK for DCS in Mhz
726185377Ssam  uint16_t        GfxDcsFclkFopt;       // Optimal FCLK for DCS in Mhz
727221480Sadrian  uint16_t        GfxDcsUclkFopt;       // Optimal UCLK for DCS in Mhz
728185377Ssam
729185377Ssam  uint16_t        DcsGfxOffVoltage;     //Voltage in mV(Q2) applied to VDDGFX when entering DCS GFXOFF phase
730221480Sadrian
731185377Ssam  uint16_t        DcsMinGfxOffTime;     //Minimum amount of time PMFW shuts GFX OFF as part of GFX DCS phase
732185377Ssam  uint16_t        DcsMaxGfxOffTime;      //Maximum amount of time PMFW can shut GFX OFF as part of GFX DCS phase at a stretch.
733185377Ssam
734185377Ssam  uint32_t        DcsMinCreditAccum;    //Min amount of positive credit accumulation before waking GFX up as part of DCS.
735221480Sadrian
736221480Sadrian  uint16_t        DcsExitHysteresis;    //The min amount of time power credit accumulator should have a value > 0 before SMU exits the DCS throttling phase.
737185377Ssam  uint16_t        DcsTimeout;           //This is the amount of time SMU FW waits for RLC to put GFX into GFXOFF before reverting to the fallback mechanism of throttling GFXCLK to Fmin.
738185377Ssam
739221480Sadrian  uint32_t        DcsParamPadding[5];
740185377Ssam
741185377Ssam  uint16_t        FlopsPerByteTable[RLC_PACE_TABLE_NUM_LEVELS]; // Q8.8
742221480Sadrian
743185377Ssam  // UCLK section
744185377Ssam  uint8_t      LowestUclkReservedForUlv; // Set this to 1 if UCLK DPM0 is reserved for ULV-mode only
745221666Sadrian  uint8_t      PaddingMem[3];
746221480Sadrian
747185377Ssam  uint8_t      UclkDpmPstates     [NUM_UCLK_DPM_LEVELS];     // 4 DPM states, 0-P0, 1-P1, 2-P2, 3-P3.
748221480Sadrian
749221480Sadrian  // Used for 2-Step UCLK change workaround
750221480Sadrian  UclkDpmChangeRange_t UclkDpmSrcFreqRange;  // In Mhz
751185377Ssam  UclkDpmChangeRange_t UclkDpmTargFreqRange; // In Mhz
752221480Sadrian  uint16_t UclkDpmMidstepFreq;               // In Mhz
753221480Sadrian  uint16_t UclkMidstepPadding;
754185377Ssam
755185377Ssam  // Link DPM Settings
756221480Sadrian  uint8_t      PcieGenSpeed[NUM_LINK_LEVELS];           ///< 0:PciE-gen1 1:PciE-gen2 2:PciE-gen3 3:PciE-gen4
757185377Ssam  uint8_t      PcieLaneCount[NUM_LINK_LEVELS];          ///< 1=x1, 2=x2, 3=x4, 4=x8, 5=x12, 6=x16
758185377Ssam  uint16_t     LclkFreq[NUM_LINK_LEVELS];
759221480Sadrian
760203159Srpaulo  // SECTION: Fan Control
761203159Srpaulo  uint16_t     FanStopTemp;          //Celcius
762203159Srpaulo  uint16_t     FanStartTemp;         //Celcius
763221480Sadrian
764203159Srpaulo  uint16_t     FanGain[TEMP_COUNT];
765221480Sadrian
766221480Sadrian  uint16_t     FanPwmMin;
767221480Sadrian  uint16_t     FanAcousticLimitRpm;
768221480Sadrian  uint16_t     FanThrottlingRpm;
769203159Srpaulo  uint16_t     FanMaximumRpm;
770203159Srpaulo  uint16_t     MGpuFanBoostLimitRpm;
771203959Srpaulo  uint16_t     FanTargetTemperature;
772221480Sadrian  uint16_t     FanTargetGfxclk;
773203159Srpaulo  uint16_t     FanPadding16;
774221480Sadrian  uint8_t      FanTempInputSelect;
775221480Sadrian  uint8_t      FanPadding;
776221480Sadrian  uint8_t      FanZeroRpmEnable;
777221480Sadrian  uint8_t      FanTachEdgePerRev;
778218061Sadrian
779218061Sadrian  // The following are AFC override parameters. Leave at 0 to use FW defaults.
780218061Sadrian  int16_t      FuzzyFan_ErrorSetDelta;
781218061Sadrian  int16_t      FuzzyFan_ErrorRateSetDelta;
782222300Sadrian  int16_t      FuzzyFan_PwmSetDelta;
783222300Sadrian  uint16_t     FuzzyFan_Reserved;
784222300Sadrian
785227408Sadrian  // SECTION: AVFS
786227408Sadrian  // Overrides
787227408Sadrian  uint8_t           OverrideAvfsGb[AVFS_VOLTAGE_COUNT];
788227408Sadrian  uint8_t           dBtcGbGfxDfllModelSelect;  //0 -> fused piece-wise model, 1 -> piece-wise linear(PPTable), 2 -> quadratic model(PPTable)
789222300Sadrian  uint8_t           Padding8_Avfs;
790222300Sadrian
791222300Sadrian  QuadraticInt_t    qAvfsGb[AVFS_VOLTAGE_COUNT];              // GHz->V Override of fused curve
792222300Sadrian  DroopInt_t        dBtcGbGfxPll;         // GHz->V BtcGb
793222300Sadrian  DroopInt_t        dBtcGbGfxDfll;        // GHz->V BtcGb
794222300Sadrian  DroopInt_t        dBtcGbSoc;            // GHz->V BtcGb
795222300Sadrian  LinearInt_t       qAgingGb[AVFS_VOLTAGE_COUNT];          // GHz->V
796222300Sadrian
797222300Sadrian  PiecewiseLinearDroopInt_t   PiecewiseLinearDroopIntGfxDfll; //GHz ->Vstore in IEEE float format
798222300Sadrian
799222300Sadrian  QuadraticInt_t    qStaticVoltageOffset[AVFS_VOLTAGE_COUNT]; // GHz->V
800222300Sadrian
801222300Sadrian  uint16_t          DcTol[AVFS_VOLTAGE_COUNT];            // mV Q2
802222300Sadrian
803222300Sadrian  uint8_t           DcBtcEnabled[AVFS_VOLTAGE_COUNT];
804222300Sadrian  uint8_t           Padding8_GfxBtc[2];
805222300Sadrian
806222300Sadrian  uint16_t          DcBtcMin[AVFS_VOLTAGE_COUNT];       // mV Q2
807222300Sadrian  uint16_t          DcBtcMax[AVFS_VOLTAGE_COUNT];       // mV Q2
808222300Sadrian
809222300Sadrian  uint16_t          DcBtcGb[AVFS_VOLTAGE_COUNT];       // mV Q2
810219217Sadrian
811219217Sadrian  // SECTION: XGMI
812219217Sadrian  uint8_t           XgmiDpmPstates[NUM_XGMI_LEVELS]; // 2 DPM states, high and low.  0-P0, 1-P1, 2-P2, 3-P3.
813185377Ssam  uint8_t           XgmiDpmSpare[2];
814
815  // SECTION: Advanced Options
816  uint32_t          DebugOverrides;
817  QuadraticInt_t    ReservedEquation0;
818  QuadraticInt_t    ReservedEquation1;
819  QuadraticInt_t    ReservedEquation2;
820  QuadraticInt_t    ReservedEquation3;
821
822  // SECTION: Sku Reserved
823  uint8_t          CustomerVariant;
824
825  //VC BTC parameters are only applicable to VDD_GFX domain
826  uint8_t          VcBtcEnabled;
827  uint16_t         VcBtcVminT0;                 // T0_VMIN
828  uint16_t         VcBtcFixedVminAgingOffset;   // FIXED_VMIN_AGING_OFFSET
829  uint16_t         VcBtcVmin2PsmDegrationGb;    // VMIN_TO_PSM_DEGRADATION_GB
830  uint32_t         VcBtcPsmA;                   // A_PSM
831  uint32_t         VcBtcPsmB;                   // B_PSM
832  uint32_t         VcBtcVminA;                  // A_VMIN
833  uint32_t         VcBtcVminB;                  // B_VMIN
834
835  //GPIO Board feature
836  uint16_t         LedGpio;            //GeneriA GPIO flag used to control the radeon LEDs
837  uint16_t         GfxPowerStagesGpio; //Genlk_vsync GPIO flag used to control gfx power stages
838
839  uint32_t         SkuReserved[8];
840
841
842  // MAJOR SECTION: BOARD PARAMETERS
843
844  //SECTION: Gaming Clocks
845  uint32_t     GamingClk[6];
846
847  // SECTION: I2C Control
848  I2cControllerConfig_t  I2cControllers[NUM_I2C_CONTROLLERS];
849
850  uint8_t      GpioScl;  // GPIO Number for SCL Line, used only for CKSVII2C1
851  uint8_t      GpioSda;  // GPIO Number for SDA Line, used only for CKSVII2C1
852  uint8_t      FchUsbPdSlaveAddr; //For requesting USB PD controller S-states via FCH I2C when entering PME turn off
853  uint8_t      I2cSpare[1];
854
855  // SECTION: SVI2 Board Parameters
856  uint8_t      VddGfxVrMapping;   // Use VR_MAPPING* bitfields
857  uint8_t      VddSocVrMapping;   // Use VR_MAPPING* bitfields
858  uint8_t      VddMem0VrMapping;  // Use VR_MAPPING* bitfields
859  uint8_t      VddMem1VrMapping;  // Use VR_MAPPING* bitfields
860
861  uint8_t      GfxUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode
862  uint8_t      SocUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode
863  uint8_t      VddciUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode
864  uint8_t      MvddUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode
865
866  // SECTION: Telemetry Settings
867  uint16_t     GfxMaxCurrent;   // in Amps
868  int8_t       GfxOffset;       // in Amps
869  uint8_t      Padding_TelemetryGfx;
870
871  uint16_t     SocMaxCurrent;   // in Amps
872  int8_t       SocOffset;       // in Amps
873  uint8_t      Padding_TelemetrySoc;
874
875  uint16_t     Mem0MaxCurrent;   // in Amps
876  int8_t       Mem0Offset;       // in Amps
877  uint8_t      Padding_TelemetryMem0;
878
879  uint16_t     Mem1MaxCurrent;   // in Amps
880  int8_t       Mem1Offset;       // in Amps
881  uint8_t      Padding_TelemetryMem1;
882
883  uint32_t     MvddRatio; // This is used for MVDD  Svi2 Div Ratio workaround. It has 16 fractional bits (Q16.16)
884
885  // SECTION: GPIO Settings
886  uint8_t      AcDcGpio;        // GPIO pin configured for AC/DC switching
887  uint8_t      AcDcPolarity;    // GPIO polarity for AC/DC switching
888  uint8_t      VR0HotGpio;      // GPIO pin configured for VR0 HOT event
889  uint8_t      VR0HotPolarity;  // GPIO polarity for VR0 HOT event
890
891  uint8_t      VR1HotGpio;      // GPIO pin configured for VR1 HOT event
892  uint8_t      VR1HotPolarity;  // GPIO polarity for VR1 HOT event
893  uint8_t      GthrGpio;        // GPIO pin configured for GTHR Event
894  uint8_t      GthrPolarity;    // replace GPIO polarity for GTHR
895
896  // LED Display Settings
897  uint8_t      LedPin0;         // GPIO number for LedPin[0]
898  uint8_t      LedPin1;         // GPIO number for LedPin[1]
899  uint8_t      LedPin2;         // GPIO number for LedPin[2]
900  uint8_t      LedEnableMask;
901
902  uint8_t      LedPcie;        // GPIO number for PCIE results
903  uint8_t      LedError;       // GPIO number for Error Cases
904  uint8_t      LedSpare1[2];
905
906  // SECTION: Clock Spread Spectrum
907
908  // GFXCLK PLL Spread Spectrum
909  uint8_t      PllGfxclkSpreadEnabled;   // on or off
910  uint8_t      PllGfxclkSpreadPercent;   // Q4.4
911  uint16_t     PllGfxclkSpreadFreq;      // kHz
912
913  // GFXCLK DFLL Spread Spectrum
914  uint8_t      DfllGfxclkSpreadEnabled;   // on or off
915  uint8_t      DfllGfxclkSpreadPercent;   // Q4.4
916  uint16_t     DfllGfxclkSpreadFreq;      // kHz
917
918  // UCLK Spread Spectrum
919  uint16_t     UclkSpreadPadding;
920  uint16_t     UclkSpreadFreq;      // kHz
921
922  // FCLK Spread Spectrum
923  uint8_t      FclkSpreadEnabled;   // on or off
924  uint8_t      FclkSpreadPercent;   // Q4.4
925  uint16_t     FclkSpreadFreq;      // kHz
926
927  // Section: Memory Config
928  uint32_t     MemoryChannelEnabled; // For DRAM use only, Max 32 channels enabled bit mask.
929
930  uint8_t      DramBitWidth; // For DRAM use only.  See Dram Bit width type defines
931  uint8_t      PaddingMem1[3];
932
933  // Section: Total Board Power
934  uint16_t     TotalBoardPower;     //Only needed for TCP Estimated case, where TCP = TGP+Total Board Power
935  uint16_t     BoardPowerPadding;
936
937  // SECTION: XGMI Training
938  uint8_t      XgmiLinkSpeed   [NUM_XGMI_PSTATE_LEVELS];
939  uint8_t      XgmiLinkWidth   [NUM_XGMI_PSTATE_LEVELS];
940
941  uint16_t     XgmiFclkFreq    [NUM_XGMI_PSTATE_LEVELS];
942  uint16_t     XgmiSocVoltage  [NUM_XGMI_PSTATE_LEVELS];
943
944  // SECTION: UMC feature flags
945  uint8_t      HsrEnabled;
946  uint8_t      VddqOffEnabled;
947  uint8_t      PaddingUmcFlags[2];
948
949  // UCLK Spread Spectrum
950  uint8_t      UclkSpreadPercent[16];
951
952  // SECTION: Board Reserved
953  uint32_t     BoardReserved[11];
954
955  // SECTION: Structure Padding
956
957  // Padding for MMHUB - do not modify this
958  uint32_t     MmHubPadding[8]; // SMU internal use
959
960} PPTable_t;
961#pragma pack(pop)
962
963typedef struct {
964  // MAJOR SECTION: SKU PARAMETERS
965
966  uint32_t Version;
967
968  // SECTION: Feature Enablement
969  uint32_t FeaturesToRun[NUM_FEATURES / 32];
970
971  // SECTION: Infrastructure Limits
972  uint16_t SocketPowerLimitAc[PPT_THROTTLER_COUNT]; // Watts
973  uint16_t SocketPowerLimitAcTau[PPT_THROTTLER_COUNT]; // Time constant of LPF in ms
974  uint16_t SocketPowerLimitDc[PPT_THROTTLER_COUNT];  // Watts
975  uint16_t SocketPowerLimitDcTau[PPT_THROTTLER_COUNT];  // Time constant of LPF in ms
976
977  uint16_t TdcLimit[TDC_THROTTLER_COUNT];             // Amps
978  uint16_t TdcLimitTau[TDC_THROTTLER_COUNT];          // Time constant of LPF in ms
979
980  uint16_t TemperatureLimit[TEMP_COUNT]; // Celcius
981
982  uint32_t FitLimit;                // Failures in time (failures per million parts over the defined lifetime)
983
984  // SECTION: Power Configuration
985  uint8_t      TotalPowerConfig;    //0-TDP, 1-TGP, 2-TCP Estimated, 3-TCP Measured. Use defines from PwrConfig_e
986  uint8_t      TotalPowerPadding[3];
987
988  // SECTION: APCC Settings
989  uint32_t     ApccPlusResidencyLimit;
990
991  //SECTION: SMNCLK DPM
992  uint16_t       SmnclkDpmFreq        [NUM_SMNCLK_DPM_LEVELS];       // in MHz
993  uint16_t       SmnclkDpmVoltage     [NUM_SMNCLK_DPM_LEVELS];       // mV(Q2)
994
995  uint32_t       PaddingAPCC;
996  uint16_t       PerPartDroopVsetGfxDfll[NUM_PIECE_WISE_LINEAR_DROOP_MODEL_VF_POINTS];  //In mV(Q2)
997  uint16_t       PaddingPerPartDroop;
998
999  // SECTION: Throttler settings
1000  uint32_t ThrottlerControlMask;   // See Throtter masks defines
1001
1002  // SECTION: FW DSTATE Settings
1003  uint32_t FwDStateMask;           // See FW DState masks defines
1004
1005  // SECTION: ULV Settings
1006  uint16_t  UlvVoltageOffsetSoc; // In mV(Q2)
1007  uint16_t  UlvVoltageOffsetGfx; // In mV(Q2)
1008
1009  uint16_t     MinVoltageUlvGfx; // In mV(Q2)  Minimum Voltage ("Vmin") of VDD_GFX in ULV mode
1010  uint16_t     MinVoltageUlvSoc; // In mV(Q2)  Minimum Voltage ("Vmin") of VDD_SOC in ULV mode
1011
1012  uint16_t     SocLIVmin;
1013  uint16_t     SocLIVminoffset;
1014
1015  uint8_t   GceaLinkMgrIdleThreshold;        //Set by SMU FW during enablment of GFXOFF. Controls delay for GFX SDP port disconnection during idle events
1016  uint8_t   paddingRlcUlvParams[3];
1017
1018  // SECTION: Voltage Control Parameters
1019  uint16_t     MinVoltageGfx;     // In mV(Q2) Minimum Voltage ("Vmin") of VDD_GFX
1020  uint16_t     MinVoltageSoc;     // In mV(Q2) Minimum Voltage ("Vmin") of VDD_SOC
1021  uint16_t     MaxVoltageGfx;     // In mV(Q2) Maximum Voltage allowable of VDD_GFX
1022  uint16_t     MaxVoltageSoc;     // In mV(Q2) Maximum Voltage allowable of VDD_SOC
1023
1024  uint16_t     LoadLineResistanceGfx;   // In mOhms with 8 fractional bits
1025  uint16_t     LoadLineResistanceSoc;   // In mOhms with 8 fractional bits
1026
1027  // SECTION: Temperature Dependent Vmin
1028  uint16_t     VDDGFX_TVmin;       //Celcius
1029  uint16_t     VDDSOC_TVmin;       //Celcius
1030  uint16_t     VDDGFX_Vmin_HiTemp; // mV Q2
1031  uint16_t     VDDGFX_Vmin_LoTemp; // mV Q2
1032  uint16_t     VDDSOC_Vmin_HiTemp; // mV Q2
1033  uint16_t     VDDSOC_Vmin_LoTemp; // mV Q2
1034
1035  uint16_t     VDDGFX_TVminHystersis; // Celcius
1036  uint16_t     VDDSOC_TVminHystersis; // Celcius
1037
1038  //SECTION: DPM Config 1
1039  DpmDescriptor_t DpmDescriptor[PPCLK_COUNT];
1040
1041  uint16_t       FreqTableGfx      [NUM_GFXCLK_DPM_LEVELS  ];     // In MHz
1042  uint16_t       FreqTableVclk     [NUM_VCLK_DPM_LEVELS    ];     // In MHz
1043  uint16_t       FreqTableDclk     [NUM_DCLK_DPM_LEVELS    ];     // In MHz
1044  uint16_t       FreqTableSocclk   [NUM_SOCCLK_DPM_LEVELS  ];     // In MHz
1045  uint16_t       FreqTableUclk     [NUM_UCLK_DPM_LEVELS    ];     // In MHz
1046  uint16_t       FreqTableDcefclk  [NUM_DCEFCLK_DPM_LEVELS ];     // In MHz
1047  uint16_t       FreqTableDispclk  [NUM_DISPCLK_DPM_LEVELS ];     // In MHz
1048  uint16_t       FreqTablePixclk   [NUM_PIXCLK_DPM_LEVELS  ];     // In MHz
1049  uint16_t       FreqTablePhyclk   [NUM_PHYCLK_DPM_LEVELS  ];     // In MHz
1050  uint16_t       FreqTableDtbclk   [NUM_DTBCLK_DPM_LEVELS  ];     // In MHz
1051  uint16_t       FreqTableFclk     [NUM_FCLK_DPM_LEVELS    ];     // In MHz
1052  uint32_t       Paddingclks;
1053
1054  DroopInt_t     PerPartDroopModelGfxDfll[NUM_PIECE_WISE_LINEAR_DROOP_MODEL_VF_POINTS]; //GHz ->Vstore in IEEE float format
1055
1056  uint32_t       DcModeMaxFreq     [PPCLK_COUNT            ];     // In MHz
1057
1058  uint8_t        FreqTableUclkDiv  [NUM_UCLK_DPM_LEVELS    ];     // 0:Div-1, 1:Div-1/2, 2:Div-1/4, 3:Div-1/8
1059
1060  // Used for MALL performance boost
1061  uint16_t       FclkBoostFreq;                                   // In Mhz
1062  uint16_t       FclkParamPadding;
1063
1064  // SECTION: DPM Config 2
1065  uint16_t       Mp0clkFreq        [NUM_MP0CLK_DPM_LEVELS];       // in MHz
1066  uint16_t       Mp0DpmVoltage     [NUM_MP0CLK_DPM_LEVELS];       // mV(Q2)
1067  uint16_t       MemVddciVoltage   [NUM_UCLK_DPM_LEVELS];         // mV(Q2)
1068  uint16_t       MemMvddVoltage    [NUM_UCLK_DPM_LEVELS];         // mV(Q2)
1069  // GFXCLK DPM
1070  uint16_t        GfxclkFgfxoffEntry;   // in Mhz
1071  uint16_t        GfxclkFinit;          // in Mhz
1072  uint16_t        GfxclkFidle;          // in MHz
1073  uint8_t         GfxclkSource;         // 0 = PLL, 1 = DFLL
1074  uint8_t         GfxclkPadding;
1075
1076  // GFX GPO
1077  uint8_t         GfxGpoSubFeatureMask; // bit 0 = PACE, bit 1 = DEM
1078  uint8_t         GfxGpoEnabledWorkPolicyMask; //Any policy that GPO can be enabled
1079  uint8_t         GfxGpoDisabledWorkPolicyMask; //Any policy that GPO can be disabled
1080  uint8_t         GfxGpoPadding[1];
1081  uint32_t        GfxGpoVotingAllow;    //For indicating which feature changes should result in a GPO table recalculation
1082
1083  uint32_t        GfxGpoPadding32[4];
1084
1085  uint16_t        GfxDcsFopt;           // Optimal GFXCLK for DCS in Mhz
1086  uint16_t        GfxDcsFclkFopt;       // Optimal FCLK for DCS in Mhz
1087  uint16_t        GfxDcsUclkFopt;       // Optimal UCLK for DCS in Mhz
1088
1089  uint16_t        DcsGfxOffVoltage;     //Voltage in mV(Q2) applied to VDDGFX when entering DCS GFXOFF phase
1090
1091  uint16_t        DcsMinGfxOffTime;     //Minimum amount of time PMFW shuts GFX OFF as part of GFX DCS phase
1092  uint16_t        DcsMaxGfxOffTime;      //Maximum amount of time PMFW can shut GFX OFF as part of GFX DCS phase at a stretch.
1093
1094  uint32_t        DcsMinCreditAccum;    //Min amount of positive credit accumulation before waking GFX up as part of DCS.
1095
1096  uint16_t        DcsExitHysteresis;    //The min amount of time power credit accumulator should have a value > 0 before SMU exits the DCS throttling phase.
1097  uint16_t        DcsTimeout;           //This is the amount of time SMU FW waits for RLC to put GFX into GFXOFF before reverting to the fallback mechanism of throttling GFXCLK to Fmin.
1098
1099  uint32_t        DcsParamPadding[5];
1100
1101  uint16_t        FlopsPerByteTable[RLC_PACE_TABLE_NUM_LEVELS]; // Q8.8
1102
1103  // UCLK section
1104  uint8_t      LowestUclkReservedForUlv; // Set this to 1 if UCLK DPM0 is reserved for ULV-mode only
1105  uint8_t      PaddingMem[3];
1106
1107  uint8_t      UclkDpmPstates     [NUM_UCLK_DPM_LEVELS];     // 4 DPM states, 0-P0, 1-P1, 2-P2, 3-P3.
1108
1109  // Used for 2-Step UCLK change workaround
1110  UclkDpmChangeRange_t UclkDpmSrcFreqRange;  // In Mhz
1111  UclkDpmChangeRange_t UclkDpmTargFreqRange; // In Mhz
1112  uint16_t UclkDpmMidstepFreq;               // In Mhz
1113  uint16_t UclkMidstepPadding;
1114
1115  // Link DPM Settings
1116  uint8_t      PcieGenSpeed[NUM_LINK_LEVELS];           ///< 0:PciE-gen1 1:PciE-gen2 2:PciE-gen3 3:PciE-gen4
1117  uint8_t      PcieLaneCount[NUM_LINK_LEVELS];          ///< 1=x1, 2=x2, 3=x4, 4=x8, 5=x12, 6=x16
1118  uint16_t     LclkFreq[NUM_LINK_LEVELS];
1119
1120  // SECTION: Fan Control
1121  uint16_t     FanStopTemp;          //Celcius
1122  uint16_t     FanStartTemp;         //Celcius
1123
1124  uint16_t     FanGain[TEMP_COUNT];
1125
1126  uint16_t     FanPwmMin;
1127  uint16_t     FanAcousticLimitRpm;
1128  uint16_t     FanThrottlingRpm;
1129  uint16_t     FanMaximumRpm;
1130  uint16_t     MGpuFanBoostLimitRpm;
1131  uint16_t     FanTargetTemperature;
1132  uint16_t     FanTargetGfxclk;
1133  uint16_t     FanPadding16;
1134  uint8_t      FanTempInputSelect;
1135  uint8_t      FanPadding;
1136  uint8_t      FanZeroRpmEnable;
1137  uint8_t      FanTachEdgePerRev;
1138
1139  // The following are AFC override parameters. Leave at 0 to use FW defaults.
1140  int16_t      FuzzyFan_ErrorSetDelta;
1141  int16_t      FuzzyFan_ErrorRateSetDelta;
1142  int16_t      FuzzyFan_PwmSetDelta;
1143  uint16_t     FuzzyFan_Reserved;
1144
1145  // SECTION: AVFS
1146  // Overrides
1147  uint8_t           OverrideAvfsGb[AVFS_VOLTAGE_COUNT];
1148  uint8_t           dBtcGbGfxDfllModelSelect;  //0 -> fused piece-wise model, 1 -> piece-wise linear(PPTable), 2 -> quadratic model(PPTable)
1149  uint8_t           Padding8_Avfs;
1150
1151  QuadraticInt_t    qAvfsGb[AVFS_VOLTAGE_COUNT];              // GHz->V Override of fused curve
1152  DroopInt_t        dBtcGbGfxPll;         // GHz->V BtcGb
1153  DroopInt_t        dBtcGbGfxDfll;        // GHz->V BtcGb
1154  DroopInt_t        dBtcGbSoc;            // GHz->V BtcGb
1155  LinearInt_t       qAgingGb[AVFS_VOLTAGE_COUNT];          // GHz->V
1156
1157  PiecewiseLinearDroopInt_t   PiecewiseLinearDroopIntGfxDfll; //GHz ->Vstore in IEEE float format
1158
1159  QuadraticInt_t    qStaticVoltageOffset[AVFS_VOLTAGE_COUNT]; // GHz->V
1160
1161  uint16_t          DcTol[AVFS_VOLTAGE_COUNT];            // mV Q2
1162
1163  uint8_t           DcBtcEnabled[AVFS_VOLTAGE_COUNT];
1164  uint8_t           Padding8_GfxBtc[2];
1165
1166  uint16_t          DcBtcMin[AVFS_VOLTAGE_COUNT];       // mV Q2
1167  uint16_t          DcBtcMax[AVFS_VOLTAGE_COUNT];       // mV Q2
1168
1169  uint16_t          DcBtcGb[AVFS_VOLTAGE_COUNT];       // mV Q2
1170
1171  // SECTION: XGMI
1172  uint8_t           XgmiDpmPstates[NUM_XGMI_LEVELS]; // 2 DPM states, high and low.  0-P0, 1-P1, 2-P2, 3-P3.
1173  uint8_t           XgmiDpmSpare[2];
1174
1175  // SECTION: Advanced Options
1176  uint32_t          DebugOverrides;
1177  QuadraticInt_t    ReservedEquation0;
1178  QuadraticInt_t    ReservedEquation1;
1179  QuadraticInt_t    ReservedEquation2;
1180  QuadraticInt_t    ReservedEquation3;
1181
1182  // SECTION: Sku Reserved
1183  uint8_t          CustomerVariant;
1184
1185    //VC BTC parameters are only applicable to VDD_GFX domain
1186  uint8_t          VcBtcEnabled;
1187  uint16_t         VcBtcVminT0;                 // T0_VMIN
1188  uint16_t         VcBtcFixedVminAgingOffset;   // FIXED_VMIN_AGING_OFFSET
1189  uint16_t         VcBtcVmin2PsmDegrationGb;    // VMIN_TO_PSM_DEGRADATION_GB
1190  uint32_t         VcBtcPsmA;                   // A_PSM
1191  uint32_t         VcBtcPsmB;                   // B_PSM
1192  uint32_t         VcBtcVminA;                  // A_VMIN
1193  uint32_t         VcBtcVminB;                  // B_VMIN
1194
1195  //GPIO Board feature
1196  uint16_t         LedGpio;            //GeneriA GPIO flag used to control the radeon LEDs
1197  uint16_t         GfxPowerStagesGpio; //Genlk_vsync GPIO flag used to control gfx power stages
1198
1199  uint32_t         SkuReserved[63];
1200
1201
1202
1203  // MAJOR SECTION: BOARD PARAMETERS
1204
1205  //SECTION: Gaming Clocks
1206  uint32_t     GamingClk[6];
1207
1208  // SECTION: I2C Control
1209  I2cControllerConfig_t  I2cControllers[NUM_I2C_CONTROLLERS];
1210
1211  uint8_t      GpioScl;  // GPIO Number for SCL Line, used only for CKSVII2C1
1212  uint8_t      GpioSda;  // GPIO Number for SDA Line, used only for CKSVII2C1
1213  uint8_t      FchUsbPdSlaveAddr; //For requesting USB PD controller S-states via FCH I2C when entering PME turn off
1214  uint8_t      I2cSpare[1];
1215
1216  // SECTION: SVI2 Board Parameters
1217  uint8_t      VddGfxVrMapping;   // Use VR_MAPPING* bitfields
1218  uint8_t      VddSocVrMapping;   // Use VR_MAPPING* bitfields
1219  uint8_t      VddMem0VrMapping;  // Use VR_MAPPING* bitfields
1220  uint8_t      VddMem1VrMapping;  // Use VR_MAPPING* bitfields
1221
1222  uint8_t      GfxUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode
1223  uint8_t      SocUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode
1224  uint8_t      VddciUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode
1225  uint8_t      MvddUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode
1226
1227  // SECTION: Telemetry Settings
1228  uint16_t     GfxMaxCurrent;   // in Amps
1229  int8_t       GfxOffset;       // in Amps
1230  uint8_t      Padding_TelemetryGfx;
1231
1232  uint16_t     SocMaxCurrent;   // in Amps
1233  int8_t       SocOffset;       // in Amps
1234  uint8_t      Padding_TelemetrySoc;
1235
1236  uint16_t     Mem0MaxCurrent;   // in Amps
1237  int8_t       Mem0Offset;       // in Amps
1238  uint8_t      Padding_TelemetryMem0;
1239
1240  uint16_t     Mem1MaxCurrent;   // in Amps
1241  int8_t       Mem1Offset;       // in Amps
1242  uint8_t      Padding_TelemetryMem1;
1243
1244  uint32_t     MvddRatio; // This is used for MVDD  Svi2 Div Ratio workaround. It has 16 fractional bits (Q16.16)
1245
1246  // SECTION: GPIO Settings
1247  uint8_t      AcDcGpio;        // GPIO pin configured for AC/DC switching
1248  uint8_t      AcDcPolarity;    // GPIO polarity for AC/DC switching
1249  uint8_t      VR0HotGpio;      // GPIO pin configured for VR0 HOT event
1250  uint8_t      VR0HotPolarity;  // GPIO polarity for VR0 HOT event
1251
1252  uint8_t      VR1HotGpio;      // GPIO pin configured for VR1 HOT event
1253  uint8_t      VR1HotPolarity;  // GPIO polarity for VR1 HOT event
1254  uint8_t      GthrGpio;        // GPIO pin configured for GTHR Event
1255  uint8_t      GthrPolarity;    // replace GPIO polarity for GTHR
1256
1257  // LED Display Settings
1258  uint8_t      LedPin0;         // GPIO number for LedPin[0]
1259  uint8_t      LedPin1;         // GPIO number for LedPin[1]
1260  uint8_t      LedPin2;         // GPIO number for LedPin[2]
1261  uint8_t      LedEnableMask;
1262
1263  uint8_t      LedPcie;        // GPIO number for PCIE results
1264  uint8_t      LedError;       // GPIO number for Error Cases
1265  uint8_t      LedSpare1[2];
1266
1267  // SECTION: Clock Spread Spectrum
1268
1269  // GFXCLK PLL Spread Spectrum
1270  uint8_t      PllGfxclkSpreadEnabled;   // on or off
1271  uint8_t      PllGfxclkSpreadPercent;   // Q4.4
1272  uint16_t     PllGfxclkSpreadFreq;      // kHz
1273
1274  // GFXCLK DFLL Spread Spectrum
1275  uint8_t      DfllGfxclkSpreadEnabled;   // on or off
1276  uint8_t      DfllGfxclkSpreadPercent;   // Q4.4
1277  uint16_t     DfllGfxclkSpreadFreq;      // kHz
1278
1279  // UCLK Spread Spectrum
1280  uint16_t     UclkSpreadPadding;
1281  uint16_t     UclkSpreadFreq;      // kHz
1282
1283  // FCLK Spread Spectrum
1284  uint8_t      FclkSpreadEnabled;   // on or off
1285  uint8_t      FclkSpreadPercent;   // Q4.4
1286  uint16_t     FclkSpreadFreq;      // kHz
1287
1288  // Section: Memory Config
1289  uint32_t     MemoryChannelEnabled; // For DRAM use only, Max 32 channels enabled bit mask.
1290
1291  uint8_t      DramBitWidth; // For DRAM use only.  See Dram Bit width type defines
1292  uint8_t      PaddingMem1[3];
1293
1294  // Section: Total Board Power
1295  uint16_t     TotalBoardPower;     //Only needed for TCP Estimated case, where TCP = TGP+Total Board Power
1296  uint16_t     BoardPowerPadding;
1297
1298  // SECTION: XGMI Training
1299  uint8_t      XgmiLinkSpeed   [NUM_XGMI_PSTATE_LEVELS];
1300  uint8_t      XgmiLinkWidth   [NUM_XGMI_PSTATE_LEVELS];
1301
1302  uint16_t     XgmiFclkFreq    [NUM_XGMI_PSTATE_LEVELS];
1303  uint16_t     XgmiSocVoltage  [NUM_XGMI_PSTATE_LEVELS];
1304
1305  // SECTION: UMC feature flags
1306  uint8_t      HsrEnabled;
1307  uint8_t      VddqOffEnabled;
1308  uint8_t      PaddingUmcFlags[2];
1309
1310  // UCLK Spread Spectrum
1311  uint8_t      UclkSpreadPercent[16];
1312
1313  // SECTION: Board Reserved
1314  uint32_t     BoardReserved[11];
1315
1316  // SECTION: Structure Padding
1317
1318  // Padding for MMHUB - do not modify this
1319  uint32_t     MmHubPadding[8]; // SMU internal use
1320
1321
1322} PPTable_beige_goby_t;
1323
1324typedef struct {
1325  // Time constant parameters for clock averages in ms
1326  uint16_t     GfxclkAverageLpfTau;
1327  uint16_t     FclkAverageLpfTau;
1328  uint16_t     UclkAverageLpfTau;
1329  uint16_t     GfxActivityLpfTau;
1330  uint16_t     UclkActivityLpfTau;
1331  uint16_t     SocketPowerLpfTau;
1332  uint16_t     VcnClkAverageLpfTau;
1333  uint16_t     padding16;
1334} DriverSmuConfig_t;
1335
1336typedef struct {
1337  DriverSmuConfig_t DriverSmuConfig;
1338
1339  uint32_t     Spare[7];
1340  // Padding - ignore
1341  uint32_t     MmHubPadding[8]; // SMU internal use
1342} DriverSmuConfigExternal_t;
1343
1344typedef struct {
1345  uint16_t               GfxclkFmin;           // MHz
1346  uint16_t               GfxclkFmax;           // MHz
1347  QuadraticInt_t         CustomGfxVfCurve;     // a: mV/MHz^2, b: mv/MHz, c: mV
1348  uint16_t               CustomCurveFmin;      // MHz
1349  uint16_t               UclkFmin;             // MHz
1350  uint16_t               UclkFmax;             // MHz
1351  int16_t                OverDrivePct;         // %
1352  uint16_t               FanMaximumRpm;
1353  uint16_t               FanMinimumPwm;
1354  uint16_t               FanAcousticLimitRpm;
1355  uint16_t               FanTargetTemperature; // Degree Celcius
1356  uint8_t                FanLinearPwmPoints[NUM_OD_FAN_MAX_POINTS];
1357  uint8_t                FanLinearTempPoints[NUM_OD_FAN_MAX_POINTS];
1358  uint16_t               MaxOpTemp;            // Degree Celcius
1359  int16_t                VddGfxOffset;         // in mV
1360  uint8_t                FanZeroRpmEnable;
1361  uint8_t                FanZeroRpmStopTemp;
1362  uint8_t                FanMode;
1363  uint8_t                Padding[1];
1364} OverDriveTable_t;
1365
1366typedef struct {
1367  OverDriveTable_t OverDriveTable;
1368  uint32_t      Spare[8];
1369
1370  uint32_t     MmHubPadding[8]; // SMU internal use
1371} OverDriveTableExternal_t;
1372
1373typedef struct {
1374  uint32_t CurrClock[PPCLK_COUNT];
1375
1376  uint16_t AverageGfxclkFrequencyPreDs;
1377  uint16_t AverageGfxclkFrequencyPostDs;
1378  uint16_t AverageFclkFrequencyPreDs;
1379  uint16_t AverageFclkFrequencyPostDs;
1380  uint16_t AverageUclkFrequencyPreDs  ;
1381  uint16_t AverageUclkFrequencyPostDs  ;
1382
1383
1384  uint16_t AverageGfxActivity    ;
1385  uint16_t AverageUclkActivity   ;
1386  uint8_t  CurrSocVoltageOffset  ;
1387  uint8_t  CurrGfxVoltageOffset  ;
1388  uint8_t  CurrMemVidOffset      ;
1389  uint8_t  Padding8        ;
1390  uint16_t AverageSocketPower    ;
1391  uint16_t TemperatureEdge       ;
1392  uint16_t TemperatureHotspot    ;
1393  uint16_t TemperatureMem        ;
1394  uint16_t TemperatureVrGfx      ;
1395  uint16_t TemperatureVrMem0     ;
1396  uint16_t TemperatureVrMem1     ;
1397  uint16_t TemperatureVrSoc      ;
1398  uint16_t TemperatureLiquid0    ;
1399  uint16_t TemperatureLiquid1    ;
1400  uint16_t TemperaturePlx        ;
1401  uint16_t Padding16             ;
1402  uint32_t ThrottlerStatus       ;
1403
1404  uint8_t  LinkDpmLevel;
1405  uint8_t  CurrFanPwm;
1406  uint16_t CurrFanSpeed;
1407
1408  //BACO metrics, PMFW-1721
1409  //metrics for D3hot entry/exit and driver ARM msgs
1410  uint8_t D3HotEntryCountPerMode[D3HOT_SEQUENCE_COUNT];
1411  uint8_t D3HotExitCountPerMode[D3HOT_SEQUENCE_COUNT];
1412  uint8_t ArmMsgReceivedCountPerMode[D3HOT_SEQUENCE_COUNT];
1413
1414  //PMFW-4362
1415  uint32_t EnergyAccumulator;
1416  uint16_t AverageVclk0Frequency  ;
1417  uint16_t AverageDclk0Frequency  ;
1418  uint16_t AverageVclk1Frequency  ;
1419  uint16_t AverageDclk1Frequency  ;
1420  uint16_t VcnActivityPercentage  ; //place holder, David N. to provide full sequence
1421  uint8_t  PcieRate               ;
1422  uint8_t  PcieWidth              ;
1423  uint16_t AverageGfxclkFrequencyTarget;
1424
1425  uint16_t Padding16_2;
1426} SmuMetrics_t;
1427
1428typedef struct {
1429  uint32_t CurrClock[PPCLK_COUNT];
1430
1431  uint16_t AverageGfxclkFrequencyPreDs;
1432  uint16_t AverageGfxclkFrequencyPostDs;
1433  uint16_t AverageFclkFrequencyPreDs;
1434  uint16_t AverageFclkFrequencyPostDs;
1435  uint16_t AverageUclkFrequencyPreDs  ;
1436  uint16_t AverageUclkFrequencyPostDs  ;
1437
1438
1439  uint16_t AverageGfxActivity    ;
1440  uint16_t AverageUclkActivity   ;
1441  uint8_t  CurrSocVoltageOffset  ;
1442  uint8_t  CurrGfxVoltageOffset  ;
1443  uint8_t  CurrMemVidOffset      ;
1444  uint8_t  Padding8        ;
1445  uint16_t AverageSocketPower    ;
1446  uint16_t TemperatureEdge       ;
1447  uint16_t TemperatureHotspot    ;
1448  uint16_t TemperatureMem        ;
1449  uint16_t TemperatureVrGfx      ;
1450  uint16_t TemperatureVrMem0     ;
1451  uint16_t TemperatureVrMem1     ;
1452  uint16_t TemperatureVrSoc      ;
1453  uint16_t TemperatureLiquid0    ;
1454  uint16_t TemperatureLiquid1    ;
1455  uint16_t TemperaturePlx        ;
1456  uint16_t Padding16             ;
1457  uint32_t AccCnt                ;
1458  uint8_t  ThrottlingPercentage[THROTTLER_COUNT];
1459
1460
1461  uint8_t  LinkDpmLevel;
1462  uint8_t  CurrFanPwm;
1463  uint16_t CurrFanSpeed;
1464
1465  //BACO metrics, PMFW-1721
1466  //metrics for D3hot entry/exit and driver ARM msgs
1467  uint8_t D3HotEntryCountPerMode[D3HOT_SEQUENCE_COUNT];
1468  uint8_t D3HotExitCountPerMode[D3HOT_SEQUENCE_COUNT];
1469  uint8_t ArmMsgReceivedCountPerMode[D3HOT_SEQUENCE_COUNT];
1470
1471  //PMFW-4362
1472  uint32_t EnergyAccumulator;
1473  uint16_t AverageVclk0Frequency  ;
1474  uint16_t AverageDclk0Frequency  ;
1475  uint16_t AverageVclk1Frequency  ;
1476  uint16_t AverageDclk1Frequency  ;
1477  uint16_t VcnActivityPercentage  ; //place holder, David N. to provide full sequence
1478  uint8_t  PcieRate               ;
1479  uint8_t  PcieWidth              ;
1480  uint16_t AverageGfxclkFrequencyTarget;
1481
1482  uint16_t Padding16_2;
1483} SmuMetrics_V2_t;
1484
1485typedef struct {
1486  uint32_t CurrClock[PPCLK_COUNT];
1487
1488  uint16_t AverageGfxclkFrequencyPreDs;
1489  uint16_t AverageGfxclkFrequencyPostDs;
1490  uint16_t AverageFclkFrequencyPreDs;
1491  uint16_t AverageFclkFrequencyPostDs;
1492  uint16_t AverageUclkFrequencyPreDs;
1493  uint16_t AverageUclkFrequencyPostDs;
1494
1495
1496  uint16_t AverageGfxActivity;
1497  uint16_t AverageUclkActivity;
1498  uint8_t  CurrSocVoltageOffset;
1499  uint8_t  CurrGfxVoltageOffset;
1500  uint8_t  CurrMemVidOffset;
1501  uint8_t  Padding8;
1502  uint16_t AverageSocketPower;
1503  uint16_t TemperatureEdge;
1504  uint16_t TemperatureHotspot;
1505  uint16_t TemperatureMem;
1506  uint16_t TemperatureVrGfx;
1507  uint16_t TemperatureVrMem0;
1508  uint16_t TemperatureVrMem1;
1509  uint16_t TemperatureVrSoc;
1510  uint16_t TemperatureLiquid0;
1511  uint16_t TemperatureLiquid1;
1512  uint16_t TemperaturePlx;
1513  uint16_t Padding16;
1514  uint32_t AccCnt;
1515  uint8_t  ThrottlingPercentage[THROTTLER_COUNT];
1516
1517
1518  uint8_t  LinkDpmLevel;
1519  uint8_t  CurrFanPwm;
1520  uint16_t CurrFanSpeed;
1521
1522  //BACO metrics, PMFW-1721
1523  //metrics for D3hot entry/exit and driver ARM msgs
1524  uint8_t D3HotEntryCountPerMode[D3HOT_SEQUENCE_COUNT];
1525  uint8_t D3HotExitCountPerMode[D3HOT_SEQUENCE_COUNT];
1526  uint8_t ArmMsgReceivedCountPerMode[D3HOT_SEQUENCE_COUNT];
1527
1528  //PMFW-4362
1529  uint32_t EnergyAccumulator;
1530  uint16_t AverageVclk0Frequency;
1531  uint16_t AverageDclk0Frequency;
1532  uint16_t AverageVclk1Frequency;
1533  uint16_t AverageDclk1Frequency;
1534  uint16_t VcnUsagePercentage0;
1535  uint16_t VcnUsagePercentage1;
1536  uint8_t  PcieRate;
1537  uint8_t  PcieWidth;
1538  uint16_t AverageGfxclkFrequencyTarget;
1539
1540  uint32_t PublicSerialNumLower32;
1541  uint32_t PublicSerialNumUpper32;
1542
1543} SmuMetrics_V3_t;
1544
1545typedef struct {
1546	uint32_t CurrClock[PPCLK_COUNT];
1547
1548	uint16_t AverageGfxclkFrequencyPreDs;
1549	uint16_t AverageGfxclkFrequencyPostDs;
1550	uint16_t AverageFclkFrequencyPreDs;
1551	uint16_t AverageFclkFrequencyPostDs;
1552	uint16_t AverageUclkFrequencyPreDs;
1553	uint16_t AverageUclkFrequencyPostDs;
1554
1555
1556	uint16_t AverageGfxActivity;
1557	uint16_t AverageUclkActivity;
1558	uint8_t  CurrSocVoltageOffset;
1559	uint8_t  CurrGfxVoltageOffset;
1560	uint8_t  CurrMemVidOffset;
1561	uint8_t  Padding8;
1562	uint16_t AverageSocketPower;
1563	uint16_t TemperatureEdge;
1564	uint16_t TemperatureHotspot;
1565	uint16_t TemperatureMem;
1566	uint16_t TemperatureVrGfx;
1567	uint16_t TemperatureVrMem0;
1568	uint16_t TemperatureVrMem1;
1569	uint16_t TemperatureVrSoc;
1570	uint16_t TemperatureLiquid0;
1571	uint16_t TemperatureLiquid1;
1572	uint16_t TemperaturePlx;
1573	uint16_t Padding16;
1574	uint32_t AccCnt;
1575	uint8_t  ThrottlingPercentage[THROTTLER_COUNT];
1576
1577
1578	uint8_t  LinkDpmLevel;
1579	uint8_t  CurrFanPwm;
1580	uint16_t CurrFanSpeed;
1581
1582	//BACO metrics, PMFW-1721
1583	//metrics for D3hot entry/exit and driver ARM msgs
1584	uint8_t D3HotEntryCountPerMode[D3HOT_SEQUENCE_COUNT];
1585	uint8_t D3HotExitCountPerMode[D3HOT_SEQUENCE_COUNT];
1586	uint8_t ArmMsgReceivedCountPerMode[D3HOT_SEQUENCE_COUNT];
1587
1588	//PMFW-4362
1589	uint32_t EnergyAccumulator;
1590	uint16_t AverageVclk0Frequency;
1591	uint16_t AverageDclk0Frequency;
1592	uint16_t AverageVclk1Frequency;
1593	uint16_t AverageDclk1Frequency;
1594	uint16_t VcnUsagePercentage0;
1595	uint16_t VcnUsagePercentage1;
1596	uint8_t  PcieRate;
1597	uint8_t  PcieWidth;
1598	uint16_t AverageGfxclkFrequencyTarget;
1599
1600	uint8_t  ApuSTAPMSmartShiftLimit;
1601	uint8_t  AverageApuSocketPower;
1602	uint8_t  ApuSTAPMLimit;
1603	uint8_t  Padding8_2;
1604
1605} SmuMetrics_V4_t;
1606
1607typedef struct {
1608  union {
1609    SmuMetrics_t SmuMetrics;
1610    SmuMetrics_V2_t SmuMetrics_V2;
1611    SmuMetrics_V3_t SmuMetrics_V3;
1612    SmuMetrics_V4_t SmuMetrics_V4;
1613  };
1614  uint32_t Spare[1];
1615
1616  // Padding - ignore
1617  uint32_t     MmHubPadding[8]; // SMU internal use
1618} SmuMetricsExternal_t;
1619
1620typedef struct {
1621  uint16_t MinClock; // This is either DCEFCLK or SOCCLK (in MHz)
1622  uint16_t MaxClock; // This is either DCEFCLK or SOCCLK (in MHz)
1623  uint16_t MinUclk;
1624  uint16_t MaxUclk;
1625
1626  uint8_t  WmSetting;
1627  uint8_t  Flags;
1628  uint8_t  Padding[2];
1629
1630} WatermarkRowGeneric_t;
1631
1632#define NUM_WM_RANGES 4
1633
1634typedef enum {
1635  WM_SOCCLK = 0,
1636  WM_DCEFCLK,
1637  WM_COUNT,
1638} WM_CLOCK_e;
1639
1640typedef enum {
1641  WATERMARKS_CLOCK_RANGE = 0,
1642  WATERMARKS_DUMMY_PSTATE,
1643  WATERMARKS_MALL,
1644  WATERMARKS_COUNT,
1645} WATERMARKS_FLAGS_e;
1646
1647typedef struct {
1648  // Watermarks
1649  WatermarkRowGeneric_t WatermarkRow[WM_COUNT][NUM_WM_RANGES];
1650} Watermarks_t;
1651
1652typedef struct {
1653  Watermarks_t Watermarks;
1654
1655  uint32_t     MmHubPadding[8]; // SMU internal use
1656} WatermarksExternal_t;
1657
1658typedef struct {
1659  uint16_t avgPsmCount[67];
1660  uint16_t minPsmCount[67];
1661  float    avgPsmVoltage[67];
1662  float    minPsmVoltage[67];
1663} AvfsDebugTable_t;
1664
1665typedef struct {
1666  AvfsDebugTable_t AvfsDebugTable;
1667
1668  uint32_t     MmHubPadding[8]; // SMU internal use
1669} AvfsDebugTableExternal_t;
1670
1671typedef struct {
1672  uint8_t  AvfsVersion;
1673  uint8_t  Padding;
1674
1675  uint8_t  AvfsEn[AVFS_VOLTAGE_COUNT];
1676
1677  uint8_t  OverrideVFT[AVFS_VOLTAGE_COUNT];
1678  uint8_t  OverrideAvfsGb[AVFS_VOLTAGE_COUNT];
1679
1680  uint8_t  OverrideTemperatures[AVFS_VOLTAGE_COUNT];
1681  uint8_t  OverrideVInversion[AVFS_VOLTAGE_COUNT];
1682  uint8_t  OverrideP2V[AVFS_VOLTAGE_COUNT];
1683  uint8_t  OverrideP2VCharzFreq[AVFS_VOLTAGE_COUNT];
1684
1685  int32_t VFT0_m1[AVFS_VOLTAGE_COUNT]; // Q8.24
1686  int32_t VFT0_m2[AVFS_VOLTAGE_COUNT]; // Q12.12
1687  int32_t VFT0_b[AVFS_VOLTAGE_COUNT];  // Q32
1688
1689  int32_t VFT1_m1[AVFS_VOLTAGE_COUNT]; // Q8.16
1690  int32_t VFT1_m2[AVFS_VOLTAGE_COUNT]; // Q12.12
1691  int32_t VFT1_b[AVFS_VOLTAGE_COUNT];  // Q32
1692
1693  int32_t VFT2_m1[AVFS_VOLTAGE_COUNT]; // Q8.16
1694  int32_t VFT2_m2[AVFS_VOLTAGE_COUNT]; // Q12.12
1695  int32_t VFT2_b[AVFS_VOLTAGE_COUNT];  // Q32
1696
1697  int32_t AvfsGb0_m1[AVFS_VOLTAGE_COUNT]; // Q8.24
1698  int32_t AvfsGb0_m2[AVFS_VOLTAGE_COUNT]; // Q12.12
1699  int32_t AvfsGb0_b[AVFS_VOLTAGE_COUNT];  // Q32
1700
1701  int32_t AcBtcGb_m1[AVFS_VOLTAGE_COUNT]; // Q8.24
1702  int32_t AcBtcGb_m2[AVFS_VOLTAGE_COUNT]; // Q12.12
1703  int32_t AcBtcGb_b[AVFS_VOLTAGE_COUNT];  // Q32
1704
1705  uint32_t AvfsTempCold[AVFS_VOLTAGE_COUNT];
1706  uint32_t AvfsTempMid[AVFS_VOLTAGE_COUNT];
1707  uint32_t AvfsTempHot[AVFS_VOLTAGE_COUNT];
1708
1709  uint32_t VInversion[AVFS_VOLTAGE_COUNT]; // in mV with 2 fractional bits
1710
1711
1712  int32_t P2V_m1[AVFS_VOLTAGE_COUNT]; // Q8.24
1713  int32_t P2V_m2[AVFS_VOLTAGE_COUNT]; // Q12.12
1714  int32_t P2V_b[AVFS_VOLTAGE_COUNT];  // Q32
1715
1716  uint32_t P2VCharzFreq[AVFS_VOLTAGE_COUNT]; // in 10KHz units
1717
1718  uint32_t EnabledAvfsModules[3]; //Sienna_Cichlid - 67 AVFS modules
1719} AvfsFuseOverride_t;
1720
1721typedef struct {
1722  AvfsFuseOverride_t AvfsFuseOverride;
1723
1724  uint32_t     MmHubPadding[8]; // SMU internal use
1725} AvfsFuseOverrideExternal_t;
1726
1727typedef struct {
1728  uint8_t   Gfx_ActiveHystLimit;
1729  uint8_t   Gfx_IdleHystLimit;
1730  uint8_t   Gfx_FPS;
1731  uint8_t   Gfx_MinActiveFreqType;
1732  uint8_t   Gfx_BoosterFreqType;
1733  uint8_t   Gfx_MinFreqStep;                // Minimum delta between current and target frequeny in order for FW to change clock.
1734  uint16_t  Gfx_MinActiveFreq;              // MHz
1735  uint16_t  Gfx_BoosterFreq;                // MHz
1736  uint16_t  Gfx_PD_Data_time_constant;      // Time constant of PD controller in ms
1737  uint32_t  Gfx_PD_Data_limit_a;            // Q16
1738  uint32_t  Gfx_PD_Data_limit_b;            // Q16
1739  uint32_t  Gfx_PD_Data_limit_c;            // Q16
1740  uint32_t  Gfx_PD_Data_error_coeff;        // Q16
1741  uint32_t  Gfx_PD_Data_error_rate_coeff;   // Q16
1742
1743  uint8_t   Fclk_ActiveHystLimit;
1744  uint8_t   Fclk_IdleHystLimit;
1745  uint8_t   Fclk_FPS;
1746  uint8_t   Fclk_MinActiveFreqType;
1747  uint8_t   Fclk_BoosterFreqType;
1748  uint8_t   Fclk_MinFreqStep;                // Minimum delta between current and target frequeny in order for FW to change clock.
1749  uint16_t  Fclk_MinActiveFreq;              // MHz
1750  uint16_t  Fclk_BoosterFreq;                // MHz
1751  uint16_t  Fclk_PD_Data_time_constant;      // Time constant of PD controller in ms
1752  uint32_t  Fclk_PD_Data_limit_a;            // Q16
1753  uint32_t  Fclk_PD_Data_limit_b;            // Q16
1754  uint32_t  Fclk_PD_Data_limit_c;            // Q16
1755  uint32_t  Fclk_PD_Data_error_coeff;        // Q16
1756  uint32_t  Fclk_PD_Data_error_rate_coeff;   // Q16
1757
1758  uint8_t   Mem_ActiveHystLimit;
1759  uint8_t   Mem_IdleHystLimit;
1760  uint8_t   Mem_FPS;
1761  uint8_t   Mem_MinActiveFreqType;
1762  uint8_t   Mem_BoosterFreqType;
1763  uint8_t   Mem_MinFreqStep;                // Minimum delta between current and target frequeny in order for FW to change clock.
1764  uint16_t  Mem_MinActiveFreq;              // MHz
1765  uint16_t  Mem_BoosterFreq;                // MHz
1766  uint16_t  Mem_PD_Data_time_constant;      // Time constant of PD controller in ms
1767  uint32_t  Mem_PD_Data_limit_a;            // Q16
1768  uint32_t  Mem_PD_Data_limit_b;            // Q16
1769  uint32_t  Mem_PD_Data_limit_c;            // Q16
1770  uint32_t  Mem_PD_Data_error_coeff;        // Q16
1771  uint32_t  Mem_PD_Data_error_rate_coeff;   // Q16
1772
1773  uint32_t  Mem_UpThreshold_Limit;          // Q16
1774  uint8_t   Mem_UpHystLimit;
1775  uint8_t   Mem_DownHystLimit;
1776  uint16_t  Mem_Fps;
1777
1778} DpmActivityMonitorCoeffInt_t;
1779
1780
1781typedef struct {
1782  DpmActivityMonitorCoeffInt_t DpmActivityMonitorCoeffInt;
1783  uint32_t     MmHubPadding[8]; // SMU internal use
1784} DpmActivityMonitorCoeffIntExternal_t;
1785
1786// Workload bits
1787#define WORKLOAD_PPLIB_DEFAULT_BIT        0
1788#define WORKLOAD_PPLIB_FULL_SCREEN_3D_BIT 1
1789#define WORKLOAD_PPLIB_POWER_SAVING_BIT   2
1790#define WORKLOAD_PPLIB_VIDEO_BIT          3
1791#define WORKLOAD_PPLIB_VR_BIT             4
1792#define WORKLOAD_PPLIB_COMPUTE_BIT        5
1793#define WORKLOAD_PPLIB_CUSTOM_BIT         6
1794#define WORKLOAD_PPLIB_W3D_BIT            7
1795#define WORKLOAD_PPLIB_COUNT              8
1796
1797
1798// These defines are used with the following messages:
1799// SMC_MSG_TransferTableDram2Smu
1800// SMC_MSG_TransferTableSmu2Dram
1801
1802// Table transfer status
1803#define TABLE_TRANSFER_OK         0x0
1804#define TABLE_TRANSFER_FAILED     0xFF
1805
1806// Table types
1807#define TABLE_PPTABLE                 0
1808#define TABLE_WATERMARKS              1
1809#define TABLE_AVFS_PSM_DEBUG          2
1810#define TABLE_AVFS_FUSE_OVERRIDE      3
1811#define TABLE_PMSTATUSLOG             4
1812#define TABLE_SMU_METRICS             5
1813#define TABLE_DRIVER_SMU_CONFIG       6
1814#define TABLE_ACTIVITY_MONITOR_COEFF  7
1815#define TABLE_OVERDRIVE               8
1816#define TABLE_I2C_COMMANDS            9
1817#define TABLE_PACE                   10
1818#define TABLE_ECCINFO                11
1819#define TABLE_COUNT                  12
1820
1821typedef struct {
1822  float FlopsPerByteTable[RLC_PACE_TABLE_NUM_LEVELS];
1823} RlcPaceFlopsPerByteOverride_t;
1824
1825typedef struct {
1826  RlcPaceFlopsPerByteOverride_t RlcPaceFlopsPerByteOverride;
1827
1828  uint32_t     MmHubPadding[8]; // SMU internal use
1829} RlcPaceFlopsPerByteOverrideExternal_t;
1830
1831// These defines are used with the SMC_MSG_SetUclkFastSwitch message.
1832#define UCLK_SWITCH_SLOW 0
1833#define UCLK_SWITCH_FAST 1
1834#define UCLK_SWITCH_DUMMY 2
1835#endif
1836