diff options
author | Matthew Garrett <mjg@redhat.com> | 2011-08-08 12:21:16 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2011-08-12 06:04:29 -0400 |
commit | bcc65fd8e929a9d9d34d814d6efc1d2793546922 (patch) | |
tree | 966776acccd00380caf73d6e16c384a313ae85c3 /drivers | |
parent | 13bb9430cd6154d1f088549656c4a3ed10eaf35e (diff) |
drm/radeon: re-POST the asic on Apple hardware when booted via EFI
At least some Apples program the GPU into a state that wedges the engine
once userspace starts trying to perform accelerated operations. Executing
the Atom init scripts gets the hardware back into a working state. The
same hardware works fine when booted via BIOS emulation, so let's just
execute the init scripts on Apples when we're using EFI.
Signed-off-by: Matthew Garrett <mjg@redhat.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_device.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c index 440e6ecccc40..a3b011b49465 100644 --- a/drivers/gpu/drm/radeon/radeon_device.c +++ b/drivers/gpu/drm/radeon/radeon_device.c | |||
@@ -32,6 +32,7 @@ | |||
32 | #include <drm/radeon_drm.h> | 32 | #include <drm/radeon_drm.h> |
33 | #include <linux/vgaarb.h> | 33 | #include <linux/vgaarb.h> |
34 | #include <linux/vga_switcheroo.h> | 34 | #include <linux/vga_switcheroo.h> |
35 | #include <linux/efi.h> | ||
35 | #include "radeon_reg.h" | 36 | #include "radeon_reg.h" |
36 | #include "radeon.h" | 37 | #include "radeon.h" |
37 | #include "atom.h" | 38 | #include "atom.h" |
@@ -348,6 +349,9 @@ bool radeon_card_posted(struct radeon_device *rdev) | |||
348 | { | 349 | { |
349 | uint32_t reg; | 350 | uint32_t reg; |
350 | 351 | ||
352 | if (efi_enabled && rdev->pdev->subsystem_vendor == PCI_VENDOR_ID_APPLE) | ||
353 | return false; | ||
354 | |||
351 | /* first check CRTCs */ | 355 | /* first check CRTCs */ |
352 | if (ASIC_IS_DCE41(rdev)) { | 356 | if (ASIC_IS_DCE41(rdev)) { |
353 | reg = RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC0_REGISTER_OFFSET) | | 357 | reg = RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC0_REGISTER_OFFSET) | |