@@ -421,6 +421,36 @@ static int sienna_cichlid_store_powerplay_table(struct smu_context *smu)
421421 return 0 ;
422422}
423423
424+ static int sienna_cichlid_patch_pptable_quirk (struct smu_context * smu )
425+ {
426+ struct amdgpu_device * adev = smu -> adev ;
427+ uint32_t * board_reserved ;
428+ uint16_t * freq_table_gfx ;
429+ uint32_t i ;
430+
431+ /* Fix some OEM SKU specific stability issues */
432+ GET_PPTABLE_MEMBER (BoardReserved , & board_reserved );
433+ if ((adev -> pdev -> device == 0x73DF ) &&
434+ (adev -> pdev -> revision == 0XC3 ) &&
435+ (adev -> pdev -> subsystem_device == 0x16C2 ) &&
436+ (adev -> pdev -> subsystem_vendor == 0x1043 ))
437+ board_reserved [0 ] = 1387 ;
438+
439+ GET_PPTABLE_MEMBER (FreqTableGfx , & freq_table_gfx );
440+ if ((adev -> pdev -> device == 0x73DF ) &&
441+ (adev -> pdev -> revision == 0XC3 ) &&
442+ ((adev -> pdev -> subsystem_device == 0x16C2 ) ||
443+ (adev -> pdev -> subsystem_device == 0x133C )) &&
444+ (adev -> pdev -> subsystem_vendor == 0x1043 )) {
445+ for (i = 0 ; i < NUM_GFXCLK_DPM_LEVELS ; i ++ ) {
446+ if (freq_table_gfx [i ] > 2500 )
447+ freq_table_gfx [i ] = 2500 ;
448+ }
449+ }
450+
451+ return 0 ;
452+ }
453+
424454static int sienna_cichlid_setup_pptable (struct smu_context * smu )
425455{
426456 int ret = 0 ;
@@ -441,7 +471,7 @@ static int sienna_cichlid_setup_pptable(struct smu_context *smu)
441471 if (ret )
442472 return ret ;
443473
444- return ret ;
474+ return sienna_cichlid_patch_pptable_quirk ( smu ) ;
445475}
446476
447477static int sienna_cichlid_tables_init (struct smu_context * smu )
0 commit comments