drm/amdgpu: Add kfd2kgd.set_compute_idle interface
This allows automatic switching to the compute power profile depending on compute activity. Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com> Reviewed-by: Eric Huang <JinHuiEric.Huang@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
This commit is contained in:

committed by
Oded Gabbay

parent
39e7f33186
commit
01c097dbfc
@@ -488,6 +488,14 @@ err:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void amdgpu_amdkfd_set_compute_idle(struct kgd_dev *kgd, bool idle)
|
||||||
|
{
|
||||||
|
struct amdgpu_device *adev = (struct amdgpu_device *)kgd;
|
||||||
|
|
||||||
|
amdgpu_dpm_switch_power_profile(adev,
|
||||||
|
PP_SMC_POWER_PROFILE_COMPUTE, !idle);
|
||||||
|
}
|
||||||
|
|
||||||
bool amdgpu_amdkfd_is_kfd_vmid(struct amdgpu_device *adev, u32 vmid)
|
bool amdgpu_amdkfd_is_kfd_vmid(struct amdgpu_device *adev, u32 vmid)
|
||||||
{
|
{
|
||||||
if (adev->kfd) {
|
if (adev->kfd) {
|
||||||
|
@@ -119,6 +119,7 @@ int amdgpu_amdkfd_evict_userptr(struct kgd_mem *mem, struct mm_struct *mm);
|
|||||||
int amdgpu_amdkfd_submit_ib(struct kgd_dev *kgd, enum kgd_engine_type engine,
|
int amdgpu_amdkfd_submit_ib(struct kgd_dev *kgd, enum kgd_engine_type engine,
|
||||||
uint32_t vmid, uint64_t gpu_addr,
|
uint32_t vmid, uint64_t gpu_addr,
|
||||||
uint32_t *ib_cmd, uint32_t ib_len);
|
uint32_t *ib_cmd, uint32_t ib_len);
|
||||||
|
void amdgpu_amdkfd_set_compute_idle(struct kgd_dev *kgd, bool idle);
|
||||||
|
|
||||||
struct kfd2kgd_calls *amdgpu_amdkfd_gfx_7_get_functions(void);
|
struct kfd2kgd_calls *amdgpu_amdkfd_gfx_7_get_functions(void);
|
||||||
struct kfd2kgd_calls *amdgpu_amdkfd_gfx_8_0_get_functions(void);
|
struct kfd2kgd_calls *amdgpu_amdkfd_gfx_8_0_get_functions(void);
|
||||||
|
@@ -219,7 +219,8 @@ static const struct kfd2kgd_calls kfd2kgd = {
|
|||||||
.submit_ib = amdgpu_amdkfd_submit_ib,
|
.submit_ib = amdgpu_amdkfd_submit_ib,
|
||||||
.get_vm_fault_info = amdgpu_amdkfd_gpuvm_get_vm_fault_info,
|
.get_vm_fault_info = amdgpu_amdkfd_gpuvm_get_vm_fault_info,
|
||||||
.read_vmid_from_vmfault_reg = read_vmid_from_vmfault_reg,
|
.read_vmid_from_vmfault_reg = read_vmid_from_vmfault_reg,
|
||||||
.gpu_recover = amdgpu_amdkfd_gpu_reset
|
.gpu_recover = amdgpu_amdkfd_gpu_reset,
|
||||||
|
.set_compute_idle = amdgpu_amdkfd_set_compute_idle
|
||||||
};
|
};
|
||||||
|
|
||||||
struct kfd2kgd_calls *amdgpu_amdkfd_gfx_7_get_functions(void)
|
struct kfd2kgd_calls *amdgpu_amdkfd_gfx_7_get_functions(void)
|
||||||
|
@@ -177,7 +177,8 @@ static const struct kfd2kgd_calls kfd2kgd = {
|
|||||||
.invalidate_tlbs_vmid = invalidate_tlbs_vmid,
|
.invalidate_tlbs_vmid = invalidate_tlbs_vmid,
|
||||||
.submit_ib = amdgpu_amdkfd_submit_ib,
|
.submit_ib = amdgpu_amdkfd_submit_ib,
|
||||||
.get_vm_fault_info = amdgpu_amdkfd_gpuvm_get_vm_fault_info,
|
.get_vm_fault_info = amdgpu_amdkfd_gpuvm_get_vm_fault_info,
|
||||||
.gpu_recover = amdgpu_amdkfd_gpu_reset
|
.gpu_recover = amdgpu_amdkfd_gpu_reset,
|
||||||
|
.set_compute_idle = amdgpu_amdkfd_set_compute_idle
|
||||||
};
|
};
|
||||||
|
|
||||||
struct kfd2kgd_calls *amdgpu_amdkfd_gfx_8_0_get_functions(void)
|
struct kfd2kgd_calls *amdgpu_amdkfd_gfx_8_0_get_functions(void)
|
||||||
|
@@ -213,7 +213,8 @@ static const struct kfd2kgd_calls kfd2kgd = {
|
|||||||
.invalidate_tlbs = invalidate_tlbs,
|
.invalidate_tlbs = invalidate_tlbs,
|
||||||
.invalidate_tlbs_vmid = invalidate_tlbs_vmid,
|
.invalidate_tlbs_vmid = invalidate_tlbs_vmid,
|
||||||
.submit_ib = amdgpu_amdkfd_submit_ib,
|
.submit_ib = amdgpu_amdkfd_submit_ib,
|
||||||
.gpu_recover = amdgpu_amdkfd_gpu_reset
|
.gpu_recover = amdgpu_amdkfd_gpu_reset,
|
||||||
|
.set_compute_idle = amdgpu_amdkfd_set_compute_idle
|
||||||
};
|
};
|
||||||
|
|
||||||
struct kfd2kgd_calls *amdgpu_amdkfd_gfx_9_0_get_functions(void)
|
struct kfd2kgd_calls *amdgpu_amdkfd_gfx_9_0_get_functions(void)
|
||||||
|
@@ -282,6 +282,9 @@ struct tile_config {
|
|||||||
*
|
*
|
||||||
* @gpu_recover: let kgd reset gpu after kfd detect CPC hang
|
* @gpu_recover: let kgd reset gpu after kfd detect CPC hang
|
||||||
*
|
*
|
||||||
|
* @set_compute_idle: Indicates that compute is idle on a device. This
|
||||||
|
* can be used to change power profiles depending on compute activity.
|
||||||
|
*
|
||||||
* This structure contains function pointers to services that the kgd driver
|
* This structure contains function pointers to services that the kgd driver
|
||||||
* provides to amdkfd driver.
|
* provides to amdkfd driver.
|
||||||
*
|
*
|
||||||
@@ -403,6 +406,8 @@ struct kfd2kgd_calls {
|
|||||||
uint32_t (*read_vmid_from_vmfault_reg)(struct kgd_dev *kgd);
|
uint32_t (*read_vmid_from_vmfault_reg)(struct kgd_dev *kgd);
|
||||||
|
|
||||||
void (*gpu_recover)(struct kgd_dev *kgd);
|
void (*gpu_recover)(struct kgd_dev *kgd);
|
||||||
|
|
||||||
|
void (*set_compute_idle)(struct kgd_dev *kgd, bool idle);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user