Commit 04796a3e authored by Evan Quan's avatar Evan Quan Committed by Alex Deucher
Browse files

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>
parent fdafb359
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -916,8 +916,10 @@ static int init_thermal_controller(
			PHM_PlatformCaps_ThermalController
		  );

	if (0 == powerplay_table->usFanTableOffset)
	if (0 == powerplay_table->usFanTableOffset) {
		hwmgr->thermal_controller.use_hw_fan_control = 1;
		return 0;
	}

	fan_table = (const PPTable_Generic_SubTable_Header *)
		(((unsigned long)powerplay_table) +
+1 −0
Original line number Diff line number Diff line
@@ -695,6 +695,7 @@ struct pp_thermal_controller_info {
	uint8_t ucType;
	uint8_t ucI2cLine;
	uint8_t ucI2cAddress;
	uint8_t use_hw_fan_control;
	struct pp_fan_info fanInfo;
	struct pp_advance_fan_control_parameters advanceFanControlParameters;
};
+4 −0
Original line number Diff line number Diff line
@@ -2094,6 +2094,10 @@ static int polaris10_thermal_setup_fan_table(struct pp_hwmgr *hwmgr)
		return 0;
	}

	/* use hardware fan control */
	if (hwmgr->thermal_controller.use_hw_fan_control)
		return 0;

	tmp64 = hwmgr->thermal_controller.advanceFanControlParameters.
			usPWMMin * duty100;
	do_div(tmp64, 10000);