[PATCH 1/3] drm/amdgpu: add IP helpers for wait_for_idle and is_idle

zhoucm1 david1.zhou at amd.com
Fri Jun 24 02:40:16 UTC 2016



On 2016年06月23日 23:54, Alex Deucher wrote:
> Helpers to to call the IP functions for the selected IP.
>
> Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
Reviewed-by: Chunming zhou <david1.zhou at amd.com>
> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu.h        |  4 ++++
>   drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 30 ++++++++++++++++++++++++++++++
>   2 files changed, 34 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> index 0868bfc..019f255 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> @@ -187,6 +187,10 @@ int amdgpu_set_clockgating_state(struct amdgpu_device *adev,
>   int amdgpu_set_powergating_state(struct amdgpu_device *adev,
>   				  enum amd_ip_block_type block_type,
>   				  enum amd_powergating_state state);
> +int amdgpu_wait_for_idle(struct amdgpu_device *adev,
> +			 enum amd_ip_block_type block_type);
> +bool amdgpu_is_idle(struct amdgpu_device *adev,
> +		    enum amd_ip_block_type block_type);
>   
>   struct amdgpu_ip_block_version {
>   	enum amd_ip_block_type type;
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> index 5cba14d..ac606b9 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> @@ -1102,6 +1102,36 @@ int amdgpu_set_powergating_state(struct amdgpu_device *adev,
>   	return r;
>   }
>   
> +int amdgpu_wait_for_idle(struct amdgpu_device *adev,
> +			 enum amd_ip_block_type block_type)
> +{
> +	int i, r;
> +
> +	for (i = 0; i < adev->num_ip_blocks; i++) {
> +		if (adev->ip_blocks[i].type == block_type) {
> +			r = adev->ip_blocks[i].funcs->wait_for_idle((void *)adev);
> +			if (r)
> +				return r;
> +			break;
> +		}
> +	}
> +	return 0;
> +
> +}
> +
> +bool amdgpu_is_idle(struct amdgpu_device *adev,
> +		    enum amd_ip_block_type block_type)
> +{
> +	int i;
> +
> +	for (i = 0; i < adev->num_ip_blocks; i++) {
> +		if (adev->ip_blocks[i].type == block_type)
> +			return adev->ip_blocks[i].funcs->is_idle((void *)adev);
> +	}
> +	return true;
> +
> +}
> +
>   const struct amdgpu_ip_block_version * amdgpu_get_ip_block(
>   					struct amdgpu_device *adev,
>   					enum amd_ip_block_type type)



More information about the amd-gfx mailing list