diff options
author | Michel Dänzer <michel.daenzer@amd.com> | 2015-07-02 21:02:27 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2015-07-16 12:39:37 -0400 |
commit | 233709d2cd6bbaaeda0aeb8d11f6ca7f98563b39 (patch) | |
tree | 915d744586cc97daa7467f41bcf90c40ed726336 | |
parent | 5dfc71bc44d91d1620505c064fa22b0b3db58a9d (diff) |
drm/radeon: Don't flush the GART TLB if rdev->gart.ptr == NULL
This can be the case when the GPU is powered off, e.g. via vgaswitcheroo
or runpm. When the GPU is powered up again, radeon_gart_table_vram_pin
flushes the TLB after setting rdev->gart.ptr to non-NULL.
Fixes panic on powering off R7xx GPUs.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=61529
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_gart.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_gart.c b/drivers/gpu/drm/radeon/radeon_gart.c index 5450fa95a47e..c4777c8d0312 100644 --- a/drivers/gpu/drm/radeon/radeon_gart.c +++ b/drivers/gpu/drm/radeon/radeon_gart.c | |||
@@ -260,8 +260,10 @@ void radeon_gart_unbind(struct radeon_device *rdev, unsigned offset, | |||
260 | } | 260 | } |
261 | } | 261 | } |
262 | } | 262 | } |
263 | mb(); | 263 | if (rdev->gart.ptr) { |
264 | radeon_gart_tlb_flush(rdev); | 264 | mb(); |
265 | radeon_gart_tlb_flush(rdev); | ||
266 | } | ||
265 | } | 267 | } |
266 | 268 | ||
267 | /** | 269 | /** |
@@ -306,8 +308,10 @@ int radeon_gart_bind(struct radeon_device *rdev, unsigned offset, | |||
306 | page_base += RADEON_GPU_PAGE_SIZE; | 308 | page_base += RADEON_GPU_PAGE_SIZE; |
307 | } | 309 | } |
308 | } | 310 | } |
309 | mb(); | 311 | if (rdev->gart.ptr) { |
310 | radeon_gart_tlb_flush(rdev); | 312 | mb(); |
313 | radeon_gart_tlb_flush(rdev); | ||
314 | } | ||
311 | return 0; | 315 | return 0; |
312 | } | 316 | } |
313 | 317 | ||