[PATCH 04/18] drm/amd/pm: add inst to set_powergating_by_smu
Boyuan Zhang
Boyuan.Zhang at amd.com
Tue Oct 8 22:06:12 UTC 2024
On 2024-10-04 15:14, Alex Deucher wrote:
> On Fri, Oct 4, 2024 at 2:45 PM <boyuan.zhang at amd.com> wrote:
>> From: Boyuan Zhang <boyuan.zhang at amd.com>
>>
>> Add an instance parameter to set_powergating_by_smu() function, and
>> re-write all amd_pm functions accordingly. Then use the instance to
>> call smu_dpm_set_vcn_enable().
>>
>> v2: remove duplicated functions.
>>
>> remove for-loop in smu_dpm_set_power_gate(), and temporarily move it to
>> to amdgpu_dpm_set_powergating_by_smu(), in order to keep the exact same
>> logic as before, until further separation in next patch.
>>
>> Signed-off-by: Boyuan Zhang <boyuan.zhang at amd.com>
>> ---
>> drivers/gpu/drm/amd/include/kgd_pp_interface.h | 4 +++-
>> drivers/gpu/drm/amd/pm/amdgpu_dpm.c | 10 ++++++++--
>> drivers/gpu/drm/amd/pm/legacy-dpm/kv_dpm.c | 4 +++-
>> drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c | 4 +++-
>> drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 14 ++++++--------
>> 5 files changed, 23 insertions(+), 13 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/include/kgd_pp_interface.h b/drivers/gpu/drm/amd/include/kgd_pp_interface.h
>> index 2fa71f68205e..f24bc61df9a7 100644
>> --- a/drivers/gpu/drm/amd/include/kgd_pp_interface.h
>> +++ b/drivers/gpu/drm/amd/include/kgd_pp_interface.h
>> @@ -405,7 +405,9 @@ struct amd_pm_funcs {
>> int (*load_firmware)(void *handle);
>> int (*wait_for_fw_loading_complete)(void *handle);
>> int (*set_powergating_by_smu)(void *handle,
>> - uint32_t block_type, bool gate);
>> + uint32_t block_type,
>> + bool gate,
>> + int inst);
>> int (*set_clockgating_by_smu)(void *handle, uint32_t msg_id);
>> int (*set_power_limit)(void *handle, uint32_t n);
>> int (*get_power_limit)(void *handle, uint32_t *limit,
>> diff --git a/drivers/gpu/drm/amd/pm/amdgpu_dpm.c b/drivers/gpu/drm/amd/pm/amdgpu_dpm.c
>> index 9dc82f4d7c93..bcedbeec082f 100644
>> --- a/drivers/gpu/drm/amd/pm/amdgpu_dpm.c
>> +++ b/drivers/gpu/drm/amd/pm/amdgpu_dpm.c
>> @@ -88,7 +88,6 @@ int amdgpu_dpm_set_powergating_by_smu(struct amdgpu_device *adev, uint32_t block
>> case AMD_IP_BLOCK_TYPE_UVD:
>> case AMD_IP_BLOCK_TYPE_VCE:
>> case AMD_IP_BLOCK_TYPE_GFX:
>> - case AMD_IP_BLOCK_TYPE_VCN:
>> case AMD_IP_BLOCK_TYPE_SDMA:
>> case AMD_IP_BLOCK_TYPE_JPEG:
>> case AMD_IP_BLOCK_TYPE_GMC:
>> @@ -96,7 +95,14 @@ int amdgpu_dpm_set_powergating_by_smu(struct amdgpu_device *adev, uint32_t block
>> case AMD_IP_BLOCK_TYPE_VPE:
>> if (pp_funcs && pp_funcs->set_powergating_by_smu)
>> ret = (pp_funcs->set_powergating_by_smu(
>> - (adev)->powerplay.pp_handle, block_type, gate));
>> + (adev)->powerplay.pp_handle, block_type, gate, 0));
>> + break;
>> + case AMD_IP_BLOCK_TYPE_VCN:
>> + if (pp_funcs && pp_funcs->set_powergating_by_smu) {
>> + for (int i = 0; i < adev->vcn.num_vcn_inst; i++)
>> + ret = (pp_funcs->set_powergating_by_smu(
>> + (adev)->powerplay.pp_handle, block_type, gate, i));
>> + }
>> break;
>> default:
>> break;
>> 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 2cd6cb991f29..af7da780b58b 100644
>> --- a/drivers/gpu/drm/amd/pm/legacy-dpm/kv_dpm.c
>> +++ b/drivers/gpu/drm/amd/pm/legacy-dpm/kv_dpm.c
>> @@ -3287,7 +3287,9 @@ static int kv_dpm_read_sensor(void *handle, int idx,
>> }
>>
>> static int kv_set_powergating_by_smu(void *handle,
>> - uint32_t block_type, bool gate)
>> + uint32_t block_type,
>> + bool gate,
>> + int inst)
>> {
>> switch (block_type) {
>> case AMD_IP_BLOCK_TYPE_UVD:
>> diff --git a/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c b/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
>> index f193c77cc141..de5ee1c5503f 100644
>> --- a/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
>> +++ b/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
>> @@ -1241,7 +1241,9 @@ static void pp_dpm_powergate_sdma(void *handle, bool gate)
>> }
>>
>> static int pp_set_powergating_by_smu(void *handle,
>> - uint32_t block_type, bool gate)
>> + uint32_t block_type,
>> + bool gate,
>> + int inst)
>> {
>> int ret = 0;
>>
>> diff --git a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
>> index 786241fa8d2c..0da84e390d0d 100644
>> --- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
>> +++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
>> @@ -353,10 +353,10 @@ static int smu_set_mall_enable(struct smu_context *smu)
>> */
>> static int smu_dpm_set_power_gate(void *handle,
>> uint32_t block_type,
>> - bool gate)
>> + bool gate,
>> + int inst)
>> {
>> struct smu_context *smu = handle;
>> - struct amdgpu_device *adev = smu->adev;
>> int ret = 0;
>>
>> if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled) {
>> @@ -373,12 +373,10 @@ static int smu_dpm_set_power_gate(void *handle,
>> */
>> case AMD_IP_BLOCK_TYPE_UVD:
>> case AMD_IP_BLOCK_TYPE_VCN:
>> - for (int i = 0; i < adev->vcn.num_vcn_inst; i++) {
>> - ret = smu_dpm_set_vcn_enable(smu, !gate, i);
>> - if (ret)
>> - dev_err(smu->adev->dev, "Failed to power %s VCN!\n",
>> - gate ? "gate" : "ungate");
>> - }
>> + ret = smu_dpm_set_vcn_enable(smu, !gate, inst);
>> + if (ret)
>> + dev_err(smu->adev->dev, "Failed to power %s VCN!\n",
>> + gate ? "gate" : "ungate");
> Might want to note the instance in the error message.
>
> Alex
Fixed in new patch set just submitted. (patch 04)
Thanks
Boyuan
>
>> break;
>> case AMD_IP_BLOCK_TYPE_GFX:
>> ret = smu_gfx_off_control(smu, gate);
>> --
>> 2.34.1
>>
More information about the amd-gfx
mailing list