diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/3668-drm-amd-pp-Simplify-the-create-of-powerplay-instance.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.14.71/3668-drm-amd-pp-Simplify-the-create-of-powerplay-instance.patch | 212 |
1 files changed, 212 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/3668-drm-amd-pp-Simplify-the-create-of-powerplay-instance.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/3668-drm-amd-pp-Simplify-the-create-of-powerplay-instance.patch new file mode 100644 index 00000000..fba128f1 --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/3668-drm-amd-pp-Simplify-the-create-of-powerplay-instance.patch @@ -0,0 +1,212 @@ +From 51037918af74a93a52d56cd24cbb4ae8d84502d7 Mon Sep 17 00:00:00 2001 +From: Rex Zhu <Rex.Zhu@amd.com> +Date: Mon, 26 Feb 2018 19:58:49 +0800 +Subject: [PATCH 3668/4131] drm/amd/pp: Simplify the create of powerplay + instance + +use adev as input parameter to create powerplay instance +directly. delete cgs wrap layer for power play create. + +Change-Id: I9a9fe1f5bc8e13e4d7542357c1ecb328c1979814 +Reviewed-by: Alex Deucher <alexander.deucher@amd.com> +Signed-off-by: Rex Zhu <Rex.Zhu@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c | 22 ----------------- + drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c | 4 +-- + drivers/gpu/drm/amd/include/cgs_common.h | 7 ------ + drivers/gpu/drm/amd/include/kgd_pp_interface.h | 8 ------ + drivers/gpu/drm/amd/powerplay/amd_powerplay.c | 30 ++++++++++++++--------- + drivers/gpu/drm/amd/powerplay/inc/amd_powerplay.h | 2 +- + 6 files changed, 20 insertions(+), 53 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c +index 72c9a7e2..9d6e1b0 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c +@@ -42,27 +42,6 @@ struct amdgpu_cgs_device { + struct amdgpu_device *adev = \ + ((struct amdgpu_cgs_device *)cgs_device)->adev + +-static void *amdgpu_cgs_register_pp_handle(struct cgs_device *cgs_device, +- int (*call_back_func)(struct amd_pp_init *, void **)) +-{ +- CGS_FUNC_ADEV; +- struct amd_pp_init pp_init; +- struct amd_powerplay *amd_pp; +- +- if (call_back_func == NULL) +- return NULL; +- +- amd_pp = &(adev->powerplay); +- pp_init.chip_family = adev->family; +- pp_init.chip_id = adev->asic_type; +- pp_init.pm_en = (amdgpu_dpm != 0 && !amdgpu_sriov_vf(adev)) ? true : false; +- pp_init.feature_mask = amdgpu_pp_feature_mask; +- pp_init.device = cgs_device; +- if (call_back_func(&pp_init, &(amd_pp->pp_handle))) +- return NULL; +- +- return adev->powerplay.pp_handle; +-} + + static int amdgpu_cgs_alloc_gpu_mem(struct cgs_device *cgs_device, + enum cgs_gpu_mem_type type, +@@ -1233,7 +1212,6 @@ static const struct cgs_ops amdgpu_cgs_ops = { + .is_virtualization_enabled = amdgpu_cgs_is_virtualization_enabled, + .enter_safe_mode = amdgpu_cgs_enter_safe_mode, + .lock_grbm_idx = amdgpu_cgs_lock_grbm_idx, +- .register_pp_handle = amdgpu_cgs_register_pp_handle, + .set_temperature_range = amdgpu_cgs_set_temperature_range, + }; + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c +index 033fba2..825c9b9 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c +@@ -94,9 +94,7 @@ static int amdgpu_pp_early_init(void *handle) + } + + if (adev->powerplay.ip_funcs->early_init) +- ret = adev->powerplay.ip_funcs->early_init( +- amd_pp->cgs_device ? amd_pp->cgs_device : +- amd_pp->pp_handle); ++ ret = adev->powerplay.ip_funcs->early_init(adev); + + return ret; + } +diff --git a/drivers/gpu/drm/amd/include/cgs_common.h b/drivers/gpu/drm/amd/include/cgs_common.h +index 98cf4ce..e5b4823 100644 +--- a/drivers/gpu/drm/amd/include/cgs_common.h ++++ b/drivers/gpu/drm/amd/include/cgs_common.h +@@ -424,10 +424,6 @@ typedef int (*cgs_enter_safe_mode)(struct cgs_device *cgs_device, bool en); + + typedef void (*cgs_lock_grbm_idx)(struct cgs_device *cgs_device, bool lock); + +-struct amd_pp_init; +-typedef void* (*cgs_register_pp_handle)(struct cgs_device *cgs_device, +- int (*call_back_func)(struct amd_pp_init *, void **)); +- + typedef int (*cgs_set_temperature_range)(struct cgs_device *cgs_device, + int min_temperature, + int max_temperature); +@@ -467,7 +463,6 @@ struct cgs_ops { + cgs_is_virtualization_enabled_t is_virtualization_enabled; + cgs_enter_safe_mode enter_safe_mode; + cgs_lock_grbm_idx lock_grbm_idx; +- cgs_register_pp_handle register_pp_handle; + cgs_set_temperature_range set_temperature_range; + }; + +@@ -547,8 +542,6 @@ struct cgs_device + + #define cgs_lock_grbm_idx(cgs_device, lock) \ + CGS_CALL(lock_grbm_idx, cgs_device, lock) +-#define cgs_register_pp_handle(cgs_device, call_back_func) \ +- CGS_CALL(register_pp_handle, cgs_device, call_back_func) + + #define cgs_set_temperature_range(dev, min_temp, max_temp) \ + CGS_CALL(set_temperature_range, dev, min_temp, max_temp) +diff --git a/drivers/gpu/drm/amd/include/kgd_pp_interface.h b/drivers/gpu/drm/amd/include/kgd_pp_interface.h +index 22c2fa3..666a9e3 100644 +--- a/drivers/gpu/drm/amd/include/kgd_pp_interface.h ++++ b/drivers/gpu/drm/amd/include/kgd_pp_interface.h +@@ -136,14 +136,6 @@ enum amd_pp_task { + AMD_PP_TASK_MAX + }; + +-struct amd_pp_init { +- struct cgs_device *device; +- uint32_t chip_family; +- uint32_t chip_id; +- bool pm_en; +- uint32_t feature_mask; +-}; +- + enum PP_SMC_POWER_PROFILE { + PP_SMC_POWER_PROFILE_FULLSCREEN3D = 0x0, + PP_SMC_POWER_PROFILE_POWERSAVING = 0x1, +diff --git a/drivers/gpu/drm/amd/powerplay/amd_powerplay.c b/drivers/gpu/drm/amd/powerplay/amd_powerplay.c +index e772bf6..8a5eca9 100644 +--- a/drivers/gpu/drm/amd/powerplay/amd_powerplay.c ++++ b/drivers/gpu/drm/amd/powerplay/amd_powerplay.c +@@ -29,6 +29,7 @@ + #include "amd_powerplay.h" + #include "pp_instance.h" + #include "power_state.h" ++#include "amdgpu.h" + + #define PP_DPM_DISABLED 0xCCCC + +@@ -52,28 +53,30 @@ static inline int pp_check(struct pp_instance *handle) + return 0; + } + +-static int amd_powerplay_create(struct amd_pp_init *pp_init, +- void **handle) ++static int amd_powerplay_create(struct amdgpu_device *adev) + { + struct pp_instance *instance; + +- if (pp_init == NULL || handle == NULL) ++ if (adev == NULL) + return -EINVAL; + + instance = kzalloc(sizeof(struct pp_instance), GFP_KERNEL); + if (instance == NULL) + return -ENOMEM; + +- instance->chip_family = pp_init->chip_family; +- instance->chip_id = pp_init->chip_id; +- instance->pm_en = pp_init->pm_en; +- instance->feature_mask = pp_init->feature_mask; +- instance->device = pp_init->device; ++ instance->chip_family = adev->family; ++ instance->chip_id = adev->asic_type; ++ instance->pm_en = (amdgpu_dpm != 0 && !amdgpu_sriov_vf(adev)) ? true : false; ++ instance->feature_mask = amdgpu_pp_feature_mask; ++ instance->device = adev->powerplay.cgs_device; + mutex_init(&instance->pp_lock); +- *handle = instance; ++ ++ adev->powerplay.pp_handle = instance; ++ + return 0; + } + ++ + static int amd_powerplay_destroy(void *handle) + { + struct pp_instance *instance = (struct pp_instance *)handle; +@@ -93,11 +96,14 @@ static int pp_early_init(void *handle) + { + int ret; + struct pp_instance *pp_handle = NULL; ++ struct amdgpu_device *adev = (struct amdgpu_device *)handle; + +- pp_handle = cgs_register_pp_handle(handle, amd_powerplay_create); ++ ret = amd_powerplay_create(adev); + +- if (!pp_handle) +- return -EINVAL; ++ if (ret != 0) ++ return ret; ++ ++ pp_handle = adev->powerplay.pp_handle; + + ret = hwmgr_early_init(pp_handle); + if (ret) +diff --git a/drivers/gpu/drm/amd/powerplay/inc/amd_powerplay.h b/drivers/gpu/drm/amd/powerplay/inc/amd_powerplay.h +index 152e70d..fe36659 100644 +--- a/drivers/gpu/drm/amd/powerplay/inc/amd_powerplay.h ++++ b/drivers/gpu/drm/amd/powerplay/inc/amd_powerplay.h +@@ -30,6 +30,6 @@ + #include "cgs_common.h" + #include "dm_pp_interface.h" + #include "kgd_pp_interface.h" +- ++#include "amdgpu.h" + + #endif /* _AMD_POWERPLAY_H_ */ +-- +2.7.4 + |