diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/si_dpm.h')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/si_dpm.h | 1015 |
1 files changed, 1015 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/si_dpm.h b/drivers/gpu/drm/amd/amdgpu/si_dpm.h new file mode 100644 index 000000000000..51ce21c5f4fb --- /dev/null +++ b/drivers/gpu/drm/amd/amdgpu/si_dpm.h | |||
@@ -0,0 +1,1015 @@ | |||
1 | /* | ||
2 | * Copyright 2012 Advanced Micro Devices, Inc. | ||
3 | * | ||
4 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
5 | * copy of this software and associated documentation files (the "Software"), | ||
6 | * to deal in the Software without restriction, including without limitation | ||
7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
8 | * and/or sell copies of the Software, and to permit persons to whom the | ||
9 | * Software is furnished to do so, subject to the following conditions: | ||
10 | * | ||
11 | * The above copyright notice and this permission notice shall be included in | ||
12 | * all copies or substantial portions of the Software. | ||
13 | * | ||
14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
17 | * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
18 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
19 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
20 | * OTHER DEALINGS IN THE SOFTWARE. | ||
21 | * | ||
22 | */ | ||
23 | #ifndef __SI_DPM_H__ | ||
24 | #define __SI_DPM_H__ | ||
25 | |||
26 | #include "amdgpu_atombios.h" | ||
27 | #include "sislands_smc.h" | ||
28 | |||
29 | #define MC_CG_CONFIG 0x96f | ||
30 | #define MC_ARB_CG 0x9fa | ||
31 | #define CG_ARB_REQ(x) ((x) << 0) | ||
32 | #define CG_ARB_REQ_MASK (0xff << 0) | ||
33 | |||
34 | #define MC_ARB_DRAM_TIMING_1 0x9fc | ||
35 | #define MC_ARB_DRAM_TIMING_2 0x9fd | ||
36 | #define MC_ARB_DRAM_TIMING_3 0x9fe | ||
37 | #define MC_ARB_DRAM_TIMING2_1 0x9ff | ||
38 | #define MC_ARB_DRAM_TIMING2_2 0xa00 | ||
39 | #define MC_ARB_DRAM_TIMING2_3 0xa01 | ||
40 | |||
41 | #define MAX_NO_OF_MVDD_VALUES 2 | ||
42 | #define MAX_NO_VREG_STEPS 32 | ||
43 | #define NISLANDS_MAX_SMC_PERFORMANCE_LEVELS_PER_SWSTATE 16 | ||
44 | #define SMC_NISLANDS_MC_REGISTER_ARRAY_SIZE 32 | ||
45 | #define SMC_NISLANDS_MC_REGISTER_ARRAY_SET_COUNT 20 | ||
46 | #define RV770_ASI_DFLT 1000 | ||
47 | #define CYPRESS_HASI_DFLT 400000 | ||
48 | #define PCIE_PERF_REQ_PECI_GEN1 2 | ||
49 | #define PCIE_PERF_REQ_PECI_GEN2 3 | ||
50 | #define PCIE_PERF_REQ_PECI_GEN3 4 | ||
51 | #define RV770_DEFAULT_VCLK_FREQ 53300 /* 10 khz */ | ||
52 | #define RV770_DEFAULT_DCLK_FREQ 40000 /* 10 khz */ | ||
53 | |||
54 | #define SMC_EVERGREEN_MC_REGISTER_ARRAY_SIZE 16 | ||
55 | |||
56 | #define RV770_SMC_TABLE_ADDRESS 0xB000 | ||
57 | #define RV770_SMC_PERFORMANCE_LEVELS_PER_SWSTATE 3 | ||
58 | |||
59 | #define SMC_STROBE_RATIO 0x0F | ||
60 | #define SMC_STROBE_ENABLE 0x10 | ||
61 | |||
62 | #define SMC_MC_EDC_RD_FLAG 0x01 | ||
63 | #define SMC_MC_EDC_WR_FLAG 0x02 | ||
64 | #define SMC_MC_RTT_ENABLE 0x04 | ||
65 | #define SMC_MC_STUTTER_EN 0x08 | ||
66 | |||
67 | #define RV770_SMC_VOLTAGEMASK_VDDC 0 | ||
68 | #define RV770_SMC_VOLTAGEMASK_MVDD 1 | ||
69 | #define RV770_SMC_VOLTAGEMASK_VDDCI 2 | ||
70 | #define RV770_SMC_VOLTAGEMASK_MAX 4 | ||
71 | |||
72 | #define NISLANDS_MAX_SMC_PERFORMANCE_LEVELS_PER_SWSTATE 16 | ||
73 | #define NISLANDS_SMC_STROBE_RATIO 0x0F | ||
74 | #define NISLANDS_SMC_STROBE_ENABLE 0x10 | ||
75 | |||
76 | #define NISLANDS_SMC_MC_EDC_RD_FLAG 0x01 | ||
77 | #define NISLANDS_SMC_MC_EDC_WR_FLAG 0x02 | ||
78 | #define NISLANDS_SMC_MC_RTT_ENABLE 0x04 | ||
79 | #define NISLANDS_SMC_MC_STUTTER_EN 0x08 | ||
80 | |||
81 | #define MAX_NO_VREG_STEPS 32 | ||
82 | |||
83 | #define NISLANDS_SMC_VOLTAGEMASK_VDDC 0 | ||
84 | #define NISLANDS_SMC_VOLTAGEMASK_MVDD 1 | ||
85 | #define NISLANDS_SMC_VOLTAGEMASK_VDDCI 2 | ||
86 | #define NISLANDS_SMC_VOLTAGEMASK_MAX 4 | ||
87 | |||
88 | #define SISLANDS_MCREGISTERTABLE_INITIAL_SLOT 0 | ||
89 | #define SISLANDS_MCREGISTERTABLE_ACPI_SLOT 1 | ||
90 | #define SISLANDS_MCREGISTERTABLE_ULV_SLOT 2 | ||
91 | #define SISLANDS_MCREGISTERTABLE_FIRST_DRIVERSTATE_SLOT 3 | ||
92 | |||
93 | #define SISLANDS_LEAKAGE_INDEX0 0xff01 | ||
94 | #define SISLANDS_MAX_LEAKAGE_COUNT 4 | ||
95 | |||
96 | #define SISLANDS_MAX_HARDWARE_POWERLEVELS 5 | ||
97 | #define SISLANDS_INITIAL_STATE_ARB_INDEX 0 | ||
98 | #define SISLANDS_ACPI_STATE_ARB_INDEX 1 | ||
99 | #define SISLANDS_ULV_STATE_ARB_INDEX 2 | ||
100 | #define SISLANDS_DRIVER_STATE_ARB_INDEX 3 | ||
101 | |||
102 | #define SISLANDS_DPM2_MAX_PULSE_SKIP 256 | ||
103 | |||
104 | #define SISLANDS_DPM2_NEAR_TDP_DEC 10 | ||
105 | #define SISLANDS_DPM2_ABOVE_SAFE_INC 5 | ||
106 | #define SISLANDS_DPM2_BELOW_SAFE_INC 20 | ||
107 | |||
108 | #define SISLANDS_DPM2_TDP_SAFE_LIMIT_PERCENT 80 | ||
109 | |||
110 | #define SISLANDS_DPM2_MAXPS_PERCENT_H 99 | ||
111 | #define SISLANDS_DPM2_MAXPS_PERCENT_M 99 | ||
112 | |||
113 | #define SISLANDS_DPM2_SQ_RAMP_MAX_POWER 0x3FFF | ||
114 | #define SISLANDS_DPM2_SQ_RAMP_MIN_POWER 0x12 | ||
115 | #define SISLANDS_DPM2_SQ_RAMP_MAX_POWER_DELTA 0x15 | ||
116 | #define SISLANDS_DPM2_SQ_RAMP_STI_SIZE 0x1E | ||
117 | #define SISLANDS_DPM2_SQ_RAMP_LTI_RATIO 0xF | ||
118 | |||
119 | #define SISLANDS_DPM2_PWREFFICIENCYRATIO_MARGIN 10 | ||
120 | |||
121 | #define SISLANDS_VRC_DFLT 0xC000B3 | ||
122 | #define SISLANDS_ULVVOLTAGECHANGEDELAY_DFLT 1687 | ||
123 | #define SISLANDS_CGULVPARAMETER_DFLT 0x00040035 | ||
124 | #define SISLANDS_CGULVCONTROL_DFLT 0x1f007550 | ||
125 | |||
126 | #define SI_ASI_DFLT 10000 | ||
127 | #define SI_BSP_DFLT 0x41EB | ||
128 | #define SI_BSU_DFLT 0x2 | ||
129 | #define SI_AH_DFLT 5 | ||
130 | #define SI_RLP_DFLT 25 | ||
131 | #define SI_RMP_DFLT 65 | ||
132 | #define SI_LHP_DFLT 40 | ||
133 | #define SI_LMP_DFLT 15 | ||
134 | #define SI_TD_DFLT 0 | ||
135 | #define SI_UTC_DFLT_00 0x24 | ||
136 | #define SI_UTC_DFLT_01 0x22 | ||
137 | #define SI_UTC_DFLT_02 0x22 | ||
138 | #define SI_UTC_DFLT_03 0x22 | ||
139 | #define SI_UTC_DFLT_04 0x22 | ||
140 | #define SI_UTC_DFLT_05 0x22 | ||
141 | #define SI_UTC_DFLT_06 0x22 | ||
142 | #define SI_UTC_DFLT_07 0x22 | ||
143 | #define SI_UTC_DFLT_08 0x22 | ||
144 | #define SI_UTC_DFLT_09 0x22 | ||
145 | #define SI_UTC_DFLT_10 0x22 | ||
146 | #define SI_UTC_DFLT_11 0x22 | ||
147 | #define SI_UTC_DFLT_12 0x22 | ||
148 | #define SI_UTC_DFLT_13 0x22 | ||
149 | #define SI_UTC_DFLT_14 0x22 | ||
150 | #define SI_DTC_DFLT_00 0x24 | ||
151 | #define SI_DTC_DFLT_01 0x22 | ||
152 | #define SI_DTC_DFLT_02 0x22 | ||
153 | #define SI_DTC_DFLT_03 0x22 | ||
154 | #define SI_DTC_DFLT_04 0x22 | ||
155 | #define SI_DTC_DFLT_05 0x22 | ||
156 | #define SI_DTC_DFLT_06 0x22 | ||
157 | #define SI_DTC_DFLT_07 0x22 | ||
158 | #define SI_DTC_DFLT_08 0x22 | ||
159 | #define SI_DTC_DFLT_09 0x22 | ||
160 | #define SI_DTC_DFLT_10 0x22 | ||
161 | #define SI_DTC_DFLT_11 0x22 | ||
162 | #define SI_DTC_DFLT_12 0x22 | ||
163 | #define SI_DTC_DFLT_13 0x22 | ||
164 | #define SI_DTC_DFLT_14 0x22 | ||
165 | #define SI_VRC_DFLT 0x0000C003 | ||
166 | #define SI_VOLTAGERESPONSETIME_DFLT 1000 | ||
167 | #define SI_BACKBIASRESPONSETIME_DFLT 1000 | ||
168 | #define SI_VRU_DFLT 0x3 | ||
169 | #define SI_SPLLSTEPTIME_DFLT 0x1000 | ||
170 | #define SI_SPLLSTEPUNIT_DFLT 0x3 | ||
171 | #define SI_TPU_DFLT 0 | ||
172 | #define SI_TPC_DFLT 0x200 | ||
173 | #define SI_SSTU_DFLT 0 | ||
174 | #define SI_SST_DFLT 0x00C8 | ||
175 | #define SI_GICST_DFLT 0x200 | ||
176 | #define SI_FCT_DFLT 0x0400 | ||
177 | #define SI_FCTU_DFLT 0 | ||
178 | #define SI_CTXCGTT3DRPHC_DFLT 0x20 | ||
179 | #define SI_CTXCGTT3DRSDC_DFLT 0x40 | ||
180 | #define SI_VDDC3DOORPHC_DFLT 0x100 | ||
181 | #define SI_VDDC3DOORSDC_DFLT 0x7 | ||
182 | #define SI_VDDC3DOORSU_DFLT 0 | ||
183 | #define SI_MPLLLOCKTIME_DFLT 100 | ||
184 | #define SI_MPLLRESETTIME_DFLT 150 | ||
185 | #define SI_VCOSTEPPCT_DFLT 20 | ||
186 | #define SI_ENDINGVCOSTEPPCT_DFLT 5 | ||
187 | #define SI_REFERENCEDIVIDER_DFLT 4 | ||
188 | |||
189 | #define SI_PM_NUMBER_OF_TC 15 | ||
190 | #define SI_PM_NUMBER_OF_SCLKS 20 | ||
191 | #define SI_PM_NUMBER_OF_MCLKS 4 | ||
192 | #define SI_PM_NUMBER_OF_VOLTAGE_LEVELS 4 | ||
193 | #define SI_PM_NUMBER_OF_ACTIVITY_LEVELS 3 | ||
194 | |||
195 | /* XXX are these ok? */ | ||
196 | #define SI_TEMP_RANGE_MIN (90 * 1000) | ||
197 | #define SI_TEMP_RANGE_MAX (120 * 1000) | ||
198 | |||
199 | #define FDO_PWM_MODE_STATIC 1 | ||
200 | #define FDO_PWM_MODE_STATIC_RPM 5 | ||
201 | |||
202 | enum ni_dc_cac_level | ||
203 | { | ||
204 | NISLANDS_DCCAC_LEVEL_0 = 0, | ||
205 | NISLANDS_DCCAC_LEVEL_1, | ||
206 | NISLANDS_DCCAC_LEVEL_2, | ||
207 | NISLANDS_DCCAC_LEVEL_3, | ||
208 | NISLANDS_DCCAC_LEVEL_4, | ||
209 | NISLANDS_DCCAC_LEVEL_5, | ||
210 | NISLANDS_DCCAC_LEVEL_6, | ||
211 | NISLANDS_DCCAC_LEVEL_7, | ||
212 | NISLANDS_DCCAC_MAX_LEVELS | ||
213 | }; | ||
214 | |||
215 | enum si_cac_config_reg_type | ||
216 | { | ||
217 | SISLANDS_CACCONFIG_MMR = 0, | ||
218 | SISLANDS_CACCONFIG_CGIND, | ||
219 | SISLANDS_CACCONFIG_MAX | ||
220 | }; | ||
221 | |||
222 | enum si_power_level { | ||
223 | SI_POWER_LEVEL_LOW = 0, | ||
224 | SI_POWER_LEVEL_MEDIUM = 1, | ||
225 | SI_POWER_LEVEL_HIGH = 2, | ||
226 | SI_POWER_LEVEL_CTXSW = 3, | ||
227 | }; | ||
228 | |||
229 | enum si_td { | ||
230 | SI_TD_AUTO, | ||
231 | SI_TD_UP, | ||
232 | SI_TD_DOWN, | ||
233 | }; | ||
234 | |||
235 | enum si_display_watermark { | ||
236 | SI_DISPLAY_WATERMARK_LOW = 0, | ||
237 | SI_DISPLAY_WATERMARK_HIGH = 1, | ||
238 | }; | ||
239 | |||
240 | enum si_display_gap | ||
241 | { | ||
242 | SI_PM_DISPLAY_GAP_VBLANK_OR_WM = 0, | ||
243 | SI_PM_DISPLAY_GAP_VBLANK = 1, | ||
244 | SI_PM_DISPLAY_GAP_WATERMARK = 2, | ||
245 | SI_PM_DISPLAY_GAP_IGNORE = 3, | ||
246 | }; | ||
247 | |||
248 | extern const struct amd_ip_funcs si_dpm_ip_funcs; | ||
249 | |||
250 | struct ni_leakage_coeffients | ||
251 | { | ||
252 | u32 at; | ||
253 | u32 bt; | ||
254 | u32 av; | ||
255 | u32 bv; | ||
256 | s32 t_slope; | ||
257 | s32 t_intercept; | ||
258 | u32 t_ref; | ||
259 | }; | ||
260 | |||
261 | struct SMC_Evergreen_MCRegisterAddress | ||
262 | { | ||
263 | uint16_t s0; | ||
264 | uint16_t s1; | ||
265 | }; | ||
266 | |||
267 | typedef struct SMC_Evergreen_MCRegisterAddress SMC_Evergreen_MCRegisterAddress; | ||
268 | |||
269 | struct evergreen_mc_reg_entry { | ||
270 | u32 mclk_max; | ||
271 | u32 mc_data[SMC_EVERGREEN_MC_REGISTER_ARRAY_SIZE]; | ||
272 | }; | ||
273 | |||
274 | struct evergreen_mc_reg_table { | ||
275 | u8 last; | ||
276 | u8 num_entries; | ||
277 | u16 valid_flag; | ||
278 | struct evergreen_mc_reg_entry mc_reg_table_entry[MAX_AC_TIMING_ENTRIES]; | ||
279 | SMC_Evergreen_MCRegisterAddress mc_reg_address[SMC_EVERGREEN_MC_REGISTER_ARRAY_SIZE]; | ||
280 | }; | ||
281 | |||
282 | struct SMC_Evergreen_MCRegisterSet | ||
283 | { | ||
284 | uint32_t value[SMC_EVERGREEN_MC_REGISTER_ARRAY_SIZE]; | ||
285 | }; | ||
286 | |||
287 | typedef struct SMC_Evergreen_MCRegisterSet SMC_Evergreen_MCRegisterSet; | ||
288 | |||
289 | struct SMC_Evergreen_MCRegisters | ||
290 | { | ||
291 | uint8_t last; | ||
292 | uint8_t reserved[3]; | ||
293 | SMC_Evergreen_MCRegisterAddress address[SMC_EVERGREEN_MC_REGISTER_ARRAY_SIZE]; | ||
294 | SMC_Evergreen_MCRegisterSet data[5]; | ||
295 | }; | ||
296 | |||
297 | typedef struct SMC_Evergreen_MCRegisters SMC_Evergreen_MCRegisters; | ||
298 | |||
299 | struct SMC_NIslands_MCRegisterSet | ||
300 | { | ||
301 | uint32_t value[SMC_NISLANDS_MC_REGISTER_ARRAY_SIZE]; | ||
302 | }; | ||
303 | |||
304 | typedef struct SMC_NIslands_MCRegisterSet SMC_NIslands_MCRegisterSet; | ||
305 | |||
306 | struct ni_mc_reg_entry { | ||
307 | u32 mclk_max; | ||
308 | u32 mc_data[SMC_NISLANDS_MC_REGISTER_ARRAY_SIZE]; | ||
309 | }; | ||
310 | |||
311 | struct SMC_NIslands_MCRegisterAddress | ||
312 | { | ||
313 | uint16_t s0; | ||
314 | uint16_t s1; | ||
315 | }; | ||
316 | |||
317 | typedef struct SMC_NIslands_MCRegisterAddress SMC_NIslands_MCRegisterAddress; | ||
318 | |||
319 | struct SMC_NIslands_MCRegisters | ||
320 | { | ||
321 | uint8_t last; | ||
322 | uint8_t reserved[3]; | ||
323 | SMC_NIslands_MCRegisterAddress address[SMC_NISLANDS_MC_REGISTER_ARRAY_SIZE]; | ||
324 | SMC_NIslands_MCRegisterSet data[SMC_NISLANDS_MC_REGISTER_ARRAY_SET_COUNT]; | ||
325 | }; | ||
326 | |||
327 | typedef struct SMC_NIslands_MCRegisters SMC_NIslands_MCRegisters; | ||
328 | |||
329 | struct evergreen_ulv_param { | ||
330 | bool supported; | ||
331 | struct rv7xx_pl *pl; | ||
332 | }; | ||
333 | |||
334 | struct evergreen_arb_registers { | ||
335 | u32 mc_arb_dram_timing; | ||
336 | u32 mc_arb_dram_timing2; | ||
337 | u32 mc_arb_rfsh_rate; | ||
338 | u32 mc_arb_burst_time; | ||
339 | }; | ||
340 | |||
341 | struct at { | ||
342 | u32 rlp; | ||
343 | u32 rmp; | ||
344 | u32 lhp; | ||
345 | u32 lmp; | ||
346 | }; | ||
347 | |||
348 | struct ni_clock_registers { | ||
349 | u32 cg_spll_func_cntl; | ||
350 | u32 cg_spll_func_cntl_2; | ||
351 | u32 cg_spll_func_cntl_3; | ||
352 | u32 cg_spll_func_cntl_4; | ||
353 | u32 cg_spll_spread_spectrum; | ||
354 | u32 cg_spll_spread_spectrum_2; | ||
355 | u32 mclk_pwrmgt_cntl; | ||
356 | u32 dll_cntl; | ||
357 | u32 mpll_ad_func_cntl; | ||
358 | u32 mpll_ad_func_cntl_2; | ||
359 | u32 mpll_dq_func_cntl; | ||
360 | u32 mpll_dq_func_cntl_2; | ||
361 | u32 mpll_ss1; | ||
362 | u32 mpll_ss2; | ||
363 | }; | ||
364 | |||
365 | struct RV770_SMC_SCLK_VALUE | ||
366 | { | ||
367 | uint32_t vCG_SPLL_FUNC_CNTL; | ||
368 | uint32_t vCG_SPLL_FUNC_CNTL_2; | ||
369 | uint32_t vCG_SPLL_FUNC_CNTL_3; | ||
370 | uint32_t vCG_SPLL_SPREAD_SPECTRUM; | ||
371 | uint32_t vCG_SPLL_SPREAD_SPECTRUM_2; | ||
372 | uint32_t sclk_value; | ||
373 | }; | ||
374 | |||
375 | typedef struct RV770_SMC_SCLK_VALUE RV770_SMC_SCLK_VALUE; | ||
376 | |||
377 | struct RV770_SMC_MCLK_VALUE | ||
378 | { | ||
379 | uint32_t vMPLL_AD_FUNC_CNTL; | ||
380 | uint32_t vMPLL_AD_FUNC_CNTL_2; | ||
381 | uint32_t vMPLL_DQ_FUNC_CNTL; | ||
382 | uint32_t vMPLL_DQ_FUNC_CNTL_2; | ||
383 | uint32_t vMCLK_PWRMGT_CNTL; | ||
384 | uint32_t vDLL_CNTL; | ||
385 | uint32_t vMPLL_SS; | ||
386 | uint32_t vMPLL_SS2; | ||
387 | uint32_t mclk_value; | ||
388 | }; | ||
389 | |||
390 | typedef struct RV770_SMC_MCLK_VALUE RV770_SMC_MCLK_VALUE; | ||
391 | |||
392 | |||
393 | struct RV730_SMC_MCLK_VALUE | ||
394 | { | ||
395 | uint32_t vMCLK_PWRMGT_CNTL; | ||
396 | uint32_t vDLL_CNTL; | ||
397 | uint32_t vMPLL_FUNC_CNTL; | ||
398 | uint32_t vMPLL_FUNC_CNTL2; | ||
399 | uint32_t vMPLL_FUNC_CNTL3; | ||
400 | uint32_t vMPLL_SS; | ||
401 | uint32_t vMPLL_SS2; | ||
402 | uint32_t mclk_value; | ||
403 | }; | ||
404 | |||
405 | typedef struct RV730_SMC_MCLK_VALUE RV730_SMC_MCLK_VALUE; | ||
406 | |||
407 | struct RV770_SMC_VOLTAGE_VALUE | ||
408 | { | ||
409 | uint16_t value; | ||
410 | uint8_t index; | ||
411 | uint8_t padding; | ||
412 | }; | ||
413 | |||
414 | typedef struct RV770_SMC_VOLTAGE_VALUE RV770_SMC_VOLTAGE_VALUE; | ||
415 | |||
416 | union RV7XX_SMC_MCLK_VALUE | ||
417 | { | ||
418 | RV770_SMC_MCLK_VALUE mclk770; | ||
419 | RV730_SMC_MCLK_VALUE mclk730; | ||
420 | }; | ||
421 | |||
422 | typedef union RV7XX_SMC_MCLK_VALUE RV7XX_SMC_MCLK_VALUE, *LPRV7XX_SMC_MCLK_VALUE; | ||
423 | |||
424 | struct RV770_SMC_HW_PERFORMANCE_LEVEL | ||
425 | { | ||
426 | uint8_t arbValue; | ||
427 | union{ | ||
428 | uint8_t seqValue; | ||
429 | uint8_t ACIndex; | ||
430 | }; | ||
431 | uint8_t displayWatermark; | ||
432 | uint8_t gen2PCIE; | ||
433 | uint8_t gen2XSP; | ||
434 | uint8_t backbias; | ||
435 | uint8_t strobeMode; | ||
436 | uint8_t mcFlags; | ||
437 | uint32_t aT; | ||
438 | uint32_t bSP; | ||
439 | RV770_SMC_SCLK_VALUE sclk; | ||
440 | RV7XX_SMC_MCLK_VALUE mclk; | ||
441 | RV770_SMC_VOLTAGE_VALUE vddc; | ||
442 | RV770_SMC_VOLTAGE_VALUE mvdd; | ||
443 | RV770_SMC_VOLTAGE_VALUE vddci; | ||
444 | uint8_t reserved1; | ||
445 | uint8_t reserved2; | ||
446 | uint8_t stateFlags; | ||
447 | uint8_t padding; | ||
448 | }; | ||
449 | |||
450 | typedef struct RV770_SMC_HW_PERFORMANCE_LEVEL RV770_SMC_HW_PERFORMANCE_LEVEL; | ||
451 | |||
452 | struct RV770_SMC_SWSTATE | ||
453 | { | ||
454 | uint8_t flags; | ||
455 | uint8_t padding1; | ||
456 | uint8_t padding2; | ||
457 | uint8_t padding3; | ||
458 | RV770_SMC_HW_PERFORMANCE_LEVEL levels[RV770_SMC_PERFORMANCE_LEVELS_PER_SWSTATE]; | ||
459 | }; | ||
460 | |||
461 | typedef struct RV770_SMC_SWSTATE RV770_SMC_SWSTATE; | ||
462 | |||
463 | struct RV770_SMC_VOLTAGEMASKTABLE | ||
464 | { | ||
465 | uint8_t highMask[RV770_SMC_VOLTAGEMASK_MAX]; | ||
466 | uint32_t lowMask[RV770_SMC_VOLTAGEMASK_MAX]; | ||
467 | }; | ||
468 | |||
469 | typedef struct RV770_SMC_VOLTAGEMASKTABLE RV770_SMC_VOLTAGEMASKTABLE; | ||
470 | |||
471 | struct RV770_SMC_STATETABLE | ||
472 | { | ||
473 | uint8_t thermalProtectType; | ||
474 | uint8_t systemFlags; | ||
475 | uint8_t maxVDDCIndexInPPTable; | ||
476 | uint8_t extraFlags; | ||
477 | uint8_t highSMIO[MAX_NO_VREG_STEPS]; | ||
478 | uint32_t lowSMIO[MAX_NO_VREG_STEPS]; | ||
479 | RV770_SMC_VOLTAGEMASKTABLE voltageMaskTable; | ||
480 | RV770_SMC_SWSTATE initialState; | ||
481 | RV770_SMC_SWSTATE ACPIState; | ||
482 | RV770_SMC_SWSTATE driverState; | ||
483 | RV770_SMC_SWSTATE ULVState; | ||
484 | }; | ||
485 | |||
486 | typedef struct RV770_SMC_STATETABLE RV770_SMC_STATETABLE; | ||
487 | |||
488 | struct vddc_table_entry { | ||
489 | u16 vddc; | ||
490 | u8 vddc_index; | ||
491 | u8 high_smio; | ||
492 | u32 low_smio; | ||
493 | }; | ||
494 | |||
495 | struct rv770_clock_registers { | ||
496 | u32 cg_spll_func_cntl; | ||
497 | u32 cg_spll_func_cntl_2; | ||
498 | u32 cg_spll_func_cntl_3; | ||
499 | u32 cg_spll_spread_spectrum; | ||
500 | u32 cg_spll_spread_spectrum_2; | ||
501 | u32 mpll_ad_func_cntl; | ||
502 | u32 mpll_ad_func_cntl_2; | ||
503 | u32 mpll_dq_func_cntl; | ||
504 | u32 mpll_dq_func_cntl_2; | ||
505 | u32 mclk_pwrmgt_cntl; | ||
506 | u32 dll_cntl; | ||
507 | u32 mpll_ss1; | ||
508 | u32 mpll_ss2; | ||
509 | }; | ||
510 | |||
511 | struct rv730_clock_registers { | ||
512 | u32 cg_spll_func_cntl; | ||
513 | u32 cg_spll_func_cntl_2; | ||
514 | u32 cg_spll_func_cntl_3; | ||
515 | u32 cg_spll_spread_spectrum; | ||
516 | u32 cg_spll_spread_spectrum_2; | ||
517 | u32 mclk_pwrmgt_cntl; | ||
518 | u32 dll_cntl; | ||
519 | u32 mpll_func_cntl; | ||
520 | u32 mpll_func_cntl2; | ||
521 | u32 mpll_func_cntl3; | ||
522 | u32 mpll_ss; | ||
523 | u32 mpll_ss2; | ||
524 | }; | ||
525 | |||
526 | union r7xx_clock_registers { | ||
527 | struct rv770_clock_registers rv770; | ||
528 | struct rv730_clock_registers rv730; | ||
529 | }; | ||
530 | |||
531 | struct rv7xx_power_info { | ||
532 | /* flags */ | ||
533 | bool mem_gddr5; | ||
534 | bool pcie_gen2; | ||
535 | bool dynamic_pcie_gen2; | ||
536 | bool acpi_pcie_gen2; | ||
537 | bool boot_in_gen2; | ||
538 | bool voltage_control; /* vddc */ | ||
539 | bool mvdd_control; | ||
540 | bool sclk_ss; | ||
541 | bool mclk_ss; | ||
542 | bool dynamic_ss; | ||
543 | bool gfx_clock_gating; | ||
544 | bool mg_clock_gating; | ||
545 | bool mgcgtssm; | ||
546 | bool power_gating; | ||
547 | bool thermal_protection; | ||
548 | bool display_gap; | ||
549 | bool dcodt; | ||
550 | bool ulps; | ||
551 | /* registers */ | ||
552 | union r7xx_clock_registers clk_regs; | ||
553 | u32 s0_vid_lower_smio_cntl; | ||
554 | /* voltage */ | ||
555 | u32 vddc_mask_low; | ||
556 | u32 mvdd_mask_low; | ||
557 | u32 mvdd_split_frequency; | ||
558 | u32 mvdd_low_smio[MAX_NO_OF_MVDD_VALUES]; | ||
559 | u16 max_vddc; | ||
560 | u16 max_vddc_in_table; | ||
561 | u16 min_vddc_in_table; | ||
562 | struct vddc_table_entry vddc_table[MAX_NO_VREG_STEPS]; | ||
563 | u8 valid_vddc_entries; | ||
564 | /* dc odt */ | ||
565 | u32 mclk_odt_threshold; | ||
566 | u8 odt_value_0[2]; | ||
567 | u8 odt_value_1[2]; | ||
568 | /* stored values */ | ||
569 | u32 boot_sclk; | ||
570 | u16 acpi_vddc; | ||
571 | u32 ref_div; | ||
572 | u32 active_auto_throttle_sources; | ||
573 | u32 mclk_stutter_mode_threshold; | ||
574 | u32 mclk_strobe_mode_threshold; | ||
575 | u32 mclk_edc_enable_threshold; | ||
576 | u32 bsp; | ||
577 | u32 bsu; | ||
578 | u32 pbsp; | ||
579 | u32 pbsu; | ||
580 | u32 dsp; | ||
581 | u32 psp; | ||
582 | u32 asi; | ||
583 | u32 pasi; | ||
584 | u32 vrc; | ||
585 | u32 restricted_levels; | ||
586 | u32 rlp; | ||
587 | u32 rmp; | ||
588 | u32 lhp; | ||
589 | u32 lmp; | ||
590 | /* smc offsets */ | ||
591 | u16 state_table_start; | ||
592 | u16 soft_regs_start; | ||
593 | u16 sram_end; | ||
594 | /* scratch structs */ | ||
595 | RV770_SMC_STATETABLE smc_statetable; | ||
596 | }; | ||
597 | |||
598 | struct rv7xx_pl { | ||
599 | u32 sclk; | ||
600 | u32 mclk; | ||
601 | u16 vddc; | ||
602 | u16 vddci; /* eg+ only */ | ||
603 | u32 flags; | ||
604 | enum amdgpu_pcie_gen pcie_gen; /* si+ only */ | ||
605 | }; | ||
606 | |||
607 | struct rv7xx_ps { | ||
608 | struct rv7xx_pl high; | ||
609 | struct rv7xx_pl medium; | ||
610 | struct rv7xx_pl low; | ||
611 | bool dc_compatible; | ||
612 | }; | ||
613 | |||
614 | struct si_ps { | ||
615 | u16 performance_level_count; | ||
616 | bool dc_compatible; | ||
617 | struct rv7xx_pl performance_levels[NISLANDS_MAX_SMC_PERFORMANCE_LEVELS_PER_SWSTATE]; | ||
618 | }; | ||
619 | |||
620 | struct ni_mc_reg_table { | ||
621 | u8 last; | ||
622 | u8 num_entries; | ||
623 | u16 valid_flag; | ||
624 | struct ni_mc_reg_entry mc_reg_table_entry[MAX_AC_TIMING_ENTRIES]; | ||
625 | SMC_NIslands_MCRegisterAddress mc_reg_address[SMC_NISLANDS_MC_REGISTER_ARRAY_SIZE]; | ||
626 | }; | ||
627 | |||
628 | struct ni_cac_data | ||
629 | { | ||
630 | struct ni_leakage_coeffients leakage_coefficients; | ||
631 | u32 i_leakage; | ||
632 | s32 leakage_minimum_temperature; | ||
633 | u32 pwr_const; | ||
634 | u32 dc_cac_value; | ||
635 | u32 bif_cac_value; | ||
636 | u32 lkge_pwr; | ||
637 | u8 mc_wr_weight; | ||
638 | u8 mc_rd_weight; | ||
639 | u8 allow_ovrflw; | ||
640 | u8 num_win_tdp; | ||
641 | u8 l2num_win_tdp; | ||
642 | u8 lts_truncate_n; | ||
643 | }; | ||
644 | |||
645 | struct evergreen_power_info { | ||
646 | /* must be first! */ | ||
647 | struct rv7xx_power_info rv7xx; | ||
648 | /* flags */ | ||
649 | bool vddci_control; | ||
650 | bool dynamic_ac_timing; | ||
651 | bool abm; | ||
652 | bool mcls; | ||
653 | bool light_sleep; | ||
654 | bool memory_transition; | ||
655 | bool pcie_performance_request; | ||
656 | bool pcie_performance_request_registered; | ||
657 | bool sclk_deep_sleep; | ||
658 | bool dll_default_on; | ||
659 | bool ls_clock_gating; | ||
660 | bool smu_uvd_hs; | ||
661 | bool uvd_enabled; | ||
662 | /* stored values */ | ||
663 | u16 acpi_vddci; | ||
664 | u8 mvdd_high_index; | ||
665 | u8 mvdd_low_index; | ||
666 | u32 mclk_edc_wr_enable_threshold; | ||
667 | struct evergreen_mc_reg_table mc_reg_table; | ||
668 | struct atom_voltage_table vddc_voltage_table; | ||
669 | struct atom_voltage_table vddci_voltage_table; | ||
670 | struct evergreen_arb_registers bootup_arb_registers; | ||
671 | struct evergreen_ulv_param ulv; | ||
672 | struct at ats[2]; | ||
673 | /* smc offsets */ | ||
674 | u16 mc_reg_table_start; | ||
675 | struct amdgpu_ps current_rps; | ||
676 | struct rv7xx_ps current_ps; | ||
677 | struct amdgpu_ps requested_rps; | ||
678 | struct rv7xx_ps requested_ps; | ||
679 | }; | ||
680 | |||
681 | struct PP_NIslands_Dpm2PerfLevel | ||
682 | { | ||
683 | uint8_t MaxPS; | ||
684 | uint8_t TgtAct; | ||
685 | uint8_t MaxPS_StepInc; | ||
686 | uint8_t MaxPS_StepDec; | ||
687 | uint8_t PSST; | ||
688 | uint8_t NearTDPDec; | ||
689 | uint8_t AboveSafeInc; | ||
690 | uint8_t BelowSafeInc; | ||
691 | uint8_t PSDeltaLimit; | ||
692 | uint8_t PSDeltaWin; | ||
693 | uint8_t Reserved[6]; | ||
694 | }; | ||
695 | |||
696 | typedef struct PP_NIslands_Dpm2PerfLevel PP_NIslands_Dpm2PerfLevel; | ||
697 | |||
698 | struct PP_NIslands_DPM2Parameters | ||
699 | { | ||
700 | uint32_t TDPLimit; | ||
701 | uint32_t NearTDPLimit; | ||
702 | uint32_t SafePowerLimit; | ||
703 | uint32_t PowerBoostLimit; | ||
704 | }; | ||
705 | typedef struct PP_NIslands_DPM2Parameters PP_NIslands_DPM2Parameters; | ||
706 | |||
707 | struct NISLANDS_SMC_SCLK_VALUE | ||
708 | { | ||
709 | uint32_t vCG_SPLL_FUNC_CNTL; | ||
710 | uint32_t vCG_SPLL_FUNC_CNTL_2; | ||
711 | uint32_t vCG_SPLL_FUNC_CNTL_3; | ||
712 | uint32_t vCG_SPLL_FUNC_CNTL_4; | ||
713 | uint32_t vCG_SPLL_SPREAD_SPECTRUM; | ||
714 | uint32_t vCG_SPLL_SPREAD_SPECTRUM_2; | ||
715 | uint32_t sclk_value; | ||
716 | }; | ||
717 | |||
718 | typedef struct NISLANDS_SMC_SCLK_VALUE NISLANDS_SMC_SCLK_VALUE; | ||
719 | |||
720 | struct NISLANDS_SMC_MCLK_VALUE | ||
721 | { | ||
722 | uint32_t vMPLL_FUNC_CNTL; | ||
723 | uint32_t vMPLL_FUNC_CNTL_1; | ||
724 | uint32_t vMPLL_FUNC_CNTL_2; | ||
725 | uint32_t vMPLL_AD_FUNC_CNTL; | ||
726 | uint32_t vMPLL_AD_FUNC_CNTL_2; | ||
727 | uint32_t vMPLL_DQ_FUNC_CNTL; | ||
728 | uint32_t vMPLL_DQ_FUNC_CNTL_2; | ||
729 | uint32_t vMCLK_PWRMGT_CNTL; | ||
730 | uint32_t vDLL_CNTL; | ||
731 | uint32_t vMPLL_SS; | ||
732 | uint32_t vMPLL_SS2; | ||
733 | uint32_t mclk_value; | ||
734 | }; | ||
735 | |||
736 | typedef struct NISLANDS_SMC_MCLK_VALUE NISLANDS_SMC_MCLK_VALUE; | ||
737 | |||
738 | struct NISLANDS_SMC_VOLTAGE_VALUE | ||
739 | { | ||
740 | uint16_t value; | ||
741 | uint8_t index; | ||
742 | uint8_t padding; | ||
743 | }; | ||
744 | |||
745 | typedef struct NISLANDS_SMC_VOLTAGE_VALUE NISLANDS_SMC_VOLTAGE_VALUE; | ||
746 | |||
747 | struct NISLANDS_SMC_HW_PERFORMANCE_LEVEL | ||
748 | { | ||
749 | uint8_t arbValue; | ||
750 | uint8_t ACIndex; | ||
751 | uint8_t displayWatermark; | ||
752 | uint8_t gen2PCIE; | ||
753 | uint8_t reserved1; | ||
754 | uint8_t reserved2; | ||
755 | uint8_t strobeMode; | ||
756 | uint8_t mcFlags; | ||
757 | uint32_t aT; | ||
758 | uint32_t bSP; | ||
759 | NISLANDS_SMC_SCLK_VALUE sclk; | ||
760 | NISLANDS_SMC_MCLK_VALUE mclk; | ||
761 | NISLANDS_SMC_VOLTAGE_VALUE vddc; | ||
762 | NISLANDS_SMC_VOLTAGE_VALUE mvdd; | ||
763 | NISLANDS_SMC_VOLTAGE_VALUE vddci; | ||
764 | NISLANDS_SMC_VOLTAGE_VALUE std_vddc; | ||
765 | uint32_t powergate_en; | ||
766 | uint8_t hUp; | ||
767 | uint8_t hDown; | ||
768 | uint8_t stateFlags; | ||
769 | uint8_t arbRefreshState; | ||
770 | uint32_t SQPowerThrottle; | ||
771 | uint32_t SQPowerThrottle_2; | ||
772 | uint32_t reserved[2]; | ||
773 | PP_NIslands_Dpm2PerfLevel dpm2; | ||
774 | }; | ||
775 | |||
776 | typedef struct NISLANDS_SMC_HW_PERFORMANCE_LEVEL NISLANDS_SMC_HW_PERFORMANCE_LEVEL; | ||
777 | |||
778 | struct NISLANDS_SMC_SWSTATE | ||
779 | { | ||
780 | uint8_t flags; | ||
781 | uint8_t levelCount; | ||
782 | uint8_t padding2; | ||
783 | uint8_t padding3; | ||
784 | NISLANDS_SMC_HW_PERFORMANCE_LEVEL levels[1]; | ||
785 | }; | ||
786 | |||
787 | typedef struct NISLANDS_SMC_SWSTATE NISLANDS_SMC_SWSTATE; | ||
788 | |||
789 | struct NISLANDS_SMC_VOLTAGEMASKTABLE | ||
790 | { | ||
791 | uint8_t highMask[NISLANDS_SMC_VOLTAGEMASK_MAX]; | ||
792 | uint32_t lowMask[NISLANDS_SMC_VOLTAGEMASK_MAX]; | ||
793 | }; | ||
794 | |||
795 | typedef struct NISLANDS_SMC_VOLTAGEMASKTABLE NISLANDS_SMC_VOLTAGEMASKTABLE; | ||
796 | |||
797 | #define NISLANDS_MAX_NO_VREG_STEPS 32 | ||
798 | |||
799 | struct NISLANDS_SMC_STATETABLE | ||
800 | { | ||
801 | uint8_t thermalProtectType; | ||
802 | uint8_t systemFlags; | ||
803 | uint8_t maxVDDCIndexInPPTable; | ||
804 | uint8_t extraFlags; | ||
805 | uint8_t highSMIO[NISLANDS_MAX_NO_VREG_STEPS]; | ||
806 | uint32_t lowSMIO[NISLANDS_MAX_NO_VREG_STEPS]; | ||
807 | NISLANDS_SMC_VOLTAGEMASKTABLE voltageMaskTable; | ||
808 | PP_NIslands_DPM2Parameters dpm2Params; | ||
809 | NISLANDS_SMC_SWSTATE initialState; | ||
810 | NISLANDS_SMC_SWSTATE ACPIState; | ||
811 | NISLANDS_SMC_SWSTATE ULVState; | ||
812 | NISLANDS_SMC_SWSTATE driverState; | ||
813 | NISLANDS_SMC_HW_PERFORMANCE_LEVEL dpmLevels[NISLANDS_MAX_SMC_PERFORMANCE_LEVELS_PER_SWSTATE - 1]; | ||
814 | }; | ||
815 | |||
816 | typedef struct NISLANDS_SMC_STATETABLE NISLANDS_SMC_STATETABLE; | ||
817 | |||
818 | struct ni_power_info { | ||
819 | /* must be first! */ | ||
820 | struct evergreen_power_info eg; | ||
821 | struct ni_clock_registers clock_registers; | ||
822 | struct ni_mc_reg_table mc_reg_table; | ||
823 | u32 mclk_rtt_mode_threshold; | ||
824 | /* flags */ | ||
825 | bool use_power_boost_limit; | ||
826 | bool support_cac_long_term_average; | ||
827 | bool cac_enabled; | ||
828 | bool cac_configuration_required; | ||
829 | bool driver_calculate_cac_leakage; | ||
830 | bool pc_enabled; | ||
831 | bool enable_power_containment; | ||
832 | bool enable_cac; | ||
833 | bool enable_sq_ramping; | ||
834 | /* smc offsets */ | ||
835 | u16 arb_table_start; | ||
836 | u16 fan_table_start; | ||
837 | u16 cac_table_start; | ||
838 | u16 spll_table_start; | ||
839 | /* CAC stuff */ | ||
840 | struct ni_cac_data cac_data; | ||
841 | u32 dc_cac_table[NISLANDS_DCCAC_MAX_LEVELS]; | ||
842 | const struct ni_cac_weights *cac_weights; | ||
843 | u8 lta_window_size; | ||
844 | u8 lts_truncate; | ||
845 | struct si_ps current_ps; | ||
846 | struct si_ps requested_ps; | ||
847 | /* scratch structs */ | ||
848 | SMC_NIslands_MCRegisters smc_mc_reg_table; | ||
849 | NISLANDS_SMC_STATETABLE smc_statetable; | ||
850 | }; | ||
851 | |||
852 | struct si_cac_config_reg | ||
853 | { | ||
854 | u32 offset; | ||
855 | u32 mask; | ||
856 | u32 shift; | ||
857 | u32 value; | ||
858 | enum si_cac_config_reg_type type; | ||
859 | }; | ||
860 | |||
861 | struct si_powertune_data | ||
862 | { | ||
863 | u32 cac_window; | ||
864 | u32 l2_lta_window_size_default; | ||
865 | u8 lts_truncate_default; | ||
866 | u8 shift_n_default; | ||
867 | u8 operating_temp; | ||
868 | struct ni_leakage_coeffients leakage_coefficients; | ||
869 | u32 fixed_kt; | ||
870 | u32 lkge_lut_v0_percent; | ||
871 | u8 dc_cac[NISLANDS_DCCAC_MAX_LEVELS]; | ||
872 | bool enable_powertune_by_default; | ||
873 | }; | ||
874 | |||
875 | struct si_dyn_powertune_data | ||
876 | { | ||
877 | u32 cac_leakage; | ||
878 | s32 leakage_minimum_temperature; | ||
879 | u32 wintime; | ||
880 | u32 l2_lta_window_size; | ||
881 | u8 lts_truncate; | ||
882 | u8 shift_n; | ||
883 | u8 dc_pwr_value; | ||
884 | bool disable_uvd_powertune; | ||
885 | }; | ||
886 | |||
887 | struct si_dte_data | ||
888 | { | ||
889 | u32 tau[SMC_SISLANDS_DTE_MAX_FILTER_STAGES]; | ||
890 | u32 r[SMC_SISLANDS_DTE_MAX_FILTER_STAGES]; | ||
891 | u32 k; | ||
892 | u32 t0; | ||
893 | u32 max_t; | ||
894 | u8 window_size; | ||
895 | u8 temp_select; | ||
896 | u8 dte_mode; | ||
897 | u8 tdep_count; | ||
898 | u8 t_limits[SMC_SISLANDS_DTE_MAX_TEMPERATURE_DEPENDENT_ARRAY_SIZE]; | ||
899 | u32 tdep_tau[SMC_SISLANDS_DTE_MAX_TEMPERATURE_DEPENDENT_ARRAY_SIZE]; | ||
900 | u32 tdep_r[SMC_SISLANDS_DTE_MAX_TEMPERATURE_DEPENDENT_ARRAY_SIZE]; | ||
901 | u32 t_threshold; | ||
902 | bool enable_dte_by_default; | ||
903 | }; | ||
904 | |||
905 | struct si_clock_registers { | ||
906 | u32 cg_spll_func_cntl; | ||
907 | u32 cg_spll_func_cntl_2; | ||
908 | u32 cg_spll_func_cntl_3; | ||
909 | u32 cg_spll_func_cntl_4; | ||
910 | u32 cg_spll_spread_spectrum; | ||
911 | u32 cg_spll_spread_spectrum_2; | ||
912 | u32 dll_cntl; | ||
913 | u32 mclk_pwrmgt_cntl; | ||
914 | u32 mpll_ad_func_cntl; | ||
915 | u32 mpll_dq_func_cntl; | ||
916 | u32 mpll_func_cntl; | ||
917 | u32 mpll_func_cntl_1; | ||
918 | u32 mpll_func_cntl_2; | ||
919 | u32 mpll_ss1; | ||
920 | u32 mpll_ss2; | ||
921 | }; | ||
922 | |||
923 | struct si_mc_reg_entry { | ||
924 | u32 mclk_max; | ||
925 | u32 mc_data[SMC_SISLANDS_MC_REGISTER_ARRAY_SIZE]; | ||
926 | }; | ||
927 | |||
928 | struct si_mc_reg_table { | ||
929 | u8 last; | ||
930 | u8 num_entries; | ||
931 | u16 valid_flag; | ||
932 | struct si_mc_reg_entry mc_reg_table_entry[MAX_AC_TIMING_ENTRIES]; | ||
933 | SMC_NIslands_MCRegisterAddress mc_reg_address[SMC_SISLANDS_MC_REGISTER_ARRAY_SIZE]; | ||
934 | }; | ||
935 | |||
936 | struct si_leakage_voltage_entry | ||
937 | { | ||
938 | u16 voltage; | ||
939 | u16 leakage_index; | ||
940 | }; | ||
941 | |||
942 | struct si_leakage_voltage | ||
943 | { | ||
944 | u16 count; | ||
945 | struct si_leakage_voltage_entry entries[SISLANDS_MAX_LEAKAGE_COUNT]; | ||
946 | }; | ||
947 | |||
948 | |||
949 | struct si_ulv_param { | ||
950 | bool supported; | ||
951 | u32 cg_ulv_control; | ||
952 | u32 cg_ulv_parameter; | ||
953 | u32 volt_change_delay; | ||
954 | struct rv7xx_pl pl; | ||
955 | bool one_pcie_lane_in_ulv; | ||
956 | }; | ||
957 | |||
958 | struct si_power_info { | ||
959 | /* must be first! */ | ||
960 | struct ni_power_info ni; | ||
961 | struct si_clock_registers clock_registers; | ||
962 | struct si_mc_reg_table mc_reg_table; | ||
963 | struct atom_voltage_table mvdd_voltage_table; | ||
964 | struct atom_voltage_table vddc_phase_shed_table; | ||
965 | struct si_leakage_voltage leakage_voltage; | ||
966 | u16 mvdd_bootup_value; | ||
967 | struct si_ulv_param ulv; | ||
968 | u32 max_cu; | ||
969 | /* pcie gen */ | ||
970 | enum amdgpu_pcie_gen force_pcie_gen; | ||
971 | enum amdgpu_pcie_gen boot_pcie_gen; | ||
972 | enum amdgpu_pcie_gen acpi_pcie_gen; | ||
973 | u32 sys_pcie_mask; | ||
974 | /* flags */ | ||
975 | bool enable_dte; | ||
976 | bool enable_ppm; | ||
977 | bool vddc_phase_shed_control; | ||
978 | bool pspp_notify_required; | ||
979 | bool sclk_deep_sleep_above_low; | ||
980 | bool voltage_control_svi2; | ||
981 | bool vddci_control_svi2; | ||
982 | /* smc offsets */ | ||
983 | u32 sram_end; | ||
984 | u32 state_table_start; | ||
985 | u32 soft_regs_start; | ||
986 | u32 mc_reg_table_start; | ||
987 | u32 arb_table_start; | ||
988 | u32 cac_table_start; | ||
989 | u32 dte_table_start; | ||
990 | u32 spll_table_start; | ||
991 | u32 papm_cfg_table_start; | ||
992 | u32 fan_table_start; | ||
993 | /* CAC stuff */ | ||
994 | const struct si_cac_config_reg *cac_weights; | ||
995 | const struct si_cac_config_reg *lcac_config; | ||
996 | const struct si_cac_config_reg *cac_override; | ||
997 | const struct si_powertune_data *powertune_data; | ||
998 | struct si_dyn_powertune_data dyn_powertune_data; | ||
999 | /* DTE stuff */ | ||
1000 | struct si_dte_data dte_data; | ||
1001 | /* scratch structs */ | ||
1002 | SMC_SIslands_MCRegisters smc_mc_reg_table; | ||
1003 | SISLANDS_SMC_STATETABLE smc_statetable; | ||
1004 | PP_SIslands_PAPMParameters papm_parm; | ||
1005 | /* SVI2 */ | ||
1006 | u8 svd_gpio_id; | ||
1007 | u8 svc_gpio_id; | ||
1008 | /* fan control */ | ||
1009 | bool fan_ctrl_is_in_default_mode; | ||
1010 | u32 t_min; | ||
1011 | u32 fan_ctrl_default_mode; | ||
1012 | bool fan_is_controlled_by_smc; | ||
1013 | }; | ||
1014 | |||
1015 | #endif | ||