aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0937-drm-amd-powerplay-add-all-blocks-clockgating-support.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0937-drm-amd-powerplay-add-all-blocks-clockgating-support.patch')
-rw-r--r--common/recipes-kernel/linux/files/0937-drm-amd-powerplay-add-all-blocks-clockgating-support.patch126
1 files changed, 126 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0937-drm-amd-powerplay-add-all-blocks-clockgating-support.patch b/common/recipes-kernel/linux/files/0937-drm-amd-powerplay-add-all-blocks-clockgating-support.patch
new file mode 100644
index 00000000..77396154
--- /dev/null
+++ b/common/recipes-kernel/linux/files/0937-drm-amd-powerplay-add-all-blocks-clockgating-support.patch
@@ -0,0 +1,126 @@
+From a3e67c37baba1d9fb9fa3fa3a72fd9dbe9eab346 Mon Sep 17 00:00:00 2001
+From: Eric Huang <JinHuiEric.Huang@amd.com>
+Date: Tue, 9 Feb 2016 16:26:00 -0500
+Subject: [PATCH 0937/1110] drm/amd/powerplay: add all blocks clockgating
+ support through SMU/powerplay
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+Acked-by: Christian König <christian.koenig@amd.com>
+Signed-off-by: Eric Huang <JinHuiEric.Huang@amd.com>
+---
+ drivers/gpu/drm/amd/powerplay/amd_powerplay.c | 81 +++++++++++++++++++++++
+ drivers/gpu/drm/amd/powerplay/inc/amd_powerplay.h | 3 +
+ 2 files changed, 84 insertions(+)
+
+diff --git a/drivers/gpu/drm/amd/powerplay/amd_powerplay.c b/drivers/gpu/drm/amd/powerplay/amd_powerplay.c
+index 9d22900..9c742e0 100644
+--- a/drivers/gpu/drm/amd/powerplay/amd_powerplay.c
++++ b/drivers/gpu/drm/amd/powerplay/amd_powerplay.c
+@@ -180,6 +180,87 @@ static void pp_print_status(void *handle)
+ static int pp_set_clockgating_state(void *handle,
+ enum amd_clockgating_state state)
+ {
++ struct pp_hwmgr *hwmgr;
++ uint32_t msg_id, pp_state;
++
++ if (handle == NULL)
++ return -EINVAL;
++
++ hwmgr = ((struct pp_instance *)handle)->hwmgr;
++
++ if (hwmgr == NULL || hwmgr->hwmgr_func == NULL ||
++ hwmgr->hwmgr_func->update_clock_gatings == NULL)
++ return -EINVAL;
++
++ if (state == AMD_CG_STATE_UNGATE)
++ pp_state = 0;
++ else
++ pp_state = PP_STATE_CG | PP_STATE_LS;
++
++ /* Enable/disable GFX blocks clock gating through SMU */
++ msg_id = PP_CG_MSG_ID(PP_GROUP_GFX,
++ PP_BLOCK_GFX_CG,
++ PP_STATE_SUPPORT_CG | PP_STATE_SUPPORT_LS,
++ pp_state);
++ hwmgr->hwmgr_func->update_clock_gatings(hwmgr, &msg_id);
++ msg_id = PP_CG_MSG_ID(PP_GROUP_GFX,
++ PP_BLOCK_GFX_3D,
++ PP_STATE_SUPPORT_CG | PP_STATE_SUPPORT_LS,
++ pp_state);
++ hwmgr->hwmgr_func->update_clock_gatings(hwmgr, &msg_id);
++ msg_id = PP_CG_MSG_ID(PP_GROUP_GFX,
++ PP_BLOCK_GFX_RLC,
++ PP_STATE_SUPPORT_CG | PP_STATE_SUPPORT_LS,
++ pp_state);
++ hwmgr->hwmgr_func->update_clock_gatings(hwmgr, &msg_id);
++ msg_id = PP_CG_MSG_ID(PP_GROUP_GFX,
++ PP_BLOCK_GFX_CP,
++ PP_STATE_SUPPORT_CG | PP_STATE_SUPPORT_LS,
++ pp_state);
++ hwmgr->hwmgr_func->update_clock_gatings(hwmgr, &msg_id);
++ msg_id = PP_CG_MSG_ID(PP_GROUP_GFX,
++ PP_BLOCK_GFX_MG,
++ PP_STATE_SUPPORT_CG | PP_STATE_SUPPORT_LS,
++ pp_state);
++ hwmgr->hwmgr_func->update_clock_gatings(hwmgr, &msg_id);
++
++ /* Enable/disable System blocks clock gating through SMU */
++ msg_id = PP_CG_MSG_ID(PP_GROUP_SYS,
++ PP_BLOCK_SYS_BIF,
++ PP_STATE_SUPPORT_CG | PP_STATE_SUPPORT_LS,
++ pp_state);
++ hwmgr->hwmgr_func->update_clock_gatings(hwmgr, &msg_id);
++ msg_id = PP_CG_MSG_ID(PP_GROUP_SYS,
++ PP_BLOCK_SYS_BIF,
++ PP_STATE_SUPPORT_CG | PP_STATE_SUPPORT_LS,
++ pp_state);
++ hwmgr->hwmgr_func->update_clock_gatings(hwmgr, &msg_id);
++ msg_id = PP_CG_MSG_ID(PP_GROUP_SYS,
++ PP_BLOCK_SYS_MC,
++ PP_STATE_SUPPORT_CG | PP_STATE_SUPPORT_LS,
++ pp_state);
++ hwmgr->hwmgr_func->update_clock_gatings(hwmgr, &msg_id);
++ msg_id = PP_CG_MSG_ID(PP_GROUP_SYS,
++ PP_BLOCK_SYS_ROM,
++ PP_STATE_SUPPORT_CG | PP_STATE_SUPPORT_LS,
++ pp_state);
++ hwmgr->hwmgr_func->update_clock_gatings(hwmgr, &msg_id);
++ msg_id = PP_CG_MSG_ID(PP_GROUP_SYS,
++ PP_BLOCK_SYS_DRM,
++ PP_STATE_SUPPORT_CG | PP_STATE_SUPPORT_LS,
++ pp_state);
++ hwmgr->hwmgr_func->update_clock_gatings(hwmgr, &msg_id);
++ msg_id = PP_CG_MSG_ID(PP_GROUP_SYS,
++ PP_BLOCK_SYS_HDP,
++ PP_STATE_SUPPORT_CG | PP_STATE_SUPPORT_LS,
++ pp_state);
++ hwmgr->hwmgr_func->update_clock_gatings(hwmgr, &msg_id);
++ msg_id = PP_CG_MSG_ID(PP_GROUP_SYS,
++ PP_BLOCK_SYS_SDMA,
++ PP_STATE_SUPPORT_CG | PP_STATE_SUPPORT_LS,
++ pp_state);
++ hwmgr->hwmgr_func->update_clock_gatings(hwmgr, &msg_id);
++
+ return 0;
+ }
+
+diff --git a/drivers/gpu/drm/amd/powerplay/inc/amd_powerplay.h b/drivers/gpu/drm/amd/powerplay/inc/amd_powerplay.h
+index bbe02ec..e5356cf 100644
+--- a/drivers/gpu/drm/amd/powerplay/inc/amd_powerplay.h
++++ b/drivers/gpu/drm/amd/powerplay/inc/amd_powerplay.h
+@@ -288,6 +288,9 @@ struct pp_states_info {
+
+ #define PP_BLOCK_GFX_CG 0x01
+ #define PP_BLOCK_GFX_MG 0x02
++#define PP_BLOCK_GFX_3D 0x04
++#define PP_BLOCK_GFX_RLC 0x08
++#define PP_BLOCK_GFX_CP 0x10
+ #define PP_BLOCK_SYS_BIF 0x01
+ #define PP_BLOCK_SYS_MC 0x02
+ #define PP_BLOCK_SYS_ROM 0x04
+--
+2.7.4
+