[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