> -----Original Message-----
> From: amd-gfx [mailto:amd-gfx-boun...@lists.freedesktop.org] On Behalf
> Of Hawking Zhang
> Sent: Thursday, December 01, 2016 4:16 AM
> To: amd-gfx@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.zh...@amd.com>

Reviewed-by: Alex Deucher <alexander.deuc...@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@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to