[1/2] drm/radeon: disable semaphores for UVD V1
diff mbox

Message ID CADnq5_MKjj4TXm=wmWV4GbM0nTUZ=A-JHrVeJxc_0+whrivqyw@mail.gmail.com
State New
Headers show

Commit Message

Alex Deucher May 1, 2015, 3:13 p.m. UTC
On Fri, May 1, 2015 at 6:34 AM, Christian König <deathsimple@vodafone.de> wrote:
> From: Christian König <christian.koenig@amd.com>
>
> Hardware doesn't seem to work correctly, just block userspace in this case.
>
> Bugs: https://bugs.freedesktop.org/show_bug.cgi?id=85320
>
> Signed-off-by: Christian König <christian.koenig@amd.com>
> CC: stable@vger.kernel.org

Applied both to my stable tree.  I had to fix the missing defines on this patch.

Alex

Comments

Christian König May 1, 2015, 4:13 p.m. UTC | #1
On 01.05.2015 17:13, Alex Deucher wrote:
> On Fri, May 1, 2015 at 6:34 AM, Christian König <deathsimple@vodafone.de> wrote:
>> From: Christian König <christian.koenig@amd.com>
>>
>> Hardware doesn't seem to work correctly, just block userspace in this case.
>>
>> Bugs: https://bugs.freedesktop.org/show_bug.cgi?id=85320
>>
>> Signed-off-by: Christian König <christian.koenig@amd.com>
>> CC: stable@vger.kernel.org
> Applied both to my stable tree.  I had to fix the missing defines on this patch.

Ups, thanks for doing this. I've once more send out the wrong version of 
the patch. But your changes look like they should work as well.

Christian.

>
> Alex
Alex Deucher May 1, 2015, 4:24 p.m. UTC | #2
On Fri, May 1, 2015 at 12:13 PM, Christian König
<deathsimple@vodafone.de> wrote:
> On 01.05.2015 17:13, Alex Deucher wrote:
>>
>> On Fri, May 1, 2015 at 6:34 AM, Christian König <deathsimple@vodafone.de>
>> wrote:
>>>
>>> From: Christian König <christian.koenig@amd.com>
>>>
>>> Hardware doesn't seem to work correctly, just block userspace in this
>>> case.
>>>
>>> Bugs: https://bugs.freedesktop.org/show_bug.cgi?id=85320
>>>
>>> Signed-off-by: Christian König <christian.koenig@amd.com>
>>> CC: stable@vger.kernel.org
>>
>> Applied both to my stable tree.  I had to fix the missing defines on this
>> patch.
>
>
> Ups, thanks for doing this. I've once more send out the wrong version of the
> patch. But your changes look like they should work as well.

I can swap it out if you have a preferred version.

Alex

>
> Christian.
>
>>
>> Alex
>
>
Christian König May 1, 2015, 4:31 p.m. UTC | #3
On 01.05.2015 18:24, Alex Deucher wrote:
> On Fri, May 1, 2015 at 12:13 PM, Christian König
> <deathsimple@vodafone.de> wrote:
>> On 01.05.2015 17:13, Alex Deucher wrote:
>>> On Fri, May 1, 2015 at 6:34 AM, Christian König <deathsimple@vodafone.de>
>>> wrote:
>>>> From: Christian König <christian.koenig@amd.com>
>>>>
>>>> Hardware doesn't seem to work correctly, just block userspace in this
>>>> case.
>>>>
>>>> Bugs: https://bugs.freedesktop.org/show_bug.cgi?id=85320
>>>>
>>>> Signed-off-by: Christian König <christian.koenig@amd.com>
>>>> CC: stable@vger.kernel.org
>>> Applied both to my stable tree.  I had to fix the missing defines on this
>>> patch.
>>
>> Ups, thanks for doing this. I've once more send out the wrong version of the
>> patch. But your changes look like they should work as well.
> I can swap it out if you have a preferred version.

No, keep it as it is. My version was just emitting the semaphore using 
the FW instead of programming the regs directly.

This is actually the documented way how to do it, but IIRC we had 
problems with this and so we are using the direct way ever since shortly 
after releasing it.

No need to switch it back without a good reason, that could just cause 
trouble.

Christian.

>
> Alex
>
>> Christian.
>>
>>> Alex
>>

Patch
diff mbox

From 485325a1dd906bfbb2dd2e5982771985c82fd760 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
Date: Fri, 1 May 2015 12:34:12 +0200
Subject: [PATCH 1/2] drm/radeon: disable semaphores for UVD V1 (v2)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Hardware doesn't seem to work correctly, just block userspace in this case.

v2: add missing defines

Bugs: https://bugs.freedesktop.org/show_bug.cgi?id=85320

Signed-off-by: Christian König <christian.koenig@amd.com>
CC: stable@vger.kernel.org
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
---
 drivers/gpu/drm/radeon/radeon_asic.c |  2 +-
 drivers/gpu/drm/radeon/radeon_asic.h |  4 ++++
 drivers/gpu/drm/radeon/rv770d.h      |  3 +++
 drivers/gpu/drm/radeon/uvd_v1_0.c    | 14 ++------------
 drivers/gpu/drm/radeon/uvd_v2_2.c    | 29 +++++++++++++++++++++++++++++
 5 files changed, 39 insertions(+), 13 deletions(-)

diff --git a/drivers/gpu/drm/radeon/radeon_asic.c b/drivers/gpu/drm/radeon/radeon_asic.c
index fafd8ce..8dbf508 100644
--- a/drivers/gpu/drm/radeon/radeon_asic.c
+++ b/drivers/gpu/drm/radeon/radeon_asic.c
@@ -1202,7 +1202,7 @@  static struct radeon_asic rs780_asic = {
 static struct radeon_asic_ring rv770_uvd_ring = {
 	.ib_execute = &uvd_v1_0_ib_execute,
 	.emit_fence = &uvd_v2_2_fence_emit,
-	.emit_semaphore = &uvd_v1_0_semaphore_emit,
+	.emit_semaphore = &uvd_v2_2_semaphore_emit,
 	.cs_parse = &radeon_uvd_cs_parse,
 	.ring_test = &uvd_v1_0_ring_test,
 	.ib_test = &uvd_v1_0_ib_test,
diff --git a/drivers/gpu/drm/radeon/radeon_asic.h b/drivers/gpu/drm/radeon/radeon_asic.h
index cf0a90b..a3ca8cd 100644
--- a/drivers/gpu/drm/radeon/radeon_asic.h
+++ b/drivers/gpu/drm/radeon/radeon_asic.h
@@ -949,6 +949,10 @@  void uvd_v1_0_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib);
 int uvd_v2_2_resume(struct radeon_device *rdev);
 void uvd_v2_2_fence_emit(struct radeon_device *rdev,
 			 struct radeon_fence *fence);
+bool uvd_v2_2_semaphore_emit(struct radeon_device *rdev,
+			     struct radeon_ring *ring,
+			     struct radeon_semaphore *semaphore,
+			     bool emit_wait);
 
 /* uvd v3.1 */
 bool uvd_v3_1_semaphore_emit(struct radeon_device *rdev,
diff --git a/drivers/gpu/drm/radeon/rv770d.h b/drivers/gpu/drm/radeon/rv770d.h
index 3cf1e29..9ef2064 100644
--- a/drivers/gpu/drm/radeon/rv770d.h
+++ b/drivers/gpu/drm/radeon/rv770d.h
@@ -989,6 +989,9 @@ 
 			 ((n) & 0x3FFF) << 16)
 
 /* UVD */
+#define UVD_SEMA_ADDR_LOW				0xef00
+#define UVD_SEMA_ADDR_HIGH				0xef04
+#define UVD_SEMA_CMD					0xef08
 #define UVD_GPCOM_VCPU_CMD				0xef0c
 #define UVD_GPCOM_VCPU_DATA0				0xef10
 #define UVD_GPCOM_VCPU_DATA1				0xef14
diff --git a/drivers/gpu/drm/radeon/uvd_v1_0.c b/drivers/gpu/drm/radeon/uvd_v1_0.c
index e72b3cb..c6b1cbc 100644
--- a/drivers/gpu/drm/radeon/uvd_v1_0.c
+++ b/drivers/gpu/drm/radeon/uvd_v1_0.c
@@ -466,18 +466,8 @@  bool uvd_v1_0_semaphore_emit(struct radeon_device *rdev,
 			     struct radeon_semaphore *semaphore,
 			     bool emit_wait)
 {
-	uint64_t addr = semaphore->gpu_addr;
-
-	radeon_ring_write(ring, PACKET0(UVD_SEMA_ADDR_LOW, 0));
-	radeon_ring_write(ring, (addr >> 3) & 0x000FFFFF);
-
-	radeon_ring_write(ring, PACKET0(UVD_SEMA_ADDR_HIGH, 0));
-	radeon_ring_write(ring, (addr >> 23) & 0x000FFFFF);
-
-	radeon_ring_write(ring, PACKET0(UVD_SEMA_CMD, 0));
-	radeon_ring_write(ring, emit_wait ? 1 : 0);
-
-	return true;
+	/* disable semaphores for UVD V1 hardware */
+	return false;
 }
 
 /**
diff --git a/drivers/gpu/drm/radeon/uvd_v2_2.c b/drivers/gpu/drm/radeon/uvd_v2_2.c
index 8919351..7ed778c 100644
--- a/drivers/gpu/drm/radeon/uvd_v2_2.c
+++ b/drivers/gpu/drm/radeon/uvd_v2_2.c
@@ -60,6 +60,35 @@  void uvd_v2_2_fence_emit(struct radeon_device *rdev,
 }
 
 /**
+ * uvd_v2_2_semaphore_emit - emit semaphore command
+ *
+ * @rdev: radeon_device pointer
+ * @ring: radeon_ring pointer
+ * @semaphore: semaphore to emit commands for
+ * @emit_wait: true if we should emit a wait command
+ *
+ * Emit a semaphore command (either wait or signal) to the UVD ring.
+ */
+bool uvd_v2_2_semaphore_emit(struct radeon_device *rdev,
+			     struct radeon_ring *ring,
+			     struct radeon_semaphore *semaphore,
+			     bool emit_wait)
+{
+	uint64_t addr = semaphore->gpu_addr;
+
+	radeon_ring_write(ring, PACKET0(UVD_SEMA_ADDR_LOW, 0));
+	radeon_ring_write(ring, (addr >> 3) & 0x000FFFFF);
+
+	radeon_ring_write(ring, PACKET0(UVD_SEMA_ADDR_HIGH, 0));
+	radeon_ring_write(ring, (addr >> 23) & 0x000FFFFF);
+
+	radeon_ring_write(ring, PACKET0(UVD_SEMA_CMD, 0));
+	radeon_ring_write(ring, emit_wait ? 1 : 0);
+
+	return true;
+}
+
+/**
  * uvd_v2_2_resume - memory controller programming
  *
  * @rdev: radeon_device pointer
-- 
1.8.3.1