Rev 3764 | Rev 5271 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3764 | Rev 5078 | ||
---|---|---|---|
Line 32... | Line 32... | ||
32 | #include "radeon_asic.h" |
32 | #include "radeon_asic.h" |
Line 33... | Line 33... | ||
33 | 33 | ||
34 | #include "r100d.h" |
34 | #include "r100d.h" |
Line 35... | Line -... | ||
35 | #include "r200_reg_safe.h" |
- | |
36 | - | ||
37 | #if 0 |
35 | #include "r200_reg_safe.h" |
Line 38... | Line 36... | ||
38 | 36 | ||
39 | #include "r100_track.h" |
37 | #include "r100_track.h" |
40 | 38 | ||
Line 79... | Line 77... | ||
79 | vtx_size++; |
77 | vtx_size++; |
80 | if (vtx_fmt_0 & R200_VTX_N1) |
78 | if (vtx_fmt_0 & R200_VTX_N1) |
81 | vtx_size += 3; |
79 | vtx_size += 3; |
82 | return vtx_size; |
80 | return vtx_size; |
83 | } |
81 | } |
84 | #endif |
- | |
Line 85... | Line 82... | ||
85 | 82 | ||
86 | int r200_copy_dma(struct radeon_device *rdev, |
83 | int r200_copy_dma(struct radeon_device *rdev, |
87 | uint64_t src_offset, |
84 | uint64_t src_offset, |
88 | uint64_t dst_offset, |
85 | uint64_t dst_offset, |
Line 122... | Line 119... | ||
122 | radeon_ring_write(ring, PACKET0(RADEON_WAIT_UNTIL, 0)); |
119 | radeon_ring_write(ring, PACKET0(RADEON_WAIT_UNTIL, 0)); |
123 | radeon_ring_write(ring, RADEON_WAIT_DMA_GUI_IDLE); |
120 | radeon_ring_write(ring, RADEON_WAIT_DMA_GUI_IDLE); |
124 | if (fence) { |
121 | if (fence) { |
125 | r = radeon_fence_emit(rdev, fence, RADEON_RING_TYPE_GFX_INDEX); |
122 | r = radeon_fence_emit(rdev, fence, RADEON_RING_TYPE_GFX_INDEX); |
126 | } |
123 | } |
127 | radeon_ring_unlock_commit(rdev, ring); |
124 | radeon_ring_unlock_commit(rdev, ring, false); |
128 | return r; |
125 | return r; |
129 | } |
126 | } |
130 | #if 0 |
127 | |
Line 131... | Line 128... | ||
131 | 128 | ||
132 | static int r200_get_vtx_size_1(uint32_t vtx_fmt_1) |
129 | static int r200_get_vtx_size_1(uint32_t vtx_fmt_1) |
133 | { |
130 | { |
134 | int vtx_size, i, tex_size; |
131 | int vtx_size, i, tex_size; |
Line 186... | Line 183... | ||
186 | return r; |
183 | return r; |
187 | } |
184 | } |
188 | track->zb.robj = reloc->robj; |
185 | track->zb.robj = reloc->robj; |
189 | track->zb.offset = idx_value; |
186 | track->zb.offset = idx_value; |
190 | track->zb_dirty = true; |
187 | track->zb_dirty = true; |
191 | ib[idx] = idx_value + ((u32)reloc->lobj.gpu_offset); |
188 | ib[idx] = idx_value + ((u32)reloc->gpu_offset); |
192 | break; |
189 | break; |
193 | case RADEON_RB3D_COLOROFFSET: |
190 | case RADEON_RB3D_COLOROFFSET: |
194 | r = radeon_cs_packet_next_reloc(p, &reloc, 0); |
191 | r = radeon_cs_packet_next_reloc(p, &reloc, 0); |
195 | if (r) { |
192 | if (r) { |
196 | DRM_ERROR("No reloc for ib[%d]=0x%04X\n", |
193 | DRM_ERROR("No reloc for ib[%d]=0x%04X\n", |
Line 199... | Line 196... | ||
199 | return r; |
196 | return r; |
200 | } |
197 | } |
201 | track->cb[0].robj = reloc->robj; |
198 | track->cb[0].robj = reloc->robj; |
202 | track->cb[0].offset = idx_value; |
199 | track->cb[0].offset = idx_value; |
203 | track->cb_dirty = true; |
200 | track->cb_dirty = true; |
204 | ib[idx] = idx_value + ((u32)reloc->lobj.gpu_offset); |
201 | ib[idx] = idx_value + ((u32)reloc->gpu_offset); |
205 | break; |
202 | break; |
206 | case R200_PP_TXOFFSET_0: |
203 | case R200_PP_TXOFFSET_0: |
207 | case R200_PP_TXOFFSET_1: |
204 | case R200_PP_TXOFFSET_1: |
208 | case R200_PP_TXOFFSET_2: |
205 | case R200_PP_TXOFFSET_2: |
209 | case R200_PP_TXOFFSET_3: |
206 | case R200_PP_TXOFFSET_3: |
Line 216... | Line 213... | ||
216 | idx, reg); |
213 | idx, reg); |
217 | radeon_cs_dump_packet(p, pkt); |
214 | radeon_cs_dump_packet(p, pkt); |
218 | return r; |
215 | return r; |
219 | } |
216 | } |
220 | if (!(p->cs_flags & RADEON_CS_KEEP_TILING_FLAGS)) { |
217 | if (!(p->cs_flags & RADEON_CS_KEEP_TILING_FLAGS)) { |
221 | if (reloc->lobj.tiling_flags & RADEON_TILING_MACRO) |
218 | if (reloc->tiling_flags & RADEON_TILING_MACRO) |
222 | tile_flags |= R200_TXO_MACRO_TILE; |
219 | tile_flags |= R200_TXO_MACRO_TILE; |
223 | if (reloc->lobj.tiling_flags & RADEON_TILING_MICRO) |
220 | if (reloc->tiling_flags & RADEON_TILING_MICRO) |
224 | tile_flags |= R200_TXO_MICRO_TILE; |
221 | tile_flags |= R200_TXO_MICRO_TILE; |
Line 225... | Line 222... | ||
225 | 222 | ||
226 | tmp = idx_value & ~(0x7 << 2); |
223 | tmp = idx_value & ~(0x7 << 2); |
227 | tmp |= tile_flags; |
224 | tmp |= tile_flags; |
228 | ib[idx] = tmp + ((u32)reloc->lobj.gpu_offset); |
225 | ib[idx] = tmp + ((u32)reloc->gpu_offset); |
229 | } else |
226 | } else |
230 | ib[idx] = idx_value + ((u32)reloc->lobj.gpu_offset); |
227 | ib[idx] = idx_value + ((u32)reloc->gpu_offset); |
231 | track->textures[i].robj = reloc->robj; |
228 | track->textures[i].robj = reloc->robj; |
232 | track->tex_dirty = true; |
229 | track->tex_dirty = true; |
233 | break; |
230 | break; |
234 | case R200_PP_CUBIC_OFFSET_F1_0: |
231 | case R200_PP_CUBIC_OFFSET_F1_0: |
Line 269... | Line 266... | ||
269 | idx, reg); |
266 | idx, reg); |
270 | radeon_cs_dump_packet(p, pkt); |
267 | radeon_cs_dump_packet(p, pkt); |
271 | return r; |
268 | return r; |
272 | } |
269 | } |
273 | track->textures[i].cube_info[face - 1].offset = idx_value; |
270 | track->textures[i].cube_info[face - 1].offset = idx_value; |
274 | ib[idx] = idx_value + ((u32)reloc->lobj.gpu_offset); |
271 | ib[idx] = idx_value + ((u32)reloc->gpu_offset); |
275 | track->textures[i].cube_info[face - 1].robj = reloc->robj; |
272 | track->textures[i].cube_info[face - 1].robj = reloc->robj; |
276 | track->tex_dirty = true; |
273 | track->tex_dirty = true; |
277 | break; |
274 | break; |
278 | case RADEON_RE_WIDTH_HEIGHT: |
275 | case RADEON_RE_WIDTH_HEIGHT: |
279 | track->maxy = ((idx_value >> 16) & 0x7FF); |
276 | track->maxy = ((idx_value >> 16) & 0x7FF); |
Line 288... | Line 285... | ||
288 | radeon_cs_dump_packet(p, pkt); |
285 | radeon_cs_dump_packet(p, pkt); |
289 | return r; |
286 | return r; |
290 | } |
287 | } |
Line 291... | Line 288... | ||
291 | 288 | ||
292 | if (!(p->cs_flags & RADEON_CS_KEEP_TILING_FLAGS)) { |
289 | if (!(p->cs_flags & RADEON_CS_KEEP_TILING_FLAGS)) { |
293 | if (reloc->lobj.tiling_flags & RADEON_TILING_MACRO) |
290 | if (reloc->tiling_flags & RADEON_TILING_MACRO) |
294 | tile_flags |= RADEON_COLOR_TILE_ENABLE; |
291 | tile_flags |= RADEON_COLOR_TILE_ENABLE; |
295 | if (reloc->lobj.tiling_flags & RADEON_TILING_MICRO) |
292 | if (reloc->tiling_flags & RADEON_TILING_MICRO) |
Line 296... | Line 293... | ||
296 | tile_flags |= RADEON_COLOR_MICROTILE_ENABLE; |
293 | tile_flags |= RADEON_COLOR_MICROTILE_ENABLE; |
297 | 294 | ||
298 | tmp = idx_value & ~(0x7 << 16); |
295 | tmp = idx_value & ~(0x7 << 16); |
Line 363... | Line 360... | ||
363 | DRM_ERROR("No reloc for ib[%d]=0x%04X\n", |
360 | DRM_ERROR("No reloc for ib[%d]=0x%04X\n", |
364 | idx, reg); |
361 | idx, reg); |
365 | radeon_cs_dump_packet(p, pkt); |
362 | radeon_cs_dump_packet(p, pkt); |
366 | return r; |
363 | return r; |
367 | } |
364 | } |
368 | ib[idx] = idx_value + ((u32)reloc->lobj.gpu_offset); |
365 | ib[idx] = idx_value + ((u32)reloc->gpu_offset); |
369 | break; |
366 | break; |
370 | case RADEON_PP_CNTL: |
367 | case RADEON_PP_CNTL: |
371 | { |
368 | { |
372 | uint32_t temp = idx_value >> 4; |
369 | uint32_t temp = idx_value >> 4; |
373 | for (i = 0; i < track->num_texture; i++) |
370 | for (i = 0; i < track->num_texture; i++) |
Line 541... | Line 538... | ||
541 | reg, idx); |
538 | reg, idx); |
542 | return -EINVAL; |
539 | return -EINVAL; |
543 | } |
540 | } |
544 | return 0; |
541 | return 0; |
545 | } |
542 | } |
546 | #endif |
- | |
Line 547... | Line 543... | ||
547 | 543 | ||
548 | void r200_set_safe_registers(struct radeon_device *rdev) |
544 | void r200_set_safe_registers(struct radeon_device *rdev) |
549 | { |
545 | { |
550 | rdev->config.r100.reg_safe_bm = r200_reg_safe_bm; |
546 | rdev->config.r100.reg_safe_bm = r200_reg_safe_bm; |