aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2104-drm-amdkfd-Re-locate-switch-power-profile-to-match-k.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2104-drm-amdkfd-Re-locate-switch-power-profile-to-match-k.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2104-drm-amdkfd-Re-locate-switch-power-profile-to-match-k.patch103
1 files changed, 103 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2104-drm-amdkfd-Re-locate-switch-power-profile-to-match-k.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2104-drm-amdkfd-Re-locate-switch-power-profile-to-match-k.patch
new file mode 100644
index 00000000..f1a66ed9
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2104-drm-amdkfd-Re-locate-switch-power-profile-to-match-k.patch
@@ -0,0 +1,103 @@
+From 4240c679c7bed2cef646ce524ac931dd73978d90 Mon Sep 17 00:00:00 2001
+From: "Le.Ma" <Le.Ma@amd.com>
+Date: Tue, 7 Nov 2017 10:52:37 +0800
+Subject: [PATCH 2104/4131] drm/amdkfd: Re-locate switch power profile to match
+ kfd branch
+
+Change-Id: I79a59c15a4ecfdae92202da0b2b216efa471a529
+Signed-off-by: Le.Ma <Le.Ma@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 56 +++++++++++++++++-----------------
+ 1 file changed, 28 insertions(+), 28 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+index bfb2d98..bebf575 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+@@ -2720,6 +2720,22 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm,
+ goto error_free_root;
+ }
+
++ if (pasid) {
++ unsigned long flags;
++
++ spin_lock_irqsave(&adev->vm_manager.pasid_lock, flags);
++ r = idr_alloc(&adev->vm_manager.pasid_idr, vm, pasid, pasid + 1,
++ GFP_ATOMIC);
++ spin_unlock_irqrestore(&adev->vm_manager.pasid_lock, flags);
++ if (r < 0)
++ goto error_free_root;
++
++ vm->pasid = pasid;
++ }
++
++ INIT_KFIFO(vm->faults);
++ vm->fault_credit = 16;
++
+ vm->vm_context = vm_context;
+ if (vm_context == AMDGPU_VM_CONTEXT_COMPUTE) {
+ struct amdgpu_vm_id_manager *id_mgr =
+@@ -2737,22 +2753,6 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm,
+ mutex_unlock(&id_mgr->lock);
+ }
+
+- if (pasid) {
+- unsigned long flags;
+-
+- spin_lock_irqsave(&adev->vm_manager.pasid_lock, flags);
+- r = idr_alloc(&adev->vm_manager.pasid_idr, vm, pasid, pasid + 1,
+- GFP_ATOMIC);
+- spin_unlock_irqrestore(&adev->vm_manager.pasid_lock, flags);
+- if (r < 0)
+- goto error_free_root;
+-
+- vm->pasid = pasid;
+- }
+-
+- INIT_KFIFO(vm->faults);
+- vm->fault_credit = 16;
+-
+ return 0;
+
+ error_free_root:
+@@ -2812,6 +2812,18 @@ void amdgpu_vm_fini(struct amdgpu_device *adev, struct amdgpu_vm *vm)
+ u64 fault;
+ int i, r;
+
++ /* Clear pending page faults from IH when the VM is destroyed */
++ while (kfifo_get(&vm->faults, &fault))
++ amdgpu_ih_clear_fault(adev, fault);
++
++ if (vm->pasid) {
++ unsigned long flags;
++
++ spin_lock_irqsave(&adev->vm_manager.pasid_lock, flags);
++ idr_remove(&adev->vm_manager.pasid_idr, vm->pasid);
++ spin_unlock_irqrestore(&adev->vm_manager.pasid_lock, flags);
++ }
++
+ if (vm->vm_context == AMDGPU_VM_CONTEXT_COMPUTE) {
+ struct amdgpu_vm_id_manager *id_mgr =
+ &adev->vm_manager.id_mgr[AMDGPU_GFXHUB];
+@@ -2830,18 +2842,6 @@ void amdgpu_vm_fini(struct amdgpu_device *adev, struct amdgpu_vm *vm)
+ mutex_unlock(&id_mgr->lock);
+ }
+
+- /* Clear pending page faults from IH when the VM is destroyed */
+- while (kfifo_get(&vm->faults, &fault))
+- amdgpu_ih_clear_fault(adev, fault);
+-
+- if (vm->pasid) {
+- unsigned long flags;
+-
+- spin_lock_irqsave(&adev->vm_manager.pasid_lock, flags);
+- idr_remove(&adev->vm_manager.pasid_idr, vm->pasid);
+- spin_unlock_irqrestore(&adev->vm_manager.pasid_lock, flags);
+- }
+-
+ amd_sched_entity_fini(vm->entity.sched, &vm->entity);
+
+ if (!RB_EMPTY_ROOT(&vm->va.rb_root)) {
+--
+2.7.4
+