Rev 1413 | Rev 1963 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1413 | Rev 1430 | ||
---|---|---|---|
Line 54... | Line 54... | ||
54 | return -EINVAL; |
54 | return -EINVAL; |
55 | } |
55 | } |
56 | r = radeon_gart_table_vram_pin(rdev); |
56 | r = radeon_gart_table_vram_pin(rdev); |
57 | if (r) |
57 | if (r) |
58 | return r; |
58 | return r; |
- | 59 | radeon_gart_restore(rdev); |
|
59 | /* Setup L2 cache */ |
60 | /* Setup L2 cache */ |
60 | WREG32(VM_L2_CNTL, ENABLE_L2_CACHE | ENABLE_L2_FRAGMENT_PROCESSING | |
61 | WREG32(VM_L2_CNTL, ENABLE_L2_CACHE | ENABLE_L2_FRAGMENT_PROCESSING | |
61 | ENABLE_L2_PTE_CACHE_LRU_UPDATE_BY_WRITE | |
62 | ENABLE_L2_PTE_CACHE_LRU_UPDATE_BY_WRITE | |
62 | EFFECTIVE_L2_QUEUE_SIZE(7)); |
63 | EFFECTIVE_L2_QUEUE_SIZE(7)); |
63 | WREG32(VM_L2_CNTL2, 0); |
64 | WREG32(VM_L2_CNTL2, 0); |
Line 271... | Line 272... | ||
271 | 272 | ||
272 | 273 | ||
273 | /* |
274 | /* |
274 | * Core functions |
275 | * Core functions |
- | 276 | */ |
|
275 | */ |
277 | static u32 r700_get_tile_pipe_to_backend_map(struct radeon_device *rdev, |
276 | static u32 r700_get_tile_pipe_to_backend_map(u32 num_tile_pipes, |
278 | u32 num_tile_pipes, |
277 | u32 num_backends, |
279 | u32 num_backends, |
278 | u32 backend_disable_mask) |
280 | u32 backend_disable_mask) |
279 | { |
281 | { |
280 | u32 backend_map = 0; |
282 | u32 backend_map = 0; |
281 | u32 enabled_backends_mask; |
283 | u32 enabled_backends_mask; |
282 | u32 enabled_backends_count; |
284 | u32 enabled_backends_count; |
283 | u32 cur_pipe; |
285 | u32 cur_pipe; |
284 | u32 swizzle_pipe[R7XX_MAX_PIPES]; |
286 | u32 swizzle_pipe[R7XX_MAX_PIPES]; |
- | 287 | u32 cur_backend; |
|
Line 285... | Line 288... | ||
285 | u32 cur_backend; |
288 | u32 i; |
286 | u32 i; |
289 | bool force_no_swizzle; |
287 | 290 | ||
288 | if (num_tile_pipes > R7XX_MAX_PIPES) |
291 | if (num_tile_pipes > R7XX_MAX_PIPES) |
Line 311... | Line 314... | ||
311 | } |
314 | } |
Line 312... | Line 315... | ||
312 | 315 | ||
313 | if (enabled_backends_count != num_backends) |
316 | if (enabled_backends_count != num_backends) |
Line -... | Line 317... | ||
- | 317 | num_backends = enabled_backends_count; |
|
- | 318 | ||
- | 319 | switch (rdev->family) { |
|
- | 320 | case CHIP_RV770: |
|
- | 321 | case CHIP_RV730: |
|
- | 322 | force_no_swizzle = false; |
|
- | 323 | break; |
|
- | 324 | case CHIP_RV710: |
|
- | 325 | case CHIP_RV740: |
|
- | 326 | default: |
|
- | 327 | force_no_swizzle = true; |
|
- | 328 | break; |
|
314 | num_backends = enabled_backends_count; |
329 | } |
315 | 330 | ||
316 | memset((uint8_t *)&swizzle_pipe[0], 0, sizeof(u32) * R7XX_MAX_PIPES); |
331 | memset((uint8_t *)&swizzle_pipe[0], 0, sizeof(u32) * R7XX_MAX_PIPES); |
317 | switch (num_tile_pipes) { |
332 | switch (num_tile_pipes) { |
318 | case 1: |
333 | case 1: |
319 | swizzle_pipe[0] = 0; |
334 | swizzle_pipe[0] = 0; |
320 | break; |
335 | break; |
321 | case 2: |
336 | case 2: |
322 | swizzle_pipe[0] = 0; |
337 | swizzle_pipe[0] = 0; |
323 | swizzle_pipe[1] = 1; |
338 | swizzle_pipe[1] = 1; |
- | 339 | break; |
|
- | 340 | case 3: |
|
- | 341 | if (force_no_swizzle) { |
|
- | 342 | swizzle_pipe[0] = 0; |
|
- | 343 | swizzle_pipe[1] = 1; |
|
324 | break; |
344 | swizzle_pipe[2] = 2; |
325 | case 3: |
345 | } else { |
326 | swizzle_pipe[0] = 0; |
346 | swizzle_pipe[0] = 0; |
- | 347 | swizzle_pipe[1] = 2; |
|
327 | swizzle_pipe[1] = 2; |
348 | swizzle_pipe[2] = 1; |
328 | swizzle_pipe[2] = 1; |
349 | } |
- | 350 | break; |
|
- | 351 | case 4: |
|
- | 352 | if (force_no_swizzle) { |
|
- | 353 | swizzle_pipe[0] = 0; |
|
- | 354 | swizzle_pipe[1] = 1; |
|
- | 355 | swizzle_pipe[2] = 2; |
|
329 | break; |
356 | swizzle_pipe[3] = 3; |
330 | case 4: |
357 | } else { |
331 | swizzle_pipe[0] = 0; |
358 | swizzle_pipe[0] = 0; |
332 | swizzle_pipe[1] = 2; |
359 | swizzle_pipe[1] = 2; |
- | 360 | swizzle_pipe[2] = 3; |
|
333 | swizzle_pipe[2] = 3; |
361 | swizzle_pipe[3] = 1; |
334 | swizzle_pipe[3] = 1; |
362 | } |
- | 363 | break; |
|
- | 364 | case 5: |
|
- | 365 | if (force_no_swizzle) { |
|
- | 366 | swizzle_pipe[0] = 0; |
|
- | 367 | swizzle_pipe[1] = 1; |
|
- | 368 | swizzle_pipe[2] = 2; |
|
- | 369 | swizzle_pipe[3] = 3; |
|
335 | break; |
370 | swizzle_pipe[4] = 4; |
336 | case 5: |
371 | } else { |
337 | swizzle_pipe[0] = 0; |
372 | swizzle_pipe[0] = 0; |
338 | swizzle_pipe[1] = 2; |
373 | swizzle_pipe[1] = 2; |
339 | swizzle_pipe[2] = 4; |
374 | swizzle_pipe[2] = 4; |
- | 375 | swizzle_pipe[3] = 1; |
|
340 | swizzle_pipe[3] = 1; |
376 | swizzle_pipe[4] = 3; |
341 | swizzle_pipe[4] = 3; |
377 | } |
- | 378 | break; |
|
- | 379 | case 6: |
|
- | 380 | if (force_no_swizzle) { |
|
- | 381 | swizzle_pipe[0] = 0; |
|
- | 382 | swizzle_pipe[1] = 1; |
|
- | 383 | swizzle_pipe[2] = 2; |
|
- | 384 | swizzle_pipe[3] = 3; |
|
- | 385 | swizzle_pipe[4] = 4; |
|
342 | break; |
386 | swizzle_pipe[5] = 5; |
343 | case 6: |
387 | } else { |
344 | swizzle_pipe[0] = 0; |
388 | swizzle_pipe[0] = 0; |
345 | swizzle_pipe[1] = 2; |
389 | swizzle_pipe[1] = 2; |
346 | swizzle_pipe[2] = 4; |
390 | swizzle_pipe[2] = 4; |
347 | swizzle_pipe[3] = 5; |
391 | swizzle_pipe[3] = 5; |
- | 392 | swizzle_pipe[4] = 3; |
|
348 | swizzle_pipe[4] = 3; |
393 | swizzle_pipe[5] = 1; |
349 | swizzle_pipe[5] = 1; |
394 | } |
- | 395 | break; |
|
- | 396 | case 7: |
|
- | 397 | if (force_no_swizzle) { |
|
- | 398 | swizzle_pipe[0] = 0; |
|
- | 399 | swizzle_pipe[1] = 1; |
|
- | 400 | swizzle_pipe[2] = 2; |
|
- | 401 | swizzle_pipe[3] = 3; |
|
- | 402 | swizzle_pipe[4] = 4; |
|
- | 403 | swizzle_pipe[5] = 5; |
|
350 | break; |
404 | swizzle_pipe[6] = 6; |
351 | case 7: |
405 | } else { |
352 | swizzle_pipe[0] = 0; |
406 | swizzle_pipe[0] = 0; |
353 | swizzle_pipe[1] = 2; |
407 | swizzle_pipe[1] = 2; |
354 | swizzle_pipe[2] = 4; |
408 | swizzle_pipe[2] = 4; |
355 | swizzle_pipe[3] = 6; |
409 | swizzle_pipe[3] = 6; |
356 | swizzle_pipe[4] = 3; |
410 | swizzle_pipe[4] = 3; |
- | 411 | swizzle_pipe[5] = 1; |
|
357 | swizzle_pipe[5] = 1; |
412 | swizzle_pipe[6] = 5; |
358 | swizzle_pipe[6] = 5; |
413 | } |
- | 414 | break; |
|
- | 415 | case 8: |
|
- | 416 | if (force_no_swizzle) { |
|
- | 417 | swizzle_pipe[0] = 0; |
|
- | 418 | swizzle_pipe[1] = 1; |
|
- | 419 | swizzle_pipe[2] = 2; |
|
- | 420 | swizzle_pipe[3] = 3; |
|
- | 421 | swizzle_pipe[4] = 4; |
|
- | 422 | swizzle_pipe[5] = 5; |
|
- | 423 | swizzle_pipe[6] = 6; |
|
359 | break; |
424 | swizzle_pipe[7] = 7; |
360 | case 8: |
425 | } else { |
361 | swizzle_pipe[0] = 0; |
426 | swizzle_pipe[0] = 0; |
362 | swizzle_pipe[1] = 2; |
427 | swizzle_pipe[1] = 2; |
363 | swizzle_pipe[2] = 4; |
428 | swizzle_pipe[2] = 4; |
364 | swizzle_pipe[3] = 6; |
429 | swizzle_pipe[3] = 6; |
365 | swizzle_pipe[4] = 3; |
430 | swizzle_pipe[4] = 3; |
366 | swizzle_pipe[5] = 1; |
431 | swizzle_pipe[5] = 1; |
- | 432 | swizzle_pipe[6] = 7; |
|
367 | swizzle_pipe[6] = 7; |
433 | swizzle_pipe[7] = 5; |
368 | swizzle_pipe[7] = 5; |
434 | } |
Line 369... | Line 435... | ||
369 | break; |
435 | break; |
370 | } |
436 | } |
Line 383... | Line 449... | ||
383 | } |
449 | } |
Line 384... | Line 450... | ||
384 | 450 | ||
385 | static void rv770_gpu_init(struct radeon_device *rdev) |
451 | static void rv770_gpu_init(struct radeon_device *rdev) |
386 | { |
452 | { |
- | 453 | int i, j, num_qd_pipes; |
|
387 | int i, j, num_qd_pipes; |
454 | u32 ta_aux_cntl; |
388 | u32 sx_debug_1; |
455 | u32 sx_debug_1; |
- | 456 | u32 smx_dc_ctl0; |
|
389 | u32 smx_dc_ctl0; |
457 | u32 db_debug3; |
390 | u32 num_gs_verts_per_thread; |
458 | u32 num_gs_verts_per_thread; |
391 | u32 vgt_gs_per_es; |
459 | u32 vgt_gs_per_es; |
392 | u32 gs_prim_buffer_depth = 0; |
460 | u32 gs_prim_buffer_depth = 0; |
393 | u32 sq_ms_fifo_sizes; |
461 | u32 sq_ms_fifo_sizes; |
Line 513... | Line 581... | ||
513 | /* setup tiling, simd, pipe config */ |
581 | /* setup tiling, simd, pipe config */ |
514 | mc_arb_ramcfg = RREG32(MC_ARB_RAMCFG); |
582 | mc_arb_ramcfg = RREG32(MC_ARB_RAMCFG); |
Line 515... | Line 583... | ||
515 | 583 | ||
516 | switch (rdev->config.rv770.max_tile_pipes) { |
584 | switch (rdev->config.rv770.max_tile_pipes) { |
- | 585 | case 1: |
|
517 | case 1: |
586 | default: |
518 | gb_tiling_config |= PIPE_TILING(0); |
587 | gb_tiling_config |= PIPE_TILING(0); |
519 | break; |
588 | break; |
520 | case 2: |
589 | case 2: |
521 | gb_tiling_config |= PIPE_TILING(1); |
590 | gb_tiling_config |= PIPE_TILING(1); |
Line 524... | Line 593... | ||
524 | gb_tiling_config |= PIPE_TILING(2); |
593 | gb_tiling_config |= PIPE_TILING(2); |
525 | break; |
594 | break; |
526 | case 8: |
595 | case 8: |
527 | gb_tiling_config |= PIPE_TILING(3); |
596 | gb_tiling_config |= PIPE_TILING(3); |
528 | break; |
597 | break; |
529 | default: |
- | |
530 | break; |
- | |
531 | } |
598 | } |
- | 599 | rdev->config.rv770.tiling_npipes = rdev->config.rv770.max_tile_pipes; |
|
Line 532... | Line 600... | ||
532 | 600 | ||
533 | if (rdev->family == CHIP_RV770) |
601 | if (rdev->family == CHIP_RV770) |
534 | gb_tiling_config |= BANK_TILING(1); |
602 | gb_tiling_config |= BANK_TILING(1); |
535 | else |
603 | else |
- | 604 | gb_tiling_config |= BANK_TILING((mc_arb_ramcfg & NOOFBANK_MASK) >> NOOFBANK_SHIFT); |
|
Line 536... | Line 605... | ||
536 | gb_tiling_config |= BANK_TILING((mc_arb_ramcfg & NOOFBANK_MASK) >> NOOFBANK_SHIFT); |
605 | rdev->config.rv770.tiling_nbanks = 4 << ((gb_tiling_config >> 4) & 0x3); |
- | 606 | ||
Line 537... | Line 607... | ||
537 | 607 | gb_tiling_config |= GROUP_SIZE(0); |
|
538 | gb_tiling_config |= GROUP_SIZE(0); |
608 | rdev->config.rv770.tiling_group_size = 256; |
539 | 609 | ||
540 | if (((mc_arb_ramcfg & NOOFROWS_MASK) >> NOOFROWS_SHIFT) > 3) { |
610 | if (((mc_arb_ramcfg & NOOFROWS_MASK) >> NOOFROWS_SHIFT) > 3) { |
Line 547... | Line 617... | ||
547 | SAMPLE_SPLIT(((mc_arb_ramcfg & NOOFROWS_MASK) >> NOOFROWS_SHIFT)); |
617 | SAMPLE_SPLIT(((mc_arb_ramcfg & NOOFROWS_MASK) >> NOOFROWS_SHIFT)); |
548 | } |
618 | } |
Line 549... | Line 619... | ||
549 | 619 | ||
Line 550... | Line 620... | ||
550 | gb_tiling_config |= BANK_SWAPS(1); |
620 | gb_tiling_config |= BANK_SWAPS(1); |
551 | 621 | ||
552 | backend_map = r700_get_tile_pipe_to_backend_map(rdev->config.rv770.max_tile_pipes, |
622 | cc_rb_backend_disable = RREG32(CC_RB_BACKEND_DISABLE) & 0x00ff0000; |
553 | rdev->config.rv770.max_backends, |
- | |
Line -... | Line 623... | ||
- | 623 | cc_rb_backend_disable |= |
|
554 | (0xff << rdev->config.rv770.max_backends) & 0xff); |
624 | BACKEND_DISABLE((R7XX_MAX_BACKENDS_MASK << rdev->config.rv770.max_backends) & R7XX_MAX_BACKENDS_MASK); |
555 | gb_tiling_config |= BACKEND_MAP(backend_map); |
625 | |
556 | 626 | cc_gc_shader_pipe_config = RREG32(CC_GC_SHADER_PIPE_CONFIG) & 0xffffff00; |
|
557 | cc_gc_shader_pipe_config = |
627 | cc_gc_shader_pipe_config |= |
Line -... | Line 628... | ||
- | 628 | INACTIVE_QD_PIPES((R7XX_MAX_PIPES_MASK << rdev->config.rv770.max_pipes) & R7XX_MAX_PIPES_MASK); |
|
- | 629 | cc_gc_shader_pipe_config |= |
|
- | 630 | INACTIVE_SIMDS((R7XX_MAX_SIMDS_MASK << rdev->config.rv770.max_simds) & R7XX_MAX_SIMDS_MASK); |
|
- | 631 | ||
- | 632 | if (rdev->family == CHIP_RV740) |
|
- | 633 | backend_map = 0x28; |
|
- | 634 | else |
|
- | 635 | backend_map = r700_get_tile_pipe_to_backend_map(rdev, |
|
558 | INACTIVE_QD_PIPES((R7XX_MAX_PIPES_MASK << rdev->config.rv770.max_pipes) & R7XX_MAX_PIPES_MASK); |
636 | rdev->config.rv770.max_tile_pipes, |
559 | cc_gc_shader_pipe_config |= |
637 | (R7XX_MAX_BACKENDS - |
- | 638 | r600_count_pipe_bits((cc_rb_backend_disable & |
|
Line 560... | Line 639... | ||
560 | INACTIVE_SIMDS((R7XX_MAX_SIMDS_MASK << rdev->config.rv770.max_simds) & R7XX_MAX_SIMDS_MASK); |
639 | R7XX_MAX_BACKENDS_MASK) >> 16)), |
561 | 640 | (cc_rb_backend_disable >> 16)); |
|
562 | cc_rb_backend_disable = |
641 | gb_tiling_config |= BACKEND_MAP(backend_map); |
Line 563... | Line 642... | ||
563 | BACKEND_DISABLE((R7XX_MAX_BACKENDS_MASK << rdev->config.rv770.max_backends) & R7XX_MAX_BACKENDS_MASK); |
642 | |
564 | 643 | ||
565 | WREG32(GB_TILING_CONFIG, gb_tiling_config); |
- | |
566 | WREG32(DCP_TILING_CONFIG, (gb_tiling_config & 0xffff)); |
- | |
567 | WREG32(HDP_TILING_CONFIG, (gb_tiling_config & 0xffff)); |
644 | WREG32(GB_TILING_CONFIG, gb_tiling_config); |
- | 645 | WREG32(DCP_TILING_CONFIG, (gb_tiling_config & 0xffff)); |
|
568 | 646 | WREG32(HDP_TILING_CONFIG, (gb_tiling_config & 0xffff)); |
|
569 | WREG32(CC_RB_BACKEND_DISABLE, cc_rb_backend_disable); |
647 | |
570 | WREG32(CC_GC_SHADER_PIPE_CONFIG, cc_gc_shader_pipe_config); |
- | |
571 | WREG32(GC_USER_SHADER_PIPE_CONFIG, cc_gc_shader_pipe_config); |
- | |
Line 572... | Line 648... | ||
572 | 648 | WREG32(CC_RB_BACKEND_DISABLE, cc_rb_backend_disable); |
|
573 | WREG32(CC_SYS_RB_BACKEND_DISABLE, cc_rb_backend_disable); |
649 | WREG32(CC_GC_SHADER_PIPE_CONFIG, cc_gc_shader_pipe_config); |
574 | WREG32(CGTS_SYS_TCC_DISABLE, 0); |
650 | WREG32(CC_SYS_RB_BACKEND_DISABLE, cc_rb_backend_disable); |
575 | WREG32(CGTS_TCC_DISABLE, 0); |
651 | |
Line 576... | Line 652... | ||
576 | WREG32(CGTS_USER_SYS_TCC_DISABLE, 0); |
652 | WREG32(CGTS_SYS_TCC_DISABLE, 0); |
577 | WREG32(CGTS_USER_TCC_DISABLE, 0); |
653 | WREG32(CGTS_TCC_DISABLE, 0); |
578 | 654 | ||
Line 579... | Line 655... | ||
579 | num_qd_pipes = |
655 | num_qd_pipes = |
Line -... | Line 656... | ||
- | 656 | R7XX_MAX_PIPES - r600_count_pipe_bits((cc_gc_shader_pipe_config & INACTIVE_QD_PIPES_MASK) >> 8); |
|
580 | R7XX_MAX_BACKENDS - r600_count_pipe_bits(cc_gc_shader_pipe_config & INACTIVE_QD_PIPES_MASK); |
657 | WREG32(VGT_OUT_DEALLOC_CNTL, (num_qd_pipes * 4) & DEALLOC_DIST_MASK); |
581 | WREG32(VGT_OUT_DEALLOC_CNTL, (num_qd_pipes * 4) & DEALLOC_DIST_MASK); |
- | |
582 | WREG32(VGT_VERTEX_REUSE_BLOCK_CNTL, ((num_qd_pipes * 4) - 2) & VTX_REUSE_DEPTH_MASK); |
- | |
583 | - | ||
Line 584... | Line 658... | ||
584 | /* set HW defaults for 3D engine */ |
658 | WREG32(VGT_VERTEX_REUSE_BLOCK_CNTL, ((num_qd_pipes * 4) - 2) & VTX_REUSE_DEPTH_MASK); |
585 | WREG32(CP_QUEUE_THRESHOLDS, (ROQ_IB1_START(0x16) | |
659 | |
586 | ROQ_IB2_START(0x2b))); |
660 | /* set HW defaults for 3D engine */ |
Line 587... | Line 661... | ||
587 | 661 | WREG32(CP_QUEUE_THRESHOLDS, (ROQ_IB1_START(0x16) | |
|
588 | WREG32(CP_MEQ_THRESHOLDS, STQ_SPLIT(0x30)); |
662 | ROQ_IB2_START(0x2b))); |
589 | 663 | ||
590 | WREG32(TA_CNTL_AUX, (DISABLE_CUBE_ANISO | |
664 | WREG32(CP_MEQ_THRESHOLDS, STQ_SPLIT(0x30)); |
Line -... | Line 665... | ||
- | 665 | ||
591 | SYNC_GRADIENT | |
666 | ta_aux_cntl = RREG32(TA_CNTL_AUX); |
592 | SYNC_WALKER | |
667 | WREG32(TA_CNTL_AUX, ta_aux_cntl | DISABLE_CUBE_ANISO); |
593 | SYNC_ALIGNER)); |
668 | |
594 | 669 | sx_debug_1 = RREG32(SX_DEBUG_1); |
|
Line -... | Line 670... | ||
- | 670 | sx_debug_1 |= ENABLE_NEW_SMX_ADDRESS; |
|
- | 671 | WREG32(SX_DEBUG_1, sx_debug_1); |
|
595 | sx_debug_1 = RREG32(SX_DEBUG_1); |
672 | |
- | 673 | smx_dc_ctl0 = RREG32(SMX_DC_CTL0); |
|
- | 674 | smx_dc_ctl0 &= ~CACHE_DEPTH(0x1ff); |
|
596 | sx_debug_1 |= ENABLE_NEW_SMX_ADDRESS; |
675 | smx_dc_ctl0 |= CACHE_DEPTH((rdev->config.rv770.sx_num_of_sets * 64) - 1); |
- | 676 | WREG32(SMX_DC_CTL0, smx_dc_ctl0); |
|
- | 677 | ||
- | 678 | if (rdev->family != CHIP_RV740) |
|
- | 679 | WREG32(SMX_EVENT_CTL, (ES_FLUSH_CTL(4) | |
|
- | 680 | GS_FLUSH_CTL(4) | |
|
597 | WREG32(SX_DEBUG_1, sx_debug_1); |
681 | ACK_FLUSH_CTL(3) | |
- | 682 | SYNC_FLUSH_CTL)); |
|
- | 683 | ||
- | 684 | db_debug3 = RREG32(DB_DEBUG3); |
|
- | 685 | db_debug3 &= ~DB_CLK_OFF_DELAY(0x1f); |
|
598 | 686 | switch (rdev->family) { |
|
599 | smx_dc_ctl0 = RREG32(SMX_DC_CTL0); |
687 | case CHIP_RV770: |
600 | smx_dc_ctl0 &= ~CACHE_DEPTH(0x1ff); |
688 | case CHIP_RV740: |
601 | smx_dc_ctl0 |= CACHE_DEPTH((rdev->config.rv770.sx_num_of_sets * 64) - 1); |
689 | db_debug3 |= DB_CLK_OFF_DELAY(0x1f); |
Line 635... | Line 723... | ||
635 | sq_ms_fifo_sizes = (CACHE_FIFO_SIZE(16 * rdev->config.rv770.sq_num_cf_insts) | |
723 | sq_ms_fifo_sizes = (CACHE_FIFO_SIZE(16 * rdev->config.rv770.sq_num_cf_insts) | |
636 | DONE_FIFO_HIWATER(0xe0) | |
724 | DONE_FIFO_HIWATER(0xe0) | |
637 | ALU_UPDATE_FIFO_HIWATER(0x8)); |
725 | ALU_UPDATE_FIFO_HIWATER(0x8)); |
638 | switch (rdev->family) { |
726 | switch (rdev->family) { |
639 | case CHIP_RV770: |
727 | case CHIP_RV770: |
640 | sq_ms_fifo_sizes |= FETCH_FIFO_HIWATER(0x1); |
- | |
641 | break; |
- | |
642 | case CHIP_RV730: |
728 | case CHIP_RV730: |
643 | case CHIP_RV710: |
729 | case CHIP_RV710: |
- | 730 | sq_ms_fifo_sizes |= FETCH_FIFO_HIWATER(0x1); |
|
- | 731 | break; |
|
644 | case CHIP_RV740: |
732 | case CHIP_RV740: |
645 | default: |
733 | default: |
646 | sq_ms_fifo_sizes |= FETCH_FIFO_HIWATER(0x4); |
734 | sq_ms_fifo_sizes |= FETCH_FIFO_HIWATER(0x4); |
647 | break; |
735 | break; |
648 | } |
736 | } |
Line 811... | Line 899... | ||
811 | rdev->mc.aper_base = drm_get_resource_start(rdev->ddev, 0); |
899 | rdev->mc.aper_base = drm_get_resource_start(rdev->ddev, 0); |
812 | rdev->mc.aper_size = drm_get_resource_len(rdev->ddev, 0); |
900 | rdev->mc.aper_size = drm_get_resource_len(rdev->ddev, 0); |
813 | /* Setup GPU memory space */ |
901 | /* Setup GPU memory space */ |
814 | rdev->mc.mc_vram_size = RREG32(CONFIG_MEMSIZE); |
902 | rdev->mc.mc_vram_size = RREG32(CONFIG_MEMSIZE); |
815 | rdev->mc.real_vram_size = RREG32(CONFIG_MEMSIZE); |
903 | rdev->mc.real_vram_size = RREG32(CONFIG_MEMSIZE); |
816 | - | ||
- | 904 | rdev->mc.visible_vram_size = rdev->mc.aper_size; |
|
- | 905 | /* FIXME remove this once we support unmappable VRAM */ |
|
817 | if (rdev->mc.mc_vram_size > rdev->mc.aper_size) |
906 | if (rdev->mc.mc_vram_size > rdev->mc.aper_size) { |
818 | rdev->mc.mc_vram_size = rdev->mc.aper_size; |
907 | rdev->mc.mc_vram_size = rdev->mc.aper_size; |
819 | - | ||
820 | if (rdev->mc.real_vram_size > rdev->mc.aper_size) |
- | |
821 | rdev->mc.real_vram_size = rdev->mc.aper_size; |
908 | rdev->mc.real_vram_size = rdev->mc.aper_size; |
822 | - | ||
823 | if (rdev->flags & RADEON_IS_AGP) { |
- | |
824 | /* gtt_size is setup by radeon_agp_init */ |
- | |
825 | rdev->mc.gtt_location = rdev->mc.agp_base; |
- | |
826 | tmp = 0xFFFFFFFFUL - rdev->mc.agp_base - rdev->mc.gtt_size; |
- | |
827 | /* Try to put vram before or after AGP because we |
- | |
828 | * we want SYSTEM_APERTURE to cover both VRAM and |
- | |
829 | * AGP so that GPU can catch out of VRAM/AGP access |
- | |
830 | */ |
- | |
831 | if (rdev->mc.gtt_location > rdev->mc.mc_vram_size) { |
- | |
832 | /* Enough place before */ |
- | |
833 | rdev->mc.vram_location = rdev->mc.gtt_location - |
- | |
834 | rdev->mc.mc_vram_size; |
- | |
835 | } else if (tmp > rdev->mc.mc_vram_size) { |
- | |
836 | /* Enough place after */ |
- | |
837 | rdev->mc.vram_location = rdev->mc.gtt_location + |
- | |
838 | rdev->mc.gtt_size; |
- | |
839 | } else { |
- | |
840 | /* Try to setup VRAM then AGP might not |
- | |
841 | * not work on some card |
- | |
842 | */ |
- | |
843 | rdev->mc.vram_location = 0x00000000UL; |
- | |
844 | rdev->mc.gtt_location = rdev->mc.mc_vram_size; |
- | |
845 | } |
909 | } |
846 | } else { |
- | |
847 | rdev->mc.vram_location = 0x00000000UL; |
- | |
848 | rdev->mc.gtt_location = rdev->mc.mc_vram_size; |
910 | r600_vram_gtt_location(rdev, &rdev->mc); |
849 | rdev->mc.gtt_size = radeon_gart_size * 1024 * 1024; |
- | |
850 | } |
- | |
851 | rdev->mc.vram_start = rdev->mc.vram_location; |
- | |
852 | rdev->mc.vram_end = rdev->mc.vram_location + rdev->mc.mc_vram_size - 1; |
- | |
853 | rdev->mc.gtt_start = rdev->mc.gtt_location; |
- | |
854 | rdev->mc.gtt_end = rdev->mc.gtt_location + rdev->mc.gtt_size - 1; |
- | |
855 | /* FIXME: we should enforce default clock in case GPU is not in |
911 | /* FIXME: we should enforce default clock in case GPU is not in |
856 | * default setup |
912 | * default setup |
857 | */ |
913 | */ |
858 | a.full = rfixed_const(100); |
914 | a.full = rfixed_const(100); |
859 | rdev->pm.sclk.full = rfixed_const(rdev->clock.default_sclk); |
915 | rdev->pm.sclk.full = rfixed_const(rdev->clock.default_sclk); |
860 | rdev->pm.sclk.full = rfixed_div(rdev->pm.sclk, a); |
916 | rdev->pm.sclk.full = rfixed_div(rdev->pm.sclk, a); |
861 | return 0; |
917 | return 0; |
862 | } |
918 | } |
- | 919 | ||
863 | int rv770_gpu_reset(struct radeon_device *rdev) |
920 | int rv770_gpu_reset(struct radeon_device *rdev) |
864 | { |
921 | { |
865 | /* FIXME: implement any rv770 specific bits */ |
922 | /* FIXME: implement any rv770 specific bits */ |
866 | return r600_gpu_reset(rdev); |
923 | return r600_gpu_reset(rdev); |
867 | } |
924 | } |
Line 959... | Line 1016... | ||
959 | radeon_pm_init(rdev); |
1016 | radeon_pm_init(rdev); |
960 | /* Fence driver */ |
1017 | /* Fence driver */ |
961 | // r = radeon_fence_driver_init(rdev); |
1018 | // r = radeon_fence_driver_init(rdev); |
962 | // if (r) |
1019 | // if (r) |
963 | // return r; |
1020 | // return r; |
- | 1021 | /* initialize AGP */ |
|
964 | if (rdev->flags & RADEON_IS_AGP) { |
1022 | if (rdev->flags & RADEON_IS_AGP) { |
965 | r = radeon_agp_init(rdev); |
1023 | r = radeon_agp_init(rdev); |
966 | if (r) |
1024 | if (r) |
967 | radeon_agp_disable(rdev); |
1025 | radeon_agp_disable(rdev); |
968 | } |
1026 | } |
Line 992... | Line 1050... | ||
992 | rdev->accel_working = false; |
1050 | rdev->accel_working = false; |
993 | } |
1051 | } |
994 | if (rdev->accel_working) { |
1052 | if (rdev->accel_working) { |
995 | // r = radeon_ib_pool_init(rdev); |
1053 | // r = radeon_ib_pool_init(rdev); |
996 | // if (r) { |
1054 | // if (r) { |
997 | // DRM_ERROR("radeon: failled initializing IB pool (%d).\n", r); |
1055 | // dev_err(rdev->dev, "IB initialization failed (%d).\n", r); |
998 | // rdev->accel_working = false; |
1056 | // rdev->accel_working = false; |
999 | // } |
1057 | // } else { |
1000 | // r = r600_ib_test(rdev); |
1058 | // r = r600_ib_test(rdev); |
1001 | // if (r) { |
1059 | // if (r) { |
1002 | // DRM_ERROR("radeon: failled testing IB (%d).\n", r); |
1060 | // dev_err(rdev->dev, "IB test failed (%d).\n", r); |
1003 | // rdev->accel_working = false; |
1061 | // rdev->accel_working = false; |
1004 | // } |
1062 | // } |
- | 1063 | // } |
|
1005 | } |
1064 | } |
1006 | return 0; |
1065 | return 0; |
1007 | }><>><>><>><>>><>><>>><>>>>>>><>><>><>><>>>>>> |
1066 | }><>><>><>><>>><>><>>><>>>>>>><>><>><>><>>>>>> |