diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 30 |
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 | ||
4274 | static const struct amdgpu_rlc_funcs gfx_v7_0_rlc_funcs = { | 4274 | static 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 | ||
4279 | static int gfx_v7_0_early_init(void *handle) | 4285 | static 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); |