On Die, 2011-08-09 at 23:52 +0530, Mayank Rungta wrote:Sorry. This looked fine in the mail I sent. I shall be careful in future.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
+++ linux-2.6.38/drivers/gpu/drm/radeon/r600.c 2011-08-08
@@ -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
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.