All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andres Rodriguez <andresx7-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org
Cc: Jay Cornwall <Jay.Cornwall-5C7GfCeVMHo@public.gmane.org>,
	andresx7-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
Subject: [PATCH 21/21] drm/amdgpu: workaround tonga HW bug in HQD programming sequence
Date: Mon,  6 Mar 2017 20:10:48 -0500	[thread overview]
Message-ID: <20170307011048.3619-22-andresx7@gmail.com> (raw)
In-Reply-To: <20170307011048.3619-1-andresx7-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>

Tonga based asics may experience hangs when an HQD's EOP parameters
are modified.

Workaround this HW issue by avoiding writes to these registers for
tonga asics.

Based on the following ROCm commit:
2a0fb8 - drm/amdgpu: Synchronize KFD HQD load protocol with CP scheduler

From the ROCm git repository:
https://github.com/RadeonOpenCompute/ROCK-Kernel-Driver.git

CC: Jay Cornwall <Jay.Cornwall@amd.com>
Suggested-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Andres Rodriguez <andresx7@gmail.com>
---
 drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
index ab19de3..4e271c4 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
@@ -4931,21 +4931,35 @@ int gfx_v8_0_mqd_commit(struct amdgpu_device *adev, struct vi_mqd *mqd)
 
 	/* HQD registers extend from mmCP_MQD_BASE_ADDR to mmCP_HQD_ERROR */
 	mqd_data = &mqd->cp_mqd_base_addr_lo;
 
 	/* disable wptr polling */
 	tmp = RREG32(mmCP_PQ_WPTR_POLL_CNTL);
 	tmp = REG_SET_FIELD(tmp, CP_PQ_WPTR_POLL_CNTL, EN, 0);
 	WREG32(mmCP_PQ_WPTR_POLL_CNTL, tmp);
 
 	/* program all HQD registers */
-	for (mqd_reg = mmCP_HQD_VMID; mqd_reg <= mmCP_HQD_ERROR; mqd_reg++)
+	for (mqd_reg = mmCP_HQD_VMID; mqd_reg <= mmCP_HQD_EOP_CONTROL; mqd_reg++)
+		WREG32(mqd_reg, mqd_data[mqd_reg - mmCP_MQD_BASE_ADDR]);
+
+	/* Tonga errata: EOP RPTR/WPTR should be left unmodified.
+	 * This is safe since EOP RPTR==WPTR for any inactive HQD
+	 * on ASICs that do not support context-save.
+	 * EOP writes/reads can start anywhere in the ring.
+	 */
+	if (adev->asic_type != CHIP_TONGA) {
+		WREG32(mmCP_HQD_EOP_RPTR, mqd->cp_hqd_eop_rptr);
+		WREG32(mmCP_HQD_EOP_WPTR, mqd->cp_hqd_eop_wptr);
+		WREG32(mmCP_HQD_EOP_WPTR_MEM, mqd->cp_hqd_eop_wptr_mem);
+	}
+
+	for (mqd_reg = mmCP_HQD_EOP_EVENTS; mqd_reg <= mmCP_HQD_ERROR; mqd_reg++)
 		WREG32(mqd_reg, mqd_data[mqd_reg - mmCP_MQD_BASE_ADDR]);
 
 	/* activate the HQD */
 	for (mqd_reg = mmCP_MQD_BASE_ADDR; mqd_reg <= mmCP_HQD_ACTIVE; mqd_reg++)
 		WREG32(mqd_reg, mqd_data[mqd_reg - mmCP_MQD_BASE_ADDR]);
 
 	return 0;
 }
 
 static int gfx_v8_0_kiq_queue_init(struct amdgpu_ring *ring,
-- 
2.9.3

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

  parent reply	other threads:[~2017-03-07  1:10 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-07  1:10 [PATCH] Add support for high priority scheduling in amdgpu v5 Andres Rodriguez
     [not found] ` <20170307011048.3619-1-andresx7-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2017-03-07  1:10   ` [PATCH 01/21] drm/amdgpu: refactor MQD/HQD initialization Andres Rodriguez
2017-03-07  1:10   ` [PATCH 02/21] drm/amdgpu: doorbell registers need only be set once v2 Andres Rodriguez
2017-03-07  1:10   ` [PATCH 03/21] drm/amdgpu: detect timeout error when deactivating hqd Andres Rodriguez
2017-03-07  1:10   ` [PATCH 04/21] drm/amdgpu: remove duplicate definition of cik_mqd Andres Rodriguez
2017-03-07  1:10   ` [PATCH 05/21] drm/amdgpu: unify MQD programming sequence for kfd and amdgpu Andres Rodriguez
2017-03-07  1:10   ` [PATCH 06/21] drm/amdgpu: rename rdev to adev Andres Rodriguez
2017-03-07  1:10   ` [PATCH 07/21] drm/amdgpu: take ownership of per-pipe configuration Andres Rodriguez
2017-03-07  1:10   ` [PATCH 08/21] drm/radeon: take ownership of pipe initialization Andres Rodriguez
2017-03-07  1:10   ` [PATCH 09/21] drm/amdgpu: allow split of queues with kfd at queue granularity Andres Rodriguez
2017-03-07  1:10   ` [PATCH 10/21] drm/amdgpu: teach amdgpu how to enable interrupts for any pipe Andres Rodriguez
2017-03-07  1:10   ` [PATCH 11/21] drm/amdkfd: allow split HQD on per-queue granularity v4 Andres Rodriguez
2017-03-07  1:10   ` [PATCH 12/21] drm/amdgpu: remove duplicate magic constants from amdgpu_amdkfd_gfx*.c Andres Rodriguez
2017-03-07  1:10   ` [PATCH 13/21] drm/amdgpu: allocate queues horizontally across pipes Andres Rodriguez
2017-03-07  1:10   ` [PATCH 14/21] drm/amdgpu: new queue policy, take first 2 queues of each pipe Andres Rodriguez
2017-03-07  1:10   ` [PATCH 15/21] drm/amdgpu: untie user ring ids from kernel ring ids v3 Andres Rodriguez
     [not found]     ` <20170307011048.3619-16-andresx7-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2017-03-07 10:31       ` Christian König
     [not found]         ` <6c0d335f-0d5d-b0de-39b2-9f7a213898ca-ANTagKRnAhcb1SvskN2V4Q@public.gmane.org>
2017-03-07 16:20           ` Andres Rodriguez
2017-03-07  1:10   ` [PATCH 16/21] drm/amdgpu: implement lru amdgpu_queue_mgr policy for compute v4 Andres Rodriguez
2017-03-07  1:10   ` [PATCH 17/21] drm/amdgpu: add parameter to allocate high priority contexts v7 Andres Rodriguez
2017-03-07  1:10   ` [PATCH 18/21] drm/amdgpu: add framework for HW specific priority settings v4 Andres Rodriguez
     [not found]     ` <20170307011048.3619-19-andresx7-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2017-03-07 11:00       ` Christian König
     [not found]         ` <b4200426-6d54-989a-1167-9166bf091946-ANTagKRnAhcb1SvskN2V4Q@public.gmane.org>
2017-03-07 15:19           ` Deucher, Alexander
     [not found]             ` <BN6PR12MB1652C4A13E630492073AE458F72F0-/b2+HYfkarQqUD6E6FAiowdYzm3356FpvxpqHgZTriW3zl9H0oFU5g@public.gmane.org>
2017-03-07 16:25               ` Andres Rodriguez
     [not found]                 ` <82817bfd-90ea-24e5-760c-c83c78020bf5-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2017-03-07 16:57                   ` Alex Deucher
     [not found]                     ` <CADnq5_OvG+bj4bD4E5SqWgn4yeGrv1Xh7vLK_2beeZEB-znv2A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-03-07 17:58                       ` Christian König
2017-03-07 18:52           ` Andres Rodriguez
2017-03-07  1:10   ` [PATCH 19/21] drm/amdgpu: implement ring set_priority for gfx_v8 compute v4 Andres Rodriguez
2017-03-07  1:10   ` [PATCH 20/21] drm/amdgpu: condense mqd programming sequence Andres Rodriguez
2017-03-07  1:10   ` Andres Rodriguez [this message]
2017-03-07 10:43   ` [PATCH] Add support for high priority scheduling in amdgpu v5 Christian König
  -- strict thread matches above, loose matches on Subject: below --
2017-03-02 21:44 [PATCH] Add support for high priority scheduling in amdgpu v4 Andres Rodriguez
     [not found] ` <20170302214448.4146-1-andresx7-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2017-03-02 21:44   ` [PATCH 21/21] drm/amdgpu: workaround tonga HW bug in HQD programming sequence Andres Rodriguez

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170307011048.3619-22-andresx7@gmail.com \
    --to=andresx7-re5jqeeqqe8avxtiumwx3w@public.gmane.org \
    --cc=Jay.Cornwall-5C7GfCeVMHo@public.gmane.org \
    --cc=amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.