mirror of https://gitee.com/openkylin/linux.git
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>
This commit is contained in:
parent
bc4b539e38
commit
049d69df2d
|
@ -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_*/
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Reference in New Issue