Commit a2c120ce authored by Rex Zhu's avatar Rex Zhu Committed by Alex Deucher

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.
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarRex Zhu <Rex.Zhu@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 2eeb3a83
...@@ -42,27 +42,6 @@ struct amdgpu_cgs_device { ...@@ -42,27 +42,6 @@ struct amdgpu_cgs_device {
struct amdgpu_device *adev = \ struct amdgpu_device *adev = \
((struct amdgpu_cgs_device *)cgs_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, static int amdgpu_cgs_alloc_gpu_mem(struct cgs_device *cgs_device,
enum cgs_gpu_mem_type type, enum cgs_gpu_mem_type type,
...@@ -1233,7 +1212,6 @@ static const struct cgs_ops amdgpu_cgs_ops = { ...@@ -1233,7 +1212,6 @@ static const struct cgs_ops amdgpu_cgs_ops = {
.is_virtualization_enabled = amdgpu_cgs_is_virtualization_enabled, .is_virtualization_enabled = amdgpu_cgs_is_virtualization_enabled,
.enter_safe_mode = amdgpu_cgs_enter_safe_mode, .enter_safe_mode = amdgpu_cgs_enter_safe_mode,
.lock_grbm_idx = amdgpu_cgs_lock_grbm_idx, .lock_grbm_idx = amdgpu_cgs_lock_grbm_idx,
.register_pp_handle = amdgpu_cgs_register_pp_handle,
.set_temperature_range = amdgpu_cgs_set_temperature_range, .set_temperature_range = amdgpu_cgs_set_temperature_range,
}; };
......
...@@ -94,9 +94,7 @@ static int amdgpu_pp_early_init(void *handle) ...@@ -94,9 +94,7 @@ static int amdgpu_pp_early_init(void *handle)
} }
if (adev->powerplay.ip_funcs->early_init) if (adev->powerplay.ip_funcs->early_init)
ret = adev->powerplay.ip_funcs->early_init( ret = adev->powerplay.ip_funcs->early_init(adev);
amd_pp->cgs_device ? amd_pp->cgs_device :
amd_pp->pp_handle);
return ret; return ret;
} }
......
...@@ -424,10 +424,6 @@ typedef int (*cgs_enter_safe_mode)(struct cgs_device *cgs_device, bool en); ...@@ -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); 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, typedef int (*cgs_set_temperature_range)(struct cgs_device *cgs_device,
int min_temperature, int min_temperature,
int max_temperature); int max_temperature);
...@@ -467,7 +463,6 @@ struct cgs_ops { ...@@ -467,7 +463,6 @@ struct cgs_ops {
cgs_is_virtualization_enabled_t is_virtualization_enabled; cgs_is_virtualization_enabled_t is_virtualization_enabled;
cgs_enter_safe_mode enter_safe_mode; cgs_enter_safe_mode enter_safe_mode;
cgs_lock_grbm_idx lock_grbm_idx; cgs_lock_grbm_idx lock_grbm_idx;
cgs_register_pp_handle register_pp_handle;
cgs_set_temperature_range set_temperature_range; cgs_set_temperature_range set_temperature_range;
}; };
...@@ -547,8 +542,6 @@ struct cgs_device ...@@ -547,8 +542,6 @@ struct cgs_device
#define cgs_lock_grbm_idx(cgs_device, lock) \ #define cgs_lock_grbm_idx(cgs_device, lock) \
CGS_CALL(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) \ #define cgs_set_temperature_range(dev, min_temp, max_temp) \
CGS_CALL(set_temperature_range, dev, min_temp, max_temp) CGS_CALL(set_temperature_range, dev, min_temp, max_temp)
......
...@@ -136,14 +136,6 @@ enum amd_pp_task { ...@@ -136,14 +136,6 @@ enum amd_pp_task {
AMD_PP_TASK_MAX 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 { enum PP_SMC_POWER_PROFILE {
PP_SMC_POWER_PROFILE_FULLSCREEN3D = 0x0, PP_SMC_POWER_PROFILE_FULLSCREEN3D = 0x0,
PP_SMC_POWER_PROFILE_POWERSAVING = 0x1, PP_SMC_POWER_PROFILE_POWERSAVING = 0x1,
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include "amd_powerplay.h" #include "amd_powerplay.h"
#include "pp_instance.h" #include "pp_instance.h"
#include "power_state.h" #include "power_state.h"
#include "amdgpu.h"
#define PP_DPM_DISABLED 0xCCCC #define PP_DPM_DISABLED 0xCCCC
...@@ -52,28 +53,30 @@ static inline int pp_check(struct pp_instance *handle) ...@@ -52,28 +53,30 @@ static inline int pp_check(struct pp_instance *handle)
return 0; return 0;
} }
static int amd_powerplay_create(struct amd_pp_init *pp_init, static int amd_powerplay_create(struct amdgpu_device *adev)
void **handle)
{ {
struct pp_instance *instance; struct pp_instance *instance;
if (pp_init == NULL || handle == NULL) if (adev == NULL)
return -EINVAL; return -EINVAL;
instance = kzalloc(sizeof(struct pp_instance), GFP_KERNEL); instance = kzalloc(sizeof(struct pp_instance), GFP_KERNEL);
if (instance == NULL) if (instance == NULL)
return -ENOMEM; return -ENOMEM;
instance->chip_family = pp_init->chip_family; instance->chip_family = adev->family;
instance->chip_id = pp_init->chip_id; instance->chip_id = adev->asic_type;
instance->pm_en = pp_init->pm_en; instance->pm_en = (amdgpu_dpm != 0 && !amdgpu_sriov_vf(adev)) ? true : false;
instance->feature_mask = pp_init->feature_mask; instance->feature_mask = amdgpu_pp_feature_mask;
instance->device = pp_init->device; instance->device = adev->powerplay.cgs_device;
mutex_init(&instance->pp_lock); mutex_init(&instance->pp_lock);
*handle = instance;
adev->powerplay.pp_handle = instance;
return 0; return 0;
} }
static int amd_powerplay_destroy(void *handle) static int amd_powerplay_destroy(void *handle)
{ {
struct pp_instance *instance = (struct pp_instance *)handle; struct pp_instance *instance = (struct pp_instance *)handle;
...@@ -93,11 +96,14 @@ static int pp_early_init(void *handle) ...@@ -93,11 +96,14 @@ static int pp_early_init(void *handle)
{ {
int ret; int ret;
struct pp_instance *pp_handle = NULL; 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) if (ret != 0)
return -EINVAL; return ret;
pp_handle = adev->powerplay.pp_handle;
ret = hwmgr_early_init(pp_handle); ret = hwmgr_early_init(pp_handle);
if (ret) if (ret)
......
...@@ -30,6 +30,6 @@ ...@@ -30,6 +30,6 @@
#include "cgs_common.h" #include "cgs_common.h"
#include "dm_pp_interface.h" #include "dm_pp_interface.h"
#include "kgd_pp_interface.h" #include "kgd_pp_interface.h"
#include "amdgpu.h"
#endif /* _AMD_POWERPLAY_H_ */ #endif /* _AMD_POWERPLAY_H_ */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment