[PATCH 2/2] drm/amdgpu/si_dpm: workaround for SI kickers

Huang Rui ray.huang at amd.com
Thu Oct 27 02:40:01 UTC 2016


On Wed, Oct 26, 2016 at 03:28:26PM -0400, Alex Deucher wrote:
> Consolidate existing quirks. Fixes stability issues
> on some kickers.
> 
> Signed-off-by: Alex Deucher <alexander.deucher at amd.com>

Acked-by: Huang Rui <ray.huang at amd.com>

> ---
>  drivers/gpu/drm/amd/amdgpu/si_dpm.c | 59 +++++++++++++++++++++++++++----------
>  1 file changed, 43 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/si_dpm.c b/drivers/gpu/drm/amd/amdgpu/si_dpm.c
> index 21ed3db..f0f2f6c 100644
> --- a/drivers/gpu/drm/amd/amdgpu/si_dpm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/si_dpm.c
> @@ -3479,6 +3479,49 @@ static void si_apply_state_adjust_rules(struct amdgpu_device *adev,
>  	int i;
>  	struct si_dpm_quirk *p = si_dpm_quirk_list;
>  
> +	/* limit all SI kickers */
> +	if (adev->asic_type == CHIP_PITCAIRN) {
> +		if ((adev->pdev->revision == 0x81) ||
> +		    (adev->pdev->device == 0x6810) ||
> +		    (adev->pdev->device == 0x6811) ||
> +		    (adev->pdev->device == 0x6816) ||
> +		    (adev->pdev->device == 0x6817) ||
> +		    (adev->pdev->device == 0x6806))
> +			max_mclk = 120000;
> +	} else if (adev->asic_type == CHIP_VERDE) {
> +		if ((adev->pdev->revision == 0x81) ||
> +		    (adev->pdev->revision == 0x83) ||
> +		    (adev->pdev->revision == 0x87) ||
> +		    (adev->pdev->device == 0x6820) ||
> +		    (adev->pdev->device == 0x6821) ||
> +		    (adev->pdev->device == 0x6822) ||
> +		    (adev->pdev->device == 0x6823) ||
> +		    (adev->pdev->device == 0x682A) ||
> +		    (adev->pdev->device == 0x682B)) {
> +			max_sclk = 75000;
> +			max_mclk = 80000;
> +		}
> +	} else if (adev->asic_type == CHIP_OLAND) {
> +		if ((adev->pdev->revision == 0xC7) ||
> +		    (adev->pdev->revision == 0x80) ||
> +		    (adev->pdev->revision == 0x81) ||
> +		    (adev->pdev->revision == 0x83) ||
> +		    (adev->pdev->device == 0x6604) ||
> +		    (adev->pdev->device == 0x6605)) {
> +			max_sclk = 75000;
> +			max_mclk = 80000;
> +		}
> +	} else if (adev->asic_type == CHIP_HAINAN) {
> +		if ((adev->pdev->revision == 0x81) ||
> +		    (adev->pdev->revision == 0x83) ||
> +		    (adev->pdev->revision == 0xC3) ||
> +		    (adev->pdev->device == 0x6664) ||
> +		    (adev->pdev->device == 0x6665) ||
> +		    (adev->pdev->device == 0x6667)) {
> +			max_sclk = 75000;
> +			max_mclk = 80000;
> +		}
> +	}
>  	/* Apply dpm quirks */
>  	while (p && p->chip_device != 0) {
>  		if (adev->pdev->vendor == p->chip_vendor &&
> @@ -3491,22 +3534,6 @@ static void si_apply_state_adjust_rules(struct amdgpu_device *adev,
>  		}
>  		++p;
>  	}
> -	/* limit mclk on all R7 370 parts for stability */
> -	if (adev->pdev->device == 0x6811 &&
> -	    adev->pdev->revision == 0x81)
> -		max_mclk = 120000;
> -	/* limit sclk/mclk on Jet parts for stability */
> -	if (adev->pdev->device == 0x6665 &&
> -	    adev->pdev->revision == 0xc3) {
> -		max_sclk = 75000;
> -		max_mclk = 80000;
> -	}
> -	/* Limit clocks for some HD8600 parts */
> -	if (adev->pdev->device == 0x6660 &&
> -	    adev->pdev->revision == 0x83) {
> -		max_sclk = 75000;
> -		max_mclk = 80000;
> -	}
>  
>  	if (rps->vce_active) {
>  		rps->evclk = adev->pm.dpm.vce_states[adev->pm.dpm.vce_level].evclk;
> -- 
> 2.5.5
> 
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx


More information about the amd-gfx mailing list