diff options
author | Likun Gao <Likun.Gao@amd.com> | 2018-09-28 07:21:23 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2018-11-09 16:28:52 -0500 |
commit | fdb81fd788a732b5efda8638be3fe159550b032d (patch) | |
tree | 63e54f39f4445585e03a6795ec67cbe75751e4a0 /drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | |
parent | a82c15668cfc02d69e0265cda50fa932310ddd30 (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.c | 28 |
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 | ||
4161 | static int gfx_v8_0_rlc_resume(struct amdgpu_device *adev) | 4161 | static 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 | ||
5633 | static const struct amdgpu_rlc_funcs iceland_rlc_funcs = { | 5633 | static 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 | ||
5638 | static void gfx_v8_0_update_medium_grain_clock_gating(struct amdgpu_device *adev, | 5644 | static void gfx_v8_0_update_medium_grain_clock_gating(struct amdgpu_device *adev, |