[PATCH 09/29] drm/amdgpu: track instances of the same IP block

Alex Deucher alexdeucher at gmail.com
Mon Oct 28 19:27:35 UTC 2024


On Thu, Oct 24, 2024 at 10:48 PM <boyuan.zhang at amd.com> wrote:
>
> From: Boyuan Zhang <boyuan.zhang at amd.com>
>
> Add a new function to count the number of instance of the same IP block
> in the current ip_block list, then use the returned count value to set
> the newly defined instance variable in ip_block, to track the instance
> number of each ip_block.
>
> Signed-off-by: Boyuan Zhang <boyuan.zhang at amd.com>
> Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
> Suggested-by: Christian König <christian.koenig at amd.com>
> Reviewed-by: Christian König <christian.koenig at amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu.h        |  1 +
>  drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 25 +++++++++++++++++++++-
>  2 files changed, 25 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> index fba10ad44be9..2e2c6a556cc8 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> @@ -390,6 +390,7 @@ struct amdgpu_ip_block {
>         struct amdgpu_ip_block_status status;
>         const struct amdgpu_ip_block_version *version;
>         struct amdgpu_device *adev;
> +       unsigned int instance;

Thinking towards future work, we should add a `bool harvested;` member
to the structure so that we can skip harvested instances in the common
code going forward.

Alex

>  };
>
>  int amdgpu_device_ip_block_version_cmp(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 7c06e3a9146c..065463b5d6a9 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> @@ -2322,6 +2322,28 @@ int amdgpu_device_ip_block_version_cmp(struct amdgpu_device *adev,
>         return 1;
>  }
>
> +/**
> + * amdgpu_device_ip_get_num_instances - get number of instances of an IP block
> + *
> + * @adev: amdgpu_device pointer
> + * @type: Type of hardware IP (SMU, GFX, UVD, etc.)
> + *
> + * Returns the count of the hardware IP blocks structure for that type.
> + */
> +static unsigned int
> +amdgpu_device_ip_get_num_instances(struct amdgpu_device *adev,
> +                                   enum amd_ip_block_type type)
> +{
> +       unsigned int i, count = 0;
> +
> +       for (i = 0; i < adev->num_ip_blocks; i++) {
> +               if (adev->ip_blocks[i].version->type == type)
> +                       count++;
> +       }
> +
> +       return count;
> +}
> +
>  /**
>   * amdgpu_device_ip_block_add
>   *
> @@ -2354,7 +2376,8 @@ int amdgpu_device_ip_block_add(struct amdgpu_device *adev,
>                   ip_block_version->funcs->name);
>
>         adev->ip_blocks[adev->num_ip_blocks].adev = adev;
> -
> +       adev->ip_blocks[adev->num_ip_blocks].instance =
> +               amdgpu_device_ip_get_num_instances(adev, ip_block_version->type);
>         adev->ip_blocks[adev->num_ip_blocks++].version = ip_block_version;
>
>         return 0;
> --
> 2.34.1
>


More information about the amd-gfx mailing list