@@ -2273,8 +2273,6 @@ static int si_populate_smc_tdp_limits(struct amdgpu_device *adev,
22732273 if (scaling_factor == 0 )
22742274 return - EINVAL ;
22752275
2276- memset (smc_table , 0 , sizeof (SISLANDS_SMC_STATETABLE ));
2277-
22782276 ret = si_calculate_adjusted_tdp_limits (adev ,
22792277 false, /* ??? */
22802278 adev -> pm .dpm .tdp_adjustment ,
@@ -2283,6 +2281,12 @@ static int si_populate_smc_tdp_limits(struct amdgpu_device *adev,
22832281 if (ret )
22842282 return ret ;
22852283
2284+ if (adev -> pdev -> device == 0x6611 && adev -> pdev -> revision == 0x87 ) {
2285+ /* Workaround buggy powertune on Radeon 430 and 520. */
2286+ tdp_limit = 32 ;
2287+ near_tdp_limit = 28 ;
2288+ }
2289+
22862290 smc_table -> dpm2Params .TDPLimit =
22872291 cpu_to_be32 (si_scale_power_for_smc (tdp_limit , scaling_factor ) * 1000 );
22882292 smc_table -> dpm2Params .NearTDPLimit =
@@ -2328,16 +2332,8 @@ static int si_populate_smc_tdp_limits_2(struct amdgpu_device *adev,
23282332
23292333 if (ni_pi -> enable_power_containment ) {
23302334 SISLANDS_SMC_STATETABLE * smc_table = & si_pi -> smc_statetable ;
2331- u32 scaling_factor = si_get_smc_power_scaling_factor (adev );
23322335 int ret ;
23332336
2334- memset (smc_table , 0 , sizeof (SISLANDS_SMC_STATETABLE ));
2335-
2336- smc_table -> dpm2Params .NearTDPLimit =
2337- cpu_to_be32 (si_scale_power_for_smc (adev -> pm .dpm .near_tdp_limit_adjusted , scaling_factor ) * 1000 );
2338- smc_table -> dpm2Params .SafePowerLimit =
2339- cpu_to_be32 (si_scale_power_for_smc ((adev -> pm .dpm .near_tdp_limit_adjusted * SISLANDS_DPM2_TDP_SAFE_LIMIT_PERCENT ) / 100 , scaling_factor ) * 1000 );
2340-
23412337 ret = amdgpu_si_copy_bytes_to_smc (adev ,
23422338 (si_pi -> state_table_start +
23432339 offsetof(SISLANDS_SMC_STATETABLE , dpm2Params ) +
@@ -3473,10 +3469,15 @@ static void si_apply_state_adjust_rules(struct amdgpu_device *adev,
34733469 (adev -> pdev -> revision == 0x80 ) ||
34743470 (adev -> pdev -> revision == 0x81 ) ||
34753471 (adev -> pdev -> revision == 0x83 ) ||
3476- (adev -> pdev -> revision == 0x87 ) ||
3472+ (adev -> pdev -> revision == 0x87 &&
3473+ adev -> pdev -> device != 0x6611 ) ||
34773474 (adev -> pdev -> device == 0x6604 ) ||
34783475 (adev -> pdev -> device == 0x6605 )) {
34793476 max_sclk = 75000 ;
3477+ } else if (adev -> pdev -> revision == 0x87 &&
3478+ adev -> pdev -> device == 0x6611 ) {
3479+ /* Radeon 430 and 520 */
3480+ max_sclk = 78000 ;
34803481 }
34813482 }
34823483
@@ -7600,12 +7601,12 @@ static int si_dpm_set_interrupt_state(struct amdgpu_device *adev,
76007601 case AMDGPU_IRQ_STATE_DISABLE :
76017602 cg_thermal_int = RREG32_SMC (mmCG_THERMAL_INT );
76027603 cg_thermal_int |= CG_THERMAL_INT__THERM_INT_MASK_HIGH_MASK ;
7603- WREG32_SMC (mmCG_THERMAL_INT , cg_thermal_int );
7604+ WREG32 (mmCG_THERMAL_INT , cg_thermal_int );
76047605 break ;
76057606 case AMDGPU_IRQ_STATE_ENABLE :
76067607 cg_thermal_int = RREG32_SMC (mmCG_THERMAL_INT );
76077608 cg_thermal_int &= ~CG_THERMAL_INT__THERM_INT_MASK_HIGH_MASK ;
7608- WREG32_SMC (mmCG_THERMAL_INT , cg_thermal_int );
7609+ WREG32 (mmCG_THERMAL_INT , cg_thermal_int );
76097610 break ;
76107611 default :
76117612 break ;
@@ -7617,12 +7618,12 @@ static int si_dpm_set_interrupt_state(struct amdgpu_device *adev,
76177618 case AMDGPU_IRQ_STATE_DISABLE :
76187619 cg_thermal_int = RREG32_SMC (mmCG_THERMAL_INT );
76197620 cg_thermal_int |= CG_THERMAL_INT__THERM_INT_MASK_LOW_MASK ;
7620- WREG32_SMC (mmCG_THERMAL_INT , cg_thermal_int );
7621+ WREG32 (mmCG_THERMAL_INT , cg_thermal_int );
76217622 break ;
76227623 case AMDGPU_IRQ_STATE_ENABLE :
76237624 cg_thermal_int = RREG32_SMC (mmCG_THERMAL_INT );
76247625 cg_thermal_int &= ~CG_THERMAL_INT__THERM_INT_MASK_LOW_MASK ;
7625- WREG32_SMC (mmCG_THERMAL_INT , cg_thermal_int );
7626+ WREG32 (mmCG_THERMAL_INT , cg_thermal_int );
76267627 break ;
76277628 default :
76287629 break ;
0 commit comments