forked from rpms/kernel
		
	
		
			
				
	
	
		
			89 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
Bugzilla: N/A
 | 
						|
Upstream-status: Replaced by http://lists.freedesktop.org/archives/dri-devel/2013-December/050290.html in 3.14
 | 
						|
 | 
						|
From b67e0a6a7409f9c1a12e573fb7d8d80ee455b103 Mon Sep 17 00:00:00 2001
 | 
						|
From: Adam Jackson <ajax@redhat.com>
 | 
						|
Date: Mon, 17 Jun 2013 09:59:34 -0400
 | 
						|
Subject: [PATCH] drm/radeon: Disable writeback by default on ppc
 | 
						|
 | 
						|
At least on an IBM Power 720, this check passes, but several piglit
 | 
						|
tests will reliably trigger GPU resets due to the ring buffer pointers
 | 
						|
not being updated.  There's probably a better way to limit this to just
 | 
						|
affected machines though.
 | 
						|
 | 
						|
Signed-off-by: Adam Jackson <ajax@redhat.com>
 | 
						|
---
 | 
						|
 drivers/gpu/drm/radeon/r600_cp.c       | 7 +++++++
 | 
						|
 drivers/gpu/drm/radeon/radeon_cp.c     | 7 +++++++
 | 
						|
 drivers/gpu/drm/radeon/radeon_device.c | 4 ++--
 | 
						|
 drivers/gpu/drm/radeon/radeon_drv.c    | 2 +-
 | 
						|
 4 files changed, 17 insertions(+), 3 deletions(-)
 | 
						|
 | 
						|
diff --git a/drivers/gpu/drm/radeon/r600_cp.c b/drivers/gpu/drm/radeon/r600_cp.c
 | 
						|
index 1c51c08..ef28532 100644
 | 
						|
--- a/drivers/gpu/drm/radeon/r600_cp.c
 | 
						|
+++ b/drivers/gpu/drm/radeon/r600_cp.c
 | 
						|
@@ -552,6 +552,13 @@ static void r600_test_writeback(drm_radeon_private_t *dev_priv)
 | 
						|
 		dev_priv->writeback_works = 0;
 | 
						|
 		DRM_INFO("writeback test failed\n");
 | 
						|
 	}
 | 
						|
+#if defined(__ppc__) || defined(__ppc64__)
 | 
						|
+	/* the test might succeed on ppc, but it's usually not reliable */
 | 
						|
+	if (radeon_no_wb == -1) {
 | 
						|
+		radeon_no_wb = 1;
 | 
						|
+		DRM_INFO("not trusting writeback test due to arch quirk\n");
 | 
						|
+	}
 | 
						|
+#endif
 | 
						|
 	if (radeon_no_wb == 1) {
 | 
						|
 		dev_priv->writeback_works = 0;
 | 
						|
 		DRM_INFO("writeback forced off\n");
 | 
						|
diff --git a/drivers/gpu/drm/radeon/radeon_cp.c b/drivers/gpu/drm/radeon/radeon_cp.c
 | 
						|
index efc4f64..a967b33 100644
 | 
						|
--- a/drivers/gpu/drm/radeon/radeon_cp.c
 | 
						|
+++ b/drivers/gpu/drm/radeon/radeon_cp.c
 | 
						|
@@ -892,6 +892,13 @@ static void radeon_test_writeback(drm_radeon_private_t * dev_priv)
 | 
						|
 		dev_priv->writeback_works = 0;
 | 
						|
 		DRM_INFO("writeback test failed\n");
 | 
						|
 	}
 | 
						|
+#if defined(__ppc__) || defined(__ppc64__)
 | 
						|
+	/* the test might succeed on ppc, but it's usually not reliable */
 | 
						|
+	if (radeon_no_wb == -1) {
 | 
						|
+		radeon_no_wb = 1;
 | 
						|
+		DRM_INFO("not trusting writeback test due to arch quirk\n");
 | 
						|
+	}
 | 
						|
+#endif
 | 
						|
 	if (radeon_no_wb == 1) {
 | 
						|
 		dev_priv->writeback_works = 0;
 | 
						|
 		DRM_INFO("writeback forced off\n");
 | 
						|
diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
 | 
						|
index 1899738..524046e 100644
 | 
						|
--- a/drivers/gpu/drm/radeon/radeon_device.c
 | 
						|
+++ b/drivers/gpu/drm/radeon/radeon_device.c
 | 
						|
@@ -322,8 +322,8 @@ int radeon_wb_init(struct radeon_device *rdev)
 | 
						|
 	/* disable event_write fences */
 | 
						|
 	rdev->wb.use_event = false;
 | 
						|
 	/* disabled via module param */
 | 
						|
-	if (radeon_no_wb == 1) {
 | 
						|
-		rdev->wb.enabled = false;
 | 
						|
+	if (radeon_no_wb != -1) {
 | 
						|
+		rdev->wb.enabled = !!radeon_no_wb;
 | 
						|
 	} else {
 | 
						|
 		if (rdev->flags & RADEON_IS_AGP) {
 | 
						|
 			/* often unreliable on AGP */
 | 
						|
diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
 | 
						|
index 094e7e5..04809d4 100644
 | 
						|
--- a/drivers/gpu/drm/radeon/radeon_drv.c
 | 
						|
+++ b/drivers/gpu/drm/radeon/radeon_drv.c
 | 
						|
@@ -146,7 +146,7 @@ static inline void radeon_register_atpx_handler(void) {}
 | 
						|
 static inline void radeon_unregister_atpx_handler(void) {}
 | 
						|
 #endif
 | 
						|
 
 | 
						|
-int radeon_no_wb;
 | 
						|
+int radeon_no_wb = -1;
 | 
						|
 int radeon_modeset = -1;
 | 
						|
 int radeon_dynclks = -1;
 | 
						|
 int radeon_r4xx_atom = 0;
 | 
						|
-- 
 | 
						|
1.8.2.1
 | 
						|
 |