aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
diff options
context:
space:
mode:
authorLikun Gao <Likun.Gao@amd.com>2018-09-28 07:21:23 -0400
committerAlex Deucher <alexander.deucher@amd.com>2018-11-09 16:28:52 -0500
commitfdb81fd788a732b5efda8638be3fe159550b032d (patch)
tree63e54f39f4445585e03a6795ec67cbe75751e4a0 /drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
parenta82c15668cfc02d69e0265cda50fa932310ddd30 (diff)
drm/amdgpu: unify rlc function into structure
Put function rlc_init,rlc_fini,rlc_resume,rlc_stop,rlc_start into structure amdgpu_rlc_funcs and change the method to call rlc function for each verssion of GFX. Signed-off-by: Likun Gao <Likun.Gao@amd.com> Acked-by: Christian König <christian.koenig@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c28
1 files changed, 17 insertions, 11 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
index bdae5636a910..7dbcb2ea20fd 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
@@ -1376,7 +1376,7 @@ static int gfx_v8_0_rlc_init(struct amdgpu_device *adev)
1376 (void **)&adev->gfx.rlc.cs_ptr); 1376 (void **)&adev->gfx.rlc.cs_ptr);
1377 if (r) { 1377 if (r) {
1378 dev_warn(adev->dev, "(%d) create RLC c bo failed\n", r); 1378 dev_warn(adev->dev, "(%d) create RLC c bo failed\n", r);
1379 gfx_v8_0_rlc_fini(adev); 1379 adev->gfx.rlc.funcs->fini(adev);
1380 return r; 1380 return r;
1381 } 1381 }
1382 1382
@@ -2073,7 +2073,7 @@ static int gfx_v8_0_sw_init(void *handle)
2073 return r; 2073 return r;
2074 } 2074 }
2075 2075
2076 r = gfx_v8_0_rlc_init(adev); 2076 r = adev->gfx.rlc.funcs->init(adev);
2077 if (r) { 2077 if (r) {
2078 DRM_ERROR("Failed to init rlc BOs!\n"); 2078 DRM_ERROR("Failed to init rlc BOs!\n");
2079 return r; 2079 return r;
@@ -2166,7 +2166,7 @@ static int gfx_v8_0_sw_fini(void *handle)
2166 amdgpu_gfx_kiq_fini(adev); 2166 amdgpu_gfx_kiq_fini(adev);
2167 2167
2168 gfx_v8_0_mec_fini(adev); 2168 gfx_v8_0_mec_fini(adev);
2169 gfx_v8_0_rlc_fini(adev); 2169 adev->gfx.rlc.funcs->fini(adev);
2170 amdgpu_bo_free_kernel(&adev->gfx.rlc.clear_state_obj, 2170 amdgpu_bo_free_kernel(&adev->gfx.rlc.clear_state_obj,
2171 &adev->gfx.rlc.clear_state_gpu_addr, 2171 &adev->gfx.rlc.clear_state_gpu_addr,
2172 (void **)&adev->gfx.rlc.cs_ptr); 2172 (void **)&adev->gfx.rlc.cs_ptr);
@@ -4160,10 +4160,10 @@ static void gfx_v8_0_rlc_start(struct amdgpu_device *adev)
4160 4160
4161static int gfx_v8_0_rlc_resume(struct amdgpu_device *adev) 4161static int gfx_v8_0_rlc_resume(struct amdgpu_device *adev)
4162{ 4162{
4163 gfx_v8_0_rlc_stop(adev); 4163 adev->gfx.rlc.funcs->stop(adev);
4164 gfx_v8_0_rlc_reset(adev); 4164 adev->gfx.rlc.funcs->reset(adev);
4165 gfx_v8_0_init_pg(adev); 4165 gfx_v8_0_init_pg(adev);
4166 gfx_v8_0_rlc_start(adev); 4166 adev->gfx.rlc.funcs->start(adev);
4167 4167
4168 return 0; 4168 return 0;
4169} 4169}
@@ -4845,7 +4845,7 @@ static int gfx_v8_0_hw_init(void *handle)
4845 gfx_v8_0_init_golden_registers(adev); 4845 gfx_v8_0_init_golden_registers(adev);
4846 gfx_v8_0_constants_init(adev); 4846 gfx_v8_0_constants_init(adev);
4847 4847
4848 r = gfx_v8_0_rlc_resume(adev); 4848 r = adev->gfx.rlc.funcs->resume(adev);
4849 if (r) 4849 if (r)
4850 return r; 4850 return r;
4851 4851
@@ -4957,7 +4957,7 @@ static int gfx_v8_0_hw_fini(void *handle)
4957 else 4957 else
4958 pr_err("cp is busy, skip halt cp\n"); 4958 pr_err("cp is busy, skip halt cp\n");
4959 if (!gfx_v8_0_wait_for_rlc_idle(adev)) 4959 if (!gfx_v8_0_wait_for_rlc_idle(adev))
4960 gfx_v8_0_rlc_stop(adev); 4960 adev->gfx.rlc.funcs->stop(adev);
4961 else 4961 else
4962 pr_err("rlc is busy, skip halt rlc\n"); 4962 pr_err("rlc is busy, skip halt rlc\n");
4963 adev->gfx.rlc.funcs->exit_safe_mode(adev); 4963 adev->gfx.rlc.funcs->exit_safe_mode(adev);
@@ -5049,7 +5049,7 @@ static int gfx_v8_0_pre_soft_reset(void *handle)
5049 srbm_soft_reset = adev->gfx.srbm_soft_reset; 5049 srbm_soft_reset = adev->gfx.srbm_soft_reset;
5050 5050
5051 /* stop the rlc */ 5051 /* stop the rlc */
5052 gfx_v8_0_rlc_stop(adev); 5052 adev->gfx.rlc.funcs->stop(adev);
5053 5053
5054 if (REG_GET_FIELD(grbm_soft_reset, GRBM_SOFT_RESET, SOFT_RESET_CP) || 5054 if (REG_GET_FIELD(grbm_soft_reset, GRBM_SOFT_RESET, SOFT_RESET_CP) ||
5055 REG_GET_FIELD(grbm_soft_reset, GRBM_SOFT_RESET, SOFT_RESET_GFX)) 5055 REG_GET_FIELD(grbm_soft_reset, GRBM_SOFT_RESET, SOFT_RESET_GFX))
@@ -5175,7 +5175,7 @@ static int gfx_v8_0_post_soft_reset(void *handle)
5175 REG_GET_FIELD(grbm_soft_reset, GRBM_SOFT_RESET, SOFT_RESET_GFX)) 5175 REG_GET_FIELD(grbm_soft_reset, GRBM_SOFT_RESET, SOFT_RESET_GFX))
5176 gfx_v8_0_cp_gfx_resume(adev); 5176 gfx_v8_0_cp_gfx_resume(adev);
5177 5177
5178 gfx_v8_0_rlc_start(adev); 5178 adev->gfx.rlc.funcs->start(adev);
5179 5179
5180 return 0; 5180 return 0;
5181} 5181}
@@ -5632,7 +5632,13 @@ static void iceland_exit_rlc_safe_mode(struct amdgpu_device *adev)
5632 5632
5633static const struct amdgpu_rlc_funcs iceland_rlc_funcs = { 5633static const struct amdgpu_rlc_funcs iceland_rlc_funcs = {
5634 .enter_safe_mode = iceland_enter_rlc_safe_mode, 5634 .enter_safe_mode = iceland_enter_rlc_safe_mode,
5635 .exit_safe_mode = iceland_exit_rlc_safe_mode 5635 .exit_safe_mode = iceland_exit_rlc_safe_mode,
5636 .init = gfx_v8_0_rlc_init,
5637 .fini = gfx_v8_0_rlc_fini,
5638 .resume = gfx_v8_0_rlc_resume,
5639 .stop = gfx_v8_0_rlc_stop,
5640 .reset = gfx_v8_0_rlc_reset,
5641 .start = gfx_v8_0_rlc_start
5636}; 5642};
5637 5643
5638static void gfx_v8_0_update_medium_grain_clock_gating(struct amdgpu_device *adev, 5644static void gfx_v8_0_update_medium_grain_clock_gating(struct amdgpu_device *adev,