aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1715-drm-amdkfd-changes-introduced-in-kfd-merge-0486ab510.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1715-drm-amdkfd-changes-introduced-in-kfd-merge-0486ab510.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1715-drm-amdkfd-changes-introduced-in-kfd-merge-0486ab510.patch237
1 files changed, 237 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1715-drm-amdkfd-changes-introduced-in-kfd-merge-0486ab510.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1715-drm-amdkfd-changes-introduced-in-kfd-merge-0486ab510.patch
new file mode 100644
index 00000000..87687076
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1715-drm-amdkfd-changes-introduced-in-kfd-merge-0486ab510.patch
@@ -0,0 +1,237 @@
+From 1316c8eea37ede2f5dbf95bf2f180bbf0d4b64d8 Mon Sep 17 00:00:00 2001
+From: Evan Quan <evan.quan@amd.com>
+Date: Thu, 22 Jun 2017 14:57:12 +0800
+Subject: [PATCH 1715/4131] drm/amdkfd: changes introduced in kfd merge
+ 0486ab510ea7144fc93e172ad91d80753bfd3441
+
+Change-Id: Ic08818b597c27fdbe4f75add2d1d79fae43b15d9
+Signed-off-by: Evan Quan <evan.quan@amd.com>
+
+ Conflicts:
+ drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 2 ++
+ drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c | 7 +++---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c | 11 ++++-----
+ drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c | 29 ++++++++++-------------
+ drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 4 ++--
+ 5 files changed, 24 insertions(+), 29 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
+index 6446d8f..101c25d 100755
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
+@@ -71,10 +71,12 @@ int amdgpu_amdkfd_init(void)
+ bool amdgpu_amdkfd_load_interface(struct amdgpu_device *adev)
+ {
+ switch (adev->asic_type) {
++#ifdef CONFIG_DRM_AMDGPU_CIK
+ case CHIP_KAVERI:
+ case CHIP_HAWAII:
+ kfd2kgd = amdgpu_amdkfd_gfx_7_get_functions();
+ break;
++#endif
+ case CHIP_CARRIZO:
+ case CHIP_TONGA:
+ case CHIP_FIJI:
+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 9969b74..4549dc0 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
+@@ -32,6 +32,7 @@
+ #include "cikd.h"
+ #include "cik_sdma.h"
+ #include "amdgpu_ucode.h"
++#include "gfx_v7_0.h"
+ #include "gca/gfx_7_2_d.h"
+ #include "gca/gfx_7_2_enum.h"
+ #include "gca/gfx_7_2_sh_mask.h"
+@@ -41,8 +42,6 @@
+ #include "gmc/gmc_7_1_sh_mask.h"
+ #include "cik_structs.h"
+
+-#define CIK_QUEUES_PER_PIPE_MEC (8)
+-
+ #define AMDKFD_SKIP_UNCOMPILED_CODE 1
+
+ enum hqd_dequeue_request_type {
+@@ -280,7 +279,7 @@ static void acquire_queue(struct kgd_dev *kgd, uint32_t pipe_id,
+ {
+ struct amdgpu_device *adev = get_amdgpu_device(kgd);
+
+- uint32_t mec = (++pipe_id / adev->gfx.mec.num_pipe_per_mec) + 1;
++ uint32_t mec = (pipe_id / adev->gfx.mec.num_pipe_per_mec) + 1;
+ uint32_t pipe = (pipe_id % adev->gfx.mec.num_pipe_per_mec);
+
+ lock_srbm(kgd, mec, pipe, queue_id, 0);
+@@ -348,7 +347,7 @@ static int kgd_init_interrupts(struct kgd_dev *kgd, uint32_t pipe_id)
+ uint32_t mec;
+ uint32_t pipe;
+
+- mec = (++pipe_id / adev->gfx.mec.num_pipe_per_mec) + 1;
++ mec = (pipe_id / adev->gfx.mec.num_pipe_per_mec) + 1;
+ pipe = (pipe_id % adev->gfx.mec.num_pipe_per_mec);
+
+ lock_srbm(kgd, mec, pipe, 0, 0);
+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 ea11ac6..e319f80 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
+@@ -42,8 +42,6 @@
+ #include "vi_structs.h"
+ #include "vid.h"
+
+-#define VI_QUEUES_PER_PIPE_MEC (8)
+-
+ enum hqd_dequeue_request_type {
+ NO_ACTION = 0,
+ DRAIN_PIPE,
+@@ -266,7 +264,7 @@ static void acquire_queue(struct kgd_dev *kgd, uint32_t pipe_id,
+ {
+ struct amdgpu_device *adev = get_amdgpu_device(kgd);
+
+- uint32_t mec = (++pipe_id / adev->gfx.mec.num_pipe_per_mec) + 1;
++ uint32_t mec = (pipe_id / adev->gfx.mec.num_pipe_per_mec) + 1;
+ uint32_t pipe = (pipe_id % adev->gfx.mec.num_pipe_per_mec);
+
+ lock_srbm(kgd, mec, pipe, queue_id, 0);
+@@ -335,7 +333,7 @@ static int kgd_init_interrupts(struct kgd_dev *kgd, uint32_t pipe_id)
+ uint32_t mec;
+ uint32_t pipe;
+
+- mec = (++pipe_id / adev->gfx.mec.num_pipe_per_mec) + 1;
++ mec = (pipe_id / adev->gfx.mec.num_pipe_per_mec) + 1;
+ pipe = (pipe_id % adev->gfx.mec.num_pipe_per_mec);
+
+ lock_srbm(kgd, mec, pipe, 0, 0);
+@@ -386,8 +384,8 @@ static int kgd_hqd_load(struct kgd_dev *kgd, void *mqd, uint32_t pipe_id,
+ if (m->cp_hqd_vmid == 0) {
+ uint32_t value, mec, pipe;
+
+- mec = (++pipe_id / VI_PIPE_PER_MEC) + 1;
+- pipe = (pipe_id % VI_PIPE_PER_MEC);
++ mec = (pipe_id / adev->gfx.mec.num_pipe_per_mec) + 1;
++ pipe = (pipe_id % adev->gfx.mec.num_pipe_per_mec);
+
+ pr_debug("kfd: set HIQ, mec:%d, pipe:%d, queue:%d.\n",
+ mec, pipe, queue_id);
+@@ -782,7 +780,6 @@ static int invalidate_tlbs_with_kiq(struct amdgpu_device *adev, uint16_t pasid)
+ signed long r;
+ struct dma_fence *f;
+ struct amdgpu_ring *ring = &adev->gfx.kiq.ring;
+- struct amdgpu_kiq *kiq = &adev->gfx.kiq;
+
+ mutex_lock(&adev->gfx.kiq.ring_mutex);
+ amdgpu_ring_alloc(ring, 12); /* fence + invalidate_tlbs package*/
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
+index e84c115..c06bf6b 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
+@@ -80,9 +80,6 @@
+ #define mmMMHUB_VM_INVALIDATE_ENG16_ADDR_RANGE_HI32 0x0728
+ #define mmMMHUB_VM_INVALIDATE_ENG16_ADDR_RANGE_HI32_BASE_IDX 0
+
+-#define V9_PIPE_PER_MEC (4)
+-#define V9_QUEUES_PER_PIPE_MEC (8)
+-
+ enum hqd_dequeue_request_type {
+ NO_ACTION = 0,
+ DRAIN_PIPE,
+@@ -309,18 +306,18 @@ static void unlock_srbm(struct kgd_dev *kgd)
+ static void acquire_queue(struct kgd_dev *kgd, uint32_t pipe_id,
+ uint32_t queue_id)
+ {
+- uint32_t mec = (++pipe_id / V9_PIPE_PER_MEC) + 1;
+- uint32_t pipe = (pipe_id % V9_PIPE_PER_MEC);
++ struct amdgpu_device *adev = get_amdgpu_device(kgd);
++
++ uint32_t mec = (pipe_id / adev->gfx.mec.num_pipe_per_mec) + 1;
++ uint32_t pipe = (pipe_id % adev->gfx.mec.num_pipe_per_mec);
+
+ lock_srbm(kgd, mec, pipe, queue_id, 0);
+ }
+
+-static uint32_t get_queue_mask(uint32_t pipe_id, uint32_t queue_id)
++static uint32_t get_queue_mask(struct amdgpu_device *adev,
++ uint32_t pipe_id, uint32_t queue_id)
+ {
+- /* assumes that pipe0 is used by graphics and that the correct
+- * MEC is selected by acquire_queue already
+- */
+- unsigned int bit = ((pipe_id+1) * V9_QUEUES_PER_PIPE_MEC +
++ unsigned int bit = (pipe_id * adev->gfx.mec.num_pipe_per_mec +
+ queue_id) & 31;
+
+ return ((uint32_t)1) << bit;
+@@ -408,6 +405,7 @@ static int kgd_set_pasid_vmid_mapping(struct kgd_dev *kgd, unsigned int pasid,
+ static int kgd_init_pipeline(struct kgd_dev *kgd, uint32_t pipe_id,
+ uint32_t hpd_size, uint64_t hpd_gpu_addr)
+ {
++ /* amdgpu owns the per-pipe state */
+ return 0;
+ }
+
+@@ -421,8 +419,8 @@ static int kgd_init_interrupts(struct kgd_dev *kgd, uint32_t pipe_id)
+ uint32_t mec;
+ uint32_t pipe;
+
+- mec = (++pipe_id / V9_PIPE_PER_MEC) + 1;
+- pipe = (pipe_id % V9_PIPE_PER_MEC);
++ mec = (pipe_id / adev->gfx.mec.num_pipe_per_mec) + 1;
++ pipe = (pipe_id % adev->gfx.mec.num_pipe_per_mec);
+
+ lock_srbm(kgd, mec, pipe, 0, 0);
+
+@@ -491,8 +489,8 @@ static int kgd_hqd_load(struct kgd_dev *kgd, void *mqd, uint32_t pipe_id,
+ if (m->cp_hqd_vmid == 0) {
+ uint32_t value, mec, pipe;
+
+- mec = (++pipe_id / V9_PIPE_PER_MEC) + 1;
+- pipe = (pipe_id % V9_PIPE_PER_MEC);
++ mec = (pipe_id / adev->gfx.mec.num_pipe_per_mec) + 1;
++ pipe = (pipe_id % adev->gfx.mec.num_pipe_per_mec);
+
+ pr_debug("kfd: set HIQ, mec:%d, pipe:%d, queue:%d.\n",
+ mec, pipe, queue_id);
+@@ -552,7 +550,7 @@ static int kgd_hqd_load(struct kgd_dev *kgd, void *mqd, uint32_t pipe_id,
+ WREG32(SOC15_REG_OFFSET(GC, 0, mmCP_HQD_PQ_WPTR_POLL_ADDR_HI),
+ upper_32_bits((uint64_t)wptr));
+ WREG32(SOC15_REG_OFFSET(GC, 0, mmCP_PQ_WPTR_POLL_CNTL1),
+- get_queue_mask(pipe_id, queue_id));
++ get_queue_mask(adev, pipe_id, queue_id));
+ }
+
+ /* Start the EOP fetcher */
+@@ -965,7 +963,6 @@ static int invalidate_tlbs_with_kiq(struct amdgpu_device *adev, uint16_t pasid)
+ signed long r;
+ struct dma_fence *f;
+ struct amdgpu_ring *ring = &adev->gfx.kiq.ring;
+- struct amdgpu_kiq *kiq = &adev->gfx.kiq;
+
+ mutex_lock(&adev->gfx.kiq.ring_mutex);
+ amdgpu_ring_alloc(ring, 12); /* fence + invalidate_tlbs package*/
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
+index 3c65aaf..3a30505 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
+@@ -870,7 +870,7 @@ static int reserve_bo_and_cond_vms(struct kgd_mem *mem,
+ static void unreserve_bo_and_vms(struct bo_vm_reservation_context *ctx,
+ bool wait)
+ {
+- if (wait)
++ if (wait) /* FIXME: when called from user context, this needs to be interruptible */
+ amdgpu_sync_wait(&ctx->sync, false);
+
+ if (ctx->reserved)
+@@ -936,7 +936,7 @@ static int update_gpuvm_pte(struct amdgpu_device *adev,
+ /* Update the page directory */
+ ret = amdgpu_vm_update_directories(adev, vm);
+ if (ret != 0) {
+- pr_err("amdgpu_vm_update_page_directory failed\n");
++ pr_err("amdgpu_vm_update_directories failed\n");
+ return ret;
+ }
+
+--
+2.7.4
+