Message ID | CADnq5_MKjj4TXm=wmWV4GbM0nTUZ=A-JHrVeJxc_0+whrivqyw@mail.gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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
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 > >
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 >>
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