mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-27 11:58:32 -04:00
drm/amdgpu: XGMI pstate switch initial support
Driver vote low to high pstate switch whenever there is an outstanding XGMI mapping request. Driver vote high to low pstate when all the outstanding XGMI mapping is terminated. Signed-off-by: shaoyunl <shaoyun.liu@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
@@ -34,6 +34,7 @@
|
||||
#include "amdgpu_trace.h"
|
||||
#include "amdgpu_amdkfd.h"
|
||||
#include "amdgpu_gmc.h"
|
||||
#include "amdgpu_xgmi.h"
|
||||
|
||||
/**
|
||||
* DOC: GPUVM
|
||||
@@ -2045,6 +2046,15 @@ struct amdgpu_bo_va *amdgpu_vm_bo_add(struct amdgpu_device *adev,
|
||||
INIT_LIST_HEAD(&bo_va->valids);
|
||||
INIT_LIST_HEAD(&bo_va->invalids);
|
||||
|
||||
if (bo && amdgpu_xgmi_same_hive(adev, amdgpu_ttm_adev(bo->tbo.bdev))) {
|
||||
bo_va->is_xgmi = true;
|
||||
mutex_lock(&adev->vm_manager.lock_pstate);
|
||||
/* Power up XGMI if it can be potentially used */
|
||||
if (++adev->vm_manager.xgmi_map_counter == 1)
|
||||
amdgpu_xgmi_set_pstate(adev, 1);
|
||||
mutex_unlock(&adev->vm_manager.lock_pstate);
|
||||
}
|
||||
|
||||
return bo_va;
|
||||
}
|
||||
|
||||
@@ -2463,6 +2473,14 @@ void amdgpu_vm_bo_rmv(struct amdgpu_device *adev,
|
||||
}
|
||||
|
||||
dma_fence_put(bo_va->last_pt_update);
|
||||
|
||||
if (bo && bo_va->is_xgmi) {
|
||||
mutex_lock(&adev->vm_manager.lock_pstate);
|
||||
if (--adev->vm_manager.xgmi_map_counter == 0)
|
||||
amdgpu_xgmi_set_pstate(adev, 0);
|
||||
mutex_unlock(&adev->vm_manager.lock_pstate);
|
||||
}
|
||||
|
||||
kfree(bo_va);
|
||||
}
|
||||
|
||||
@@ -2970,6 +2988,9 @@ void amdgpu_vm_manager_init(struct amdgpu_device *adev)
|
||||
|
||||
idr_init(&adev->vm_manager.pasid_idr);
|
||||
spin_lock_init(&adev->vm_manager.pasid_lock);
|
||||
|
||||
adev->vm_manager.xgmi_map_counter = 0;
|
||||
mutex_init(&adev->vm_manager.lock_pstate);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user