aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorRex Zhu <Rex.Zhu@amd.com>2017-07-05 06:12:46 -0400
committerAlex Deucher <alexander.deucher@amd.com>2017-07-14 11:06:16 -0400
commitce09d8ecb1b5db528b43e4799a267ea446f93799 (patch)
tree2e59fa260f0e412b307f5defe8b8ac920727c0e0 /drivers
parentb37afd41a1f5a7d9dbc4cc6ede62e590a31e2192 (diff)
drm/amd/powerplay: move VI common AVFS code to smu7_smumgr.c
Signed-off-by: Rex Zhu <Rex.Zhu@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/drm/amd/powerplay/inc/smumgr.h3
-rw-r--r--drivers/gpu/drm/amd/powerplay/smumgr/fiji_smc.c6
-rw-r--r--drivers/gpu/drm/amd/powerplay/smumgr/fiji_smumgr.c75
-rw-r--r--drivers/gpu/drm/amd/powerplay/smumgr/fiji_smumgr.h11
-rw-r--r--drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smc.c4
-rw-r--r--drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c29
-rw-r--r--drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.h12
-rw-r--r--drivers/gpu/drm/amd/powerplay/smumgr/smu7_smumgr.c6
-rw-r--r--drivers/gpu/drm/amd/powerplay/smumgr/smu7_smumgr.h8
-rw-r--r--drivers/gpu/drm/amd/powerplay/smumgr/smumgr.c8
10 files changed, 75 insertions, 87 deletions
diff --git a/drivers/gpu/drm/amd/powerplay/inc/smumgr.h b/drivers/gpu/drm/amd/powerplay/inc/smumgr.h
index 976e942ec694..5d61cc9d4554 100644
--- a/drivers/gpu/drm/amd/powerplay/inc/smumgr.h
+++ b/drivers/gpu/drm/amd/powerplay/inc/smumgr.h
@@ -131,6 +131,7 @@ struct pp_smumgr_func {
131 bool (*is_dpm_running)(struct pp_hwmgr *hwmgr); 131 bool (*is_dpm_running)(struct pp_hwmgr *hwmgr);
132 int (*populate_requested_graphic_levels)(struct pp_hwmgr *hwmgr, 132 int (*populate_requested_graphic_levels)(struct pp_hwmgr *hwmgr,
133 struct amd_pp_profile *request); 133 struct amd_pp_profile *request);
134 bool (*is_hw_avfs_present)(struct pp_smumgr *smumgr);
134}; 135};
135 136
136struct pp_smumgr { 137struct pp_smumgr {
@@ -202,6 +203,8 @@ extern bool smum_is_dpm_running(struct pp_hwmgr *hwmgr);
202extern int smum_populate_requested_graphic_levels(struct pp_hwmgr *hwmgr, 203extern int smum_populate_requested_graphic_levels(struct pp_hwmgr *hwmgr,
203 struct amd_pp_profile *request); 204 struct amd_pp_profile *request);
204 205
206extern bool smum_is_hw_avfs_present(struct pp_smumgr *smumgr);
207
205#define SMUM_FIELD_SHIFT(reg, field) reg##__##field##__SHIFT 208#define SMUM_FIELD_SHIFT(reg, field) reg##__##field##__SHIFT
206 209
207#define SMUM_FIELD_MASK(reg, field) reg##__##field##_MASK 210#define SMUM_FIELD_MASK(reg, field) reg##__##field##_MASK
diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/fiji_smc.c b/drivers/gpu/drm/amd/powerplay/smumgr/fiji_smc.c
index ca24e155ef2d..8712f093d6d9 100644
--- a/drivers/gpu/drm/amd/powerplay/smumgr/fiji_smc.c
+++ b/drivers/gpu/drm/amd/powerplay/smumgr/fiji_smc.c
@@ -2134,16 +2134,16 @@ int fiji_thermal_avfs_enable(struct pp_hwmgr *hwmgr)
2134{ 2134{
2135 int ret; 2135 int ret;
2136 struct pp_smumgr *smumgr = (struct pp_smumgr *)(hwmgr->smumgr); 2136 struct pp_smumgr *smumgr = (struct pp_smumgr *)(hwmgr->smumgr);
2137 struct fiji_smumgr *smu_data = (struct fiji_smumgr *)(smumgr->backend); 2137 struct smu7_smumgr *smu_data = (struct smu7_smumgr *)(smumgr->backend);
2138 2138
2139 if (smu_data->avfs.AvfsBtcStatus != AVFS_BTC_ENABLEAVFS) 2139 if (smu_data->avfs.avfs_btc_status != AVFS_BTC_ENABLEAVFS)
2140 return 0; 2140 return 0;
2141 2141
2142 ret = smum_send_msg_to_smc(smumgr, PPSMC_MSG_EnableAvfs); 2142 ret = smum_send_msg_to_smc(smumgr, PPSMC_MSG_EnableAvfs);
2143 2143
2144 if (!ret) 2144 if (!ret)
2145 /* If this param is not changed, this function could fire unnecessarily */ 2145 /* If this param is not changed, this function could fire unnecessarily */
2146 smu_data->avfs.AvfsBtcStatus = AVFS_BTC_COMPLETED_PREVIOUSLY; 2146 smu_data->avfs.avfs_btc_status = AVFS_BTC_COMPLETED_PREVIOUSLY;
2147 2147
2148 return ret; 2148 return ret;
2149} 2149}
diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/fiji_smumgr.c b/drivers/gpu/drm/amd/powerplay/smumgr/fiji_smumgr.c
index 719e8853b0dc..6ae948fc524f 100644
--- a/drivers/gpu/drm/amd/powerplay/smumgr/fiji_smumgr.c
+++ b/drivers/gpu/drm/amd/powerplay/smumgr/fiji_smumgr.c
@@ -161,44 +161,47 @@ static int fiji_start_smu_in_non_protection_mode(struct pp_smumgr *smumgr)
161 161
162static int fiji_setup_pwr_virus(struct pp_smumgr *smumgr) 162static int fiji_setup_pwr_virus(struct pp_smumgr *smumgr)
163{ 163{
164 int i, result = -1; 164 int i;
165 int result = -EINVAL;
165 uint32_t reg, data; 166 uint32_t reg, data;
166 const PWR_Command_Table *virus = PwrVirusTable;
167 struct fiji_smumgr *priv = (struct fiji_smumgr *)(smumgr->backend);
168 167
169 priv->avfs.AvfsBtcStatus = AVFS_LOAD_VIRUS; 168 const PWR_Command_Table *pvirus = PwrVirusTable;
170 for (i = 0; (i < PWR_VIRUS_TABLE_SIZE); i++) { 169 struct smu7_smumgr *smu_data = (struct smu7_smumgr *)(smumgr->backend);
171 switch (virus->command) { 170
171 for (i = 0; i < PWR_VIRUS_TABLE_SIZE; i++) {
172 switch (pvirus->command) {
172 case PwrCmdWrite: 173 case PwrCmdWrite:
173 reg = virus->reg; 174 reg = pvirus->reg;
174 data = virus->data; 175 data = pvirus->data;
175 cgs_write_register(smumgr->device, reg, data); 176 cgs_write_register(smumgr->device, reg, data);
176 break; 177 break;
178
177 case PwrCmdEnd: 179 case PwrCmdEnd:
178 priv->avfs.AvfsBtcStatus = AVFS_BTC_VIRUS_LOADED;
179 result = 0; 180 result = 0;
180 break; 181 break;
182
181 default: 183 default:
182 pr_err("Table Exit with Invalid Command!"); 184 pr_info("Table Exit with Invalid Command!");
183 priv->avfs.AvfsBtcStatus = AVFS_BTC_VIRUS_FAIL; 185 smu_data->avfs.avfs_btc_status = AVFS_BTC_VIRUS_FAIL;
184 result = -1; 186 result = -EINVAL;
185 break; 187 break;
186 } 188 }
187 virus++; 189 pvirus++;
188 } 190 }
191
189 return result; 192 return result;
190} 193}
191 194
192static int fiji_start_avfs_btc(struct pp_smumgr *smumgr) 195static int fiji_start_avfs_btc(struct pp_smumgr *smumgr)
193{ 196{
194 int result = 0; 197 int result = 0;
195 struct fiji_smumgr *priv = (struct fiji_smumgr *)(smumgr->backend); 198 struct smu7_smumgr *smu_data = (struct smu7_smumgr *)(smumgr->backend);
196 199
197 if (priv->avfs.AvfsBtcParam) { 200 if (0 != smu_data->avfs.avfs_btc_param) {
198 if (!smum_send_msg_to_smc_with_parameter(smumgr, 201 if (0 != smu7_send_msg_to_smc_with_parameter(smumgr,
199 PPSMC_MSG_PerformBtc, priv->avfs.AvfsBtcParam)) { 202 PPSMC_MSG_PerformBtc, smu_data->avfs.avfs_btc_param)) {
200 pr_err("PerformBTC SMU msg failed \n"); 203 pr_info("[AVFS][Fiji_PerformBtc] PerformBTC SMU msg failed");
201 result = -1; 204 result = -EINVAL;
202 } 205 }
203 } 206 }
204 /* Soft-Reset to reset the engine before loading uCode */ 207 /* Soft-Reset to reset the engine before loading uCode */
@@ -252,39 +255,39 @@ static int fiji_setup_graphics_level_structure(struct pp_smumgr *smumgr)
252 255
253static int fiji_avfs_event_mgr(struct pp_smumgr *smumgr, bool smu_started) 256static int fiji_avfs_event_mgr(struct pp_smumgr *smumgr, bool smu_started)
254{ 257{
255 struct fiji_smumgr *priv = (struct fiji_smumgr *)(smumgr->backend); 258 struct smu7_smumgr *smu_data = (struct smu7_smumgr *)(smumgr->backend);
256 259
257 switch (priv->avfs.AvfsBtcStatus) { 260 switch (smu_data->avfs.avfs_btc_status) {
258 case AVFS_BTC_COMPLETED_PREVIOUSLY: 261 case AVFS_BTC_COMPLETED_PREVIOUSLY:
259 break; 262 break;
260 263
261 case AVFS_BTC_BOOT: /*Cold Boot State - Post SMU Start*/ 264 case AVFS_BTC_BOOT: /*Cold Boot State - Post SMU Start*/
262 if (!smu_started) 265 if (!smu_started)
263 break; 266 break;
264 priv->avfs.AvfsBtcStatus = AVFS_BTC_FAILED; 267 smu_data->avfs.avfs_btc_status = AVFS_BTC_FAILED;
265 PP_ASSERT_WITH_CODE(0 == fiji_setup_graphics_level_structure(smumgr), 268 PP_ASSERT_WITH_CODE(0 == fiji_setup_graphics_level_structure(smumgr),
266 "[AVFS][fiji_avfs_event_mgr] Could not Copy Graphics Level" 269 "[AVFS][fiji_avfs_event_mgr] Could not Copy Graphics Level"
267 " table over to SMU", 270 " table over to SMU",
268 return -1;); 271 return -EINVAL;);
269 priv->avfs.AvfsBtcStatus = AVFS_BTC_VIRUS_FAIL; 272 smu_data->avfs.avfs_btc_status = AVFS_BTC_VIRUS_FAIL;
270 PP_ASSERT_WITH_CODE(0 == fiji_setup_pwr_virus(smumgr), 273 PP_ASSERT_WITH_CODE(0 == fiji_setup_pwr_virus(smumgr),
271 "[AVFS][fiji_avfs_event_mgr] Could not setup " 274 "[AVFS][fiji_avfs_event_mgr] Could not setup "
272 "Pwr Virus for AVFS ", 275 "Pwr Virus for AVFS ",
273 return -1;); 276 return -EINVAL;);
274 priv->avfs.AvfsBtcStatus = AVFS_BTC_FAILED; 277 smu_data->avfs.avfs_btc_status = AVFS_BTC_FAILED;
275 PP_ASSERT_WITH_CODE(0 == fiji_start_avfs_btc(smumgr), 278 PP_ASSERT_WITH_CODE(0 == fiji_start_avfs_btc(smumgr),
276 "[AVFS][fiji_avfs_event_mgr] Failure at " 279 "[AVFS][fiji_avfs_event_mgr] Failure at "
277 "fiji_start_avfs_btc. AVFS Disabled", 280 "fiji_start_avfs_btc. AVFS Disabled",
278 return -1;); 281 return -EINVAL;);
279 282
280 priv->avfs.AvfsBtcStatus = AVFS_BTC_ENABLEAVFS; 283 smu_data->avfs.avfs_btc_status = AVFS_BTC_ENABLEAVFS;
281 break; 284 break;
282 case AVFS_BTC_DISABLED: /* Do nothing */ 285 case AVFS_BTC_DISABLED: /* Do nothing */
283 case AVFS_BTC_NOTSUPPORTED: /* Do nothing */ 286 case AVFS_BTC_NOTSUPPORTED: /* Do nothing */
284 case AVFS_BTC_ENABLEAVFS: 287 case AVFS_BTC_ENABLEAVFS:
285 break; 288 break;
286 default: 289 default:
287 pr_err("AVFS failed status is %x !\n", priv->avfs.AvfsBtcStatus); 290 pr_err("AVFS failed status is %x !\n", smu_data->avfs.avfs_btc_status);
288 break; 291 break;
289 } 292 }
290 return 0; 293 return 0;
@@ -377,19 +380,6 @@ static int fiji_smu_init(struct pp_smumgr *smumgr)
377 if (smu7_init(smumgr)) 380 if (smu7_init(smumgr))
378 return -EINVAL; 381 return -EINVAL;
379 382
380 fiji_priv->avfs.AvfsBtcStatus = AVFS_BTC_BOOT;
381 if (fiji_is_hw_avfs_present(smumgr))
382 /* AVFS Parameter
383 * 0 - BTC DC disabled, BTC AC disabled
384 * 1 - BTC DC enabled, BTC AC disabled
385 * 2 - BTC DC disabled, BTC AC enabled
386 * 3 - BTC DC enabled, BTC AC enabled
387 * Default is 0 - BTC DC disabled, BTC AC disabled
388 */
389 fiji_priv->avfs.AvfsBtcParam = 0;
390 else
391 fiji_priv->avfs.AvfsBtcStatus = AVFS_BTC_NOTSUPPORTED;
392
393 for (i = 0; i < SMU73_MAX_LEVELS_GRAPHICS; i++) 383 for (i = 0; i < SMU73_MAX_LEVELS_GRAPHICS; i++)
394 fiji_priv->activity_target[i] = 30; 384 fiji_priv->activity_target[i] = 30;
395 385
@@ -421,4 +411,5 @@ const struct pp_smumgr_func fiji_smu_funcs = {
421 .initialize_mc_reg_table = fiji_initialize_mc_reg_table, 411 .initialize_mc_reg_table = fiji_initialize_mc_reg_table,
422 .is_dpm_running = fiji_is_dpm_running, 412 .is_dpm_running = fiji_is_dpm_running,
423 .populate_requested_graphic_levels = fiji_populate_requested_graphic_levels, 413 .populate_requested_graphic_levels = fiji_populate_requested_graphic_levels,
414 .is_hw_avfs_present = fiji_is_hw_avfs_present,
424}; 415};
diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/fiji_smumgr.h b/drivers/gpu/drm/amd/powerplay/smumgr/fiji_smumgr.h
index adcbdfb209be..175bf9f8ef9c 100644
--- a/drivers/gpu/drm/amd/powerplay/smumgr/fiji_smumgr.h
+++ b/drivers/gpu/drm/amd/powerplay/smumgr/fiji_smumgr.h
@@ -28,17 +28,8 @@
28#include "smu7_smumgr.h" 28#include "smu7_smumgr.h"
29 29
30 30
31
32struct fiji_smu_avfs {
33 enum AVFS_BTC_STATUS AvfsBtcStatus;
34 uint32_t AvfsBtcParam;
35};
36
37
38struct fiji_smumgr { 31struct fiji_smumgr {
39 struct smu7_smumgr smu7_data; 32 struct smu7_smumgr smu7_data;
40
41 struct fiji_smu_avfs avfs;
42 struct SMU73_Discrete_DpmTable smc_state_table; 33 struct SMU73_Discrete_DpmTable smc_state_table;
43 struct SMU73_Discrete_Ulv ulv_setting; 34 struct SMU73_Discrete_Ulv ulv_setting;
44 struct SMU73_Discrete_PmFuses power_tune_table; 35 struct SMU73_Discrete_PmFuses power_tune_table;
@@ -47,7 +38,5 @@ struct fiji_smumgr {
47 38
48}; 39};
49 40
50
51
52#endif 41#endif
53 42
diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smc.c b/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smc.c
index f68e759e8be2..99a00bd39256 100644
--- a/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smc.c
+++ b/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smc.c
@@ -1498,7 +1498,7 @@ static int polaris10_populate_avfs_parameters(struct pp_hwmgr *hwmgr)
1498 table_info->vdd_dep_on_sclk; 1498 table_info->vdd_dep_on_sclk;
1499 1499
1500 1500
1501 if (smu_data->avfs.avfs_btc_status == AVFS_BTC_NOTSUPPORTED) 1501 if (((struct smu7_smumgr *)smu_data)->avfs.avfs_btc_status == AVFS_BTC_NOTSUPPORTED)
1502 return result; 1502 return result;
1503 1503
1504 result = atomctrl_get_avfs_information(hwmgr, &avfs_params); 1504 result = atomctrl_get_avfs_information(hwmgr, &avfs_params);
@@ -1889,7 +1889,7 @@ int polaris10_thermal_avfs_enable(struct pp_hwmgr *hwmgr)
1889{ 1889{
1890 int ret; 1890 int ret;
1891 struct pp_smumgr *smumgr = (struct pp_smumgr *)(hwmgr->smumgr); 1891 struct pp_smumgr *smumgr = (struct pp_smumgr *)(hwmgr->smumgr);
1892 struct polaris10_smumgr *smu_data = (struct polaris10_smumgr *)(smumgr->backend); 1892 struct smu7_smumgr *smu_data = (struct smu7_smumgr *)(smumgr->backend);
1893 struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend); 1893 struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend);
1894 1894
1895 if (smu_data->avfs.avfs_btc_status == AVFS_BTC_NOTSUPPORTED) 1895 if (smu_data->avfs.avfs_btc_status == AVFS_BTC_NOTSUPPORTED)
diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c b/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c
index 7e0347088941..75f43dadc56b 100644
--- a/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c
+++ b/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c
@@ -60,16 +60,14 @@ static const SMU74_Discrete_GraphicsLevel avfs_graphics_level_polaris10[8] = {
60static const SMU74_Discrete_MemoryLevel avfs_memory_level_polaris10 = { 60static const SMU74_Discrete_MemoryLevel avfs_memory_level_polaris10 = {
61 0x100ea446, 0, 0x30750000, 0x01, 0x01, 0x01, 0x00, 0x00, 0x64, 0x00, 0x00, 0x1f00, 0x00, 0x00}; 61 0x100ea446, 0, 0x30750000, 0x01, 0x01, 0x01, 0x00, 0x00, 0x64, 0x00, 0x00, 0x1f00, 0x00, 0x00};
62 62
63
64static int polaris10_setup_pwr_virus(struct pp_smumgr *smumgr) 63static int polaris10_setup_pwr_virus(struct pp_smumgr *smumgr)
65{ 64{
66 int i; 65 int i;
67 int result = -1; 66 int result = -EINVAL;
68 uint32_t reg, data; 67 uint32_t reg, data;
69 68
70 const PWR_Command_Table *pvirus = pwr_virus_table; 69 const PWR_Command_Table *pvirus = pwr_virus_table;
71 struct polaris10_smumgr *smu_data = (struct polaris10_smumgr *)(smumgr->backend); 70 struct smu7_smumgr *smu_data = (struct smu7_smumgr *)(smumgr->backend);
72
73 71
74 for (i = 0; i < PWR_VIRUS_TABLE_SIZE; i++) { 72 for (i = 0; i < PWR_VIRUS_TABLE_SIZE; i++) {
75 switch (pvirus->command) { 73 switch (pvirus->command) {
@@ -86,7 +84,7 @@ static int polaris10_setup_pwr_virus(struct pp_smumgr *smumgr)
86 default: 84 default:
87 pr_info("Table Exit with Invalid Command!"); 85 pr_info("Table Exit with Invalid Command!");
88 smu_data->avfs.avfs_btc_status = AVFS_BTC_VIRUS_FAIL; 86 smu_data->avfs.avfs_btc_status = AVFS_BTC_VIRUS_FAIL;
89 result = -1; 87 result = -EINVAL;
90 break; 88 break;
91 } 89 }
92 pvirus++; 90 pvirus++;
@@ -98,7 +96,7 @@ static int polaris10_setup_pwr_virus(struct pp_smumgr *smumgr)
98static int polaris10_perform_btc(struct pp_smumgr *smumgr) 96static int polaris10_perform_btc(struct pp_smumgr *smumgr)
99{ 97{
100 int result = 0; 98 int result = 0;
101 struct polaris10_smumgr *smu_data = (struct polaris10_smumgr *)(smumgr->backend); 99 struct smu7_smumgr *smu_data = (struct smu7_smumgr *)(smumgr->backend);
102 100
103 if (0 != smu_data->avfs.avfs_btc_param) { 101 if (0 != smu_data->avfs.avfs_btc_param) {
104 if (0 != smu7_send_msg_to_smc_with_parameter(smumgr, PPSMC_MSG_PerformBtc, smu_data->avfs.avfs_btc_param)) { 102 if (0 != smu7_send_msg_to_smc_with_parameter(smumgr, PPSMC_MSG_PerformBtc, smu_data->avfs.avfs_btc_param)) {
@@ -172,10 +170,11 @@ static int polaris10_setup_graphics_level_structure(struct pp_smumgr *smumgr)
172 return 0; 170 return 0;
173} 171}
174 172
173
175static int 174static int
176polaris10_avfs_event_mgr(struct pp_smumgr *smumgr, bool SMU_VFT_INTACT) 175polaris10_avfs_event_mgr(struct pp_smumgr *smumgr, bool SMU_VFT_INTACT)
177{ 176{
178 struct polaris10_smumgr *smu_data = (struct polaris10_smumgr *)(smumgr->backend); 177 struct smu7_smumgr *smu_data = (struct smu7_smumgr *)(smumgr->backend);
179 178
180 switch (smu_data->avfs.avfs_btc_status) { 179 switch (smu_data->avfs.avfs_btc_status) {
181 case AVFS_BTC_COMPLETED_PREVIOUSLY: 180 case AVFS_BTC_COMPLETED_PREVIOUSLY:
@@ -185,21 +184,21 @@ polaris10_avfs_event_mgr(struct pp_smumgr *smumgr, bool SMU_VFT_INTACT)
185 184
186 smu_data->avfs.avfs_btc_status = AVFS_BTC_DPMTABLESETUP_FAILED; 185 smu_data->avfs.avfs_btc_status = AVFS_BTC_DPMTABLESETUP_FAILED;
187 PP_ASSERT_WITH_CODE(0 == polaris10_setup_graphics_level_structure(smumgr), 186 PP_ASSERT_WITH_CODE(0 == polaris10_setup_graphics_level_structure(smumgr),
188 "[AVFS][Polaris10_AVFSEventMgr] Could not Copy Graphics Level table over to SMU", 187 "[AVFS][Polaris10_AVFSEventMgr] Could not Copy Graphics Level table over to SMU",
189 return -1); 188 return -EINVAL);
190 189
191 if (smu_data->avfs.avfs_btc_param > 1) { 190 if (smu_data->avfs.avfs_btc_param > 1) {
192 pr_info("[AVFS][Polaris10_AVFSEventMgr] AC BTC has not been successfully verified on Fiji. There may be in this setting."); 191 pr_info("[AVFS][Polaris10_AVFSEventMgr] AC BTC has not been successfully verified on Fiji. There may be in this setting.");
193 smu_data->avfs.avfs_btc_status = AVFS_BTC_VIRUS_FAIL; 192 smu_data->avfs.avfs_btc_status = AVFS_BTC_VIRUS_FAIL;
194 PP_ASSERT_WITH_CODE(-1 == polaris10_setup_pwr_virus(smumgr), 193 PP_ASSERT_WITH_CODE(0 == polaris10_setup_pwr_virus(smumgr),
195 "[AVFS][Polaris10_AVFSEventMgr] Could not setup Pwr Virus for AVFS ", 194 "[AVFS][Polaris10_AVFSEventMgr] Could not setup Pwr Virus for AVFS ",
196 return -1); 195 return -EINVAL);
197 } 196 }
198 197
199 smu_data->avfs.avfs_btc_status = AVFS_BTC_FAILED; 198 smu_data->avfs.avfs_btc_status = AVFS_BTC_FAILED;
200 PP_ASSERT_WITH_CODE(0 == polaris10_perform_btc(smumgr), 199 PP_ASSERT_WITH_CODE(0 == polaris10_perform_btc(smumgr),
201 "[AVFS][Polaris10_AVFSEventMgr] Failure at SmuPolaris10_PerformBTC. AVFS Disabled", 200 "[AVFS][Polaris10_AVFSEventMgr] Failure at SmuPolaris10_PerformBTC. AVFS Disabled",
202 return -1); 201 return -EINVAL);
203 smu_data->avfs.avfs_btc_status = AVFS_BTC_ENABLEAVFS; 202 smu_data->avfs.avfs_btc_status = AVFS_BTC_ENABLEAVFS;
204 break; 203 break;
205 204
@@ -377,11 +376,6 @@ static int polaris10_smu_init(struct pp_smumgr *smumgr)
377 if (smu7_init(smumgr)) 376 if (smu7_init(smumgr))
378 return -EINVAL; 377 return -EINVAL;
379 378
380 if (polaris10_is_hw_avfs_present(smumgr))
381 smu_data->avfs.avfs_btc_status = AVFS_BTC_BOOT;
382 else
383 smu_data->avfs.avfs_btc_status = AVFS_BTC_NOTSUPPORTED;
384
385 for (i = 0; i < SMU74_MAX_LEVELS_GRAPHICS; i++) 379 for (i = 0; i < SMU74_MAX_LEVELS_GRAPHICS; i++)
386 smu_data->activity_target[i] = PPPOLARIS10_TARGETACTIVITY_DFLT; 380 smu_data->activity_target[i] = PPPOLARIS10_TARGETACTIVITY_DFLT;
387 381
@@ -411,4 +405,5 @@ const struct pp_smumgr_func polaris10_smu_funcs = {
411 .get_mac_definition = polaris10_get_mac_definition, 405 .get_mac_definition = polaris10_get_mac_definition,
412 .is_dpm_running = polaris10_is_dpm_running, 406 .is_dpm_running = polaris10_is_dpm_running,
413 .populate_requested_graphic_levels = polaris10_populate_requested_graphic_levels, 407 .populate_requested_graphic_levels = polaris10_populate_requested_graphic_levels,
408 .is_hw_avfs_present = polaris10_is_hw_avfs_present,
414}; 409};
diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.h b/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.h
index 49ebf1d5a53c..5e19c24b0561 100644
--- a/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.h
+++ b/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.h
@@ -32,11 +32,6 @@
32 32
33#define SMC_RAM_END 0x40000 33#define SMC_RAM_END 0x40000
34 34
35struct polaris10_avfs {
36 enum AVFS_BTC_STATUS avfs_btc_status;
37 uint32_t avfs_btc_param;
38};
39
40struct polaris10_pt_defaults { 35struct polaris10_pt_defaults {
41 uint8_t SviLoadLineEn; 36 uint8_t SviLoadLineEn;
42 uint8_t SviLoadLineVddC; 37 uint8_t SviLoadLineVddC;
@@ -51,8 +46,6 @@ struct polaris10_pt_defaults {
51 uint16_t BAPMTI_RC[SMU74_DTE_ITERATIONS * SMU74_DTE_SOURCES * SMU74_DTE_SINKS]; 46 uint16_t BAPMTI_RC[SMU74_DTE_ITERATIONS * SMU74_DTE_SOURCES * SMU74_DTE_SINKS];
52}; 47};
53 48
54
55
56struct polaris10_range_table { 49struct polaris10_range_table {
57 uint32_t trans_lower_frequency; /* in 10khz */ 50 uint32_t trans_lower_frequency; /* in 10khz */
58 uint32_t trans_upper_frequency; 51 uint32_t trans_upper_frequency;
@@ -61,14 +54,13 @@ struct polaris10_range_table {
61struct polaris10_smumgr { 54struct polaris10_smumgr {
62 struct smu7_smumgr smu7_data; 55 struct smu7_smumgr smu7_data;
63 uint8_t protected_mode; 56 uint8_t protected_mode;
64 struct polaris10_avfs avfs;
65 SMU74_Discrete_DpmTable smc_state_table; 57 SMU74_Discrete_DpmTable smc_state_table;
66 struct SMU74_Discrete_Ulv ulv_setting; 58 struct SMU74_Discrete_Ulv ulv_setting;
67 struct SMU74_Discrete_PmFuses power_tune_table; 59 struct SMU74_Discrete_PmFuses power_tune_table;
68 struct polaris10_range_table range_table[NUM_SCLK_RANGE]; 60 struct polaris10_range_table range_table[NUM_SCLK_RANGE];
69 const struct polaris10_pt_defaults *power_tune_defaults; 61 const struct polaris10_pt_defaults *power_tune_defaults;
70 uint32_t activity_target[SMU74_MAX_LEVELS_GRAPHICS]; 62 uint32_t activity_target[SMU74_MAX_LEVELS_GRAPHICS];
71 uint32_t bif_sclk_table[SMU74_MAX_LEVELS_LINK]; 63 uint32_t bif_sclk_table[SMU74_MAX_LEVELS_LINK];
72}; 64};
73 65
74 66
diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/smu7_smumgr.c b/drivers/gpu/drm/amd/powerplay/smumgr/smu7_smumgr.c
index 35ac27681415..76347ff6d655 100644
--- a/drivers/gpu/drm/amd/powerplay/smumgr/smu7_smumgr.c
+++ b/drivers/gpu/drm/amd/powerplay/smumgr/smu7_smumgr.c
@@ -540,7 +540,6 @@ int smu7_upload_smu_firmware_image(struct pp_smumgr *smumgr)
540 return result; 540 return result;
541} 541}
542 542
543
544int smu7_init(struct pp_smumgr *smumgr) 543int smu7_init(struct pp_smumgr *smumgr)
545{ 544{
546 struct smu7_smumgr *smu_data; 545 struct smu7_smumgr *smu_data;
@@ -596,6 +595,11 @@ int smu7_init(struct pp_smumgr *smumgr)
596 (cgs_handle_t)smu_data->smu_buffer.handle); 595 (cgs_handle_t)smu_data->smu_buffer.handle);
597 return -EINVAL); 596 return -EINVAL);
598 597
598 if (smum_is_hw_avfs_present(smumgr))
599 smu_data->avfs.avfs_btc_status = AVFS_BTC_BOOT;
600 else
601 smu_data->avfs.avfs_btc_status = AVFS_BTC_NOTSUPPORTED;
602
599 return 0; 603 return 0;
600} 604}
601 605
diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/smu7_smumgr.h b/drivers/gpu/drm/amd/powerplay/smumgr/smu7_smumgr.h
index 919be435b49c..ee5e32d2921e 100644
--- a/drivers/gpu/drm/amd/powerplay/smumgr/smu7_smumgr.h
+++ b/drivers/gpu/drm/amd/powerplay/smumgr/smu7_smumgr.h
@@ -37,6 +37,11 @@ struct smu7_buffer_entry {
37 unsigned long handle; 37 unsigned long handle;
38}; 38};
39 39
40struct smu7_avfs {
41 enum AVFS_BTC_STATUS avfs_btc_status;
42 uint32_t avfs_btc_param;
43};
44
40struct smu7_smumgr { 45struct smu7_smumgr {
41 uint8_t *header; 46 uint8_t *header;
42 uint8_t *mec_image; 47 uint8_t *mec_image;
@@ -50,7 +55,8 @@ struct smu7_smumgr {
50 uint32_t arb_table_start; 55 uint32_t arb_table_start;
51 uint32_t ulv_setting_starts; 56 uint32_t ulv_setting_starts;
52 uint8_t security_hard_key; 57 uint8_t security_hard_key;
53 uint32_t acpi_optimization; 58 uint32_t acpi_optimization;
59 struct smu7_avfs avfs;
54}; 60};
55 61
56 62
diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/smumgr.c b/drivers/gpu/drm/amd/powerplay/smumgr/smumgr.c
index 0ac19cf3f987..3bdf6478de7f 100644
--- a/drivers/gpu/drm/amd/powerplay/smumgr/smumgr.c
+++ b/drivers/gpu/drm/amd/powerplay/smumgr/smumgr.c
@@ -404,3 +404,11 @@ int smum_populate_requested_graphic_levels(struct pp_hwmgr *hwmgr,
404 404
405 return 0; 405 return 0;
406} 406}
407
408bool smum_is_hw_avfs_present(struct pp_smumgr *smumgr)
409{
410 if (smumgr->smumgr_funcs->is_hw_avfs_present)
411 return smumgr->smumgr_funcs->is_hw_avfs_present(smumgr);
412
413 return false;
414}