Hi Am 11.10.22 um 16:21 schrieb Jocelyn Falempe:
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@xxxxxxxxxx> Signed-off-by: Thomas Zimmermann <tzimmermann@xxxxxxx> --- 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.cindex 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);
Great thanks for testing. I'll add this to the next version. I wonder if that problem is in all ast chips or just this one. :/ Best regards Thomas
static void ast_primary_plane_helper_atomic_disable(struct drm_plane *plane,
-- Thomas Zimmermann Graphics Driver Developer SUSE Software Solutions Germany GmbH Maxfeldstr. 5, 90409 Nürnberg, Germany (HRB 36809, AG Nürnberg) Geschäftsführer: Ivo Totev
Attachment:
OpenPGP_signature
Description: OpenPGP digital signature