aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.c
diff options
context:
space:
mode:
authorHuang Rui <ray.huang@amd.com>2017-05-31 10:17:11 -0400
committerAlex Deucher <alexander.deucher@amd.com>2017-06-06 16:58:23 -0400
commit3dff4cc4b0f99f039d41ff86c3503372f9719124 (patch)
tree8ff76477d78b32d396114409c389c4bf959f6b74 /drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.c
parentd5c87390f1a0e82c3ce4ab8d7ba8a323e8729484 (diff)
drm/amdgpu: abstract setup vmid config for gfxhub/mmhub
Signed-off-by: Huang Rui <ray.huang@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.c51
1 files changed, 27 insertions, 24 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.c b/drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.c
index 3359b2c07349..626afc046f78 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.c
@@ -195,31 +195,10 @@ static void gfxhub_v1_0_disable_identity_aperture(struct amdgpu_device *adev)
195 195
196} 196}
197 197
198int gfxhub_v1_0_gart_enable(struct amdgpu_device *adev) 198static void gfxhub_v1_0_setup_vmid_config(struct amdgpu_device *adev)
199{ 199{
200 u32 tmp; 200 int i;
201 u32 i; 201 uint32_t tmp;
202
203 if (amdgpu_sriov_vf(adev)) {
204 /*
205 * MC_VM_FB_LOCATION_BASE/TOP is NULL for VF, becuase they are
206 * VF copy registers so vbios post doesn't program them, for
207 * SRIOV driver need to program them
208 */
209 WREG32(SOC15_REG_OFFSET(GC, 0, mmMC_VM_FB_LOCATION_BASE),
210 adev->mc.vram_start >> 24);
211 WREG32(SOC15_REG_OFFSET(GC, 0, mmMC_VM_FB_LOCATION_TOP),
212 adev->mc.vram_end >> 24);
213 }
214
215 /* GART Enable. */
216 gfxhub_v1_0_init_gart_aperture_regs(adev);
217 gfxhub_v1_0_init_system_aperture_regs(adev);
218 gfxhub_v1_0_init_tlb_regs(adev);
219 gfxhub_v1_0_init_cache_regs(adev);
220
221 gfxhub_v1_0_enable_system_domain(adev);
222 gfxhub_v1_0_disable_identity_aperture(adev);
223 202
224 for (i = 0; i <= 14; i++) { 203 for (i = 0; i <= 14; i++) {
225 tmp = RREG32(SOC15_REG_OFFSET(GC, 0, mmVM_CONTEXT1_CNTL) + i); 204 tmp = RREG32(SOC15_REG_OFFSET(GC, 0, mmVM_CONTEXT1_CNTL) + i);
@@ -251,7 +230,31 @@ int gfxhub_v1_0_gart_enable(struct amdgpu_device *adev)
251 WREG32(SOC15_REG_OFFSET(GC, 0, mmVM_CONTEXT1_PAGE_TABLE_END_ADDR_HI32) + i*2, 230 WREG32(SOC15_REG_OFFSET(GC, 0, mmVM_CONTEXT1_PAGE_TABLE_END_ADDR_HI32) + i*2,
252 upper_32_bits(adev->vm_manager.max_pfn - 1)); 231 upper_32_bits(adev->vm_manager.max_pfn - 1));
253 } 232 }
233}
234
235int gfxhub_v1_0_gart_enable(struct amdgpu_device *adev)
236{
237 if (amdgpu_sriov_vf(adev)) {
238 /*
239 * MC_VM_FB_LOCATION_BASE/TOP is NULL for VF, becuase they are
240 * VF copy registers so vbios post doesn't program them, for
241 * SRIOV driver need to program them
242 */
243 WREG32(SOC15_REG_OFFSET(GC, 0, mmMC_VM_FB_LOCATION_BASE),
244 adev->mc.vram_start >> 24);
245 WREG32(SOC15_REG_OFFSET(GC, 0, mmMC_VM_FB_LOCATION_TOP),
246 adev->mc.vram_end >> 24);
247 }
248
249 /* GART Enable. */
250 gfxhub_v1_0_init_gart_aperture_regs(adev);
251 gfxhub_v1_0_init_system_aperture_regs(adev);
252 gfxhub_v1_0_init_tlb_regs(adev);
253 gfxhub_v1_0_init_cache_regs(adev);
254 254
255 gfxhub_v1_0_enable_system_domain(adev);
256 gfxhub_v1_0_disable_identity_aperture(adev);
257 gfxhub_v1_0_setup_vmid_config(adev);
255 258
256 return 0; 259 return 0;
257} 260}