.. | .. |
---|
20 | 20 | * OTHER DEALINGS IN THE SOFTWARE. |
---|
21 | 21 | * |
---|
22 | 22 | */ |
---|
| 23 | + |
---|
23 | 24 | #include <linux/firmware.h> |
---|
24 | | -#include <drm/drmP.h> |
---|
| 25 | +#include <linux/module.h> |
---|
| 26 | +#include <linux/pci.h> |
---|
| 27 | + |
---|
25 | 28 | #include <drm/drm_cache.h> |
---|
26 | 29 | #include "amdgpu.h" |
---|
27 | 30 | #include "gmc_v8_0.h" |
---|
28 | 31 | #include "amdgpu_ucode.h" |
---|
29 | 32 | #include "amdgpu_amdkfd.h" |
---|
| 33 | +#include "amdgpu_gem.h" |
---|
30 | 34 | |
---|
31 | 35 | #include "gmc/gmc_8_1_d.h" |
---|
32 | 36 | #include "gmc/gmc_8_1_sh_mask.h" |
---|
.. | .. |
---|
288 | 292 | * |
---|
289 | 293 | * @adev: amdgpu_device pointer |
---|
290 | 294 | * |
---|
291 | | - * Load the GDDR MC ucode into the hw (CIK). |
---|
| 295 | + * Load the GDDR MC ucode into the hw (VI). |
---|
292 | 296 | * Returns 0 on success, error on failure. |
---|
293 | 297 | */ |
---|
294 | 298 | static int gmc_v8_0_tonga_mc_load_microcode(struct amdgpu_device *adev) |
---|
.. | .. |
---|
432 | 436 | base = RREG32(mmMC_VM_FB_LOCATION) & 0xFFFF; |
---|
433 | 437 | base <<= 24; |
---|
434 | 438 | |
---|
435 | | - amdgpu_device_vram_location(adev, &adev->gmc, base); |
---|
436 | | - amdgpu_device_gart_location(adev, mc); |
---|
| 439 | + amdgpu_gmc_vram_location(adev, mc, base); |
---|
| 440 | + amdgpu_gmc_gart_location(adev, mc); |
---|
437 | 441 | } |
---|
438 | 442 | |
---|
439 | 443 | /** |
---|
.. | .. |
---|
442 | 446 | * @adev: amdgpu_device pointer |
---|
443 | 447 | * |
---|
444 | 448 | * Set the location of vram, gart, and AGP in the GPU's |
---|
445 | | - * physical address space (CIK). |
---|
| 449 | + * physical address space (VI). |
---|
446 | 450 | */ |
---|
447 | 451 | static void gmc_v8_0_mc_program(struct amdgpu_device *adev) |
---|
448 | 452 | { |
---|
.. | .. |
---|
514 | 518 | * @adev: amdgpu_device pointer |
---|
515 | 519 | * |
---|
516 | 520 | * Look up the amount of vram, vram width, and decide how to place |
---|
517 | | - * vram and gart within the GPU's physical address space (CIK). |
---|
| 521 | + * vram and gart within the GPU's physical address space (VI). |
---|
518 | 522 | * Returns 0 for success. |
---|
519 | 523 | */ |
---|
520 | 524 | static int gmc_v8_0_mc_init(struct amdgpu_device *adev) |
---|
.. | .. |
---|
623 | 627 | return 0; |
---|
624 | 628 | } |
---|
625 | 629 | |
---|
| 630 | +/** |
---|
| 631 | + * gmc_v8_0_flush_gpu_tlb_pasid - tlb flush via pasid |
---|
| 632 | + * |
---|
| 633 | + * @adev: amdgpu_device pointer |
---|
| 634 | + * @pasid: pasid to be flush |
---|
| 635 | + * |
---|
| 636 | + * Flush the TLB for the requested pasid. |
---|
| 637 | + */ |
---|
| 638 | +static int gmc_v8_0_flush_gpu_tlb_pasid(struct amdgpu_device *adev, |
---|
| 639 | + uint16_t pasid, uint32_t flush_type, |
---|
| 640 | + bool all_hub) |
---|
| 641 | +{ |
---|
| 642 | + int vmid; |
---|
| 643 | + unsigned int tmp; |
---|
| 644 | + |
---|
| 645 | + if (amdgpu_in_reset(adev)) |
---|
| 646 | + return -EIO; |
---|
| 647 | + |
---|
| 648 | + for (vmid = 1; vmid < 16; vmid++) { |
---|
| 649 | + |
---|
| 650 | + tmp = RREG32(mmATC_VMID0_PASID_MAPPING + vmid); |
---|
| 651 | + if ((tmp & ATC_VMID0_PASID_MAPPING__VALID_MASK) && |
---|
| 652 | + (tmp & ATC_VMID0_PASID_MAPPING__PASID_MASK) == pasid) { |
---|
| 653 | + WREG32(mmVM_INVALIDATE_REQUEST, 1 << vmid); |
---|
| 654 | + RREG32(mmVM_INVALIDATE_RESPONSE); |
---|
| 655 | + break; |
---|
| 656 | + } |
---|
| 657 | + } |
---|
| 658 | + |
---|
| 659 | + return 0; |
---|
| 660 | + |
---|
| 661 | +} |
---|
| 662 | + |
---|
626 | 663 | /* |
---|
627 | 664 | * GART |
---|
628 | 665 | * VMID 0 is the physical GPU addresses as used by the kernel. |
---|
.. | .. |
---|
636 | 673 | * @adev: amdgpu_device pointer |
---|
637 | 674 | * @vmid: vm instance to flush |
---|
638 | 675 | * |
---|
639 | | - * Flush the TLB for the requested page table (CIK). |
---|
| 676 | + * Flush the TLB for the requested page table (VI). |
---|
640 | 677 | */ |
---|
641 | | -static void gmc_v8_0_flush_gpu_tlb(struct amdgpu_device *adev, |
---|
642 | | - uint32_t vmid) |
---|
| 678 | +static void gmc_v8_0_flush_gpu_tlb(struct amdgpu_device *adev, uint32_t vmid, |
---|
| 679 | + uint32_t vmhub, uint32_t flush_type) |
---|
643 | 680 | { |
---|
644 | 681 | /* bits 0-15 are the VM contexts0-15 */ |
---|
645 | 682 | WREG32(mmVM_INVALIDATE_REQUEST, 1 << vmid); |
---|
.. | .. |
---|
668 | 705 | amdgpu_ring_emit_wreg(ring, mmIH_VMID_0_LUT + vmid, pasid); |
---|
669 | 706 | } |
---|
670 | 707 | |
---|
671 | | -/** |
---|
672 | | - * gmc_v8_0_set_pte_pde - update the page tables using MMIO |
---|
| 708 | +/* |
---|
| 709 | + * PTE format on VI: |
---|
| 710 | + * 63:40 reserved |
---|
| 711 | + * 39:12 4k physical page base address |
---|
| 712 | + * 11:7 fragment |
---|
| 713 | + * 6 write |
---|
| 714 | + * 5 read |
---|
| 715 | + * 4 exe |
---|
| 716 | + * 3 reserved |
---|
| 717 | + * 2 snooped |
---|
| 718 | + * 1 system |
---|
| 719 | + * 0 valid |
---|
673 | 720 | * |
---|
674 | | - * @adev: amdgpu_device pointer |
---|
675 | | - * @cpu_pt_addr: cpu address of the page table |
---|
676 | | - * @gpu_page_idx: entry in the page table to update |
---|
677 | | - * @addr: dst addr to write into pte/pde |
---|
678 | | - * @flags: access flags |
---|
679 | | - * |
---|
680 | | - * Update the page tables using the CPU. |
---|
| 721 | + * PDE format on VI: |
---|
| 722 | + * 63:59 block fragment size |
---|
| 723 | + * 58:40 reserved |
---|
| 724 | + * 39:1 physical base address of PTE |
---|
| 725 | + * bits 5:1 must be 0. |
---|
| 726 | + * 0 valid |
---|
681 | 727 | */ |
---|
682 | | -static int gmc_v8_0_set_pte_pde(struct amdgpu_device *adev, void *cpu_pt_addr, |
---|
683 | | - uint32_t gpu_page_idx, uint64_t addr, |
---|
684 | | - uint64_t flags) |
---|
685 | | -{ |
---|
686 | | - void __iomem *ptr = (void *)cpu_pt_addr; |
---|
687 | | - uint64_t value; |
---|
688 | | - |
---|
689 | | - /* |
---|
690 | | - * PTE format on VI: |
---|
691 | | - * 63:40 reserved |
---|
692 | | - * 39:12 4k physical page base address |
---|
693 | | - * 11:7 fragment |
---|
694 | | - * 6 write |
---|
695 | | - * 5 read |
---|
696 | | - * 4 exe |
---|
697 | | - * 3 reserved |
---|
698 | | - * 2 snooped |
---|
699 | | - * 1 system |
---|
700 | | - * 0 valid |
---|
701 | | - * |
---|
702 | | - * PDE format on VI: |
---|
703 | | - * 63:59 block fragment size |
---|
704 | | - * 58:40 reserved |
---|
705 | | - * 39:1 physical base address of PTE |
---|
706 | | - * bits 5:1 must be 0. |
---|
707 | | - * 0 valid |
---|
708 | | - */ |
---|
709 | | - value = addr & 0x000000FFFFFFF000ULL; |
---|
710 | | - value |= flags; |
---|
711 | | - writeq(value, ptr + (gpu_page_idx * 8)); |
---|
712 | | - |
---|
713 | | - return 0; |
---|
714 | | -} |
---|
715 | | - |
---|
716 | | -static uint64_t gmc_v8_0_get_vm_pte_flags(struct amdgpu_device *adev, |
---|
717 | | - uint32_t flags) |
---|
718 | | -{ |
---|
719 | | - uint64_t pte_flag = 0; |
---|
720 | | - |
---|
721 | | - if (flags & AMDGPU_VM_PAGE_EXECUTABLE) |
---|
722 | | - pte_flag |= AMDGPU_PTE_EXECUTABLE; |
---|
723 | | - if (flags & AMDGPU_VM_PAGE_READABLE) |
---|
724 | | - pte_flag |= AMDGPU_PTE_READABLE; |
---|
725 | | - if (flags & AMDGPU_VM_PAGE_WRITEABLE) |
---|
726 | | - pte_flag |= AMDGPU_PTE_WRITEABLE; |
---|
727 | | - if (flags & AMDGPU_VM_PAGE_PRT) |
---|
728 | | - pte_flag |= AMDGPU_PTE_PRT; |
---|
729 | | - |
---|
730 | | - return pte_flag; |
---|
731 | | -} |
---|
732 | 728 | |
---|
733 | 729 | static void gmc_v8_0_get_vm_pde(struct amdgpu_device *adev, int level, |
---|
734 | 730 | uint64_t *addr, uint64_t *flags) |
---|
735 | 731 | { |
---|
736 | 732 | BUG_ON(*addr & 0xFFFFFF0000000FFFULL); |
---|
| 733 | +} |
---|
| 734 | + |
---|
| 735 | +static void gmc_v8_0_get_vm_pte(struct amdgpu_device *adev, |
---|
| 736 | + struct amdgpu_bo_va_mapping *mapping, |
---|
| 737 | + uint64_t *flags) |
---|
| 738 | +{ |
---|
| 739 | + *flags &= ~AMDGPU_PTE_EXECUTABLE; |
---|
| 740 | + *flags |= mapping->flags & AMDGPU_PTE_EXECUTABLE; |
---|
| 741 | + *flags &= ~AMDGPU_PTE_PRT; |
---|
737 | 742 | } |
---|
738 | 743 | |
---|
739 | 744 | /** |
---|
.. | .. |
---|
830 | 835 | * This sets up the TLBs, programs the page tables for VMID0, |
---|
831 | 836 | * sets up the hw for VMIDs 1-15 which are allocated on |
---|
832 | 837 | * demand, and sets up the global locations for the LDS, GDS, |
---|
833 | | - * and GPUVM for FSA64 clients (CIK). |
---|
| 838 | + * and GPUVM for FSA64 clients (VI). |
---|
834 | 839 | * Returns 0 for success, errors for failure. |
---|
835 | 840 | */ |
---|
836 | 841 | static int gmc_v8_0_gart_enable(struct amdgpu_device *adev) |
---|
837 | 842 | { |
---|
| 843 | + uint64_t table_addr; |
---|
838 | 844 | int r, i; |
---|
839 | 845 | u32 tmp, field; |
---|
840 | 846 | |
---|
841 | | - if (adev->gart.robj == NULL) { |
---|
| 847 | + if (adev->gart.bo == NULL) { |
---|
842 | 848 | dev_err(adev->dev, "No VRAM object for PCIE GART.\n"); |
---|
843 | 849 | return -EINVAL; |
---|
844 | 850 | } |
---|
845 | 851 | r = amdgpu_gart_table_vram_pin(adev); |
---|
846 | 852 | if (r) |
---|
847 | 853 | return r; |
---|
| 854 | + |
---|
| 855 | + table_addr = amdgpu_bo_gpu_offset(adev->gart.bo); |
---|
| 856 | + |
---|
848 | 857 | /* Setup TLB control */ |
---|
849 | 858 | tmp = RREG32(mmMC_VM_MX_L1_TLB_CNTL); |
---|
850 | 859 | tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL, ENABLE_L1_TLB, 1); |
---|
.. | .. |
---|
892 | 901 | /* setup context0 */ |
---|
893 | 902 | WREG32(mmVM_CONTEXT0_PAGE_TABLE_START_ADDR, adev->gmc.gart_start >> 12); |
---|
894 | 903 | WREG32(mmVM_CONTEXT0_PAGE_TABLE_END_ADDR, adev->gmc.gart_end >> 12); |
---|
895 | | - WREG32(mmVM_CONTEXT0_PAGE_TABLE_BASE_ADDR, adev->gart.table_addr >> 12); |
---|
| 904 | + WREG32(mmVM_CONTEXT0_PAGE_TABLE_BASE_ADDR, table_addr >> 12); |
---|
896 | 905 | WREG32(mmVM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR, |
---|
897 | 906 | (u32)(adev->dummy_page_addr >> 12)); |
---|
898 | 907 | WREG32(mmVM_CONTEXT0_CNTL2, 0); |
---|
.. | .. |
---|
916 | 925 | for (i = 1; i < 16; i++) { |
---|
917 | 926 | if (i < 8) |
---|
918 | 927 | WREG32(mmVM_CONTEXT0_PAGE_TABLE_BASE_ADDR + i, |
---|
919 | | - adev->gart.table_addr >> 12); |
---|
| 928 | + table_addr >> 12); |
---|
920 | 929 | else |
---|
921 | 930 | WREG32(mmVM_CONTEXT8_PAGE_TABLE_BASE_ADDR + i - 8, |
---|
922 | | - adev->gart.table_addr >> 12); |
---|
| 931 | + table_addr >> 12); |
---|
923 | 932 | } |
---|
924 | 933 | |
---|
925 | 934 | /* enable context1-15 */ |
---|
.. | .. |
---|
944 | 953 | else |
---|
945 | 954 | gmc_v8_0_set_fault_enable_default(adev, true); |
---|
946 | 955 | |
---|
947 | | - gmc_v8_0_flush_gpu_tlb(adev, 0); |
---|
| 956 | + gmc_v8_0_flush_gpu_tlb(adev, 0, 0, 0); |
---|
948 | 957 | DRM_INFO("PCIE GART of %uM enabled (table at 0x%016llX).\n", |
---|
949 | 958 | (unsigned)(adev->gmc.gart_size >> 20), |
---|
950 | | - (unsigned long long)adev->gart.table_addr); |
---|
| 959 | + (unsigned long long)table_addr); |
---|
951 | 960 | adev->gart.ready = true; |
---|
952 | 961 | return 0; |
---|
953 | 962 | } |
---|
.. | .. |
---|
956 | 965 | { |
---|
957 | 966 | int r; |
---|
958 | 967 | |
---|
959 | | - if (adev->gart.robj) { |
---|
| 968 | + if (adev->gart.bo) { |
---|
960 | 969 | WARN(1, "R600 PCIE GART already initialized\n"); |
---|
961 | 970 | return 0; |
---|
962 | 971 | } |
---|
.. | .. |
---|
974 | 983 | * |
---|
975 | 984 | * @adev: amdgpu_device pointer |
---|
976 | 985 | * |
---|
977 | | - * This disables all VM page table (CIK). |
---|
| 986 | + * This disables all VM page table (VI). |
---|
978 | 987 | */ |
---|
979 | 988 | static void gmc_v8_0_gart_disable(struct amdgpu_device *adev) |
---|
980 | 989 | { |
---|
.. | .. |
---|
1003 | 1012 | * @adev: amdgpu_device pointer |
---|
1004 | 1013 | * @status: VM_CONTEXT1_PROTECTION_FAULT_STATUS register value |
---|
1005 | 1014 | * @addr: VM_CONTEXT1_PROTECTION_FAULT_ADDR register value |
---|
| 1015 | + * @mc_client: VM_CONTEXT1_PROTECTION_FAULT_MCCLIENT register value |
---|
1006 | 1016 | * |
---|
1007 | | - * Print human readable fault information (CIK). |
---|
| 1017 | + * Print human readable fault information (VI). |
---|
1008 | 1018 | */ |
---|
1009 | 1019 | static void gmc_v8_0_vm_decode_fault(struct amdgpu_device *adev, u32 status, |
---|
1010 | 1020 | u32 addr, u32 mc_client, unsigned pasid) |
---|
.. | .. |
---|
1084 | 1094 | unsigned size; |
---|
1085 | 1095 | |
---|
1086 | 1096 | if (REG_GET_FIELD(d1vga_control, D1VGA_CONTROL, D1VGA_MODE_ENABLE)) { |
---|
1087 | | - size = 9 * 1024 * 1024; /* reserve 8MB for vga emulator and 1 MB for FB */ |
---|
| 1097 | + size = AMDGPU_VBIOS_VGA_ALLOCATION; |
---|
1088 | 1098 | } else { |
---|
1089 | 1099 | u32 viewport = RREG32(mmVIEWPORT_SIZE); |
---|
1090 | 1100 | size = (REG_GET_FIELD(viewport, VIEWPORT_SIZE, VIEWPORT_HEIGHT) * |
---|
1091 | 1101 | REG_GET_FIELD(viewport, VIEWPORT_SIZE, VIEWPORT_WIDTH) * |
---|
1092 | 1102 | 4); |
---|
1093 | 1103 | } |
---|
1094 | | - /* return 0 if the pre-OS buffer uses up most of vram */ |
---|
1095 | | - if ((adev->gmc.real_vram_size - size) < (8 * 1024 * 1024)) |
---|
1096 | | - return 0; |
---|
| 1104 | + |
---|
1097 | 1105 | return size; |
---|
1098 | 1106 | } |
---|
1099 | 1107 | |
---|
.. | .. |
---|
1102 | 1110 | static int gmc_v8_0_sw_init(void *handle) |
---|
1103 | 1111 | { |
---|
1104 | 1112 | int r; |
---|
1105 | | - int dma_bits; |
---|
1106 | 1113 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; |
---|
| 1114 | + |
---|
| 1115 | + adev->num_vmhubs = 1; |
---|
1107 | 1116 | |
---|
1108 | 1117 | if (adev->flags & AMD_IS_APU) { |
---|
1109 | 1118 | adev->gmc.vram_type = AMDGPU_VRAM_TYPE_UNKNOWN; |
---|
.. | .. |
---|
1119 | 1128 | adev->gmc.vram_type = gmc_v8_0_convert_vram_type(tmp); |
---|
1120 | 1129 | } |
---|
1121 | 1130 | |
---|
1122 | | - r = amdgpu_irq_add_id(adev, AMDGPU_IH_CLIENTID_LEGACY, VISLANDS30_IV_SRCID_GFX_PAGE_INV_FAULT, &adev->gmc.vm_fault); |
---|
| 1131 | + r = amdgpu_irq_add_id(adev, AMDGPU_IRQ_CLIENTID_LEGACY, VISLANDS30_IV_SRCID_GFX_PAGE_INV_FAULT, &adev->gmc.vm_fault); |
---|
1123 | 1132 | if (r) |
---|
1124 | 1133 | return r; |
---|
1125 | 1134 | |
---|
1126 | | - r = amdgpu_irq_add_id(adev, AMDGPU_IH_CLIENTID_LEGACY, VISLANDS30_IV_SRCID_GFX_MEM_PROT_FAULT, &adev->gmc.vm_fault); |
---|
| 1135 | + r = amdgpu_irq_add_id(adev, AMDGPU_IRQ_CLIENTID_LEGACY, VISLANDS30_IV_SRCID_GFX_MEM_PROT_FAULT, &adev->gmc.vm_fault); |
---|
1127 | 1136 | if (r) |
---|
1128 | 1137 | return r; |
---|
1129 | 1138 | |
---|
.. | .. |
---|
1139 | 1148 | */ |
---|
1140 | 1149 | adev->gmc.mc_mask = 0xffffffffffULL; /* 40 bit MC */ |
---|
1141 | 1150 | |
---|
1142 | | - /* set DMA mask + need_dma32 flags. |
---|
1143 | | - * PCIE - can handle 40-bits. |
---|
1144 | | - * IGP - can handle 40-bits |
---|
1145 | | - * PCI - dma32 for legacy pci gart, 40 bits on newer asics |
---|
1146 | | - */ |
---|
1147 | | - adev->need_dma32 = false; |
---|
1148 | | - dma_bits = adev->need_dma32 ? 32 : 40; |
---|
1149 | | - r = pci_set_dma_mask(adev->pdev, DMA_BIT_MASK(dma_bits)); |
---|
| 1151 | + r = dma_set_mask_and_coherent(adev->dev, DMA_BIT_MASK(40)); |
---|
1150 | 1152 | if (r) { |
---|
1151 | | - adev->need_dma32 = true; |
---|
1152 | | - dma_bits = 32; |
---|
1153 | | - pr_warn("amdgpu: No suitable DMA available\n"); |
---|
| 1153 | + pr_warn("No suitable DMA available\n"); |
---|
| 1154 | + return r; |
---|
1154 | 1155 | } |
---|
1155 | | - r = pci_set_consistent_dma_mask(adev->pdev, DMA_BIT_MASK(dma_bits)); |
---|
1156 | | - if (r) { |
---|
1157 | | - pci_set_consistent_dma_mask(adev->pdev, DMA_BIT_MASK(32)); |
---|
1158 | | - pr_warn("amdgpu: No coherent DMA available\n"); |
---|
1159 | | - } |
---|
1160 | | - adev->need_swiotlb = drm_get_max_iomem() > ((u64)1 << dma_bits); |
---|
| 1156 | + adev->need_swiotlb = drm_need_swiotlb(40); |
---|
1161 | 1157 | |
---|
1162 | 1158 | r = gmc_v8_0_init_microcode(adev); |
---|
1163 | 1159 | if (r) { |
---|
.. | .. |
---|
1169 | 1165 | if (r) |
---|
1170 | 1166 | return r; |
---|
1171 | 1167 | |
---|
1172 | | - adev->gmc.stolen_size = gmc_v8_0_get_vbios_fb_size(adev); |
---|
| 1168 | + amdgpu_gmc_get_vbios_allocations(adev); |
---|
1173 | 1169 | |
---|
1174 | 1170 | /* Memory manager */ |
---|
1175 | 1171 | r = amdgpu_bo_init(adev); |
---|
.. | .. |
---|
1186 | 1182 | * amdgpu graphics/compute will use VMIDs 1-7 |
---|
1187 | 1183 | * amdkfd will use VMIDs 8-15 |
---|
1188 | 1184 | */ |
---|
1189 | | - adev->vm_manager.id_mgr[0].num_ids = AMDGPU_NUM_OF_VMIDS; |
---|
| 1185 | + adev->vm_manager.first_kfd_vmid = 8; |
---|
1190 | 1186 | amdgpu_vm_manager_init(adev); |
---|
1191 | 1187 | |
---|
1192 | 1188 | /* base offset of vram pages */ |
---|
.. | .. |
---|
1473 | 1469 | gmc_v8_0_set_fault_enable_default(adev, false); |
---|
1474 | 1470 | |
---|
1475 | 1471 | if (printk_ratelimit()) { |
---|
1476 | | - struct amdgpu_task_info task_info = { 0 }; |
---|
| 1472 | + struct amdgpu_task_info task_info; |
---|
1477 | 1473 | |
---|
| 1474 | + memset(&task_info, 0, sizeof(struct amdgpu_task_info)); |
---|
1478 | 1475 | amdgpu_vm_get_task_info(adev, entry->pasid, &task_info); |
---|
1479 | 1476 | |
---|
1480 | 1477 | dev_err(adev->dev, "GPU fault detected: %d 0x%08x for process %s pid %d thread %s pid %d\n", |
---|
.. | .. |
---|
1742 | 1739 | |
---|
1743 | 1740 | static const struct amdgpu_gmc_funcs gmc_v8_0_gmc_funcs = { |
---|
1744 | 1741 | .flush_gpu_tlb = gmc_v8_0_flush_gpu_tlb, |
---|
| 1742 | + .flush_gpu_tlb_pasid = gmc_v8_0_flush_gpu_tlb_pasid, |
---|
1745 | 1743 | .emit_flush_gpu_tlb = gmc_v8_0_emit_flush_gpu_tlb, |
---|
1746 | 1744 | .emit_pasid_mapping = gmc_v8_0_emit_pasid_mapping, |
---|
1747 | | - .set_pte_pde = gmc_v8_0_set_pte_pde, |
---|
1748 | 1745 | .set_prt = gmc_v8_0_set_prt, |
---|
1749 | | - .get_vm_pte_flags = gmc_v8_0_get_vm_pte_flags, |
---|
1750 | | - .get_vm_pde = gmc_v8_0_get_vm_pde |
---|
| 1746 | + .get_vm_pde = gmc_v8_0_get_vm_pde, |
---|
| 1747 | + .get_vm_pte = gmc_v8_0_get_vm_pte, |
---|
| 1748 | + .get_vbios_fb_size = gmc_v8_0_get_vbios_fb_size, |
---|
1751 | 1749 | }; |
---|
1752 | 1750 | |
---|
1753 | 1751 | static const struct amdgpu_irq_src_funcs gmc_v8_0_irq_funcs = { |
---|
.. | .. |
---|
1757 | 1755 | |
---|
1758 | 1756 | static void gmc_v8_0_set_gmc_funcs(struct amdgpu_device *adev) |
---|
1759 | 1757 | { |
---|
1760 | | - if (adev->gmc.gmc_funcs == NULL) |
---|
1761 | | - adev->gmc.gmc_funcs = &gmc_v8_0_gmc_funcs; |
---|
| 1758 | + adev->gmc.gmc_funcs = &gmc_v8_0_gmc_funcs; |
---|
1762 | 1759 | } |
---|
1763 | 1760 | |
---|
1764 | 1761 | static void gmc_v8_0_set_irq_funcs(struct amdgpu_device *adev) |
---|