diff mbox

drm/radeon: fix scratch reg handling for UVD fence

Message ID 1366805572-20866-1-git-send-email-deathsimple@vodafone.de (mailing list archive)
State New, archived
Headers show

Commit Message

Christian König April 24, 2013, 12:12 p.m. UTC
From: Christian König <christian.koenig@amd.com>

Also init the scratch reg to zero on the UVD ring.
This fixes UVD on AGP based cards.

Signed-off-by: Christian König <christian.koenig@amd.com>
---
 drivers/gpu/drm/radeon/radeon_fence.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Dieter Nützel April 28, 2013, 10:42 p.m. UTC | #1
Am 2013-04-24 14:12, schrieb Christian König:
> From: Christian König <christian.koenig@amd.com>
> 
> Also init the scratch reg to zero on the UVD ring.
> This fixes UVD on AGP based cards.
> 
> Signed-off-by: Christian König <christian.koenig@amd.com>

Tested-by: Dieter Nützel <dieter@nuetzel-hh.de>

RV730 AGP (UVD 2.2) works with radeon.agpmode=8, now.

[   10.394741] ATOM BIOS: 113
[   10.394948] [drm] AGP mode requested: 8
[   10.394960] agpgart-via 0000:00:00.0: AGP 3.5 bridge
[   10.394989] agpgart-via 0000:00:00.0: putting AGP V3 device into 8x 
mode
[   10.396634] radeon 0000:01:00.0: putting AGP V3 device into 8x mode
[   10.396649] radeon 0000:01:00.0: GTT: 256M 0xE0000000 - 0xEFFFFFFF
[   10.396661] radeon 0000:01:00.0: VRAM: 1024M 0xA0000000 - 0xDFFFFFFF 
(1024M used)
[   10.399244] [drm] Detected VRAM RAM=1024M, BAR=256M
[   10.399254] [drm] RAM width 128bits DDR
[   10.402125] [TTM] Zone  kernel: Available graphics memory: 441924 kiB
[   10.402133] [TTM] Zone highmem: Available graphics memory: 1033768 
kiB
[   10.402136] [TTM] Initializing pool allocator
[   10.402198] [drm] radeon: 1024M of VRAM memory ready
[   10.402202] [drm] radeon: 256M of GTT memory ready.
[   10.402244] [drm] Supports vblank timestamp caching Rev 1 
(10.10.2010).
[   10.402247] [drm] Driver supports precise vblank timestamp query.
[   10.402319] [drm] radeon: irq initialized.

[-]

[   10.524045] [drm] GART: num cpu pages 65536, num gpu pages 65536
[   10.528182] [drm] Loading RV730 Microcode
[   10.641945] radeon 0000:01:00.0: WB disabled
[   10.641964] radeon 0000:01:00.0: fence driver on ring 0 use gpu addr 
0x00000000e0000004 and cpu a
ddr 0xf84c0004
[   10.641969] radeon 0000:01:00.0: fence driver on ring 3 use gpu addr 
0x00000000e0000c0c and cpu addr 0xf84c0c0c
[   10.642218] radeon 0000:01:00.0: fence driver on ring 5 use gpu addr 
0x00000000a005c598 and cpu addr 0xf879c598
[   10.785565] [drm] ring test on 0 succeeded in 1 usecs
[   10.785636] [drm] ring test on 3 succeeded in 1 usecs
[   10.842237]  md127:
[   10.847965] [drm] ring test on 5 succeeded in 1 usecs
[   10.847976] [drm] UVD initialized successfully.
[   10.848690] [drm] ib test on ring 0 succeeded in 0 usecs
[   10.848729] [drm] ib test on ring 3 succeeded in 1 usecs
[   10.858255] [drm] ib test on ring 5 succeeded

Thank you Christian!

Dieter

> ---
> drivers/gpu/drm/radeon/radeon_fence.c |    2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/radeon/radeon_fence.c
> b/drivers/gpu/drm/radeon/radeon_fence.c
> index 1a699ce..5b937df 100644
> --- a/drivers/gpu/drm/radeon/radeon_fence.c
> +++ b/drivers/gpu/drm/radeon/radeon_fence.c
> @@ -767,8 +767,8 @@ int radeon_fence_driver_start_ring(struct
> radeon_device *rdev, int ring)
> 
> 	radeon_scratch_free(rdev, rdev->fence_drv[ring].scratch_reg);
> 	if (rdev->wb.use_event || !radeon_ring_supports_scratch_reg(rdev,
> &rdev->ring[ring])) {
> +		rdev->fence_drv[ring].scratch_reg = 0;
> 		if (ring != R600_RING_TYPE_UVD_INDEX) {
> -			rdev->fence_drv[ring].scratch_reg = 0;
> 			index = R600_WB_EVENT_OFFSET + ring * 4;
> 			rdev->fence_drv[ring].cpu_addr = &rdev->wb.wb[index/4];
> 			rdev->fence_drv[ring].gpu_addr = rdev->wb.gpu_addr +
diff mbox

Patch

diff --git a/drivers/gpu/drm/radeon/radeon_fence.c b/drivers/gpu/drm/radeon/radeon_fence.c
index 1a699ce..5b937df 100644
--- a/drivers/gpu/drm/radeon/radeon_fence.c
+++ b/drivers/gpu/drm/radeon/radeon_fence.c
@@ -767,8 +767,8 @@  int radeon_fence_driver_start_ring(struct radeon_device *rdev, int ring)
 
 	radeon_scratch_free(rdev, rdev->fence_drv[ring].scratch_reg);
 	if (rdev->wb.use_event || !radeon_ring_supports_scratch_reg(rdev, &rdev->ring[ring])) {
+		rdev->fence_drv[ring].scratch_reg = 0;
 		if (ring != R600_RING_TYPE_UVD_INDEX) {
-			rdev->fence_drv[ring].scratch_reg = 0;
 			index = R600_WB_EVENT_OFFSET + ring * 4;
 			rdev->fence_drv[ring].cpu_addr = &rdev->wb.wb[index/4];
 			rdev->fence_drv[ring].gpu_addr = rdev->wb.gpu_addr +