From: Boyuan Zhang <boyuan.zhang@xxxxxxx> 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@xxxxxxx> Signed-off-by: Alex Deucher <alexander.deucher@xxxxxxx> Suggested-by: Christian König <christian.koenig@xxxxxxx> --- 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 48c9b9b06905..3442564fe174 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h @@ -387,6 +387,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; }; 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 af159ebe9cbc..426beab725b2 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c @@ -2283,6 +2283,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 * @@ -2315,7 +2337,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