Skip to content

Commit af5ba6d

Browse files
Evan Quanalexdeucher
authored andcommitted
drm/amd/powerplay: common API for disabling all features with exception
We are moving to centralize all feature enablement/support checking and setting APIs in smu_cmn.c. Signed-off-by: Evan Quan <[email protected]> Reviewed-by: Alex Deucher <[email protected]> Signed-off-by: Alex Deucher <[email protected]>
1 parent 7dbf780 commit af5ba6d

File tree

9 files changed

+30
-8
lines changed

9 files changed

+30
-8
lines changed

drivers/gpu/drm/amd/powerplay/amdgpu_smu.c

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1108,7 +1108,6 @@ static int smu_hw_init(void *handle)
11081108
static int smu_disable_dpms(struct smu_context *smu)
11091109
{
11101110
struct amdgpu_device *adev = smu->adev;
1111-
uint64_t features_to_disable;
11121111
int ret = 0;
11131112
bool use_baco = !smu->is_apu &&
11141113
((adev->in_gpu_reset &&
@@ -1144,13 +1143,8 @@ static int smu_disable_dpms(struct smu_context *smu)
11441143
* BACO feature has to be kept enabled.
11451144
*/
11461145
if (use_baco && smu_feature_is_enabled(smu, SMU_FEATURE_BACO_BIT)) {
1147-
features_to_disable = U64_MAX &
1148-
~(1ULL << smu_cmn_to_asic_specific_index(smu,
1149-
CMN2ASIC_MAPPING_FEATURE,
1150-
SMU_FEATURE_BACO_BIT));
1151-
ret = smu_feature_update_enable_state(smu,
1152-
features_to_disable,
1153-
0);
1146+
ret = smu_disable_all_features_with_exception(smu,
1147+
SMU_FEATURE_BACO_BIT);
11541148
if (ret)
11551149
dev_err(adev->dev, "Failed to disable smu features except BACO.\n");
11561150
} else {

drivers/gpu/drm/amd/powerplay/arcturus_ppt.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2286,6 +2286,7 @@ static const struct pptable_funcs arcturus_ppt_funcs = {
22862286
.set_allowed_mask = smu_v11_0_set_allowed_mask,
22872287
.get_enabled_mask = smu_cmn_get_enabled_mask,
22882288
.feature_is_enabled = smu_cmn_feature_is_enabled,
2289+
.disable_all_features_with_exception = smu_cmn_disable_all_features_with_exception,
22892290
.notify_display_change = NULL,
22902291
.set_power_limit = smu_v11_0_set_power_limit,
22912292
.init_max_sustainable_clocks = smu_v11_0_init_max_sustainable_clocks,

drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -534,6 +534,7 @@ struct pptable_funcs {
534534
int (*set_allowed_mask)(struct smu_context *smu);
535535
int (*get_enabled_mask)(struct smu_context *smu, uint32_t *feature_mask, uint32_t num);
536536
int (*feature_is_enabled)(struct smu_context *smu, enum smu_feature_mask mask);
537+
int (*disable_all_features_with_exception)(struct smu_context *smu, enum smu_feature_mask mask);
537538
int (*notify_display_change)(struct smu_context *smu);
538539
int (*set_power_limit)(struct smu_context *smu, uint32_t n);
539540
int (*init_max_sustainable_clocks)(struct smu_context *smu);

drivers/gpu/drm/amd/powerplay/navi10_ppt.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2301,6 +2301,7 @@ static const struct pptable_funcs navi10_ppt_funcs = {
23012301
.set_allowed_mask = smu_v11_0_set_allowed_mask,
23022302
.get_enabled_mask = smu_cmn_get_enabled_mask,
23032303
.feature_is_enabled = smu_cmn_feature_is_enabled,
2304+
.disable_all_features_with_exception = smu_cmn_disable_all_features_with_exception,
23042305
.notify_display_change = smu_v11_0_notify_display_change,
23052306
.set_power_limit = smu_v11_0_set_power_limit,
23062307
.init_max_sustainable_clocks = smu_v11_0_init_max_sustainable_clocks,

drivers/gpu/drm/amd/powerplay/renoir_ppt.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1020,6 +1020,7 @@ static const struct pptable_funcs renoir_ppt_funcs = {
10201020
.set_default_dpm_table = smu_v12_0_set_default_dpm_tables,
10211021
.get_enabled_mask = smu_cmn_get_enabled_mask,
10221022
.feature_is_enabled = smu_cmn_feature_is_enabled,
1023+
.disable_all_features_with_exception = smu_cmn_disable_all_features_with_exception,
10231024
.get_dpm_ultimate_freq = renoir_get_dpm_ultimate_freq,
10241025
.mode2_reset = smu_v12_0_mode2_reset,
10251026
.set_soft_freq_limited_range = smu_v12_0_set_soft_freq_limited_range,

drivers/gpu/drm/amd/powerplay/sienna_cichlid_ppt.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2452,6 +2452,7 @@ static const struct pptable_funcs sienna_cichlid_ppt_funcs = {
24522452
.set_allowed_mask = smu_v11_0_set_allowed_mask,
24532453
.get_enabled_mask = smu_cmn_get_enabled_mask,
24542454
.feature_is_enabled = smu_cmn_feature_is_enabled,
2455+
.disable_all_features_with_exception = smu_cmn_disable_all_features_with_exception,
24552456
.notify_display_change = NULL,
24562457
.set_power_limit = smu_v11_0_set_power_limit,
24572458
.init_max_sustainable_clocks = smu_v11_0_init_max_sustainable_clocks,

drivers/gpu/drm/amd/powerplay/smu_cmn.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,3 +355,22 @@ int smu_cmn_set_pp_feature_mask(struct smu_context *smu,
355355

356356
return ret;
357357
}
358+
359+
int smu_cmn_disable_all_features_with_exception(struct smu_context *smu,
360+
enum smu_feature_mask mask)
361+
{
362+
uint64_t features_to_disable = U64_MAX;
363+
int skipped_feature_id;
364+
365+
skipped_feature_id = smu_cmn_to_asic_specific_index(smu,
366+
CMN2ASIC_MAPPING_FEATURE,
367+
mask);
368+
if (skipped_feature_id < 0)
369+
return -EINVAL;
370+
371+
features_to_disable &= ~(1ULL << skipped_feature_id);
372+
373+
return smu_cmn_feature_update_enable_state(smu,
374+
features_to_disable,
375+
0);
376+
}

drivers/gpu/drm/amd/powerplay/smu_cmn.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,7 @@ size_t smu_cmn_get_pp_feature_mask(struct smu_context *smu,
4949
int smu_cmn_set_pp_feature_mask(struct smu_context *smu,
5050
uint64_t new_mask);
5151

52+
int smu_cmn_disable_all_features_with_exception(struct smu_context *smu,
53+
enum smu_feature_mask mask);
54+
5255
#endif

drivers/gpu/drm/amd/powerplay/smu_internal.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
#define smu_feature_set_allowed_mask(smu) smu_ppt_funcs(set_allowed_mask, 0, smu)
5757
#define smu_feature_get_enabled_mask(smu, mask, num) smu_ppt_funcs(get_enabled_mask, 0, smu, mask, num)
5858
#define smu_feature_is_enabled(smu, mask) smu_ppt_funcs(feature_is_enabled, 0, smu, mask)
59+
#define smu_disable_all_features_with_exception(smu, mask) smu_ppt_funcs(disable_all_features_with_exception, 0, smu, mask)
5960
#define smu_is_dpm_running(smu) smu_ppt_funcs(is_dpm_running, 0 , smu)
6061
#define smu_notify_display_change(smu) smu_ppt_funcs(notify_display_change, 0, smu)
6162
#define smu_set_default_dpm_table(smu) smu_ppt_funcs(set_default_dpm_table, 0, smu)

0 commit comments

Comments
 (0)