aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2845-drm-amdkfd-Fix-change-of-SOC15_REG_OFFSET-using-dyna.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2845-drm-amdkfd-Fix-change-of-SOC15_REG_OFFSET-using-dyna.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2845-drm-amdkfd-Fix-change-of-SOC15_REG_OFFSET-using-dyna.patch116
1 files changed, 116 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2845-drm-amdkfd-Fix-change-of-SOC15_REG_OFFSET-using-dyna.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2845-drm-amdkfd-Fix-change-of-SOC15_REG_OFFSET-using-dyna.patch
new file mode 100644
index 00000000..815f1591
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2845-drm-amdkfd-Fix-change-of-SOC15_REG_OFFSET-using-dyna.patch
@@ -0,0 +1,116 @@
+From 1ea8abde63aadc1ad77ac3a6a19af3ba870516e3 Mon Sep 17 00:00:00 2001
+From: "Le.Ma" <Le.Ma@amd.com>
+Date: Tue, 12 Dec 2017 15:01:31 +0800
+Subject: [PATCH 2845/4131] drm/amdkfd: Fix change of SOC15_REG_OFFSET using
+ dynamic register offset
+
+Change-Id: I755c8c29ab7b99ae6c883ad56eb4ac0e0a918057
+Signed-off-by: Shaoyun Liu <Shaoyun.Liu@amd.com>
+Signed-off-by: Le.Ma <Le.Ma@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c | 25 ++++++++++++-----------
+ 1 file changed, 13 insertions(+), 12 deletions(-)
+
+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 58c3903..43a0776 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
+@@ -139,7 +139,7 @@ static int kgd_hqd_destroy(struct kgd_dev *kgd, void *mqd,
+ static int kgd_hqd_sdma_destroy(struct kgd_dev *kgd, void *mqd,
+ unsigned int utimeout);
+ static void write_vmid_invalidate_request(struct kgd_dev *kgd, uint8_t vmid);
+-static uint32_t get_watch_base_addr(void);
++static uint32_t get_watch_base_addr(struct amdgpu_device *adev);
+ static int kgd_address_watch_disable(struct kgd_dev *kgd);
+ static int kgd_address_watch_execute(struct kgd_dev *kgd,
+ unsigned int watch_point_id,
+@@ -437,10 +437,11 @@ static int kgd_init_interrupts(struct kgd_dev *kgd, uint32_t pipe_id)
+ return 0;
+ }
+
+-static uint32_t get_sdma_base_addr(unsigned int engine_id,
+- unsigned int queue_id)
++static uint32_t get_sdma_base_addr(struct amdgpu_device *adev,
++ unsigned int engine_id,
++ unsigned int queue_id)
+ {
+- static const uint32_t base[2] = {
++ uint32_t base[2] = {
+ SOC15_REG_OFFSET(SDMA0, 0,
+ mmSDMA0_RLC0_RB_CNTL) - mmSDMA0_RLC0_RB_CNTL,
+ SOC15_REG_OFFSET(SDMA1, 0,
+@@ -456,7 +457,7 @@ static uint32_t get_sdma_base_addr(unsigned int engine_id,
+ return retval;
+ }
+
+-static uint32_t get_watch_base_addr(void)
++static uint32_t get_watch_base_addr(struct amdgpu_device *adev)
+ {
+ uint32_t retval = SOC15_REG_OFFSET(GC, 0, mmTCP_WATCH0_ADDR_H) -
+ mmTCP_WATCH0_ADDR_H;
+@@ -615,7 +616,7 @@ static int kgd_hqd_sdma_load(struct kgd_dev *kgd, void *mqd,
+ uint64_t __user *wptr64 = (uint64_t __user *)wptr;
+
+ m = get_sdma_mqd(mqd);
+- sdma_base_addr = get_sdma_base_addr(m->sdma_engine_id,
++ sdma_base_addr = get_sdma_base_addr(adev, m->sdma_engine_id,
+ m->sdma_queue_id);
+ sdmax_gfx_context_cntl = m->sdma_engine_id ?
+ SOC15_REG_OFFSET(SDMA1, 0, mmSDMA1_GFX_CONTEXT_CNTL) :
+@@ -682,7 +683,7 @@ static int kgd_hqd_sdma_dump(struct kgd_dev *kgd,
+ uint32_t (**dump)[2], uint32_t *n_regs)
+ {
+ struct amdgpu_device *adev = get_amdgpu_device(kgd);
+- uint32_t sdma_base_addr = get_sdma_base_addr(engine_id, queue_id);
++ uint32_t sdma_base_addr = get_sdma_base_addr(adev, engine_id, queue_id);
+ uint32_t i = 0, reg;
+ #undef HQD_N_REGS
+ #define HQD_N_REGS (19+6+7+10)
+@@ -738,7 +739,7 @@ static bool kgd_hqd_sdma_is_occupied(struct kgd_dev *kgd, void *mqd)
+ uint32_t sdma_rlc_rb_cntl;
+
+ m = get_sdma_mqd(mqd);
+- sdma_base_addr = get_sdma_base_addr(m->sdma_engine_id,
++ sdma_base_addr = get_sdma_base_addr(adev, m->sdma_engine_id,
+ m->sdma_queue_id);
+
+ sdma_rlc_rb_cntl = RREG32(sdma_base_addr + mmSDMA0_RLC0_RB_CNTL);
+@@ -867,7 +868,7 @@ static int kgd_hqd_sdma_destroy(struct kgd_dev *kgd, void *mqd,
+ unsigned long end_jiffies = (utimeout * HZ / 1000) + jiffies;
+
+ m = get_sdma_mqd(mqd);
+- sdma_base_addr = get_sdma_base_addr(m->sdma_engine_id,
++ sdma_base_addr = get_sdma_base_addr(adev, m->sdma_engine_id,
+ m->sdma_queue_id);
+
+ temp = RREG32(sdma_base_addr + mmSDMA0_RLC0_RB_CNTL);
+@@ -1032,7 +1033,7 @@ static int kgd_address_watch_disable(struct kgd_dev *kgd)
+ cntl.bitfields.mask = ADDRESS_WATCH_REG_CNTL_DEFAULT_MASK;
+ cntl.bitfields.atc = 1;
+
+- watch_base_addr = get_watch_base_addr();
++ watch_base_addr = get_watch_base_addr(adev);
+ /* Turning off this address until we set all the registers */
+ for (i = 0; i < MAX_WATCH_ADDRESSES; i++)
+ WREG32(watch_base_addr +
+@@ -1053,7 +1054,7 @@ static int kgd_address_watch_execute(struct kgd_dev *kgd,
+ union TCP_WATCH_CNTL_BITS cntl;
+ uint32_t watch_base_addr;
+
+- watch_base_addr = get_watch_base_addr();
++ watch_base_addr = get_watch_base_addr(adev);
+ cntl.u32All = cntl_val;
+
+ /* Turning off this watch point until we set all the registers */
+@@ -1107,7 +1108,7 @@ static uint32_t kgd_address_watch_get_offset(struct kgd_dev *kgd,
+ unsigned int watch_point_id,
+ unsigned int reg_offset)
+ {
+- return get_watch_base_addr() +
++ return get_watch_base_addr(get_amdgpu_device(kgd)) +
+ watchRegs[watch_point_id * ADDRESS_WATCH_REG_MAX + reg_offset];
+ }
+
+--
+2.7.4
+