@@ -275,89 +275,83 @@ static bool is_asic_secure(struct smu_context *smu)
275275}
276276
277277static int
278- navi10_get_allowed_feature_mask (struct smu_context * smu ,
279- uint32_t * feature_mask , uint32_t num )
278+ navi10_init_allowed_features (struct smu_context * smu )
280279{
281280 struct amdgpu_device * adev = smu -> adev ;
282281
283- if (num > 2 )
284- return - EINVAL ;
285-
286- memset (feature_mask , 0 , sizeof (uint32_t ) * num );
287-
288- * (uint64_t * )feature_mask |= FEATURE_MASK (FEATURE_DPM_PREFETCHER_BIT )
289- | FEATURE_MASK (FEATURE_DPM_MP0CLK_BIT )
290- | FEATURE_MASK (FEATURE_RSMU_SMN_CG_BIT )
291- | FEATURE_MASK (FEATURE_DS_SOCCLK_BIT )
292- | FEATURE_MASK (FEATURE_PPT_BIT )
293- | FEATURE_MASK (FEATURE_TDC_BIT )
294- | FEATURE_MASK (FEATURE_GFX_EDC_BIT )
295- | FEATURE_MASK (FEATURE_APCC_PLUS_BIT )
296- | FEATURE_MASK (FEATURE_VR0HOT_BIT )
297- | FEATURE_MASK (FEATURE_FAN_CONTROL_BIT )
298- | FEATURE_MASK (FEATURE_THERMAL_BIT )
299- | FEATURE_MASK (FEATURE_LED_DISPLAY_BIT )
300- | FEATURE_MASK (FEATURE_DS_LCLK_BIT )
301- | FEATURE_MASK (FEATURE_DS_DCEFCLK_BIT )
302- | FEATURE_MASK (FEATURE_FW_DSTATE_BIT )
303- | FEATURE_MASK (FEATURE_BACO_BIT )
304- | FEATURE_MASK (FEATURE_GFX_SS_BIT )
305- | FEATURE_MASK (FEATURE_APCC_DFLL_BIT )
306- | FEATURE_MASK (FEATURE_FW_CTF_BIT )
307- | FEATURE_MASK (FEATURE_OUT_OF_BAND_MONITOR_BIT )
308- | FEATURE_MASK (FEATURE_TEMP_DEPENDENT_VMIN_BIT );
282+ smu_feature_list_clear_all (smu , SMU_FEATURE_LIST_ALLOWED );
283+
284+ smu_feature_list_set_bit (smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_DPM_PREFETCHER_BIT );
285+ smu_feature_list_set_bit (smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_DPM_MP0CLK_BIT );
286+ smu_feature_list_set_bit (smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_RSMU_SMN_CG_BIT );
287+ smu_feature_list_set_bit (smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_DS_SOCCLK_BIT );
288+ smu_feature_list_set_bit (smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_PPT_BIT );
289+ smu_feature_list_set_bit (smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_TDC_BIT );
290+ smu_feature_list_set_bit (smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_GFX_EDC_BIT );
291+ smu_feature_list_set_bit (smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_APCC_PLUS_BIT );
292+ smu_feature_list_set_bit (smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_VR0HOT_BIT );
293+ smu_feature_list_set_bit (smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_FAN_CONTROL_BIT );
294+ smu_feature_list_set_bit (smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_THERMAL_BIT );
295+ smu_feature_list_set_bit (smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_LED_DISPLAY_BIT );
296+ smu_feature_list_set_bit (smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_DS_LCLK_BIT );
297+ smu_feature_list_set_bit (smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_DS_DCEFCLK_BIT );
298+ smu_feature_list_set_bit (smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_FW_DSTATE_BIT );
299+ smu_feature_list_set_bit (smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_BACO_BIT );
300+ smu_feature_list_set_bit (smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_GFX_SS_BIT );
301+ smu_feature_list_set_bit (smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_APCC_DFLL_BIT );
302+ smu_feature_list_set_bit (smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_FW_CTF_BIT );
303+ smu_feature_list_set_bit (smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_OUT_OF_BAND_MONITOR_BIT );
304+ smu_feature_list_set_bit (smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_TEMP_DEPENDENT_VMIN_BIT );
309305
310306 if (adev -> pm .pp_feature & PP_SCLK_DPM_MASK )
311- * ( uint64_t * ) feature_mask |= FEATURE_MASK ( FEATURE_DPM_GFXCLK_BIT );
307+ smu_feature_list_set_bit ( smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_DPM_GFXCLK_BIT );
312308
313309 if (adev -> pm .pp_feature & PP_PCIE_DPM_MASK )
314- * ( uint64_t * ) feature_mask |= FEATURE_MASK ( FEATURE_DPM_LINK_BIT );
310+ smu_feature_list_set_bit ( smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_DPM_LINK_BIT );
315311
316312 if (adev -> pm .pp_feature & PP_DCEFCLK_DPM_MASK )
317- * ( uint64_t * ) feature_mask |= FEATURE_MASK ( FEATURE_DPM_DCEFCLK_BIT );
313+ smu_feature_list_set_bit ( smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_DPM_DCEFCLK_BIT );
318314
319315 if (adev -> pm .pp_feature & PP_ULV_MASK )
320- * ( uint64_t * ) feature_mask |= FEATURE_MASK ( FEATURE_GFX_ULV_BIT );
316+ smu_feature_list_set_bit ( smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_GFX_ULV_BIT );
321317
322318 if (adev -> pm .pp_feature & PP_SCLK_DEEP_SLEEP_MASK )
323- * ( uint64_t * ) feature_mask |= FEATURE_MASK ( FEATURE_DS_GFXCLK_BIT );
319+ smu_feature_list_set_bit ( smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_DS_GFXCLK_BIT );
324320
325321 if (adev -> pm .pp_feature & PP_GFXOFF_MASK )
326- * ( uint64_t * ) feature_mask |= FEATURE_MASK ( FEATURE_GFXOFF_BIT );
322+ smu_feature_list_set_bit ( smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_GFXOFF_BIT );
327323
328324 if (smu -> adev -> pg_flags & AMD_PG_SUPPORT_MMHUB )
329- * ( uint64_t * ) feature_mask |= FEATURE_MASK ( FEATURE_MMHUB_PG_BIT );
325+ smu_feature_list_set_bit ( smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_MMHUB_PG_BIT );
330326
331327 if (smu -> adev -> pg_flags & AMD_PG_SUPPORT_ATHUB )
332- * ( uint64_t * ) feature_mask |= FEATURE_MASK ( FEATURE_ATHUB_PG_BIT );
328+ smu_feature_list_set_bit ( smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_ATHUB_PG_BIT );
333329
334330 if (smu -> adev -> pg_flags & AMD_PG_SUPPORT_VCN )
335- * ( uint64_t * ) feature_mask |= FEATURE_MASK ( FEATURE_VCN_PG_BIT );
331+ smu_feature_list_set_bit ( smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_VCN_PG_BIT );
336332
337333 if (smu -> adev -> pg_flags & AMD_PG_SUPPORT_JPEG )
338- * ( uint64_t * ) feature_mask |= FEATURE_MASK ( FEATURE_JPEG_PG_BIT );
334+ smu_feature_list_set_bit ( smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_JPEG_PG_BIT );
339335
340336 if (smu -> dc_controlled_by_gpio )
341- * ( uint64_t * ) feature_mask |= FEATURE_MASK ( FEATURE_ACDC_BIT );
337+ smu_feature_list_set_bit ( smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_ACDC_BIT );
342338
343339 if (adev -> pm .pp_feature & PP_SOCCLK_DPM_MASK )
344- * ( uint64_t * ) feature_mask |= FEATURE_MASK ( FEATURE_DPM_SOCCLK_BIT );
340+ smu_feature_list_set_bit ( smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_DPM_SOCCLK_BIT );
345341
346- /* DPM UCLK enablement should be skipped for navi10 A0 secure board */
347342 if (!(is_asic_secure (smu ) &&
348343 (amdgpu_ip_version (adev , MP1_HWIP , 0 ) == IP_VERSION (11 , 0 , 0 )) &&
349344 (adev -> rev_id == 0 )) &&
350- (adev -> pm .pp_feature & PP_MCLK_DPM_MASK ))
351- * (uint64_t * )feature_mask |= FEATURE_MASK (FEATURE_DPM_UCLK_BIT )
352- | FEATURE_MASK (FEATURE_MEM_VDDCI_SCALING_BIT )
353- | FEATURE_MASK (FEATURE_MEM_MVDD_SCALING_BIT );
345+ (adev -> pm .pp_feature & PP_MCLK_DPM_MASK )) {
346+ smu_feature_list_set_bit (smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_DPM_UCLK_BIT );
347+ smu_feature_list_set_bit (smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_MEM_VDDCI_SCALING_BIT );
348+ smu_feature_list_set_bit (smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_MEM_MVDD_SCALING_BIT );
349+ }
354350
355- /* DS SOCCLK enablement should be skipped for navi10 A0 secure board */
356351 if (is_asic_secure (smu ) &&
357352 (amdgpu_ip_version (adev , MP1_HWIP , 0 ) == IP_VERSION (11 , 0 , 0 )) &&
358353 (adev -> rev_id == 0 ))
359- * (uint64_t * )feature_mask &=
360- ~FEATURE_MASK (FEATURE_DS_SOCCLK_BIT );
354+ smu_feature_list_clear_bit (smu , SMU_FEATURE_LIST_ALLOWED , FEATURE_DS_SOCCLK_BIT );
361355
362356 return 0 ;
363357}
@@ -3277,7 +3271,7 @@ static int navi10_set_config_table(struct smu_context *smu,
32773271}
32783272
32793273static const struct pptable_funcs navi10_ppt_funcs = {
3280- .get_allowed_feature_mask = navi10_get_allowed_feature_mask ,
3274+ .init_allowed_features = navi10_init_allowed_features ,
32813275 .set_default_dpm_table = navi10_set_default_dpm_table ,
32823276 .dpm_set_vcn_enable = navi10_dpm_set_vcn_enable ,
32833277 .dpm_set_jpeg_enable = navi10_dpm_set_jpeg_enable ,
0 commit comments