diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/2053-drm-amd-powerplay-add-set_power_profile_mode-for-rav.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.19.8/2053-drm-amd-powerplay-add-set_power_profile_mode-for-rav.patch | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/2053-drm-amd-powerplay-add-set_power_profile_mode-for-rav.patch b/common/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/common/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 + |