aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvan Quan <evan.quan@amd.com>2019-01-22 04:54:22 -0500
committerAlex Deucher <alexander.deucher@amd.com>2019-01-25 16:15:36 -0500
commit049d69df2db6da6203880e7da5f30900cd5825a4 (patch)
tree1fa2d9c6cc65eeffbbb0b7bb64120dfc9bc19ebf
parentbc4b539e38508839a6c85d5c5ff52d32f6471fab (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.h24
-rw-r--r--drivers/gpu/drm/amd/powerplay/hwmgr/vega10_processpptables.c50
-rw-r--r--drivers/gpu/drm/amd/powerplay/inc/hwmgr.h1
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
285typedef 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
285typedef struct _ATOM_Vega10_Thermal_Controller { 309typedef 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
692struct pp_thermal_controller_info { 693struct pp_thermal_controller_info {