Commit 44b69cf1 authored by Alex Deucher's avatar Alex Deucher
Browse files

drm/amdgpu: Update AMDGPU_INFO_UQ_FW_AREAS query for compute

Add a query for compute queues.  Userspace can use this to
query the size of the EOP buffers for compute user queues.

Proposed userspace:
https://gitlab.freedesktop.org/yogeshmohan/mesa/-/commits/userq_query



Reviewed-by: default avatarPrike Liang <Prike.Liang@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 0a54edc1
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
@@ -391,6 +391,24 @@ static int amdgpu_userq_metadata_info_gfx(struct amdgpu_device *adev,
	return ret;
}

static int amdgpu_userq_metadata_info_compute(struct amdgpu_device *adev,
					      struct drm_amdgpu_info *info,
					      struct drm_amdgpu_info_uq_metadata_compute *meta)
{
	int ret = -EOPNOTSUPP;

	if (adev->gfx.funcs->get_gfx_shadow_info) {
		struct amdgpu_gfx_shadow_info shadow = {};

		adev->gfx.funcs->get_gfx_shadow_info(adev, &shadow, true);
		meta->eop_size = shadow.eop_size;
		meta->eop_alignment = shadow.eop_alignment;
		ret = 0;
	}

	return ret;
}

static int amdgpu_hw_ip_info(struct amdgpu_device *adev,
			     struct drm_amdgpu_info *info,
			     struct drm_amdgpu_info_hw_ip *result)
@@ -1360,6 +1378,14 @@ int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
			if (ret)
				return ret;

			ret = copy_to_user(out, &meta_info,
						min((size_t)size, sizeof(meta_info))) ? -EFAULT : 0;
			return 0;
		case AMDGPU_HW_IP_COMPUTE:
			ret = amdgpu_userq_metadata_info_compute(adev, info, &meta_info.compute);
			if (ret)
				return ret;

			ret = copy_to_user(out, &meta_info,
						min((size_t)size, sizeof(meta_info))) ? -EFAULT : 0;
			return 0;
+8 −0
Original line number Diff line number Diff line
@@ -1630,9 +1630,17 @@ struct drm_amdgpu_info_uq_metadata_gfx {
	__u32 csa_alignment;
};

struct drm_amdgpu_info_uq_metadata_compute {
	/* EOP size for gfx11 */
	__u32 eop_size;
	/* EOP base virtual alignment for gfx11 */
	__u32 eop_alignment;
};

struct drm_amdgpu_info_uq_metadata {
	union {
		struct drm_amdgpu_info_uq_metadata_gfx gfx;
		struct drm_amdgpu_info_uq_metadata_compute compute;
	};
};