Re: radeon 0000:02:00.0: GPU lockup CP stall for more than 10000msec

Alex Deucher
2013-01-02T23:37:26Z

[-- Attachment #1: Type: text/plain, Size: 748 bytes --]

On Wed, Jan 2, 2013 at 5:38 PM, Markus Trippelsdorf
<markus@trippelsdorf.de> wrote:
> On 2013.01.02 at 17:31 -0500, Jerome Glisse wrote:
>> Please affected people can you test if patch :
>> http://people.freedesktop.org/~glisse/0003-drm-radeon-fix-dma-copy-on-r6xx-r7xx-evergen-ni-si-g.patch
>>
>> Fix the issue, you need to make sure you don't have the patch that
>> disable dma on r6xx ie that line 977-978 & 1061-1062 in radeon_asic.c
>> is :
>> .copy = &r600_copy_dma,
>> .copy_ring_index = R600_RING_TYPE_DMA_INDEX,
>
> It fixes the issue for me. Thanks.

The count is actually the count, not count - 1. The real fix seems to
be that r6xx requires 2 dw aligned transfers. The attached patch
fixes the issue for me.

Alex

>
> --
> Markus

[-- Attachment #2: 0001-drm-radeon-r6xx-fix-DMA-engine-for-ttm-bo-transfers.patch --]
[-- Type: text/x-patch, Size: 1111 bytes --]

From 47996fe2cc4ee82ac9db514fca36df889172cf30 Mon Sep 17 00:00:00 2001
From: Alex Deucher <alexander.deucher@amd.com>
Date: Wed, 2 Jan 2013 18:30:21 -0500
Subject: [PATCH] drm/radeon/r6xx: fix DMA engine for ttm bo transfers

count must be a multiple of 2.

Cc: Borislav Petkov <bp@alien8.de>
Cc: Markus Trippelsdorf <markus@trippelsdorf.de>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
---
drivers/gpu/drm/radeon/r600.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
index 2aaf147..9f4ce5e 100644
--- a/drivers/gpu/drm/radeon/r600.c
+++ b/drivers/gpu/drm/radeon/r600.c
@@ -2636,8 +2636,8 @@ int r600_copy_dma(struct radeon_device *rdev,

for (i = 0; i < num_loops; i++) {
cur_size_in_dw = size_in_dw;
- if (cur_size_in_dw > 0xFFFF)
- cur_size_in_dw = 0xFFFF;
+ if (cur_size_in_dw > 0xFFFE)
+ cur_size_in_dw = 0xFFFE;
size_in_dw -= cur_size_in_dw;
radeon_ring_write(ring, DMA_PACKET(DMA_PACKET_COPY, 0, 0, cur_size_in_dw));
radeon_ring_write(ring, dst_offset & 0xfffffffc);
--
1.7.7.5