[PATCH 8/8] drm/ast: Avoid reprogramming primary-plane scanout address
Jocelyn Falempe
jfalempe at redhat.com
Tue Oct 11 14:21:44 UTC 2022
On 10/10/2022 12:36, Thomas Zimmermann wrote:
> Some AST-based BMCs stop display output for up to 5 seconds after
> reprogramming the scanout address. As the address is fixed, avoid
> re-setting the address' value.
>
> Reported-by: Jocelyn Falempe <jfalempe at redhat.com>
> Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
> ---
> drivers/gpu/drm/ast/ast_mode.c | 12 ++++++++++--
> 1 file changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c
> index 1b991658290b..54a9643d86ce 100644
> --- a/drivers/gpu/drm/ast/ast_mode.c
> +++ b/drivers/gpu/drm/ast/ast_mode.c
> @@ -672,9 +672,17 @@ static void ast_primary_plane_helper_atomic_update(struct drm_plane *plane,
> }
>
> ast_set_offset_reg(ast, fb);
> - ast_set_start_address_crt1(ast, (u32)ast_plane->offset);
>
> - ast_set_index_reg_mask(ast, AST_IO_SEQ_PORT, 0x1, 0xdf, 0x00);
> + /*
> + * Some BMCs stop scanning out the video signal after the driver
> + * reprogrammed the scanout address. This stalls display output
> + * for several seconds and makes the display unusable. Therefore
> + * only reprogram the address after enabling the plane.
> + */
> + if (!old_fb && fb) {
> + ast_set_start_address_crt1(ast, (u32)ast_plane->offset);
> + ast_set_index_reg_mask(ast, AST_IO_SEQ_PORT, 0x1, 0xdf, 0x00);
> + }
> }
I've tested the series, and BMC is still very slow with Gnome/Wayland.
It's because ast_set_offset_reg() also trigger a 5s freeze of the BMC.
I added this, and it works well:
if (!old_fb || old_fb->pitches[0] != fb->pitches[0])
ast_set_offset_reg(ast, fb);
>
> static void ast_primary_plane_helper_atomic_disable(struct drm_plane *plane,
--
Jocelyn
More information about the dri-devel
mailing list