diff options
Diffstat (limited to 'meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1189-drm-amdkfd-Add-flag-to-allocate-a-doorbell-BO.patch')
-rw-r--r-- | meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1189-drm-amdkfd-Add-flag-to-allocate-a-doorbell-BO.patch | 164 |
1 files changed, 0 insertions, 164 deletions
diff --git a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1189-drm-amdkfd-Add-flag-to-allocate-a-doorbell-BO.patch b/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1189-drm-amdkfd-Add-flag-to-allocate-a-doorbell-BO.patch deleted file mode 100644 index 9382dbcd..00000000 --- a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1189-drm-amdkfd-Add-flag-to-allocate-a-doorbell-BO.patch +++ /dev/null @@ -1,164 +0,0 @@ -From 4b32e9e4f92b65e58c6b64bddee9ba2e0ffc4253 Mon Sep 17 00:00:00 2001 -From: Felix Kuehling <Felix.Kuehling@amd.com> -Date: Fri, 16 Sep 2016 15:53:34 -0400 -Subject: [PATCH 1189/4131] drm/amdkfd: Add flag to allocate a doorbell BO - -Change-Id: Ib59d36572da42382c6c55fdcf57ecec04faaca66 -Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com> ---- - drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 12 +++++++++++- - drivers/gpu/drm/amd/amdkfd/kfd_doorbell.c | 26 +++++++++++++------------- - drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 1 + - 3 files changed, 25 insertions(+), 14 deletions(-) - -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c -index cbc7f69..d42b415 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c -@@ -1257,6 +1257,11 @@ static uint32_t kfd_convert_user_mem_alloction_flags( - kernel_allocation_flags = ALLOC_MEM_FLAGS_USERPTR; - goto out; - } -+ /* Allocate doorbell BO */ -+ if (userspace_flags & KFD_IOC_ALLOC_MEM_FLAGS_DOORBELL) { -+ kernel_allocation_flags = ALLOC_MEM_FLAGS_DOORBELL; -+ goto out; -+ } - - out: - if (userspace_flags & KFD_IOC_ALLOC_MEM_FLAGS_DGPU_AQL_QUEUE_MEM) -@@ -1300,7 +1305,12 @@ static int kfd_ioctl_alloc_memory_of_gpu_new(struct file *filep, - if (IS_ERR(pdd) < 0) - return PTR_ERR(pdd); - -- offset = args->mmap_offset; -+ if (args->flags & KFD_IOC_ALLOC_MEM_FLAGS_DOORBELL) { -+ if (args->size != kfd_doorbell_process_slice()) -+ return -EINVAL; -+ offset = kfd_get_process_doorbells(dev, p); -+ } else -+ offset = args->mmap_offset; - err = dev->kfd2kgd->alloc_memory_of_gpu( - dev->kgd, args->va_addr, args->size, - pdd->vm, (struct kgd_mem **) &mem, &offset, -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_doorbell.c b/drivers/gpu/drm/amd/amdkfd/kfd_doorbell.c -index d6a7e2a..9387b1d 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_doorbell.c -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_doorbell.c -@@ -51,7 +51,7 @@ - */ - - /* # of doorbell bytes allocated for each process. */ --static inline size_t doorbell_process_allocation(void) -+size_t kfd_doorbell_process_slice(void) - { - return roundup(KFD_SIZE_OF_DOORBELL_IN_BYTES * - KFD_MAX_NUM_OF_QUEUES_PER_PROCESS, -@@ -73,16 +73,16 @@ void kfd_doorbell_init(struct kfd_dev *kfd) - - doorbell_start_offset = - roundup(kfd->shared_resources.doorbell_start_offset, -- doorbell_process_allocation()); -+ kfd_doorbell_process_slice()); - - doorbell_aperture_size = - rounddown(kfd->shared_resources.doorbell_aperture_size, -- doorbell_process_allocation()); -+ kfd_doorbell_process_slice()); - - if (doorbell_aperture_size > doorbell_start_offset) - doorbell_process_limit = - (doorbell_aperture_size - doorbell_start_offset) / -- doorbell_process_allocation(); -+ kfd_doorbell_process_slice(); - else - doorbell_process_limit = 0; - -@@ -93,7 +93,7 @@ void kfd_doorbell_init(struct kfd_dev *kfd) - kfd->doorbell_process_limit = doorbell_process_limit - 1; - - kfd->doorbell_kernel_ptr = ioremap(kfd->doorbell_base, -- doorbell_process_allocation()); -+ kfd_doorbell_process_slice()); - - BUG_ON(!kfd->doorbell_kernel_ptr); - -@@ -126,7 +126,7 @@ int kfd_doorbell_mmap(struct kfd_process *process, struct vm_area_struct *vma) - * For simplicitly we only allow mapping of the entire doorbell - * allocation of a single device & process. - */ -- if (vma->vm_end - vma->vm_start != doorbell_process_allocation()) -+ if (vma->vm_end - vma->vm_start != kfd_doorbell_process_slice()) - return -EINVAL; - - /* Find kfd device according to gpu id */ -@@ -148,13 +148,13 @@ int kfd_doorbell_mmap(struct kfd_process *process, struct vm_area_struct *vma) - " vm_flags == 0x%04lX\n" - " size == 0x%04lX\n", - (unsigned long long) vma->vm_start, address, vma->vm_flags, -- doorbell_process_allocation()); -+ kfd_doorbell_process_slice()); - - - return io_remap_pfn_range(vma, - vma->vm_start, - address >> PAGE_SHIFT, -- doorbell_process_allocation(), -+ kfd_doorbell_process_slice(), - vma->vm_page_prot); - } - -@@ -181,7 +181,7 @@ u32 __iomem *kfd_get_kernel_doorbell(struct kfd_dev *kfd, - * Calculating the kernel doorbell offset using "faked" kernel - * pasid that allocated for kernel queues only - */ -- *doorbell_off = KERNEL_DOORBELL_PASID * (doorbell_process_allocation() / -+ *doorbell_off = KERNEL_DOORBELL_PASID * (kfd_doorbell_process_slice() / - sizeof(u32)) + inx; - - pr_debug("kfd: get kernel queue doorbell\n" -@@ -223,11 +223,11 @@ unsigned int kfd_queue_id_to_doorbell(struct kfd_dev *kfd, - { - /* - * doorbell_id_offset accounts for doorbells taken by KGD. -- * pasid * doorbell_process_allocation/sizeof(u32) adjusts -+ * pasid * kfd_doorbell_process_slice/sizeof(u32) adjusts - * to the process's doorbells - */ - return kfd->doorbell_id_offset + -- process->pasid * (doorbell_process_allocation()/sizeof(u32)) + -+ process->pasid * (kfd_doorbell_process_slice()/sizeof(u32)) + - queue_id; - } - -@@ -235,7 +235,7 @@ uint64_t kfd_get_number_elems(struct kfd_dev *kfd) - { - uint64_t num_of_elems = (kfd->shared_resources.doorbell_aperture_size - - kfd->shared_resources.doorbell_start_offset) / -- doorbell_process_allocation() + 1; -+ kfd_doorbell_process_slice() + 1; - - return num_of_elems; - -@@ -245,5 +245,5 @@ phys_addr_t kfd_get_process_doorbells(struct kfd_dev *dev, - struct kfd_process *process) - { - return dev->doorbell_base + -- process->pasid * doorbell_process_allocation(); -+ process->pasid * kfd_doorbell_process_slice(); - } -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h -index 1973935..cabf0fe 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h -@@ -744,6 +744,7 @@ unsigned int kfd_pasid_alloc(void); - void kfd_pasid_free(unsigned int pasid); - - /* Doorbells */ -+size_t kfd_doorbell_process_slice(void); - void kfd_doorbell_init(struct kfd_dev *kfd); - int kfd_doorbell_mmap(struct kfd_process *process, struct vm_area_struct *vma); - u32 __iomem *kfd_get_kernel_doorbell(struct kfd_dev *kfd, --- -2.7.4 - |