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

Bernhard Froemel bfroemel at gmail.com
Mon Dec 5 10:45:34 UTC 2016


On Thu, Dec 1, 2016 at 3:59 PM, Deucher, Alexander
<Alexander.Deucher at amd.com> wrote:
>> -----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>
Tested-by: Bernhard Froemel <bfroemel at gmail.com>

Thanks, this exactly fixes one of the issues with the MacBookPro13,3:
https://lists.freedesktop.org/archives/amd-gfx/2016-November/003673.html

>
>> ---
>>  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
> _______________________________________________
> 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