aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c30
1 files changed, 18 insertions, 12 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
index 243b8c502ca6..d8e2ad875cfe 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
@@ -3298,7 +3298,7 @@ static int gfx_v7_0_rlc_init(struct amdgpu_device *adev)
3298 (void **)&adev->gfx.rlc.sr_ptr); 3298 (void **)&adev->gfx.rlc.sr_ptr);
3299 if (r) { 3299 if (r) {
3300 dev_warn(adev->dev, "(%d) create, pin or map of RLC sr bo failed\n", r); 3300 dev_warn(adev->dev, "(%d) create, pin or map of RLC sr bo failed\n", r);
3301 gfx_v7_0_rlc_fini(adev); 3301 adev->gfx.rlc.funcs->fini(adev);
3302 return r; 3302 return r;
3303 } 3303 }
3304 3304
@@ -3321,7 +3321,7 @@ static int gfx_v7_0_rlc_init(struct amdgpu_device *adev)
3321 (void **)&adev->gfx.rlc.cs_ptr); 3321 (void **)&adev->gfx.rlc.cs_ptr);
3322 if (r) { 3322 if (r) {
3323 dev_warn(adev->dev, "(%d) create RLC c bo failed\n", r); 3323 dev_warn(adev->dev, "(%d) create RLC c bo failed\n", r);
3324 gfx_v7_0_rlc_fini(adev); 3324 adev->gfx.rlc.funcs->fini(adev);
3325 return r; 3325 return r;
3326 } 3326 }
3327 3327
@@ -3341,7 +3341,7 @@ static int gfx_v7_0_rlc_init(struct amdgpu_device *adev)
3341 (void **)&adev->gfx.rlc.cp_table_ptr); 3341 (void **)&adev->gfx.rlc.cp_table_ptr);
3342 if (r) { 3342 if (r) {
3343 dev_warn(adev->dev, "(%d) create RLC cp table bo failed\n", r); 3343 dev_warn(adev->dev, "(%d) create RLC cp table bo failed\n", r);
3344 gfx_v7_0_rlc_fini(adev); 3344 adev->gfx.rlc.funcs->fini(adev);
3345 return r; 3345 return r;
3346 } 3346 }
3347 3347
@@ -3529,13 +3529,13 @@ static int gfx_v7_0_rlc_resume(struct amdgpu_device *adev)
3529 adev->gfx.rlc_feature_version = le32_to_cpu( 3529 adev->gfx.rlc_feature_version = le32_to_cpu(
3530 hdr->ucode_feature_version); 3530 hdr->ucode_feature_version);
3531 3531
3532 gfx_v7_0_rlc_stop(adev); 3532 adev->gfx.rlc.funcs->stop(adev);
3533 3533
3534 /* disable CG */ 3534 /* disable CG */
3535 tmp = RREG32(mmRLC_CGCG_CGLS_CTRL) & 0xfffffffc; 3535 tmp = RREG32(mmRLC_CGCG_CGLS_CTRL) & 0xfffffffc;
3536 WREG32(mmRLC_CGCG_CGLS_CTRL, tmp); 3536 WREG32(mmRLC_CGCG_CGLS_CTRL, tmp);
3537 3537
3538 gfx_v7_0_rlc_reset(adev); 3538 adev->gfx.rlc.funcs->reset(adev);
3539 3539
3540 gfx_v7_0_init_pg(adev); 3540 gfx_v7_0_init_pg(adev);
3541 3541
@@ -3566,7 +3566,7 @@ static int gfx_v7_0_rlc_resume(struct amdgpu_device *adev)
3566 if (adev->asic_type == CHIP_BONAIRE) 3566 if (adev->asic_type == CHIP_BONAIRE)
3567 WREG32(mmRLC_DRIVER_CPDMA_STATUS, 0); 3567 WREG32(mmRLC_DRIVER_CPDMA_STATUS, 0);
3568 3568
3569 gfx_v7_0_rlc_start(adev); 3569 adev->gfx.rlc.funcs->start(adev);
3570 3570
3571 return 0; 3571 return 0;
3572} 3572}
@@ -4273,7 +4273,13 @@ static const struct amdgpu_gfx_funcs gfx_v7_0_gfx_funcs = {
4273 4273
4274static const struct amdgpu_rlc_funcs gfx_v7_0_rlc_funcs = { 4274static const struct amdgpu_rlc_funcs gfx_v7_0_rlc_funcs = {
4275 .enter_safe_mode = gfx_v7_0_enter_rlc_safe_mode, 4275 .enter_safe_mode = gfx_v7_0_enter_rlc_safe_mode,
4276 .exit_safe_mode = gfx_v7_0_exit_rlc_safe_mode 4276 .exit_safe_mode = gfx_v7_0_exit_rlc_safe_mode,
4277 .init = gfx_v7_0_rlc_init,
4278 .fini = gfx_v7_0_rlc_fini,
4279 .resume = gfx_v7_0_rlc_resume,
4280 .stop = gfx_v7_0_rlc_stop,
4281 .reset = gfx_v7_0_rlc_reset,
4282 .start = gfx_v7_0_rlc_start
4277}; 4283};
4278 4284
4279static int gfx_v7_0_early_init(void *handle) 4285static int gfx_v7_0_early_init(void *handle)
@@ -4524,7 +4530,7 @@ static int gfx_v7_0_sw_init(void *handle)
4524 return r; 4530 return r;
4525 } 4531 }
4526 4532
4527 r = gfx_v7_0_rlc_init(adev); 4533 r = adev->gfx.rlc.funcs->init(adev);
4528 if (r) { 4534 if (r) {
4529 DRM_ERROR("Failed to init rlc BOs!\n"); 4535 DRM_ERROR("Failed to init rlc BOs!\n");
4530 return r; 4536 return r;
@@ -4588,7 +4594,7 @@ static int gfx_v7_0_sw_fini(void *handle)
4588 amdgpu_ring_fini(&adev->gfx.compute_ring[i]); 4594 amdgpu_ring_fini(&adev->gfx.compute_ring[i]);
4589 4595
4590 gfx_v7_0_cp_compute_fini(adev); 4596 gfx_v7_0_cp_compute_fini(adev);
4591 gfx_v7_0_rlc_fini(adev); 4597 adev->gfx.rlc.funcs->fini(adev);
4592 gfx_v7_0_mec_fini(adev); 4598 gfx_v7_0_mec_fini(adev);
4593 amdgpu_bo_free_kernel(&adev->gfx.rlc.clear_state_obj, 4599 amdgpu_bo_free_kernel(&adev->gfx.rlc.clear_state_obj,
4594 &adev->gfx.rlc.clear_state_gpu_addr, 4600 &adev->gfx.rlc.clear_state_gpu_addr,
@@ -4611,7 +4617,7 @@ static int gfx_v7_0_hw_init(void *handle)
4611 gfx_v7_0_constants_init(adev); 4617 gfx_v7_0_constants_init(adev);
4612 4618
4613 /* init rlc */ 4619 /* init rlc */
4614 r = gfx_v7_0_rlc_resume(adev); 4620 r = adev->gfx.rlc.funcs->resume(adev);
4615 if (r) 4621 if (r)
4616 return r; 4622 return r;
4617 4623
@@ -4629,7 +4635,7 @@ static int gfx_v7_0_hw_fini(void *handle)
4629 amdgpu_irq_put(adev, &adev->gfx.priv_reg_irq, 0); 4635 amdgpu_irq_put(adev, &adev->gfx.priv_reg_irq, 0);
4630 amdgpu_irq_put(adev, &adev->gfx.priv_inst_irq, 0); 4636 amdgpu_irq_put(adev, &adev->gfx.priv_inst_irq, 0);
4631 gfx_v7_0_cp_enable(adev, false); 4637 gfx_v7_0_cp_enable(adev, false);
4632 gfx_v7_0_rlc_stop(adev); 4638 adev->gfx.rlc.funcs->stop(adev);
4633 gfx_v7_0_fini_pg(adev); 4639 gfx_v7_0_fini_pg(adev);
4634 4640
4635 return 0; 4641 return 0;
@@ -4714,7 +4720,7 @@ static int gfx_v7_0_soft_reset(void *handle)
4714 gfx_v7_0_update_cg(adev, false); 4720 gfx_v7_0_update_cg(adev, false);
4715 4721
4716 /* stop the rlc */ 4722 /* stop the rlc */
4717 gfx_v7_0_rlc_stop(adev); 4723 adev->gfx.rlc.funcs->stop(adev);
4718 4724
4719 /* Disable GFX parsing/prefetching */ 4725 /* Disable GFX parsing/prefetching */
4720 WREG32(mmCP_ME_CNTL, CP_ME_CNTL__ME_HALT_MASK | CP_ME_CNTL__PFP_HALT_MASK | CP_ME_CNTL__CE_HALT_MASK); 4726 WREG32(mmCP_ME_CNTL, CP_ME_CNTL__ME_HALT_MASK | CP_ME_CNTL__PFP_HALT_MASK | CP_ME_CNTL__CE_HALT_MASK);