Rev 5179 | Rev 6104 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 5179 | Rev 5271 | ||
---|---|---|---|
Line 20... | Line 20... | ||
20 | * OTHER DEALINGS IN THE SOFTWARE. |
20 | * OTHER DEALINGS IN THE SOFTWARE. |
21 | * |
21 | * |
22 | * Authors: Alex Deucher |
22 | * Authors: Alex Deucher |
23 | */ |
23 | */ |
24 | #include |
24 | #include |
25 | //#include |
- | |
26 | #include |
25 | #include |
27 | #include |
26 | #include |
28 | #include "radeon.h" |
27 | #include "radeon.h" |
29 | #include "radeon_asic.h" |
28 | #include "radeon_asic.h" |
30 | #include |
29 | #include |
Line 2344... | Line 2343... | ||
2344 | struct drm_display_mode *mode0 = NULL; |
2343 | struct drm_display_mode *mode0 = NULL; |
2345 | struct drm_display_mode *mode1 = NULL; |
2344 | struct drm_display_mode *mode1 = NULL; |
2346 | u32 num_heads = 0, lb_size; |
2345 | u32 num_heads = 0, lb_size; |
2347 | int i; |
2346 | int i; |
Line -... | Line 2347... | ||
- | 2347 | ||
- | 2348 | if (!rdev->mode_info.mode_config_initialized) |
|
- | 2349 | return; |
|
2348 | 2350 | ||
Line 2349... | Line 2351... | ||
2349 | radeon_update_display_priority(rdev); |
2351 | radeon_update_display_priority(rdev); |
2350 | 2352 | ||
2351 | for (i = 0; i < rdev->num_crtc; i++) { |
2353 | for (i = 0; i < rdev->num_crtc; i++) { |
Line 2551... | Line 2553... | ||
2551 | if (!(tmp & EVERGREEN_CRTC_BLANK_DATA_EN)) { |
2553 | if (!(tmp & EVERGREEN_CRTC_BLANK_DATA_EN)) { |
2552 | radeon_wait_for_vblank(rdev, i); |
2554 | radeon_wait_for_vblank(rdev, i); |
2553 | WREG32(EVERGREEN_CRTC_UPDATE_LOCK + crtc_offsets[i], 1); |
2555 | WREG32(EVERGREEN_CRTC_UPDATE_LOCK + crtc_offsets[i], 1); |
2554 | tmp |= EVERGREEN_CRTC_BLANK_DATA_EN; |
2556 | tmp |= EVERGREEN_CRTC_BLANK_DATA_EN; |
2555 | WREG32(EVERGREEN_CRTC_BLANK_CONTROL + crtc_offsets[i], tmp); |
2557 | WREG32(EVERGREEN_CRTC_BLANK_CONTROL + crtc_offsets[i], tmp); |
- | 2558 | WREG32(EVERGREEN_CRTC_UPDATE_LOCK + crtc_offsets[i], 0); |
|
2556 | } |
2559 | } |
2557 | } else { |
2560 | } else { |
2558 | tmp = RREG32(EVERGREEN_CRTC_CONTROL + crtc_offsets[i]); |
2561 | tmp = RREG32(EVERGREEN_CRTC_CONTROL + crtc_offsets[i]); |
2559 | if (!(tmp & EVERGREEN_CRTC_DISP_READ_REQUEST_DISABLE)) { |
2562 | if (!(tmp & EVERGREEN_CRTC_DISP_READ_REQUEST_DISABLE)) { |
2560 | radeon_wait_for_vblank(rdev, i); |
2563 | radeon_wait_for_vblank(rdev, i); |
Line 3004... | Line 3007... | ||
3004 | u32 sq_stack_resource_mgmt_2; |
3007 | u32 sq_stack_resource_mgmt_2; |
3005 | u32 sq_stack_resource_mgmt_3; |
3008 | u32 sq_stack_resource_mgmt_3; |
3006 | u32 vgt_cache_invalidation; |
3009 | u32 vgt_cache_invalidation; |
3007 | u32 hdp_host_path_cntl, tmp; |
3010 | u32 hdp_host_path_cntl, tmp; |
3008 | u32 disabled_rb_mask; |
3011 | u32 disabled_rb_mask; |
3009 | int i, j, num_shader_engines, ps_thread_count; |
3012 | int i, j, ps_thread_count; |
Line 3010... | Line 3013... | ||
3010 | 3013 | ||
3011 | switch (rdev->family) { |
3014 | switch (rdev->family) { |
3012 | case CHIP_CYPRESS: |
3015 | case CHIP_CYPRESS: |
3013 | case CHIP_HEMLOCK: |
3016 | case CHIP_HEMLOCK: |
Line 3302... | Line 3305... | ||
3302 | } |
3305 | } |
3303 | rdev->config.evergreen.tile_config |= 0 << 8; |
3306 | rdev->config.evergreen.tile_config |= 0 << 8; |
3304 | rdev->config.evergreen.tile_config |= |
3307 | rdev->config.evergreen.tile_config |= |
3305 | ((gb_addr_config & 0x30000000) >> 28) << 12; |
3308 | ((gb_addr_config & 0x30000000) >> 28) << 12; |
Line 3306... | Line -... | ||
3306 | - | ||
3307 | num_shader_engines = (gb_addr_config & NUM_SHADER_ENGINES(3) >> 12) + 1; |
- | |
3308 | 3309 | ||
3309 | if ((rdev->family >= CHIP_CEDAR) && (rdev->family <= CHIP_HEMLOCK)) { |
3310 | if ((rdev->family >= CHIP_CEDAR) && (rdev->family <= CHIP_HEMLOCK)) { |
3310 | u32 efuse_straps_4; |
3311 | u32 efuse_straps_4; |
Line 3311... | Line 3312... | ||
3311 | u32 efuse_straps_3; |
3312 | u32 efuse_straps_3; |
Line 4021... | Line 4022... | ||
4021 | if (src_ptr) { |
4022 | if (src_ptr) { |
4022 | /* save restore block */ |
4023 | /* save restore block */ |
4023 | if (rdev->rlc.save_restore_obj == NULL) { |
4024 | if (rdev->rlc.save_restore_obj == NULL) { |
4024 | r = radeon_bo_create(rdev, dws * 4, PAGE_SIZE, true, |
4025 | r = radeon_bo_create(rdev, dws * 4, PAGE_SIZE, true, |
4025 | RADEON_GEM_DOMAIN_VRAM, 0, NULL, |
4026 | RADEON_GEM_DOMAIN_VRAM, 0, NULL, |
4026 | &rdev->rlc.save_restore_obj); |
4027 | NULL, &rdev->rlc.save_restore_obj); |
4027 | if (r) { |
4028 | if (r) { |
4028 | dev_warn(rdev->dev, "(%d) create RLC sr bo failed\n", r); |
4029 | dev_warn(rdev->dev, "(%d) create RLC sr bo failed\n", r); |
4029 | return r; |
4030 | return r; |
4030 | } |
4031 | } |
4031 | } |
4032 | } |
Line 4100... | Line 4101... | ||
4100 | } |
4101 | } |
Line 4101... | Line 4102... | ||
4101 | 4102 | ||
4102 | if (rdev->rlc.clear_state_obj == NULL) { |
4103 | if (rdev->rlc.clear_state_obj == NULL) { |
4103 | r = radeon_bo_create(rdev, dws * 4, PAGE_SIZE, true, |
4104 | r = radeon_bo_create(rdev, dws * 4, PAGE_SIZE, true, |
4104 | RADEON_GEM_DOMAIN_VRAM, 0, NULL, |
4105 | RADEON_GEM_DOMAIN_VRAM, 0, NULL, |
4105 | &rdev->rlc.clear_state_obj); |
4106 | NULL, &rdev->rlc.clear_state_obj); |
4106 | if (r) { |
4107 | if (r) { |
4107 | dev_warn(rdev->dev, "(%d) create RLC c bo failed\n", r); |
4108 | dev_warn(rdev->dev, "(%d) create RLC c bo failed\n", r); |
4108 | sumo_rlc_fini(rdev); |
4109 | sumo_rlc_fini(rdev); |
4109 | return r; |
4110 | return r; |
Line 4177... | Line 4178... | ||
4177 | if (rdev->rlc.cp_table_size) { |
4178 | if (rdev->rlc.cp_table_size) { |
4178 | if (rdev->rlc.cp_table_obj == NULL) { |
4179 | if (rdev->rlc.cp_table_obj == NULL) { |
4179 | r = radeon_bo_create(rdev, rdev->rlc.cp_table_size, |
4180 | r = radeon_bo_create(rdev, rdev->rlc.cp_table_size, |
4180 | PAGE_SIZE, true, |
4181 | PAGE_SIZE, true, |
4181 | RADEON_GEM_DOMAIN_VRAM, 0, NULL, |
4182 | RADEON_GEM_DOMAIN_VRAM, 0, NULL, |
4182 | &rdev->rlc.cp_table_obj); |
4183 | NULL, &rdev->rlc.cp_table_obj); |
4183 | if (r) { |
4184 | if (r) { |
4184 | dev_warn(rdev->dev, "(%d) create RLC cp table bo failed\n", r); |
4185 | dev_warn(rdev->dev, "(%d) create RLC cp table bo failed\n", r); |
4185 | sumo_rlc_fini(rdev); |
4186 | sumo_rlc_fini(rdev); |
4186 | return r; |
4187 | return r; |
4187 | } |
4188 | } |
Line 5133... | Line 5134... | ||
5133 | } |
5134 | } |
Line 5134... | Line 5135... | ||
5134 | 5135 | ||
5135 | /* wptr/rptr are in bytes! */ |
5136 | /* wptr/rptr are in bytes! */ |
5136 | rptr += 16; |
5137 | rptr += 16; |
- | 5138 | rptr &= rdev->ih.ptr_mask; |
|
5137 | rptr &= rdev->ih.ptr_mask; |
5139 | WREG32(IH_RB_RPTR, rptr); |
5138 | } |
5140 | } |
5139 | rdev->ih.rptr = rptr; |
- | |
5140 | WREG32(IH_RB_RPTR, rdev->ih.rptr); |
5141 | rdev->ih.rptr = rptr; |
Line 5141... | Line 5142... | ||
5141 | atomic_set(&rdev->ih.lock, 0); |
5142 | atomic_set(&rdev->ih.lock, 0); |
5142 | 5143 | ||
5143 | /* make sure wptr hasn't changed while processing */ |
5144 | /* make sure wptr hasn't changed while processing */ |