diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1464-drm-amd-Update-kgd_kfd-interface-for-resuming-SDMA-q.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1464-drm-amd-Update-kgd_kfd-interface-for-resuming-SDMA-q.patch | 265 |
1 files changed, 0 insertions, 265 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1464-drm-amd-Update-kgd_kfd-interface-for-resuming-SDMA-q.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1464-drm-amd-Update-kgd_kfd-interface-for-resuming-SDMA-q.patch deleted file mode 100644 index f1875446..00000000 --- a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1464-drm-amd-Update-kgd_kfd-interface-for-resuming-SDMA-q.patch +++ /dev/null @@ -1,265 +0,0 @@ -From 628e974e6cab609fb32dcf10eb953ea70a8ff0d9 Mon Sep 17 00:00:00 2001 -From: Felix Kuehling <Felix.Kuehling@amd.com> -Date: Thu, 30 Jun 2016 00:10:44 -0400 -Subject: [PATCH 1464/4131] drm/amd: Update kgd_kfd interface for resuming SDMA - queues - -Add wptr and mm parameters to hqd_sdma_load and pass these parameters -from device_queue_manager through the mqd_manager. Remove the unused -page_table_base parameter from hqd_load while working on the interface. - -SDMA doesn't support polling while the engine believes it's idle. The -driver must update the wptr. The new parameters will be used for looking -up the updated value from the specified mm when SDMA queues are resumed -after being disabled. - -Change-Id: Iff5e36596246b95ef36f579c620601c7122e3813 -Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com> ---- - drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c | 12 ++++++------ - drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c | 12 ++++++------ - drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 10 +++++----- - drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c | 2 +- - drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.h | 3 +-- - drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c | 10 +++++----- - drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c | 8 ++++---- - drivers/gpu/drm/amd/include/kgd_kfd_interface.h | 9 +++++---- - 8 files changed, 33 insertions(+), 33 deletions(-) - -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c -index cec4d67..a67c20a 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c -@@ -104,12 +104,12 @@ static int kgd_set_pasid_vmid_mapping(struct kgd_dev *kgd, unsigned int pasid, u - static int kgd_init_pipeline(struct kgd_dev *kgd, uint32_t pipe_id, uint32_t hpd_size, uint64_t hpd_gpu_addr); - static int kgd_init_interrupts(struct kgd_dev *kgd, uint32_t pipe_id); - static int kgd_hqd_load(struct kgd_dev *kgd, void *mqd, uint32_t pipe_id, -- uint32_t queue_id, uint32_t __user *wptr, -- uint32_t page_table_base); -+ uint32_t queue_id, uint32_t __user *wptr); - static int kgd_hqd_dump(struct kgd_dev *kgd, - uint32_t pipe_id, uint32_t queue_id, - uint32_t (**dump)[2], uint32_t *n_regs); --static int kgd_hqd_sdma_load(struct kgd_dev *kgd, void *mqd); -+static int kgd_hqd_sdma_load(struct kgd_dev *kgd, void *mqd, -+ uint32_t __user *wptr, struct mm_struct *mm); - static int kgd_hqd_sdma_dump(struct kgd_dev *kgd, - uint32_t engine_id, uint32_t queue_id, - uint32_t (**dump)[2], uint32_t *n_regs); -@@ -351,8 +351,7 @@ static inline struct cik_sdma_rlc_registers *get_sdma_mqd(void *mqd) - } - - static int kgd_hqd_load(struct kgd_dev *kgd, void *mqd, uint32_t pipe_id, -- uint32_t queue_id, uint32_t __user *wptr, -- uint32_t page_table_base) -+ uint32_t queue_id, uint32_t __user *wptr) - { - struct amdgpu_device *adev = get_amdgpu_device(kgd); - struct cik_mqd *m; -@@ -461,7 +460,8 @@ static int kgd_hqd_dump(struct kgd_dev *kgd, - return 0; - } - --static int kgd_hqd_sdma_load(struct kgd_dev *kgd, void *mqd) -+static int kgd_hqd_sdma_load(struct kgd_dev *kgd, void *mqd, -+ uint32_t __user *wptr, struct mm_struct *mm) - { - struct amdgpu_device *adev = get_amdgpu_device(kgd); - struct cik_sdma_rlc_registers *m; -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c -index 473b924..7d71727 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c -@@ -81,12 +81,12 @@ static int kgd_init_pipeline(struct kgd_dev *kgd, uint32_t pipe_id, - uint32_t hpd_size, uint64_t hpd_gpu_addr); - static int kgd_init_interrupts(struct kgd_dev *kgd, uint32_t pipe_id); - static int kgd_hqd_load(struct kgd_dev *kgd, void *mqd, uint32_t pipe_id, -- uint32_t queue_id, uint32_t __user *wptr, -- uint32_t page_table_base); -+ uint32_t queue_id, uint32_t __user *wptr); - static int kgd_hqd_dump(struct kgd_dev *kgd, - uint32_t pipe_id, uint32_t queue_id, - uint32_t (**dump)[2], uint32_t *n_regs); --static int kgd_hqd_sdma_load(struct kgd_dev *kgd, void *mqd); -+static int kgd_hqd_sdma_load(struct kgd_dev *kgd, void *mqd, -+ uint32_t __user *wptr, struct mm_struct *mm); - static int kgd_hqd_sdma_dump(struct kgd_dev *kgd, - uint32_t engine_id, uint32_t queue_id, - uint32_t (**dump)[2], uint32_t *n_regs); -@@ -346,8 +346,7 @@ static inline struct vi_sdma_mqd *get_sdma_mqd(void *mqd) - } - - static int kgd_hqd_load(struct kgd_dev *kgd, void *mqd, uint32_t pipe_id, -- uint32_t queue_id, uint32_t __user *wptr, -- uint32_t page_table_base) -+ uint32_t queue_id, uint32_t __user *wptr) - { - struct amdgpu_device *adev = get_amdgpu_device(kgd); - struct vi_mqd *m; -@@ -459,7 +458,8 @@ static int kgd_hqd_dump(struct kgd_dev *kgd, - return 0; - } - --static int kgd_hqd_sdma_load(struct kgd_dev *kgd, void *mqd) -+static int kgd_hqd_sdma_load(struct kgd_dev *kgd, void *mqd, -+ uint32_t __user *wptr, struct mm_struct *mm) - { - struct amdgpu_device *adev = get_amdgpu_device(kgd); - struct vi_sdma_mqd *m; -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c -index 41a184c..9fbbeee 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c -@@ -304,7 +304,7 @@ static int create_compute_queue_nocpsch(struct device_queue_manager *dqm, - - retval = mqd->load_mqd(mqd, q->mqd, q->pipe, - q->queue, (uint32_t __user *) q->properties.write_ptr, -- qpd->page_table_base); -+ q->process->mm); - if (retval != 0) { - deallocate_hqd(dqm, q); - mqd->uninit_mqd(mqd, q->mqd, q->mqd_mem_obj); -@@ -423,7 +423,8 @@ static int update_queue(struct device_queue_manager *dqm, struct queue *q) - if (q->properties.is_active) - retval = mqd->load_mqd(mqd, q->mqd, q->pipe, - q->queue, -- (uint32_t __user *)q->properties.write_ptr, 0); -+ (uint32_t __user *)q->properties.write_ptr, -+ q->process->mm); - else if (prev_active) - retval = mqd->destroy_mqd(mqd, q->mqd, - KFD_PREEMPT_TYPE_WAVEFRONT_DRAIN, -@@ -551,7 +552,7 @@ int process_restore_queues(struct device_queue_manager *dqm, - q->pipe, - q->queue, - (uint32_t __user *)q->properties.write_ptr, -- 0); -+ q->process->mm); - dqm->queue_count++; - } - } -@@ -777,8 +778,7 @@ static int create_sdma_queue_nocpsch(struct device_queue_manager *dqm, - return retval; - } - -- retval = mqd->load_mqd(mqd, q->mqd, 0, -- 0, NULL, 0); -+ retval = mqd->load_mqd(mqd, q->mqd, 0, 0, NULL, NULL); - if (retval != 0) { - deallocate_sdma_queue(dqm, q->sdma_id); - mqd->uninit_mqd(mqd, q->mqd, q->mqd_mem_obj); -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c -index fc4d8b2..90a26fa 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c -@@ -143,7 +143,7 @@ static bool initialize(struct kernel_queue *kq, struct kfd_dev *dev, - kq->queue->pipe = KFD_CIK_HIQ_PIPE; - kq->queue->queue = KFD_CIK_HIQ_QUEUE; - kq->mqd->load_mqd(kq->mqd, kq->queue->mqd, kq->queue->pipe, -- kq->queue->queue, NULL, 0); -+ kq->queue->queue, NULL, NULL); - } else { - /* allocate fence for DIQ */ - -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.h b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.h -index 574684f..4be3267 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.h -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.h -@@ -67,8 +67,7 @@ struct mqd_manager { - - int (*load_mqd)(struct mqd_manager *mm, void *mqd, - uint32_t pipe_id, uint32_t queue_id, -- uint32_t __user *wptr, -- uint32_t page_table_base); -+ uint32_t __user *wptr, struct mm_struct *mms); - - int (*update_mqd)(struct mqd_manager *mm, void *mqd, - struct queue_properties *q); -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c -index e565bee..1badce1 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c -@@ -208,18 +208,18 @@ static void uninit_mqd_sdma(struct mqd_manager *mm, void *mqd, - } - - static int load_mqd(struct mqd_manager *mm, void *mqd, uint32_t pipe_id, -- uint32_t queue_id, uint32_t __user *wptr, -- uint32_t page_table_base) -+ uint32_t queue_id, uint32_t __user *wptr, -+ struct mm_struct *mms) - { - return mm->dev->kfd2kgd->hqd_load -- (mm->dev->kgd, mqd, pipe_id, queue_id, wptr, page_table_base); -+ (mm->dev->kgd, mqd, pipe_id, queue_id, wptr); - } - - static int load_mqd_sdma(struct mqd_manager *mm, void *mqd, - uint32_t pipe_id, uint32_t queue_id, -- uint32_t __user *wptr, uint32_t page_table_base) -+ uint32_t __user *wptr, struct mm_struct *mms) - { -- return mm->dev->kfd2kgd->hqd_sdma_load(mm->dev->kgd, mqd); -+ return mm->dev->kfd2kgd->hqd_sdma_load(mm->dev->kgd, mqd, wptr, mms); - } - - static int __update_mqd(struct mqd_manager *mm, void *mqd, -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c -index 25c1269..d78964c 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c -@@ -171,10 +171,10 @@ static int init_mqd(struct mqd_manager *mm, void **mqd, - - static int load_mqd(struct mqd_manager *mm, void *mqd, - uint32_t pipe_id, uint32_t queue_id, -- uint32_t __user *wptr, uint32_t page_table_base) -+ uint32_t __user *wptr, struct mm_struct *mms) - { - return mm->dev->kfd2kgd->hqd_load -- (mm->dev->kgd, mqd, pipe_id, queue_id, wptr, page_table_base); -+ (mm->dev->kgd, mqd, pipe_id, queue_id, wptr); - } - - static int __update_mqd(struct mqd_manager *mm, void *mqd, -@@ -362,9 +362,9 @@ static void uninit_mqd_sdma(struct mqd_manager *mm, void *mqd, - - static int load_mqd_sdma(struct mqd_manager *mm, void *mqd, - uint32_t pipe_id, uint32_t queue_id, -- uint32_t __user *wptr, uint32_t page_table_base) -+ uint32_t __user *wptr, struct mm_struct *mms) - { -- return mm->dev->kfd2kgd->hqd_sdma_load(mm->dev->kgd, mqd); -+ return mm->dev->kfd2kgd->hqd_sdma_load(mm->dev->kgd, mqd, wptr, mms); - } - - static int update_mqd_sdma(struct mqd_manager *mm, void *mqd, -diff --git a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h -index b981589..3db537b 100644 ---- a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h -+++ b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h -@@ -170,7 +170,8 @@ struct kgd2kfd_shared_resources { - * sceduling mode. - * - * @hqd_sdma_load: Loads the SDMA mqd structure to a H/W SDMA hqd slot. -- * used only for no HWS mode. -+ * used only for no HWS mode. If mm is passed in, its mmap_sem must be -+ * read-locked. - * - * @hqd_dump: Dumps CPC HQD registers to an array of address-value pairs. - * Array is allocated with kmalloc, needs to be freed with kfree by caller. -@@ -247,10 +248,10 @@ struct kfd2kgd_calls { - - - int (*hqd_load)(struct kgd_dev *kgd, void *mqd, uint32_t pipe_id, -- uint32_t queue_id, uint32_t __user *wptr, -- uint32_t page_table_base); -+ uint32_t queue_id, uint32_t __user *wptr); - -- int (*hqd_sdma_load)(struct kgd_dev *kgd, void *mqd); -+ int (*hqd_sdma_load)(struct kgd_dev *kgd, void *mqd, -+ uint32_t __user *wptr, struct mm_struct *mm); - - int (*hqd_dump)(struct kgd_dev *kgd, - uint32_t pipe_id, uint32_t queue_id, --- -2.7.4 - |