aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/0002-drm-amd-pp-Add-ACP-PG-support-in-SMU.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/0002-drm-amd-pp-Add-ACP-PG-support-in-SMU.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.19.8/0002-drm-amd-pp-Add-ACP-PG-support-in-SMU.patch115
1 files changed, 115 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/0002-drm-amd-pp-Add-ACP-PG-support-in-SMU.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/0002-drm-amd-pp-Add-ACP-PG-support-in-SMU.patch
new file mode 100644
index 00000000..55b443d0
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/0002-drm-amd-pp-Add-ACP-PG-support-in-SMU.patch
@@ -0,0 +1,115 @@
+From 16771d04dd4cc10841337572c74c46364725b8b7 Mon Sep 17 00:00:00 2001
+From: Rex Zhu <Rex.Zhu@amd.com>
+Date: Thu, 19 Jul 2018 13:49:07 +0800
+Subject: [PATCH 0002/2940] drm/amd/pp: Add ACP PG support in SMU
+
+when ACP block not enabled, we power off
+acp block to save power.
+
+Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Rex Zhu <Rex.Zhu@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/powerplay/amd_powerplay.c | 18 ++++++++++++++++
+ .../gpu/drm/amd/powerplay/hwmgr/smu8_hwmgr.c | 21 ++++++++++++++++++-
+ drivers/gpu/drm/amd/powerplay/inc/hwmgr.h | 1 +
+ 3 files changed, 39 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/amd/powerplay/amd_powerplay.c b/drivers/gpu/drm/amd/powerplay/amd_powerplay.c
+index 7a646f94b478..da4ebff5b74d 100644
+--- a/drivers/gpu/drm/amd/powerplay/amd_powerplay.c
++++ b/drivers/gpu/drm/amd/powerplay/amd_powerplay.c
+@@ -1181,6 +1181,21 @@ static int pp_dpm_powergate_gfx(void *handle, bool gate)
+ return hwmgr->hwmgr_func->powergate_gfx(hwmgr, gate);
+ }
+
++static void pp_dpm_powergate_acp(void *handle, bool gate)
++{
++ struct pp_hwmgr *hwmgr = handle;
++
++ if (!hwmgr || !hwmgr->pm_en)
++ return;
++
++ if (hwmgr->hwmgr_func->powergate_acp == NULL) {
++ pr_info("%s was not implemented.\n", __func__);
++ return;
++ }
++
++ hwmgr->hwmgr_func->powergate_acp(hwmgr, gate);
++}
++
+ static int pp_set_powergating_by_smu(void *handle,
+ uint32_t block_type, bool gate)
+ {
+@@ -1200,6 +1215,9 @@ static int pp_set_powergating_by_smu(void *handle,
+ case AMD_IP_BLOCK_TYPE_GFX:
+ ret = pp_dpm_powergate_gfx(handle, gate);
+ break;
++ case AMD_IP_BLOCK_TYPE_ACP:
++ pp_dpm_powergate_acp(handle, gate);
++ break;
+ default:
+ break;
+ }
+diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu8_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/smu8_hwmgr.c
+index c9a15baf2c10..86b6a43e1c6a 100644
+--- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu8_hwmgr.c
++++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu8_hwmgr.c
+@@ -664,8 +664,13 @@ static void smu8_init_power_gate_state(struct pp_hwmgr *hwmgr)
+ data->uvd_power_gated = false;
+ data->vce_power_gated = false;
+ data->samu_power_gated = false;
++#ifdef CONFIG_DRM_AMD_ACP
+ data->acp_power_gated = false;
+- data->pgacpinit = true;
++#else
++ smum_send_msg_to_smc(hwmgr, PPSMC_MSG_ACPPowerOFF);
++ data->acp_power_gated = true;
++#endif
++
+ }
+
+ static void smu8_init_sclk_threshold(struct pp_hwmgr *hwmgr)
+@@ -1889,6 +1894,19 @@ static int smu8_enable_disable_vce_dpm(struct pp_hwmgr *hwmgr, bool enable)
+ }
+
+
++static void smu8_dpm_powergate_acp(struct pp_hwmgr *hwmgr, bool bgate)
++{
++ struct smu8_hwmgr *data = hwmgr->backend;
++
++ if (data->acp_power_gated == bgate)
++ return;
++
++ if (bgate)
++ smum_send_msg_to_smc(hwmgr, PPSMC_MSG_ACPPowerOFF);
++ else
++ smum_send_msg_to_smc(hwmgr, PPSMC_MSG_ACPPowerON);
++}
++
+ static void smu8_dpm_powergate_uvd(struct pp_hwmgr *hwmgr, bool bgate)
+ {
+ struct smu8_hwmgr *data = hwmgr->backend;
+@@ -1954,6 +1972,7 @@ static const struct pp_hwmgr_func smu8_hwmgr_funcs = {
+ .powerdown_uvd = smu8_dpm_powerdown_uvd,
+ .powergate_uvd = smu8_dpm_powergate_uvd,
+ .powergate_vce = smu8_dpm_powergate_vce,
++ .powergate_acp = smu8_dpm_powergate_acp,
+ .get_mclk = smu8_dpm_get_mclk,
+ .get_sclk = smu8_dpm_get_sclk,
+ .patch_boot_state = smu8_dpm_patch_boot_state,
+diff --git a/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h b/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h
+index d3d96260f440..7e58a0da5ccf 100644
+--- a/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h
++++ b/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h
+@@ -247,6 +247,7 @@ struct pp_hwmgr_func {
+ int (*powerdown_uvd)(struct pp_hwmgr *hwmgr);
+ void (*powergate_vce)(struct pp_hwmgr *hwmgr, bool bgate);
+ void (*powergate_uvd)(struct pp_hwmgr *hwmgr, bool bgate);
++ void (*powergate_acp)(struct pp_hwmgr *hwmgr, bool bgate);
+ uint32_t (*get_mclk)(struct pp_hwmgr *hwmgr, bool low);
+ uint32_t (*get_sclk)(struct pp_hwmgr *hwmgr, bool low);
+ int (*power_state_set)(struct pp_hwmgr *hwmgr,
+--
+2.17.1
+