diff options
| author | Evan Quan <evan.quan@amd.com> | 2019-06-27 11:01:04 +0800 | 
|---|---|---|
| committer | Alex Deucher <alexander.deucher@amd.com> | 2019-07-01 14:54:22 -0500 | 
| commit | 04796a3e44d4b09245706d04a79186957e9a951d (patch) | |
| tree | 182f4a345364ef6ec1229fd805b35846e0d9285a | |
| parent | fdafb3597a2cc46217d67bc68253024744af59b9 (diff) | |
| download | blackbird-op-linux-04796a3e44d4b09245706d04a79186957e9a951d.tar.gz blackbird-op-linux-04796a3e44d4b09245706d04a79186957e9a951d.zip  | |
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>
| -rw-r--r-- | drivers/gpu/drm/amd/powerplay/hwmgr/process_pptables_v1_0.c | 4 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/powerplay/inc/hwmgr.h | 1 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c | 4 | 
3 files changed, 8 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/process_pptables_v1_0.c b/drivers/gpu/drm/amd/powerplay/hwmgr/process_pptables_v1_0.c index ae64ff7153d6..1cd5a8b5cdc1 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/process_pptables_v1_0.c +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/process_pptables_v1_0.c @@ -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) + diff --git a/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h b/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h index 47dbecca5adb..c5989cb38b1b 100644 --- a/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h +++ b/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h @@ -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;  }; diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c b/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c index 196cd3a429e5..dc754447f0dd 100644 --- a/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c +++ b/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c @@ -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);  | 

