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