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 --- drivers/gpu/drm/radeon/radeon_asic.c | 2 +- drivers/gpu/drm/radeon/radeon_asic.h | 4 ++++ drivers/gpu/drm/radeon/uvd_v1_0.c | 14 ++------------ drivers/gpu/drm/radeon/uvd_v2_2.c | 29 +++++++++++++++++++++++++++++ 4 files changed, 36 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/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
From: "monk.liu" monk.liu@amd.com
Fixing a memory leak with userptrs.
Signed-off-by: monk.liu monk.liu@amd.com Signed-off-by: Christian König christian.koenig@amd.com CC: stable@vger.kernel.org --- drivers/gpu/drm/radeon/radeon_ttm.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c index b292aca..e661841 100644 --- a/drivers/gpu/drm/radeon/radeon_ttm.c +++ b/drivers/gpu/drm/radeon/radeon_ttm.c @@ -606,13 +606,18 @@ static void radeon_ttm_tt_unpin_userptr(struct ttm_tt *ttm) dma_unmap_sg(rdev->dev, ttm->sg->sgl, ttm->sg->nents, direction);
for_each_sg(ttm->sg->sgl, sg, ttm->sg->nents, i) { + int len = sg->length >> PAGE_SHIFT; struct page *page = sg_page(sg); + while (len > 0) { + if (!(gtt->userflags & RADEON_GEM_USERPTR_READONLY)) + set_page_dirty(page);
- if (!(gtt->userflags & RADEON_GEM_USERPTR_READONLY)) - set_page_dirty(page); + mark_page_accessed(page); + page_cache_release(page);
- mark_page_accessed(page); - page_cache_release(page); + page++; + len--; + } }
sg_free_table(ttm->sg);
On Fri, May 1, 2015 at 6:34 AM, Christian König deathsimple@vodafone.de wrote:
From: "monk.liu" monk.liu@amd.com
Fixing a memory leak with userptrs.
Signed-off-by: monk.liu monk.liu@amd.com Signed-off-by: Christian König christian.koenig@amd.com CC: stable@vger.kernel.org
drivers/gpu/drm/radeon/radeon_ttm.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c index b292aca..e661841 100644 --- a/drivers/gpu/drm/radeon/radeon_ttm.c +++ b/drivers/gpu/drm/radeon/radeon_ttm.c @@ -606,13 +606,18 @@ static void radeon_ttm_tt_unpin_userptr(struct ttm_tt *ttm) dma_unmap_sg(rdev->dev, ttm->sg->sgl, ttm->sg->nents, direction);
for_each_sg(ttm->sg->sgl, sg, ttm->sg->nents, i) {
int len = sg->length >> PAGE_SHIFT; struct page *page = sg_page(sg);
while (len > 0) {
This is a really awkward loop... IMO it'd be a lot clearer as
for (i = 0; i < sg->length >> PAGE_SHIFT; i++, page++)
[Also I assume that sg->length is never less than a page?]
if (!(gtt->userflags & RADEON_GEM_USERPTR_READONLY))
set_page_dirty(page);
if (!(gtt->userflags & RADEON_GEM_USERPTR_READONLY))
set_page_dirty(page);
mark_page_accessed(page);
page_cache_release(page);
mark_page_accessed(page);
page_cache_release(page);
page++;
len--;
} } sg_free_table(ttm->sg);
-- 1.9.1
dri-devel mailing list dri-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/dri-devel
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
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
dri-devel@lists.freedesktop.org