aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1128-drm-amd-powerplay-support-Vega10-fan-table-V3.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1128-drm-amd-powerplay-support-Vega10-fan-table-V3.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1128-drm-amd-powerplay-support-Vega10-fan-table-V3.patch159
1 files changed, 159 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1128-drm-amd-powerplay-support-Vega10-fan-table-V3.patch b/meta-amd-bsp/recipes-kernel/linux-4.19/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/meta-amd-bsp/recipes-kernel/linux-4.19/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
+