[PATCH] drm/amd/powerplay: bypass fan table setup if no fan connected

Deucher, Alexander Alexander.Deucher at amd.com
Thu Dec 1 14:59:02 UTC 2016


> -----Original Message-----
> From: amd-gfx [mailto:amd-gfx-bounces at lists.freedesktop.org] On Behalf
> Of Hawking Zhang
> Sent: Thursday, December 01, 2016 4:16 AM
> To: amd-gfx at lists.freedesktop.org
> Cc: Zhang, Hawking
> Subject: [PATCH] drm/amd/powerplay: bypass fan table setup if no fan
> connected
> 
> If vBIOS noFan bit is set, the fan table parameters in thermal controller
> will not get initialized. The driver should avoid to use these uninitialized
> parameter to do calculation. Otherwise, it may trigger divide 0 error.
> 
> Change-Id: I76680a5ec5411f59742b65bb70eb7b4a08bda3ef
> Signed-off-by: Hawking Zhang <Hawking.Zhang at amd.com>

Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

> ---
>  drivers/gpu/drm/amd/powerplay/smumgr/fiji_smc.c      | 6 ++++++
>  drivers/gpu/drm/amd/powerplay/smumgr/iceland_smc.c   | 6 ++++++
>  drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smc.c | 6 ++++++
>  drivers/gpu/drm/amd/powerplay/smumgr/tonga_smc.c     | 6 ++++++
>  4 files changed, 24 insertions(+)
> 
> diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/fiji_smc.c
> b/drivers/gpu/drm/amd/powerplay/smumgr/fiji_smc.c
> index 34523fe..6aeb1d2 100644
> --- a/drivers/gpu/drm/amd/powerplay/smumgr/fiji_smc.c
> +++ b/drivers/gpu/drm/amd/powerplay/smumgr/fiji_smc.c
> @@ -1958,6 +1958,12 @@ int fiji_thermal_setup_fan_table(struct
> pp_hwmgr *hwmgr)
>  	int res;
>  	uint64_t tmp64;
> 
> +	if (hwmgr->thermal_controller.fanInfo.bNoFan) {
> +		phm_cap_unset(hwmgr->platform_descriptor.platformCaps,
> +			PHM_PlatformCaps_MicrocodeFanControl);
> +		return 0;
> +	}
> +
>  	if (smu_data->smu7_data.fan_table_start == 0) {
>  		phm_cap_unset(hwmgr->platform_descriptor.platformCaps,
>  				PHM_PlatformCaps_MicrocodeFanControl);
> diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/iceland_smc.c
> b/drivers/gpu/drm/amd/powerplay/smumgr/iceland_smc.c
> index b579f0c..a24971a 100644
> --- a/drivers/gpu/drm/amd/powerplay/smumgr/iceland_smc.c
> +++ b/drivers/gpu/drm/amd/powerplay/smumgr/iceland_smc.c
> @@ -2006,6 +2006,12 @@ int iceland_thermal_setup_fan_table(struct
> pp_hwmgr *hwmgr)
>  	if (!phm_cap_enabled(hwmgr->platform_descriptor.platformCaps,
> PHM_PlatformCaps_MicrocodeFanControl))
>  		return 0;
> 
> +	if (hwmgr->thermal_controller.fanInfo.bNoFan) {
> +		phm_cap_unset(hwmgr->platform_descriptor.platformCaps,
> +			PHM_PlatformCaps_MicrocodeFanControl);
> +		return 0;
> +	}
> +
>  	if (0 == smu7_data->fan_table_start) {
>  		phm_cap_unset(hwmgr->platform_descriptor.platformCaps,
> PHM_PlatformCaps_MicrocodeFanControl);
>  		return 0;
> diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smc.c
> b/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smc.c
> index 8db8e20..5190e82 100644
> --- a/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smc.c
> +++ b/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smc.c
> @@ -1885,6 +1885,12 @@ int polaris10_thermal_setup_fan_table(struct
> pp_hwmgr *hwmgr)
>  	int res;
>  	uint64_t tmp64;
> 
> +	if (hwmgr->thermal_controller.fanInfo.bNoFan) {
> +		phm_cap_unset(hwmgr->platform_descriptor.platformCaps,
> +			PHM_PlatformCaps_MicrocodeFanControl);
> +		return 0;
> +	}
> +
>  	if (smu_data->smu7_data.fan_table_start == 0) {
>  		phm_cap_unset(hwmgr->platform_descriptor.platformCaps,
>  				PHM_PlatformCaps_MicrocodeFanControl);
> diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/tonga_smc.c
> b/drivers/gpu/drm/amd/powerplay/smumgr/tonga_smc.c
> index d08f6f1..2e1493c 100644
> --- a/drivers/gpu/drm/amd/powerplay/smumgr/tonga_smc.c
> +++ b/drivers/gpu/drm/amd/powerplay/smumgr/tonga_smc.c
> @@ -2496,6 +2496,12 @@ int tonga_thermal_setup_fan_table(struct
> pp_hwmgr *hwmgr)
> 
> 	PHM_PlatformCaps_MicrocodeFanControl))
>  		return 0;
> 
> +	if (hwmgr->thermal_controller.fanInfo.bNoFan) {
> +		phm_cap_unset(hwmgr->platform_descriptor.platformCaps,
> +			PHM_PlatformCaps_MicrocodeFanControl);
> +		return 0;
> +	}
> +
>  	if (0 == smu_data->smu7_data.fan_table_start) {
>  		phm_cap_unset(hwmgr->platform_descriptor.platformCaps,
> 
> 	PHM_PlatformCaps_MicrocodeFanControl);
> --
> 2.7.4
> 
> _______________________________________________
> 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