2 * Copyright 2015 Advanced Micro Devices, Inc.
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:
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
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.
26 #include "polaris10_hwmgr.h"
27 #include "polaris10_powertune.h"
28 #include "polaris10_smumgr.h"
29 #include "smu74_discrete.h"
31 #include "gca/gfx_8_0_d.h"
32 #include "gca/gfx_8_0_sh_mask.h"
33 #include "oss/oss_3_0_sh_mask.h"
35 #define VOLTAGE_SCALE 4
36 #define POWERTUNE_DEFAULT_SET_MAX 1
38 uint32_t DIDTBlock_Info
= SQ_IR_MASK
| TCP_IR_MASK
| TD_PCC_MASK
;
40 struct polaris10_pt_config_reg GCCACConfig_Polaris10
[] = {
41 /* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
42 * Offset Mask Shift Value Type
43 * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
45 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x00060013, POLARIS10_CONFIGREG_GC_CAC_IND
},
46 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x00860013, POLARIS10_CONFIGREG_GC_CAC_IND
},
47 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x01060013, POLARIS10_CONFIGREG_GC_CAC_IND
},
48 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x01860013, POLARIS10_CONFIGREG_GC_CAC_IND
},
49 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x02060013, POLARIS10_CONFIGREG_GC_CAC_IND
},
50 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x02860013, POLARIS10_CONFIGREG_GC_CAC_IND
},
51 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x03060013, POLARIS10_CONFIGREG_GC_CAC_IND
},
52 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x03860013, POLARIS10_CONFIGREG_GC_CAC_IND
},
53 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x04060013, POLARIS10_CONFIGREG_GC_CAC_IND
},
55 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x000E0013, POLARIS10_CONFIGREG_GC_CAC_IND
},
56 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x008E0013, POLARIS10_CONFIGREG_GC_CAC_IND
},
57 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x010E0013, POLARIS10_CONFIGREG_GC_CAC_IND
},
58 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x018E0013, POLARIS10_CONFIGREG_GC_CAC_IND
},
59 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x020E0013, POLARIS10_CONFIGREG_GC_CAC_IND
},
61 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x00100013, POLARIS10_CONFIGREG_GC_CAC_IND
},
62 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x00900013, POLARIS10_CONFIGREG_GC_CAC_IND
},
63 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x01100013, POLARIS10_CONFIGREG_GC_CAC_IND
},
64 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x01900013, POLARIS10_CONFIGREG_GC_CAC_IND
},
65 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x02100013, POLARIS10_CONFIGREG_GC_CAC_IND
},
66 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x02900013, POLARIS10_CONFIGREG_GC_CAC_IND
},
71 struct polaris10_pt_config_reg GCCACConfig_Polaris11
[] = {
72 /* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
73 * Offset Mask Shift Value Type
74 * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
76 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x00060011, POLARIS10_CONFIGREG_GC_CAC_IND
},
77 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x00860011, POLARIS10_CONFIGREG_GC_CAC_IND
},
78 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x01060011, POLARIS10_CONFIGREG_GC_CAC_IND
},
79 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x01860011, POLARIS10_CONFIGREG_GC_CAC_IND
},
80 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x02060011, POLARIS10_CONFIGREG_GC_CAC_IND
},
81 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x02860011, POLARIS10_CONFIGREG_GC_CAC_IND
},
82 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x03060011, POLARIS10_CONFIGREG_GC_CAC_IND
},
83 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x03860011, POLARIS10_CONFIGREG_GC_CAC_IND
},
84 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x04060011, POLARIS10_CONFIGREG_GC_CAC_IND
},
86 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x000E0011, POLARIS10_CONFIGREG_GC_CAC_IND
},
87 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x008E0011, POLARIS10_CONFIGREG_GC_CAC_IND
},
88 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x010E0011, POLARIS10_CONFIGREG_GC_CAC_IND
},
89 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x018E0011, POLARIS10_CONFIGREG_GC_CAC_IND
},
90 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x020E0011, POLARIS10_CONFIGREG_GC_CAC_IND
},
92 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x00100011, POLARIS10_CONFIGREG_GC_CAC_IND
},
93 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x00900011, POLARIS10_CONFIGREG_GC_CAC_IND
},
94 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x01100011, POLARIS10_CONFIGREG_GC_CAC_IND
},
95 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x01900011, POLARIS10_CONFIGREG_GC_CAC_IND
},
96 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x02100011, POLARIS10_CONFIGREG_GC_CAC_IND
},
97 { ixGC_CAC_CNTL
, 0xFFFFFFFF, 0, 0x02900011, POLARIS10_CONFIGREG_GC_CAC_IND
},
102 struct polaris10_pt_config_reg DIDTConfig_Polaris10
[] = {
103 /* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
104 * Offset Mask Shift Value Type
105 * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
107 { ixDIDT_SQ_WEIGHT0_3
, DIDT_SQ_WEIGHT0_3__WEIGHT0_MASK
, DIDT_SQ_WEIGHT0_3__WEIGHT0__SHIFT
, 0x0073, POLARIS10_CONFIGREG_DIDT_IND
},
108 { ixDIDT_SQ_WEIGHT0_3
, DIDT_SQ_WEIGHT0_3__WEIGHT1_MASK
, DIDT_SQ_WEIGHT0_3__WEIGHT1__SHIFT
, 0x00ab, POLARIS10_CONFIGREG_DIDT_IND
},
109 { ixDIDT_SQ_WEIGHT0_3
, DIDT_SQ_WEIGHT0_3__WEIGHT2_MASK
, DIDT_SQ_WEIGHT0_3__WEIGHT2__SHIFT
, 0x0084, POLARIS10_CONFIGREG_DIDT_IND
},
110 { ixDIDT_SQ_WEIGHT0_3
, DIDT_SQ_WEIGHT0_3__WEIGHT3_MASK
, DIDT_SQ_WEIGHT0_3__WEIGHT3__SHIFT
, 0x005a, POLARIS10_CONFIGREG_DIDT_IND
},
112 { ixDIDT_SQ_WEIGHT4_7
, DIDT_SQ_WEIGHT4_7__WEIGHT4_MASK
, DIDT_SQ_WEIGHT4_7__WEIGHT4__SHIFT
, 0x0067, POLARIS10_CONFIGREG_DIDT_IND
},
113 { ixDIDT_SQ_WEIGHT4_7
, DIDT_SQ_WEIGHT4_7__WEIGHT5_MASK
, DIDT_SQ_WEIGHT4_7__WEIGHT5__SHIFT
, 0x0084, POLARIS10_CONFIGREG_DIDT_IND
},
114 { ixDIDT_SQ_WEIGHT4_7
, DIDT_SQ_WEIGHT4_7__WEIGHT6_MASK
, DIDT_SQ_WEIGHT4_7__WEIGHT6__SHIFT
, 0x0027, POLARIS10_CONFIGREG_DIDT_IND
},
115 { ixDIDT_SQ_WEIGHT4_7
, DIDT_SQ_WEIGHT4_7__WEIGHT7_MASK
, DIDT_SQ_WEIGHT4_7__WEIGHT7__SHIFT
, 0x0046, POLARIS10_CONFIGREG_DIDT_IND
},
117 { ixDIDT_SQ_WEIGHT8_11
, DIDT_SQ_WEIGHT8_11__WEIGHT8_MASK
, DIDT_SQ_WEIGHT8_11__WEIGHT8__SHIFT
, 0x00aa, POLARIS10_CONFIGREG_DIDT_IND
},
118 { ixDIDT_SQ_WEIGHT8_11
, DIDT_SQ_WEIGHT8_11__WEIGHT9_MASK
, DIDT_SQ_WEIGHT8_11__WEIGHT9__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
119 { ixDIDT_SQ_WEIGHT8_11
, DIDT_SQ_WEIGHT8_11__WEIGHT10_MASK
, DIDT_SQ_WEIGHT8_11__WEIGHT10__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
120 { ixDIDT_SQ_WEIGHT8_11
, DIDT_SQ_WEIGHT8_11__WEIGHT11_MASK
, DIDT_SQ_WEIGHT8_11__WEIGHT11__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
122 { ixDIDT_SQ_CTRL1
, DIDT_SQ_CTRL1__MIN_POWER_MASK
, DIDT_SQ_CTRL1__MIN_POWER__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
123 { ixDIDT_SQ_CTRL1
, DIDT_SQ_CTRL1__MAX_POWER_MASK
, DIDT_SQ_CTRL1__MAX_POWER__SHIFT
, 0xffff, POLARIS10_CONFIGREG_DIDT_IND
},
125 { ixDIDT_SQ_CTRL_OCP
, DIDT_SQ_CTRL_OCP__UNUSED_0_MASK
, DIDT_SQ_CTRL_OCP__UNUSED_0__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
126 { ixDIDT_SQ_CTRL_OCP
, DIDT_SQ_CTRL_OCP__OCP_MAX_POWER_MASK
, DIDT_SQ_CTRL_OCP__OCP_MAX_POWER__SHIFT
, 0xffff, POLARIS10_CONFIGREG_DIDT_IND
},
128 { ixDIDT_SQ_CTRL2
, DIDT_SQ_CTRL2__MAX_POWER_DELTA_MASK
, DIDT_SQ_CTRL2__MAX_POWER_DELTA__SHIFT
, 0x3853, POLARIS10_CONFIGREG_DIDT_IND
},
129 { ixDIDT_SQ_CTRL2
, DIDT_SQ_CTRL2__UNUSED_0_MASK
, DIDT_SQ_CTRL2__UNUSED_0__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
130 { ixDIDT_SQ_CTRL2
, DIDT_SQ_CTRL2__SHORT_TERM_INTERVAL_SIZE_MASK
, DIDT_SQ_CTRL2__SHORT_TERM_INTERVAL_SIZE__SHIFT
, 0x005a, POLARIS10_CONFIGREG_DIDT_IND
},
131 { ixDIDT_SQ_CTRL2
, DIDT_SQ_CTRL2__UNUSED_1_MASK
, DIDT_SQ_CTRL2__UNUSED_1__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
132 { ixDIDT_SQ_CTRL2
, DIDT_SQ_CTRL2__LONG_TERM_INTERVAL_RATIO_MASK
, DIDT_SQ_CTRL2__LONG_TERM_INTERVAL_RATIO__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
133 { ixDIDT_SQ_CTRL2
, DIDT_SQ_CTRL2__UNUSED_2_MASK
, DIDT_SQ_CTRL2__UNUSED_2__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
135 { ixDIDT_SQ_STALL_CTRL
, DIDT_SQ_STALL_CTRL__DIDT_STALL_CTRL_ENABLE_MASK
, DIDT_SQ_STALL_CTRL__DIDT_STALL_CTRL_ENABLE__SHIFT
, 0x0001, POLARIS10_CONFIGREG_DIDT_IND
},
136 { ixDIDT_SQ_STALL_CTRL
, DIDT_SQ_STALL_CTRL__DIDT_STALL_DELAY_HI_MASK
, DIDT_SQ_STALL_CTRL__DIDT_STALL_DELAY_HI__SHIFT
, 0x0001, POLARIS10_CONFIGREG_DIDT_IND
},
137 { ixDIDT_SQ_STALL_CTRL
, DIDT_SQ_STALL_CTRL__DIDT_STALL_DELAY_LO_MASK
, DIDT_SQ_STALL_CTRL__DIDT_STALL_DELAY_LO__SHIFT
, 0x0001, POLARIS10_CONFIGREG_DIDT_IND
},
138 { ixDIDT_SQ_STALL_CTRL
, DIDT_SQ_STALL_CTRL__DIDT_HI_POWER_THRESHOLD_MASK
, DIDT_SQ_STALL_CTRL__DIDT_HI_POWER_THRESHOLD__SHIFT
, 0x0ebb, POLARIS10_CONFIGREG_DIDT_IND
},
139 { ixDIDT_SQ_STALL_CTRL
, DIDT_SQ_STALL_CTRL__UNUSED_0_MASK
, DIDT_SQ_STALL_CTRL__UNUSED_0__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
141 { ixDIDT_SQ_TUNING_CTRL
, DIDT_SQ_TUNING_CTRL__DIDT_TUNING_ENABLE_MASK
, DIDT_SQ_TUNING_CTRL__DIDT_TUNING_ENABLE__SHIFT
, 0x0001, POLARIS10_CONFIGREG_DIDT_IND
},
142 { ixDIDT_SQ_TUNING_CTRL
, DIDT_SQ_TUNING_CTRL__MAX_POWER_DELTA_HI_MASK
, DIDT_SQ_TUNING_CTRL__MAX_POWER_DELTA_HI__SHIFT
, 0x3853, POLARIS10_CONFIGREG_DIDT_IND
},
143 { ixDIDT_SQ_TUNING_CTRL
, DIDT_SQ_TUNING_CTRL__MAX_POWER_DELTA_LO_MASK
, DIDT_SQ_TUNING_CTRL__MAX_POWER_DELTA_LO__SHIFT
, 0x3153, POLARIS10_CONFIGREG_DIDT_IND
},
144 { ixDIDT_SQ_TUNING_CTRL
, DIDT_SQ_TUNING_CTRL__UNUSED_0_MASK
, DIDT_SQ_TUNING_CTRL__UNUSED_0__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
146 { ixDIDT_SQ_CTRL0
, DIDT_SQ_CTRL0__DIDT_CTRL_EN_MASK
, DIDT_SQ_CTRL0__DIDT_CTRL_EN__SHIFT
, 0x0001, POLARIS10_CONFIGREG_DIDT_IND
},
147 { ixDIDT_SQ_CTRL0
, DIDT_SQ_CTRL0__USE_REF_CLOCK_MASK
, DIDT_SQ_CTRL0__USE_REF_CLOCK__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
148 { ixDIDT_SQ_CTRL0
, DIDT_SQ_CTRL0__PHASE_OFFSET_MASK
, DIDT_SQ_CTRL0__PHASE_OFFSET__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
149 { ixDIDT_SQ_CTRL0
, DIDT_SQ_CTRL0__DIDT_CTRL_RST_MASK
, DIDT_SQ_CTRL0__DIDT_CTRL_RST__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
150 { ixDIDT_SQ_CTRL0
, DIDT_SQ_CTRL0__DIDT_CLK_EN_OVERRIDE_MASK
, DIDT_SQ_CTRL0__DIDT_CLK_EN_OVERRIDE__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
151 { ixDIDT_SQ_CTRL0
, DIDT_SQ_CTRL0__DIDT_MAX_STALLS_ALLOWED_HI_MASK
, DIDT_SQ_CTRL0__DIDT_MAX_STALLS_ALLOWED_HI__SHIFT
, 0x0010, POLARIS10_CONFIGREG_DIDT_IND
},
152 { ixDIDT_SQ_CTRL0
, DIDT_SQ_CTRL0__DIDT_MAX_STALLS_ALLOWED_LO_MASK
, DIDT_SQ_CTRL0__DIDT_MAX_STALLS_ALLOWED_LO__SHIFT
, 0x0010, POLARIS10_CONFIGREG_DIDT_IND
},
153 { ixDIDT_SQ_CTRL0
, DIDT_SQ_CTRL0__UNUSED_0_MASK
, DIDT_SQ_CTRL0__UNUSED_0__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
155 { ixDIDT_TD_WEIGHT0_3
, DIDT_TD_WEIGHT0_3__WEIGHT0_MASK
, DIDT_TD_WEIGHT0_3__WEIGHT0__SHIFT
, 0x000a, POLARIS10_CONFIGREG_DIDT_IND
},
156 { ixDIDT_TD_WEIGHT0_3
, DIDT_TD_WEIGHT0_3__WEIGHT1_MASK
, DIDT_TD_WEIGHT0_3__WEIGHT1__SHIFT
, 0x0010, POLARIS10_CONFIGREG_DIDT_IND
},
157 { ixDIDT_TD_WEIGHT0_3
, DIDT_TD_WEIGHT0_3__WEIGHT2_MASK
, DIDT_TD_WEIGHT0_3__WEIGHT2__SHIFT
, 0x0017, POLARIS10_CONFIGREG_DIDT_IND
},
158 { ixDIDT_TD_WEIGHT0_3
, DIDT_TD_WEIGHT0_3__WEIGHT3_MASK
, DIDT_TD_WEIGHT0_3__WEIGHT3__SHIFT
, 0x002f, POLARIS10_CONFIGREG_DIDT_IND
},
160 { ixDIDT_TD_WEIGHT4_7
, DIDT_TD_WEIGHT4_7__WEIGHT4_MASK
, DIDT_TD_WEIGHT4_7__WEIGHT4__SHIFT
, 0x0046, POLARIS10_CONFIGREG_DIDT_IND
},
161 { ixDIDT_TD_WEIGHT4_7
, DIDT_TD_WEIGHT4_7__WEIGHT5_MASK
, DIDT_TD_WEIGHT4_7__WEIGHT5__SHIFT
, 0x005d, POLARIS10_CONFIGREG_DIDT_IND
},
162 { ixDIDT_TD_WEIGHT4_7
, DIDT_TD_WEIGHT4_7__WEIGHT6_MASK
, DIDT_TD_WEIGHT4_7__WEIGHT6__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
163 { ixDIDT_TD_WEIGHT4_7
, DIDT_TD_WEIGHT4_7__WEIGHT7_MASK
, DIDT_TD_WEIGHT4_7__WEIGHT7__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
165 { ixDIDT_TD_CTRL1
, DIDT_TD_CTRL1__MIN_POWER_MASK
, DIDT_TD_CTRL1__MIN_POWER__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
166 { ixDIDT_TD_CTRL1
, DIDT_TD_CTRL1__MAX_POWER_MASK
, DIDT_TD_CTRL1__MAX_POWER__SHIFT
, 0xffff, POLARIS10_CONFIGREG_DIDT_IND
},
168 { ixDIDT_TD_CTRL_OCP
, DIDT_TD_CTRL_OCP__UNUSED_0_MASK
, DIDT_TD_CTRL_OCP__UNUSED_0__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
169 { ixDIDT_TD_CTRL_OCP
, DIDT_TD_CTRL_OCP__OCP_MAX_POWER_MASK
, DIDT_TD_CTRL_OCP__OCP_MAX_POWER__SHIFT
, 0x00ff, POLARIS10_CONFIGREG_DIDT_IND
},
171 { ixDIDT_TD_CTRL2
, DIDT_TD_CTRL2__MAX_POWER_DELTA_MASK
, DIDT_TD_CTRL2__MAX_POWER_DELTA__SHIFT
, 0x3fff, POLARIS10_CONFIGREG_DIDT_IND
},
172 { ixDIDT_TD_CTRL2
, DIDT_TD_CTRL2__UNUSED_0_MASK
, DIDT_TD_CTRL2__UNUSED_0__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
173 { ixDIDT_TD_CTRL2
, DIDT_TD_CTRL2__SHORT_TERM_INTERVAL_SIZE_MASK
, DIDT_TD_CTRL2__SHORT_TERM_INTERVAL_SIZE__SHIFT
, 0x000f, POLARIS10_CONFIGREG_DIDT_IND
},
174 { ixDIDT_TD_CTRL2
, DIDT_TD_CTRL2__UNUSED_1_MASK
, DIDT_TD_CTRL2__UNUSED_1__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
175 { ixDIDT_TD_CTRL2
, DIDT_TD_CTRL2__LONG_TERM_INTERVAL_RATIO_MASK
, DIDT_TD_CTRL2__LONG_TERM_INTERVAL_RATIO__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
176 { ixDIDT_TD_CTRL2
, DIDT_TD_CTRL2__UNUSED_2_MASK
, DIDT_TD_CTRL2__UNUSED_2__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
178 { ixDIDT_TD_STALL_CTRL
, DIDT_TD_STALL_CTRL__DIDT_STALL_CTRL_ENABLE_MASK
, DIDT_TD_STALL_CTRL__DIDT_STALL_CTRL_ENABLE__SHIFT
, 0x0001, POLARIS10_CONFIGREG_DIDT_IND
},
179 { ixDIDT_TD_STALL_CTRL
, DIDT_TD_STALL_CTRL__DIDT_STALL_DELAY_HI_MASK
, DIDT_TD_STALL_CTRL__DIDT_STALL_DELAY_HI__SHIFT
, 0x0001, POLARIS10_CONFIGREG_DIDT_IND
},
180 { ixDIDT_TD_STALL_CTRL
, DIDT_TD_STALL_CTRL__DIDT_STALL_DELAY_LO_MASK
, DIDT_TD_STALL_CTRL__DIDT_STALL_DELAY_LO__SHIFT
, 0x0001, POLARIS10_CONFIGREG_DIDT_IND
},
181 { ixDIDT_TD_STALL_CTRL
, DIDT_TD_STALL_CTRL__DIDT_HI_POWER_THRESHOLD_MASK
, DIDT_TD_STALL_CTRL__DIDT_HI_POWER_THRESHOLD__SHIFT
, 0x01aa, POLARIS10_CONFIGREG_DIDT_IND
},
182 { ixDIDT_TD_STALL_CTRL
, DIDT_TD_STALL_CTRL__UNUSED_0_MASK
, DIDT_TD_STALL_CTRL__UNUSED_0__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
184 { ixDIDT_TD_TUNING_CTRL
, DIDT_TD_TUNING_CTRL__DIDT_TUNING_ENABLE_MASK
, DIDT_TD_TUNING_CTRL__DIDT_TUNING_ENABLE__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
185 { ixDIDT_TD_TUNING_CTRL
, DIDT_TD_TUNING_CTRL__MAX_POWER_DELTA_HI_MASK
, DIDT_TD_TUNING_CTRL__MAX_POWER_DELTA_HI__SHIFT
, 0x0dde, POLARIS10_CONFIGREG_DIDT_IND
},
186 { ixDIDT_TD_TUNING_CTRL
, DIDT_TD_TUNING_CTRL__MAX_POWER_DELTA_LO_MASK
, DIDT_TD_TUNING_CTRL__MAX_POWER_DELTA_LO__SHIFT
, 0x0dde, POLARIS10_CONFIGREG_DIDT_IND
},
187 { ixDIDT_TD_TUNING_CTRL
, DIDT_TD_TUNING_CTRL__UNUSED_0_MASK
, DIDT_TD_TUNING_CTRL__UNUSED_0__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
189 { ixDIDT_TD_CTRL0
, DIDT_TD_CTRL0__DIDT_CTRL_EN_MASK
, DIDT_TD_CTRL0__DIDT_CTRL_EN__SHIFT
, 0x0001, POLARIS10_CONFIGREG_DIDT_IND
},
190 { ixDIDT_TD_CTRL0
, DIDT_TD_CTRL0__USE_REF_CLOCK_MASK
, DIDT_TD_CTRL0__USE_REF_CLOCK__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
191 { ixDIDT_TD_CTRL0
, DIDT_TD_CTRL0__PHASE_OFFSET_MASK
, DIDT_TD_CTRL0__PHASE_OFFSET__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
192 { ixDIDT_TD_CTRL0
, DIDT_TD_CTRL0__DIDT_CTRL_RST_MASK
, DIDT_TD_CTRL0__DIDT_CTRL_RST__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
193 { ixDIDT_TD_CTRL0
, DIDT_TD_CTRL0__DIDT_CLK_EN_OVERRIDE_MASK
, DIDT_TD_CTRL0__DIDT_CLK_EN_OVERRIDE__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
194 { ixDIDT_TD_CTRL0
, DIDT_TD_CTRL0__DIDT_MAX_STALLS_ALLOWED_HI_MASK
, DIDT_TD_CTRL0__DIDT_MAX_STALLS_ALLOWED_HI__SHIFT
, 0x0009, POLARIS10_CONFIGREG_DIDT_IND
},
195 { ixDIDT_TD_CTRL0
, DIDT_TD_CTRL0__DIDT_MAX_STALLS_ALLOWED_LO_MASK
, DIDT_TD_CTRL0__DIDT_MAX_STALLS_ALLOWED_LO__SHIFT
, 0x0009, POLARIS10_CONFIGREG_DIDT_IND
},
196 { ixDIDT_TD_CTRL0
, DIDT_TD_CTRL0__UNUSED_0_MASK
, DIDT_TD_CTRL0__UNUSED_0__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
198 { ixDIDT_TCP_WEIGHT0_3
, DIDT_TCP_WEIGHT0_3__WEIGHT0_MASK
, DIDT_TCP_WEIGHT0_3__WEIGHT0__SHIFT
, 0x0004, POLARIS10_CONFIGREG_DIDT_IND
},
199 { ixDIDT_TCP_WEIGHT0_3
, DIDT_TCP_WEIGHT0_3__WEIGHT1_MASK
, DIDT_TCP_WEIGHT0_3__WEIGHT1__SHIFT
, 0x0037, POLARIS10_CONFIGREG_DIDT_IND
},
200 { ixDIDT_TCP_WEIGHT0_3
, DIDT_TCP_WEIGHT0_3__WEIGHT2_MASK
, DIDT_TCP_WEIGHT0_3__WEIGHT2__SHIFT
, 0x0001, POLARIS10_CONFIGREG_DIDT_IND
},
201 { ixDIDT_TCP_WEIGHT0_3
, DIDT_TCP_WEIGHT0_3__WEIGHT3_MASK
, DIDT_TCP_WEIGHT0_3__WEIGHT3__SHIFT
, 0x00ff, POLARIS10_CONFIGREG_DIDT_IND
},
203 { ixDIDT_TCP_WEIGHT4_7
, DIDT_TCP_WEIGHT4_7__WEIGHT4_MASK
, DIDT_TCP_WEIGHT4_7__WEIGHT4__SHIFT
, 0x0054, POLARIS10_CONFIGREG_DIDT_IND
},
204 { ixDIDT_TCP_WEIGHT4_7
, DIDT_TCP_WEIGHT4_7__WEIGHT5_MASK
, DIDT_TCP_WEIGHT4_7__WEIGHT5__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
205 { ixDIDT_TCP_WEIGHT4_7
, DIDT_TCP_WEIGHT4_7__WEIGHT6_MASK
, DIDT_TCP_WEIGHT4_7__WEIGHT6__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
206 { ixDIDT_TCP_WEIGHT4_7
, DIDT_TCP_WEIGHT4_7__WEIGHT7_MASK
, DIDT_TCP_WEIGHT4_7__WEIGHT7__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
208 { ixDIDT_TCP_CTRL1
, DIDT_TCP_CTRL1__MIN_POWER_MASK
, DIDT_TCP_CTRL1__MIN_POWER__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
209 { ixDIDT_TCP_CTRL1
, DIDT_TCP_CTRL1__MAX_POWER_MASK
, DIDT_TCP_CTRL1__MAX_POWER__SHIFT
, 0xffff, POLARIS10_CONFIGREG_DIDT_IND
},
211 { ixDIDT_TCP_CTRL_OCP
, DIDT_TCP_CTRL_OCP__UNUSED_0_MASK
, DIDT_TCP_CTRL_OCP__UNUSED_0__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
212 { ixDIDT_TCP_CTRL_OCP
, DIDT_TCP_CTRL_OCP__OCP_MAX_POWER_MASK
, DIDT_TCP_CTRL_OCP__OCP_MAX_POWER__SHIFT
, 0xffff, POLARIS10_CONFIGREG_DIDT_IND
},
214 { ixDIDT_TCP_CTRL2
, DIDT_TCP_CTRL2__MAX_POWER_DELTA_MASK
, DIDT_TCP_CTRL2__MAX_POWER_DELTA__SHIFT
, 0x3dde, POLARIS10_CONFIGREG_DIDT_IND
},
215 { ixDIDT_TCP_CTRL2
, DIDT_TCP_CTRL2__UNUSED_0_MASK
, DIDT_TCP_CTRL2__UNUSED_0__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
216 { ixDIDT_TCP_CTRL2
, DIDT_TCP_CTRL2__SHORT_TERM_INTERVAL_SIZE_MASK
, DIDT_TCP_CTRL2__SHORT_TERM_INTERVAL_SIZE__SHIFT
, 0x0032, POLARIS10_CONFIGREG_DIDT_IND
},
217 { ixDIDT_TCP_CTRL2
, DIDT_TCP_CTRL2__UNUSED_1_MASK
, DIDT_TCP_CTRL2__UNUSED_1__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
218 { ixDIDT_TCP_CTRL2
, DIDT_TCP_CTRL2__LONG_TERM_INTERVAL_RATIO_MASK
, DIDT_TCP_CTRL2__LONG_TERM_INTERVAL_RATIO__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
219 { ixDIDT_TCP_CTRL2
, DIDT_TCP_CTRL2__UNUSED_2_MASK
, DIDT_TCP_CTRL2__UNUSED_2__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
221 { ixDIDT_TCP_STALL_CTRL
, DIDT_TCP_STALL_CTRL__DIDT_STALL_CTRL_ENABLE_MASK
, DIDT_TCP_STALL_CTRL__DIDT_STALL_CTRL_ENABLE__SHIFT
, 0x0001, POLARIS10_CONFIGREG_DIDT_IND
},
222 { ixDIDT_TCP_STALL_CTRL
, DIDT_TCP_STALL_CTRL__DIDT_STALL_DELAY_HI_MASK
, DIDT_TCP_STALL_CTRL__DIDT_STALL_DELAY_HI__SHIFT
, 0x0001, POLARIS10_CONFIGREG_DIDT_IND
},
223 { ixDIDT_TCP_STALL_CTRL
, DIDT_TCP_STALL_CTRL__DIDT_STALL_DELAY_LO_MASK
, DIDT_TCP_STALL_CTRL__DIDT_STALL_DELAY_LO__SHIFT
, 0x0001, POLARIS10_CONFIGREG_DIDT_IND
},
224 { ixDIDT_TCP_STALL_CTRL
, DIDT_TCP_STALL_CTRL__DIDT_HI_POWER_THRESHOLD_MASK
, DIDT_TCP_STALL_CTRL__DIDT_HI_POWER_THRESHOLD__SHIFT
, 0x01aa, POLARIS10_CONFIGREG_DIDT_IND
},
225 { ixDIDT_TCP_STALL_CTRL
, DIDT_TCP_STALL_CTRL__UNUSED_0_MASK
, DIDT_TCP_STALL_CTRL__UNUSED_0__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
227 { ixDIDT_TCP_TUNING_CTRL
, DIDT_TCP_TUNING_CTRL__DIDT_TUNING_ENABLE_MASK
, DIDT_TCP_TUNING_CTRL__DIDT_TUNING_ENABLE__SHIFT
, 0x0001, POLARIS10_CONFIGREG_DIDT_IND
},
228 { ixDIDT_TCP_TUNING_CTRL
, DIDT_TCP_TUNING_CTRL__MAX_POWER_DELTA_HI_MASK
, DIDT_TCP_TUNING_CTRL__MAX_POWER_DELTA_HI__SHIFT
, 0x3dde, POLARIS10_CONFIGREG_DIDT_IND
},
229 { ixDIDT_TCP_TUNING_CTRL
, DIDT_TCP_TUNING_CTRL__MAX_POWER_DELTA_LO_MASK
, DIDT_TCP_TUNING_CTRL__MAX_POWER_DELTA_LO__SHIFT
, 0x3dde, POLARIS10_CONFIGREG_DIDT_IND
},
230 { ixDIDT_TCP_TUNING_CTRL
, DIDT_TCP_TUNING_CTRL__UNUSED_0_MASK
, DIDT_TCP_TUNING_CTRL__UNUSED_0__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
232 { ixDIDT_TCP_CTRL0
, DIDT_TCP_CTRL0__DIDT_CTRL_EN_MASK
, DIDT_TCP_CTRL0__DIDT_CTRL_EN__SHIFT
, 0x0001, POLARIS10_CONFIGREG_DIDT_IND
},
233 { ixDIDT_TCP_CTRL0
, DIDT_TCP_CTRL0__USE_REF_CLOCK_MASK
, DIDT_TCP_CTRL0__USE_REF_CLOCK__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
234 { ixDIDT_TCP_CTRL0
, DIDT_TCP_CTRL0__PHASE_OFFSET_MASK
, DIDT_TCP_CTRL0__PHASE_OFFSET__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
235 { ixDIDT_TCP_CTRL0
, DIDT_TCP_CTRL0__DIDT_CTRL_RST_MASK
, DIDT_TCP_CTRL0__DIDT_CTRL_RST__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
236 { ixDIDT_TCP_CTRL0
, DIDT_TCP_CTRL0__DIDT_CLK_EN_OVERRIDE_MASK
, DIDT_TCP_CTRL0__DIDT_CLK_EN_OVERRIDE__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
237 { ixDIDT_TCP_CTRL0
, DIDT_TCP_CTRL0__DIDT_MAX_STALLS_ALLOWED_HI_MASK
, DIDT_TCP_CTRL0__DIDT_MAX_STALLS_ALLOWED_HI__SHIFT
, 0x0010, POLARIS10_CONFIGREG_DIDT_IND
},
238 { ixDIDT_TCP_CTRL0
, DIDT_TCP_CTRL0__DIDT_MAX_STALLS_ALLOWED_LO_MASK
, DIDT_TCP_CTRL0__DIDT_MAX_STALLS_ALLOWED_LO__SHIFT
, 0x0010, POLARIS10_CONFIGREG_DIDT_IND
},
239 { ixDIDT_TCP_CTRL0
, DIDT_TCP_CTRL0__UNUSED_0_MASK
, DIDT_TCP_CTRL0__UNUSED_0__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
244 struct polaris10_pt_config_reg DIDTConfig_Polaris11
[] = {
245 /* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
246 * Offset Mask Shift Value Type
247 * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
249 { ixDIDT_SQ_WEIGHT0_3
, DIDT_SQ_WEIGHT0_3__WEIGHT0_MASK
, DIDT_SQ_WEIGHT0_3__WEIGHT0__SHIFT
, 0x0073, POLARIS10_CONFIGREG_DIDT_IND
},
250 { ixDIDT_SQ_WEIGHT0_3
, DIDT_SQ_WEIGHT0_3__WEIGHT1_MASK
, DIDT_SQ_WEIGHT0_3__WEIGHT1__SHIFT
, 0x00ab, POLARIS10_CONFIGREG_DIDT_IND
},
251 { ixDIDT_SQ_WEIGHT0_3
, DIDT_SQ_WEIGHT0_3__WEIGHT2_MASK
, DIDT_SQ_WEIGHT0_3__WEIGHT2__SHIFT
, 0x0084, POLARIS10_CONFIGREG_DIDT_IND
},
252 { ixDIDT_SQ_WEIGHT0_3
, DIDT_SQ_WEIGHT0_3__WEIGHT3_MASK
, DIDT_SQ_WEIGHT0_3__WEIGHT3__SHIFT
, 0x005a, POLARIS10_CONFIGREG_DIDT_IND
},
254 { ixDIDT_SQ_WEIGHT4_7
, DIDT_SQ_WEIGHT4_7__WEIGHT4_MASK
, DIDT_SQ_WEIGHT4_7__WEIGHT4__SHIFT
, 0x0067, POLARIS10_CONFIGREG_DIDT_IND
},
255 { ixDIDT_SQ_WEIGHT4_7
, DIDT_SQ_WEIGHT4_7__WEIGHT5_MASK
, DIDT_SQ_WEIGHT4_7__WEIGHT5__SHIFT
, 0x0084, POLARIS10_CONFIGREG_DIDT_IND
},
256 { ixDIDT_SQ_WEIGHT4_7
, DIDT_SQ_WEIGHT4_7__WEIGHT6_MASK
, DIDT_SQ_WEIGHT4_7__WEIGHT6__SHIFT
, 0x0027, POLARIS10_CONFIGREG_DIDT_IND
},
257 { ixDIDT_SQ_WEIGHT4_7
, DIDT_SQ_WEIGHT4_7__WEIGHT7_MASK
, DIDT_SQ_WEIGHT4_7__WEIGHT7__SHIFT
, 0x0046, POLARIS10_CONFIGREG_DIDT_IND
},
259 { ixDIDT_SQ_WEIGHT8_11
, DIDT_SQ_WEIGHT8_11__WEIGHT8_MASK
, DIDT_SQ_WEIGHT8_11__WEIGHT8__SHIFT
, 0x00aa, POLARIS10_CONFIGREG_DIDT_IND
},
260 { ixDIDT_SQ_WEIGHT8_11
, DIDT_SQ_WEIGHT8_11__WEIGHT9_MASK
, DIDT_SQ_WEIGHT8_11__WEIGHT9__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
261 { ixDIDT_SQ_WEIGHT8_11
, DIDT_SQ_WEIGHT8_11__WEIGHT10_MASK
, DIDT_SQ_WEIGHT8_11__WEIGHT10__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
262 { ixDIDT_SQ_WEIGHT8_11
, DIDT_SQ_WEIGHT8_11__WEIGHT11_MASK
, DIDT_SQ_WEIGHT8_11__WEIGHT11__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
264 { ixDIDT_SQ_CTRL1
, DIDT_SQ_CTRL1__MIN_POWER_MASK
, DIDT_SQ_CTRL1__MIN_POWER__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
265 { ixDIDT_SQ_CTRL1
, DIDT_SQ_CTRL1__MAX_POWER_MASK
, DIDT_SQ_CTRL1__MAX_POWER__SHIFT
, 0xffff, POLARIS10_CONFIGREG_DIDT_IND
},
267 { ixDIDT_SQ_CTRL_OCP
, DIDT_SQ_CTRL_OCP__UNUSED_0_MASK
, DIDT_SQ_CTRL_OCP__UNUSED_0__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
268 { ixDIDT_SQ_CTRL_OCP
, DIDT_SQ_CTRL_OCP__OCP_MAX_POWER_MASK
, DIDT_SQ_CTRL_OCP__OCP_MAX_POWER__SHIFT
, 0xffff, POLARIS10_CONFIGREG_DIDT_IND
},
270 { ixDIDT_SQ_CTRL2
, DIDT_SQ_CTRL2__MAX_POWER_DELTA_MASK
, DIDT_SQ_CTRL2__MAX_POWER_DELTA__SHIFT
, 0x3853, POLARIS10_CONFIGREG_DIDT_IND
},
271 { ixDIDT_SQ_CTRL2
, DIDT_SQ_CTRL2__UNUSED_0_MASK
, DIDT_SQ_CTRL2__UNUSED_0__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
272 { ixDIDT_SQ_CTRL2
, DIDT_SQ_CTRL2__SHORT_TERM_INTERVAL_SIZE_MASK
, DIDT_SQ_CTRL2__SHORT_TERM_INTERVAL_SIZE__SHIFT
, 0x005a, POLARIS10_CONFIGREG_DIDT_IND
},
273 { ixDIDT_SQ_CTRL2
, DIDT_SQ_CTRL2__UNUSED_1_MASK
, DIDT_SQ_CTRL2__UNUSED_1__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
274 { ixDIDT_SQ_CTRL2
, DIDT_SQ_CTRL2__LONG_TERM_INTERVAL_RATIO_MASK
, DIDT_SQ_CTRL2__LONG_TERM_INTERVAL_RATIO__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
275 { ixDIDT_SQ_CTRL2
, DIDT_SQ_CTRL2__UNUSED_2_MASK
, DIDT_SQ_CTRL2__UNUSED_2__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
277 { ixDIDT_SQ_STALL_CTRL
, DIDT_SQ_STALL_CTRL__DIDT_STALL_CTRL_ENABLE_MASK
, DIDT_SQ_STALL_CTRL__DIDT_STALL_CTRL_ENABLE__SHIFT
, 0x0001, POLARIS10_CONFIGREG_DIDT_IND
},
278 { ixDIDT_SQ_STALL_CTRL
, DIDT_SQ_STALL_CTRL__DIDT_STALL_DELAY_HI_MASK
, DIDT_SQ_STALL_CTRL__DIDT_STALL_DELAY_HI__SHIFT
, 0x0001, POLARIS10_CONFIGREG_DIDT_IND
},
279 { ixDIDT_SQ_STALL_CTRL
, DIDT_SQ_STALL_CTRL__DIDT_STALL_DELAY_LO_MASK
, DIDT_SQ_STALL_CTRL__DIDT_STALL_DELAY_LO__SHIFT
, 0x0001, POLARIS10_CONFIGREG_DIDT_IND
},
280 { ixDIDT_SQ_STALL_CTRL
, DIDT_SQ_STALL_CTRL__DIDT_HI_POWER_THRESHOLD_MASK
, DIDT_SQ_STALL_CTRL__DIDT_HI_POWER_THRESHOLD__SHIFT
, 0x0ebb, POLARIS10_CONFIGREG_DIDT_IND
},
281 { ixDIDT_SQ_STALL_CTRL
, DIDT_SQ_STALL_CTRL__UNUSED_0_MASK
, DIDT_SQ_STALL_CTRL__UNUSED_0__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
283 { ixDIDT_SQ_TUNING_CTRL
, DIDT_SQ_TUNING_CTRL__DIDT_TUNING_ENABLE_MASK
, DIDT_SQ_TUNING_CTRL__DIDT_TUNING_ENABLE__SHIFT
, 0x0001, POLARIS10_CONFIGREG_DIDT_IND
},
284 { ixDIDT_SQ_TUNING_CTRL
, DIDT_SQ_TUNING_CTRL__MAX_POWER_DELTA_HI_MASK
, DIDT_SQ_TUNING_CTRL__MAX_POWER_DELTA_HI__SHIFT
, 0x3853, POLARIS10_CONFIGREG_DIDT_IND
},
285 { ixDIDT_SQ_TUNING_CTRL
, DIDT_SQ_TUNING_CTRL__MAX_POWER_DELTA_LO_MASK
, DIDT_SQ_TUNING_CTRL__MAX_POWER_DELTA_LO__SHIFT
, 0x3153, POLARIS10_CONFIGREG_DIDT_IND
},
286 { ixDIDT_SQ_TUNING_CTRL
, DIDT_SQ_TUNING_CTRL__UNUSED_0_MASK
, DIDT_SQ_TUNING_CTRL__UNUSED_0__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
288 { ixDIDT_SQ_CTRL0
, DIDT_SQ_CTRL0__DIDT_CTRL_EN_MASK
, DIDT_SQ_CTRL0__DIDT_CTRL_EN__SHIFT
, 0x0001, POLARIS10_CONFIGREG_DIDT_IND
},
289 { ixDIDT_SQ_CTRL0
, DIDT_SQ_CTRL0__USE_REF_CLOCK_MASK
, DIDT_SQ_CTRL0__USE_REF_CLOCK__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
290 { ixDIDT_SQ_CTRL0
, DIDT_SQ_CTRL0__PHASE_OFFSET_MASK
, DIDT_SQ_CTRL0__PHASE_OFFSET__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
291 { ixDIDT_SQ_CTRL0
, DIDT_SQ_CTRL0__DIDT_CTRL_RST_MASK
, DIDT_SQ_CTRL0__DIDT_CTRL_RST__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
292 { ixDIDT_SQ_CTRL0
, DIDT_SQ_CTRL0__DIDT_CLK_EN_OVERRIDE_MASK
, DIDT_SQ_CTRL0__DIDT_CLK_EN_OVERRIDE__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
293 { ixDIDT_SQ_CTRL0
, DIDT_SQ_CTRL0__DIDT_MAX_STALLS_ALLOWED_HI_MASK
, DIDT_SQ_CTRL0__DIDT_MAX_STALLS_ALLOWED_HI__SHIFT
, 0x0010, POLARIS10_CONFIGREG_DIDT_IND
},
294 { ixDIDT_SQ_CTRL0
, DIDT_SQ_CTRL0__DIDT_MAX_STALLS_ALLOWED_LO_MASK
, DIDT_SQ_CTRL0__DIDT_MAX_STALLS_ALLOWED_LO__SHIFT
, 0x0010, POLARIS10_CONFIGREG_DIDT_IND
},
295 { ixDIDT_SQ_CTRL0
, DIDT_SQ_CTRL0__UNUSED_0_MASK
, DIDT_SQ_CTRL0__UNUSED_0__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
297 { ixDIDT_TD_WEIGHT0_3
, DIDT_TD_WEIGHT0_3__WEIGHT0_MASK
, DIDT_TD_WEIGHT0_3__WEIGHT0__SHIFT
, 0x000a, POLARIS10_CONFIGREG_DIDT_IND
},
298 { ixDIDT_TD_WEIGHT0_3
, DIDT_TD_WEIGHT0_3__WEIGHT1_MASK
, DIDT_TD_WEIGHT0_3__WEIGHT1__SHIFT
, 0x0010, POLARIS10_CONFIGREG_DIDT_IND
},
299 { ixDIDT_TD_WEIGHT0_3
, DIDT_TD_WEIGHT0_3__WEIGHT2_MASK
, DIDT_TD_WEIGHT0_3__WEIGHT2__SHIFT
, 0x0017, POLARIS10_CONFIGREG_DIDT_IND
},
300 { ixDIDT_TD_WEIGHT0_3
, DIDT_TD_WEIGHT0_3__WEIGHT3_MASK
, DIDT_TD_WEIGHT0_3__WEIGHT3__SHIFT
, 0x002f, POLARIS10_CONFIGREG_DIDT_IND
},
302 { ixDIDT_TD_WEIGHT4_7
, DIDT_TD_WEIGHT4_7__WEIGHT4_MASK
, DIDT_TD_WEIGHT4_7__WEIGHT4__SHIFT
, 0x0046, POLARIS10_CONFIGREG_DIDT_IND
},
303 { ixDIDT_TD_WEIGHT4_7
, DIDT_TD_WEIGHT4_7__WEIGHT5_MASK
, DIDT_TD_WEIGHT4_7__WEIGHT5__SHIFT
, 0x005d, POLARIS10_CONFIGREG_DIDT_IND
},
304 { ixDIDT_TD_WEIGHT4_7
, DIDT_TD_WEIGHT4_7__WEIGHT6_MASK
, DIDT_TD_WEIGHT4_7__WEIGHT6__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
305 { ixDIDT_TD_WEIGHT4_7
, DIDT_TD_WEIGHT4_7__WEIGHT7_MASK
, DIDT_TD_WEIGHT4_7__WEIGHT7__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
307 { ixDIDT_TD_CTRL1
, DIDT_TD_CTRL1__MIN_POWER_MASK
, DIDT_TD_CTRL1__MIN_POWER__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
308 { ixDIDT_TD_CTRL1
, DIDT_TD_CTRL1__MAX_POWER_MASK
, DIDT_TD_CTRL1__MAX_POWER__SHIFT
, 0xffff, POLARIS10_CONFIGREG_DIDT_IND
},
310 { ixDIDT_TD_CTRL_OCP
, DIDT_TD_CTRL_OCP__UNUSED_0_MASK
, DIDT_TD_CTRL_OCP__UNUSED_0__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
311 { ixDIDT_TD_CTRL_OCP
, DIDT_TD_CTRL_OCP__OCP_MAX_POWER_MASK
, DIDT_TD_CTRL_OCP__OCP_MAX_POWER__SHIFT
, 0x00ff, POLARIS10_CONFIGREG_DIDT_IND
},
313 { ixDIDT_TD_CTRL2
, DIDT_TD_CTRL2__MAX_POWER_DELTA_MASK
, DIDT_TD_CTRL2__MAX_POWER_DELTA__SHIFT
, 0x3fff, POLARIS10_CONFIGREG_DIDT_IND
},
314 { ixDIDT_TD_CTRL2
, DIDT_TD_CTRL2__UNUSED_0_MASK
, DIDT_TD_CTRL2__UNUSED_0__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
315 { ixDIDT_TD_CTRL2
, DIDT_TD_CTRL2__SHORT_TERM_INTERVAL_SIZE_MASK
, DIDT_TD_CTRL2__SHORT_TERM_INTERVAL_SIZE__SHIFT
, 0x000f, POLARIS10_CONFIGREG_DIDT_IND
},
316 { ixDIDT_TD_CTRL2
, DIDT_TD_CTRL2__UNUSED_1_MASK
, DIDT_TD_CTRL2__UNUSED_1__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
317 { ixDIDT_TD_CTRL2
, DIDT_TD_CTRL2__LONG_TERM_INTERVAL_RATIO_MASK
, DIDT_TD_CTRL2__LONG_TERM_INTERVAL_RATIO__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
318 { ixDIDT_TD_CTRL2
, DIDT_TD_CTRL2__UNUSED_2_MASK
, DIDT_TD_CTRL2__UNUSED_2__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
320 { ixDIDT_TD_STALL_CTRL
, DIDT_TD_STALL_CTRL__DIDT_STALL_CTRL_ENABLE_MASK
, DIDT_TD_STALL_CTRL__DIDT_STALL_CTRL_ENABLE__SHIFT
, 0x0001, POLARIS10_CONFIGREG_DIDT_IND
},
321 { ixDIDT_TD_STALL_CTRL
, DIDT_TD_STALL_CTRL__DIDT_STALL_DELAY_HI_MASK
, DIDT_TD_STALL_CTRL__DIDT_STALL_DELAY_HI__SHIFT
, 0x0001, POLARIS10_CONFIGREG_DIDT_IND
},
322 { ixDIDT_TD_STALL_CTRL
, DIDT_TD_STALL_CTRL__DIDT_STALL_DELAY_LO_MASK
, DIDT_TD_STALL_CTRL__DIDT_STALL_DELAY_LO__SHIFT
, 0x0001, POLARIS10_CONFIGREG_DIDT_IND
},
323 { ixDIDT_TD_STALL_CTRL
, DIDT_TD_STALL_CTRL__DIDT_HI_POWER_THRESHOLD_MASK
, DIDT_TD_STALL_CTRL__DIDT_HI_POWER_THRESHOLD__SHIFT
, 0x01aa, POLARIS10_CONFIGREG_DIDT_IND
},
324 { ixDIDT_TD_STALL_CTRL
, DIDT_TD_STALL_CTRL__UNUSED_0_MASK
, DIDT_TD_STALL_CTRL__UNUSED_0__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
326 { ixDIDT_TD_TUNING_CTRL
, DIDT_TD_TUNING_CTRL__DIDT_TUNING_ENABLE_MASK
, DIDT_TD_TUNING_CTRL__DIDT_TUNING_ENABLE__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
327 { ixDIDT_TD_TUNING_CTRL
, DIDT_TD_TUNING_CTRL__MAX_POWER_DELTA_HI_MASK
, DIDT_TD_TUNING_CTRL__MAX_POWER_DELTA_HI__SHIFT
, 0x0dde, POLARIS10_CONFIGREG_DIDT_IND
},
328 { ixDIDT_TD_TUNING_CTRL
, DIDT_TD_TUNING_CTRL__MAX_POWER_DELTA_LO_MASK
, DIDT_TD_TUNING_CTRL__MAX_POWER_DELTA_LO__SHIFT
, 0x0dde, POLARIS10_CONFIGREG_DIDT_IND
},
329 { ixDIDT_TD_TUNING_CTRL
, DIDT_TD_TUNING_CTRL__UNUSED_0_MASK
, DIDT_TD_TUNING_CTRL__UNUSED_0__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
331 { ixDIDT_TD_CTRL0
, DIDT_TD_CTRL0__DIDT_CTRL_EN_MASK
, DIDT_TD_CTRL0__DIDT_CTRL_EN__SHIFT
, 0x0001, POLARIS10_CONFIGREG_DIDT_IND
},
332 { ixDIDT_TD_CTRL0
, DIDT_TD_CTRL0__USE_REF_CLOCK_MASK
, DIDT_TD_CTRL0__USE_REF_CLOCK__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
333 { ixDIDT_TD_CTRL0
, DIDT_TD_CTRL0__PHASE_OFFSET_MASK
, DIDT_TD_CTRL0__PHASE_OFFSET__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
334 { ixDIDT_TD_CTRL0
, DIDT_TD_CTRL0__DIDT_CTRL_RST_MASK
, DIDT_TD_CTRL0__DIDT_CTRL_RST__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
335 { ixDIDT_TD_CTRL0
, DIDT_TD_CTRL0__DIDT_CLK_EN_OVERRIDE_MASK
, DIDT_TD_CTRL0__DIDT_CLK_EN_OVERRIDE__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
336 { ixDIDT_TD_CTRL0
, DIDT_TD_CTRL0__DIDT_MAX_STALLS_ALLOWED_HI_MASK
, DIDT_TD_CTRL0__DIDT_MAX_STALLS_ALLOWED_HI__SHIFT
, 0x0008, POLARIS10_CONFIGREG_DIDT_IND
},
337 { ixDIDT_TD_CTRL0
, DIDT_TD_CTRL0__DIDT_MAX_STALLS_ALLOWED_LO_MASK
, DIDT_TD_CTRL0__DIDT_MAX_STALLS_ALLOWED_LO__SHIFT
, 0x0008, POLARIS10_CONFIGREG_DIDT_IND
},
338 { ixDIDT_TD_CTRL0
, DIDT_TD_CTRL0__UNUSED_0_MASK
, DIDT_TD_CTRL0__UNUSED_0__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
340 { ixDIDT_TCP_WEIGHT0_3
, DIDT_TCP_WEIGHT0_3__WEIGHT0_MASK
, DIDT_TCP_WEIGHT0_3__WEIGHT0__SHIFT
, 0x0004, POLARIS10_CONFIGREG_DIDT_IND
},
341 { ixDIDT_TCP_WEIGHT0_3
, DIDT_TCP_WEIGHT0_3__WEIGHT1_MASK
, DIDT_TCP_WEIGHT0_3__WEIGHT1__SHIFT
, 0x0037, POLARIS10_CONFIGREG_DIDT_IND
},
342 { ixDIDT_TCP_WEIGHT0_3
, DIDT_TCP_WEIGHT0_3__WEIGHT2_MASK
, DIDT_TCP_WEIGHT0_3__WEIGHT2__SHIFT
, 0x0001, POLARIS10_CONFIGREG_DIDT_IND
},
343 { ixDIDT_TCP_WEIGHT0_3
, DIDT_TCP_WEIGHT0_3__WEIGHT3_MASK
, DIDT_TCP_WEIGHT0_3__WEIGHT3__SHIFT
, 0x00ff, POLARIS10_CONFIGREG_DIDT_IND
},
345 { ixDIDT_TCP_WEIGHT4_7
, DIDT_TCP_WEIGHT4_7__WEIGHT4_MASK
, DIDT_TCP_WEIGHT4_7__WEIGHT4__SHIFT
, 0x0054, POLARIS10_CONFIGREG_DIDT_IND
},
346 { ixDIDT_TCP_WEIGHT4_7
, DIDT_TCP_WEIGHT4_7__WEIGHT5_MASK
, DIDT_TCP_WEIGHT4_7__WEIGHT5__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
347 { ixDIDT_TCP_WEIGHT4_7
, DIDT_TCP_WEIGHT4_7__WEIGHT6_MASK
, DIDT_TCP_WEIGHT4_7__WEIGHT6__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
348 { ixDIDT_TCP_WEIGHT4_7
, DIDT_TCP_WEIGHT4_7__WEIGHT7_MASK
, DIDT_TCP_WEIGHT4_7__WEIGHT7__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
350 { ixDIDT_TCP_CTRL1
, DIDT_TCP_CTRL1__MIN_POWER_MASK
, DIDT_TCP_CTRL1__MIN_POWER__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
351 { ixDIDT_TCP_CTRL1
, DIDT_TCP_CTRL1__MAX_POWER_MASK
, DIDT_TCP_CTRL1__MAX_POWER__SHIFT
, 0xffff, POLARIS10_CONFIGREG_DIDT_IND
},
353 { ixDIDT_TCP_CTRL_OCP
, DIDT_TCP_CTRL_OCP__UNUSED_0_MASK
, DIDT_TCP_CTRL_OCP__UNUSED_0__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
354 { ixDIDT_TCP_CTRL_OCP
, DIDT_TCP_CTRL_OCP__OCP_MAX_POWER_MASK
, DIDT_TCP_CTRL_OCP__OCP_MAX_POWER__SHIFT
, 0xffff, POLARIS10_CONFIGREG_DIDT_IND
},
356 { ixDIDT_TCP_CTRL2
, DIDT_TCP_CTRL2__MAX_POWER_DELTA_MASK
, DIDT_TCP_CTRL2__MAX_POWER_DELTA__SHIFT
, 0x3dde, POLARIS10_CONFIGREG_DIDT_IND
},
357 { ixDIDT_TCP_CTRL2
, DIDT_TCP_CTRL2__UNUSED_0_MASK
, DIDT_TCP_CTRL2__UNUSED_0__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
358 { ixDIDT_TCP_CTRL2
, DIDT_TCP_CTRL2__SHORT_TERM_INTERVAL_SIZE_MASK
, DIDT_TCP_CTRL2__SHORT_TERM_INTERVAL_SIZE__SHIFT
, 0x0032, POLARIS10_CONFIGREG_DIDT_IND
},
359 { ixDIDT_TCP_CTRL2
, DIDT_TCP_CTRL2__UNUSED_1_MASK
, DIDT_TCP_CTRL2__UNUSED_1__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
360 { ixDIDT_TCP_CTRL2
, DIDT_TCP_CTRL2__LONG_TERM_INTERVAL_RATIO_MASK
, DIDT_TCP_CTRL2__LONG_TERM_INTERVAL_RATIO__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
361 { ixDIDT_TCP_CTRL2
, DIDT_TCP_CTRL2__UNUSED_2_MASK
, DIDT_TCP_CTRL2__UNUSED_2__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
363 { ixDIDT_TCP_STALL_CTRL
, DIDT_TCP_STALL_CTRL__DIDT_STALL_CTRL_ENABLE_MASK
, DIDT_TCP_STALL_CTRL__DIDT_STALL_CTRL_ENABLE__SHIFT
, 0x0001, POLARIS10_CONFIGREG_DIDT_IND
},
364 { ixDIDT_TCP_STALL_CTRL
, DIDT_TCP_STALL_CTRL__DIDT_STALL_DELAY_HI_MASK
, DIDT_TCP_STALL_CTRL__DIDT_STALL_DELAY_HI__SHIFT
, 0x0001, POLARIS10_CONFIGREG_DIDT_IND
},
365 { ixDIDT_TCP_STALL_CTRL
, DIDT_TCP_STALL_CTRL__DIDT_STALL_DELAY_LO_MASK
, DIDT_TCP_STALL_CTRL__DIDT_STALL_DELAY_LO__SHIFT
, 0x0001, POLARIS10_CONFIGREG_DIDT_IND
},
366 { ixDIDT_TCP_STALL_CTRL
, DIDT_TCP_STALL_CTRL__DIDT_HI_POWER_THRESHOLD_MASK
, DIDT_TCP_STALL_CTRL__DIDT_HI_POWER_THRESHOLD__SHIFT
, 0x01aa, POLARIS10_CONFIGREG_DIDT_IND
},
367 { ixDIDT_TCP_STALL_CTRL
, DIDT_TCP_STALL_CTRL__UNUSED_0_MASK
, DIDT_TCP_STALL_CTRL__UNUSED_0__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
369 { ixDIDT_TCP_TUNING_CTRL
, DIDT_TCP_TUNING_CTRL__DIDT_TUNING_ENABLE_MASK
, DIDT_TCP_TUNING_CTRL__DIDT_TUNING_ENABLE__SHIFT
, 0x0001, POLARIS10_CONFIGREG_DIDT_IND
},
370 { ixDIDT_TCP_TUNING_CTRL
, DIDT_TCP_TUNING_CTRL__MAX_POWER_DELTA_HI_MASK
, DIDT_TCP_TUNING_CTRL__MAX_POWER_DELTA_HI__SHIFT
, 0x3dde, POLARIS10_CONFIGREG_DIDT_IND
},
371 { ixDIDT_TCP_TUNING_CTRL
, DIDT_TCP_TUNING_CTRL__MAX_POWER_DELTA_LO_MASK
, DIDT_TCP_TUNING_CTRL__MAX_POWER_DELTA_LO__SHIFT
, 0x3dde, POLARIS10_CONFIGREG_DIDT_IND
},
372 { ixDIDT_TCP_TUNING_CTRL
, DIDT_TCP_TUNING_CTRL__UNUSED_0_MASK
, DIDT_TCP_TUNING_CTRL__UNUSED_0__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
374 { ixDIDT_TCP_CTRL0
, DIDT_TCP_CTRL0__DIDT_CTRL_EN_MASK
, DIDT_TCP_CTRL0__DIDT_CTRL_EN__SHIFT
, 0x0001, POLARIS10_CONFIGREG_DIDT_IND
},
375 { ixDIDT_TCP_CTRL0
, DIDT_TCP_CTRL0__USE_REF_CLOCK_MASK
, DIDT_TCP_CTRL0__USE_REF_CLOCK__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
376 { ixDIDT_TCP_CTRL0
, DIDT_TCP_CTRL0__PHASE_OFFSET_MASK
, DIDT_TCP_CTRL0__PHASE_OFFSET__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
377 { ixDIDT_TCP_CTRL0
, DIDT_TCP_CTRL0__DIDT_CTRL_RST_MASK
, DIDT_TCP_CTRL0__DIDT_CTRL_RST__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
378 { ixDIDT_TCP_CTRL0
, DIDT_TCP_CTRL0__DIDT_CLK_EN_OVERRIDE_MASK
, DIDT_TCP_CTRL0__DIDT_CLK_EN_OVERRIDE__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
379 { ixDIDT_TCP_CTRL0
, DIDT_TCP_CTRL0__DIDT_MAX_STALLS_ALLOWED_HI_MASK
, DIDT_TCP_CTRL0__DIDT_MAX_STALLS_ALLOWED_HI__SHIFT
, 0x0010, POLARIS10_CONFIGREG_DIDT_IND
},
380 { ixDIDT_TCP_CTRL0
, DIDT_TCP_CTRL0__DIDT_MAX_STALLS_ALLOWED_LO_MASK
, DIDT_TCP_CTRL0__DIDT_MAX_STALLS_ALLOWED_LO__SHIFT
, 0x0010, POLARIS10_CONFIGREG_DIDT_IND
},
381 { ixDIDT_TCP_CTRL0
, DIDT_TCP_CTRL0__UNUSED_0_MASK
, DIDT_TCP_CTRL0__UNUSED_0__SHIFT
, 0x0000, POLARIS10_CONFIGREG_DIDT_IND
},
385 static const struct polaris10_pt_defaults polaris10_power_tune_data_set_array
[POWERTUNE_DEFAULT_SET_MAX
] = {
386 /* sviLoadLIneEn, SviLoadLineVddC, TDC_VDDC_ThrottleReleaseLimitPerc, TDC_MAWt,
387 * TdcWaterfallCtl, DTEAmbientTempBase, DisplayCac, BAPM_TEMP_GRADIENT */
388 { 1, 0xF, 0xFD, 0x19, 5, 45, 0, 0xB0000,
389 { 0x79, 0x253, 0x25D, 0xAE, 0x72, 0x80, 0x83, 0x86, 0x6F, 0xC8, 0xC9, 0xC9, 0x2F, 0x4D, 0x61},
390 { 0x17C, 0x172, 0x180, 0x1BC, 0x1B3, 0x1BD, 0x206, 0x200, 0x203, 0x25D, 0x25A, 0x255, 0x2C3, 0x2C5, 0x2B4 } },
393 void polaris10_initialize_power_tune_defaults(struct pp_hwmgr
*hwmgr
)
395 struct polaris10_hwmgr
*polaris10_hwmgr
= (struct polaris10_hwmgr
*)(hwmgr
->backend
);
396 struct phm_ppt_v1_information
*table_info
=
397 (struct phm_ppt_v1_information
*)(hwmgr
->pptable
);
400 table_info
->cac_dtp_table
->usPowerTuneDataSetID
<= POWERTUNE_DEFAULT_SET_MAX
&&
401 table_info
->cac_dtp_table
->usPowerTuneDataSetID
)
402 polaris10_hwmgr
->power_tune_defaults
=
403 &polaris10_power_tune_data_set_array
404 [table_info
->cac_dtp_table
->usPowerTuneDataSetID
- 1];
406 polaris10_hwmgr
->power_tune_defaults
= &polaris10_power_tune_data_set_array
[0];
410 static uint16_t scale_fan_gain_settings(uint16_t raw_setting
)
413 tmp
= raw_setting
* 4096 / 100;
414 return (uint16_t)tmp
;
417 int polaris10_populate_bapm_parameters_in_dpm_table(struct pp_hwmgr
*hwmgr
)
419 struct polaris10_hwmgr
*data
= (struct polaris10_hwmgr
*)(hwmgr
->backend
);
420 const struct polaris10_pt_defaults
*defaults
= data
->power_tune_defaults
;
421 SMU74_Discrete_DpmTable
*dpm_table
= &(data
->smc_state_table
);
422 struct phm_ppt_v1_information
*table_info
=
423 (struct phm_ppt_v1_information
*)(hwmgr
->pptable
);
424 struct phm_cac_tdp_table
*cac_dtp_table
= table_info
->cac_dtp_table
;
425 struct pp_advance_fan_control_parameters
*fan_table
=
426 &hwmgr
->thermal_controller
.advanceFanControlParameters
;
428 const uint16_t *pdef1
;
429 const uint16_t *pdef2
;
431 dpm_table
->DefaultTdp
= PP_HOST_TO_SMC_US((uint16_t)(cac_dtp_table
->usTDP
* 128));
432 dpm_table
->TargetTdp
= PP_HOST_TO_SMC_US((uint16_t)(cac_dtp_table
->usTDP
* 128));
434 PP_ASSERT_WITH_CODE(cac_dtp_table
->usTargetOperatingTemp
<= 255,
435 "Target Operating Temp is out of Range!",
438 dpm_table
->TemperatureLimitEdge
= PP_HOST_TO_SMC_US(
439 cac_dtp_table
->usTargetOperatingTemp
* 256);
440 dpm_table
->TemperatureLimitHotspot
= PP_HOST_TO_SMC_US(
441 cac_dtp_table
->usTemperatureLimitHotspot
* 256);
442 dpm_table
->FanGainEdge
= PP_HOST_TO_SMC_US(
443 scale_fan_gain_settings(fan_table
->usFanGainEdge
));
444 dpm_table
->FanGainHotspot
= PP_HOST_TO_SMC_US(
445 scale_fan_gain_settings(fan_table
->usFanGainHotspot
));
447 pdef1
= defaults
->BAPMTI_R
;
448 pdef2
= defaults
->BAPMTI_RC
;
450 for (i
= 0; i
< SMU74_DTE_ITERATIONS
; i
++) {
451 for (j
= 0; j
< SMU74_DTE_SOURCES
; j
++) {
452 for (k
= 0; k
< SMU74_DTE_SINKS
; k
++) {
453 dpm_table
->BAPMTI_R
[i
][j
][k
] = PP_HOST_TO_SMC_US(*pdef1
);
454 dpm_table
->BAPMTI_RC
[i
][j
][k
] = PP_HOST_TO_SMC_US(*pdef2
);
464 static int polaris10_populate_svi_load_line(struct pp_hwmgr
*hwmgr
)
466 struct polaris10_hwmgr
*data
= (struct polaris10_hwmgr
*)(hwmgr
->backend
);
467 const struct polaris10_pt_defaults
*defaults
= data
->power_tune_defaults
;
469 data
->power_tune_table
.SviLoadLineEn
= defaults
->SviLoadLineEn
;
470 data
->power_tune_table
.SviLoadLineVddC
= defaults
->SviLoadLineVddC
;
471 data
->power_tune_table
.SviLoadLineTrimVddC
= 3;
472 data
->power_tune_table
.SviLoadLineOffsetVddC
= 0;
477 static int polaris10_populate_tdc_limit(struct pp_hwmgr
*hwmgr
)
480 struct polaris10_hwmgr
*data
= (struct polaris10_hwmgr
*)(hwmgr
->backend
);
481 struct phm_ppt_v1_information
*table_info
=
482 (struct phm_ppt_v1_information
*)(hwmgr
->pptable
);
483 const struct polaris10_pt_defaults
*defaults
= data
->power_tune_defaults
;
485 tdc_limit
= (uint16_t)(table_info
->cac_dtp_table
->usTDC
* 128);
486 data
->power_tune_table
.TDC_VDDC_PkgLimit
=
487 CONVERT_FROM_HOST_TO_SMC_US(tdc_limit
);
488 data
->power_tune_table
.TDC_VDDC_ThrottleReleaseLimitPerc
=
489 defaults
->TDC_VDDC_ThrottleReleaseLimitPerc
;
490 data
->power_tune_table
.TDC_MAWt
= defaults
->TDC_MAWt
;
495 static int polaris10_populate_dw8(struct pp_hwmgr
*hwmgr
, uint32_t fuse_table_offset
)
497 struct polaris10_hwmgr
*data
= (struct polaris10_hwmgr
*)(hwmgr
->backend
);
498 const struct polaris10_pt_defaults
*defaults
= data
->power_tune_defaults
;
501 if (polaris10_read_smc_sram_dword(hwmgr
->smumgr
,
503 offsetof(SMU74_Discrete_PmFuses
, TdcWaterfallCtl
),
504 (uint32_t *)&temp
, data
->sram_end
))
505 PP_ASSERT_WITH_CODE(false,
506 "Attempt to read PmFuses.DW6 (SviLoadLineEn) from SMC Failed!",
509 data
->power_tune_table
.TdcWaterfallCtl
= defaults
->TdcWaterfallCtl
;
510 data
->power_tune_table
.LPMLTemperatureMin
=
511 (uint8_t)((temp
>> 16) & 0xff);
512 data
->power_tune_table
.LPMLTemperatureMax
=
513 (uint8_t)((temp
>> 8) & 0xff);
514 data
->power_tune_table
.Reserved
= (uint8_t)(temp
& 0xff);
519 static int polaris10_populate_temperature_scaler(struct pp_hwmgr
*hwmgr
)
522 struct polaris10_hwmgr
*data
= (struct polaris10_hwmgr
*)(hwmgr
->backend
);
524 /* Currently not used. Set all to zero. */
525 for (i
= 0; i
< 16; i
++)
526 data
->power_tune_table
.LPMLTemperatureScaler
[i
] = 0;
531 static int polaris10_populate_fuzzy_fan(struct pp_hwmgr
*hwmgr
)
533 struct polaris10_hwmgr
*data
= (struct polaris10_hwmgr
*)(hwmgr
->backend
);
535 if ((hwmgr
->thermal_controller
.advanceFanControlParameters
.usFanOutputSensitivity
& (1 << 15))
536 || 0 == hwmgr
->thermal_controller
.advanceFanControlParameters
.usFanOutputSensitivity
)
537 hwmgr
->thermal_controller
.advanceFanControlParameters
.usFanOutputSensitivity
=
538 hwmgr
->thermal_controller
.advanceFanControlParameters
.usDefaultFanOutputSensitivity
;
540 data
->power_tune_table
.FuzzyFan_PwmSetDelta
= PP_HOST_TO_SMC_US(
541 hwmgr
->thermal_controller
.advanceFanControlParameters
.usFanOutputSensitivity
);
545 static int polaris10_populate_gnb_lpml(struct pp_hwmgr
*hwmgr
)
548 struct polaris10_hwmgr
*data
= (struct polaris10_hwmgr
*)(hwmgr
->backend
);
550 /* Currently not used. Set all to zero. */
551 for (i
= 0; i
< 16; i
++)
552 data
->power_tune_table
.GnbLPML
[i
] = 0;
557 static int polaris10_min_max_vgnb_lpml_id_from_bapm_vddc(struct pp_hwmgr
*hwmgr
)
562 static int polaris10_enable_didt(struct pp_hwmgr
*hwmgr
, const bool enable
)
565 uint32_t en
= enable
? 1 : 0;
569 if (phm_cap_enabled(hwmgr
->platform_descriptor
.platformCaps
, PHM_PlatformCaps_SQRamping
)) {
570 data
= cgs_read_ind_register(hwmgr
->device
, CGS_IND_REG__DIDT
, ixDIDT_SQ_CTRL0
);
571 data
&= ~DIDT_SQ_CTRL0__DIDT_CTRL_EN_MASK
;
572 data
|= ((en
<< DIDT_SQ_CTRL0__DIDT_CTRL_EN__SHIFT
) & DIDT_SQ_CTRL0__DIDT_CTRL_EN_MASK
);
573 cgs_write_ind_register(hwmgr
->device
, CGS_IND_REG__DIDT
, ixDIDT_SQ_CTRL0
, data
);
574 DIDTBlock_Info
&= ~SQ_Enable_MASK
;
575 DIDTBlock_Info
|= en
<< SQ_Enable_SHIFT
;
578 if (phm_cap_enabled(hwmgr
->platform_descriptor
.platformCaps
, PHM_PlatformCaps_DBRamping
)) {
579 data
= cgs_read_ind_register(hwmgr
->device
, CGS_IND_REG__DIDT
, ixDIDT_DB_CTRL0
);
580 data
&= ~DIDT_DB_CTRL0__DIDT_CTRL_EN_MASK
;
581 data
|= ((en
<< DIDT_DB_CTRL0__DIDT_CTRL_EN__SHIFT
) & DIDT_DB_CTRL0__DIDT_CTRL_EN_MASK
);
582 cgs_write_ind_register(hwmgr
->device
, CGS_IND_REG__DIDT
, ixDIDT_DB_CTRL0
, data
);
583 DIDTBlock_Info
&= ~DB_Enable_MASK
;
584 DIDTBlock_Info
|= en
<< DB_Enable_SHIFT
;
587 if (phm_cap_enabled(hwmgr
->platform_descriptor
.platformCaps
, PHM_PlatformCaps_TDRamping
)) {
588 data
= cgs_read_ind_register(hwmgr
->device
, CGS_IND_REG__DIDT
, ixDIDT_TD_CTRL0
);
589 data
&= ~DIDT_TD_CTRL0__DIDT_CTRL_EN_MASK
;
590 data
|= ((en
<< DIDT_TD_CTRL0__DIDT_CTRL_EN__SHIFT
) & DIDT_TD_CTRL0__DIDT_CTRL_EN_MASK
);
591 cgs_write_ind_register(hwmgr
->device
, CGS_IND_REG__DIDT
, ixDIDT_TD_CTRL0
, data
);
592 DIDTBlock_Info
&= ~TD_Enable_MASK
;
593 DIDTBlock_Info
|= en
<< TD_Enable_SHIFT
;
596 if (phm_cap_enabled(hwmgr
->platform_descriptor
.platformCaps
, PHM_PlatformCaps_TCPRamping
)) {
597 data
= cgs_read_ind_register(hwmgr
->device
, CGS_IND_REG__DIDT
, ixDIDT_TCP_CTRL0
);
598 data
&= ~DIDT_TCP_CTRL0__DIDT_CTRL_EN_MASK
;
599 data
|= ((en
<< DIDT_TCP_CTRL0__DIDT_CTRL_EN__SHIFT
) & DIDT_TCP_CTRL0__DIDT_CTRL_EN_MASK
);
600 cgs_write_ind_register(hwmgr
->device
, CGS_IND_REG__DIDT
, ixDIDT_TCP_CTRL0
, data
);
601 DIDTBlock_Info
&= ~TCP_Enable_MASK
;
602 DIDTBlock_Info
|= en
<< TCP_Enable_SHIFT
;
606 result
= smum_send_msg_to_smc_with_parameter(hwmgr
->smumgr
, PPSMC_MSG_Didt_Block_Function
, DIDTBlock_Info
);
611 static int polaris10_program_pt_config_registers(struct pp_hwmgr
*hwmgr
,
612 struct polaris10_pt_config_reg
*cac_config_regs
)
614 struct polaris10_pt_config_reg
*config_regs
= cac_config_regs
;
618 PP_ASSERT_WITH_CODE((config_regs
!= NULL
), "Invalid config register table.", return -EINVAL
);
620 while (config_regs
->offset
!= 0xFFFFFFFF) {
621 if (config_regs
->type
== POLARIS10_CONFIGREG_CACHE
)
622 cache
|= ((config_regs
->value
<< config_regs
->shift
) & config_regs
->mask
);
624 switch (config_regs
->type
) {
625 case POLARIS10_CONFIGREG_SMC_IND
:
626 data
= cgs_read_ind_register(hwmgr
->device
, CGS_IND_REG__SMC
, config_regs
->offset
);
629 case POLARIS10_CONFIGREG_DIDT_IND
:
630 data
= cgs_read_ind_register(hwmgr
->device
, CGS_IND_REG__DIDT
, config_regs
->offset
);
633 case POLARIS10_CONFIGREG_GC_CAC_IND
:
634 data
= cgs_read_ind_register(hwmgr
->device
, CGS_IND_REG_GC_CAC
, config_regs
->offset
);
638 data
= cgs_read_register(hwmgr
->device
, config_regs
->offset
);
642 data
&= ~config_regs
->mask
;
643 data
|= ((config_regs
->value
<< config_regs
->shift
) & config_regs
->mask
);
646 switch (config_regs
->type
) {
647 case POLARIS10_CONFIGREG_SMC_IND
:
648 cgs_write_ind_register(hwmgr
->device
, CGS_IND_REG__SMC
, config_regs
->offset
, data
);
651 case POLARIS10_CONFIGREG_DIDT_IND
:
652 cgs_write_ind_register(hwmgr
->device
, CGS_IND_REG__DIDT
, config_regs
->offset
, data
);
655 case POLARIS10_CONFIGREG_GC_CAC_IND
:
656 cgs_write_ind_register(hwmgr
->device
, CGS_IND_REG_GC_CAC
, config_regs
->offset
, data
);
660 cgs_write_register(hwmgr
->device
, config_regs
->offset
, data
);
672 int polaris10_enable_didt_config(struct pp_hwmgr
*hwmgr
)
676 uint32_t count
, value
, value2
;
677 struct cgs_system_info sys_info
= {0};
679 sys_info
.size
= sizeof(struct cgs_system_info
);
680 sys_info
.info_id
= CGS_SYSTEM_INFO_GFX_SE_INFO
;
681 result
= cgs_query_system_info(hwmgr
->device
, &sys_info
);
685 num_se
= sys_info
.value
;
687 if (phm_cap_enabled(hwmgr
->platform_descriptor
.platformCaps
, PHM_PlatformCaps_SQRamping
) ||
688 phm_cap_enabled(hwmgr
->platform_descriptor
.platformCaps
, PHM_PlatformCaps_DBRamping
) ||
689 phm_cap_enabled(hwmgr
->platform_descriptor
.platformCaps
, PHM_PlatformCaps_TDRamping
) ||
690 phm_cap_enabled(hwmgr
->platform_descriptor
.platformCaps
, PHM_PlatformCaps_TCPRamping
)) {
692 /* TO DO Pre DIDT disable clock gating */
694 value2
= cgs_read_register(hwmgr
->device
, mmGRBM_GFX_INDEX
);
695 for (count
= 0; count
< num_se
; count
++) {
696 value
= SYS_GRBM_GFX_INDEX_DATA__INSTANCE_BROADCAST_WRITES_MASK
697 | SYS_GRBM_GFX_INDEX_DATA__SH_BROADCAST_WRITES_MASK
698 | (count
<< SYS_GRBM_GFX_INDEX_DATA__SE_INDEX__SHIFT
);
699 cgs_write_register(hwmgr
->device
, mmGRBM_GFX_INDEX
, value
);
701 if (hwmgr
->chip_id
== CHIP_POLARIS10
) {
702 result
= polaris10_program_pt_config_registers(hwmgr
, GCCACConfig_Polaris10
);
703 PP_ASSERT_WITH_CODE((result
== 0), "DIDT Config failed.", return result
);
704 result
= polaris10_program_pt_config_registers(hwmgr
, DIDTConfig_Polaris10
);
705 PP_ASSERT_WITH_CODE((result
== 0), "DIDT Config failed.", return result
);
706 } else if (hwmgr
->chip_id
== CHIP_POLARIS11
) {
707 result
= polaris10_program_pt_config_registers(hwmgr
, GCCACConfig_Polaris11
);
708 PP_ASSERT_WITH_CODE((result
== 0), "DIDT Config failed.", return result
);
709 result
= polaris10_program_pt_config_registers(hwmgr
, DIDTConfig_Polaris11
);
710 PP_ASSERT_WITH_CODE((result
== 0), "DIDT Config failed.", return result
);
713 cgs_write_register(hwmgr
->device
, mmGRBM_GFX_INDEX
, value2
);
715 result
= polaris10_enable_didt(hwmgr
, true);
716 PP_ASSERT_WITH_CODE((result
== 0), "EnableDiDt failed.", return result
);
718 /* TO DO Post DIDT enable clock gating */
724 int polaris10_disable_didt_config(struct pp_hwmgr
*hwmgr
)
728 if (phm_cap_enabled(hwmgr
->platform_descriptor
.platformCaps
, PHM_PlatformCaps_SQRamping
) ||
729 phm_cap_enabled(hwmgr
->platform_descriptor
.platformCaps
, PHM_PlatformCaps_DBRamping
) ||
730 phm_cap_enabled(hwmgr
->platform_descriptor
.platformCaps
, PHM_PlatformCaps_TDRamping
) ||
731 phm_cap_enabled(hwmgr
->platform_descriptor
.platformCaps
, PHM_PlatformCaps_TCPRamping
)) {
732 /* TO DO Pre DIDT disable clock gating */
734 result
= polaris10_enable_didt(hwmgr
, false);
735 PP_ASSERT_WITH_CODE((result
== 0), "Post DIDT enable clock gating failed.", return result
);
736 /* TO DO Post DIDT enable clock gating */
743 static int polaris10_populate_bapm_vddc_base_leakage_sidd(struct pp_hwmgr
*hwmgr
)
745 struct polaris10_hwmgr
*data
= (struct polaris10_hwmgr
*)(hwmgr
->backend
);
746 struct phm_ppt_v1_information
*table_info
=
747 (struct phm_ppt_v1_information
*)(hwmgr
->pptable
);
748 uint16_t hi_sidd
= data
->power_tune_table
.BapmVddCBaseLeakageHiSidd
;
749 uint16_t lo_sidd
= data
->power_tune_table
.BapmVddCBaseLeakageLoSidd
;
750 struct phm_cac_tdp_table
*cac_table
= table_info
->cac_dtp_table
;
752 hi_sidd
= (uint16_t)(cac_table
->usHighCACLeakage
/ 100 * 256);
753 lo_sidd
= (uint16_t)(cac_table
->usLowCACLeakage
/ 100 * 256);
755 data
->power_tune_table
.BapmVddCBaseLeakageHiSidd
=
756 CONVERT_FROM_HOST_TO_SMC_US(hi_sidd
);
757 data
->power_tune_table
.BapmVddCBaseLeakageLoSidd
=
758 CONVERT_FROM_HOST_TO_SMC_US(lo_sidd
);
763 int polaris10_populate_pm_fuses(struct pp_hwmgr
*hwmgr
)
765 struct polaris10_hwmgr
*data
= (struct polaris10_hwmgr
*)(hwmgr
->backend
);
766 uint32_t pm_fuse_table_offset
;
768 if (phm_cap_enabled(hwmgr
->platform_descriptor
.platformCaps
,
769 PHM_PlatformCaps_PowerContainment
)) {
770 if (polaris10_read_smc_sram_dword(hwmgr
->smumgr
,
771 SMU7_FIRMWARE_HEADER_LOCATION
+
772 offsetof(SMU74_Firmware_Header
, PmFuseTable
),
773 &pm_fuse_table_offset
, data
->sram_end
))
774 PP_ASSERT_WITH_CODE(false,
775 "Attempt to get pm_fuse_table_offset Failed!",
778 if (polaris10_populate_svi_load_line(hwmgr
))
779 PP_ASSERT_WITH_CODE(false,
780 "Attempt to populate SviLoadLine Failed!",
783 if (polaris10_populate_tdc_limit(hwmgr
))
784 PP_ASSERT_WITH_CODE(false,
785 "Attempt to populate TDCLimit Failed!", return -EINVAL
);
787 if (polaris10_populate_dw8(hwmgr
, pm_fuse_table_offset
))
788 PP_ASSERT_WITH_CODE(false,
789 "Attempt to populate TdcWaterfallCtl, "
790 "LPMLTemperature Min and Max Failed!",
793 if (0 != polaris10_populate_temperature_scaler(hwmgr
))
794 PP_ASSERT_WITH_CODE(false,
795 "Attempt to populate LPMLTemperatureScaler Failed!",
798 if (polaris10_populate_fuzzy_fan(hwmgr
))
799 PP_ASSERT_WITH_CODE(false,
800 "Attempt to populate Fuzzy Fan Control parameters Failed!",
803 if (polaris10_populate_gnb_lpml(hwmgr
))
804 PP_ASSERT_WITH_CODE(false,
805 "Attempt to populate GnbLPML Failed!",
808 if (polaris10_min_max_vgnb_lpml_id_from_bapm_vddc(hwmgr
))
809 PP_ASSERT_WITH_CODE(false,
810 "Attempt to populate GnbLPML Min and Max Vid Failed!",
813 if (polaris10_populate_bapm_vddc_base_leakage_sidd(hwmgr
))
814 PP_ASSERT_WITH_CODE(false,
815 "Attempt to populate BapmVddCBaseLeakage Hi and Lo "
816 "Sidd Failed!", return -EINVAL
);
818 if (polaris10_copy_bytes_to_smc(hwmgr
->smumgr
, pm_fuse_table_offset
,
819 (uint8_t *)&data
->power_tune_table
,
820 (sizeof(struct SMU74_Discrete_PmFuses
) - 92), data
->sram_end
))
821 PP_ASSERT_WITH_CODE(false,
822 "Attempt to download PmFuseTable Failed!",
828 int polaris10_enable_smc_cac(struct pp_hwmgr
*hwmgr
)
830 struct polaris10_hwmgr
*data
= (struct polaris10_hwmgr
*)(hwmgr
->backend
);
833 if (phm_cap_enabled(hwmgr
->platform_descriptor
.platformCaps
,
834 PHM_PlatformCaps_CAC
)) {
836 smc_result
= smum_send_msg_to_smc(hwmgr
->smumgr
,
837 (uint16_t)(PPSMC_MSG_EnableCac
));
838 PP_ASSERT_WITH_CODE((0 == smc_result
),
839 "Failed to enable CAC in SMC.", result
= -1);
841 data
->cac_enabled
= (0 == smc_result
) ? true : false;
846 int polaris10_disable_smc_cac(struct pp_hwmgr
*hwmgr
)
848 struct polaris10_hwmgr
*data
= (struct polaris10_hwmgr
*)(hwmgr
->backend
);
851 if (phm_cap_enabled(hwmgr
->platform_descriptor
.platformCaps
,
852 PHM_PlatformCaps_CAC
) && data
->cac_enabled
) {
853 int smc_result
= smum_send_msg_to_smc(hwmgr
->smumgr
,
854 (uint16_t)(PPSMC_MSG_DisableCac
));
855 PP_ASSERT_WITH_CODE((smc_result
== 0),
856 "Failed to disable CAC in SMC.", result
= -1);
858 data
->cac_enabled
= false;
863 int polaris10_set_power_limit(struct pp_hwmgr
*hwmgr
, uint32_t n
)
865 struct polaris10_hwmgr
*data
= (struct polaris10_hwmgr
*)(hwmgr
->backend
);
867 if (data
->power_containment_features
&
868 POWERCONTAINMENT_FEATURE_PkgPwrLimit
)
869 return smum_send_msg_to_smc_with_parameter(hwmgr
->smumgr
,
870 PPSMC_MSG_PkgPwrSetLimit
, n
);
874 static int polaris10_set_overdriver_target_tdp(struct pp_hwmgr
*pHwMgr
, uint32_t target_tdp
)
876 return smum_send_msg_to_smc_with_parameter(pHwMgr
->smumgr
,
877 PPSMC_MSG_OverDriveSetTargetTdp
, target_tdp
);
880 int polaris10_enable_power_containment(struct pp_hwmgr
*hwmgr
)
882 struct polaris10_hwmgr
*data
= (struct polaris10_hwmgr
*)(hwmgr
->backend
);
883 struct phm_ppt_v1_information
*table_info
=
884 (struct phm_ppt_v1_information
*)(hwmgr
->pptable
);
888 data
->power_containment_features
= 0;
889 if (phm_cap_enabled(hwmgr
->platform_descriptor
.platformCaps
,
890 PHM_PlatformCaps_PowerContainment
)) {
892 if (data
->enable_tdc_limit_feature
) {
893 smc_result
= smum_send_msg_to_smc(hwmgr
->smumgr
,
894 (uint16_t)(PPSMC_MSG_TDCLimitEnable
));
895 PP_ASSERT_WITH_CODE((0 == smc_result
),
896 "Failed to enable TDCLimit in SMC.", result
= -1;);
898 data
->power_containment_features
|=
899 POWERCONTAINMENT_FEATURE_TDCLimit
;
902 if (data
->enable_pkg_pwr_tracking_feature
) {
903 smc_result
= smum_send_msg_to_smc(hwmgr
->smumgr
,
904 (uint16_t)(PPSMC_MSG_PkgPwrLimitEnable
));
905 PP_ASSERT_WITH_CODE((0 == smc_result
),
906 "Failed to enable PkgPwrTracking in SMC.", result
= -1;);
907 if (0 == smc_result
) {
908 struct phm_cac_tdp_table
*cac_table
=
909 table_info
->cac_dtp_table
;
910 uint32_t default_limit
=
911 (uint32_t)(cac_table
->usMaximumPowerDeliveryLimit
* 256);
913 data
->power_containment_features
|=
914 POWERCONTAINMENT_FEATURE_PkgPwrLimit
;
916 if (polaris10_set_power_limit(hwmgr
, default_limit
))
917 printk(KERN_ERR
"Failed to set Default Power Limit in SMC!");
924 int polaris10_disable_power_containment(struct pp_hwmgr
*hwmgr
)
926 struct polaris10_hwmgr
*data
= (struct polaris10_hwmgr
*)(hwmgr
->backend
);
929 if (phm_cap_enabled(hwmgr
->platform_descriptor
.platformCaps
,
930 PHM_PlatformCaps_PowerContainment
) &&
931 data
->power_containment_features
) {
934 if (data
->power_containment_features
&
935 POWERCONTAINMENT_FEATURE_TDCLimit
) {
936 smc_result
= smum_send_msg_to_smc(hwmgr
->smumgr
,
937 (uint16_t)(PPSMC_MSG_TDCLimitDisable
));
938 PP_ASSERT_WITH_CODE((smc_result
== 0),
939 "Failed to disable TDCLimit in SMC.",
940 result
= smc_result
);
943 if (data
->power_containment_features
&
944 POWERCONTAINMENT_FEATURE_DTE
) {
945 smc_result
= smum_send_msg_to_smc(hwmgr
->smumgr
,
946 (uint16_t)(PPSMC_MSG_DisableDTE
));
947 PP_ASSERT_WITH_CODE((smc_result
== 0),
948 "Failed to disable DTE in SMC.",
949 result
= smc_result
);
952 if (data
->power_containment_features
&
953 POWERCONTAINMENT_FEATURE_PkgPwrLimit
) {
954 smc_result
= smum_send_msg_to_smc(hwmgr
->smumgr
,
955 (uint16_t)(PPSMC_MSG_PkgPwrLimitDisable
));
956 PP_ASSERT_WITH_CODE((smc_result
== 0),
957 "Failed to disable PkgPwrTracking in SMC.",
958 result
= smc_result
);
960 data
->power_containment_features
= 0;
966 int polaris10_power_control_set_level(struct pp_hwmgr
*hwmgr
)
968 struct phm_ppt_v1_information
*table_info
=
969 (struct phm_ppt_v1_information
*)(hwmgr
->pptable
);
970 struct phm_cac_tdp_table
*cac_table
= table_info
->cac_dtp_table
;
971 int adjust_percent
, target_tdp
;
974 if (phm_cap_enabled(hwmgr
->platform_descriptor
.platformCaps
,
975 PHM_PlatformCaps_PowerContainment
)) {
976 /* adjustment percentage has already been validated */
977 adjust_percent
= hwmgr
->platform_descriptor
.TDPAdjustmentPolarity
?
978 hwmgr
->platform_descriptor
.TDPAdjustment
:
979 (-1 * hwmgr
->platform_descriptor
.TDPAdjustment
);
980 /* SMC requested that target_tdp to be 7 bit fraction in DPM table
981 * but message to be 8 bit fraction for messages
983 target_tdp
= ((100 + adjust_percent
) * (int)(cac_table
->usTDP
* 256)) / 100;
984 result
= polaris10_set_overdriver_target_tdp(hwmgr
, (uint32_t)target_tdp
);