Commit f78c581e authored by Evan Quan's avatar Evan Quan Committed by Alex Deucher

drm/amd/powerplay: use hardware fan control if no powerplay fan table

Otherwise, you may get divided-by-zero error or corrput the SMU fan
control feature.
Signed-off-by: default avatarEvan Quan <evan.quan@amd.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Tested-by: default avatarSlava Abramov <slava.abramov@amd.com>
Acked-by: default avatarSlava Abramov <slava.abramov@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
parent 665d6d4e
...@@ -916,8 +916,10 @@ static int init_thermal_controller( ...@@ -916,8 +916,10 @@ static int init_thermal_controller(
PHM_PlatformCaps_ThermalController PHM_PlatformCaps_ThermalController
); );
if (0 == powerplay_table->usFanTableOffset) if (0 == powerplay_table->usFanTableOffset) {
hwmgr->thermal_controller.use_hw_fan_control = 1;
return 0; return 0;
}
fan_table = (const PPTable_Generic_SubTable_Header *) fan_table = (const PPTable_Generic_SubTable_Header *)
(((unsigned long)powerplay_table) + (((unsigned long)powerplay_table) +
......
...@@ -694,6 +694,7 @@ struct pp_thermal_controller_info { ...@@ -694,6 +694,7 @@ struct pp_thermal_controller_info {
uint8_t ucType; uint8_t ucType;
uint8_t ucI2cLine; uint8_t ucI2cLine;
uint8_t ucI2cAddress; uint8_t ucI2cAddress;
uint8_t use_hw_fan_control;
struct pp_fan_info fanInfo; struct pp_fan_info fanInfo;
struct pp_advance_fan_control_parameters advanceFanControlParameters; struct pp_advance_fan_control_parameters advanceFanControlParameters;
}; };
......
...@@ -2092,6 +2092,10 @@ static int polaris10_thermal_setup_fan_table(struct pp_hwmgr *hwmgr) ...@@ -2092,6 +2092,10 @@ static int polaris10_thermal_setup_fan_table(struct pp_hwmgr *hwmgr)
return 0; return 0;
} }
/* use hardware fan control */
if (hwmgr->thermal_controller.use_hw_fan_control)
return 0;
tmp64 = hwmgr->thermal_controller.advanceFanControlParameters. tmp64 = hwmgr->thermal_controller.advanceFanControlParameters.
usPWMMin * duty100; usPWMMin * duty100;
do_div(tmp64, 10000); do_div(tmp64, 10000);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment