diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/rv770.c')
-rw-r--r-- | drivers/gpu/drm/radeon/rv770.c | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c index 37887dee12af..97958a64df1a 100644 --- a/drivers/gpu/drm/radeon/rv770.c +++ b/drivers/gpu/drm/radeon/rv770.c | |||
@@ -27,8 +27,10 @@ | |||
27 | */ | 27 | */ |
28 | #include <linux/firmware.h> | 28 | #include <linux/firmware.h> |
29 | #include <linux/platform_device.h> | 29 | #include <linux/platform_device.h> |
30 | #include <linux/slab.h> | ||
30 | #include "drmP.h" | 31 | #include "drmP.h" |
31 | #include "radeon.h" | 32 | #include "radeon.h" |
33 | #include "radeon_asic.h" | ||
32 | #include "radeon_drm.h" | 34 | #include "radeon_drm.h" |
33 | #include "rv770d.h" | 35 | #include "rv770d.h" |
34 | #include "atom.h" | 36 | #include "atom.h" |
@@ -125,9 +127,9 @@ void rv770_pcie_gart_disable(struct radeon_device *rdev) | |||
125 | 127 | ||
126 | void rv770_pcie_gart_fini(struct radeon_device *rdev) | 128 | void rv770_pcie_gart_fini(struct radeon_device *rdev) |
127 | { | 129 | { |
130 | radeon_gart_fini(rdev); | ||
128 | rv770_pcie_gart_disable(rdev); | 131 | rv770_pcie_gart_disable(rdev); |
129 | radeon_gart_table_vram_free(rdev); | 132 | radeon_gart_table_vram_free(rdev); |
130 | radeon_gart_fini(rdev); | ||
131 | } | 133 | } |
132 | 134 | ||
133 | 135 | ||
@@ -647,10 +649,13 @@ static void rv770_gpu_init(struct radeon_device *rdev) | |||
647 | 649 | ||
648 | WREG32(CC_RB_BACKEND_DISABLE, cc_rb_backend_disable); | 650 | WREG32(CC_RB_BACKEND_DISABLE, cc_rb_backend_disable); |
649 | WREG32(CC_GC_SHADER_PIPE_CONFIG, cc_gc_shader_pipe_config); | 651 | WREG32(CC_GC_SHADER_PIPE_CONFIG, cc_gc_shader_pipe_config); |
652 | WREG32(GC_USER_SHADER_PIPE_CONFIG, cc_gc_shader_pipe_config); | ||
650 | WREG32(CC_SYS_RB_BACKEND_DISABLE, cc_rb_backend_disable); | 653 | WREG32(CC_SYS_RB_BACKEND_DISABLE, cc_rb_backend_disable); |
651 | 654 | ||
652 | WREG32(CGTS_SYS_TCC_DISABLE, 0); | 655 | WREG32(CGTS_SYS_TCC_DISABLE, 0); |
653 | WREG32(CGTS_TCC_DISABLE, 0); | 656 | WREG32(CGTS_TCC_DISABLE, 0); |
657 | WREG32(CGTS_USER_SYS_TCC_DISABLE, 0); | ||
658 | WREG32(CGTS_USER_TCC_DISABLE, 0); | ||
654 | 659 | ||
655 | num_qd_pipes = | 660 | num_qd_pipes = |
656 | R7XX_MAX_PIPES - r600_count_pipe_bits((cc_gc_shader_pipe_config & INACTIVE_QD_PIPES_MASK) >> 8); | 661 | R7XX_MAX_PIPES - r600_count_pipe_bits((cc_gc_shader_pipe_config & INACTIVE_QD_PIPES_MASK) >> 8); |
@@ -864,7 +869,6 @@ static void rv770_gpu_init(struct radeon_device *rdev) | |||
864 | 869 | ||
865 | int rv770_mc_init(struct radeon_device *rdev) | 870 | int rv770_mc_init(struct radeon_device *rdev) |
866 | { | 871 | { |
867 | fixed20_12 a; | ||
868 | u32 tmp; | 872 | u32 tmp; |
869 | int chansize, numchan; | 873 | int chansize, numchan; |
870 | 874 | ||
@@ -908,12 +912,8 @@ int rv770_mc_init(struct radeon_device *rdev) | |||
908 | rdev->mc.real_vram_size = rdev->mc.aper_size; | 912 | rdev->mc.real_vram_size = rdev->mc.aper_size; |
909 | } | 913 | } |
910 | r600_vram_gtt_location(rdev, &rdev->mc); | 914 | r600_vram_gtt_location(rdev, &rdev->mc); |
911 | /* FIXME: we should enforce default clock in case GPU is not in | 915 | radeon_update_bandwidth_info(rdev); |
912 | * default setup | 916 | |
913 | */ | ||
914 | a.full = rfixed_const(100); | ||
915 | rdev->pm.sclk.full = rfixed_const(rdev->clock.default_sclk); | ||
916 | rdev->pm.sclk.full = rfixed_div(rdev->pm.sclk, a); | ||
917 | return 0; | 917 | return 0; |
918 | } | 918 | } |
919 | 919 | ||
@@ -1013,6 +1013,13 @@ int rv770_resume(struct radeon_device *rdev) | |||
1013 | DRM_ERROR("radeon: failled testing IB (%d).\n", r); | 1013 | DRM_ERROR("radeon: failled testing IB (%d).\n", r); |
1014 | return r; | 1014 | return r; |
1015 | } | 1015 | } |
1016 | |||
1017 | r = r600_audio_init(rdev); | ||
1018 | if (r) { | ||
1019 | dev_err(rdev->dev, "radeon: audio init failed\n"); | ||
1020 | return r; | ||
1021 | } | ||
1022 | |||
1016 | return r; | 1023 | return r; |
1017 | 1024 | ||
1018 | } | 1025 | } |
@@ -1021,6 +1028,7 @@ int rv770_suspend(struct radeon_device *rdev) | |||
1021 | { | 1028 | { |
1022 | int r; | 1029 | int r; |
1023 | 1030 | ||
1031 | r600_audio_fini(rdev); | ||
1024 | /* FIXME: we should wait for ring to be empty */ | 1032 | /* FIXME: we should wait for ring to be empty */ |
1025 | r700_cp_stop(rdev); | 1033 | r700_cp_stop(rdev); |
1026 | rdev->cp.ready = false; | 1034 | rdev->cp.ready = false; |
@@ -1144,11 +1152,19 @@ int rv770_init(struct radeon_device *rdev) | |||
1144 | } | 1152 | } |
1145 | } | 1153 | } |
1146 | } | 1154 | } |
1155 | |||
1156 | r = r600_audio_init(rdev); | ||
1157 | if (r) { | ||
1158 | dev_err(rdev->dev, "radeon: audio init failed\n"); | ||
1159 | return r; | ||
1160 | } | ||
1161 | |||
1147 | return 0; | 1162 | return 0; |
1148 | } | 1163 | } |
1149 | 1164 | ||
1150 | void rv770_fini(struct radeon_device *rdev) | 1165 | void rv770_fini(struct radeon_device *rdev) |
1151 | { | 1166 | { |
1167 | radeon_pm_fini(rdev); | ||
1152 | r600_blit_fini(rdev); | 1168 | r600_blit_fini(rdev); |
1153 | r600_cp_fini(rdev); | 1169 | r600_cp_fini(rdev); |
1154 | r600_wb_fini(rdev); | 1170 | r600_wb_fini(rdev); |