diff options
author | Monk Liu <Monk.Liu@amd.com> | 2016-11-11 05:25:49 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2016-11-23 15:08:40 -0500 |
commit | 45682886bcd4a7d94a3281460c29a8a5c5438212 (patch) | |
tree | 5c13f4cffd83375c1278ab826d4970a58f732476 | |
parent | 79abf1add6e6b8fa9951cfb2122c08defa57fbd1 (diff) |
drm/amdgpu:impl vgt_flush for VI(V5)
when shadowing enabled, tesselation app will trigger
vm fault because below three tesselation registers:
VGT_TF_RING_SIZE__CI__VI,
VGT_HS_OFFCHIP_PARAM__CI__VI,
VGT_TF_MEMORY_BASE__CI__VI,
need to be programed after vgt-flush.
Tesselation picture vm fault disappeared after vgt-flush
introduced.
v2:implement vgt-flush for CI & SI.
v3:move vgt flush inside of cntx_cntrl
v4:count vgt flush in frame_size
v5:squash in typo fix
Signed-off-by: Monk Liu <Monk.Liu@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c | 55 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 15 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 15 |
3 files changed, 60 insertions, 25 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c index 77b5918f606f..879a94bbfe12 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c | |||
@@ -426,7 +426,7 @@ static void gfx_v6_0_tiling_mode_table_init(struct amdgpu_device *adev) | |||
426 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | | 426 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | |
427 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4)); | 427 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4)); |
428 | break; | 428 | break; |
429 | case 1: | 429 | case 1: |
430 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | | 430 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | |
431 | MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) | | 431 | MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) | |
432 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | | 432 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | |
@@ -446,7 +446,7 @@ static void gfx_v6_0_tiling_mode_table_init(struct amdgpu_device *adev) | |||
446 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | | 446 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | |
447 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4)); | 447 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4)); |
448 | break; | 448 | break; |
449 | case 3: | 449 | case 3: |
450 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | | 450 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | |
451 | MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) | | 451 | MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) | |
452 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | | 452 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | |
@@ -456,7 +456,7 @@ static void gfx_v6_0_tiling_mode_table_init(struct amdgpu_device *adev) | |||
456 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | | 456 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | |
457 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4)); | 457 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4)); |
458 | break; | 458 | break; |
459 | case 4: | 459 | case 4: |
460 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 460 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
461 | MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) | | 461 | MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) | |
462 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | | 462 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | |
@@ -466,7 +466,7 @@ static void gfx_v6_0_tiling_mode_table_init(struct amdgpu_device *adev) | |||
466 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | | 466 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | |
467 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2)); | 467 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2)); |
468 | break; | 468 | break; |
469 | case 5: | 469 | case 5: |
470 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | | 470 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | |
471 | MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) | | 471 | MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) | |
472 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | | 472 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | |
@@ -476,7 +476,7 @@ static void gfx_v6_0_tiling_mode_table_init(struct amdgpu_device *adev) | |||
476 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | | 476 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | |
477 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2)); | 477 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2)); |
478 | break; | 478 | break; |
479 | case 6: | 479 | case 6: |
480 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | | 480 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | |
481 | MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) | | 481 | MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) | |
482 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | | 482 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | |
@@ -486,7 +486,7 @@ static void gfx_v6_0_tiling_mode_table_init(struct amdgpu_device *adev) | |||
486 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | | 486 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | |
487 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2)); | 487 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2)); |
488 | break; | 488 | break; |
489 | case 7: | 489 | case 7: |
490 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | | 490 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | |
491 | MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) | | 491 | MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) | |
492 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | | 492 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | |
@@ -496,7 +496,7 @@ static void gfx_v6_0_tiling_mode_table_init(struct amdgpu_device *adev) | |||
496 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | | 496 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | |
497 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4)); | 497 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4)); |
498 | break; | 498 | break; |
499 | case 8: | 499 | case 8: |
500 | gb_tile_moden = (ARRAY_MODE(ARRAY_LINEAR_ALIGNED) | | 500 | gb_tile_moden = (ARRAY_MODE(ARRAY_LINEAR_ALIGNED) | |
501 | MICRO_TILE_MODE(ADDR_SURF_DISPLAY_MICRO_TILING) | | 501 | MICRO_TILE_MODE(ADDR_SURF_DISPLAY_MICRO_TILING) | |
502 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | | 502 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | |
@@ -506,7 +506,7 @@ static void gfx_v6_0_tiling_mode_table_init(struct amdgpu_device *adev) | |||
506 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | | 506 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | |
507 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2)); | 507 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2)); |
508 | break; | 508 | break; |
509 | case 9: | 509 | case 9: |
510 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 510 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
511 | MICRO_TILE_MODE(ADDR_SURF_DISPLAY_MICRO_TILING) | | 511 | MICRO_TILE_MODE(ADDR_SURF_DISPLAY_MICRO_TILING) | |
512 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | | 512 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | |
@@ -516,7 +516,7 @@ static void gfx_v6_0_tiling_mode_table_init(struct amdgpu_device *adev) | |||
516 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | | 516 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | |
517 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2)); | 517 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2)); |
518 | break; | 518 | break; |
519 | case 10: | 519 | case 10: |
520 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | | 520 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | |
521 | MICRO_TILE_MODE(ADDR_SURF_DISPLAY_MICRO_TILING) | | 521 | MICRO_TILE_MODE(ADDR_SURF_DISPLAY_MICRO_TILING) | |
522 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | | 522 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | |
@@ -526,7 +526,7 @@ static void gfx_v6_0_tiling_mode_table_init(struct amdgpu_device *adev) | |||
526 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | | 526 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | |
527 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4)); | 527 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4)); |
528 | break; | 528 | break; |
529 | case 11: | 529 | case 11: |
530 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | | 530 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | |
531 | MICRO_TILE_MODE(ADDR_SURF_DISPLAY_MICRO_TILING) | | 531 | MICRO_TILE_MODE(ADDR_SURF_DISPLAY_MICRO_TILING) | |
532 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | | 532 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | |
@@ -536,7 +536,7 @@ static void gfx_v6_0_tiling_mode_table_init(struct amdgpu_device *adev) | |||
536 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | | 536 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | |
537 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2)); | 537 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2)); |
538 | break; | 538 | break; |
539 | case 12: | 539 | case 12: |
540 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | | 540 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | |
541 | MICRO_TILE_MODE(ADDR_SURF_DISPLAY_MICRO_TILING) | | 541 | MICRO_TILE_MODE(ADDR_SURF_DISPLAY_MICRO_TILING) | |
542 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | | 542 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | |
@@ -546,7 +546,7 @@ static void gfx_v6_0_tiling_mode_table_init(struct amdgpu_device *adev) | |||
546 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | | 546 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | |
547 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2)); | 547 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2)); |
548 | break; | 548 | break; |
549 | case 13: | 549 | case 13: |
550 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 550 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
551 | MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) | | 551 | MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) | |
552 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | | 552 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | |
@@ -556,7 +556,7 @@ static void gfx_v6_0_tiling_mode_table_init(struct amdgpu_device *adev) | |||
556 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | | 556 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | |
557 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2)); | 557 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2)); |
558 | break; | 558 | break; |
559 | case 14: | 559 | case 14: |
560 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | | 560 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | |
561 | MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) | | 561 | MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) | |
562 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | | 562 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | |
@@ -566,7 +566,7 @@ static void gfx_v6_0_tiling_mode_table_init(struct amdgpu_device *adev) | |||
566 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | | 566 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | |
567 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2)); | 567 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2)); |
568 | break; | 568 | break; |
569 | case 15: | 569 | case 15: |
570 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | | 570 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | |
571 | MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) | | 571 | MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) | |
572 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | | 572 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | |
@@ -576,7 +576,7 @@ static void gfx_v6_0_tiling_mode_table_init(struct amdgpu_device *adev) | |||
576 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | | 576 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | |
577 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2)); | 577 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2)); |
578 | break; | 578 | break; |
579 | case 16: | 579 | case 16: |
580 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | | 580 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | |
581 | MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) | | 581 | MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) | |
582 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | | 582 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | |
@@ -586,7 +586,7 @@ static void gfx_v6_0_tiling_mode_table_init(struct amdgpu_device *adev) | |||
586 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | | 586 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | |
587 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2)); | 587 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2)); |
588 | break; | 588 | break; |
589 | case 17: | 589 | case 17: |
590 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | | 590 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | |
591 | MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) | | 591 | MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) | |
592 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | | 592 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | |
@@ -596,7 +596,7 @@ static void gfx_v6_0_tiling_mode_table_init(struct amdgpu_device *adev) | |||
596 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | | 596 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | |
597 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2)); | 597 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2)); |
598 | break; | 598 | break; |
599 | case 21: | 599 | case 21: |
600 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | | 600 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | |
601 | MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) | | 601 | MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) | |
602 | PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) | | 602 | PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) | |
@@ -606,7 +606,7 @@ static void gfx_v6_0_tiling_mode_table_init(struct amdgpu_device *adev) | |||
606 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | | 606 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | |
607 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2)); | 607 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2)); |
608 | break; | 608 | break; |
609 | case 22: | 609 | case 22: |
610 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | | 610 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | |
611 | MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) | | 611 | MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) | |
612 | PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) | | 612 | PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) | |
@@ -616,7 +616,7 @@ static void gfx_v6_0_tiling_mode_table_init(struct amdgpu_device *adev) | |||
616 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | | 616 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | |
617 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4)); | 617 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4)); |
618 | break; | 618 | break; |
619 | case 23: | 619 | case 23: |
620 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | | 620 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | |
621 | MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) | | 621 | MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) | |
622 | PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) | | 622 | PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) | |
@@ -626,7 +626,7 @@ static void gfx_v6_0_tiling_mode_table_init(struct amdgpu_device *adev) | |||
626 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | | 626 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | |
627 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2)); | 627 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2)); |
628 | break; | 628 | break; |
629 | case 24: | 629 | case 24: |
630 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | | 630 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | |
631 | MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) | | 631 | MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) | |
632 | PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) | | 632 | PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) | |
@@ -636,7 +636,7 @@ static void gfx_v6_0_tiling_mode_table_init(struct amdgpu_device *adev) | |||
636 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | | 636 | BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | |
637 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2)); | 637 | MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2)); |
638 | break; | 638 | break; |
639 | case 25: | 639 | case 25: |
640 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | | 640 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | |
641 | MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) | | 641 | MICRO_TILE_MODE(ADDR_SURF_THIN_MICRO_TILING) | |
642 | PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) | | 642 | PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) | |
@@ -1463,6 +1463,13 @@ static void gfx_v6_0_ring_emit_hdp_flush(struct amdgpu_ring *ring) | |||
1463 | amdgpu_ring_write(ring, 0x1); | 1463 | amdgpu_ring_write(ring, 0x1); |
1464 | } | 1464 | } |
1465 | 1465 | ||
1466 | static void gfx_v6_0_ring_emit_vgt_flush(struct amdgpu_ring *ring) | ||
1467 | { | ||
1468 | amdgpu_ring_write(ring, PACKET3(PACKET3_EVENT_WRITE, 0)); | ||
1469 | amdgpu_ring_write(ring, EVENT_TYPE(VGT_FLUSH) | | ||
1470 | EVENT_INDEX(0)); | ||
1471 | } | ||
1472 | |||
1466 | /** | 1473 | /** |
1467 | * gfx_v6_0_ring_emit_hdp_invalidate - emit an hdp invalidate on the cp | 1474 | * gfx_v6_0_ring_emit_hdp_invalidate - emit an hdp invalidate on the cp |
1468 | * | 1475 | * |
@@ -1917,7 +1924,7 @@ static int gfx_v6_0_cp_load_microcode(struct amdgpu_device *adev) | |||
1917 | 1924 | ||
1918 | static void gfx_v6_0_enable_gui_idle_interrupt(struct amdgpu_device *adev, | 1925 | static void gfx_v6_0_enable_gui_idle_interrupt(struct amdgpu_device *adev, |
1919 | bool enable) | 1926 | bool enable) |
1920 | { | 1927 | { |
1921 | u32 tmp = RREG32(mmCP_INT_CNTL_RING0); | 1928 | u32 tmp = RREG32(mmCP_INT_CNTL_RING0); |
1922 | u32 mask; | 1929 | u32 mask; |
1923 | int i; | 1930 | int i; |
@@ -2802,6 +2809,8 @@ static uint64_t gfx_v6_0_get_gpu_clock_counter(struct amdgpu_device *adev) | |||
2802 | 2809 | ||
2803 | static void gfx_v6_ring_emit_cntxcntl(struct amdgpu_ring *ring, uint32_t flags) | 2810 | static void gfx_v6_ring_emit_cntxcntl(struct amdgpu_ring *ring, uint32_t flags) |
2804 | { | 2811 | { |
2812 | if (flags & AMDGPU_HAVE_CTX_SWITCH) | ||
2813 | gfx_v6_0_ring_emit_vgt_flush(ring); | ||
2805 | amdgpu_ring_write(ring, PACKET3(PACKET3_CONTEXT_CONTROL, 1)); | 2814 | amdgpu_ring_write(ring, PACKET3(PACKET3_CONTEXT_CONTROL, 1)); |
2806 | amdgpu_ring_write(ring, 0x80000000); | 2815 | amdgpu_ring_write(ring, 0x80000000); |
2807 | amdgpu_ring_write(ring, 0); | 2816 | amdgpu_ring_write(ring, 0); |
@@ -3265,7 +3274,7 @@ static const struct amdgpu_ring_funcs gfx_v6_0_ring_funcs_gfx = { | |||
3265 | 14 + 14 + 14 + /* gfx_v6_0_ring_emit_fence x3 for user fence, vm fence */ | 3274 | 14 + 14 + 14 + /* gfx_v6_0_ring_emit_fence x3 for user fence, vm fence */ |
3266 | 7 + 4 + /* gfx_v6_0_ring_emit_pipeline_sync */ | 3275 | 7 + 4 + /* gfx_v6_0_ring_emit_pipeline_sync */ |
3267 | 17 + 6 + /* gfx_v6_0_ring_emit_vm_flush */ | 3276 | 17 + 6 + /* gfx_v6_0_ring_emit_vm_flush */ |
3268 | 3, /* gfx_v6_ring_emit_cntxcntl */ | 3277 | 3 + 2, /* gfx_v6_ring_emit_cntxcntl including vgt flush */ |
3269 | .emit_ib_size = 6, /* gfx_v6_0_ring_emit_ib */ | 3278 | .emit_ib_size = 6, /* gfx_v6_0_ring_emit_ib */ |
3270 | .emit_ib = gfx_v6_0_ring_emit_ib, | 3279 | .emit_ib = gfx_v6_0_ring_emit_ib, |
3271 | .emit_fence = gfx_v6_0_ring_emit_fence, | 3280 | .emit_fence = gfx_v6_0_ring_emit_fence, |
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c index 06fddba54445..1a745cf93f47 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | |||
@@ -2105,6 +2105,18 @@ static void gfx_v7_0_ring_emit_hdp_flush(struct amdgpu_ring *ring) | |||
2105 | amdgpu_ring_write(ring, 0x20); /* poll interval */ | 2105 | amdgpu_ring_write(ring, 0x20); /* poll interval */ |
2106 | } | 2106 | } |
2107 | 2107 | ||
2108 | static void gfx_v7_0_ring_emit_vgt_flush(struct amdgpu_ring *ring) | ||
2109 | { | ||
2110 | amdgpu_ring_write(ring, PACKET3(PACKET3_EVENT_WRITE, 0)); | ||
2111 | amdgpu_ring_write(ring, EVENT_TYPE(VS_PARTIAL_FLUSH) | | ||
2112 | EVENT_INDEX(4)); | ||
2113 | |||
2114 | amdgpu_ring_write(ring, PACKET3(PACKET3_EVENT_WRITE, 0)); | ||
2115 | amdgpu_ring_write(ring, EVENT_TYPE(VGT_FLUSH) | | ||
2116 | EVENT_INDEX(0)); | ||
2117 | } | ||
2118 | |||
2119 | |||
2108 | /** | 2120 | /** |
2109 | * gfx_v7_0_ring_emit_hdp_invalidate - emit an hdp invalidate on the cp | 2121 | * gfx_v7_0_ring_emit_hdp_invalidate - emit an hdp invalidate on the cp |
2110 | * | 2122 | * |
@@ -2260,6 +2272,7 @@ static void gfx_v7_ring_emit_cntxcntl(struct amdgpu_ring *ring, uint32_t flags) | |||
2260 | 2272 | ||
2261 | dw2 |= 0x80000000; /* set load_enable otherwise this package is just NOPs */ | 2273 | dw2 |= 0x80000000; /* set load_enable otherwise this package is just NOPs */ |
2262 | if (flags & AMDGPU_HAVE_CTX_SWITCH) { | 2274 | if (flags & AMDGPU_HAVE_CTX_SWITCH) { |
2275 | gfx_v7_0_ring_emit_vgt_flush(ring); | ||
2263 | /* set load_global_config & load_global_uconfig */ | 2276 | /* set load_global_config & load_global_uconfig */ |
2264 | dw2 |= 0x8001; | 2277 | dw2 |= 0x8001; |
2265 | /* set load_cs_sh_regs */ | 2278 | /* set load_cs_sh_regs */ |
@@ -5153,7 +5166,7 @@ static const struct amdgpu_ring_funcs gfx_v7_0_ring_funcs_gfx = { | |||
5153 | 12 + 12 + 12 + /* gfx_v7_0_ring_emit_fence_gfx x3 for user fence, vm fence */ | 5166 | 12 + 12 + 12 + /* gfx_v7_0_ring_emit_fence_gfx x3 for user fence, vm fence */ |
5154 | 7 + 4 + /* gfx_v7_0_ring_emit_pipeline_sync */ | 5167 | 7 + 4 + /* gfx_v7_0_ring_emit_pipeline_sync */ |
5155 | 17 + 6 + /* gfx_v7_0_ring_emit_vm_flush */ | 5168 | 17 + 6 + /* gfx_v7_0_ring_emit_vm_flush */ |
5156 | 3, /* gfx_v7_ring_emit_cntxcntl */ | 5169 | 3 + 4, /* gfx_v7_ring_emit_cntxcntl including vgt flush*/ |
5157 | .emit_ib_size = 4, /* gfx_v7_0_ring_emit_ib_gfx */ | 5170 | .emit_ib_size = 4, /* gfx_v7_0_ring_emit_ib_gfx */ |
5158 | .emit_ib = gfx_v7_0_ring_emit_ib_gfx, | 5171 | .emit_ib = gfx_v7_0_ring_emit_ib_gfx, |
5159 | .emit_fence = gfx_v7_0_ring_emit_fence_gfx, | 5172 | .emit_fence = gfx_v7_0_ring_emit_fence_gfx, |
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c index ab84bff18727..a3684891c6e1 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | |||
@@ -6186,6 +6186,18 @@ static void gfx_v8_0_ring_emit_hdp_flush(struct amdgpu_ring *ring) | |||
6186 | amdgpu_ring_write(ring, 0x20); /* poll interval */ | 6186 | amdgpu_ring_write(ring, 0x20); /* poll interval */ |
6187 | } | 6187 | } |
6188 | 6188 | ||
6189 | static void gfx_v8_0_ring_emit_vgt_flush(struct amdgpu_ring *ring) | ||
6190 | { | ||
6191 | amdgpu_ring_write(ring, PACKET3(PACKET3_EVENT_WRITE, 0)); | ||
6192 | amdgpu_ring_write(ring, EVENT_TYPE(VS_PARTIAL_FLUSH) | | ||
6193 | EVENT_INDEX(4)); | ||
6194 | |||
6195 | amdgpu_ring_write(ring, PACKET3(PACKET3_EVENT_WRITE, 0)); | ||
6196 | amdgpu_ring_write(ring, EVENT_TYPE(VGT_FLUSH) | | ||
6197 | EVENT_INDEX(0)); | ||
6198 | } | ||
6199 | |||
6200 | |||
6189 | static void gfx_v8_0_ring_emit_hdp_invalidate(struct amdgpu_ring *ring) | 6201 | static void gfx_v8_0_ring_emit_hdp_invalidate(struct amdgpu_ring *ring) |
6190 | { | 6202 | { |
6191 | amdgpu_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, 3)); | 6203 | amdgpu_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, 3)); |
@@ -6371,6 +6383,7 @@ static void gfx_v8_ring_emit_cntxcntl(struct amdgpu_ring *ring, uint32_t flags) | |||
6371 | 6383 | ||
6372 | dw2 |= 0x80000000; /* set load_enable otherwise this package is just NOPs */ | 6384 | dw2 |= 0x80000000; /* set load_enable otherwise this package is just NOPs */ |
6373 | if (flags & AMDGPU_HAVE_CTX_SWITCH) { | 6385 | if (flags & AMDGPU_HAVE_CTX_SWITCH) { |
6386 | gfx_v8_0_ring_emit_vgt_flush(ring); | ||
6374 | /* set load_global_config & load_global_uconfig */ | 6387 | /* set load_global_config & load_global_uconfig */ |
6375 | dw2 |= 0x8001; | 6388 | dw2 |= 0x8001; |
6376 | /* set load_cs_sh_regs */ | 6389 | /* set load_cs_sh_regs */ |
@@ -6574,7 +6587,7 @@ static const struct amdgpu_ring_funcs gfx_v8_0_ring_funcs_gfx = { | |||
6574 | 7 + /* gfx_v8_0_ring_emit_pipeline_sync */ | 6587 | 7 + /* gfx_v8_0_ring_emit_pipeline_sync */ |
6575 | 128 + 19 + /* gfx_v8_0_ring_emit_vm_flush */ | 6588 | 128 + 19 + /* gfx_v8_0_ring_emit_vm_flush */ |
6576 | 2 + /* gfx_v8_ring_emit_sb */ | 6589 | 2 + /* gfx_v8_ring_emit_sb */ |
6577 | 3, /* gfx_v8_ring_emit_cntxcntl */ | 6590 | 3 + 4, /* gfx_v8_ring_emit_cntxcntl including vgt flush */ |
6578 | .emit_ib_size = 4, /* gfx_v8_0_ring_emit_ib_gfx */ | 6591 | .emit_ib_size = 4, /* gfx_v8_0_ring_emit_ib_gfx */ |
6579 | .emit_ib = gfx_v8_0_ring_emit_ib_gfx, | 6592 | .emit_ib = gfx_v8_0_ring_emit_ib_gfx, |
6580 | .emit_fence = gfx_v8_0_ring_emit_fence_gfx, | 6593 | .emit_fence = gfx_v8_0_ring_emit_fence_gfx, |