drm/amdgpu: update the handle ptr in hw_fini

Update the *handle to amdgpu_ip_block ptr for all
functions pointers of hw_fini.

Also update the ip_block ptr where ever needed as
there were cyclic dependency of hw_fini on suspend
and some followed clean up.

Signed-off-by: Sunil Khatri <sunil.khatri@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
Sunil Khatri
2024-10-07 14:03:25 -04:00
committed by Alex Deucher
parent 58608034ed
commit 692d2cd180
85 changed files with 278 additions and 425 deletions
+2 -2
View File
@@ -500,11 +500,11 @@ failure:
* @handle: handle used to pass amdgpu_device pointer
*
*/
static int acp_hw_fini(void *handle)
static int acp_hw_fini(struct amdgpu_ip_block *ip_block)
{
u32 val = 0;
u32 count = 0;
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
struct amdgpu_device *adev = ip_block->adev;
/* return early if no ACP */
if (!adev->acp.acp_genpd) {
+2 -2
View File
@@ -3285,7 +3285,7 @@ static void amdgpu_device_smu_fini_early(struct amdgpu_device *adev)
if (!adev->ip_blocks[i].status.hw)
continue;
if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_SMC) {
r = adev->ip_blocks[i].version->funcs->hw_fini((void *)adev);
r = adev->ip_blocks[i].version->funcs->hw_fini(&adev->ip_blocks[i]);
/* XXX handle errors */
if (r) {
DRM_DEBUG("hw_fini of IP block <%s> failed %d\n",
@@ -3324,7 +3324,7 @@ static int amdgpu_device_ip_fini_early(struct amdgpu_device *adev)
if (!adev->ip_blocks[i].status.hw)
continue;
r = adev->ip_blocks[i].version->funcs->hw_fini((void *)adev);
r = adev->ip_blocks[i].version->funcs->hw_fini(&adev->ip_blocks[i]);
/* XXX handle errors */
if (r) {
DRM_DEBUG("hw_fini of IP block <%s> failed %d\n",
+2 -3
View File
@@ -66,10 +66,9 @@ static int isp_hw_init(struct amdgpu_ip_block *ip_block)
* @handle: handle for amdgpu_device pointer
*
*/
static int isp_hw_fini(void *handle)
static int isp_hw_fini(struct amdgpu_ip_block *ip_block)
{
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
struct amdgpu_isp *isp = &adev->isp;
struct amdgpu_isp *isp = &ip_block->adev->isp;
if (isp->funcs->hw_fini != NULL)
return isp->funcs->hw_fini(isp);
+2 -2
View File
@@ -3002,9 +3002,9 @@ failed:
return -EINVAL;
}
static int psp_hw_fini(void *handle)
static int psp_hw_fini(struct amdgpu_ip_block *ip_block)
{
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
struct amdgpu_device *adev = ip_block->adev;
struct psp_context *psp = &adev->psp;
if (psp->ta_fw) {
+3 -5
View File
@@ -857,9 +857,9 @@ static int umsch_mm_hw_init(struct amdgpu_ip_block *ip_block)
return 0;
}
static int umsch_mm_hw_fini(void *handle)
static int umsch_mm_hw_fini(struct amdgpu_ip_block *ip_block)
{
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
struct amdgpu_device *adev = ip_block->adev;
umsch_mm_ring_stop(&adev->umsch_mm);
@@ -875,9 +875,7 @@ static int umsch_mm_hw_fini(void *handle)
static int umsch_mm_suspend(struct amdgpu_ip_block *ip_block)
{
struct amdgpu_device *adev = ip_block->adev;
return umsch_mm_hw_fini(adev);
return umsch_mm_hw_fini(ip_block);
}
static int umsch_mm_resume(struct amdgpu_ip_block *ip_block)
+2 -2
View File
@@ -600,7 +600,7 @@ static int amdgpu_vkms_hw_init(struct amdgpu_ip_block *ip_block)
return 0;
}
static int amdgpu_vkms_hw_fini(void *handle)
static int amdgpu_vkms_hw_fini(struct amdgpu_ip_block *ip_block)
{
return 0;
}
@@ -613,7 +613,7 @@ static int amdgpu_vkms_suspend(struct amdgpu_ip_block *ip_block)
r = drm_mode_config_helper_suspend(adev_to_drm(adev));
if (r)
return r;
return amdgpu_vkms_hw_fini(adev);
return amdgpu_vkms_hw_fini(ip_block);
}
static int amdgpu_vkms_resume(struct amdgpu_ip_block *ip_block)
+3 -3
View File
@@ -421,9 +421,9 @@ static int vpe_hw_init(struct amdgpu_ip_block *ip_block)
return 0;
}
static int vpe_hw_fini(void *handle)
static int vpe_hw_fini(struct amdgpu_ip_block *ip_block)
{
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
struct amdgpu_device *adev = ip_block->adev;
struct amdgpu_vpe *vpe = &adev->vpe;
vpe_ring_stop(vpe);
@@ -440,7 +440,7 @@ static int vpe_suspend(struct amdgpu_ip_block *ip_block)
cancel_delayed_work_sync(&adev->vpe.idle_work);
return vpe_hw_fini(adev);
return vpe_hw_fini(ip_block);
}
static int vpe_resume(struct amdgpu_ip_block *ip_block)
+2 -4
View File
@@ -2148,16 +2148,14 @@ static int cik_common_hw_init(struct amdgpu_ip_block *ip_block)
return 0;
}
static int cik_common_hw_fini(void *handle)
static int cik_common_hw_fini(struct amdgpu_ip_block *ip_block)
{
return 0;
}
static int cik_common_suspend(struct amdgpu_ip_block *ip_block)
{
struct amdgpu_device *adev = ip_block->adev;
return cik_common_hw_fini(adev);
return cik_common_hw_fini(ip_block);
}
static int cik_common_resume(struct amdgpu_ip_block *ip_block)
+3 -7
View File
@@ -328,20 +328,16 @@ static int cik_ih_hw_init(struct amdgpu_ip_block *ip_block)
return cik_ih_irq_init(adev);
}
static int cik_ih_hw_fini(void *handle)
static int cik_ih_hw_fini(struct amdgpu_ip_block *ip_block)
{
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
cik_ih_irq_disable(adev);
cik_ih_irq_disable(ip_block->adev);
return 0;
}
static int cik_ih_suspend(struct amdgpu_ip_block *ip_block)
{
struct amdgpu_device *adev = ip_block->adev;
return cik_ih_hw_fini(adev);
return cik_ih_hw_fini(ip_block);
}
static int cik_ih_resume(struct amdgpu_ip_block *ip_block)
+3 -5
View File
@@ -1001,9 +1001,9 @@ static int cik_sdma_hw_init(struct amdgpu_ip_block *ip_block)
return r;
}
static int cik_sdma_hw_fini(void *handle)
static int cik_sdma_hw_fini(struct amdgpu_ip_block *ip_block)
{
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
struct amdgpu_device *adev = ip_block->adev;
cik_ctx_switch_enable(adev, false);
cik_sdma_enable(adev, false);
@@ -1013,9 +1013,7 @@ static int cik_sdma_hw_fini(void *handle)
static int cik_sdma_suspend(struct amdgpu_ip_block *ip_block)
{
struct amdgpu_device *adev = ip_block->adev;
return cik_sdma_hw_fini(adev);
return cik_sdma_hw_fini(ip_block);
}
static int cik_sdma_resume(struct amdgpu_ip_block *ip_block)
+3 -7
View File
@@ -324,20 +324,16 @@ static int cz_ih_hw_init(struct amdgpu_ip_block *ip_block)
return 0;
}
static int cz_ih_hw_fini(void *handle)
static int cz_ih_hw_fini(struct amdgpu_ip_block *ip_block)
{
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
cz_ih_irq_disable(adev);
cz_ih_irq_disable(ip_block->adev);
return 0;
}
static int cz_ih_suspend(struct amdgpu_ip_block *ip_block)
{
struct amdgpu_device *adev = ip_block->adev;
return cz_ih_hw_fini(adev);
return cz_ih_hw_fini(ip_block);
}
static int cz_ih_resume(struct amdgpu_ip_block *ip_block)
+3 -3
View File
@@ -2887,10 +2887,10 @@ static int dce_v10_0_hw_init(struct amdgpu_ip_block *ip_block)
return 0;
}
static int dce_v10_0_hw_fini(void *handle)
static int dce_v10_0_hw_fini(struct amdgpu_ip_block *ip_block)
{
int i;
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
struct amdgpu_device *adev = ip_block->adev;
dce_v10_0_hpd_fini(adev);
@@ -2917,7 +2917,7 @@ static int dce_v10_0_suspend(struct amdgpu_ip_block *ip_block)
adev->mode_info.bl_level =
amdgpu_atombios_encoder_get_backlight_level_from_reg(adev);
return dce_v10_0_hw_fini(adev);
return dce_v10_0_hw_fini(ip_block);
}
static int dce_v10_0_resume(struct amdgpu_ip_block *ip_block)
+3 -3
View File
@@ -3025,10 +3025,10 @@ static int dce_v11_0_hw_init(struct amdgpu_ip_block *ip_block)
return 0;
}
static int dce_v11_0_hw_fini(void *handle)
static int dce_v11_0_hw_fini(struct amdgpu_ip_block *ip_block)
{
int i;
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
struct amdgpu_device *adev = ip_block->adev;
dce_v11_0_hpd_fini(adev);
@@ -3055,7 +3055,7 @@ static int dce_v11_0_suspend(struct amdgpu_ip_block *ip_block)
adev->mode_info.bl_level =
amdgpu_atombios_encoder_get_backlight_level_from_reg(adev);
return dce_v11_0_hw_fini(adev);
return dce_v11_0_hw_fini(ip_block);
}
static int dce_v11_0_resume(struct amdgpu_ip_block *ip_block)
+3 -3
View File
@@ -2783,10 +2783,10 @@ static int dce_v6_0_hw_init(struct amdgpu_ip_block *ip_block)
return 0;
}
static int dce_v6_0_hw_fini(void *handle)
static int dce_v6_0_hw_fini(struct amdgpu_ip_block *ip_block)
{
int i;
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
struct amdgpu_device *adev = ip_block->adev;
dce_v6_0_hpd_fini(adev);
@@ -2812,7 +2812,7 @@ static int dce_v6_0_suspend(struct amdgpu_ip_block *ip_block)
adev->mode_info.bl_level =
amdgpu_atombios_encoder_get_backlight_level_from_reg(adev);
return dce_v6_0_hw_fini(adev);
return dce_v6_0_hw_fini(ip_block);
}
static int dce_v6_0_resume(struct amdgpu_ip_block *ip_block)
+3 -3
View File
@@ -2805,10 +2805,10 @@ static int dce_v8_0_hw_init(struct amdgpu_ip_block *ip_block)
return 0;
}
static int dce_v8_0_hw_fini(void *handle)
static int dce_v8_0_hw_fini(struct amdgpu_ip_block *ip_block)
{
int i;
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
struct amdgpu_device *adev = ip_block->adev;
dce_v8_0_hpd_fini(adev);
@@ -2835,7 +2835,7 @@ static int dce_v8_0_suspend(struct amdgpu_ip_block *ip_block)
adev->mode_info.bl_level =
amdgpu_atombios_encoder_get_backlight_level_from_reg(adev);
return dce_v8_0_hw_fini(adev);
return dce_v8_0_hw_fini(ip_block);
}
static int dce_v8_0_resume(struct amdgpu_ip_block *ip_block)
+4 -6
View File
@@ -7418,9 +7418,9 @@ static int gfx_v10_0_hw_init(struct amdgpu_ip_block *ip_block)
return r;
}
static int gfx_v10_0_hw_fini(void *handle)
static int gfx_v10_0_hw_fini(struct amdgpu_ip_block *ip_block)
{
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
struct amdgpu_device *adev = ip_block->adev;
amdgpu_irq_put(adev, &adev->gfx.priv_reg_irq, 0);
amdgpu_irq_put(adev, &adev->gfx.priv_inst_irq, 0);
@@ -7431,7 +7431,7 @@ static int gfx_v10_0_hw_fini(void *handle)
* otherwise the gfxoff disallowing will be failed to set.
*/
if (amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(10, 3, 1))
gfx_v10_0_set_powergating_state(handle, AMD_PG_STATE_UNGATE);
gfx_v10_0_set_powergating_state(ip_block->adev, AMD_PG_STATE_UNGATE);
if (!adev->no_hw_access) {
if (amdgpu_async_gfx_ring) {
@@ -7458,9 +7458,7 @@ static int gfx_v10_0_hw_fini(void *handle)
static int gfx_v10_0_suspend(struct amdgpu_ip_block *ip_block)
{
struct amdgpu_device *adev = ip_block->adev;
return gfx_v10_0_hw_fini(adev);
return gfx_v10_0_hw_fini(ip_block);
}
static int gfx_v10_0_resume(struct amdgpu_ip_block *ip_block)
+3 -5
View File
@@ -4667,9 +4667,9 @@ static int gfx_v11_0_hw_init(struct amdgpu_ip_block *ip_block)
return r;
}
static int gfx_v11_0_hw_fini(void *handle)
static int gfx_v11_0_hw_fini(struct amdgpu_ip_block *ip_block)
{
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
struct amdgpu_device *adev = ip_block->adev;
amdgpu_irq_put(adev, &adev->gfx.priv_reg_irq, 0);
amdgpu_irq_put(adev, &adev->gfx.priv_inst_irq, 0);
@@ -4707,9 +4707,7 @@ static int gfx_v11_0_hw_fini(void *handle)
static int gfx_v11_0_suspend(struct amdgpu_ip_block *ip_block)
{
struct amdgpu_device *adev = ip_block->adev;
return gfx_v11_0_hw_fini(adev);
return gfx_v11_0_hw_fini(ip_block);
}
static int gfx_v11_0_resume(struct amdgpu_ip_block *ip_block)
+3 -5
View File
@@ -3603,9 +3603,9 @@ static int gfx_v12_0_hw_init(struct amdgpu_ip_block *ip_block)
return r;
}
static int gfx_v12_0_hw_fini(void *handle)
static int gfx_v12_0_hw_fini(struct amdgpu_ip_block *ip_block)
{
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
struct amdgpu_device *adev = ip_block->adev;
uint32_t tmp;
amdgpu_irq_put(adev, &adev->gfx.priv_reg_irq, 0);
@@ -3645,9 +3645,7 @@ static int gfx_v12_0_hw_fini(void *handle)
static int gfx_v12_0_suspend(struct amdgpu_ip_block *ip_block)
{
struct amdgpu_device *adev = ip_block->adev;
return gfx_v12_0_hw_fini(adev);
return gfx_v12_0_hw_fini(ip_block);
}
static int gfx_v12_0_resume(struct amdgpu_ip_block *ip_block)
+3 -5
View File
@@ -3142,9 +3142,9 @@ static int gfx_v6_0_hw_init(struct amdgpu_ip_block *ip_block)
return r;
}
static int gfx_v6_0_hw_fini(void *handle)
static int gfx_v6_0_hw_fini(struct amdgpu_ip_block *ip_block)
{
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
struct amdgpu_device *adev = ip_block->adev;
gfx_v6_0_cp_enable(adev, false);
adev->gfx.rlc.funcs->stop(adev);
@@ -3155,9 +3155,7 @@ static int gfx_v6_0_hw_fini(void *handle)
static int gfx_v6_0_suspend(struct amdgpu_ip_block *ip_block)
{
struct amdgpu_device *adev = ip_block->adev;
return gfx_v6_0_hw_fini(adev);
return gfx_v6_0_hw_fini(ip_block);
}
static int gfx_v6_0_resume(struct amdgpu_ip_block *ip_block)
+3 -5
View File
@@ -4486,9 +4486,9 @@ static int gfx_v7_0_hw_init(struct amdgpu_ip_block *ip_block)
return r;
}
static int gfx_v7_0_hw_fini(void *handle)
static int gfx_v7_0_hw_fini(struct amdgpu_ip_block *ip_block)
{
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
struct amdgpu_device *adev = ip_block->adev;
amdgpu_irq_put(adev, &adev->gfx.priv_reg_irq, 0);
amdgpu_irq_put(adev, &adev->gfx.priv_inst_irq, 0);
@@ -4501,9 +4501,7 @@ static int gfx_v7_0_hw_fini(void *handle)
static int gfx_v7_0_suspend(struct amdgpu_ip_block *ip_block)
{
struct amdgpu_device *adev = ip_block->adev;
return gfx_v7_0_hw_fini(adev);
return gfx_v7_0_hw_fini(ip_block);
}
static int gfx_v7_0_resume(struct amdgpu_ip_block *ip_block)

Some files were not shown because too many files have changed in this diff Show More