[PATCH 09/18] drm/amdgpu: add set_powergating_state_instance
Boyuan Zhang
Boyuan.Zhang at amd.com
Tue Oct 8 22:07:54 UTC 2024
On 2024-10-04 15:40, 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 a new function to allow setting requested powergating state for the
>> given instance. If the instance value doesn't match with the one inside
>> ip_block, then do nothing since this request is for other instances with
>> the same block type.
>>
>> Signed-off-by: Boyuan Zhang <boyuan.zhang at amd.com>
>> ---
>> drivers/gpu/drm/amd/amdgpu/amdgpu.h | 4 +++
>> drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 37 ++++++++++++++++++++++
>> 2 files changed, 41 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>> index 3442564fe174..ae59497f3074 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>> @@ -358,6 +358,10 @@ int amdgpu_device_ip_set_clockgating_state(void *dev,
>> int amdgpu_device_ip_set_powergating_state(void *dev,
>> enum amd_ip_block_type block_type,
>> enum amd_powergating_state state);
>> +int amdgpu_device_ip_set_powergating_state_instance(void *dev,
>> + enum amd_ip_block_type block_type,
>> + enum amd_powergating_state state,
>> + unsigned int inst);
>> void amdgpu_device_ip_get_clockgating_state(struct amdgpu_device *adev,
>> u64 *flags);
>> int amdgpu_device_ip_wait_for_idle(struct amdgpu_device *adev,
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>> index 35a3e71a5a84..f0b6a9675405 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>> @@ -2162,6 +2162,43 @@ int amdgpu_device_ip_set_powergating_state(void *dev,
>> return r;
>> }
>>
>> +/**
>> + * amdgpu_device_ip_set_powergating_state_instance - set the PG state
>> + *
>> + * @dev: amdgpu_device pointer
>> + * @block_type: Type of hardware IP (SMU, GFX, UVD, etc.)
>> + * @state: powergating state (gate or ungate)
>> + *
>> + * Sets the requested powergating state for the given instance of
>> + * the hardware IP specified.
>> + * Returns the error code from the last instance.
>> + */
>> +int amdgpu_device_ip_set_powergating_state_instance(void *dev,
>> + enum amd_ip_block_type block_type,
>> + enum amd_powergating_state state,
>> + unsigned int inst)
>> +{
>> + struct amdgpu_device *adev = dev;
>> + int i, r = 0;
>> +
>> + for (i = 0; i < adev->num_ip_blocks; i++) {
>> + if (!adev->ip_blocks[i].status.valid)
>> + continue;
>> + if (adev->ip_blocks[i].version->type != block_type)
>> + continue;
>> + if (adev->ip_blocks[i].instance != inst)
>> + continue;
>> + if (!adev->ip_blocks[i].version->funcs->set_powergating_state)
>> + continue;
>> + r = adev->ip_blocks[i].version->funcs->set_powergating_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);
>> + }
>> + return r;
>> +}
>> +
> I think it would also be cleaner to update
> amdgpu_device_ip_set_powergating_state() to take the instance as a new
> parameter. Same for amdgpu_device_ip_set_clockgating_state().
>
> Alex
Removed duplicated function, and add instance parameter to existing
function in new patch set (patch 19/32)
Thanks,
Boyuan
>
>> /**
>> * amdgpu_device_ip_get_clockgating_state - get the CG state
>> *
>> --
>> 2.34.1
>>
More information about the amd-gfx
mailing list