Rev 1117 | Rev 1120 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1117 | Rev 1119 | ||
---|---|---|---|
Line 30... | Line 30... | ||
30 | #include "radeon_drm.h" |
30 | #include "radeon_drm.h" |
31 | #include "radeon_reg.h" |
31 | #include "radeon_reg.h" |
32 | #include "radeon.h" |
32 | #include "radeon.h" |
33 | #include "atom.h" |
33 | #include "atom.h" |
Line -... | Line 34... | ||
- | 34 | ||
- | 35 | extern void * ring_buffer; |
|
34 | 36 | ||
35 | #if 0 |
37 | #if 0 |
Line 36... | Line 38... | ||
36 | int radeon_debugfs_ib_init(struct radeon_device *rdev); |
38 | int radeon_debugfs_ib_init(struct radeon_device *rdev); |
37 | 39 | ||
Line 285... | Line 287... | ||
285 | return r; |
287 | return r; |
286 | } |
288 | } |
Line 287... | Line 289... | ||
287 | 289 | ||
Line 288... | Line -... | ||
288 | #endif |
- | |
289 | 290 | #endif |
|
290 | 291 | ||
291 | /* |
292 | /* |
292 | * Ring. |
293 | * Ring. |
293 | */ |
294 | */ |
Line 358... | Line 359... | ||
358 | uint32_t scratch; |
359 | uint32_t scratch; |
359 | uint32_t tmp = 0; |
360 | uint32_t tmp = 0; |
360 | unsigned i; |
361 | unsigned i; |
361 | int r; |
362 | int r; |
Line 362... | Line 363... | ||
362 | 363 | ||
Line 363... | Line 364... | ||
363 | dbgprintf("%s\n\r",__FUNCTION__); |
364 | dbgprintf("%s\n",__FUNCTION__); |
364 | 365 | ||
365 | r = radeon_scratch_get(rdev, &scratch); |
366 | r = radeon_scratch_get(rdev, &scratch); |
366 | if (r) { |
367 | if (r) { |
Line 375... | Line 376... | ||
375 | return r; |
376 | return r; |
376 | } |
377 | } |
377 | radeon_ring_write(rdev, PACKET0(scratch, 0)); |
378 | radeon_ring_write(rdev, PACKET0(scratch, 0)); |
378 | radeon_ring_write(rdev, 0xDEADBEEF); |
379 | radeon_ring_write(rdev, 0xDEADBEEF); |
379 | radeon_ring_unlock_commit(rdev); |
380 | radeon_ring_unlock_commit(rdev); |
380 | for (i = 0; i < rdev->usec_timeout; i++) { |
381 | for (i = 0; i < 100000; i++) { |
381 | tmp = RREG32(scratch); |
382 | tmp = RREG32(scratch); |
382 | if (tmp == 0xDEADBEEF) { |
383 | if (tmp == 0xDEADBEEF) { |
383 | break; |
384 | break; |
384 | } |
385 | } |
385 | DRM_UDELAY(1); |
386 | DRM_UDELAY(1); |
386 | } |
387 | } |
387 | if (i < rdev->usec_timeout) { |
388 | if (i < 100000) { |
388 | DRM_INFO("ring test succeeded in %d usecs\n", i); |
389 | DRM_INFO("ring test succeeded in %d usecs\n", i); |
389 | } else { |
390 | } else { |
390 | DRM_ERROR("radeon: ring test failed (sracth(0x%04X)=0x%08X)\n", |
391 | DRM_ERROR("radeon: ring test failed (sracth(0x%04X)=0x%08X)\n", |
391 | scratch, tmp); |
392 | scratch, tmp); |
392 | r = -EINVAL; |
393 | r = -EINVAL; |
393 | } |
394 | } |
394 | radeon_scratch_free(rdev, scratch); |
395 | radeon_scratch_free(rdev, scratch); |
- | 396 | ||
- | 397 | dbgprintf("done %s\n",__FUNCTION__); |
|
395 | return r; |
398 | return r; |
396 | } |
399 | } |
Line -... | Line 400... | ||
- | 400 | ||
- | 401 | ||
- | 402 | int radeon_gart_bind(struct radeon_device *rdev, unsigned offset, |
|
- | 403 | int pages, u32_t *pagelist); |
|
- | 404 | ||
- | 405 | #define page_tabs 0xFDC00000 |
|
397 | 406 | ||
398 | 407 | ||
399 | int radeon_ring_init(struct radeon_device *rdev, unsigned ring_size) |
408 | int radeon_ring_init(struct radeon_device *rdev, unsigned ring_size) |
Line 400... | Line 409... | ||
400 | { |
409 | { |
Line 401... | Line 410... | ||
401 | int r; |
410 | int r; |
Line 402... | Line 411... | ||
402 | 411 | ||
403 | dbgprintf("%s\n\r",__FUNCTION__); |
412 | dbgprintf("%s\n",__FUNCTION__); |
Line 433... | Line 442... | ||
433 | return r; |
442 | return r; |
434 | } |
443 | } |
435 | } |
444 | } |
436 | #endif |
445 | #endif |
Line -... | Line 446... | ||
- | 446 | ||
- | 447 | dbgprintf("ring size %x\n", ring_size); |
|
- | 448 | ||
- | 449 | dbgprintf("ring buffer %x\n", rdev->cp.ring ); |
|
437 | 450 | ||
- | 451 | rdev->cp.ring = ring_buffer; //CreateRingBuffer( ring_size, PG_SW ); |
|
- | 452 | ||
- | 453 | dbgprintf("ring buffer %x\n", rdev->cp.ring ); |
|
438 | rdev->cp.ring = CreateRingBuffer( ring_size, PG_SW); |
454 | |
- | 455 | rdev->cp.gpu_addr = rdev->mc.gtt_location; |
|
- | 456 | ||
- | 457 | u32_t *pagelist = &((u32_t*)page_tabs)[(u32_t)rdev->cp.ring >> 12]; |
|
- | 458 | ||
- | 459 | dbgprintf("pagelist %x\n", pagelist); |
|
- | 460 | ||
- | 461 | radeon_gart_bind(rdev, 0, ring_size / 4096, pagelist); |
|
439 | rdev->cp.gpu_addr = GetPgAddr(rdev->cp.ring); |
462 | |
440 | rdev->cp.ptr_mask = (rdev->cp.ring_size / 4) - 1; |
463 | rdev->cp.ptr_mask = (rdev->cp.ring_size / 4) - 1; |
- | 464 | rdev->cp.ring_free_dw = rdev->cp.ring_size / 4; |
|
- | 465 | ||
- | 466 | dbgprintf("done %s\n",__FUNCTION__); |
|
441 | rdev->cp.ring_free_dw = rdev->cp.ring_size / 4; |
467 | |
442 | return 0; |
468 | return 0; |
Line 443... | Line 469... | ||
443 | } |
469 | } |
444 | 470 |