Commit 0030595c authored by Alex Deucher's avatar Alex Deucher
Browse files

drm/amdgpu: Update AMDGPU_INFO_UQ_FW_AREAS query for sdma

Add a query for sdma queues.  Userspace can use this to
query the size of the CSA buffers for sdma 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 44b69cf1
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
@@ -409,6 +409,24 @@ static int amdgpu_userq_metadata_info_compute(struct amdgpu_device *adev,
	return ret;
}

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

	if (adev->sdma.get_csa_info) {
		struct amdgpu_sdma_csa_info csa = {};

		adev->sdma.get_csa_info(adev, &csa);
		meta->csa_size = csa.size;
		meta->csa_alignment = csa.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)
@@ -1386,6 +1404,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_DMA:
			ret = amdgpu_userq_metadata_info_sdma(adev, info, &meta_info.sdma);
			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
@@ -1637,10 +1637,18 @@ struct drm_amdgpu_info_uq_metadata_compute {
	__u32 eop_alignment;
};

struct drm_amdgpu_info_uq_metadata_sdma {
	/* context save area size for sdma6 */
	__u32 csa_size;
	/* context save area base virtual alignment for sdma6 */
	__u32 csa_alignment;
};

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