[PATCH 09/18] drm/amdgpu: pass ip_block in set_powergating_state

Boyuan Zhang Boyuan.Zhang at amd.com
Fri Oct 4 19:34:37 UTC 2024


On 2024-10-02 07:41, Christian König wrote:
> Am 02.10.24 um 06:36 schrieb boyuan.zhang at amd.com:
>> From: Boyuan Zhang <boyuan.zhang at amd.com>
>>
>> Pass ip_block instead of adev in set_powergating_state callback 
>> function.
>> Modify set_powergating_state ip functions for all correspoding ip 
>> blocks.
>>
>> Signed-off-by: Boyuan Zhang <boyuan.zhang at amd.com>
>> ---
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c           | 4 ++--
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c        | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_device.c        | 4 ++--
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_isp.c           | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c           | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c          | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_vpe.c           | 4 ++--
>>   drivers/gpu/drm/amd/amdgpu/cik.c                  | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/cik_ih.c               | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/cik_sdma.c             | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/cz_ih.c                | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/dce_v10_0.c            | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/dce_v11_0.c            | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/dce_v6_0.c             | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/dce_v8_0.c             | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c            | 6 +++---
>>   drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c            | 4 ++--
>>   drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c            | 4 ++--
>>   drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c             | 4 ++--
>>   drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c             | 4 ++--
>>   drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c             | 4 ++--
>>   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c             | 4 ++--
>>   drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c           | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c            | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c            | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c            | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c             | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c             | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c             | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c             | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/iceland_ih.c           | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/ih_v6_0.c              | 4 ++--
>>   drivers/gpu/drm/amd/amdgpu/ih_v6_1.c              | 4 ++--
>>   drivers/gpu/drm/amd/amdgpu/ih_v7_0.c              | 4 ++--
>>   drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c            | 8 ++++----
>>   drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c            | 8 ++++----
>>   drivers/gpu/drm/amd/amdgpu/jpeg_v3_0.c            | 8 ++++----
>>   drivers/gpu/drm/amd/amdgpu/jpeg_v4_0.c            | 8 ++++----
>>   drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.c          | 8 ++++----
>>   drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_5.c          | 8 ++++----
>>   drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_0.c          | 8 ++++----
>>   drivers/gpu/drm/amd/amdgpu/navi10_ih.c            | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/nv.c                   | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c            | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c            | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c            | 4 ++--
>>   drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c          | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c            | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c            | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c            | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c            | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/si.c                   | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/si_dma.c               | 4 ++--
>>   drivers/gpu/drm/amd/amdgpu/si_ih.c                | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/soc15.c                | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/soc21.c                | 4 ++--
>>   drivers/gpu/drm/amd/amdgpu/soc24.c                | 4 ++--
>>   drivers/gpu/drm/amd/amdgpu/tonga_ih.c             | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/uvd_v3_1.c             | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c             | 4 ++--
>>   drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c             | 4 ++--
>>   drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c             | 4 ++--
>>   drivers/gpu/drm/amd/amdgpu/vce_v2_0.c             | 4 ++--
>>   drivers/gpu/drm/amd/amdgpu/vce_v3_0.c             | 4 ++--
>>   drivers/gpu/drm/amd/amdgpu/vce_v4_0.c             | 4 ++--
>>   drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c             | 9 +++++----
>>   drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c             | 8 ++++----
>>   drivers/gpu/drm/amd/amdgpu/vcn_v2_5.c             | 8 ++++----
>>   drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c             | 8 ++++----
>>   drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c             | 9 +++++----
>>   drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c           | 8 ++++----
>>   drivers/gpu/drm/amd/amdgpu/vcn_v4_0_5.c           | 9 +++++----
>>   drivers/gpu/drm/amd/amdgpu/vcn_v5_0_0.c           | 9 +++++----
>>   drivers/gpu/drm/amd/amdgpu/vega10_ih.c            | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/vega20_ih.c            | 2 +-
>>   drivers/gpu/drm/amd/amdgpu/vi.c                   | 2 +-
>>   drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 2 +-
>>   drivers/gpu/drm/amd/include/amd_shared.h          | 2 +-
>>   drivers/gpu/drm/amd/pm/legacy-dpm/kv_dpm.c        | 2 +-
>>   drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c        | 2 +-
>>   drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c  | 2 +-
>>   drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c         | 2 +-
>>   82 files changed, 155 insertions(+), 151 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c 
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c
>> index 436f24d6bd83..192c5c0926a1 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c
>> @@ -606,10 +606,10 @@ static int acp_set_clockgating_state(void *handle,
>>       return 0;
>>   }
>>   -static int acp_set_powergating_state(void *handle,
>> +static int acp_set_powergating_state(struct amdgpu_ip_block *ip_block,
>>                        enum amd_powergating_state state)
>>   {
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>       bool enable = (state == AMD_PG_STATE_GATE);
>>         amdgpu_dpm_set_powergating_by_smu(adev, 
>> AMD_IP_BLOCK_TYPE_ACP, enable);
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c 
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
>> index b545940e512b..c074db65f196 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
>> @@ -724,7 +724,7 @@ void amdgpu_amdkfd_set_compute_idle(struct 
>> amdgpu_device *adev, bool idle)
>>           /* Disable GFXOFF and PG. Temporary workaround
>>            * to fix some compute applications issue on GFX9.
>>            */
>> - 
>> adev->ip_blocks[AMD_IP_BLOCK_TYPE_GFX].version->funcs->set_powergating_state((void 
>> *)adev, state);
>> + 
>> adev->ip_blocks[AMD_IP_BLOCK_TYPE_GFX].version->funcs->set_powergating_state((void 
>> *)&adev->ip_blocks[AMD_IP_BLOCK_TYPE_GFX], state);
>
> That's completely wrong the ip_blocks can't be indexed by 
> AMD_IP_BLOCK_TYPE_.
>
> We missed this during Sunil's review as well.
>
> Regards,
> Christian.


Nice catch! Fixed in the v2 patch set.

Regards,
Boyuan


>
>>       }
>>       amdgpu_dpm_switch_power_profile(adev,
>>                       PP_SMC_POWER_PROFILE_COMPUTE,
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c 
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>> index 1e47655e02c6..263f25ac2d63 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>> @@ -2154,7 +2154,7 @@ int amdgpu_device_ip_set_powergating_state(void 
>> *dev,
>>           if (!adev->ip_blocks[i].version->funcs->set_powergating_state)
>>               continue;
>>           r = adev->ip_blocks[i].version->funcs->set_powergating_state(
>> -            (void *)adev, state);
>> +            (void *)&adev->ip_blocks[i], state);
>>           if (r)
>>               DRM_ERROR("set_powergating_state of IP block <%s> 
>> failed %d\n",
>> adev->ip_blocks[i].version->funcs->name, r);
>> @@ -3128,7 +3128,7 @@ int amdgpu_device_set_pg_state(struct 
>> amdgpu_device *adev,
>>               adev->ip_blocks[i].version->type != 
>> AMD_IP_BLOCK_TYPE_JPEG &&
>> adev->ip_blocks[i].version->funcs->set_powergating_state) {
>>               /* enable powergating to save power */
>> -            r = 
>> adev->ip_blocks[i].version->funcs->set_powergating_state((void *)adev,
>> +            r = 
>> adev->ip_blocks[i].version->funcs->set_powergating_state((void 
>> *)&adev->ip_blocks[i],
>>                                               state);
>>               if (r) {
>>                   DRM_ERROR("set_powergating_state(gate) of IP block 
>> <%s> failed %d\n",
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_isp.c 
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_isp.c
>> index e90b5f807440..38f9a5a5d6ca 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_isp.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_isp.c
>> @@ -171,7 +171,7 @@ static int isp_set_clockgating_state(void *handle,
>>       return 0;
>>   }
>>   -static int isp_set_powergating_state(void *handle,
>> +static int isp_set_powergating_state(struct amdgpu_ip_block *ip_block,
>>                        enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c 
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
>> index 02fad4dad7c1..0fa2fe6e5487 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
>> @@ -3793,7 +3793,7 @@ static int psp_set_clockgating_state(void *handle,
>>       return 0;
>>   }
>>   -static int psp_set_powergating_state(void *handle,
>> +static int psp_set_powergating_state(struct amdgpu_ip_block *ip_block,
>>                        enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c 
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c
>> index af274e6b8422..bef7636228f6 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c
>> @@ -648,7 +648,7 @@ static int amdgpu_vkms_set_clockgating_state(void 
>> *handle,
>>       return 0;
>>   }
>>   -static int amdgpu_vkms_set_powergating_state(void *handle,
>> +static int amdgpu_vkms_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vpe.c 
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vpe.c
>> index 1b4c60231596..d2700025a6b1 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vpe.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vpe.c
>> @@ -646,10 +646,10 @@ static int vpe_set_clockgating_state(void *handle,
>>       return 0;
>>   }
>>   -static int vpe_set_powergating_state(void *handle,
>> +static int vpe_set_powergating_state(struct amdgpu_ip_block *ip_block,
>>                        enum amd_powergating_state state)
>>   {
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>       struct amdgpu_vpe *vpe = &adev->vpe;
>>         if (!adev->pm.dpm_enabled)
>> diff --git a/drivers/gpu/drm/amd/amdgpu/cik.c 
>> b/drivers/gpu/drm/amd/amdgpu/cik.c
>> index b39944e3ac68..3c62f0b55897 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/cik.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/cik.c
>> @@ -2189,7 +2189,7 @@ static int 
>> cik_common_set_clockgating_state(void *handle,
>>       return 0;
>>   }
>>   -static int cik_common_set_powergating_state(void *handle,
>> +static int cik_common_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                           enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/cik_ih.c 
>> b/drivers/gpu/drm/amd/amdgpu/cik_ih.c
>> index 612330f40447..22ba98087a66 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/cik_ih.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/cik_ih.c
>> @@ -414,7 +414,7 @@ static int cik_ih_set_clockgating_state(void 
>> *handle,
>>       return 0;
>>   }
>>   -static int cik_ih_set_powergating_state(void *handle,
>> +static int cik_ih_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c 
>> b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
>> index 8706855d681b..ae91bbd83eb0 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
>> @@ -1208,7 +1208,7 @@ static int cik_sdma_set_clockgating_state(void 
>> *handle,
>>       return 0;
>>   }
>>   -static int cik_sdma_set_powergating_state(void *handle,
>> +static int cik_sdma_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/cz_ih.c 
>> b/drivers/gpu/drm/amd/amdgpu/cz_ih.c
>> index 12a55f1e0e1f..155429900d28 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/cz_ih.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/cz_ih.c
>> @@ -411,7 +411,7 @@ static int cz_ih_set_clockgating_state(void *handle,
>>       return 0;
>>   }
>>   -static int cz_ih_set_powergating_state(void *handle,
>> +static int cz_ih_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       // TODO
>> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
>> index 6f81621649d6..4b8763bfa5f5 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
>> @@ -3313,7 +3313,7 @@ static int dce_v10_0_set_clockgating_state(void 
>> *handle,
>>       return 0;
>>   }
>>   -static int dce_v10_0_set_powergating_state(void *handle,
>> +static int dce_v10_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
>> index b1afe4b837a7..55b66882c4dd 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
>> @@ -3445,7 +3445,7 @@ static int dce_v11_0_set_clockgating_state(void 
>> *handle,
>>       return 0;
>>   }
>>   -static int dce_v11_0_set_powergating_state(void *handle,
>> +static int dce_v11_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
>> index a6bbeb3bde3b..efcfdceba72c 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
>> @@ -3135,7 +3135,7 @@ static int dce_v6_0_set_clockgating_state(void 
>> *handle,
>>       return 0;
>>   }
>>   -static int dce_v6_0_set_powergating_state(void *handle,
>> +static int dce_v6_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
>> index 0b57e22a7c95..38d2ac9aac8d 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
>> @@ -3223,7 +3223,7 @@ static int dce_v8_0_set_clockgating_state(void 
>> *handle,
>>       return 0;
>>   }
>>   -static int dce_v8_0_set_powergating_state(void *handle,
>> +static int dce_v8_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c
>> index c544ea2aea6e..7c4b8ff7ae2e 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c
>> @@ -3673,7 +3673,7 @@ static void 
>> gfx_v10_0_ring_invalidate_tlbs(struct amdgpu_ring *ring,
>>   static void gfx_v10_0_update_spm_vmid_internal(struct amdgpu_device 
>> *adev,
>>                              unsigned int vmid);
>>   -static int gfx_v10_0_set_powergating_state(void *handle,
>> +static int gfx_v10_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state);
>>   static void gfx10_kiq_set_resources(struct amdgpu_ring *kiq_ring, 
>> uint64_t queue_mask)
>>   {
>> @@ -8319,10 +8319,10 @@ static const struct amdgpu_rlc_funcs 
>> gfx_v10_0_rlc_funcs_sriov = {
>>       .is_rlcg_access_range = gfx_v10_0_is_rlcg_access_range,
>>   };
>>   -static int gfx_v10_0_set_powergating_state(void *handle,
>> +static int gfx_v10_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>       bool enable = (state == AMD_PG_STATE_GATE);
>>         if (amdgpu_sriov_vf(adev))
>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
>> index a0f80cc993cf..a7d5343dba2a 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
>> @@ -5402,10 +5402,10 @@ static void gfx_v11_cntl_pg(struct 
>> amdgpu_device *adev, bool enable)
>>       amdgpu_gfx_rlc_exit_safe_mode(adev, 0);
>>   }
>>   -static int gfx_v11_0_set_powergating_state(void *handle,
>> +static int gfx_v11_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                          enum amd_powergating_state state)
>>   {
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>       bool enable = (state == AMD_PG_STATE_GATE);
>>         if (amdgpu_sriov_vf(adev))
>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c
>> index 63e1a2803503..0b88f41523d5 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c
>> @@ -3846,10 +3846,10 @@ static void gfx_v12_cntl_pg(struct 
>> amdgpu_device *adev, bool enable)
>>   }
>>   #endif
>>   -static int gfx_v12_0_set_powergating_state(void *handle,
>> +static int gfx_v12_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                          enum amd_powergating_state state)
>>   {
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>       bool enable = (state == AMD_PG_STATE_GATE);
>>         if (amdgpu_sriov_vf(adev))
>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
>> index 60579b3029b4..e644ec23252f 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
>> @@ -3404,11 +3404,11 @@ static int 
>> gfx_v6_0_set_clockgating_state(void *handle,
>>       return 0;
>>   }
>>   -static int gfx_v6_0_set_powergating_state(void *handle,
>> +static int gfx_v6_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       bool gate = false;
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>         if (state == AMD_PG_STATE_GATE)
>>           gate = true;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
>> index 990e7de8da25..4e1be0057e6f 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
>> @@ -4873,11 +4873,11 @@ static int 
>> gfx_v7_0_set_clockgating_state(void *handle,
>>       return 0;
>>   }
>>   -static int gfx_v7_0_set_powergating_state(void *handle,
>> +static int gfx_v7_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       bool gate = false;
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>         if (state == AMD_PG_STATE_GATE)
>>           gate = true;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
>> index 6864219987e9..d6a1cc898209 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
>> @@ -5359,10 +5359,10 @@ static void 
>> cz_update_gfx_cg_power_gating(struct amdgpu_device *adev,
>>       }
>>   }
>>   -static int gfx_v8_0_set_powergating_state(void *handle,
>> +static int gfx_v8_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>       bool enable = (state == AMD_PG_STATE_GATE);
>>         if (amdgpu_sriov_vf(adev))
>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
>> index 99334afb7aae..5d3e7a07a81d 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
>> @@ -5214,10 +5214,10 @@ static const struct amdgpu_rlc_funcs 
>> gfx_v9_0_rlc_funcs = {
>>       .is_rlcg_access_range = gfx_v9_0_is_rlcg_access_range,
>>   };
>>   -static int gfx_v9_0_set_powergating_state(void *handle,
>> +static int gfx_v9_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>       bool enable = (state == AMD_PG_STATE_GATE);
>>         switch (amdgpu_ip_version(adev, GC_HWIP, 0)) {
>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c 
>> b/drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c
>> index 81bd4ca4fba5..b4d101b642b6 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c
>> @@ -2760,7 +2760,7 @@ static const struct amdgpu_rlc_funcs 
>> gfx_v9_4_3_rlc_funcs = {
>>       .is_rlcg_access_range = gfx_v9_4_3_is_rlcg_access_range,
>>   };
>>   -static int gfx_v9_4_3_set_powergating_state(void *handle,
>> +static int gfx_v9_4_3_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c
>> index 8e51c7e4e8c8..d7af95de9703 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c
>> @@ -1136,7 +1136,7 @@ static void 
>> gmc_v10_0_get_clockgating_state(void *handle, u64 *flags)
>>           athub_v2_0_get_clockgating(adev, flags);
>>   }
>>   -static int gmc_v10_0_set_powergating_state(void *handle,
>> +static int gmc_v10_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                          enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c
>> index 2fc69cdf8843..53841d7287b7 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c
>> @@ -1023,7 +1023,7 @@ static void 
>> gmc_v11_0_get_clockgating_state(void *handle, u64 *flags)
>>       athub_v3_0_get_clockgating(adev, flags);
>>   }
>>   -static int gmc_v11_0_set_powergating_state(void *handle,
>> +static int gmc_v11_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                          enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c
>> index 3cbb5824a378..ceae0cbc7919 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c
>> @@ -1007,7 +1007,7 @@ static void 
>> gmc_v12_0_get_clockgating_state(void *handle, u64 *flags)
>>       athub_v4_1_0_get_clockgating(adev, flags);
>>   }
>>   -static int gmc_v12_0_set_powergating_state(void *handle,
>> +static int gmc_v12_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                          enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
>> index 82a097d32f28..1766f379fcb0 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
>> @@ -1088,7 +1088,7 @@ static int gmc_v6_0_set_clockgating_state(void 
>> *handle,
>>       return 0;
>>   }
>>   -static int gmc_v6_0_set_powergating_state(void *handle,
>> +static int gmc_v6_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
>> index ad9bad951cc6..9269bbf7b698 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
>> @@ -1330,7 +1330,7 @@ static int gmc_v7_0_set_clockgating_state(void 
>> *handle,
>>       return 0;
>>   }
>>   -static int gmc_v7_0_set_powergating_state(void *handle,
>> +static int gmc_v7_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
>> index 47ba4480b757..795cd57438de 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
>> @@ -1672,7 +1672,7 @@ static int gmc_v8_0_set_clockgating_state(void 
>> *handle,
>>       return 0;
>>   }
>>   -static int gmc_v8_0_set_powergating_state(void *handle,
>> +static int gmc_v8_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
>> index 1d0eb31d7b72..c6aa236300a1 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
>> @@ -2488,7 +2488,7 @@ static void gmc_v9_0_get_clockgating_state(void 
>> *handle, u64 *flags)
>>       athub_v1_0_get_clockgating(adev, flags);
>>   }
>>   -static int gmc_v9_0_set_powergating_state(void *handle,
>> +static int gmc_v9_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                       enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/iceland_ih.c 
>> b/drivers/gpu/drm/amd/amdgpu/iceland_ih.c
>> index 6210fa17eeca..6d0ff78d99c6 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/iceland_ih.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/iceland_ih.c
>> @@ -404,7 +404,7 @@ static int iceland_ih_set_clockgating_state(void 
>> *handle,
>>       return 0;
>>   }
>>   -static int iceland_ih_set_powergating_state(void *handle,
>> +static int iceland_ih_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/ih_v6_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/ih_v6_0.c
>> index 80c021598b78..a6387a151137 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/ih_v6_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/ih_v6_0.c
>> @@ -762,10 +762,10 @@ static void 
>> ih_v6_0_update_ih_mem_power_gating(struct amdgpu_device *adev,
>>       WREG32_SOC15(OSSSYS, 0, regIH_MEM_POWER_CTRL, ih_mem_pwr_cntl);
>>   }
>>   -static int ih_v6_0_set_powergating_state(void *handle,
>> +static int ih_v6_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                        enum amd_powergating_state state)
>>   {
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>       bool enable = (state == AMD_PG_STATE_GATE);
>>         if (adev->pg_flags & AMD_PG_SUPPORT_IH_SRAM_PG)
>> diff --git a/drivers/gpu/drm/amd/amdgpu/ih_v6_1.c 
>> b/drivers/gpu/drm/amd/amdgpu/ih_v6_1.c
>> index be700137d5a7..09d5e28ce112 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/ih_v6_1.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/ih_v6_1.c
>> @@ -743,10 +743,10 @@ static void 
>> ih_v6_1_update_ih_mem_power_gating(struct amdgpu_device *adev,
>>       WREG32_SOC15(OSSSYS, 0, regIH_MEM_POWER_CTRL, ih_mem_pwr_cntl);
>>   }
>>   -static int ih_v6_1_set_powergating_state(void *handle,
>> +static int ih_v6_1_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                        enum amd_powergating_state state)
>>   {
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>       bool enable = (state == AMD_PG_STATE_GATE);
>>         if (adev->pg_flags & AMD_PG_SUPPORT_IH_SRAM_PG)
>> diff --git a/drivers/gpu/drm/amd/amdgpu/ih_v7_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/ih_v7_0.c
>> index a86d12e3ab24..2f34662db179 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/ih_v7_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/ih_v7_0.c
>> @@ -733,10 +733,10 @@ static void 
>> ih_v7_0_update_ih_mem_power_gating(struct amdgpu_device *adev,
>>       WREG32_SOC15(OSSSYS, 0, regIH_MEM_POWER_CTRL, ih_mem_pwr_cntl);
>>   }
>>   -static int ih_v7_0_set_powergating_state(void *handle,
>> +static int ih_v7_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                        enum amd_powergating_state state)
>>   {
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>       bool enable = (state == AMD_PG_STATE_GATE);
>>         if (adev->pg_flags & AMD_PG_SUPPORT_IH_SRAM_PG)
>> diff --git a/drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c
>> index 1bd1e348dab7..387ed4a13bed 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c
>> @@ -35,7 +35,7 @@
>>     static void jpeg_v2_0_set_dec_ring_funcs(struct amdgpu_device 
>> *adev);
>>   static void jpeg_v2_0_set_irq_funcs(struct amdgpu_device *adev);
>> -static int jpeg_v2_0_set_powergating_state(void *handle,
>> +static int jpeg_v2_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                   enum amd_powergating_state state);
>>     /**
>> @@ -154,7 +154,7 @@ static int jpeg_v2_0_hw_fini(void *handle)
>>         if (adev->jpeg.cur_state != AMD_PG_STATE_GATE &&
>>             RREG32_SOC15(JPEG, 0, mmUVD_JRBC_STATUS))
>> -        jpeg_v2_0_set_powergating_state(adev, AMD_PG_STATE_GATE);
>> +        jpeg_v2_0_set_powergating_state(ip_block, AMD_PG_STATE_GATE);
>>         return 0;
>>   }
>> @@ -694,10 +694,10 @@ static int jpeg_v2_0_set_clockgating_state(void 
>> *handle,
>>       return 0;
>>   }
>>   -static int jpeg_v2_0_set_powergating_state(void *handle,
>> +static int jpeg_v2_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                       enum amd_powergating_state state)
>>   {
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>       int ret;
>>         if (state == adev->jpeg.cur_state)
>> diff --git a/drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c 
>> b/drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c
>> index 2f397969fe0d..66d7c7c5581f 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c
>> @@ -38,7 +38,7 @@
>>     static void jpeg_v2_5_set_dec_ring_funcs(struct amdgpu_device 
>> *adev);
>>   static void jpeg_v2_5_set_irq_funcs(struct amdgpu_device *adev);
>> -static int jpeg_v2_5_set_powergating_state(void *handle,
>> +static int jpeg_v2_5_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                   enum amd_powergating_state state);
>>   static void jpeg_v2_5_set_ras_funcs(struct amdgpu_device *adev);
>>   @@ -219,7 +219,7 @@ static int jpeg_v2_5_hw_fini(void *handle)
>>             if (adev->jpeg.cur_state != AMD_PG_STATE_GATE &&
>>                 RREG32_SOC15(JPEG, i, mmUVD_JRBC_STATUS))
>> -            jpeg_v2_5_set_powergating_state(adev, AMD_PG_STATE_GATE);
>> +            jpeg_v2_5_set_powergating_state(ip_block, 
>> AMD_PG_STATE_GATE);
>>             if (amdgpu_ras_is_supported(adev, AMDGPU_RAS_BLOCK__JPEG))
>>               amdgpu_irq_put(adev, 
>> &adev->jpeg.inst[i].ras_poison_irq, 0);
>> @@ -543,10 +543,10 @@ static int jpeg_v2_5_set_clockgating_state(void 
>> *handle,
>>       return 0;
>>   }
>>   -static int jpeg_v2_5_set_powergating_state(void *handle,
>> +static int jpeg_v2_5_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>       int ret;
>>         if (state == adev->jpeg.cur_state)
>> diff --git a/drivers/gpu/drm/amd/amdgpu/jpeg_v3_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/jpeg_v3_0.c
>> index 3b8c42516ba8..52a52b39d567 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v3_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v3_0.c
>> @@ -36,7 +36,7 @@
>>     static void jpeg_v3_0_set_dec_ring_funcs(struct amdgpu_device 
>> *adev);
>>   static void jpeg_v3_0_set_irq_funcs(struct amdgpu_device *adev);
>> -static int jpeg_v3_0_set_powergating_state(void *handle,
>> +static int jpeg_v3_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                   enum amd_powergating_state state);
>>     /**
>> @@ -168,7 +168,7 @@ static int jpeg_v3_0_hw_fini(void *handle)
>>         if (adev->jpeg.cur_state != AMD_PG_STATE_GATE &&
>>             RREG32_SOC15(JPEG, 0, mmUVD_JRBC_STATUS))
>> -        jpeg_v3_0_set_powergating_state(adev, AMD_PG_STATE_GATE);
>> +        jpeg_v3_0_set_powergating_state(ip_block, AMD_PG_STATE_GATE);
>>         return 0;
>>   }
>> @@ -485,10 +485,10 @@ static int jpeg_v3_0_set_clockgating_state(void 
>> *handle,
>>       return 0;
>>   }
>>   -static int jpeg_v3_0_set_powergating_state(void *handle,
>> +static int jpeg_v3_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>       int ret;
>>         if(state == adev->jpeg.cur_state)
>> diff --git a/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0.c
>> index 774cfcbaa628..65d050bdffc9 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0.c
>> @@ -39,7 +39,7 @@
>>   static int jpeg_v4_0_start_sriov(struct amdgpu_device *adev);
>>   static void jpeg_v4_0_set_dec_ring_funcs(struct amdgpu_device *adev);
>>   static void jpeg_v4_0_set_irq_funcs(struct amdgpu_device *adev);
>> -static int jpeg_v4_0_set_powergating_state(void *handle,
>> +static int jpeg_v4_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                   enum amd_powergating_state state);
>>   static void jpeg_v4_0_set_ras_funcs(struct amdgpu_device *adev);
>>   @@ -199,7 +199,7 @@ static int jpeg_v4_0_hw_fini(void *handle)
>>       if (!amdgpu_sriov_vf(adev)) {
>>           if (adev->jpeg.cur_state != AMD_PG_STATE_GATE &&
>>               RREG32_SOC15(JPEG, 0, regUVD_JRBC_STATUS))
>> -            jpeg_v4_0_set_powergating_state(adev, AMD_PG_STATE_GATE);
>> +            jpeg_v4_0_set_powergating_state(ip_block, 
>> AMD_PG_STATE_GATE);
>>       }
>>       if (amdgpu_ras_is_supported(adev, AMDGPU_RAS_BLOCK__JPEG))
>>           amdgpu_irq_put(adev, &adev->jpeg.inst->ras_poison_irq, 0);
>> @@ -647,10 +647,10 @@ static int jpeg_v4_0_set_clockgating_state(void 
>> *handle,
>>       return 0;
>>   }
>>   -static int jpeg_v4_0_set_powergating_state(void *handle,
>> +static int jpeg_v4_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>       int ret;
>>         if (amdgpu_sriov_vf(adev)) {
>> diff --git a/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.c 
>> b/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.c
>> index 74b3700052ad..a1b933be8217 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.c
>> @@ -43,7 +43,7 @@ enum jpeg_engin_status {
>>     static void jpeg_v4_0_3_set_dec_ring_funcs(struct amdgpu_device 
>> *adev);
>>   static void jpeg_v4_0_3_set_irq_funcs(struct amdgpu_device *adev);
>> -static int jpeg_v4_0_3_set_powergating_state(void *handle,
>> +static int jpeg_v4_0_3_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                   enum amd_powergating_state state);
>>   static void jpeg_v4_0_3_set_ras_funcs(struct amdgpu_device *adev);
>>   static void jpeg_v4_0_3_dec_ring_set_wptr(struct amdgpu_ring *ring);
>> @@ -371,7 +371,7 @@ static int jpeg_v4_0_3_hw_fini(void *handle)
>>         if (!amdgpu_sriov_vf(adev)) {
>>           if (adev->jpeg.cur_state != AMD_PG_STATE_GATE)
>> -            ret = jpeg_v4_0_3_set_powergating_state(adev, 
>> AMD_PG_STATE_GATE);
>> +            ret = jpeg_v4_0_3_set_powergating_state(ip_block, 
>> AMD_PG_STATE_GATE);
>>       }
>>         return ret;
>> @@ -962,10 +962,10 @@ static int 
>> jpeg_v4_0_3_set_clockgating_state(void *handle,
>>       return 0;
>>   }
>>   -static int jpeg_v4_0_3_set_powergating_state(void *handle,
>> +static int jpeg_v4_0_3_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>       int ret;
>>         if (amdgpu_sriov_vf(adev)) {
>> diff --git a/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_5.c 
>> b/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_5.c
>> index 13128bdd45a9..399035a92795 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_5.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_5.c
>> @@ -48,7 +48,7 @@
>>     static void jpeg_v4_0_5_set_dec_ring_funcs(struct amdgpu_device 
>> *adev);
>>   static void jpeg_v4_0_5_set_irq_funcs(struct amdgpu_device *adev);
>> -static int jpeg_v4_0_5_set_powergating_state(void *handle,
>> +static int jpeg_v4_0_5_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                   enum amd_powergating_state state);
>>     static void jpeg_v4_0_5_dec_ring_set_wptr(struct amdgpu_ring *ring);
>> @@ -228,7 +228,7 @@ static int jpeg_v4_0_5_hw_fini(void *handle)
>>           if (!amdgpu_sriov_vf(adev)) {
>>               if (adev->jpeg.cur_state != AMD_PG_STATE_GATE &&
>>                   RREG32_SOC15(JPEG, i, regUVD_JRBC_STATUS))
>> -                jpeg_v4_0_5_set_powergating_state(adev, 
>> AMD_PG_STATE_GATE);
>> +                jpeg_v4_0_5_set_powergating_state(ip_block, 
>> AMD_PG_STATE_GATE);
>>           }
>>       }
>>       return 0;
>> @@ -678,10 +678,10 @@ static int 
>> jpeg_v4_0_5_set_clockgating_state(void *handle,
>>       return 0;
>>   }
>>   -static int jpeg_v4_0_5_set_powergating_state(void *handle,
>> +static int jpeg_v4_0_5_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>       int ret;
>>         if (amdgpu_sriov_vf(adev)) {
>> diff --git a/drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_0.c
>> index e2450f3b1eb4..08afad812728 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_0.c
>> @@ -36,7 +36,7 @@
>>     static void jpeg_v5_0_0_set_dec_ring_funcs(struct amdgpu_device 
>> *adev);
>>   static void jpeg_v5_0_0_set_irq_funcs(struct amdgpu_device *adev);
>> -static int jpeg_v5_0_0_set_powergating_state(void *handle,
>> +static int jpeg_v5_0_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                   enum amd_powergating_state state);
>>     /**
>> @@ -165,7 +165,7 @@ static int jpeg_v5_0_0_hw_fini(void *handle)
>>         if (adev->jpeg.cur_state != AMD_PG_STATE_GATE &&
>>             RREG32_SOC15(JPEG, 0, regUVD_JRBC_STATUS))
>> -        jpeg_v5_0_0_set_powergating_state(adev, AMD_PG_STATE_GATE);
>> +        jpeg_v5_0_0_set_powergating_state(ip_block, AMD_PG_STATE_GATE);
>>         return 0;
>>   }
>> @@ -572,10 +572,10 @@ static int 
>> jpeg_v5_0_0_set_clockgating_state(void *handle,
>>       return 0;
>>   }
>>   -static int jpeg_v5_0_0_set_powergating_state(void *handle,
>> +static int jpeg_v5_0_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>       int ret;
>>         if (state == adev->jpeg.cur_state)
>> diff --git a/drivers/gpu/drm/amd/amdgpu/navi10_ih.c 
>> b/drivers/gpu/drm/amd/amdgpu/navi10_ih.c
>> index 85361dcb4b4c..02106ae3ca9a 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/navi10_ih.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/navi10_ih.c
>> @@ -683,7 +683,7 @@ static int navi10_ih_set_clockgating_state(void 
>> *handle,
>>       return 0;
>>   }
>>   -static int navi10_ih_set_powergating_state(void *handle,
>> +static int navi10_ih_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                          enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/nv.c 
>> b/drivers/gpu/drm/amd/amdgpu/nv.c
>> index 7fdd5739b608..75cb8556c8bc 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/nv.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/nv.c
>> @@ -1089,7 +1089,7 @@ static int nv_common_set_clockgating_state(void 
>> *handle,
>>       return 0;
>>   }
>>   -static int nv_common_set_powergating_state(void *handle,
>> +static int nv_common_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                          enum amd_powergating_state state)
>>   {
>>       /* TODO */
>> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c 
>> b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
>> index a77977478ebe..895230ed4db4 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
>> @@ -1093,7 +1093,7 @@ static int sdma_v2_4_set_clockgating_state(void 
>> *handle,
>>       return 0;
>>   }
>>   -static int sdma_v2_4_set_powergating_state(void *handle,
>> +static int sdma_v2_4_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
>> index 18bc1463238f..6a5edcafd3ec 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
>> @@ -1510,7 +1510,7 @@ static int sdma_v3_0_set_clockgating_state(void 
>> *handle,
>>       return 0;
>>   }
>>   -static int sdma_v3_0_set_powergating_state(void *handle,
>> +static int sdma_v3_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
>> index 10887eeb50af..6b2783e0d125 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
>> @@ -2312,10 +2312,10 @@ static int 
>> sdma_v4_0_set_clockgating_state(void *handle,
>>       return 0;
>>   }
>>   -static int sdma_v4_0_set_powergating_state(void *handle,
>> +static int sdma_v4_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>         switch (amdgpu_ip_version(adev, SDMA0_HWIP, 0)) {
>>       case IP_VERSION(4, 1, 0):
>> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c 
>> b/drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c
>> index a8c5e30c83c8..cdb0ad4ee574 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c
>> @@ -1832,7 +1832,7 @@ static int 
>> sdma_v4_4_2_set_clockgating_state(void *handle,
>>       return 0;
>>   }
>>   -static int sdma_v4_4_2_set_powergating_state(void *handle,
>> +static int sdma_v4_4_2_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c
>> index c67ccb541127..24604fd63dd0 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c
>> @@ -1863,7 +1863,7 @@ static int sdma_v5_0_set_clockgating_state(void 
>> *handle,
>>       return 0;
>>   }
>>   -static int sdma_v5_0_set_powergating_state(void *handle,
>> +static int sdma_v5_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c 
>> b/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c
>> index b136621e5549..ab687e6ed36a 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c
>> @@ -1822,7 +1822,7 @@ static int sdma_v5_2_set_clockgating_state(void 
>> *handle,
>>       return 0;
>>   }
>>   -static int sdma_v5_2_set_powergating_state(void *handle,
>> +static int sdma_v5_2_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c
>> index f18e3a40ceeb..438be23cdcae 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c
>> @@ -1593,7 +1593,7 @@ static int sdma_v6_0_set_clockgating_state(void 
>> *handle,
>>       return 0;
>>   }
>>   -static int sdma_v6_0_set_powergating_state(void *handle,
>> +static int sdma_v6_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c
>> index 670529e16289..25a6cc68d008 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c
>> @@ -1528,7 +1528,7 @@ static int sdma_v7_0_set_clockgating_state(void 
>> *handle,
>>       return 0;
>>   }
>>   -static int sdma_v7_0_set_powergating_state(void *handle,
>> +static int sdma_v7_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/si.c 
>> b/drivers/gpu/drm/amd/amdgpu/si.c
>> index 096cf2deeb40..603b48533c0e 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/si.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/si.c
>> @@ -2685,7 +2685,7 @@ static int si_common_set_clockgating_state(void 
>> *handle,
>>       return 0;
>>   }
>>   -static int si_common_set_powergating_state(void *handle,
>> +static int si_common_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                           enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/si_dma.c 
>> b/drivers/gpu/drm/amd/amdgpu/si_dma.c
>> index 93f80ab50626..b75c7a4fb727 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/si_dma.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/si_dma.c
>> @@ -677,12 +677,12 @@ static int si_dma_set_clockgating_state(void 
>> *handle,
>>       return 0;
>>   }
>>   -static int si_dma_set_powergating_state(void *handle,
>> +static int si_dma_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       u32 tmp;
>>   -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>         WREG32(DMA_PGFSM_WRITE,  0x00002000);
>>       WREG32(DMA_PGFSM_CONFIG, 0x100010ff);
>> diff --git a/drivers/gpu/drm/amd/amdgpu/si_ih.c 
>> b/drivers/gpu/drm/amd/amdgpu/si_ih.c
>> index 089921417ec5..854ae444d608 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/si_ih.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/si_ih.c
>> @@ -275,7 +275,7 @@ static int si_ih_set_clockgating_state(void *handle,
>>       return 0;
>>   }
>>   -static int si_ih_set_powergating_state(void *handle,
>> +static int si_ih_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/soc15.c 
>> b/drivers/gpu/drm/amd/amdgpu/soc15.c
>> index 2f9f7e3fa833..8e5e21835235 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/soc15.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/soc15.c
>> @@ -1483,7 +1483,7 @@ static void 
>> soc15_common_get_clockgating_state(void *handle, u64 *flags)
>>           adev->df.funcs->get_clockgating_state(adev, flags);
>>   }
>>   -static int soc15_common_set_powergating_state(void *handle,
>> +static int soc15_common_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                           enum amd_powergating_state state)
>>   {
>>       /* todo */
>> diff --git a/drivers/gpu/drm/amd/amdgpu/soc21.c 
>> b/drivers/gpu/drm/amd/amdgpu/soc21.c
>> index 5946911a4191..80655a80a666 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/soc21.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/soc21.c
>> @@ -970,10 +970,10 @@ static int 
>> soc21_common_set_clockgating_state(void *handle,
>>       return 0;
>>   }
>>   -static int soc21_common_set_powergating_state(void *handle,
>> +static int soc21_common_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                          enum amd_powergating_state state)
>>   {
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>         switch (amdgpu_ip_version(adev, LSDMA_HWIP, 0)) {
>>       case IP_VERSION(6, 0, 0):
>> diff --git a/drivers/gpu/drm/amd/amdgpu/soc24.c 
>> b/drivers/gpu/drm/amd/amdgpu/soc24.c
>> index 64d2f8ce548d..b6d71c7eafed 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/soc24.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/soc24.c
>> @@ -561,10 +561,10 @@ static int 
>> soc24_common_set_clockgating_state(void *handle,
>>       return 0;
>>   }
>>   -static int soc24_common_set_powergating_state(void *handle,
>> +static int soc24_common_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                             enum amd_powergating_state state)
>>   {
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>         switch (amdgpu_ip_version(adev, LSDMA_HWIP, 0)) {
>>       case IP_VERSION(7, 0, 0):
>> diff --git a/drivers/gpu/drm/amd/amdgpu/tonga_ih.c 
>> b/drivers/gpu/drm/amd/amdgpu/tonga_ih.c
>> index d76c528d08f1..21211c4de20c 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/tonga_ih.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/tonga_ih.c
>> @@ -462,7 +462,7 @@ static int tonga_ih_set_clockgating_state(void 
>> *handle,
>>       return 0;
>>   }
>>   -static int tonga_ih_set_powergating_state(void *handle,
>> +static int tonga_ih_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v3_1.c 
>> b/drivers/gpu/drm/amd/amdgpu/uvd_v3_1.c
>> index 0fd864247a48..8ef76e1f77af 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/uvd_v3_1.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/uvd_v3_1.c
>> @@ -797,7 +797,7 @@ static int uvd_v3_1_set_clockgating_state(void 
>> *handle,
>>       return 0;
>>   }
>>   -static int uvd_v3_1_set_powergating_state(void *handle,
>> +static int uvd_v3_1_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c 
>> b/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c
>> index 853af18fcc43..581f503bfd69 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c
>> @@ -715,7 +715,7 @@ static int uvd_v4_2_set_clockgating_state(void 
>> *handle,
>>       return 0;
>>   }
>>   -static int uvd_v4_2_set_powergating_state(void *handle,
>> +static int uvd_v4_2_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       /* This doesn't actually powergate the UVD block.
>> @@ -725,7 +725,7 @@ static int uvd_v4_2_set_powergating_state(void 
>> *handle,
>>        * revisit this when there is a cleaner line between
>>        * the smc and the hw blocks
>>        */
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>         if (state == AMD_PG_STATE_GATE) {
>>           uvd_v4_2_stop(adev);
>> diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c
>> index 7b6128660294..9ba5c64bb776 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c
>> @@ -813,7 +813,7 @@ static int uvd_v5_0_set_clockgating_state(void 
>> *handle,
>>       return 0;
>>   }
>>   -static int uvd_v5_0_set_powergating_state(void *handle,
>> +static int uvd_v5_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       /* This doesn't actually powergate the UVD block.
>> @@ -823,7 +823,7 @@ static int uvd_v5_0_set_powergating_state(void 
>> *handle,
>>        * revisit this when there is a cleaner line between
>>        * the smc and the hw blocks
>>        */
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>       int ret = 0;
>>         if (state == AMD_PG_STATE_GATE) {
>> diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
>> index 0c334d90e4f3..e6c3f9237321 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
>> @@ -1472,7 +1472,7 @@ static int uvd_v6_0_set_clockgating_state(void 
>> *handle,
>>       return 0;
>>   }
>>   -static int uvd_v6_0_set_powergating_state(void *handle,
>> +static int uvd_v6_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       /* This doesn't actually powergate the UVD block.
>> @@ -1482,7 +1482,7 @@ static int uvd_v6_0_set_powergating_state(void 
>> *handle,
>>        * revisit this when there is a cleaner line between
>>        * the smc and the hw blocks
>>        */
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>       int ret = 0;
>>         WREG32(mmUVD_POWER_STATUS, UVD_POWER_STATUS__UVD_PG_EN_MASK);
>> diff --git a/drivers/gpu/drm/amd/amdgpu/vce_v2_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/vce_v2_0.c
>> index 71ca9966711e..bf10e23272a0 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/vce_v2_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/vce_v2_0.c
>> @@ -593,7 +593,7 @@ static int vce_v2_0_set_clockgating_state(void 
>> *handle,
>>       return 0;
>>   }
>>   -static int vce_v2_0_set_powergating_state(void *handle,
>> +static int vce_v2_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       /* This doesn't actually powergate the VCE block.
>> @@ -603,7 +603,7 @@ static int vce_v2_0_set_powergating_state(void 
>> *handle,
>>        * revisit this when there is a cleaner line between
>>        * the smc and the hw blocks
>>        */
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>         if (state == AMD_PG_STATE_GATE)
>>           return vce_v2_0_stop(adev);
>> diff --git a/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c
>> index 92ffd3fa5b00..079139c23bfc 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c
>> @@ -802,7 +802,7 @@ static int vce_v3_0_set_clockgating_state(void 
>> *handle,
>>       return 0;
>>   }
>>   -static int vce_v3_0_set_powergating_state(void *handle,
>> +static int vce_v3_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       /* This doesn't actually powergate the VCE block.
>> @@ -812,7 +812,7 @@ static int vce_v3_0_set_powergating_state(void 
>> *handle,
>>        * revisit this when there is a cleaner line between
>>        * the smc and the hw blocks
>>        */
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>       int ret = 0;
>>         if (state == AMD_PG_STATE_GATE) {
>> diff --git a/drivers/gpu/drm/amd/amdgpu/vce_v4_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/vce_v4_0.c
>> index b17aabaf220a..b046e2430b8e 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/vce_v4_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/vce_v4_0.c
>> @@ -958,7 +958,7 @@ static int vce_v4_0_set_clockgating_state(void 
>> *handle,
>>   }
>>   #endif
>>   -static int vce_v4_0_set_powergating_state(void *handle,
>> +static int vce_v4_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       /* This doesn't actually powergate the VCE block.
>> @@ -968,7 +968,7 @@ static int vce_v4_0_set_powergating_state(void 
>> *handle,
>>        * revisit this when there is a cleaner line between
>>        * the smc and the hw blocks
>>        */
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>         if (state == AMD_PG_STATE_GATE)
>>           return vce_v4_0_stop(adev);
>> diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c
>> index 38497ba60292..734f7cf259b1 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c
>> @@ -85,7 +85,8 @@ static int vcn_v1_0_stop(struct amdgpu_device *adev);
>>   static void vcn_v1_0_set_dec_ring_funcs(struct amdgpu_device *adev);
>>   static void vcn_v1_0_set_enc_ring_funcs(struct amdgpu_device *adev);
>>   static void vcn_v1_0_set_irq_funcs(struct amdgpu_device *adev);
>> -static int vcn_v1_0_set_powergating_state(void *handle, enum 
>> amd_powergating_state state);
>> +static int vcn_v1_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>> +                enum amd_powergating_state state);
>>   static int vcn_v1_0_pause_dpg_mode(struct amdgpu_device *adev,
>>                   int inst_idx, struct dpg_pause_state *new_state);
>>   @@ -281,7 +282,7 @@ static int vcn_v1_0_hw_fini(void *handle)
>>       if ((adev->pg_flags & AMD_PG_SUPPORT_VCN_DPG) ||
>>           (adev->vcn.cur_state[0] != AMD_PG_STATE_GATE &&
>>            RREG32_SOC15(VCN, 0, mmUVD_STATUS))) {
>> -        vcn_v1_0_set_powergating_state(adev, AMD_PG_STATE_GATE);
>> +        vcn_v1_0_set_powergating_state(ip_block, AMD_PG_STATE_GATE);
>>       }
>>         return 0;
>> @@ -1800,7 +1801,7 @@ static void vcn_v1_0_dec_ring_insert_nop(struct 
>> amdgpu_ring *ring, uint32_t coun
>>       }
>>   }
>>   -static int vcn_v1_0_set_powergating_state(void *handle,
>> +static int vcn_v1_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       /* This doesn't actually powergate the VCN block.
>> @@ -1811,7 +1812,7 @@ static int vcn_v1_0_set_powergating_state(void 
>> *handle,
>>        * the smc and the hw blocks
>>        */
>>       int ret;
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>         if (state == adev->vcn.cur_state[0])
>>           return 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c
>> index 37ace062788b..df4b85e1a4d7 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c
>> @@ -92,7 +92,7 @@ static const struct amdgpu_hwip_reg_entry 
>> vcn_reg_list_2_0[] = {
>>   static void vcn_v2_0_set_dec_ring_funcs(struct amdgpu_device *adev);
>>   static void vcn_v2_0_set_enc_ring_funcs(struct amdgpu_device *adev);
>>   static void vcn_v2_0_set_irq_funcs(struct amdgpu_device *adev);
>> -static int vcn_v2_0_set_powergating_state(void *handle,
>> +static int vcn_v2_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                   enum amd_powergating_state state);
>>   static int vcn_v2_0_pause_dpg_mode(struct amdgpu_device *adev,
>>                   int inst_idx, struct dpg_pause_state *new_state);
>> @@ -318,7 +318,7 @@ static int vcn_v2_0_hw_fini(void *handle)
>>       if ((adev->pg_flags & AMD_PG_SUPPORT_VCN_DPG) ||
>>           (adev->vcn.cur_state[0] != AMD_PG_STATE_GATE &&
>>             RREG32_SOC15(VCN, 0, mmUVD_STATUS)))
>> -        vcn_v2_0_set_powergating_state(adev, AMD_PG_STATE_GATE);
>> +        vcn_v2_0_set_powergating_state(ip_block, AMD_PG_STATE_GATE);
>>         return 0;
>>   }
>> @@ -1798,7 +1798,7 @@ int vcn_v2_0_dec_ring_test_ring(struct 
>> amdgpu_ring *ring)
>>   }
>>     -static int vcn_v2_0_set_powergating_state(void *handle,
>> +static int vcn_v2_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       /* This doesn't actually powergate the VCN block.
>> @@ -1809,7 +1809,7 @@ static int vcn_v2_0_set_powergating_state(void 
>> *handle,
>>        * the smc and the hw blocks
>>        */
>>       int ret;
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>         if (amdgpu_sriov_vf(adev)) {
>>           adev->vcn.cur_state[0] = AMD_PG_STATE_UNGATE;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v2_5.c 
>> b/drivers/gpu/drm/amd/amdgpu/vcn_v2_5.c
>> index aa1c96571a21..c69cd7f62f09 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/vcn_v2_5.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v2_5.c
>> @@ -95,7 +95,7 @@ static const struct amdgpu_hwip_reg_entry 
>> vcn_reg_list_2_5[] = {
>>   static void vcn_v2_5_set_dec_ring_funcs(struct amdgpu_device *adev);
>>   static void vcn_v2_5_set_enc_ring_funcs(struct amdgpu_device *adev);
>>   static void vcn_v2_5_set_irq_funcs(struct amdgpu_device *adev);
>> -static int vcn_v2_5_set_powergating_state(void *handle,
>> +static int vcn_v2_5_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                   enum amd_powergating_state state);
>>   static int vcn_v2_5_pause_dpg_mode(struct amdgpu_device *adev,
>>                   int inst_idx, struct dpg_pause_state *new_state);
>> @@ -400,7 +400,7 @@ static int vcn_v2_5_hw_fini(void *handle)
>>           if ((adev->pg_flags & AMD_PG_SUPPORT_VCN_DPG) ||
>>               (adev->vcn.cur_state[i] != AMD_PG_STATE_GATE &&
>>                RREG32_SOC15(VCN, i, mmUVD_STATUS))) {
>> -            vcn_v2_5_set_powergating_state(adev, AMD_PG_STATE_GATE);
>> +            vcn_v2_5_set_powergating_state(ip_block, 
>> AMD_PG_STATE_GATE);
>>           }
>>             if (amdgpu_ras_is_supported(adev, AMDGPU_RAS_BLOCK__VCN))
>> @@ -1825,10 +1825,10 @@ static int 
>> vcn_v2_5_set_clockgating_state(void *handle,
>>       return 0;
>>   }
>>   -static int vcn_v2_5_set_powergating_state(void *handle,
>> +static int vcn_v2_5_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>       int ret;
>>         if (amdgpu_sriov_vf(adev))
>> diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c
>> index 52c8e7767a6a..65d648429825 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c
>> @@ -105,7 +105,7 @@ static int vcn_v3_0_start_sriov(struct 
>> amdgpu_device *adev);
>>   static void vcn_v3_0_set_dec_ring_funcs(struct amdgpu_device *adev);
>>   static void vcn_v3_0_set_enc_ring_funcs(struct amdgpu_device *adev);
>>   static void vcn_v3_0_set_irq_funcs(struct amdgpu_device *adev);
>> -static int vcn_v3_0_set_powergating_state(void *handle,
>> +static int vcn_v3_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>               enum amd_powergating_state state);
>>   static int vcn_v3_0_pause_dpg_mode(struct amdgpu_device *adev,
>>               int inst_idx, struct dpg_pause_state *new_state);
>> @@ -433,7 +433,7 @@ static int vcn_v3_0_hw_fini(void *handle)
>>               if ((adev->pg_flags & AMD_PG_SUPPORT_VCN_DPG) ||
>>                   (adev->vcn.cur_state[i] != AMD_PG_STATE_GATE &&
>>                    RREG32_SOC15(VCN, i, mmUVD_STATUS))) {
>> -                vcn_v3_0_set_powergating_state(adev, 
>> AMD_PG_STATE_GATE);
>> +                vcn_v3_0_set_powergating_state(ip_block, 
>> AMD_PG_STATE_GATE);
>>               }
>>           }
>>       }
>> @@ -2158,10 +2158,10 @@ static int 
>> vcn_v3_0_set_clockgating_state(void *handle,
>>       return 0;
>>   }
>>   -static int vcn_v3_0_set_powergating_state(void *handle,
>> +static int vcn_v3_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>       int ret;
>>         for (int i = 0; i < adev->vcn.num_vcn_inst; ++i) {
>> diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c
>> index 9b18810f00e6..50198b72e579 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c
>> @@ -96,7 +96,7 @@ static int amdgpu_ih_clientid_vcns[] = {
>>   static int vcn_v4_0_start_sriov(struct amdgpu_device *adev);
>>   static void vcn_v4_0_set_unified_ring_funcs(struct amdgpu_device 
>> *adev);
>>   static void vcn_v4_0_set_irq_funcs(struct amdgpu_device *adev);
>> -static int vcn_v4_0_set_powergating_state(void *handle,
>> +static int vcn_v4_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>           enum amd_powergating_state state);
>>   static int vcn_v4_0_pause_dpg_mode(struct amdgpu_device *adev,
>>           int inst_idx, struct dpg_pause_state *new_state);
>> @@ -361,7 +361,7 @@ static int vcn_v4_0_hw_fini(void *handle)
>>               if ((adev->pg_flags & AMD_PG_SUPPORT_VCN_DPG) ||
>>                   (adev->vcn.cur_state[i] != AMD_PG_STATE_GATE &&
>>                    RREG32_SOC15(VCN, i, regUVD_STATUS))) {
>> -                vcn_v4_0_set_powergating_state(adev, 
>> AMD_PG_STATE_GATE);
>> +                vcn_v4_0_set_powergating_state(ip_block, 
>> AMD_PG_STATE_GATE);
>>               }
>>           }
>>           if (amdgpu_ras_is_supported(adev, AMDGPU_RAS_BLOCK__VCN))
>> @@ -2037,9 +2037,10 @@ static int vcn_v4_0_set_clockgating_state(void 
>> *handle, enum amd_clockgating_sta
>>    *
>>    * Set VCN block powergating state
>>    */
>> -static int vcn_v4_0_set_powergating_state(void *handle, enum 
>> amd_powergating_state state)
>> +static int vcn_v4_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>> +                      enum amd_powergating_state state)
>>   {
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>       int ret;
>>         for (int i = 0; i < adev->vcn.num_vcn_inst; ++i) {
>> diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c 
>> b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c
>> index fb425e27ab89..84939e92cd3a 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c
>> @@ -87,7 +87,7 @@ static const struct amdgpu_hwip_reg_entry 
>> vcn_reg_list_4_0_3[] = {
>>   static int vcn_v4_0_3_start_sriov(struct amdgpu_device *adev);
>>   static void vcn_v4_0_3_set_unified_ring_funcs(struct amdgpu_device 
>> *adev);
>>   static void vcn_v4_0_3_set_irq_funcs(struct amdgpu_device *adev);
>> -static int vcn_v4_0_3_set_powergating_state(void *handle,
>> +static int vcn_v4_0_3_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>           enum amd_powergating_state state);
>>   static int vcn_v4_0_3_pause_dpg_mode(struct amdgpu_device *adev,
>>           int inst_idx, struct dpg_pause_state *new_state);
>> @@ -322,7 +322,7 @@ static int vcn_v4_0_3_hw_fini(void *handle)
>>         for (i = 0; i < adev->vcn.num_vcn_inst; ++i) {
>>           if (adev->vcn.cur_state[i] != AMD_PG_STATE_GATE) {
>> -            vcn_v4_0_3_set_powergating_state(adev, AMD_PG_STATE_GATE);
>> +            vcn_v4_0_3_set_powergating_state(ip_block, 
>> AMD_PG_STATE_GATE);
>>           }
>>       }
>>   @@ -1626,10 +1626,10 @@ static int 
>> vcn_v4_0_3_set_clockgating_state(void *handle,
>>    *
>>    * Set VCN block powergating state
>>    */
>> -static int vcn_v4_0_3_set_powergating_state(void *handle,
>> +static int vcn_v4_0_3_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>       int ret;
>>         for (int i = 0; i < adev->vcn.num_vcn_inst; ++i) {
>> diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_5.c 
>> b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_5.c
>> index 0c093d23a73f..a3bb42893803 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_5.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_5.c
>> @@ -95,7 +95,7 @@ static int amdgpu_ih_clientid_vcns[] = {
>>     static void vcn_v4_0_5_set_unified_ring_funcs(struct 
>> amdgpu_device *adev);
>>   static void vcn_v4_0_5_set_irq_funcs(struct amdgpu_device *adev);
>> -static int vcn_v4_0_5_set_powergating_state(void *handle,
>> +static int vcn_v4_0_5_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>           enum amd_powergating_state state);
>>   static int vcn_v4_0_5_pause_dpg_mode(struct amdgpu_device *adev,
>>           int inst_idx, struct dpg_pause_state *new_state);
>> @@ -311,7 +311,7 @@ static int vcn_v4_0_5_hw_fini(void *handle)
>>               if ((adev->pg_flags & AMD_PG_SUPPORT_VCN_DPG) ||
>>                   (adev->vcn.cur_state[i] != AMD_PG_STATE_GATE &&
>>                    RREG32_SOC15(VCN, i, regUVD_STATUS))) {
>> -                vcn_v4_0_5_set_powergating_state(adev, 
>> AMD_PG_STATE_GATE);
>> +                vcn_v4_0_5_set_powergating_state(ip_block, 
>> AMD_PG_STATE_GATE);
>>               }
>>           }
>>       }
>> @@ -1531,9 +1531,10 @@ static int 
>> vcn_v4_0_5_set_clockgating_state(void *handle, enum amd_clockgating_s
>>    *
>>    * Set VCN block powergating state
>>    */
>> -static int vcn_v4_0_5_set_powergating_state(void *handle, enum 
>> amd_powergating_state state)
>> +static int vcn_v4_0_5_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>> +        enum amd_powergating_state state)
>>   {
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>       int ret;
>>         for (int i = 0; i < adev->vcn.num_vcn_inst; ++i) {
>> diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v5_0_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/vcn_v5_0_0.c
>> index b9eb12d2cd1b..65791fe2090b 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/vcn_v5_0_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v5_0_0.c
>> @@ -78,7 +78,7 @@ static int amdgpu_ih_clientid_vcns[] = {
>>     static void vcn_v5_0_0_set_unified_ring_funcs(struct 
>> amdgpu_device *adev);
>>   static void vcn_v5_0_0_set_irq_funcs(struct amdgpu_device *adev);
>> -static int vcn_v5_0_0_set_powergating_state(void *handle,
>> +static int vcn_v5_0_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>           enum amd_powergating_state state);
>>   static int vcn_v5_0_0_pause_dpg_mode(struct amdgpu_device *adev,
>>           int inst_idx, struct dpg_pause_state *new_state);
>> @@ -275,7 +275,7 @@ static int vcn_v5_0_0_hw_fini(void *handle)
>>               if ((adev->pg_flags & AMD_PG_SUPPORT_VCN_DPG) ||
>>                   (adev->vcn.cur_state[i] != AMD_PG_STATE_GATE &&
>>                    RREG32_SOC15(VCN, i, regUVD_STATUS))) {
>> -                vcn_v5_0_0_set_powergating_state(adev, 
>> AMD_PG_STATE_GATE);
>> +                vcn_v5_0_0_set_powergating_state(ip_block, 
>> AMD_PG_STATE_GATE);
>>               }
>>           }
>>       }
>> @@ -1258,9 +1258,10 @@ static int 
>> vcn_v5_0_0_set_clockgating_state(void *handle, enum amd_clockgating_s
>>    *
>>    * Set VCN block powergating state
>>    */
>> -static int vcn_v5_0_0_set_powergating_state(void *handle, enum 
>> amd_powergating_state state)
>> +static int vcn_v5_0_0_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>> +        enum amd_powergating_state state)
>>   {
>> -    struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>> +    struct amdgpu_device *adev = ip_block->adev;
>>       int ret;
>>         for (int i = 0; i < adev->vcn.num_vcn_inst; ++i) {
>> diff --git a/drivers/gpu/drm/amd/amdgpu/vega10_ih.c 
>> b/drivers/gpu/drm/amd/amdgpu/vega10_ih.c
>> index 2d80aafcdbc6..630567f8e930 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/vega10_ih.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/vega10_ih.c
>> @@ -624,7 +624,7 @@ static int vega10_ih_set_clockgating_state(void 
>> *handle,
>>     }
>>   -static int vega10_ih_set_powergating_state(void *handle,
>> +static int vega10_ih_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/vega20_ih.c 
>> b/drivers/gpu/drm/amd/amdgpu/vega20_ih.c
>> index c2461211aefb..a083ae3e28ac 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/vega20_ih.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/vega20_ih.c
>> @@ -687,7 +687,7 @@ static int vega20_ih_set_clockgating_state(void 
>> *handle,
>>     }
>>   -static int vega20_ih_set_powergating_state(void *handle,
>> +static int vega20_ih_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/vi.c 
>> b/drivers/gpu/drm/amd/amdgpu/vi.c
>> index e832dd50a628..87942af88eec 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/vi.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/vi.c
>> @@ -2007,7 +2007,7 @@ static int vi_common_set_clockgating_state(void 
>> *handle,
>>       return 0;
>>   }
>>   -static int vi_common_set_powergating_state(void *handle,
>> +static int vi_common_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                           enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c 
>> b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>> index 87429766c70f..3aab1b9e07ac 100644
>> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>> @@ -961,7 +961,7 @@ static int dm_set_clockgating_state(void *handle,
>>       return 0;
>>   }
>>   -static int dm_set_powergating_state(void *handle,
>> +static int dm_set_powergating_state(struct amdgpu_ip_block *ip_block,
>>             enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/include/amd_shared.h 
>> b/drivers/gpu/drm/amd/include/amd_shared.h
>> index 6601d3e0f5dd..8e10ffa3d34a 100644
>> --- a/drivers/gpu/drm/amd/include/amd_shared.h
>> +++ b/drivers/gpu/drm/amd/include/amd_shared.h
>> @@ -398,7 +398,7 @@ struct amd_ip_funcs {
>>       int (*post_soft_reset)(struct amdgpu_ip_block *ip_block);
>>       int (*set_clockgating_state)(void *handle,
>>                        enum amd_clockgating_state state);
>> -    int (*set_powergating_state)(void *handle,
>> +    int (*set_powergating_state)(struct amdgpu_ip_block *ip_block,
>>                        enum amd_powergating_state state);
>>       void (*get_clockgating_state)(void *handle, u64 *flags);
>>       void (*dump_ip_state)(struct amdgpu_ip_block *ip_block);
>> diff --git a/drivers/gpu/drm/amd/pm/legacy-dpm/kv_dpm.c 
>> b/drivers/gpu/drm/amd/pm/legacy-dpm/kv_dpm.c
>> index 92c7e45c64b2..358d066fac56 100644
>> --- a/drivers/gpu/drm/amd/pm/legacy-dpm/kv_dpm.c
>> +++ b/drivers/gpu/drm/amd/pm/legacy-dpm/kv_dpm.c
>> @@ -3194,7 +3194,7 @@ static int kv_dpm_set_clockgating_state(void 
>> *handle,
>>       return 0;
>>   }
>>   -static int kv_dpm_set_powergating_state(void *handle,
>> +static int kv_dpm_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                         enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c 
>> b/drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c
>> index 157777db75c7..8e2d243d055d 100644
>> --- a/drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c
>> +++ b/drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c
>> @@ -7860,7 +7860,7 @@ static int si_dpm_set_clockgating_state(void 
>> *handle,
>>       return 0;
>>   }
>>   -static int si_dpm_set_powergating_state(void *handle,
>> +static int si_dpm_set_powergating_state(struct amdgpu_ip_block 
>> *ip_block,
>>                       enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c 
>> b/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
>> index 334f03c04257..750a7c0fb898 100644
>> --- a/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
>> +++ b/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
>> @@ -255,7 +255,7 @@ static int pp_sw_reset(struct amdgpu_ip_block 
>> *ip_block)
>>       return 0;
>>   }
>>   -static int pp_set_powergating_state(void *handle,
>> +static int pp_set_powergating_state(struct amdgpu_ip_block *ip_block,
>>                       enum amd_powergating_state state)
>>   {
>>       return 0;
>> diff --git a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c 
>> b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
>> index 86001682e13e..5b3d0cf7bb99 100644
>> --- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
>> +++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
>> @@ -2263,7 +2263,7 @@ static int smu_set_clockgating_state(void *handle,
>>       return 0;
>>   }
>>   -static int smu_set_powergating_state(void *handle,
>> +static int smu_set_powergating_state(struct amdgpu_ip_block *ip_block,
>>                        enum amd_powergating_state state)
>>   {
>>       return 0;
>


More information about the amd-gfx mailing list