[PATCH] drm/amdgpu: add amdgpu_jpeg_sched_mask debugfs

Kees Bakker kees at ijzerbout.nl
Wed Oct 2 19:20:02 UTC 2024


Op 10-09-2024 om 16:31 schreef Sathishkumar S:
> JPEG_4_0_3 has up to 32 jpeg cores and a single mjpeg video decode
> will use all available cores on the hardware. This debugfs entry
> helps to disable or enable job submission to a cluster of cores or
> one specific core in the ip for debugging. The entry is populated
> only if there is at least two or more cores in the jpeg ip.
>
> Signed-off-by: Sathishkumar S <sathishkumar.sundararaju at amd.com>
> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c |  2 +
>   drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.c    | 71 +++++++++++++++++++++
>   drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.h    |  1 +
>   3 files changed, 74 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
> index cbef720de779..37d8657f0776 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
> @@ -2095,6 +2095,8 @@ int amdgpu_debugfs_init(struct amdgpu_device *adev)
>   	if (amdgpu_umsch_mm & amdgpu_umsch_mm_fwlog)
>   		amdgpu_debugfs_umsch_fwlog_init(adev, &adev->umsch_mm);
>   
> +	amdgpu_debugfs_jpeg_sched_mask_init(adev);
> +
>   	amdgpu_ras_debugfs_create_all(adev);
>   	amdgpu_rap_debugfs_init(adev);
>   	amdgpu_securedisplay_debugfs_init(adev);
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.c
> index 6df99cb00d9a..edf0a50dd345 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.c
> @@ -342,3 +342,74 @@ int amdgpu_jpeg_psp_update_sram(struct amdgpu_device *adev, int inst_idx,
>   
>   	return psp_execute_ip_fw_load(&adev->psp, &ucode);
>   }
> +
> +/*
> + * debugfs for to enable/disable jpeg job submission to specific core.
> + */
> +#if defined(CONFIG_DEBUG_FS)
> +static int amdgpu_debugfs_jpeg_sched_mask_set(void *data, u64 val)
> +{
> +	struct amdgpu_device *adev = (struct amdgpu_device *) data;
> +	uint32_t i, j;
> +	uint64_t mask = 0;
> +	struct amdgpu_ring *ring;
> +
> +	if (!adev)
> +		return -ENODEV;
> +
> +	mask = (1 << (adev->jpeg.num_jpeg_inst * adev->jpeg.num_jpeg_rings)) - 1;
This expression "1 << ..." is evaluated as 32 bits because of the plain 
"1". If
the shift is more than 32 then the result of the shift will be 0.

I suggest to change the expression to something like this (assuming ULL 
makes it 64 bits)
mask = (1ULL << (adev->jpeg.num_jpeg_inst * adev->jpeg.num_jpeg_rings)) - 1;
or
mask = ((u64)1 << (adev->jpeg.num_jpeg_inst * 
adev->jpeg.num_jpeg_rings)) - 1;

> [...]
>


More information about the amd-gfx mailing list