diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3135-drm-amdgpu-powerplay-add-a-new-interface-to-set-the-.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3135-drm-amdgpu-powerplay-add-a-new-interface-to-set-the-.patch | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3135-drm-amdgpu-powerplay-add-a-new-interface-to-set-the-.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3135-drm-amdgpu-powerplay-add-a-new-interface-to-set-the-.patch new file mode 100644 index 00000000..89392eb7 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3135-drm-amdgpu-powerplay-add-a-new-interface-to-set-the-.patch @@ -0,0 +1,93 @@ +From c056e7c76f4949acc006db8929de369ae487b249 Mon Sep 17 00:00:00 2001 +From: Alex Deucher <alexander.deucher@amd.com> +Date: Thu, 25 Jul 2019 09:41:53 -0500 +Subject: [PATCH 3135/4256] drm/amdgpu/powerplay: add a new interface to set + the mp1 state + +This is required for certain cases such as various GPU resets +(mode1, mode2), BACO, shutdown, unload, etc. to put the SMU into +the appropriate state for when the hw is re-initialized. + +Reviewed-by: Evan Quan <evan.quan@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/include/kgd_pp_interface.h | 8 ++++++++ + drivers/gpu/drm/amd/powerplay/amd_powerplay.c | 16 ++++++++++++++++ + drivers/gpu/drm/amd/powerplay/inc/hwmgr.h | 1 + + 3 files changed, 25 insertions(+) + +diff --git a/drivers/gpu/drm/amd/include/kgd_pp_interface.h b/drivers/gpu/drm/amd/include/kgd_pp_interface.h +index 9733bbf9bc72..95edc3d3a9c4 100644 +--- a/drivers/gpu/drm/amd/include/kgd_pp_interface.h ++++ b/drivers/gpu/drm/amd/include/kgd_pp_interface.h +@@ -171,6 +171,13 @@ enum PP_HWMON_TEMP { + PP_TEMP_MAX + }; + ++enum pp_mp1_state { ++ PP_MP1_STATE_NONE, ++ PP_MP1_STATE_SHUTDOWN, ++ PP_MP1_STATE_UNLOAD, ++ PP_MP1_STATE_RESET, ++}; ++ + #define PP_GROUP_MASK 0xF0000000 + #define PP_GROUP_SHIFT 28 + +@@ -266,6 +273,7 @@ struct amd_pm_funcs { + int (*get_power_profile_mode)(void *handle, char *buf); + int (*set_power_profile_mode)(void *handle, long *input, uint32_t size); + int (*odn_edit_dpm_table)(void *handle, uint32_t type, long *input, uint32_t size); ++ int (*set_mp1_state)(void *handle, enum pp_mp1_state mp1_state); + /* export to DC */ + u32 (*get_sclk)(void *handle, bool low); + u32 (*get_mclk)(void *handle, bool low); +diff --git a/drivers/gpu/drm/amd/powerplay/amd_powerplay.c b/drivers/gpu/drm/amd/powerplay/amd_powerplay.c +index bea1587d352d..88a2ef75b7e1 100644 +--- a/drivers/gpu/drm/amd/powerplay/amd_powerplay.c ++++ b/drivers/gpu/drm/amd/powerplay/amd_powerplay.c +@@ -924,6 +924,21 @@ static int pp_odn_edit_dpm_table(void *handle, uint32_t type, long *input, uint3 + return hwmgr->hwmgr_func->odn_edit_dpm_table(hwmgr, type, input, size); + } + ++static int pp_dpm_set_mp1_state(void *handle, enum pp_mp1_state mp1_state) ++{ ++ struct pp_hwmgr *hwmgr = handle; ++ ++ if (!hwmgr || !hwmgr->pm_en) ++ return -EINVAL; ++ ++ if (hwmgr->hwmgr_func->set_mp1_state == NULL) { ++ pr_info_ratelimited("%s was not implemented.\n", __func__); ++ return -EINVAL; ++ } ++ ++ return hwmgr->hwmgr_func->set_mp1_state(hwmgr, mp1_state); ++} ++ + static int pp_dpm_switch_power_profile(void *handle, + enum PP_SMC_POWER_PROFILE type, bool en) + { +@@ -1525,6 +1540,7 @@ static const struct amd_pm_funcs pp_dpm_funcs = { + .get_power_profile_mode = pp_get_power_profile_mode, + .set_power_profile_mode = pp_set_power_profile_mode, + .odn_edit_dpm_table = pp_odn_edit_dpm_table, ++ .set_mp1_state = pp_dpm_set_mp1_state, + .set_power_limit = pp_set_power_limit, + .get_power_limit = pp_get_power_limit, + /* export to DC */ +diff --git a/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h b/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h +index c5989cb38b1b..07fd64aad2ae 100644 +--- a/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h ++++ b/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h +@@ -344,6 +344,7 @@ struct pp_hwmgr_func { + int (*set_asic_baco_state)(struct pp_hwmgr *hwmgr, enum BACO_STATE state); + int (*get_ppfeature_status)(struct pp_hwmgr *hwmgr, char *buf); + int (*set_ppfeature_status)(struct pp_hwmgr *hwmgr, uint64_t ppfeature_masks); ++ int (*set_mp1_state)(struct pp_hwmgr *hwmgr, enum pp_mp1_state mp1_state); + }; + + struct pp_table_func { +-- +2.17.1 + |