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

drm/amdgpu: Export setup_vm_pt_regs() logic for gfxhub 2.0

The KFD code will call this function later.

Signed-off-by: Yong Zhao <Yong.Zhao@amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Yong Zhao and committed by
Alex Deucher
286b789e 56fc40ab

+14 -8
+12 -8
drivers/gpu/drm/amd/amdgpu/gfxhub_v2_0.c
··· 46 46 return (u64)RREG32_SOC15(GC, 0, mmGCMC_VM_FB_OFFSET) << 24; 47 47 } 48 48 49 - static void gfxhub_v2_0_init_gart_pt_regs(struct amdgpu_device *adev) 49 + void gfxhub_v2_0_setup_vm_pt_regs(struct amdgpu_device *adev, uint32_t vmid, 50 + uint64_t page_table_base) 50 51 { 51 - uint64_t value = amdgpu_gmc_pd_addr(adev->gart.bo); 52 + /* two registers distance between mmGCVM_CONTEXT0_* to mmGCVM_CONTEXT1_* */ 53 + int offset = mmGCVM_CONTEXT1_PAGE_TABLE_BASE_ADDR_LO32 54 + - mmGCVM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LO32; 52 55 56 + WREG32_SOC15_OFFSET(GC, 0, mmGCVM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LO32, 57 + offset * vmid, lower_32_bits(page_table_base)); 53 58 54 - WREG32_SOC15(GC, 0, mmGCVM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LO32, 55 - lower_32_bits(value)); 56 - 57 - WREG32_SOC15(GC, 0, mmGCVM_CONTEXT0_PAGE_TABLE_BASE_ADDR_HI32, 58 - upper_32_bits(value)); 59 + WREG32_SOC15_OFFSET(GC, 0, mmGCVM_CONTEXT0_PAGE_TABLE_BASE_ADDR_HI32, 60 + offset * vmid, upper_32_bits(page_table_base)); 59 61 } 60 62 61 63 static void gfxhub_v2_0_init_gart_aperture_regs(struct amdgpu_device *adev) 62 64 { 63 - gfxhub_v2_0_init_gart_pt_regs(adev); 65 + uint64_t pt_base = amdgpu_gmc_pd_addr(adev->gart.bo); 66 + 67 + gfxhub_v2_0_setup_vm_pt_regs(adev, 0, pt_base); 64 68 65 69 WREG32_SOC15(GC, 0, mmGCVM_CONTEXT0_PAGE_TABLE_START_ADDR_LO32, 66 70 (u32)(adev->gmc.gart_start >> 12));
+2
drivers/gpu/drm/amd/amdgpu/gfxhub_v2_0.h
··· 31 31 bool value); 32 32 void gfxhub_v2_0_init(struct amdgpu_device *adev); 33 33 u64 gfxhub_v2_0_get_mc_fb_offset(struct amdgpu_device *adev); 34 + void gfxhub_v2_0_setup_vm_pt_regs(struct amdgpu_device *adev, uint32_t vmid, 35 + uint64_t page_table_base); 34 36 35 37 #endif