[PATCH V2] drm/amdgpu/sdma5.2: add begin/end_use ring callbacks
Mario Limonciello
mario.limonciello at amd.com
Sat Dec 9 14:47:23 UTC 2023
On 12/8/2023 16:53, Alex Deucher wrote:
> 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>
As SDMA5.2 is supported back to LTS ~5.15 I suggest also:
Cc: stable at vger.kernel.org # 5.15+
> ---
> 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