diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/1128-drm-amd-powerplay-support-Vega10-fan-table-V3.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.19.8/1128-drm-amd-powerplay-support-Vega10-fan-table-V3.patch | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/1128-drm-amd-powerplay-support-Vega10-fan-table-V3.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/1128-drm-amd-powerplay-support-Vega10-fan-table-V3.patch new file mode 100644 index 00000000..25167b85 --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/1128-drm-amd-powerplay-support-Vega10-fan-table-V3.patch @@ -0,0 +1,159 @@ +From 85e166ca058a084f829895c4f67bb4dc7806c0f5 Mon Sep 17 00:00:00 2001 +From: Evan Quan <evan.quan@amd.com> +Date: Tue, 22 Jan 2019 17:54:22 +0800 +Subject: [PATCH 1128/2940] 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> +Signed-off-by: Chaudhary Amit Kumar <Chaudharyamit.Kumar@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 + + include/drm/gpu_scheduler.h | 4 ++ + 4 files changed, 78 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 { +diff --git a/include/drm/gpu_scheduler.h b/include/drm/gpu_scheduler.h +index 1d93e4b41e6c..dfc0baa795d8 100644 +--- a/include/drm/gpu_scheduler.h ++++ b/include/drm/gpu_scheduler.h +@@ -295,6 +295,10 @@ int drm_sched_job_init(struct drm_sched_job *job, + void *owner); + void drm_sched_job_cleanup(struct drm_sched_job *job); + void drm_sched_wakeup(struct drm_gpu_scheduler *sched); ++void drm_sched_stop(struct drm_gpu_scheduler *sched); ++void drm_sched_start(struct drm_gpu_scheduler *sched, bool full_recovery); ++void drm_sched_resubmit_jobs(struct drm_gpu_scheduler *sched); ++void drm_sched_increase_karma(struct drm_sched_job *bad); + void drm_sched_hw_job_reset(struct drm_gpu_scheduler *sched, + struct drm_sched_job *job); + void drm_sched_job_recovery(struct drm_gpu_scheduler *sched); +-- +2.17.1 + |