diff options
Diffstat (limited to 'meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1266-drm-amdkfd-Disable-CP-SDMA-ring-doorbell-in-MQD.patch')
-rw-r--r-- | meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1266-drm-amdkfd-Disable-CP-SDMA-ring-doorbell-in-MQD.patch | 185 |
1 files changed, 0 insertions, 185 deletions
diff --git a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1266-drm-amdkfd-Disable-CP-SDMA-ring-doorbell-in-MQD.patch b/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1266-drm-amdkfd-Disable-CP-SDMA-ring-doorbell-in-MQD.patch deleted file mode 100644 index c11120c5..00000000 --- a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1266-drm-amdkfd-Disable-CP-SDMA-ring-doorbell-in-MQD.patch +++ /dev/null @@ -1,185 +0,0 @@ -From f8a7cf362e854b2677635f96d7f76e9b6edb9946 Mon Sep 17 00:00:00 2001 -From: Jay Cornwall <Jay.Cornwall@amd.com> -Date: Thu, 13 Apr 2017 20:01:29 -0500 -Subject: [PATCH 1266/4131] drm/amdkfd: Disable CP/SDMA ring/doorbell in MQD - -The MQD represents an inactive context and should not have ring or -doorbell enable bits set. Doing so interferes with HWS which streams -the MQD onto the HQD. If enable bits are set this activates the ring -or doorbell before the HQD is fully configured. - -Fixes SDMA faults during queue eviction. - -Change-Id: I98c5cbe1a91c99d7257cf9f5f4cf610cd7ce06f9 -Signed-off-by: Jay Cornwall <Jay.Cornwall@amd.com> ---- - drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c | 18 ++++-------------- - drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v9.c | 7 ------- - drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c | 11 ++--------- - 3 files changed, 6 insertions(+), 30 deletions(-) - -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 a9e3681..41d28b3 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c -@@ -264,8 +264,7 @@ static int __update_mqd(struct mqd_manager *mm, void *mqd, - m->cp_hqd_pq_base_hi = upper_32_bits((uint64_t)q->queue_address >> 8); - m->cp_hqd_pq_rptr_report_addr_lo = lower_32_bits((uint64_t)q->read_ptr); - m->cp_hqd_pq_rptr_report_addr_hi = upper_32_bits((uint64_t)q->read_ptr); -- m->cp_hqd_pq_doorbell_control = DOORBELL_EN | -- DOORBELL_OFFSET(q->doorbell_off); -+ m->cp_hqd_pq_doorbell_control = DOORBELL_OFFSET(q->doorbell_off); - - m->cp_hqd_vmid = q->vmid; - -@@ -276,13 +275,11 @@ static int __update_mqd(struct mqd_manager *mm, void *mqd, - update_cu_mask(mm, mqd, q); - set_priority(m, q); - -- m->cp_hqd_active = 0; - q->is_active = false; - if (q->queue_size > 0 && - q->queue_address != 0 && - q->queue_percent > 0 && - !q->is_evicted) { -- m->cp_hqd_active = 1; - q->is_active = true; - } - -@@ -319,9 +316,8 @@ static int update_mqd_sdma(struct mqd_manager *mm, void *mqd, - m->sdma_rlc_rb_base_hi = upper_32_bits(q->queue_address >> 8); - m->sdma_rlc_rb_rptr_addr_lo = lower_32_bits((uint64_t)q->read_ptr); - m->sdma_rlc_rb_rptr_addr_hi = upper_32_bits((uint64_t)q->read_ptr); -- m->sdma_rlc_doorbell = q->doorbell_off << -- SDMA0_RLC0_DOORBELL__OFFSET__SHIFT | -- 1 << SDMA0_RLC0_DOORBELL__ENABLE__SHIFT; -+ m->sdma_rlc_doorbell = -+ q->doorbell_off << SDMA0_RLC0_DOORBELL__OFFSET__SHIFT; - - m->sdma_rlc_virtual_addr = q->sdma_vm_addr; - -@@ -333,9 +329,6 @@ static int update_mqd_sdma(struct mqd_manager *mm, void *mqd, - q->queue_address != 0 && - q->queue_percent > 0 && - !q->is_evicted) { -- m->sdma_rlc_rb_cntl |= -- 1 << SDMA0_RLC0_RB_CNTL__RB_ENABLE__SHIFT; -- - q->is_active = true; - } - -@@ -471,18 +464,15 @@ static int update_mqd_hiq(struct mqd_manager *mm, void *mqd, - m->cp_hqd_pq_base_hi = upper_32_bits((uint64_t)q->queue_address >> 8); - m->cp_hqd_pq_rptr_report_addr_lo = lower_32_bits((uint64_t)q->read_ptr); - m->cp_hqd_pq_rptr_report_addr_hi = upper_32_bits((uint64_t)q->read_ptr); -- m->cp_hqd_pq_doorbell_control = DOORBELL_EN | -- DOORBELL_OFFSET(q->doorbell_off); -+ m->cp_hqd_pq_doorbell_control = DOORBELL_OFFSET(q->doorbell_off); - - m->cp_hqd_vmid = q->vmid; - -- m->cp_hqd_active = 0; - q->is_active = false; - if (q->queue_size > 0 && - q->queue_address != 0 && - q->queue_percent > 0 && - !q->is_evicted) { -- m->cp_hqd_active = 1; - q->is_active = true; - } - -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v9.c b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v9.c -index 2f12e80..0db4dbf 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v9.c -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v9.c -@@ -212,7 +212,6 @@ static int update_mqd(struct mqd_manager *mm, void *mqd, - m->cp_hqd_pq_wptr_poll_addr_hi = upper_32_bits((uint64_t)q->write_ptr); - - m->cp_hqd_pq_doorbell_control = -- 1 << CP_HQD_PQ_DOORBELL_CONTROL__DOORBELL_EN__SHIFT | - q->doorbell_off << - CP_HQD_PQ_DOORBELL_CONTROL__DOORBELL_OFFSET__SHIFT; - pr_debug("kfd: cp_hqd_pq_doorbell_control 0x%x\n", -@@ -251,13 +250,11 @@ static int update_mqd(struct mqd_manager *mm, void *mqd, - - update_cu_mask(mm, mqd, q); - -- m->cp_hqd_active = 0; - q->is_active = false; - if (q->queue_size > 0 && - q->queue_address != 0 && - q->queue_percent > 0 && - !q->is_evicted) { -- m->cp_hqd_active = 1; - q->is_active = true; - } - -@@ -391,7 +388,6 @@ static int update_mqd_sdma(struct mqd_manager *mm, void *mqd, - m->sdmax_rlcx_rb_base_hi = upper_32_bits(q->queue_address >> 8); - m->sdmax_rlcx_rb_rptr_addr_lo = lower_32_bits((uint64_t)q->read_ptr); - m->sdmax_rlcx_rb_rptr_addr_hi = upper_32_bits((uint64_t)q->read_ptr); -- m->sdmax_rlcx_doorbell = 1 << SDMA0_RLC0_DOORBELL__ENABLE__SHIFT; - m->sdmax_rlcx_doorbell_offset = - q->doorbell_off << SDMA0_RLC0_DOORBELL_OFFSET__OFFSET__SHIFT; - -@@ -404,9 +400,6 @@ static int update_mqd_sdma(struct mqd_manager *mm, void *mqd, - q->queue_address != 0 && - q->queue_percent > 0 && - !q->is_evicted) { -- m->sdmax_rlcx_rb_cntl |= -- 1 << SDMA0_RLC0_RB_CNTL__RB_ENABLE__SHIFT; -- - q->is_active = true; - } - -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 fb30623..0aeebc1 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c -@@ -221,7 +221,6 @@ static int __update_mqd(struct mqd_manager *mm, void *mqd, - m->cp_hqd_pq_wptr_poll_addr_hi = upper_32_bits((uint64_t)q->write_ptr); - - m->cp_hqd_pq_doorbell_control = -- 1 << CP_HQD_PQ_DOORBELL_CONTROL__DOORBELL_EN__SHIFT | - q->doorbell_off << - CP_HQD_PQ_DOORBELL_CONTROL__DOORBELL_OFFSET__SHIFT; - pr_debug("kfd: cp_hqd_pq_doorbell_control 0x%x\n", -@@ -265,13 +264,11 @@ static int __update_mqd(struct mqd_manager *mm, void *mqd, - update_cu_mask(mm, mqd, q); - set_priority(m, q); - -- m->cp_hqd_active = 0; - q->is_active = false; - if (q->queue_size > 0 && - q->queue_address != 0 && - q->queue_percent > 0 && - !q->is_evicted) { -- m->cp_hqd_active = 1; - q->is_active = true; - } - -@@ -412,9 +409,8 @@ static int update_mqd_sdma(struct mqd_manager *mm, void *mqd, - m->sdmax_rlcx_rb_base_hi = upper_32_bits(q->queue_address >> 8); - m->sdmax_rlcx_rb_rptr_addr_lo = lower_32_bits((uint64_t)q->read_ptr); - m->sdmax_rlcx_rb_rptr_addr_hi = upper_32_bits((uint64_t)q->read_ptr); -- m->sdmax_rlcx_doorbell = q->doorbell_off << -- SDMA0_RLC0_DOORBELL__OFFSET__SHIFT | -- 1 << SDMA0_RLC0_DOORBELL__ENABLE__SHIFT; -+ m->sdmax_rlcx_doorbell = -+ q->doorbell_off << SDMA0_RLC0_DOORBELL__OFFSET__SHIFT; - - m->sdmax_rlcx_virtual_addr = q->sdma_vm_addr; - -@@ -426,9 +422,6 @@ static int update_mqd_sdma(struct mqd_manager *mm, void *mqd, - q->queue_address != 0 && - q->queue_percent > 0 && - !q->is_evicted) { -- m->sdmax_rlcx_rb_cntl |= -- 1 << SDMA0_RLC0_RB_CNTL__RB_ENABLE__SHIFT; -- - q->is_active = true; - } - --- -2.7.4 - |