| 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 |
| |
| |
| @@ -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 |
| |
| |
| @@ -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 |
| |
| |
| @@ -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 |
| |
| |
| @@ -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 |
| |