[PATCH] drm/amdgpu/powerplay: Add special avfs cases for some polaris asics (v3)

Quan, Evan Evan.Quan at amd.com
Mon Dec 10 05:41:24 UTC 2018


Reviewed-by: Evan Quan <evan.quan at amd.com>

> -----Original Message-----
> From: amd-gfx <amd-gfx-bounces at lists.freedesktop.org> On Behalf Of Alex
> Deucher
> Sent: 2018年12月8日 0:20
> To: amd-gfx at lists.freedesktop.org
> Cc: Deucher, Alexander <Alexander.Deucher at amd.com>
> Subject: [PATCH] drm/amdgpu/powerplay: Add special avfs cases for some
> polaris asics (v3)
> 
> Add special avfs handling for some polaris variants.
> 
> v2: fix copy paste typo.
> v3: fix asic rid check
> 
> Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
> ---
>  .../drm/amd/powerplay/smumgr/polaris10_smumgr.c    | 54
> ++++++++++++++++++++++
>  1 file changed, 54 insertions(+)
> 
> diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c
> b/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c
> index 94898b2da282..b41281667884 100644
> --- a/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c
> +++ b/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c
> @@ -1639,6 +1639,7 @@ static int
> polaris10_populate_avfs_parameters(struct pp_hwmgr *hwmgr)  {
>  	struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr-
> >backend);
>  	struct polaris10_smumgr *smu_data = (struct polaris10_smumgr
> *)(hwmgr->smu_backend);
> +	struct amdgpu_device *adev = hwmgr->adev;
> 
>  	SMU74_Discrete_DpmTable  *table = &(smu_data-
> >smc_state_table);
>  	int result = 0;
> @@ -1659,6 +1660,59 @@ static int
> polaris10_populate_avfs_parameters(struct pp_hwmgr *hwmgr)
>  	result = atomctrl_get_avfs_information(hwmgr, &avfs_params);
> 
>  	if (0 == result) {
> +		if (((adev->pdev->device == 0x67ef) &&
> +		     ((adev->pdev->revision == 0xe0) ||
> +		      (adev->pdev->revision == 0xe5))) ||
> +		    ((adev->pdev->device == 0x67ff) &&
> +		     ((adev->pdev->revision == 0xcf) ||
> +		      (adev->pdev->revision == 0xef) ||
> +		      (adev->pdev->revision == 0xff)))) {
> +			avfs_params.ucEnableApplyAVFS_CKS_OFF_Voltage
> = 1;
> +			if ((adev->pdev->device == 0x67ef && adev->pdev-
> >revision == 0xe5) ||
> +			    (adev->pdev->device == 0x67ff && adev->pdev-
> >revision == 0xef)) {
> +				if
> ((avfs_params.ulGB_VDROOP_TABLE_CKSOFF_a0 == 0xEA522DD3) &&
> +
> (avfs_params.ulGB_VDROOP_TABLE_CKSOFF_a1 == 0x5645A) &&
> +
> (avfs_params.ulGB_VDROOP_TABLE_CKSOFF_a2 == 0x33F9E) &&
> +
> (avfs_params.ulAVFSGB_FUSE_TABLE_CKSOFF_m1 == 0xFFFFC5CC) &&
> +
> (avfs_params.usAVFSGB_FUSE_TABLE_CKSOFF_m2 == 0x1B1A) &&
> +
> (avfs_params.ulAVFSGB_FUSE_TABLE_CKSOFF_b == 0xFFFFFCED)) {
> +
> 	avfs_params.ulGB_VDROOP_TABLE_CKSOFF_a0   = 0xF718F1D4;
> +
> 	avfs_params.ulGB_VDROOP_TABLE_CKSOFF_a1   = 0x323FD;
> +
> 	avfs_params.ulGB_VDROOP_TABLE_CKSOFF_a2   = 0x1E455;
> +
> 	avfs_params.ulAVFSGB_FUSE_TABLE_CKSOFF_m1 = 0;
> +
> 	avfs_params.usAVFSGB_FUSE_TABLE_CKSOFF_m2 = 0;
> +
> 	avfs_params.ulAVFSGB_FUSE_TABLE_CKSOFF_b  = 0x23;
> +				}
> +			}
> +		} else if (hwmgr->chip_id == CHIP_POLARIS12 && !hwmgr-
> >is_kicker) {
> +			avfs_params.ucEnableApplyAVFS_CKS_OFF_Voltage
> = 1;
> +			avfs_params.ulGB_VDROOP_TABLE_CKSOFF_a0   =
> 0xF6B024DD;
> +			avfs_params.ulGB_VDROOP_TABLE_CKSOFF_a1   =
> 0x3005E;
> +			avfs_params.ulGB_VDROOP_TABLE_CKSOFF_a2   =
> 0x18A5F;
> +			avfs_params.ulAVFSGB_FUSE_TABLE_CKSOFF_m1 =
> 0x315;
> +			avfs_params.usAVFSGB_FUSE_TABLE_CKSOFF_m2 =
> 0xFED1;
> +			avfs_params.ulAVFSGB_FUSE_TABLE_CKSOFF_b  =
> 0x3B;
> +		} else if (((adev->pdev->device == 0x67df) &&
> +			    ((adev->pdev->revision == 0xe0) ||
> +			     (adev->pdev->revision == 0xe3) ||
> +			     (adev->pdev->revision == 0xe4) ||
> +			     (adev->pdev->revision == 0xe5) ||
> +			     (adev->pdev->revision == 0xe7) ||
> +			     (adev->pdev->revision == 0xef))) ||
> +			   ((adev->pdev->device == 0x6fdf) &&
> +			    ((adev->pdev->revision == 0xef) ||
> +			     (adev->pdev->revision == 0xff))) {
> +			avfs_params.ucEnableApplyAVFS_CKS_OFF_Voltage
> = 1;
> +			avfs_params.ulGB_VDROOP_TABLE_CKSOFF_a0   =
> 0xF843B66B;
> +			avfs_params.ulGB_VDROOP_TABLE_CKSOFF_a1   =
> 0x59CB5;
> +			avfs_params.ulGB_VDROOP_TABLE_CKSOFF_a2   =
> 0xFFFF287F;
> +			avfs_params.ulAVFSGB_FUSE_TABLE_CKSOFF_m1 =
> 0;
> +			avfs_params.usAVFSGB_FUSE_TABLE_CKSOFF_m2 =
> 0xFF23;
> +			avfs_params.ulAVFSGB_FUSE_TABLE_CKSOFF_b  =
> 0x58;
> +		}
> +	}
> +
> +	if (0 == result) {
>  		table->BTCGB_VDROOP_TABLE[0].a0  =
> PP_HOST_TO_SMC_UL(avfs_params.ulGB_VDROOP_TABLE_CKSON_a0);
>  		table->BTCGB_VDROOP_TABLE[0].a1  =
> PP_HOST_TO_SMC_UL(avfs_params.ulGB_VDROOP_TABLE_CKSON_a1);
>  		table->BTCGB_VDROOP_TABLE[0].a2  =
> PP_HOST_TO_SMC_UL(avfs_params.ulGB_VDROOP_TABLE_CKSON_a2);
> --
> 2.13.6
> 
> _______________________________________________
> 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