Rev 5139 | Rev 6104 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 5139 | Rev 5271 | ||
---|---|---|---|
Line 867... | Line 867... | ||
867 | /* Unused on older asics, since we don't have semaphores or multiple rings */ |
867 | /* Unused on older asics, since we don't have semaphores or multiple rings */ |
868 | BUG(); |
868 | BUG(); |
869 | return false; |
869 | return false; |
870 | } |
870 | } |
Line 871... | Line 871... | ||
871 | 871 | ||
872 | int r100_copy_blit(struct radeon_device *rdev, |
872 | struct radeon_fence *r100_copy_blit(struct radeon_device *rdev, |
873 | uint64_t src_offset, |
873 | uint64_t src_offset, |
874 | uint64_t dst_offset, |
874 | uint64_t dst_offset, |
875 | unsigned num_gpu_pages, |
875 | unsigned num_gpu_pages, |
876 | struct radeon_fence **fence) |
876 | struct reservation_object *resv) |
877 | { |
877 | { |
- | 878 | struct radeon_ring *ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]; |
|
878 | struct radeon_ring *ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]; |
879 | struct radeon_fence *fence; |
879 | uint32_t cur_pages; |
880 | uint32_t cur_pages; |
880 | uint32_t stride_bytes = RADEON_GPU_PAGE_SIZE; |
881 | uint32_t stride_bytes = RADEON_GPU_PAGE_SIZE; |
881 | uint32_t pitch; |
882 | uint32_t pitch; |
882 | uint32_t stride_pixels; |
883 | uint32_t stride_pixels; |
Line 894... | Line 895... | ||
894 | /* Ask for enough room for blit + flush + fence */ |
895 | /* Ask for enough room for blit + flush + fence */ |
895 | ndw = 64 + (10 * num_loops); |
896 | ndw = 64 + (10 * num_loops); |
896 | r = radeon_ring_lock(rdev, ring, ndw); |
897 | r = radeon_ring_lock(rdev, ring, ndw); |
897 | if (r) { |
898 | if (r) { |
898 | DRM_ERROR("radeon: moving bo (%d) asking for %u dw.\n", r, ndw); |
899 | DRM_ERROR("radeon: moving bo (%d) asking for %u dw.\n", r, ndw); |
899 | return -EINVAL; |
900 | return ERR_PTR(-EINVAL); |
900 | } |
901 | } |
901 | while (num_gpu_pages > 0) { |
902 | while (num_gpu_pages > 0) { |
902 | cur_pages = num_gpu_pages; |
903 | cur_pages = num_gpu_pages; |
903 | if (cur_pages > 8191) { |
904 | if (cur_pages > 8191) { |
904 | cur_pages = 8191; |
905 | cur_pages = 8191; |
Line 934... | Line 935... | ||
934 | radeon_ring_write(ring, PACKET0(RADEON_WAIT_UNTIL, 0)); |
935 | radeon_ring_write(ring, PACKET0(RADEON_WAIT_UNTIL, 0)); |
935 | radeon_ring_write(ring, |
936 | radeon_ring_write(ring, |
936 | RADEON_WAIT_2D_IDLECLEAN | |
937 | RADEON_WAIT_2D_IDLECLEAN | |
937 | RADEON_WAIT_HOST_IDLECLEAN | |
938 | RADEON_WAIT_HOST_IDLECLEAN | |
938 | RADEON_WAIT_DMA_GUI_IDLE); |
939 | RADEON_WAIT_DMA_GUI_IDLE); |
- | 940 | r = radeon_fence_emit(rdev, &fence, RADEON_RING_TYPE_GFX_INDEX); |
|
939 | if (fence) { |
941 | if (r) { |
940 | r = radeon_fence_emit(rdev, fence, RADEON_RING_TYPE_GFX_INDEX); |
942 | radeon_ring_unlock_undo(rdev, ring); |
- | 943 | return ERR_PTR(r); |
|
941 | } |
944 | } |
942 | radeon_ring_unlock_commit(rdev, ring, false); |
945 | radeon_ring_unlock_commit(rdev, ring, false); |
943 | return r; |
946 | return fence; |
944 | } |
947 | } |
Line 945... | Line 948... | ||
945 | 948 | ||
946 | static int r100_cp_wait_for_idle(struct radeon_device *rdev) |
949 | static int r100_cp_wait_for_idle(struct radeon_device *rdev) |
947 | { |
950 | { |
Line 1245... | Line 1248... | ||
1245 | unsigned reg) |
1248 | unsigned reg) |
1246 | { |
1249 | { |
1247 | int r; |
1250 | int r; |
1248 | u32 tile_flags = 0; |
1251 | u32 tile_flags = 0; |
1249 | u32 tmp; |
1252 | u32 tmp; |
1250 | struct radeon_cs_reloc *reloc; |
1253 | struct radeon_bo_list *reloc; |
1251 | u32 value; |
1254 | u32 value; |
Line 1252... | Line 1255... | ||
1252 | 1255 | ||
1253 | r = radeon_cs_packet_next_reloc(p, &reloc, 0); |
1256 | r = radeon_cs_packet_next_reloc(p, &reloc, 0); |
1254 | if (r) { |
1257 | if (r) { |
Line 1284... | Line 1287... | ||
1284 | int r100_packet3_load_vbpntr(struct radeon_cs_parser *p, |
1287 | int r100_packet3_load_vbpntr(struct radeon_cs_parser *p, |
1285 | struct radeon_cs_packet *pkt, |
1288 | struct radeon_cs_packet *pkt, |
1286 | int idx) |
1289 | int idx) |
1287 | { |
1290 | { |
1288 | unsigned c, i; |
1291 | unsigned c, i; |
1289 | struct radeon_cs_reloc *reloc; |
1292 | struct radeon_bo_list *reloc; |
1290 | struct r100_cs_track *track; |
1293 | struct r100_cs_track *track; |
1291 | int r = 0; |
1294 | int r = 0; |
1292 | volatile uint32_t *ib; |
1295 | volatile uint32_t *ib; |
1293 | u32 idx_value; |
1296 | u32 idx_value; |
Line 1533... | Line 1536... | ||
1533 | 1536 | ||
1534 | static int r100_packet0_check(struct radeon_cs_parser *p, |
1537 | static int r100_packet0_check(struct radeon_cs_parser *p, |
1535 | struct radeon_cs_packet *pkt, |
1538 | struct radeon_cs_packet *pkt, |
1536 | unsigned idx, unsigned reg) |
1539 | unsigned idx, unsigned reg) |
1537 | { |
1540 | { |
1538 | struct radeon_cs_reloc *reloc; |
1541 | struct radeon_bo_list *reloc; |
1539 | struct r100_cs_track *track; |
1542 | struct r100_cs_track *track; |
1540 | volatile uint32_t *ib; |
1543 | volatile uint32_t *ib; |
1541 | uint32_t tmp; |
1544 | uint32_t tmp; |
1542 | int r; |
1545 | int r; |
Line 1892... | Line 1895... | ||
1892 | } |
1895 | } |
Line 1893... | Line 1896... | ||
1893 | 1896 | ||
1894 | static int r100_packet3_check(struct radeon_cs_parser *p, |
1897 | static int r100_packet3_check(struct radeon_cs_parser *p, |
1895 | struct radeon_cs_packet *pkt) |
1898 | struct radeon_cs_packet *pkt) |
1896 | { |
1899 | { |
1897 | struct radeon_cs_reloc *reloc; |
1900 | struct radeon_bo_list *reloc; |
1898 | struct r100_cs_track *track; |
1901 | struct r100_cs_track *track; |
1899 | unsigned idx; |
1902 | unsigned idx; |
1900 | volatile uint32_t *ib; |
1903 | volatile uint32_t *ib; |
Line 2052... | Line 2055... | ||
2052 | pkt.type); |
2055 | pkt.type); |
2053 | return -EINVAL; |
2056 | return -EINVAL; |
2054 | } |
2057 | } |
2055 | if (r) |
2058 | if (r) |
2056 | return r; |
2059 | return r; |
2057 | } while (p->idx < p->chunks[p->chunk_ib_idx].length_dw); |
2060 | } while (p->idx < p->chunk_ib->length_dw); |
2058 | return 0; |
2061 | return 0; |
2059 | } |
2062 | } |
Line 2060... | Line 2063... | ||
2060 | 2063 | ||
2061 | static void r100_cs_track_texture_print(struct r100_cs_track_texture *t) |
2064 | static void r100_cs_track_texture_print(struct r100_cs_track_texture *t) |
Line 3198... | Line 3201... | ||
3198 | struct drm_display_mode *mode1 = NULL; |
3201 | struct drm_display_mode *mode1 = NULL; |
3199 | struct drm_display_mode *mode2 = NULL; |
3202 | struct drm_display_mode *mode2 = NULL; |
3200 | uint32_t pixel_bytes1 = 0; |
3203 | uint32_t pixel_bytes1 = 0; |
3201 | uint32_t pixel_bytes2 = 0; |
3204 | uint32_t pixel_bytes2 = 0; |
Line -... | Line 3205... | ||
- | 3205 | ||
- | 3206 | if (!rdev->mode_info.mode_config_initialized) |
|
- | 3207 | return; |
|
3202 | 3208 | ||
Line 3203... | Line 3209... | ||
3203 | radeon_update_display_priority(rdev); |
3209 | radeon_update_display_priority(rdev); |
3204 | 3210 | ||
3205 | if (rdev->mode_info.crtcs[0]->base.enabled) { |
3211 | if (rdev->mode_info.crtcs[0]->base.enabled) { |