From d752f95e55ed36648fc2bcbca348f5113920c357 Mon Sep 17 00:00:00 2001 From: Jay Cornwall Date: Mon, 19 Jan 2015 11:47:34 -0600 Subject: drm/amdkfd: Preserve CP_MQD_IQ_RPTR internal state CP microcode uses undocumented bits in this register to record queue state information. The KFD zeroes these bits in update_mqd, when invoked through the UPDATE_QUEUE ioctl, causing incoherent state when the ioctl is used to successively unmap and map a queue. Since the queue type cannot be changed in this path, move the MQD write to init_mqd. Signed-off-by: Jay Cornwall Reviewed-by: Ben Goz Signed-off-by: Oded Gabbay --- drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 a318743cdcc2..a09e18a339f3 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c @@ -94,6 +94,9 @@ static int init_mqd(struct mqd_manager *mm, void **mqd, m->cp_hqd_pipe_priority = 1; m->cp_hqd_queue_priority = 15; + if (q->format == KFD_QUEUE_FORMAT_AQL) + m->cp_hqd_iq_rptr = AQL_ENABLE; + *mqd = m; if (gart_addr != NULL) *gart_addr = addr; @@ -187,7 +190,6 @@ static int update_mqd(struct mqd_manager *mm, void *mqd, m->cp_hqd_vmid = q->vmid; if (q->format == KFD_QUEUE_FORMAT_AQL) { - m->cp_hqd_iq_rptr = AQL_ENABLE; m->cp_hqd_pq_control |= NO_UPDATE_RPTR; } -- cgit v1.2.3