diff options
Diffstat (limited to 'meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0730-drm-amd-powerplay-tonga-enable-pcie-and-mclk-forcing.patch')
-rw-r--r-- | meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0730-drm-amd-powerplay-tonga-enable-pcie-and-mclk-forcing.patch | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0730-drm-amd-powerplay-tonga-enable-pcie-and-mclk-forcing.patch b/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0730-drm-amd-powerplay-tonga-enable-pcie-and-mclk-forcing.patch new file mode 100644 index 00000000..f3b54ff6 --- /dev/null +++ b/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0730-drm-amd-powerplay-tonga-enable-pcie-and-mclk-forcing.patch @@ -0,0 +1,87 @@ +From ca99127564cf2bc6b45bc06c05fab3f12604214c Mon Sep 17 00:00:00 2001 +From: Alex Deucher <alexander.deucher@amd.com> +Date: Wed, 11 Nov 2015 00:23:57 -0500 +Subject: [PATCH 0730/1050] drm/amd/powerplay/tonga: enable pcie and mclk + forcing for low + +When forcing the lowest state also force mclk and pcie. + +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/powerplay/hwmgr/tonga_hwmgr.c | 48 +++++++++++++++++------ + 1 file changed, 37 insertions(+), 11 deletions(-) + +diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/tonga_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/tonga_hwmgr.c +index 9a1e8bf..a9cc786 100644 +--- a/drivers/gpu/drm/amd/powerplay/hwmgr/tonga_hwmgr.c ++++ b/drivers/gpu/drm/amd/powerplay/hwmgr/tonga_hwmgr.c +@@ -3279,7 +3279,7 @@ int tonga_force_dpm_highest(struct pp_hwmgr *hwmgr) + if (PHM_READ_VFPF_INDIRECT_FIELD(hwmgr->device, CGS_IND_REG__SMC, + TARGET_AND_CURRENT_PROFILE_INDEX, CURR_MCLK_INDEX) != level) + printk(KERN_ERR "[ powerplay ] Target_and_current_Profile_Index. \ +- Curr_Sclk_Index does not match the level \n"); ++ Curr_Mclk_Index does not match the level \n"); + } + } + } +@@ -3424,21 +3424,47 @@ static uint32_t tonga_get_lowest_enable_level( + + static int tonga_force_dpm_lowest(struct pp_hwmgr *hwmgr) + { +- uint32_t level = 0; ++ uint32_t level; + tonga_hwmgr *data = (tonga_hwmgr *)(hwmgr->backend); + +- /* for now force only sclk */ +- if (0 != data->dpm_level_enable_mask.sclk_dpm_enable_mask) { +- level = tonga_get_lowest_enable_level(hwmgr, +- data->dpm_level_enable_mask.sclk_dpm_enable_mask); ++ if (0 == data->pcie_dpm_key_disabled) { ++ /* PCIE */ ++ if (data->dpm_level_enable_mask.pcie_dpm_enable_mask != 0) { ++ level = tonga_get_lowest_enable_level(hwmgr, ++ data->dpm_level_enable_mask.pcie_dpm_enable_mask); ++ PP_ASSERT_WITH_CODE((0 == tonga_dpm_force_state_pcie(hwmgr, level)), ++ "force lowest pcie dpm state failed!", return -1); ++ } ++ } ++ ++ if (0 == data->sclk_dpm_key_disabled) { ++ /* SCLK */ ++ if (0 != data->dpm_level_enable_mask.sclk_dpm_enable_mask) { ++ level = tonga_get_lowest_enable_level(hwmgr, ++ data->dpm_level_enable_mask.sclk_dpm_enable_mask); + +- PP_ASSERT_WITH_CODE((0 == tonga_dpm_force_state(hwmgr, level)), +- "force sclk dpm state failed!", return -1); ++ PP_ASSERT_WITH_CODE((0 == tonga_dpm_force_state(hwmgr, level)), ++ "force sclk dpm state failed!", return -1); + +- if (PHM_READ_VFPF_INDIRECT_FIELD(hwmgr->device, +- CGS_IND_REG__SMC, TARGET_AND_CURRENT_PROFILE_INDEX, CURR_SCLK_INDEX) != level) +- printk(KERN_ERR "[ powerplay ] Target_and_current_Profile_Index. \ ++ if (PHM_READ_VFPF_INDIRECT_FIELD(hwmgr->device, ++ CGS_IND_REG__SMC, TARGET_AND_CURRENT_PROFILE_INDEX, CURR_SCLK_INDEX) != level) ++ printk(KERN_ERR "[ powerplay ] Target_and_current_Profile_Index. \ + Curr_Sclk_Index does not match the level \n"); ++ } ++ } ++ ++ if (0 == data->mclk_dpm_key_disabled) { ++ /* MCLK */ ++ if (data->dpm_level_enable_mask.mclk_dpm_enable_mask != 0) { ++ level = tonga_get_lowest_enable_level(hwmgr, ++ data->dpm_level_enable_mask.mclk_dpm_enable_mask); ++ PP_ASSERT_WITH_CODE((0 == tonga_dpm_force_state_mclk(hwmgr, level)), ++ "force lowest mclk dpm state failed!", return -1); ++ if (PHM_READ_VFPF_INDIRECT_FIELD(hwmgr->device, CGS_IND_REG__SMC, ++ TARGET_AND_CURRENT_PROFILE_INDEX, CURR_MCLK_INDEX) != level) ++ printk(KERN_ERR "[ powerplay ] Target_and_current_Profile_Index. \ ++ Curr_Mclk_Index does not match the level \n"); ++ } + } + + return 0; +-- +1.9.1 + |