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: Evan Quan <evan.quan@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Tested-by: Slava Abramov <slava.abramov@amd.com> Acked-by: Slava Abramov <slava.abramov@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
fdafb3597a
commit
04796a3e44
|
@ -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) +
|
||||||
|
|
|
@ -695,6 +695,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;
|
||||||
};
|
};
|
||||||
|
|
|
@ -2094,6 +2094,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);
|
||||||
|
|
Loading…
Reference in New Issue