MGPU fan boost related parameter is added.

Change-Id: Iaa6c570373d81199a07028f275b083f459952254
Signed-off-by: Evan Quan <evan.q...@amd.com>
---
 .../drm/amd/powerplay/hwmgr/vega10_pptable.h  | 24 +++++++++
 .../powerplay/hwmgr/vega10_processpptables.c  | 50 ++++++++++++++++++-
 drivers/gpu/drm/amd/powerplay/inc/hwmgr.h     |  1 +
 3 files changed, 74 insertions(+), 1 deletion(-)

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 {
        UCHAR   ucFanMaxRPM;
 } ATOM_Vega10_Fan_Table_V2;
 
+typedef struct _ATOM_Vega10_Fan_Table_V3 {
+       UCHAR   ucRevId;
+       USHORT  usFanOutputSensitivity;
+       USHORT  usFanAcousticLimitRpm;
+       USHORT  usThrottlingRPM;
+       USHORT  usTargetTemperature;
+       USHORT  usMinimumPWMLimit;
+       USHORT  usTargetGfxClk;
+       USHORT  usFanGainEdge;
+       USHORT  usFanGainHotspot;
+       USHORT  usFanGainLiquid;
+       USHORT  usFanGainVrVddc;
+       USHORT  usFanGainVrMvdd;
+       USHORT  usFanGainPlx;
+       USHORT  usFanGainHbm;
+       UCHAR   ucEnableZeroRPM;
+       USHORT  usFanStopTemperature;
+       USHORT  usFanStartTemperature;
+       UCHAR   ucFanParameters;
+       UCHAR   ucFanMinRPM;
+       UCHAR   ucFanMaxRPM;
+       USHORT  usMGpuThrottlingRPM;
+} ATOM_Vega10_Fan_Table_V3;
+
 typedef struct _ATOM_Vega10_Thermal_Controller {
        UCHAR ucRevId;
        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(
        const Vega10_PPTable_Generic_SubTable_Header *header;
        const ATOM_Vega10_Fan_Table *fan_table_v1;
        const ATOM_Vega10_Fan_Table_V2 *fan_table_v2;
+       const ATOM_Vega10_Fan_Table_V3 *fan_table_v3;
 
        thermal_controller = (ATOM_Vega10_Thermal_Controller *)
                        (((unsigned long)powerplay_table) +
@@ -207,7 +208,7 @@ static int init_thermal_controller(
                                le16_to_cpu(fan_table_v1->usFanStopTemperature);
                
hwmgr->thermal_controller.advanceFanControlParameters.usZeroRPMStartTemperature 
=
                                
le16_to_cpu(fan_table_v1->usFanStartTemperature);
-       } else if (header->ucRevId > 10) {
+       } else if (header->ucRevId == 0xb) {
                fan_table_v2 = (ATOM_Vega10_Fan_Table_V2 *)header;
 
                
hwmgr->thermal_controller.fanInfo.ucTachometerPulsesPerRevolution =
@@ -251,7 +252,54 @@ static int init_thermal_controller(
                                le16_to_cpu(fan_table_v2->usFanStopTemperature);
                
hwmgr->thermal_controller.advanceFanControlParameters.usZeroRPMStartTemperature 
=
                                
le16_to_cpu(fan_table_v2->usFanStartTemperature);
+       } else if (header->ucRevId > 0xb) {
+               fan_table_v3 = (ATOM_Vega10_Fan_Table_V3 *)header;
+
+               
hwmgr->thermal_controller.fanInfo.ucTachometerPulsesPerRevolution =
+                               fan_table_v3->ucFanParameters & 
ATOM_VEGA10_PP_FANPARAMETERS_TACHOMETER_PULSES_PER_REVOLUTION_MASK;
+               hwmgr->thermal_controller.fanInfo.ulMinRPM = 
fan_table_v3->ucFanMinRPM * 100UL;
+               hwmgr->thermal_controller.fanInfo.ulMaxRPM = 
fan_table_v3->ucFanMaxRPM * 100UL;
+               phm_cap_set(hwmgr->platform_descriptor.platformCaps,
+                               PHM_PlatformCaps_MicrocodeFanControl);
+               
hwmgr->thermal_controller.advanceFanControlParameters.usFanOutputSensitivity =
+                               
le16_to_cpu(fan_table_v3->usFanOutputSensitivity);
+               
hwmgr->thermal_controller.advanceFanControlParameters.usMaxFanRPM =
+                               fan_table_v3->ucFanMaxRPM * 100UL;
+               
hwmgr->thermal_controller.advanceFanControlParameters.usFanRPMMaxLimit =
+                               le16_to_cpu(fan_table_v3->usThrottlingRPM);
+               
hwmgr->thermal_controller.advanceFanControlParameters.ulMinFanSCLKAcousticLimit 
=
+                               
le16_to_cpu(fan_table_v3->usFanAcousticLimitRpm);
+               hwmgr->thermal_controller.advanceFanControlParameters.usTMax =
+                               le16_to_cpu(fan_table_v3->usTargetTemperature);
+               hwmgr->thermal_controller.advanceFanControlParameters.usPWMMin =
+                               le16_to_cpu(fan_table_v3->usMinimumPWMLimit);
+               
hwmgr->thermal_controller.advanceFanControlParameters.ulTargetGfxClk =
+                               le16_to_cpu(fan_table_v3->usTargetGfxClk);
+               
hwmgr->thermal_controller.advanceFanControlParameters.usFanGainEdge =
+                               le16_to_cpu(fan_table_v3->usFanGainEdge);
+               
hwmgr->thermal_controller.advanceFanControlParameters.usFanGainHotspot =
+                               le16_to_cpu(fan_table_v3->usFanGainHotspot);
+               
hwmgr->thermal_controller.advanceFanControlParameters.usFanGainLiquid =
+                               le16_to_cpu(fan_table_v3->usFanGainLiquid);
+               
hwmgr->thermal_controller.advanceFanControlParameters.usFanGainVrVddc =
+                               le16_to_cpu(fan_table_v3->usFanGainVrVddc);
+               
hwmgr->thermal_controller.advanceFanControlParameters.usFanGainVrMvdd =
+                               le16_to_cpu(fan_table_v3->usFanGainVrMvdd);
+               
hwmgr->thermal_controller.advanceFanControlParameters.usFanGainPlx =
+                               le16_to_cpu(fan_table_v3->usFanGainPlx);
+               
hwmgr->thermal_controller.advanceFanControlParameters.usFanGainHbm =
+                               le16_to_cpu(fan_table_v3->usFanGainHbm);
+
+               
hwmgr->thermal_controller.advanceFanControlParameters.ucEnableZeroRPM =
+                               fan_table_v3->ucEnableZeroRPM;
+               
hwmgr->thermal_controller.advanceFanControlParameters.usZeroRPMStopTemperature =
+                               le16_to_cpu(fan_table_v3->usFanStopTemperature);
+               
hwmgr->thermal_controller.advanceFanControlParameters.usZeroRPMStartTemperature 
=
+                               
le16_to_cpu(fan_table_v3->usFanStartTemperature);
+               
hwmgr->thermal_controller.advanceFanControlParameters.usMGpuThrottlingRPMLimit =
+                               le16_to_cpu(fan_table_v3->usMGpuThrottlingRPM);
        }
+
        return 0;
 }
 
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 {
        uint32_t  ulTargetGfxClk;
        uint16_t  usZeroRPMStartTemperature;
        uint16_t  usZeroRPMStopTemperature;
+       uint16_t  usMGpuThrottlingRPMLimit;
 };
 
 struct pp_thermal_controller_info {
-- 
2.20.1

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to