[PATCH V2] drm/amdgpu/sdma5.2: add begin/end_use ring callbacks

Christian König ckoenig.leichtzumerken at gmail.com
Mon Dec 11 18:54:54 UTC 2023


Am 08.12.23 um 23:53 schrieb Alex Deucher:
> Add begin/end_use ring callbacks to disallow GFXOFF when
> SDMA work is submitted and allow it again afterward.
>
> This should avoid corner cases where GFXOFF is erroneously
> entered when SDMA is still active.  For now just allow/disallow
> GFXOFF in the begin and end helpers until we root cause the
> issue.  This should not impact power as SDMA usage is pretty
> minimal and GFXOSS should not be active when SDMA is active
> anyway, this just makes it explicit.
>
> v2: move everything into sdma5.2 code.  No reason for this
> to be generic at this point.
>
> Link: https://gitlab.freedesktop.org/drm/amd/-/issues/2220
> Reviewed-by: Mario Limonciello <mario.limonciello at amd.com> (v1)
> Tested-by: Mario Limonciello <mario.limonciello at amd.com> (v1)
> Signed-off-by: Alex Deucher <alexander.deucher at amd.com>

Maybe add a one line code comment explaining why we do this, with that 
done Reviewed-by: Christian König <christian.koenig at amd.com>

Christian.

> ---
>   drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c | 16 ++++++++++++++++
>   1 file changed, 16 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c b/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c
> index 2e35f3571774..89f7955739f7 100644
> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c
> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c
> @@ -1643,6 +1643,20 @@ static void sdma_v5_2_get_clockgating_state(void *handle, u64 *flags)
>   		*flags |= AMD_CG_SUPPORT_SDMA_LS;
>   }
>   
> +static void sdma_v5_2_ring_begin_use(struct amdgpu_ring *ring)
> +{
> +	struct amdgpu_device *adev = ring->adev;
> +
> +	amdgpu_gfx_off_ctrl(adev, false);
> +}
> +
> +static void sdma_v5_2_ring_end_use(struct amdgpu_ring *ring)
> +{
> +	struct amdgpu_device *adev = ring->adev;
> +
> +	amdgpu_gfx_off_ctrl(adev, true);
> +}
> +
>   const struct amd_ip_funcs sdma_v5_2_ip_funcs = {
>   	.name = "sdma_v5_2",
>   	.early_init = sdma_v5_2_early_init,
> @@ -1690,6 +1704,8 @@ static const struct amdgpu_ring_funcs sdma_v5_2_ring_funcs = {
>   	.test_ib = sdma_v5_2_ring_test_ib,
>   	.insert_nop = sdma_v5_2_ring_insert_nop,
>   	.pad_ib = sdma_v5_2_ring_pad_ib,
> +	.begin_use = sdma_v5_2_ring_begin_use,
> +	.end_use = sdma_v5_2_ring_end_use,
>   	.emit_wreg = sdma_v5_2_ring_emit_wreg,
>   	.emit_reg_wait = sdma_v5_2_ring_emit_reg_wait,
>   	.emit_reg_write_reg_wait = sdma_v5_2_ring_emit_reg_write_reg_wait,



More information about the amd-gfx mailing list