Re: [PATCH 2.6.38-10-generic] device driver: fix oops in radeon driverdue to incorrect value from hardware

From: Mayank Rungta
Date: Wed Aug 10 2011 - 05:51:35 EST

On 08/10/2011 02:54 PM, Michel DÃnzer wrote:

On Die, 2011-08-09 at 23:52 +0530, Mayank Rungta wrote:
Added a check for the radeon ring buffer write index in r600.c which
reads 0xffffffff on resume. This results in an Oops during
radeon_ring_write. Masking the value averts this.

This problem is not seen to be fixed in 3.0 r600.c as well.

Detailed analysis of the problem can be found at -


BUG: unable to handle kernel paging request at fa501ffc - Oops at
r600_cp_start+0x48/0x380 in r600_cp_resume+0x345/0x580 [radeon]


--- linux-2.6.38/drivers/gpu/drm/radeon/r600.c.orig 2011-08-05
15:39:40.824612700 +0530
+++ linux-2.6.38/drivers/gpu/drm/radeon/r600.c 2011-08-08
05:29:21.744417857 +0530
@@ -2218,6 +2218,8 @@ int r600_cp_resume(struct radeon_device

rdev->cp.rptr = RREG32(CP_RB_RPTR);
rdev->cp.wptr = RREG32(CP_RB_WPTR);
+ /* protect against crazy HW on resume */
+ rdev->cp.wptr&= rdev->cp.ptr_mask;

The indentation of the lines you're adding doesn't match the surrounding
Sorry. This looked fine in the mail I sent. I shall be careful in future.

Although the same workaround is already in r100.c, I wonder if we
shouldn't rather try and eliminate all reads from the CP_RB_WPTR
register, at least other than for debugging purposes. Alex, what do you

Otherwise, this should probably be added in evergreen.c as well.

Developer's Certificate of Origin 1.1


No need to include all this text, just the *-by: tags are enough.

Point taken.

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at
Please read the FAQ at