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 mmhub 2.0

The KFD code will call this function later.

Signed-off-by: Yong Zhao <Yong.Zhao@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
e7956997 923c087a

+14 -7
+12 -7
drivers/gpu/drm/amd/amdgpu/mmhub_v2_0.c
··· 31 31 32 32 #include "soc15_common.h" 33 33 34 - static void mmhub_v2_0_init_gart_pt_regs(struct amdgpu_device *adev) 34 + void mmhub_v2_0_setup_vm_pt_regs(struct amdgpu_device *adev, uint32_t vmid, 35 + uint64_t page_table_base) 35 36 { 36 - uint64_t value = amdgpu_gmc_pd_addr(adev->gart.bo); 37 + /* two registers distance between mmMMVM_CONTEXT0_* to mmMMVM_CONTEXT1_* */ 38 + int offset = mmMMVM_CONTEXT1_PAGE_TABLE_BASE_ADDR_LO32 39 + - mmMMVM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LO32; 37 40 38 - WREG32_SOC15(MMHUB, 0, mmMMVM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LO32, 39 - lower_32_bits(value)); 41 + WREG32_SOC15_OFFSET(MMHUB, 0, mmMMVM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LO32, 42 + offset * vmid, lower_32_bits(page_table_base)); 40 43 41 - WREG32_SOC15(MMHUB, 0, mmMMVM_CONTEXT0_PAGE_TABLE_BASE_ADDR_HI32, 42 - upper_32_bits(value)); 44 + WREG32_SOC15_OFFSET(MMHUB, 0, mmMMVM_CONTEXT0_PAGE_TABLE_BASE_ADDR_HI32, 45 + offset * vmid, upper_32_bits(page_table_base)); 43 46 } 44 47 45 48 static void mmhub_v2_0_init_gart_aperture_regs(struct amdgpu_device *adev) 46 49 { 47 - mmhub_v2_0_init_gart_pt_regs(adev); 50 + uint64_t pt_base = amdgpu_gmc_pd_addr(adev->gart.bo); 51 + 52 + mmhub_v2_0_setup_vm_pt_regs(adev, 0, pt_base); 48 53 49 54 WREG32_SOC15(MMHUB, 0, mmMMVM_CONTEXT0_PAGE_TABLE_START_ADDR_LO32, 50 55 (u32)(adev->gmc.gart_start >> 12));
+2
drivers/gpu/drm/amd/amdgpu/mmhub_v2_0.h
··· 31 31 int mmhub_v2_0_set_clockgating(struct amdgpu_device *adev, 32 32 enum amd_clockgating_state state); 33 33 void mmhub_v2_0_get_clockgating(struct amdgpu_device *adev, u32 *flags); 34 + void mmhub_v2_0_setup_vm_pt_regs(struct amdgpu_device *adev, uint32_t vmid, 35 + uint64_t page_table_base); 34 36 35 37 #endif