diff options
author | Jerome Glisse <jglisse@redhat.com> | 2010-02-04 14:36:39 -0500 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2010-02-04 20:43:51 -0500 |
commit | 062b389c8704e539e234cfd67c7e034a514f50bf (patch) | |
tree | a1bb6e2ce15567db9331fc57e95f6508f636000e /drivers/gpu/drm/radeon/r600.c | |
parent | c38c7b64a2747a211c3a6e8e5919ee25ccd474e7 (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.c | 15 |
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 | */ | ||
2914 | void r600_ioctl_wait_idle(struct radeon_device *rdev, struct radeon_bo *bo) | ||
2915 | { | ||
2916 | WREG32(R_005480_HDP_MEM_COHERENCY_FLUSH_CNTL, 0x1); | ||
2917 | } | ||