Instead of sharing the fan table setup with Tonga, Polaris has
its own fan table setup.

Change-Id: Ib6f69b9d1dbea30b480dbe0932ac073c1aa303b2
Signed-off-by: Evan Quan <[email protected]>
Acked-by: Alex Deucher <[email protected]>
---
 .../drm/amd/pm/powerplay/hwmgr/pptable_v1_0.h | 30 ++++++++++
 .../powerplay/hwmgr/process_pptables_v1_0.c   | 58 ++++++++++++++++++-
 2 files changed, 87 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/pptable_v1_0.h 
b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/pptable_v1_0.h
index 1e870f58dd12..614f61ae214a 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/pptable_v1_0.h
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/pptable_v1_0.h
@@ -315,6 +315,36 @@ typedef struct _ATOM_Fiji_Fan_Table {
        USHORT  usReserved;
 } ATOM_Fiji_Fan_Table;
 
+typedef struct _ATOM_Polaris_Fan_Table {
+       UCHAR   ucRevId;                                                 /* 
Change this if the table format changes or version changes so that the other 
fields are not the same. */
+       UCHAR   ucTHyst;                                                 /* 
Temperature hysteresis. Integer. */
+       USHORT  usTMin;                                                  /* The 
temperature, in 0.01 centigrades, below which we just run at a minimal PWM. */
+       USHORT  usTMed;                                                  /* The 
middle temperature where we change slopes. */
+       USHORT  usTHigh;                                                 /* The 
high point above TMed for adjusting the second slope. */
+       USHORT  usPWMMin;                                                /* The 
minimum PWM value in percent (0.01% increments). */
+       USHORT  usPWMMed;                                                /* The 
PWM value (in percent) at TMed. */
+       USHORT  usPWMHigh;                                               /* The 
PWM value at THigh. */
+       USHORT  usTMax;                                                  /* The 
max temperature */
+       UCHAR   ucFanControlMode;                                 /* Legacy or 
Fuzzy Fan mode */
+       USHORT  usFanPWMMax;                                      /* Maximum 
allowed fan power in percent */
+       USHORT  usFanOutputSensitivity;           /* Sensitivity of fan 
reaction to temepature changes */
+       USHORT  usFanRPMMax;                                      /* The 
default value in RPM */
+       ULONG  ulMinFanSCLKAcousticLimit;               /* Minimum Fan 
Controller SCLK Frequency Acoustic Limit. */
+       UCHAR   ucTargetTemperature;                     /* Advanced fan 
controller target temperature. */
+       UCHAR   ucMinimumPWMLimit;                        /* The minimum PWM 
that the advanced fan controller can set.  This should be set to the highest 
PWM that will run the fan at its lowest RPM. */
+       USHORT  usFanGainEdge;
+       USHORT  usFanGainHotspot;
+       USHORT  usFanGainLiquid;
+       USHORT  usFanGainVrVddc;
+       USHORT  usFanGainVrMvdd;
+       USHORT  usFanGainPlx;
+       USHORT  usFanGainHbm;
+       UCHAR   ucEnableZeroRPM;
+       UCHAR   ucFanStopTemperature;
+       UCHAR   ucFanStartTemperature;
+       USHORT  usReserved;
+} ATOM_Polaris_Fan_Table;
+
 typedef struct _ATOM_Tonga_Thermal_Controller {
        UCHAR ucRevId;
        UCHAR ucType;              /* one of ATOM_TONGA_PP_THERMALCONTROLLER_* 
*/
diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/process_pptables_v1_0.c 
b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/process_pptables_v1_0.c
index 4fa58614e26a..4ed9f8106b2e 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/process_pptables_v1_0.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/process_pptables_v1_0.c
@@ -949,7 +949,7 @@ static int init_thermal_controller(
                        = tonga_fan_table->ucTargetTemperature;
                
hwmgr->thermal_controller.advanceFanControlParameters.ucMinimumPWMLimit
                        = tonga_fan_table->ucMinimumPWMLimit;
-       } else {
+       } else if (fan_table->ucRevId == 8) {
                const ATOM_Fiji_Fan_Table *fiji_fan_table =
                        (ATOM_Fiji_Fan_Table *)fan_table;
                hwmgr->thermal_controller.advanceFanControlParameters.ucTHyst
@@ -999,6 +999,62 @@ static int init_thermal_controller(
                        = le16_to_cpu(fiji_fan_table->usFanGainPlx);
                
hwmgr->thermal_controller.advanceFanControlParameters.usFanGainHbm
                        = le16_to_cpu(fiji_fan_table->usFanGainHbm);
+       } else if (fan_table->ucRevId >= 9) {
+               const ATOM_Polaris_Fan_Table *polaris_fan_table =
+                       (ATOM_Polaris_Fan_Table *)fan_table;
+               hwmgr->thermal_controller.advanceFanControlParameters.ucTHyst
+                       = polaris_fan_table->ucTHyst;
+               hwmgr->thermal_controller.advanceFanControlParameters.usTMin
+                       = le16_to_cpu(polaris_fan_table->usTMin);
+               hwmgr->thermal_controller.advanceFanControlParameters.usTMed
+                       = le16_to_cpu(polaris_fan_table->usTMed);
+               hwmgr->thermal_controller.advanceFanControlParameters.usTHigh
+                       = le16_to_cpu(polaris_fan_table->usTHigh);
+               hwmgr->thermal_controller.advanceFanControlParameters.usPWMMin
+                       = le16_to_cpu(polaris_fan_table->usPWMMin);
+               hwmgr->thermal_controller.advanceFanControlParameters.usPWMMed
+                       = le16_to_cpu(polaris_fan_table->usPWMMed);
+               hwmgr->thermal_controller.advanceFanControlParameters.usPWMHigh
+                       = le16_to_cpu(polaris_fan_table->usPWMHigh);
+               hwmgr->thermal_controller.advanceFanControlParameters.usTMax
+                       = le16_to_cpu(polaris_fan_table->usTMax);
+               
hwmgr->thermal_controller.advanceFanControlParameters.ucFanControlMode
+                       = polaris_fan_table->ucFanControlMode;
+               
hwmgr->thermal_controller.advanceFanControlParameters.usDefaultMaxFanPWM
+                       = le16_to_cpu(polaris_fan_table->usFanPWMMax);
+               
hwmgr->thermal_controller.advanceFanControlParameters.usDefaultFanOutputSensitivity
+                       = 4836;
+               
hwmgr->thermal_controller.advanceFanControlParameters.usFanOutputSensitivity
+                       = 
le16_to_cpu(polaris_fan_table->usFanOutputSensitivity);
+               
hwmgr->thermal_controller.advanceFanControlParameters.usDefaultMaxFanRPM
+                       = le16_to_cpu(polaris_fan_table->usFanRPMMax);
+               
hwmgr->thermal_controller.advanceFanControlParameters.ulMinFanSCLKAcousticLimit
+                       = 
(le32_to_cpu(polaris_fan_table->ulMinFanSCLKAcousticLimit) / 100); /* PPTable 
stores it in 10Khz unit for 2 decimal places.  SMC wants MHz. */
+               
hwmgr->thermal_controller.advanceFanControlParameters.ucTargetTemperature
+                       = polaris_fan_table->ucTargetTemperature;
+               
hwmgr->thermal_controller.advanceFanControlParameters.ucMinimumPWMLimit
+                       = polaris_fan_table->ucMinimumPWMLimit;
+
+               
hwmgr->thermal_controller.advanceFanControlParameters.usFanGainEdge
+                       = le16_to_cpu(polaris_fan_table->usFanGainEdge);
+               
hwmgr->thermal_controller.advanceFanControlParameters.usFanGainHotspot
+                       = le16_to_cpu(polaris_fan_table->usFanGainHotspot);
+               
hwmgr->thermal_controller.advanceFanControlParameters.usFanGainLiquid
+                       = le16_to_cpu(polaris_fan_table->usFanGainLiquid);
+               
hwmgr->thermal_controller.advanceFanControlParameters.usFanGainVrVddc
+                       = le16_to_cpu(polaris_fan_table->usFanGainVrVddc);
+               
hwmgr->thermal_controller.advanceFanControlParameters.usFanGainVrMvdd
+                       = le16_to_cpu(polaris_fan_table->usFanGainVrMvdd);
+               
hwmgr->thermal_controller.advanceFanControlParameters.usFanGainPlx
+                       = le16_to_cpu(polaris_fan_table->usFanGainPlx);
+               
hwmgr->thermal_controller.advanceFanControlParameters.usFanGainHbm
+                       = le16_to_cpu(polaris_fan_table->usFanGainHbm);
+               
hwmgr->thermal_controller.advanceFanControlParameters.ucEnableZeroRPM
+                       = le16_to_cpu(polaris_fan_table->ucEnableZeroRPM);
+               
hwmgr->thermal_controller.advanceFanControlParameters.ucFanStopTemperature
+                       = le16_to_cpu(polaris_fan_table->ucFanStopTemperature);
+               
hwmgr->thermal_controller.advanceFanControlParameters.ucFanStartTemperature
+                       = le16_to_cpu(polaris_fan_table->ucFanStartTemperature);
        }
 
        return 0;
-- 
2.28.0

_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to