aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMonk Liu <Monk.Liu@amd.com>2016-11-11 05:25:49 -0500
committerAlex Deucher <alexander.deucher@amd.com>2016-11-23 15:08:40 -0500
commit45682886bcd4a7d94a3281460c29a8a5c5438212 (patch)
tree5c13f4cffd83375c1278ab826d4970a58f732476
parent79abf1add6e6b8fa9951cfb2122c08defa57fbd1 (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.c55
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c15
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c15
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
1466static 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
1918static void gfx_v6_0_enable_gui_idle_interrupt(struct amdgpu_device *adev, 1925static 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
2803static void gfx_v6_ring_emit_cntxcntl(struct amdgpu_ring *ring, uint32_t flags) 2810static 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
2108static 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
6189static 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
6189static void gfx_v8_0_ring_emit_hdp_invalidate(struct amdgpu_ring *ring) 6201static 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,