diff options
author | Rex Zhu <Rex.Zhu@amd.com> | 2017-07-05 06:12:46 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2017-07-14 11:06:16 -0400 |
commit | ce09d8ecb1b5db528b43e4799a267ea446f93799 (patch) | |
tree | 2e59fa260f0e412b307f5defe8b8ac920727c0e0 /drivers | |
parent | b37afd41a1f5a7d9dbc4cc6ede62e590a31e2192 (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')
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 | ||
136 | struct pp_smumgr { | 137 | struct pp_smumgr { |
@@ -202,6 +203,8 @@ extern bool smum_is_dpm_running(struct pp_hwmgr *hwmgr); | |||
202 | extern int smum_populate_requested_graphic_levels(struct pp_hwmgr *hwmgr, | 203 | extern int smum_populate_requested_graphic_levels(struct pp_hwmgr *hwmgr, |
203 | struct amd_pp_profile *request); | 204 | struct amd_pp_profile *request); |
204 | 205 | ||
206 | extern 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 | ||
162 | static int fiji_setup_pwr_virus(struct pp_smumgr *smumgr) | 162 | static 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 | ||
192 | static int fiji_start_avfs_btc(struct pp_smumgr *smumgr) | 195 | static 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 | ||
253 | static int fiji_avfs_event_mgr(struct pp_smumgr *smumgr, bool smu_started) | 256 | static 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 | |||
32 | struct fiji_smu_avfs { | ||
33 | enum AVFS_BTC_STATUS AvfsBtcStatus; | ||
34 | uint32_t AvfsBtcParam; | ||
35 | }; | ||
36 | |||
37 | |||
38 | struct fiji_smumgr { | 31 | struct 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] = { | |||
60 | static const SMU74_Discrete_MemoryLevel avfs_memory_level_polaris10 = { | 60 | static 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 | |||
64 | static int polaris10_setup_pwr_virus(struct pp_smumgr *smumgr) | 63 | static 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) | |||
98 | static int polaris10_perform_btc(struct pp_smumgr *smumgr) | 96 | static 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 | |||
175 | static int | 174 | static int |
176 | polaris10_avfs_event_mgr(struct pp_smumgr *smumgr, bool SMU_VFT_INTACT) | 175 | polaris10_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 | ||
35 | struct polaris10_avfs { | ||
36 | enum AVFS_BTC_STATUS avfs_btc_status; | ||
37 | uint32_t avfs_btc_param; | ||
38 | }; | ||
39 | |||
40 | struct polaris10_pt_defaults { | 35 | struct 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 | |||
56 | struct polaris10_range_table { | 49 | struct 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 { | |||
61 | struct polaris10_smumgr { | 54 | struct 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 | |||
544 | int smu7_init(struct pp_smumgr *smumgr) | 543 | int 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 | ||
40 | struct smu7_avfs { | ||
41 | enum AVFS_BTC_STATUS avfs_btc_status; | ||
42 | uint32_t avfs_btc_param; | ||
43 | }; | ||
44 | |||
40 | struct smu7_smumgr { | 45 | struct 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 | |||
408 | bool 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 | } | ||