Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amdgpu: flush TLB functions removal from kfd2kgd interface

[Why]
kfd2kgd interface will be deprecated. This removal only covers TLB
invalidation for now. They have been replaced in amdgpu_amdkfd API.

[How]
TLB invalidate functions removed from the different amdkfd_gfx_v*
versions.

Signed-off-by: Alex Sierra <alex.sierra@amd.com>
Acked-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Alex Sierra and committed by
Alex Deucher
d175e9ac ffa02269

-251
-2
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_arcturus.c
··· 320 320 kgd_gfx_v9_get_atc_vmid_pasid_mapping_info, 321 321 .get_tile_config = kgd_gfx_v9_get_tile_config, 322 322 .set_vm_context_page_table_base = kgd_set_vm_context_page_table_base, 323 - .invalidate_tlbs = kgd_gfx_v9_invalidate_tlbs, 324 - .invalidate_tlbs_vmid = kgd_gfx_v9_invalidate_tlbs_vmid, 325 323 .get_hive_id = amdgpu_amdkfd_get_hive_id, 326 324 };
-67
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c
··· 686 686 return !!(value & ATC_VMID0_PASID_MAPPING__VALID_MASK); 687 687 } 688 688 689 - static int invalidate_tlbs_with_kiq(struct amdgpu_device *adev, uint16_t pasid) 690 - { 691 - signed long r; 692 - uint32_t seq; 693 - struct amdgpu_ring *ring = &adev->gfx.kiq.ring; 694 - 695 - spin_lock(&adev->gfx.kiq.ring_lock); 696 - amdgpu_ring_alloc(ring, 12); /* fence + invalidate_tlbs package*/ 697 - amdgpu_ring_write(ring, PACKET3(PACKET3_INVALIDATE_TLBS, 0)); 698 - amdgpu_ring_write(ring, 699 - PACKET3_INVALIDATE_TLBS_DST_SEL(1) | 700 - PACKET3_INVALIDATE_TLBS_PASID(pasid)); 701 - amdgpu_fence_emit_polling(ring, &seq); 702 - amdgpu_ring_commit(ring); 703 - spin_unlock(&adev->gfx.kiq.ring_lock); 704 - 705 - r = amdgpu_fence_wait_polling(ring, seq, adev->usec_timeout); 706 - if (r < 1) { 707 - DRM_ERROR("wait for kiq fence error: %ld.\n", r); 708 - return -ETIME; 709 - } 710 - 711 - return 0; 712 - } 713 - 714 - static int invalidate_tlbs(struct kgd_dev *kgd, uint16_t pasid) 715 - { 716 - struct amdgpu_device *adev = (struct amdgpu_device *) kgd; 717 - int vmid; 718 - uint16_t queried_pasid; 719 - bool ret; 720 - struct amdgpu_ring *ring = &adev->gfx.kiq.ring; 721 - 722 - if (amdgpu_emu_mode == 0 && ring->sched.ready) 723 - return invalidate_tlbs_with_kiq(adev, pasid); 724 - 725 - for (vmid = 0; vmid < 16; vmid++) { 726 - if (!amdgpu_amdkfd_is_kfd_vmid(adev, vmid)) 727 - continue; 728 - 729 - ret = get_atc_vmid_pasid_mapping_info(kgd, vmid, 730 - &queried_pasid); 731 - if (ret && queried_pasid == pasid) { 732 - amdgpu_gmc_flush_gpu_tlb(adev, vmid, 733 - AMDGPU_GFXHUB_0, 0); 734 - break; 735 - } 736 - } 737 - 738 - return 0; 739 - } 740 - 741 - static int invalidate_tlbs_vmid(struct kgd_dev *kgd, uint16_t vmid) 742 - { 743 - struct amdgpu_device *adev = (struct amdgpu_device *) kgd; 744 - 745 - if (!amdgpu_amdkfd_is_kfd_vmid(adev, vmid)) { 746 - pr_err("non kfd vmid %d\n", vmid); 747 - return 0; 748 - } 749 - 750 - amdgpu_gmc_flush_gpu_tlb(adev, vmid, AMDGPU_GFXHUB_0, 0); 751 - return 0; 752 - } 753 - 754 689 static int kgd_address_watch_disable(struct kgd_dev *kgd) 755 690 { 756 691 return 0; ··· 767 832 get_atc_vmid_pasid_mapping_info, 768 833 .get_tile_config = amdgpu_amdkfd_get_tile_config, 769 834 .set_vm_context_page_table_base = set_vm_context_page_table_base, 770 - .invalidate_tlbs = invalidate_tlbs, 771 - .invalidate_tlbs_vmid = invalidate_tlbs_vmid, 772 835 .get_hive_id = amdgpu_amdkfd_get_hive_id, 773 836 };
-41
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
··· 696 696 lower_32_bits(page_table_base)); 697 697 } 698 698 699 - static int invalidate_tlbs(struct kgd_dev *kgd, uint16_t pasid) 700 - { 701 - struct amdgpu_device *adev = (struct amdgpu_device *) kgd; 702 - int vmid; 703 - unsigned int tmp; 704 - 705 - if (adev->in_gpu_reset) 706 - return -EIO; 707 - 708 - for (vmid = 0; vmid < 16; vmid++) { 709 - if (!amdgpu_amdkfd_is_kfd_vmid(adev, vmid)) 710 - continue; 711 - 712 - tmp = RREG32(mmATC_VMID0_PASID_MAPPING + vmid); 713 - if ((tmp & ATC_VMID0_PASID_MAPPING__VALID_MASK) && 714 - (tmp & ATC_VMID0_PASID_MAPPING__PASID_MASK) == pasid) { 715 - WREG32(mmVM_INVALIDATE_REQUEST, 1 << vmid); 716 - RREG32(mmVM_INVALIDATE_RESPONSE); 717 - break; 718 - } 719 - } 720 - 721 - return 0; 722 - } 723 - 724 - static int invalidate_tlbs_vmid(struct kgd_dev *kgd, uint16_t vmid) 725 - { 726 - struct amdgpu_device *adev = (struct amdgpu_device *) kgd; 727 - 728 - if (!amdgpu_amdkfd_is_kfd_vmid(adev, vmid)) { 729 - pr_err("non kfd vmid\n"); 730 - return 0; 731 - } 732 - 733 - WREG32(mmVM_INVALIDATE_REQUEST, 1 << vmid); 734 - RREG32(mmVM_INVALIDATE_RESPONSE); 735 - return 0; 736 - } 737 - 738 699 /** 739 700 * read_vmid_from_vmfault_reg - read vmid from register 740 701 * ··· 732 771 .set_scratch_backing_va = set_scratch_backing_va, 733 772 .get_tile_config = get_tile_config, 734 773 .set_vm_context_page_table_base = set_vm_context_page_table_base, 735 - .invalidate_tlbs = invalidate_tlbs, 736 - .invalidate_tlbs_vmid = invalidate_tlbs_vmid, 737 774 .read_vmid_from_vmfault_reg = read_vmid_from_vmfault_reg, 738 775 };
-41
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
··· 657 657 lower_32_bits(page_table_base)); 658 658 } 659 659 660 - static int invalidate_tlbs(struct kgd_dev *kgd, uint16_t pasid) 661 - { 662 - struct amdgpu_device *adev = (struct amdgpu_device *) kgd; 663 - int vmid; 664 - unsigned int tmp; 665 - 666 - if (adev->in_gpu_reset) 667 - return -EIO; 668 - 669 - for (vmid = 0; vmid < 16; vmid++) { 670 - if (!amdgpu_amdkfd_is_kfd_vmid(adev, vmid)) 671 - continue; 672 - 673 - tmp = RREG32(mmATC_VMID0_PASID_MAPPING + vmid); 674 - if ((tmp & ATC_VMID0_PASID_MAPPING__VALID_MASK) && 675 - (tmp & ATC_VMID0_PASID_MAPPING__PASID_MASK) == pasid) { 676 - WREG32(mmVM_INVALIDATE_REQUEST, 1 << vmid); 677 - RREG32(mmVM_INVALIDATE_RESPONSE); 678 - break; 679 - } 680 - } 681 - 682 - return 0; 683 - } 684 - 685 - static int invalidate_tlbs_vmid(struct kgd_dev *kgd, uint16_t vmid) 686 - { 687 - struct amdgpu_device *adev = (struct amdgpu_device *) kgd; 688 - 689 - if (!amdgpu_amdkfd_is_kfd_vmid(adev, vmid)) { 690 - pr_err("non kfd vmid %d\n", vmid); 691 - return -EINVAL; 692 - } 693 - 694 - WREG32(mmVM_INVALIDATE_REQUEST, 1 << vmid); 695 - RREG32(mmVM_INVALIDATE_RESPONSE); 696 - return 0; 697 - } 698 - 699 660 const struct kfd2kgd_calls gfx_v8_kfd2kgd = { 700 661 .program_sh_mem_settings = kgd_program_sh_mem_settings, 701 662 .set_pasid_vmid_mapping = kgd_set_pasid_vmid_mapping, ··· 678 717 .set_scratch_backing_va = set_scratch_backing_va, 679 718 .get_tile_config = get_tile_config, 680 719 .set_vm_context_page_table_base = set_vm_context_page_table_base, 681 - .invalidate_tlbs = invalidate_tlbs, 682 - .invalidate_tlbs_vmid = invalidate_tlbs_vmid, 683 720 };
-96
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
··· 617 617 return !!(value & ATC_VMID0_PASID_MAPPING__VALID_MASK); 618 618 } 619 619 620 - static int invalidate_tlbs_with_kiq(struct amdgpu_device *adev, uint16_t pasid, 621 - uint32_t flush_type) 622 - { 623 - signed long r; 624 - uint32_t seq; 625 - struct amdgpu_ring *ring = &adev->gfx.kiq.ring; 626 - 627 - spin_lock(&adev->gfx.kiq.ring_lock); 628 - amdgpu_ring_alloc(ring, 12); /* fence + invalidate_tlbs package*/ 629 - amdgpu_ring_write(ring, PACKET3(PACKET3_INVALIDATE_TLBS, 0)); 630 - amdgpu_ring_write(ring, 631 - PACKET3_INVALIDATE_TLBS_DST_SEL(1) | 632 - PACKET3_INVALIDATE_TLBS_ALL_HUB(1) | 633 - PACKET3_INVALIDATE_TLBS_PASID(pasid) | 634 - PACKET3_INVALIDATE_TLBS_FLUSH_TYPE(flush_type)); 635 - amdgpu_fence_emit_polling(ring, &seq); 636 - amdgpu_ring_commit(ring); 637 - spin_unlock(&adev->gfx.kiq.ring_lock); 638 - 639 - r = amdgpu_fence_wait_polling(ring, seq, adev->usec_timeout); 640 - if (r < 1) { 641 - DRM_ERROR("wait for kiq fence error: %ld.\n", r); 642 - return -ETIME; 643 - } 644 - 645 - return 0; 646 - } 647 - 648 - int kgd_gfx_v9_invalidate_tlbs(struct kgd_dev *kgd, uint16_t pasid) 649 - { 650 - struct amdgpu_device *adev = (struct amdgpu_device *) kgd; 651 - int vmid, i; 652 - uint16_t queried_pasid; 653 - bool ret; 654 - struct amdgpu_ring *ring = &adev->gfx.kiq.ring; 655 - uint32_t flush_type = 0; 656 - 657 - if (adev->in_gpu_reset) 658 - return -EIO; 659 - if (adev->gmc.xgmi.num_physical_nodes && 660 - adev->asic_type == CHIP_VEGA20) 661 - flush_type = 2; 662 - 663 - if (ring->sched.ready) 664 - return invalidate_tlbs_with_kiq(adev, pasid, flush_type); 665 - 666 - for (vmid = 0; vmid < 16; vmid++) { 667 - if (!amdgpu_amdkfd_is_kfd_vmid(adev, vmid)) 668 - continue; 669 - 670 - ret = kgd_gfx_v9_get_atc_vmid_pasid_mapping_info(kgd, vmid, 671 - &queried_pasid); 672 - if (ret && queried_pasid == pasid) { 673 - for (i = 0; i < adev->num_vmhubs; i++) 674 - amdgpu_gmc_flush_gpu_tlb(adev, vmid, 675 - i, flush_type); 676 - break; 677 - } 678 - } 679 - 680 - return 0; 681 - } 682 - 683 - int kgd_gfx_v9_invalidate_tlbs_vmid(struct kgd_dev *kgd, uint16_t vmid) 684 - { 685 - struct amdgpu_device *adev = (struct amdgpu_device *) kgd; 686 - int i; 687 - 688 - if (!amdgpu_amdkfd_is_kfd_vmid(adev, vmid)) { 689 - pr_err("non kfd vmid %d\n", vmid); 690 - return 0; 691 - } 692 - 693 - /* Use legacy mode tlb invalidation. 694 - * 695 - * Currently on Raven the code below is broken for anything but 696 - * legacy mode due to a MMHUB power gating problem. A workaround 697 - * is for MMHUB to wait until the condition PER_VMID_INVALIDATE_REQ 698 - * == PER_VMID_INVALIDATE_ACK instead of simply waiting for the ack 699 - * bit. 700 - * 701 - * TODO 1: agree on the right set of invalidation registers for 702 - * KFD use. Use the last one for now. Invalidate both GC and 703 - * MMHUB. 704 - * 705 - * TODO 2: support range-based invalidation, requires kfg2kgd 706 - * interface change 707 - */ 708 - for (i = 0; i < adev->num_vmhubs; i++) 709 - amdgpu_gmc_flush_gpu_tlb(adev, vmid, i, 0); 710 - 711 - return 0; 712 - } 713 - 714 620 int kgd_gfx_v9_address_watch_disable(struct kgd_dev *kgd) 715 621 { 716 622 return 0; ··· 699 793 kgd_gfx_v9_get_atc_vmid_pasid_mapping_info, 700 794 .get_tile_config = kgd_gfx_v9_get_tile_config, 701 795 .set_vm_context_page_table_base = kgd_gfx_v9_set_vm_context_page_table_base, 702 - .invalidate_tlbs = kgd_gfx_v9_invalidate_tlbs, 703 - .invalidate_tlbs_vmid = kgd_gfx_v9_invalidate_tlbs_vmid, 704 796 .get_hive_id = amdgpu_amdkfd_get_hive_id, 705 797 };
-2
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.h
··· 57 57 58 58 bool kgd_gfx_v9_get_atc_vmid_pasid_mapping_info(struct kgd_dev *kgd, 59 59 uint8_t vmid, uint16_t *p_pasid); 60 - int kgd_gfx_v9_invalidate_tlbs(struct kgd_dev *kgd, uint16_t pasid); 61 - int kgd_gfx_v9_invalidate_tlbs_vmid(struct kgd_dev *kgd, uint16_t vmid); 62 60 int kgd_gfx_v9_get_tile_config(struct kgd_dev *kgd, 63 61 struct tile_config *config);
-2
drivers/gpu/drm/amd/include/kgd_kfd_interface.h
··· 307 307 308 308 void (*set_vm_context_page_table_base)(struct kgd_dev *kgd, 309 309 uint32_t vmid, uint64_t page_table_base); 310 - int (*invalidate_tlbs)(struct kgd_dev *kgd, uint16_t pasid); 311 - int (*invalidate_tlbs_vmid)(struct kgd_dev *kgd, uint16_t vmid); 312 310 uint32_t (*read_vmid_from_vmfault_reg)(struct kgd_dev *kgd); 313 311 uint64_t (*get_hive_id)(struct kgd_dev *kgd); 314 312