aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2053-drm-amd-powerplay-add-set_power_profile_mode-for-rav.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2053-drm-amd-powerplay-add-set_power_profile_mode-for-rav.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2053-drm-amd-powerplay-add-set_power_profile_mode-for-rav.patch100
1 files changed, 100 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2053-drm-amd-powerplay-add-set_power_profile_mode-for-rav.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2053-drm-amd-powerplay-add-set_power_profile_mode-for-rav.patch
new file mode 100644
index 00000000..b10eaa10
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2053-drm-amd-powerplay-add-set_power_profile_mode-for-rav.patch
@@ -0,0 +1,100 @@
+From 9b1c77ea60b1d9952479e3c7834166045444a4d5 Mon Sep 17 00:00:00 2001
+From: Chengming Gui <Jack.Gui@amd.com>
+Date: Mon, 13 May 2019 17:41:19 +0800
+Subject: [PATCH 2053/2940] drm/amd/powerplay: add set_power_profile_mode for
+ raven1_refresh
+
+add gfxoff_state_changed_by_workload to control gfxoff
+when set power_profile_mode
+
+Change-Id: I91895f5ea001ba5187b47b836061111b777753c4
+Signed-off-by: Chengming Gui <Jack.Gui@amd.com>
+Reviewed-by: Huang Rui <ray.huang@amd.com>
+Reviewed-by: Evan Quan <evan.quan@amd.com>
+---
+ drivers/gpu/drm/amd/powerplay/hwmgr/hwmgr.c | 1 +
+ .../gpu/drm/amd/powerplay/hwmgr/smu10_hwmgr.c | 31 +++++++++++++++++--
+ drivers/gpu/drm/amd/powerplay/inc/hwmgr.h | 1 +
+ 3 files changed, 30 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/hwmgr.c
+index 88abbe18d083..bb870796054c 100644
+--- a/drivers/gpu/drm/amd/powerplay/hwmgr/hwmgr.c
++++ b/drivers/gpu/drm/amd/powerplay/hwmgr/hwmgr.c
+@@ -92,6 +92,7 @@ int hwmgr_early_init(struct pp_hwmgr *hwmgr)
+ hwmgr_set_user_specify_caps(hwmgr);
+ hwmgr->fan_ctrl_is_in_default_mode = true;
+ hwmgr_init_workload_prority(hwmgr);
++ hwmgr->gfxoff_state_changed_by_workload = false;
+
+ switch (hwmgr->chip_family) {
+ case AMDGPU_FAMILY_CI:
+diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu10_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/smu10_hwmgr.c
+index 9a595f7525e6..e32ae9d3373c 100644
+--- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu10_hwmgr.c
++++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu10_hwmgr.c
+@@ -1258,21 +1258,46 @@ static int smu10_get_power_profile_mode(struct pp_hwmgr *hwmgr, char *buf)
+ return size;
+ }
+
++static bool smu10_is_raven1_refresh(struct pp_hwmgr *hwmgr)
++{
++ struct amdgpu_device *adev = hwmgr->adev;
++ if ((adev->asic_type == CHIP_RAVEN) &&
++ (adev->rev_id != 0x15d8) &&
++ (hwmgr->smu_version >= 0x41e2b))
++ return true;
++ else
++ return false;
++}
++
+ static int smu10_set_power_profile_mode(struct pp_hwmgr *hwmgr, long *input, uint32_t size)
+ {
+ int workload_type = 0;
++ int result = 0;
+
+ if (input[size] > PP_SMC_POWER_PROFILE_COMPUTE) {
+ pr_err("Invalid power profile mode %ld\n", input[size]);
+ return -EINVAL;
+ }
+- hwmgr->power_profile_mode = input[size];
++ if (hwmgr->power_profile_mode == input[size])
++ return 0;
+
+ /* conv PP_SMC_POWER_PROFILE* to WORKLOAD_PPLIB_*_BIT */
+ workload_type =
+- conv_power_profile_to_pplib_workload(hwmgr->power_profile_mode);
+- smum_send_msg_to_smc_with_parameter(hwmgr, PPSMC_MSG_ActiveProcessNotify,
++ conv_power_profile_to_pplib_workload(input[size]);
++ if (workload_type &&
++ smu10_is_raven1_refresh(hwmgr) &&
++ !hwmgr->gfxoff_state_changed_by_workload) {
++ smu10_gfx_off_control(hwmgr, false);
++ hwmgr->gfxoff_state_changed_by_workload = true;
++ }
++ result = smum_send_msg_to_smc_with_parameter(hwmgr, PPSMC_MSG_ActiveProcessNotify,
+ 1 << workload_type);
++ if (!result)
++ hwmgr->power_profile_mode = input[size];
++ if (workload_type && hwmgr->gfxoff_state_changed_by_workload) {
++ smu10_gfx_off_control(hwmgr, true);
++ hwmgr->gfxoff_state_changed_by_workload = false;
++ }
+
+ return 0;
+ }
+diff --git a/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h b/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h
+index 14480aeeace0..a4721ba4e5a9 100644
+--- a/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h
++++ b/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h
+@@ -783,6 +783,7 @@ struct pp_hwmgr {
+ uint32_t workload_mask;
+ uint32_t workload_prority[Workload_Policy_Max];
+ uint32_t workload_setting[Workload_Policy_Max];
++ bool gfxoff_state_changed_by_workload;
+ };
+
+ int hwmgr_early_init(struct pp_hwmgr *hwmgr);
+--
+2.17.1
+