int smu_v11_0_system_features_control(struct smu_context *smu,
                                             bool en)
 {
-       struct smu_feature *feature = &smu->smu_feature;
-       uint64_t feature_mask;
-       int ret = 0;
-
-       ret = smu_cmn_send_smc_msg(smu, (en ? SMU_MSG_EnableAllSmuFeatures :
-                                    SMU_MSG_DisableAllSmuFeatures), NULL);
-       if (ret)
-               return ret;
-
-       bitmap_zero(feature->enabled, feature->feature_num);
-
-       if (en) {
-               ret = smu_cmn_get_enabled_mask(smu, &feature_mask);
-               if (ret)
-                       return ret;
-
-               bitmap_copy(feature->enabled, (unsigned long *)&feature_mask,
-                           feature->feature_num);
-       }
-
-       return ret;
+       return smu_cmn_send_smc_msg(smu, (en ? SMU_MSG_EnableAllSmuFeatures :
+                                         SMU_MSG_DisableAllSmuFeatures), NULL);
 }
 
 int smu_v11_0_notify_display_change(struct smu_context *smu)
 
 static int vangogh_system_features_control(struct smu_context *smu, bool en)
 {
        struct amdgpu_device *adev = smu->adev;
-       struct smu_feature *feature = &smu->smu_feature;
-       uint64_t feature_mask;
        int ret = 0;
 
        if (adev->pm.fw_version >= 0x43f1700 && !en)
                ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_RlcPowerNotify,
                                                      RLC_STATUS_OFF, NULL);
 
-       bitmap_zero(feature->enabled, feature->feature_num);
-
-       if (!en)
-               return ret;
-
-       ret = smu_cmn_get_enabled_mask(smu, &feature_mask);
-       if (ret)
-               return ret;
-
-       bitmap_copy(feature->enabled, (unsigned long *)&feature_mask,
-                   feature->feature_num);
-
-       return 0;
+       return ret;
 }
 
 static int vangogh_post_smu_init(struct smu_context *smu)
 
 int smu_v13_0_system_features_control(struct smu_context *smu,
                                      bool en)
 {
-       struct smu_feature *feature = &smu->smu_feature;
-       uint64_t feature_mask;
-       int ret = 0;
-
-       ret = smu_cmn_send_smc_msg(smu, (en ? SMU_MSG_EnableAllSmuFeatures :
-                                        SMU_MSG_DisableAllSmuFeatures), NULL);
-       if (ret)
-               return ret;
-
-       bitmap_zero(feature->enabled, feature->feature_num);
-
-       if (en) {
-               ret = smu_cmn_get_enabled_mask(smu, &feature_mask);
-               if (ret)
-                       return ret;
-
-               bitmap_copy(feature->enabled, (unsigned long *)&feature_mask,
-                           feature->feature_num);
-       }
-
-       return ret;
+       return smu_cmn_send_smc_msg(smu, (en ? SMU_MSG_EnableAllSmuFeatures :
+                                         SMU_MSG_DisableAllSmuFeatures), NULL);
 }
 
 int smu_v13_0_notify_display_change(struct smu_context *smu)
 
 
 static int yellow_carp_system_features_control(struct smu_context *smu, bool en)
 {
-       struct smu_feature *feature = &smu->smu_feature;
        struct amdgpu_device *adev = smu->adev;
-       uint64_t feature_mask;
        int ret = 0;
 
        if (!en && !adev->in_s0ix)
                ret = smu_cmn_send_smc_msg(smu, SMU_MSG_PrepareMp1ForUnload, NULL);
 
-       bitmap_zero(feature->enabled, feature->feature_num);
-
-       if (!en)
-               return ret;
-
-       ret = smu_cmn_get_enabled_mask(smu, &feature_mask);
-       if (ret)
-               return ret;
-
-       bitmap_copy(feature->enabled, (unsigned long *)&feature_mask,
-                   feature->feature_num);
-
-       return 0;
+       return ret;
 }
 
 static int yellow_carp_dpm_set_vcn_enable(struct smu_context *smu, bool enable)
 
 int smu_cmn_feature_is_enabled(struct smu_context *smu,
                               enum smu_feature_mask mask)
 {
-       struct smu_feature *feature = &smu->smu_feature;
        struct amdgpu_device *adev = smu->adev;
+       uint64_t enabled_features;
        int feature_id;
 
        if (smu->is_apu && adev->family < AMDGPU_FAMILY_VGH)
        if (feature_id < 0)
                return 0;
 
-       WARN_ON(feature_id > feature->feature_num);
+       if (smu_cmn_get_enabled_mask(smu, &enabled_features)) {
+               dev_err(adev->dev, "Failed to retrieve enabled ppfeatures!\n");
+               return 0;
+       }
 
-       return test_bit(feature_id, feature->enabled);
+       return test_bit(feature_id, (unsigned long *)&enabled_features);
 }
 
 bool smu_cmn_clk_dpm_is_enabled(struct smu_context *smu,
 int smu_cmn_get_enabled_mask(struct smu_context *smu,
                             uint64_t *feature_mask)
 {
-       struct smu_feature *feature = &smu->smu_feature;
        struct amdgpu_device *adev = smu->adev;
        uint32_t *feature_mask_high;
        uint32_t *feature_mask_low;
        if (!feature_mask)
                return -EINVAL;
 
-       if (!bitmap_empty(feature->enabled, feature->feature_num)) {
-               bitmap_copy((unsigned long *)feature_mask,
-                            feature->enabled,
-                            feature->feature_num);
-               return 0;
-       }
-
        feature_mask_low = &((uint32_t *)feature_mask)[0];
        feature_mask_high = &((uint32_t *)feature_mask)[1];
 
                                        uint64_t feature_mask,
                                        bool enabled)
 {
-       struct smu_feature *feature = &smu->smu_feature;
        int ret = 0;
 
        if (enabled) {
                                                  SMU_MSG_EnableSmuFeaturesHigh,
                                                  upper_32_bits(feature_mask),
                                                  NULL);
-               if (ret)
-                       return ret;
        } else {
                ret = smu_cmn_send_smc_msg_with_param(smu,
                                                  SMU_MSG_DisableSmuFeaturesLow,
                                                  SMU_MSG_DisableSmuFeaturesHigh,
                                                  upper_32_bits(feature_mask),
                                                  NULL);
-               if (ret)
-                       return ret;
        }
 
-       if (enabled)
-               bitmap_or(feature->enabled, feature->enabled,
-                               (unsigned long *)(&feature_mask), SMU_FEATURE_MAX);
-       else
-               bitmap_andnot(feature->enabled, feature->enabled,
-                               (unsigned long *)(&feature_mask), SMU_FEATURE_MAX);
-
        return ret;
 }
 
                                enum smu_feature_mask mask,
                                bool enable)
 {
-       struct smu_feature *feature = &smu->smu_feature;
        int feature_id;
 
        feature_id = smu_cmn_to_asic_specific_index(smu,
        if (feature_id < 0)
                return -EINVAL;
 
-       WARN_ON(feature_id > feature->feature_num);
-
        return smu_cmn_feature_update_enable_state(smu,
                                               1ULL << feature_id,
                                               enable);
                                                bool no_hw_disablement,
                                                enum smu_feature_mask mask)
 {
-       struct smu_feature *feature = &smu->smu_feature;
        uint64_t features_to_disable = U64_MAX;
        int skipped_feature_id;
 
                features_to_disable &= ~(1ULL << skipped_feature_id);
        }
 
-       if (no_hw_disablement) {
-               bitmap_andnot(feature->enabled, feature->enabled,
-                               (unsigned long *)(&features_to_disable), SMU_FEATURE_MAX);
+       if (no_hw_disablement)
                return 0;
-       } else {
-               return smu_cmn_feature_update_enable_state(smu,
-                                                          features_to_disable,
-                                                          0);
-       }
+
+       return smu_cmn_feature_update_enable_state(smu,
+                                                  features_to_disable,
+                                                  0);
 }
 
 int smu_cmn_get_smc_version(struct smu_context *smu,