Subversion Repositories Kolibri OS

Rev

Rev 5128 | Rev 5271 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5128 Rev 5179
Line 3713... Line 3713...
3713
		wptr = le32_to_cpu(rdev->wb.wb[R600_WB_IH_WPTR_OFFSET/4]);
3713
		wptr = le32_to_cpu(rdev->wb.wb[R600_WB_IH_WPTR_OFFSET/4]);
3714
	else
3714
	else
3715
		wptr = RREG32(IH_RB_WPTR);
3715
		wptr = RREG32(IH_RB_WPTR);
Line 3716... Line 3716...
3716
 
3716
 
-
 
3717
	if (wptr & RB_OVERFLOW) {
3717
	if (wptr & RB_OVERFLOW) {
3718
		wptr &= ~RB_OVERFLOW;
3718
		/* When a ring buffer overflow happen start parsing interrupt
3719
		/* When a ring buffer overflow happen start parsing interrupt
3719
		 * from the last not overwritten vector (wptr + 16). Hopefully
3720
		 * from the last not overwritten vector (wptr + 16). Hopefully
3720
		 * this should allow us to catchup.
3721
		 * this should allow us to catchup.
3721
		 */
3722
		 */
3722
		dev_warn(rdev->dev, "IH ring buffer overflow (0x%08X, %d, %d)\n",
3723
		dev_warn(rdev->dev, "IH ring buffer overflow (0x%08X, 0x%08X, 0x%08X)\n",
3723
			wptr, rdev->ih.rptr, (wptr + 16) + rdev->ih.ptr_mask);
3724
			 wptr, rdev->ih.rptr, (wptr + 16) & rdev->ih.ptr_mask);
3724
		rdev->ih.rptr = (wptr + 16) & rdev->ih.ptr_mask;
3725
		rdev->ih.rptr = (wptr + 16) & rdev->ih.ptr_mask;
3725
		tmp = RREG32(IH_RB_CNTL);
3726
		tmp = RREG32(IH_RB_CNTL);
3726
		tmp |= IH_WPTR_OVERFLOW_CLEAR;
3727
		tmp |= IH_WPTR_OVERFLOW_CLEAR;
3727
		WREG32(IH_RB_CNTL, tmp);
-
 
3728
		wptr &= ~RB_OVERFLOW;
3728
		WREG32(IH_RB_CNTL, tmp);
3729
	}
3729
	}
3730
	return (wptr & rdev->ih.ptr_mask);
3730
	return (wptr & rdev->ih.ptr_mask);
Line 3731... Line 3731...
3731
}
3731
}
Line 3961... Line 3961...
3961
		}
3961
		}
Line 3962... Line 3962...
3962
 
3962
 
3963
		/* wptr/rptr are in bytes! */
3963
		/* wptr/rptr are in bytes! */
3964
		rptr += 16;
3964
		rptr += 16;
-
 
3965
		rptr &= rdev->ih.ptr_mask;
3965
		rptr &= rdev->ih.ptr_mask;
3966
		WREG32(IH_RB_RPTR, rptr);
3966
	}
3967
	}
3967
	rdev->ih.rptr = rptr;
-
 
3968
	WREG32(IH_RB_RPTR, rdev->ih.rptr);
3968
	rdev->ih.rptr = rptr;
Line 3969... Line 3969...
3969
	atomic_set(&rdev->ih.lock, 0);
3969
	atomic_set(&rdev->ih.lock, 0);
3970
 
3970
 
3971
	/* make sure wptr hasn't changed while processing */
3971
	/* make sure wptr hasn't changed while processing */