diff options
author | Alex Deucher <alexdeucher@gmail.com> | 2009-12-09 19:31:44 -0500 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2009-12-10 00:19:16 -0500 |
commit | 779720a3209849be202ac36a811e934865c50971 (patch) | |
tree | 8970fc5257045e0e865509922120cb24a56024e5 /drivers | |
parent | 7cb7d1d7b650c9764c8a1b00e2b43d932acde779 (diff) |
drm/radeon/kms/r600/r700: fallback gracefully on ucode failure
Sent the wrong patch earlier.
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/drm/radeon/r600.c | 24 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/rv770.c | 26 |
2 files changed, 25 insertions, 25 deletions
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c index 250ec3fe1a16..f5cf874dc62a 100644 --- a/drivers/gpu/drm/radeon/r600.c +++ b/drivers/gpu/drm/radeon/r600.c | |||
@@ -1845,6 +1845,14 @@ int r600_startup(struct radeon_device *rdev) | |||
1845 | { | 1845 | { |
1846 | int r; | 1846 | int r; |
1847 | 1847 | ||
1848 | if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) { | ||
1849 | r = r600_init_microcode(rdev); | ||
1850 | if (r) { | ||
1851 | DRM_ERROR("Failed to load firmware!\n"); | ||
1852 | return r; | ||
1853 | } | ||
1854 | } | ||
1855 | |||
1848 | r600_mc_program(rdev); | 1856 | r600_mc_program(rdev); |
1849 | if (rdev->flags & RADEON_IS_AGP) { | 1857 | if (rdev->flags & RADEON_IS_AGP) { |
1850 | r600_agp_enable(rdev); | 1858 | r600_agp_enable(rdev); |
@@ -2026,25 +2034,17 @@ int r600_init(struct radeon_device *rdev) | |||
2026 | rdev->ih.ring_obj = NULL; | 2034 | rdev->ih.ring_obj = NULL; |
2027 | r600_ih_ring_init(rdev, 64 * 1024); | 2035 | r600_ih_ring_init(rdev, 64 * 1024); |
2028 | 2036 | ||
2029 | if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) { | ||
2030 | r = r600_init_microcode(rdev); | ||
2031 | if (r) { | ||
2032 | DRM_ERROR("Failed to load firmware!\n"); | ||
2033 | return r; | ||
2034 | } | ||
2035 | } | ||
2036 | |||
2037 | r = r600_pcie_gart_init(rdev); | 2037 | r = r600_pcie_gart_init(rdev); |
2038 | if (r) | 2038 | if (r) |
2039 | return r; | 2039 | return r; |
2040 | 2040 | ||
2041 | rdev->accel_working = true; | ||
2042 | r = r600_blit_init(rdev); | 2041 | r = r600_blit_init(rdev); |
2043 | if (r) { | 2042 | if (r) { |
2044 | DRM_ERROR("radeon: failled blitter (%d).\n", r); | 2043 | DRM_ERROR("radeon: failed blitter (%d).\n", r); |
2045 | return r; | 2044 | return r; |
2046 | } | 2045 | } |
2047 | 2046 | ||
2047 | rdev->accel_working = true; | ||
2048 | r = r600_startup(rdev); | 2048 | r = r600_startup(rdev); |
2049 | if (r) { | 2049 | if (r) { |
2050 | r600_suspend(rdev); | 2050 | r600_suspend(rdev); |
@@ -2056,12 +2056,12 @@ int r600_init(struct radeon_device *rdev) | |||
2056 | if (rdev->accel_working) { | 2056 | if (rdev->accel_working) { |
2057 | r = radeon_ib_pool_init(rdev); | 2057 | r = radeon_ib_pool_init(rdev); |
2058 | if (r) { | 2058 | if (r) { |
2059 | DRM_ERROR("radeon: failled initializing IB pool (%d).\n", r); | 2059 | DRM_ERROR("radeon: failed initializing IB pool (%d).\n", r); |
2060 | rdev->accel_working = false; | 2060 | rdev->accel_working = false; |
2061 | } | 2061 | } |
2062 | r = r600_ib_test(rdev); | 2062 | r = r600_ib_test(rdev); |
2063 | if (r) { | 2063 | if (r) { |
2064 | DRM_ERROR("radeon: failled testing IB (%d).\n", r); | 2064 | DRM_ERROR("radeon: failed testing IB (%d).\n", r); |
2065 | rdev->accel_working = false; | 2065 | rdev->accel_working = false; |
2066 | } | 2066 | } |
2067 | } | 2067 | } |
diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c index dd4f02096a80..2d124bb57762 100644 --- a/drivers/gpu/drm/radeon/rv770.c +++ b/drivers/gpu/drm/radeon/rv770.c | |||
@@ -874,6 +874,14 @@ static int rv770_startup(struct radeon_device *rdev) | |||
874 | { | 874 | { |
875 | int r; | 875 | int r; |
876 | 876 | ||
877 | if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) { | ||
878 | r = r600_init_microcode(rdev); | ||
879 | if (r) { | ||
880 | DRM_ERROR("Failed to load firmware!\n"); | ||
881 | return r; | ||
882 | } | ||
883 | } | ||
884 | |||
877 | rv770_mc_program(rdev); | 885 | rv770_mc_program(rdev); |
878 | if (rdev->flags & RADEON_IS_AGP) { | 886 | if (rdev->flags & RADEON_IS_AGP) { |
879 | rv770_agp_enable(rdev); | 887 | rv770_agp_enable(rdev); |
@@ -1039,25 +1047,17 @@ int rv770_init(struct radeon_device *rdev) | |||
1039 | rdev->ih.ring_obj = NULL; | 1047 | rdev->ih.ring_obj = NULL; |
1040 | r600_ih_ring_init(rdev, 64 * 1024); | 1048 | r600_ih_ring_init(rdev, 64 * 1024); |
1041 | 1049 | ||
1042 | if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) { | ||
1043 | r = r600_init_microcode(rdev); | ||
1044 | if (r) { | ||
1045 | DRM_ERROR("Failed to load firmware!\n"); | ||
1046 | return r; | ||
1047 | } | ||
1048 | } | ||
1049 | |||
1050 | r = r600_pcie_gart_init(rdev); | 1050 | r = r600_pcie_gart_init(rdev); |
1051 | if (r) | 1051 | if (r) |
1052 | return r; | 1052 | return r; |
1053 | 1053 | ||
1054 | rdev->accel_working = true; | ||
1055 | r = r600_blit_init(rdev); | 1054 | r = r600_blit_init(rdev); |
1056 | if (r) { | 1055 | if (r) { |
1057 | DRM_ERROR("radeon: failled blitter (%d).\n", r); | 1056 | DRM_ERROR("radeon: failed blitter (%d).\n", r); |
1058 | rdev->accel_working = false; | 1057 | return r; |
1059 | } | 1058 | } |
1060 | 1059 | ||
1060 | rdev->accel_working = true; | ||
1061 | r = rv770_startup(rdev); | 1061 | r = rv770_startup(rdev); |
1062 | if (r) { | 1062 | if (r) { |
1063 | rv770_suspend(rdev); | 1063 | rv770_suspend(rdev); |
@@ -1069,12 +1069,12 @@ int rv770_init(struct radeon_device *rdev) | |||
1069 | if (rdev->accel_working) { | 1069 | if (rdev->accel_working) { |
1070 | r = radeon_ib_pool_init(rdev); | 1070 | r = radeon_ib_pool_init(rdev); |
1071 | if (r) { | 1071 | if (r) { |
1072 | DRM_ERROR("radeon: failled initializing IB pool (%d).\n", r); | 1072 | DRM_ERROR("radeon: failed initializing IB pool (%d).\n", r); |
1073 | rdev->accel_working = false; | 1073 | rdev->accel_working = false; |
1074 | } | 1074 | } |
1075 | r = r600_ib_test(rdev); | 1075 | r = r600_ib_test(rdev); |
1076 | if (r) { | 1076 | if (r) { |
1077 | DRM_ERROR("radeon: failled testing IB (%d).\n", r); | 1077 | DRM_ERROR("radeon: failed testing IB (%d).\n", r); |
1078 | rdev->accel_working = false; | 1078 | rdev->accel_working = false; |
1079 | } | 1079 | } |
1080 | } | 1080 | } |