aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/r600.c
diff options
context:
space:
mode:
authorJerome Glisse <jglisse@redhat.com>2010-02-04 14:36:39 -0500
committerDave Airlie <airlied@redhat.com>2010-02-04 20:43:51 -0500
commit062b389c8704e539e234cfd67c7e034a514f50bf (patch)
treea1bb6e2ce15567db9331fc57e95f6508f636000e /drivers/gpu/drm/radeon/r600.c
parentc38c7b64a2747a211c3a6e8e5919ee25ccd474e7 (diff)
drm/radeon/kms: fix regression rendering issue on R6XX/R7XX
It seems that some R6XX/R7XX silently ignore HDP flush when programmed through ring, this patch addback an ioctl callback to allow R6XX/R7XX hw to perform such flush through MMIO in order to fix a regression. For more details see: http://bugzilla.kernel.org/show_bug.cgi?id=15186 Signed-off-by: Jerome Glisse <jglisse@redhat.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/radeon/r600.c')
-rw-r--r--drivers/gpu/drm/radeon/r600.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
index 8c94040cb7f2..45d565bae71b 100644
--- a/drivers/gpu/drm/radeon/r600.c
+++ b/drivers/gpu/drm/radeon/r600.c
@@ -2900,3 +2900,18 @@ int r600_debugfs_mc_info_init(struct radeon_device *rdev)
2900 return 0; 2900 return 0;
2901#endif 2901#endif
2902} 2902}
2903
2904/**
2905 * r600_ioctl_wait_idle - flush host path cache on wait idle ioctl
2906 * rdev: radeon device structure
2907 * bo: buffer object struct which userspace is waiting for idle
2908 *
2909 * Some R6XX/R7XX doesn't seems to take into account HDP flush performed
2910 * through ring buffer, this leads to corruption in rendering, see
2911 * http://bugzilla.kernel.org/show_bug.cgi?id=15186 to avoid this we
2912 * directly perform HDP flush by writing register through MMIO.
2913 */
2914void r600_ioctl_wait_idle(struct radeon_device *rdev, struct radeon_bo *bo)
2915{
2916 WREG32(R_005480_HDP_MEM_COHERENCY_FLUSH_CNTL, 0x1);
2917}