diff options
author | Evan Quan <evan.quan@amd.com> | 2019-01-22 04:54:22 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2019-01-25 16:15:36 -0500 |
commit | 049d69df2db6da6203880e7da5f30900cd5825a4 (patch) | |
tree | 1fa2d9c6cc65eeffbbb0b7bb64120dfc9bc19ebf | |
parent | bc4b539e38508839a6c85d5c5ff52d32f6471fab (diff) |
drm/amd/powerplay: support Vega10 fan table V3
MGPU fan boost related parameter is added.
Signed-off-by: Evan Quan <evan.quan@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/hwmgr/vega10_pptable.h | 24 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/hwmgr/vega10_processpptables.c | 50 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/inc/hwmgr.h | 1 |
3 files changed, 74 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_pptable.h b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_pptable.h index b3e63003a789..c934e9612c1b 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_pptable.h +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_pptable.h | |||
@@ -282,6 +282,30 @@ typedef struct _ATOM_Vega10_Fan_Table_V2 { | |||
282 | UCHAR ucFanMaxRPM; | 282 | UCHAR ucFanMaxRPM; |
283 | } ATOM_Vega10_Fan_Table_V2; | 283 | } ATOM_Vega10_Fan_Table_V2; |
284 | 284 | ||
285 | typedef struct _ATOM_Vega10_Fan_Table_V3 { | ||
286 | UCHAR ucRevId; | ||
287 | USHORT usFanOutputSensitivity; | ||
288 | USHORT usFanAcousticLimitRpm; | ||
289 | USHORT usThrottlingRPM; | ||
290 | USHORT usTargetTemperature; | ||
291 | USHORT usMinimumPWMLimit; | ||
292 | USHORT usTargetGfxClk; | ||
293 | USHORT usFanGainEdge; | ||
294 | USHORT usFanGainHotspot; | ||
295 | USHORT usFanGainLiquid; | ||
296 | USHORT usFanGainVrVddc; | ||
297 | USHORT usFanGainVrMvdd; | ||
298 | USHORT usFanGainPlx; | ||
299 | USHORT usFanGainHbm; | ||
300 | UCHAR ucEnableZeroRPM; | ||
301 | USHORT usFanStopTemperature; | ||
302 | USHORT usFanStartTemperature; | ||
303 | UCHAR ucFanParameters; | ||
304 | UCHAR ucFanMinRPM; | ||
305 | UCHAR ucFanMaxRPM; | ||
306 | USHORT usMGpuThrottlingRPM; | ||
307 | } ATOM_Vega10_Fan_Table_V3; | ||
308 | |||
285 | typedef struct _ATOM_Vega10_Thermal_Controller { | 309 | typedef struct _ATOM_Vega10_Thermal_Controller { |
286 | UCHAR ucRevId; | 310 | UCHAR ucRevId; |
287 | UCHAR ucType; /* one of ATOM_VEGA10_PP_THERMALCONTROLLER_*/ | 311 | UCHAR ucType; /* one of ATOM_VEGA10_PP_THERMALCONTROLLER_*/ |
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_processpptables.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_processpptables.c index 99d596dc0e89..b6767d74dc85 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_processpptables.c +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_processpptables.c | |||
@@ -123,6 +123,7 @@ static int init_thermal_controller( | |||
123 | const Vega10_PPTable_Generic_SubTable_Header *header; | 123 | const Vega10_PPTable_Generic_SubTable_Header *header; |
124 | const ATOM_Vega10_Fan_Table *fan_table_v1; | 124 | const ATOM_Vega10_Fan_Table *fan_table_v1; |
125 | const ATOM_Vega10_Fan_Table_V2 *fan_table_v2; | 125 | const ATOM_Vega10_Fan_Table_V2 *fan_table_v2; |
126 | const ATOM_Vega10_Fan_Table_V3 *fan_table_v3; | ||
126 | 127 | ||
127 | thermal_controller = (ATOM_Vega10_Thermal_Controller *) | 128 | thermal_controller = (ATOM_Vega10_Thermal_Controller *) |
128 | (((unsigned long)powerplay_table) + | 129 | (((unsigned long)powerplay_table) + |
@@ -207,7 +208,7 @@ static int init_thermal_controller( | |||
207 | le16_to_cpu(fan_table_v1->usFanStopTemperature); | 208 | le16_to_cpu(fan_table_v1->usFanStopTemperature); |
208 | hwmgr->thermal_controller.advanceFanControlParameters.usZeroRPMStartTemperature = | 209 | hwmgr->thermal_controller.advanceFanControlParameters.usZeroRPMStartTemperature = |
209 | le16_to_cpu(fan_table_v1->usFanStartTemperature); | 210 | le16_to_cpu(fan_table_v1->usFanStartTemperature); |
210 | } else if (header->ucRevId > 10) { | 211 | } else if (header->ucRevId == 0xb) { |
211 | fan_table_v2 = (ATOM_Vega10_Fan_Table_V2 *)header; | 212 | fan_table_v2 = (ATOM_Vega10_Fan_Table_V2 *)header; |
212 | 213 | ||
213 | hwmgr->thermal_controller.fanInfo.ucTachometerPulsesPerRevolution = | 214 | hwmgr->thermal_controller.fanInfo.ucTachometerPulsesPerRevolution = |
@@ -251,7 +252,54 @@ static int init_thermal_controller( | |||
251 | le16_to_cpu(fan_table_v2->usFanStopTemperature); | 252 | le16_to_cpu(fan_table_v2->usFanStopTemperature); |
252 | hwmgr->thermal_controller.advanceFanControlParameters.usZeroRPMStartTemperature = | 253 | hwmgr->thermal_controller.advanceFanControlParameters.usZeroRPMStartTemperature = |
253 | le16_to_cpu(fan_table_v2->usFanStartTemperature); | 254 | le16_to_cpu(fan_table_v2->usFanStartTemperature); |
255 | } else if (header->ucRevId > 0xb) { | ||
256 | fan_table_v3 = (ATOM_Vega10_Fan_Table_V3 *)header; | ||
257 | |||
258 | hwmgr->thermal_controller.fanInfo.ucTachometerPulsesPerRevolution = | ||
259 | fan_table_v3->ucFanParameters & ATOM_VEGA10_PP_FANPARAMETERS_TACHOMETER_PULSES_PER_REVOLUTION_MASK; | ||
260 | hwmgr->thermal_controller.fanInfo.ulMinRPM = fan_table_v3->ucFanMinRPM * 100UL; | ||
261 | hwmgr->thermal_controller.fanInfo.ulMaxRPM = fan_table_v3->ucFanMaxRPM * 100UL; | ||
262 | phm_cap_set(hwmgr->platform_descriptor.platformCaps, | ||
263 | PHM_PlatformCaps_MicrocodeFanControl); | ||
264 | hwmgr->thermal_controller.advanceFanControlParameters.usFanOutputSensitivity = | ||
265 | le16_to_cpu(fan_table_v3->usFanOutputSensitivity); | ||
266 | hwmgr->thermal_controller.advanceFanControlParameters.usMaxFanRPM = | ||
267 | fan_table_v3->ucFanMaxRPM * 100UL; | ||
268 | hwmgr->thermal_controller.advanceFanControlParameters.usFanRPMMaxLimit = | ||
269 | le16_to_cpu(fan_table_v3->usThrottlingRPM); | ||
270 | hwmgr->thermal_controller.advanceFanControlParameters.ulMinFanSCLKAcousticLimit = | ||
271 | le16_to_cpu(fan_table_v3->usFanAcousticLimitRpm); | ||
272 | hwmgr->thermal_controller.advanceFanControlParameters.usTMax = | ||
273 | le16_to_cpu(fan_table_v3->usTargetTemperature); | ||
274 | hwmgr->thermal_controller.advanceFanControlParameters.usPWMMin = | ||
275 | le16_to_cpu(fan_table_v3->usMinimumPWMLimit); | ||
276 | hwmgr->thermal_controller.advanceFanControlParameters.ulTargetGfxClk = | ||
277 | le16_to_cpu(fan_table_v3->usTargetGfxClk); | ||
278 | hwmgr->thermal_controller.advanceFanControlParameters.usFanGainEdge = | ||
279 | le16_to_cpu(fan_table_v3->usFanGainEdge); | ||
280 | hwmgr->thermal_controller.advanceFanControlParameters.usFanGainHotspot = | ||
281 | le16_to_cpu(fan_table_v3->usFanGainHotspot); | ||
282 | hwmgr->thermal_controller.advanceFanControlParameters.usFanGainLiquid = | ||
283 | le16_to_cpu(fan_table_v3->usFanGainLiquid); | ||
284 | hwmgr->thermal_controller.advanceFanControlParameters.usFanGainVrVddc = | ||
285 | le16_to_cpu(fan_table_v3->usFanGainVrVddc); | ||
286 | hwmgr->thermal_controller.advanceFanControlParameters.usFanGainVrMvdd = | ||
287 | le16_to_cpu(fan_table_v3->usFanGainVrMvdd); | ||
288 | hwmgr->thermal_controller.advanceFanControlParameters.usFanGainPlx = | ||
289 | le16_to_cpu(fan_table_v3->usFanGainPlx); | ||
290 | hwmgr->thermal_controller.advanceFanControlParameters.usFanGainHbm = | ||
291 | le16_to_cpu(fan_table_v3->usFanGainHbm); | ||
292 | |||
293 | hwmgr->thermal_controller.advanceFanControlParameters.ucEnableZeroRPM = | ||
294 | fan_table_v3->ucEnableZeroRPM; | ||
295 | hwmgr->thermal_controller.advanceFanControlParameters.usZeroRPMStopTemperature = | ||
296 | le16_to_cpu(fan_table_v3->usFanStopTemperature); | ||
297 | hwmgr->thermal_controller.advanceFanControlParameters.usZeroRPMStartTemperature = | ||
298 | le16_to_cpu(fan_table_v3->usFanStartTemperature); | ||
299 | hwmgr->thermal_controller.advanceFanControlParameters.usMGpuThrottlingRPMLimit = | ||
300 | le16_to_cpu(fan_table_v3->usMGpuThrottlingRPM); | ||
254 | } | 301 | } |
302 | |||
255 | return 0; | 303 | return 0; |
256 | } | 304 | } |
257 | 305 | ||
diff --git a/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h b/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h index b1cd70dcd6e7..bac3d85e3b82 100644 --- a/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h +++ b/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h | |||
@@ -687,6 +687,7 @@ struct pp_advance_fan_control_parameters { | |||
687 | uint32_t ulTargetGfxClk; | 687 | uint32_t ulTargetGfxClk; |
688 | uint16_t usZeroRPMStartTemperature; | 688 | uint16_t usZeroRPMStartTemperature; |
689 | uint16_t usZeroRPMStopTemperature; | 689 | uint16_t usZeroRPMStopTemperature; |
690 | uint16_t usMGpuThrottlingRPMLimit; | ||
690 | }; | 691 | }; |
691 | 692 | ||
692 | struct pp_thermal_controller_info { | 693 | struct pp_thermal_controller_info { |