aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/rv770.c
diff options
context:
space:
mode:
authorJerome Glisse <jglisse@redhat.com>2009-10-06 13:04:29 -0400
committerDave Airlie <airlied@redhat.com>2009-10-07 19:40:04 -0400
commitb574f251f787c5b163da5ea345525569e51775bc (patch)
tree8adad6a3934898d8c71567729db0005e2189cd26 /drivers/gpu/drm/radeon/rv770.c
parent01ceae8edd7a0a6d8588dc103ad9f55e2c52cae9 (diff)
drm/radeon/kms: Fallback to non AGP when acceleration fails to initialize (v2)
When GPU acceleration is not working with AGP try to fallback to non AGP GART (either PCI or PCIE GART). This should make KMS failure on AGP less painfull. We still need to find out what is wrong when AGP fails but at least user have a lot of more chances to get a working configuration with acceleration. This patch also cleanup R600/RV770 fallback path so they use same code as others asics. Version 2 factorize agp disabling logic to avoid code duplication and bugs. Signed-off-by: Jerome Glisse <jglisse@redhat.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/radeon/rv770.c')
-rw-r--r--drivers/gpu/drm/radeon/rv770.c18
1 files changed, 1 insertions, 17 deletions
diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c
index 295cf14e3c53..5c597dfa5d49 100644
--- a/drivers/gpu/drm/radeon/rv770.c
+++ b/drivers/gpu/drm/radeon/rv770.c
@@ -923,15 +923,8 @@ int rv770_init(struct radeon_device *rdev)
923 if (r) 923 if (r)
924 return r; 924 return r;
925 r = rv770_mc_init(rdev); 925 r = rv770_mc_init(rdev);
926 if (r) { 926 if (r)
927 if (rdev->flags & RADEON_IS_AGP) {
928 /* Retry with disabling AGP */
929 rv770_fini(rdev);
930 rdev->flags &= ~RADEON_IS_AGP;
931 return rv770_init(rdev);
932 }
933 return r; 927 return r;
934 }
935 /* Memory manager */ 928 /* Memory manager */
936 r = radeon_object_init(rdev); 929 r = radeon_object_init(rdev);
937 if (r) 930 if (r)
@@ -960,15 +953,8 @@ int rv770_init(struct radeon_device *rdev)
960 953
961 r = rv770_startup(rdev); 954 r = rv770_startup(rdev);
962 if (r) { 955 if (r) {
963 if (rdev->flags & RADEON_IS_AGP) {
964 /* Retry with disabling AGP */
965 rv770_fini(rdev);
966 rdev->flags &= ~RADEON_IS_AGP;
967 return rv770_init(rdev);
968 }
969 rv770_suspend(rdev); 956 rv770_suspend(rdev);
970 r600_wb_fini(rdev); 957 r600_wb_fini(rdev);
971 radeon_ib_pool_fini(rdev);
972 radeon_ring_fini(rdev); 958 radeon_ring_fini(rdev);
973 rv770_pcie_gart_fini(rdev); 959 rv770_pcie_gart_fini(rdev);
974 rdev->accel_working = false; 960 rdev->accel_working = false;
@@ -999,10 +985,8 @@ void rv770_fini(struct radeon_device *rdev)
999 radeon_gem_fini(rdev); 985 radeon_gem_fini(rdev);
1000 radeon_fence_driver_fini(rdev); 986 radeon_fence_driver_fini(rdev);
1001 radeon_clocks_fini(rdev); 987 radeon_clocks_fini(rdev);
1002#if __OS_HAS_AGP
1003 if (rdev->flags & RADEON_IS_AGP) 988 if (rdev->flags & RADEON_IS_AGP)
1004 radeon_agp_fini(rdev); 989 radeon_agp_fini(rdev);
1005#endif
1006 radeon_object_fini(rdev); 990 radeon_object_fini(rdev);
1007 radeon_atombios_fini(rdev); 991 radeon_atombios_fini(rdev);
1008 kfree(rdev->bios); 992 kfree(rdev->bios);